qcacld-3.0: Add check for data tx rx based on vendor command

This commit adds check for data tx and rx packets based on vendor
command received from user.

Change-Id: Ieddb96d8778131ec5876c55462b518e1db552f57
CRs-Fixed: 3046231
This commit is contained in:
Vulupala Shashank Reddy
2021-09-03 16:58:53 +05:30
committed by Madan Koyyalamudi
parent 15f71d055b
commit f29e867e6b
2 changed files with 33 additions and 12 deletions

View File

@@ -244,12 +244,12 @@ pkt_capture_get_pktcap_mode_v2(void);
* @soc: dp_soc handle * @soc: dp_soc handle
* @event: wdi event * @event: wdi event
* @log_data: nbuf data * @log_data: nbuf data
* @vdev_id: vdev id * @peer_id: peer id
* @status: status * @status: status
* *
* Return: None * Return: None
*/ */
void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data, void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
u_int16_t vdev_id, uint32_t status); u_int16_t peer_id, uint32_t status);
#endif #endif
#endif /* end of _WLAN_PKT_CAPTURE_MAIN_H_ */ #endif /* end of _WLAN_PKT_CAPTURE_MAIN_H_ */

View File

@@ -252,11 +252,27 @@ pkt_capture_process_ppdu_stats(void *log_data)
} }
void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data, void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
u_int16_t vdev_id, uint32_t status) u_int16_t peer_id, uint32_t status)
{ {
uint8_t bssid[QDF_MAC_ADDR_SIZE]; uint8_t bssid[QDF_MAC_ADDR_SIZE];
uint8_t tid = 0; uint8_t tid = 0;
struct dp_soc *psoc = soc; struct dp_soc *psoc = soc;
struct wlan_objmgr_vdev *vdev;
struct pkt_capture_vdev_priv *vdev_priv;
struct pkt_capture_frame_filter *frame_filter;
uint16_t vdev_id = 0;
vdev = pkt_capture_get_vdev();
if (!vdev)
return;
vdev_priv = pkt_capture_vdev_get_priv(vdev);
if (!vdev_priv) {
pkt_capture_err("vdev priv is NULL");
return;
}
frame_filter = &vdev_priv->frame_filter;
switch (event) { switch (event) {
case WDI_EVENT_PKT_CAPTURE_TX_DATA: case WDI_EVENT_PKT_CAPTURE_TX_DATA:
@@ -274,10 +290,9 @@ void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
hal_tx_comp_get_status(&desc->comp, &tx_comp_status, hal_tx_comp_get_status(&desc->comp, &tx_comp_status,
psoc->hal_soc); psoc->hal_soc);
if (!(pkt_capture_get_pktcap_mode_v2() &
PKT_CAPTURE_MODE_DATA_ONLY)) { if (!frame_filter->data_tx_frame_filter)
return; return;
}
if (tx_comp_status.valid) if (tx_comp_status.valid)
pktcapture_hdr.ppdu_id = tx_comp_status.ppdu_id; pktcapture_hdr.ppdu_id = tx_comp_status.ppdu_id;
@@ -397,9 +412,17 @@ void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
case WDI_EVENT_PKT_CAPTURE_RX_DATA: case WDI_EVENT_PKT_CAPTURE_RX_DATA:
{ {
if (!(pkt_capture_get_pktcap_mode_v2() & qdf_nbuf_t nbuf = (qdf_nbuf_t)log_data;
PKT_CAPTURE_MODE_DATA_ONLY))
if (!frame_filter->data_rx_frame_filter) {
/*
* Rx offload packets are delivered only to pkt capture
* component and not to stack so free them.
*/
if (status == RX_OFFLOAD_PKT)
qdf_nbuf_free(nbuf);
return; return;
}
pkt_capture_msdu_process_pkts(bssid, log_data, vdev_id, soc, pkt_capture_msdu_process_pkts(bssid, log_data, vdev_id, soc,
status); status);
@@ -410,8 +433,7 @@ void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
{ {
qdf_nbuf_t nbuf = (qdf_nbuf_t)log_data; qdf_nbuf_t nbuf = (qdf_nbuf_t)log_data;
if (!(pkt_capture_get_pktcap_mode_v2() & if (!frame_filter->data_rx_frame_filter) {
PKT_CAPTURE_MODE_DATA_ONLY)) {
/* /*
* Rx offload packets are delivered only to pkt capture * Rx offload packets are delivered only to pkt capture
* component and not to stack so free them. * component and not to stack so free them.
@@ -432,8 +454,7 @@ void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data,
bool is_pkt_during_roam = false; bool is_pkt_during_roam = false;
uint32_t freq = 0; uint32_t freq = 0;
if (!(pkt_capture_get_pktcap_mode_v2() & if (!frame_filter->data_tx_frame_filter)
PKT_CAPTURE_MODE_DATA_ONLY))
return; return;
offload_deliver_msg = offload_deliver_msg =