From 81e3c36defdce2c023b8d54654abc1d703ec6232 Mon Sep 17 00:00:00 2001 From: Surabhi Vishnoi Date: Wed, 28 Jul 2021 00:12:30 +0530 Subject: [PATCH] qcacld-3.0: Fill the ppdu stats in tx status in pkt capture mode Ppdu stats related to transmitted msdu are received from firmware and queued to a list. Remove the received ppdu stats from front of list and fill in tx status of current msdu. Change-Id: I764aa909497971010202ce3decb3380a732ce12c CRs-Fixed: 3004483 --- .../core/inc/wlan_pkt_capture_data_txrx.h | 2 ++ .../core/src/wlan_pkt_capture_data_txrx.c | 34 +++++++++++++++++++ .../core/src/wlan_pkt_capture_main.c | 2 ++ 3 files changed, 38 insertions(+) diff --git a/components/pkt_capture/core/inc/wlan_pkt_capture_data_txrx.h b/components/pkt_capture/core/inc/wlan_pkt_capture_data_txrx.h index 14af46f9a125..e933c47ce78e 100644 --- a/components/pkt_capture/core/inc/wlan_pkt_capture_data_txrx.h +++ b/components/pkt_capture/core/inc/wlan_pkt_capture_data_txrx.h @@ -169,6 +169,7 @@ void pkt_capture_offload_deliver_indication_handler( * @dir: direction rx: 0 and tx: 1 * @status: tx status * @tx_retry_cnt: tx retry count + * @ppdu_id: ppdu_id of msdu */ struct pkt_capture_tx_hdr_elem_t { uint32_t timestamp; @@ -187,6 +188,7 @@ struct pkt_capture_tx_hdr_elem_t { uint8_t tx_retry_cnt; uint16_t framectrl; uint16_t seqno; + uint32_t ppdu_id; }; /** diff --git a/components/pkt_capture/core/src/wlan_pkt_capture_data_txrx.c b/components/pkt_capture/core/src/wlan_pkt_capture_data_txrx.c index ff6e9f703c96..911d3131b50c 100644 --- a/components/pkt_capture/core/src/wlan_pkt_capture_data_txrx.c +++ b/components/pkt_capture/core/src/wlan_pkt_capture_data_txrx.c @@ -31,6 +31,7 @@ #ifdef WLAN_FEATURE_PKT_CAPTURE_V2 #include "dp_internal.h" #include "cds_utils.h" +#include "htt_ppdu_stats.h" #endif #define RESERVE_BYTES (100) @@ -261,8 +262,12 @@ pkt_capture_update_tx_status( struct pkt_capture_tx_hdr_elem_t *pktcapture_hdr) { struct connection_info info[MAX_NUMBER_OF_CONC_CONNECTIONS]; + struct pkt_capture_vdev_priv *vdev_priv; struct wlan_objmgr_vdev *vdev = context; + htt_ppdu_stats_for_smu_tlv *smu; struct wlan_objmgr_psoc *psoc; + struct pkt_capture_ppdu_stats_q_node *q_node; + qdf_list_node_t *node; uint32_t conn_count; uint8_t vdev_id; int i; @@ -287,12 +292,41 @@ pkt_capture_update_tx_status( pkt_capture_tx_get_phy_info(pktcapture_hdr, tx_status); + vdev_priv = pkt_capture_vdev_get_priv(vdev); + if (qdf_unlikely(!vdev_priv)) + goto skip_ppdu_stats; + + /* Remove the ppdu stats from front of list and fill it in tx_status */ + qdf_spin_lock(&vdev_priv->lock_q); + if (QDF_STATUS_SUCCESS == + qdf_list_remove_front(&vdev_priv->ppdu_stats_q, &node)) { + q_node = qdf_container_of( + node, struct pkt_capture_ppdu_stats_q_node, node); + smu = (htt_ppdu_stats_for_smu_tlv *)(q_node->buf); + tx_status->prev_ppdu_id = smu->ppdu_id; + tx_status->start_seq = smu->start_seq; + tx_status->tid = smu->tid_num; + + if (smu->win_size == 8) + qdf_mem_copy(tx_status->ba_bitmap, smu->ba_bitmap, + 8 * sizeof(uint32_t)); + else if (smu->win_size == 2) + qdf_mem_copy(tx_status->ba_bitmap, smu->ba_bitmap, + 2 * sizeof(uint32_t)); + + qdf_mem_free(q_node); + } + qdf_spin_unlock(&vdev_priv->lock_q); + +skip_ppdu_stats: tx_status->tsft = (u_int64_t)(pktcapture_hdr->timestamp); tx_status->ant_signal_db = pktcapture_hdr->rssi_comb; tx_status->rssi_comb = pktcapture_hdr->rssi_comb; tx_status->tx_status = pktcapture_hdr->status; tx_status->tx_retry_cnt = pktcapture_hdr->tx_retry_cnt; + tx_status->ppdu_id = pktcapture_hdr->ppdu_id; tx_status->add_rtap_ext = true; + tx_status->add_rtap_ext2 = true; } #endif diff --git a/components/pkt_capture/core/src/wlan_pkt_capture_main.c b/components/pkt_capture/core/src/wlan_pkt_capture_main.c index 168819cbe845..9423a0598cfa 100644 --- a/components/pkt_capture/core/src/wlan_pkt_capture_main.c +++ b/components/pkt_capture/core/src/wlan_pkt_capture_main.c @@ -277,6 +277,8 @@ void pkt_capture_callback(void *soc, enum WDI_EVENT event, void *log_data, return; } + if (tx_comp_status.valid) + pktcapture_hdr.ppdu_id = tx_comp_status.ppdu_id; pktcapture_hdr.timestamp = tx_comp_status.tsf; pktcapture_hdr.preamble = tx_comp_status.pkt_type; pktcapture_hdr.mcs = tx_comp_status.mcs;