qcacmn: FR65980: Add HYBRID TX support for pktlog

- A new pktlog mode called "hybrid", is added for QCN9224 only.
- Create WDI event for hybrid mode
- Add dummy APIs for monitor filter setting
- Send WMI_PKTLOG_EVENT_HYBRID_TX to FW for umac TLV subscription

Change-Id: I47f4e14bfc766f29a0ab4a8c07ab19e0d919e66b
CRs-Fixed: 3074184
This commit is contained in:
Adwait Nayak
2021-11-19 02:27:48 +05:30
committed by Madan Koyyalamudi
orang tua 9a2423839d
melakukan 3664b4c5c2
14 mengubah file dengan 174 tambahan dan 1 penghapusan

Melihat File

@@ -567,6 +567,9 @@ enum WDI_EVENT {
WDI_EVENT_RX_CBF,
WDI_EVENT_PKT_CAPTURE_PPDU_STATS,
WDI_EVENT_HOST_SW_EVENT,
#ifdef QCA_WIFI_QCN9224
WDI_EVENT_HYBRID_TX,
#endif
/* End of new event items */
WDI_EVENT_LAST
};

Melihat File

@@ -3333,6 +3333,12 @@ struct dp_mon_ops monitor_ops_1_0 = {
dp_mon_filter_setup_rx_pkt_log_cbf_1_0,
.mon_filter_reset_rx_pkt_log_cbf =
dp_mon_filter_reset_rx_pktlog_cbf_1_0,
#ifdef QCA_WIFI_QCN9224
.mon_filter_setup_pktlog_hybrid =
dp_mon_filter_setup_pktlog_hybrid_1_0,
.mon_filter_reset_pktlog_hybrid =
dp_mon_filter_reset_pktlog_hybrid_1_0,
#endif
#endif
.mon_filter_update = dp_mon_filter_update_1_0,
.rx_mon_desc_pool_init = dp_rx_pdev_mon_desc_pool_init,

Melihat File

@@ -941,6 +941,17 @@ void dp_mon_filter_reset_rx_pktlog_cbf_1_0(struct dp_pdev *pdev)
srng_type = DP_MON_FILTER_SRNG_TYPE_RXDMA_MONITOR_STATUS;
mon_pdev->filter[mode][srng_type] = filter;
}
#ifdef QCA_WIFI_QCN9224
void dp_mon_filter_setup_pktlog_hybrid_1_0(struct dp_pdev *pdev)
{
dp_mon_filter_err("This mode is only supported for QCN9224");
}
void dp_mon_filter_reset_pktlog_hybrid_1_0(struct dp_pdev *pdev)
{
}
#endif
#endif /* WDI_EVENT_ENABLE */
#ifdef WLAN_DP_RESET_MON_BUF_RING_FILTER

Melihat File

@@ -198,6 +198,19 @@ void dp_mon_filter_setup_rx_pkt_log_cbf_1_0(struct dp_pdev *pdev);
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_rx_pktlog_cbf_1_0(struct dp_pdev *pdev);
#ifdef QCA_WIFI_QCN9224
/**
* dp_mon_filter_setup_pktlog_hybrid_1_0() - Setup the pktlog hybrid mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_setup_pktlog_hybrid_1_0(struct dp_pdev *pdev);
/**
* dp_mon_filter_reset_pktlog_hybrid_1_0() - Reset pktlog hybrid mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_pktlog_hybrid_1_0(struct dp_pdev *pdev);
#endif
#else
static inline void dp_mon_filter_setup_rx_pkt_log_full_1_0(struct dp_pdev *pdev)
{
@@ -222,6 +235,16 @@ static inline void dp_mon_filter_setup_rx_pkt_log_cbf_1_0(struct dp_pdev *pdev)
static inline void dp_mon_filter_reset_rx_pktlog_cbf_1_0(struct dp_pdev *pdev)
{
}
#ifdef QCA_WIFI_QCN9224
static inline void dp_mon_filter_setup_pktlog_hybrid_1_0(struct dp_pdev *pdev)
{
}
static inline void dp_mon_filter_reset_pktlog_hybrid_1_0(struct dp_pdev *pdev)
{
}
#endif
#endif
QDF_STATUS dp_mon_filter_update_1_0(struct dp_pdev *pdev);

Melihat File

@@ -883,6 +883,10 @@ struct dp_mon_ops monitor_ops_2_0 = {
dp_mon_filter_setup_rx_pkt_log_cbf_2_0,
.mon_filter_reset_rx_pkt_log_cbf =
dp_mon_filter_reset_rx_pktlog_cbf_2_0,
.mon_filter_setup_pktlog_hybrid =
dp_mon_filter_setup_pktlog_hybrid_2_0,
.mon_filter_reset_pktlog_hybrid =
dp_mon_filter_reset_pktlog_hybrid_2_0,
#endif
.mon_filter_update = dp_mon_filter_update_2_0,
.mon_rings_alloc = dp_pdev_mon_rings_alloc_2_0,

Melihat File

@@ -997,6 +997,14 @@ void dp_mon_filter_setup_rx_pkt_log_cbf_2_0(struct dp_pdev *pdev)
void dp_mon_filter_reset_rx_pktlog_cbf_2_0(struct dp_pdev *pdev)
{
}
void dp_mon_filter_setup_pktlog_hybrid_2_0(struct dp_pdev *pdev)
{
}
void dp_mon_filter_reset_pktlog_hybrid_2_0(struct dp_pdev *pdev)
{
}
#endif /* WDI_EVENT_ENABLE */
QDF_STATUS dp_mon_filter_update_2_0(struct dp_pdev *pdev)

Melihat File

@@ -204,6 +204,18 @@ void dp_mon_filter_setup_rx_pkt_log_cbf_2_0(struct dp_pdev *pdev);
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_rx_pktlog_cbf_2_0(struct dp_pdev *pdev);
/**
* dp_mon_filter_setup_pktlog_hybrid_2_0() - Setup the pktlog hybrid mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_setup_pktlog_hybrid_2_0(struct dp_pdev *pdev);
/**
* dp_mon_filter_reset_pktlog_hybrid_2_0() - Reset pktlog hybrid mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_pktlog_hybrid_2_0(struct dp_pdev *pdev);
#else
static inline void
dp_mon_filter_setup_rx_pkt_log_full_2_0(struct dp_pdev *pdev)
@@ -234,6 +246,16 @@ static inline void
dp_mon_filter_reset_rx_pktlog_cbf_2_0(struct dp_pdev *pdev)
{
}
static inline void
dp_mon_filter_setup_pktlog_hybrid_2_0(struct dp_pdev *pdev)
{
}
static inline void
dp_mon_filter_reset_pktlog_hybrid_2_0(struct dp_pdev *pdev)
{
}
#endif
/**

Melihat File

@@ -891,6 +891,36 @@ int dp_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event,
}
break;
#ifdef QCA_WIFI_QCN9224
case WDI_EVENT_HYBRID_TX:
if (mon_pdev->mvdev) {
/* Nothing needs to be done if monitor mode is
* enabled
*/
mon_pdev->pktlog_hybrid_mode = true;
return 0;
}
if (!mon_pdev->pktlog_hybrid_mode) {
mon_pdev->pktlog_hybrid_mode = true;
dp_mon_filter_setup_pktlog_hybrid(pdev);
if (dp_mon_filter_update(pdev) !=
QDF_STATUS_SUCCESS) {
dp_cdp_err("Set hybrid filters failed");
dp_mon_filter_reset_pktlog_hybrid(pdev);
mon_pdev->rx_pktlog_mode =
DP_RX_PKTLOG_DISABLED;
return 0;
}
if (mon_soc->reap_timer_init &&
!dp_mon_is_enable_reap_timer_non_pkt(pdev))
qdf_timer_mod(&mon_soc->mon_reap_timer,
DP_INTR_POLL_TIMER_MS);
}
break;
#endif
default:
/* Nothing needs to be done for other pktlog types */
break;
@@ -963,6 +993,12 @@ int dp_set_pktlog_wifi3(struct dp_pdev *pdev, uint32_t event,
mon_pdev->rx_pktlog_cbf = false;
break;
#ifdef QCA_WIFI_QCN9224
case WDI_EVENT_HYBRID_TX:
mon_pdev->pktlog_hybrid_mode = false;
break;
#endif
default:
/* Nothing needs to be done for other pktlog types */
break;

Melihat File

@@ -506,6 +506,10 @@ struct dp_mon_ops {
void (*mon_filter_reset_rx_pkt_log_lite)(struct dp_pdev *pdev);
void (*mon_filter_setup_rx_pkt_log_cbf)(struct dp_pdev *pdev);
void (*mon_filter_reset_rx_pkt_log_cbf)(struct dp_pdev *pdev);
#ifdef QCA_WIFI_QCN9224
void (*mon_filter_setup_pktlog_hybrid)(struct dp_pdev *pdev);
void (*mon_filter_reset_pktlog_hybrid)(struct dp_pdev *pdev);
#endif
#endif
QDF_STATUS (*mon_filter_update)(struct dp_pdev *pdev);
@@ -677,6 +681,10 @@ struct dp_mon_pdev {
/* Enable pktlog logging cbf */
bool rx_pktlog_cbf;
/* Enable pktlog logging hybrid */
#ifdef QCA_WIFI_QCN9224
bool pktlog_hybrid_mode;
#endif
bool tx_sniffer_enable;
/* mirror copy mode */
enum m_copy_mode mcopy_mode;

Melihat File

@@ -254,6 +254,26 @@ void dp_mon_filter_reset_rx_pktlog_cbf(struct dp_pdev *pdev)
if (mon_ops && mon_ops->mon_filter_reset_rx_pkt_log_cbf)
mon_ops->mon_filter_reset_rx_pkt_log_cbf(pdev);
}
#ifdef QCA_WIFI_QCN9224
void dp_mon_filter_setup_pktlog_hybrid(struct dp_pdev *pdev)
{
struct dp_mon_ops *mon_ops = NULL;
mon_ops = dp_mon_ops_get(pdev->soc);
if (mon_ops && mon_ops->mon_filter_setup_pktlog_hybrid)
mon_ops->mon_filter_setup_pktlog_hybrid(pdev);
}
void dp_mon_filter_reset_pktlog_hybrid(struct dp_pdev *pdev)
{
struct dp_mon_ops *mon_ops = NULL;
mon_ops = dp_mon_ops_get(pdev->soc);
if (mon_ops && mon_ops->mon_filter_reset_pktlog_hybrid)
mon_ops->mon_filter_reset_pktlog_hybrid(pdev);
}
#endif
#endif /* WDI_EVENT_ENABLE */
QDF_STATUS dp_mon_filter_update(struct dp_pdev *pdev)

Melihat File

@@ -80,6 +80,9 @@ enum dp_mon_filter_mode {
DP_MON_FILTER_PKT_LOG_FULL_MODE,
DP_MON_FILTER_PKT_LOG_LITE_MODE,
DP_MON_FILTER_PKT_LOG_CBF_MODE,
#ifdef QCA_WIFI_QCN9224
DP_MON_FILTER_PKT_LOG_HYBRID_MODE,
#endif
#endif /* WDI_EVENT_ENABLE */
DP_MON_FILTER_MAX_MODE
};
@@ -220,6 +223,21 @@ void dp_mon_filter_setup_rx_pkt_log_cbf(struct dp_pdev *pdev);
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_rx_pktlog_cbf(struct dp_pdev *pdev);
#ifdef QCA_WIFI_QCN9224
/**
* dp_mon_filter_setup_pktlog_hybrid() - Setup the pktlog hybrid mode filter
* in the radio object.
* @pdev: DP pdev handle
*/
void dp_mon_filter_setup_pktlog_hybrid(struct dp_pdev *pdev);
/**
* dp_mon_filter_reset_pktlog_hybrid() - Reset the pktlog hybrid mode filter
* @pdev: DP pdev handle
*/
void dp_mon_filter_reset_pktlog_hybrid(struct dp_pdev *pdev);
#endif
#endif /* WDI_EVENT_ENABLE */
/**

Melihat File

@@ -1,5 +1,6 @@
/*
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -56,6 +57,9 @@ wdi_event_subscribe PKTLOG_SW_EVENT_SUBSCRIBER;
wdi_event_subscribe PKTLOG_LITE_T2H_SUBSCRIBER;
wdi_event_subscribe PKTLOG_LITE_RX_SUBSCRIBER;
wdi_event_subscribe PKTLOG_OFFLOAD_SUBSCRIBER;
#ifdef QCA_WIFI_QCN9224
wdi_event_subscribe PKTLOG_HYBRID_SUBSCRIBER;
#endif
struct ol_pl_arch_dep_funcs ol_pl_funcs = {
.pktlog_init = pktlog_init,

Melihat File

@@ -6337,6 +6337,9 @@ enum {
WMI_HOST_PKTLOG_EVENT_TX_DATA_CAPTURE_BIT,
WMI_HOST_PKTLOG_EVENT_PHY_LOGGING_BIT,
WMI_HOST_PKTLOG_EVENT_CBF_BIT,
#ifdef QCA_WIFI_QCN9224
WMI_HOST_PKTLOG_EVENT_HYBRID_TX_BIT,
#endif
};
typedef enum {
@@ -6363,6 +6366,10 @@ typedef enum {
BIT(WMI_HOST_PKTLOG_EVENT_PHY_LOGGING_BIT),
WMI_HOST_PKTLOG_EVENT_CBF =
BIT(WMI_HOST_PKTLOG_EVENT_CBF_BIT),
#ifdef QCA_WIFI_QCN9224
WMI_HOST_PKTLOG_EVENT_HYBRID_TX =
BIT(WMI_HOST_PKTLOG_EVENT_HYBRID_TX_BIT),
#endif
} WMI_HOST_PKTLOG_EVENT;
/**

Melihat File

@@ -563,6 +563,9 @@ static const uint32_t pktlog_event_tlv[] = {
[WMI_HOST_PKTLOG_EVENT_TX_DATA_CAPTURE_BIT] = 0,
[WMI_HOST_PKTLOG_EVENT_PHY_LOGGING_BIT] = WMI_PKTLOG_EVENT_PHY,
[WMI_HOST_PKTLOG_EVENT_CBF_BIT] = WMI_PKTLOG_EVENT_CBF,
#ifdef QCA_WIFI_QCN9224
[WMI_HOST_PKTLOG_EVENT_HYBRID_TX_BIT] = WMI_PKTLOG_EVENT_HYBRID_TX,
#endif
};
/**