diff options
| -rw-r--r-- | core/cds/inc/cds_sched.h | 6 | ||||
| -rw-r--r-- | core/cds/src/cds_sched.c | 2 | ||||
| -rw-r--r-- | core/dp/ol/inc/ol_txrx_osif_api.h | 6 | ||||
| -rw-r--r-- | core/dp/txrx/ol_rx.c | 3 | ||||
| -rw-r--r-- | core/dp/txrx/ol_rx_defrag.c | 3 | ||||
| -rw-r--r-- | core/dp/txrx/ol_tx_send.c | 13 | ||||
| -rw-r--r-- | core/dp/txrx/ol_txrx.c | 34 | ||||
| -rw-r--r-- | core/dp/txrx/ol_txrx.h | 12 | ||||
| -rw-r--r-- | core/dp/txrx/ol_txrx_types.h | 1 | ||||
| -rw-r--r-- | core/wma/src/wma_mgmt.c | 1 |
10 files changed, 59 insertions, 22 deletions
diff --git a/core/cds/inc/cds_sched.h b/core/cds/inc/cds_sched.h index 835b5a04c082..eae8de839f91 100644 --- a/core/cds/inc/cds_sched.h +++ b/core/cds/inc/cds_sched.h @@ -43,6 +43,7 @@ #include "cds_config.h" #include "cds_reg_service.h" #include "qdf_cpuhp.h" +#include "ol_txrx.h" #define TX_POST_EVENT 0x001 #define TX_SUSPEND_EVENT 0x002 @@ -90,7 +91,8 @@ typedef void (*cds_ol_rx_thread_cb)(void *context, void *rxpkt, uint16_t staid); typedef void (*cds_ol_mon_thread_cb)( void *context, void *monpkt, uint8_t vdev_id, uint8_t tid, - uint8_t status, bool pkt_format); + struct ol_mon_tx_status pkt_tx_status, + bool pkt_format); typedef int (*send_mode_change_event_cb)(void); @@ -140,7 +142,7 @@ struct cds_ol_mon_pkt { uint8_t tid; /* Tx packet status */ - uint8_t status; + struct ol_mon_tx_status pkt_tx_status; /* 0 = 802.3 format , 1 = 802.11 format */ bool pkt_format; diff --git a/core/cds/src/cds_sched.c b/core/cds/src/cds_sched.c index 5bb7e5bdd6e3..a1f8cf6c4ea4 100644 --- a/core/cds/src/cds_sched.c +++ b/core/cds/src/cds_sched.c @@ -1565,7 +1565,7 @@ static void cds_mon_from_queue(p_cds_sched_context pschedcontext) vdev_id = pkt->vdev_id; tid = pkt->tid; pkt->callback(pkt->context, pkt->monpkt, vdev_id, - tid, pkt->status, pkt->pkt_format); + tid, pkt->pkt_tx_status, pkt->pkt_format); cds_free_ol_mon_pkt(pschedcontext, pkt); spin_lock_bh(&pschedcontext->ol_mon_queue_lock); } diff --git a/core/dp/ol/inc/ol_txrx_osif_api.h b/core/dp/ol/inc/ol_txrx_osif_api.h index d2fe056a63d2..c89c56da105b 100644 --- a/core/dp/ol/inc/ol_txrx_osif_api.h +++ b/core/dp/ol/inc/ol_txrx_osif_api.h @@ -83,7 +83,7 @@ void ol_rx_data_process(struct ol_txrx_peer_t *peer, * @mon_buf_list: netbuf list * @type: data process type * @tid: tid number - * @status: Tx status + * @pkt_tx_status: Tx status * @pktformat: Frame format * * Return: none @@ -91,7 +91,9 @@ void ol_rx_data_process(struct ol_txrx_peer_t *peer, void ol_txrx_mon_data_process(uint8_t vdev_id, qdf_nbuf_t mon_buf_list, enum mon_data_process_type type, - uint8_t tid, uint8_t status, bool pktformat); + uint8_t tid, + struct ol_mon_tx_status pkt_tx_status, + bool pktformat); void ol_txrx_flush_rx_frames(struct ol_txrx_peer_t *peer, bool drop); diff --git a/core/dp/txrx/ol_rx.c b/core/dp/txrx/ol_rx.c index 17f3696b2ab3..e4310496dd35 100644 --- a/core/dp/txrx/ol_rx.c +++ b/core/dp/txrx/ol_rx.c @@ -1476,6 +1476,7 @@ ol_rx_in_order_indication_handler(ol_txrx_pdev_handle pdev, uint32_t filled = 0; uint8_t vdev_id; bool is_pkt_capture_flow_id = false; + struct ol_mon_tx_status pkt_tx_status = {0}; if (tid >= OL_TXRX_NUM_EXT_TIDS) { ol_txrx_err("%s: invalid tid, %u\n", __FUNCTION__, tid); @@ -1585,7 +1586,7 @@ ol_rx_in_order_indication_handler(ol_txrx_pdev_handle pdev, if (head_mon_msdu) ol_txrx_mon_data_process( vdev_id, head_mon_msdu, - PROCESS_TYPE_DATA_RX, 0, 0, + PROCESS_TYPE_DATA_RX, 0, pkt_tx_status, TXRX_PKT_FORMAT_8023); if (is_pkt_capture_flow_id) { diff --git a/core/dp/txrx/ol_rx_defrag.c b/core/dp/txrx/ol_rx_defrag.c index 4373999b4467..84045eb8ad58 100644 --- a/core/dp/txrx/ol_rx_defrag.c +++ b/core/dp/txrx/ol_rx_defrag.c @@ -684,6 +684,7 @@ ol_rx_defrag(ol_txrx_pdev_handle pdev, struct ieee80211_frame *wh; uint8_t key[DEFRAG_IEEE80211_KEY_LEN]; htt_pdev_handle htt_pdev = pdev->htt_pdev; + struct ol_mon_tx_status pkt_tx_status = {0}; vdev = peer->vdev; @@ -832,7 +833,7 @@ ol_rx_defrag(ol_txrx_pdev_handle pdev, if (head_mon_msdu) ol_txrx_mon_data_process( vdev->vdev_id, head_mon_msdu, - PROCESS_TYPE_DATA_RX, 0, 0, + PROCESS_TYPE_DATA_RX, 0, pkt_tx_status, TXRX_PKT_FORMAT_8023); } diff --git a/core/dp/txrx/ol_tx_send.c b/core/dp/txrx/ol_tx_send.c index da4ab21e38c1..1b69f9c0c327 100644 --- a/core/dp/txrx/ol_tx_send.c +++ b/core/dp/txrx/ol_tx_send.c @@ -835,6 +835,10 @@ ol_tx_process_mon_tx_completion( qdf_nbuf_t netbuf; int nbuf_len; struct qdf_tso_seg_elem_t *tso_seg = NULL; + struct ol_mon_tx_status pkt_tx_status = {0}; + + pkt_tx_status.status = status; + pkt_tx_status.tx_retry_cnt = payload->tx_retry_cnt; qdf_assert(tx_desc); @@ -928,7 +932,7 @@ ol_tx_process_mon_tx_completion( ol_txrx_mon_data_process(tx_desc->vdev_id, netbuf, PROCESS_TYPE_DATA_TX_COMPL, - tid, status, TXRX_PKT_FORMAT_8023); + tid, pkt_tx_status, TXRX_PKT_FORMAT_8023); } void @@ -936,7 +940,7 @@ ol_tx_offload_deliver_indication_handler(ol_txrx_pdev_handle pdev, void *msg) { int nbuf_len; qdf_nbuf_t netbuf; - uint8_t status; + struct ol_mon_tx_status pkt_tx_status = {0}; uint8_t tid = 0; bool pkt_format; u_int32_t *msg_word = (u_int32_t *)msg; @@ -974,7 +978,8 @@ ol_tx_offload_deliver_indication_handler(ol_txrx_pdev_handle pdev, void *msg) qdf_mem_copy(qdf_nbuf_data(netbuf), txhdr, sizeof(struct htt_tx_data_hdr_information)); - status = offload_deliver_msg->status; + pkt_tx_status.status = offload_deliver_msg->status; + pkt_tx_status.tx_retry_cnt = offload_deliver_msg->tx_retry_cnt; pkt_format = offload_deliver_msg->format; tid = offload_deliver_msg->tid_num; /* Is FW sends offload data during roaming */ @@ -985,7 +990,7 @@ ol_tx_offload_deliver_indication_handler(ol_txrx_pdev_handle pdev, void *msg) ol_txrx_mon_data_process( vdev_id, netbuf, PROCESS_TYPE_DATA_TX, - tid, status, pkt_format); + tid, pkt_tx_status, pkt_format); } /** diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c index 07692b6347b7..be2929374b23 100644 --- a/core/dp/txrx/ol_txrx.c +++ b/core/dp/txrx/ol_txrx.c @@ -5471,14 +5471,15 @@ static inline int ol_txrx_drop_nbuf_list(qdf_nbuf_t buf_list) * @nbuf_list: netbuf list * @vdev_id: vdev id for which packet is captured * @tid: tid number - * @status: Tx status + * @pkt_tx_status: Tx status * @pktformat: Frame format * * Return: none */ static void ol_txrx_mon_mgmt_cb(void *ppdev, void *nbuf_list, uint8_t vdev_id, - uint8_t tid, uint8_t status, bool pkt_format) + uint8_t tid, struct ol_mon_tx_status pkt_tx_status, + bool pkt_format) { struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev; uint8_t drop_count; @@ -5529,6 +5530,7 @@ bool ol_txrx_mon_mgmt_process(struct mon_rx_status *txrx_status, struct cds_ol_mon_pkt *pkt; ol_txrx_pdev_handle pdev = cds_get_context(QDF_MODULE_ID_TXRX); p_cds_sched_context sched_ctx = get_cds_sched_ctxt(); + struct ol_mon_tx_status pkt_tx_status = {0}; if (unlikely(!sched_ctx)) return false; @@ -5554,7 +5556,7 @@ bool ol_txrx_mon_mgmt_process(struct mon_rx_status *txrx_status, pkt->monpkt = (void *)nbuf; pkt->vdev_id = HTT_INVALID_VDEV; pkt->tid = HTT_INVALID_TID; - pkt->status = status; + pkt->pkt_tx_status = pkt_tx_status; pkt->pkt_format = TXRX_PKT_FORMAT_80211; cds_indicate_monpkt(sched_ctx, pkt); @@ -5859,6 +5861,7 @@ ol_txrx_update_tx_status(struct ol_txrx_pdev_t *pdev, tx_status->ant_signal_db = mon_hdr->rssi_comb; tx_status->tx_status = mon_hdr->status; tx_status->add_rtap_ext = true; + tx_status->tx_retry_cnt = mon_hdr->tx_retry_cnt; } /** @@ -5868,14 +5871,15 @@ ol_txrx_update_tx_status(struct ol_txrx_pdev_t *pdev, * @nbuf_list: netbuf list * @vdev_id: vdev id for which packet is captured * @tid: tid number - * @status: Tx status + * @pkt_tx_status: Tx status * @pktformat: Frame format * * Return: none */ static void ol_txrx_mon_tx_data_cb(void *ppdev, void *nbuf_list, uint8_t vdev_id, - uint8_t tid, uint8_t status, bool pkt_format) + uint8_t tid, struct ol_mon_tx_status pkt_tx_status, + bool pkt_format) { struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev; qdf_nbuf_t msdu, next_buf; @@ -5947,7 +5951,8 @@ ol_txrx_mon_tx_data_cb(void *ppdev, void *nbuf_list, uint8_t vdev_id, mon_hdr.sgi = cmpl_desc->sgi; mon_hdr.ldpc = cmpl_desc->ldpc; mon_hdr.beamformed = cmpl_desc->beamformed; - mon_hdr.status = status; + mon_hdr.status = pkt_tx_status.status; + mon_hdr.tx_retry_cnt = pkt_tx_status.tx_retry_cnt; qdf_nbuf_pull_head( msdu, @@ -6052,6 +6057,7 @@ ol_txrx_mon_tx_data_cb(void *ppdev, void *nbuf_list, uint8_t vdev_id, msdu = next_buf; } + return; free_buf: @@ -6065,14 +6071,15 @@ free_buf: * @nbuf_list: netbuf list * @vdev_id: vdev id for which packet is captured * @tid: tid number - * @status: Tx status + * @pkt_tx_status: Tx status * @pktformat: Frame format * * Return: none */ static void ol_txrx_mon_rx_data_cb(void *ppdev, void *nbuf_list, uint8_t vdev_id, - uint8_t tid, uint8_t status, bool pkt_format) + uint8_t tid, struct ol_mon_tx_status pkt_tx_status, + bool pkt_format) { struct ol_txrx_pdev_t *pdev = (struct ol_txrx_pdev_t *)ppdev; qdf_nbuf_t buf_list = (qdf_nbuf_t)nbuf_list; @@ -6161,8 +6168,9 @@ ol_txrx_mon_rx_data_cb(void *ppdev, void *nbuf_list, uint8_t vdev_id, ol_htt_mon_note_chan(pdev, chan); htt_rx_mon_get_rx_status(pdev->htt_pdev, rx_desc, &rx_status); - rx_status.tx_status = status; + rx_status.tx_status = pkt_tx_status.status; rx_status.add_rtap_ext = true; + rx_status.tx_retry_cnt = pkt_tx_status.tx_retry_cnt; /* clear IEEE80211_RADIOTAP_F_FCS flag*/ rx_status.rtap_flags &= ~(BIT(4)); @@ -6233,13 +6241,17 @@ ol_txrx_pktcapture_status_map(uint8_t status) void ol_txrx_mon_data_process(uint8_t vdev_id, qdf_nbuf_t mon_buf_list, enum mon_data_process_type type, - uint8_t tid, uint8_t status, bool pkt_format) + uint8_t tid, + struct ol_mon_tx_status pkt_tx_status, + bool pkt_format) { uint8_t drop_count; struct cds_ol_mon_pkt *pkt; ol_txrx_pdev_handle pdev = cds_get_context(QDF_MODULE_ID_TXRX); p_cds_sched_context sched_ctx = get_cds_sched_ctxt(); cds_ol_mon_thread_cb callback = NULL; + pkt_tx_status.status = + ol_txrx_pktcapture_status_map(pkt_tx_status.status); if (!pdev) { ol_txrx_err("pdev is NULL"); @@ -6269,7 +6281,7 @@ void ol_txrx_mon_data_process(uint8_t vdev_id, pkt->monpkt = (void *)mon_buf_list; pkt->vdev_id = vdev_id; pkt->tid = tid; - pkt->status = ol_txrx_pktcapture_status_map(status); + pkt->pkt_tx_status = pkt_tx_status; pkt->pkt_format = pkt_format; cds_indicate_monpkt(sched_ctx, pkt); return; diff --git a/core/dp/txrx/ol_txrx.h b/core/dp/txrx/ol_txrx.h index 40c77a5e2c4c..a4498059c839 100644 --- a/core/dp/txrx/ol_txrx.h +++ b/core/dp/txrx/ol_txrx.h @@ -225,4 +225,16 @@ enum pktcapture_tx_status { pktcapture_tx_status_discard, pktcapture_tx_status_no_ack, }; + +/* + * struct ol_mon_tx_status - tx packets info + * @status: tx status + * @tx_retry_cnt: tx retry count + * + */ + +struct ol_mon_tx_status { + uint8_t status; + uint8_t tx_retry_cnt; +}; #endif /* _OL_TXRX__H_ */ diff --git a/core/dp/txrx/ol_txrx_types.h b/core/dp/txrx/ol_txrx_types.h index fe230839a151..3203a75ebeb0 100644 --- a/core/dp/txrx/ol_txrx_types.h +++ b/core/dp/txrx/ol_txrx_types.h @@ -576,6 +576,7 @@ struct ol_txrx_mon_hdr_elem_t { bool beamformed; bool dir; /* rx:0 , tx:1 */ uint8_t status; /* tx status */ + uint8_t tx_retry_cnt; }; /* diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index 09cbd9772617..bb3a22b820ba 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -2895,6 +2895,7 @@ wma_process_mon_mgmt_tx_data(wmi_mgmt_hdr *hdr, txrx_status.rate = ((txrx_status.rate == 6 /* Mbps */) ? 0x0c : 0x02); txrx_status.tx_status = status; txrx_status.add_rtap_ext = true; + txrx_status.tx_retry_cnt = hdr->tx_retry_cnt; wh = (struct ieee80211_frame *)qdf_nbuf_data(nbuf); wh->i_fc[1] &= ~IEEE80211_FC1_WEP; |
