diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index f61c605c5e..5ae1c89fe5 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -748,6 +748,7 @@ enum wlan_op_subtype { * @vdev_stats_id: Stats ID of the vdev * @op_mode: Operation mode of the vdev * @subtype: subtype of the vdev + * @qdf_opmode: Operation mode of the vdev * @mld_mac_addr: MLD mac addr of the current vdev. */ struct cdp_vdev_info { @@ -756,6 +757,7 @@ struct cdp_vdev_info { uint8_t vdev_stats_id; enum wlan_op_mode op_mode; enum wlan_op_subtype subtype; + enum QDF_OPMODE qdf_opmode; #ifdef WLAN_FEATURE_11BE_MLO uint8_t *mld_mac_addr; #endif diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 48b40279a7..5c0a12723e 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -3697,6 +3697,7 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc, uint8_t vdev_id = vdev_info->vdev_id; enum wlan_op_mode op_mode = vdev_info->op_mode; enum wlan_op_subtype subtype = vdev_info->subtype; + enum QDF_OPMODE qdf_opmode = vdev_info->qdf_opmode; uint8_t vdev_stats_id = vdev_info->vdev_stats_id; vdev_context_size = @@ -3724,6 +3725,7 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc, vdev->vdev_stats_id = vdev_stats_id; vdev->opmode = op_mode; vdev->subtype = subtype; + vdev->qdf_opmode = qdf_opmode; vdev->osdev = soc->osdev; vdev->osif_rx = NULL; diff --git a/dp/wifi3.0/dp_tx.c b/dp/wifi3.0/dp_tx.c index 8dada2215b..b6422e33a0 100644 --- a/dp/wifi3.0/dp_tx.c +++ b/dp/wifi3.0/dp_tx.c @@ -859,19 +859,20 @@ struct dp_tx_ext_desc_elem_s *dp_tx_prepare_ext_desc(struct dp_vdev *vdev, * @skb: skb to be traced * @msdu_id: msdu_id of the packet * @vdev_id: vdev_id of the packet + * @op_mode: Vdev Operation mode * * Return: None */ #ifdef DP_DISABLE_TX_PKT_TRACE static void dp_tx_trace_pkt(struct dp_soc *soc, qdf_nbuf_t skb, uint16_t msdu_id, - uint8_t vdev_id) + uint8_t vdev_id, enum QDF_OPMODE op_mode) { } #else static void dp_tx_trace_pkt(struct dp_soc *soc, qdf_nbuf_t skb, uint16_t msdu_id, - uint8_t vdev_id) + uint8_t vdev_id, enum QDF_OPMODE op_mode) { if (dp_is_tput_high(soc)) return; @@ -883,9 +884,11 @@ static void dp_tx_trace_pkt(struct dp_soc *soc, QDF_TRACE_DEFAULT_PDEV_ID, qdf_nbuf_data_addr(skb), sizeof(qdf_nbuf_data(skb)), - msdu_id, vdev_id, 0)); + msdu_id, vdev_id, 0, + op_mode)); - qdf_dp_trace_log_pkt(vdev_id, skb, QDF_TX, QDF_TRACE_DEFAULT_PDEV_ID); + qdf_dp_trace_log_pkt(vdev_id, skb, QDF_TX, QDF_TRACE_DEFAULT_PDEV_ID, + op_mode); DPTRACE(qdf_dp_trace_data_pkt(skb, QDF_TRACE_DEFAULT_PDEV_ID, QDF_DP_TRACE_LI_DP_TX_PACKET_RECORD, @@ -1194,7 +1197,8 @@ struct dp_tx_desc_s *dp_tx_prepare_desc_single(struct dp_vdev *vdev, tx_desc->length = qdf_nbuf_headlen(nbuf); tx_desc->shinfo_addr = skb_end_pointer(nbuf); - dp_tx_trace_pkt(soc, nbuf, tx_desc->id, vdev->vdev_id); + dp_tx_trace_pkt(soc, nbuf, tx_desc->id, vdev->vdev_id, + vdev->qdf_opmode); if (qdf_unlikely(vdev->multipass_en)) { if (!dp_tx_multipass_process(soc, vdev, nbuf, msdu_info)) @@ -1335,7 +1339,8 @@ static struct dp_tx_desc_s *dp_tx_prepare_desc(struct dp_vdev *vdev, tx_desc->pdev = pdev; tx_desc->pkt_offset = 0; - dp_tx_trace_pkt(soc, nbuf, tx_desc->id, vdev->vdev_id); + dp_tx_trace_pkt(soc, nbuf, tx_desc->id, vdev->vdev_id, + vdev->qdf_opmode); /* Handle scattered frames - TSO/SG/ME */ /* Allocate and prepare an extension descriptor for scattered frames */ @@ -5292,6 +5297,7 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc, qdf_nbuf_t nbuf = tx_desc->nbuf; enum qdf_dp_tx_rx_status dp_status; uint8_t link_id = 0; + enum QDF_OPMODE op_mode = QDF_MAX_NO_OF_MODE; if (!nbuf) { dp_info_rl("invalid tx descriptor. nbuf NULL"); @@ -5302,13 +5308,6 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc, length = dp_tx_get_pkt_len(tx_desc); dp_status = dp_tx_hw_to_qdf(ts->status); - DPTRACE(qdf_dp_trace_ptr(tx_desc->nbuf, - QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD, - QDF_TRACE_DEFAULT_PDEV_ID, - qdf_nbuf_data_addr(nbuf), - sizeof(qdf_nbuf_data(nbuf)), - tx_desc->id, ts->status, dp_status)); - dp_tx_comp_debug("-------------------- \n" "Tx Completion Stats: \n" "-------------------- \n" @@ -5347,12 +5346,13 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc, if (!txrx_peer) { dp_info_rl("peer is null or deletion in progress"); DP_STATS_INC_PKT(soc, tx.tx_invalid_peer, 1, length); - goto out; + goto out_log; } vdev = txrx_peer->vdev; link_id = dp_tx_get_link_id_from_ppdu_id(soc, ts, txrx_peer, vdev); + op_mode = vdev->qdf_opmode; dp_tx_update_connectivity_stats(soc, vdev, tx_desc, ts->status); dp_tx_update_uplink_delay(soc, vdev, ts); @@ -5410,6 +5410,13 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc, ts->ppdu_id, link_id); #endif +out_log: + DPTRACE(qdf_dp_trace_ptr(tx_desc->nbuf, + QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD, + QDF_TRACE_DEFAULT_PDEV_ID, + qdf_nbuf_data_addr(nbuf), + sizeof(qdf_nbuf_data(nbuf)), + tx_desc->id, ts->status, dp_status, op_mode)); out: return; } diff --git a/dp/wifi3.0/dp_types.h b/dp/wifi3.0/dp_types.h index 4334bba962..f2c662513d 100644 --- a/dp/wifi3.0/dp_types.h +++ b/dp/wifi3.0/dp_types.h @@ -4064,6 +4064,8 @@ struct dp_vdev { /* Flag to indicate if to_fw should be set for tx pkts on this vdev */ bool to_fw; #endif + /* QDF VDEV operating mode */ + enum QDF_OPMODE qdf_opmode; }; enum { diff --git a/qdf/inc/qdf_trace.h b/qdf/inc/qdf_trace.h index 204bc21383..ce6718fe4a 100644 --- a/qdf/inc/qdf_trace.h +++ b/qdf/inc/qdf_trace.h @@ -933,11 +933,13 @@ void qdf_dp_set_no_of_record(uint32_t val); * @skb: skb pointer * @dir: direction * @pdev_id: pdev_id + * @op_mode: Vdev Operation mode * * Return: true: some protocol was logged, false: no protocol was logged. */ bool qdf_dp_trace_log_pkt(uint8_t vdev_id, struct sk_buff *skb, - enum qdf_proto_dir dir, uint8_t pdev_id); + enum qdf_proto_dir dir, uint8_t pdev_id, + enum QDF_OPMODE op_mode); /** * qdf_dp_trace_init() - enables the DP trace @@ -1134,13 +1136,15 @@ enum qdf_dp_tx_rx_status qdf_dp_get_status_from_a_status(uint8_t status); * @msdu_id: msdu_id * @buf_arg_status: return status * @qdf_tx_status: qdf tx rx status + * @op_mode: Vdev Operation mode * * Return: none */ void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, uint8_t pdev_id, uint8_t *data, uint8_t size, uint16_t msdu_id, uint16_t buf_arg_status, - enum qdf_dp_tx_rx_status qdf_tx_status); + enum qdf_dp_tx_rx_status qdf_tx_status, + enum QDF_OPMODE op_mode); /** * qdf_dp_trace_throttle_live_mode() - Throttle DP Trace live mode @@ -1358,7 +1362,8 @@ void qdf_dp_track_noack_check(qdf_nbuf_t nbuf, enum qdf_proto_subtype *subtype); #else static inline bool qdf_dp_trace_log_pkt(uint8_t vdev_id, struct sk_buff *skb, - enum qdf_proto_dir dir, uint8_t pdev_id) + enum qdf_proto_dir dir, uint8_t pdev_id, + enum QDF_OPMODE op_mode) { return false; } diff --git a/qdf/linux/src/qdf_trace.c b/qdf/linux/src/qdf_trace.c index b0939fa415..a04cf326fe 100644 --- a/qdf/linux/src/qdf_trace.c +++ b/qdf/linux/src/qdf_trace.c @@ -1721,14 +1721,19 @@ uint8_t qdf_eapol_get_key_type(uint8_t *data, enum qdf_proto_subtype subtype) * @type: Protocol type * @subtype: Protocol subtype * @dir: Rx or Tx + * @op_mode: Vdev Operation mode * * Return: true or false */ static inline bool qdf_skip_wlan_connectivity_log(enum qdf_proto_type type, enum qdf_proto_subtype subtype, - enum qdf_proto_dir dir) + enum qdf_proto_dir dir, + enum QDF_OPMODE op_mode) { + if (op_mode != QDF_STA_MODE) + return true; + if (dir == QDF_RX && type == QDF_PROTO_TYPE_DHCP && (subtype == QDF_PROTO_DHCP_DISCOVER || subtype == QDF_PROTO_DHCP_REQUEST)) @@ -1743,6 +1748,7 @@ bool qdf_skip_wlan_connectivity_log(enum qdf_proto_type type, * @subtype: Protocol subtype * @dir: Rx or Tx * @qdf_tx_status: Tx completion status + * @op_mode: Vdev Operation mode * @vdev_id: DP vdev ID * @data: skb data pointer * @@ -1753,13 +1759,14 @@ void qdf_fill_wlan_connectivity_log(enum qdf_proto_type type, enum qdf_proto_subtype subtype, enum qdf_proto_dir dir, enum qdf_dp_tx_rx_status qdf_tx_status, + enum QDF_OPMODE op_mode, uint8_t vdev_id, uint8_t *data) { uint8_t pkt_type; WLAN_HOST_DIAG_EVENT_DEF(wlan_diag_event, struct wlan_diag_packet_info); - if (qdf_skip_wlan_connectivity_log(type, subtype, dir)) + if (qdf_skip_wlan_connectivity_log(type, subtype, dir, op_mode)) return; qdf_mem_zero(&wlan_diag_event, sizeof(wlan_diag_event)); @@ -1812,6 +1819,7 @@ void qdf_fill_wlan_connectivity_log(enum qdf_proto_type type, enum qdf_proto_subtype subtype, enum qdf_proto_dir dir, enum qdf_dp_tx_rx_status qdf_tx_status, + enum QDF_OPMODE op_mode, uint8_t vdev_id, uint8_t *data) { } @@ -1823,11 +1831,13 @@ void qdf_fill_wlan_connectivity_log(enum qdf_proto_type type, * @skb: skb pointer * @dir: direction * @pdev_id: ID of the pdev + * @op_mode: Vdev Operation mode * * Return: true/false */ static bool qdf_log_eapol_pkt(uint8_t vdev_id, struct sk_buff *skb, - enum qdf_proto_dir dir, uint8_t pdev_id) + enum qdf_proto_dir dir, uint8_t pdev_id, + enum QDF_OPMODE op_mode) { enum qdf_proto_subtype subtype; uint32_t dp_eap_trace; @@ -1854,7 +1864,8 @@ static bool qdf_log_eapol_pkt(uint8_t vdev_id, struct sk_buff *skb, QDF_TRACE_DEFAULT_MSDU_ID, QDF_TX_RX_STATUS_INVALID); qdf_fill_wlan_connectivity_log(QDF_PROTO_TYPE_EAPOL, subtype, - QDF_RX, 0, vdev_id, skb->data); + QDF_RX, 0, op_mode, + vdev_id, skb->data); } if (dp_eap_trace) { @@ -1901,11 +1912,13 @@ static bool qdf_log_eapol_pkt(uint8_t vdev_id, struct sk_buff *skb, * @skb: skb pointer * @dir: direction * @pdev_id: ID of the pdev + * @op_mode: Vdev Operation mode * * Return: true/false */ static bool qdf_log_dhcp_pkt(uint8_t vdev_id, struct sk_buff *skb, - enum qdf_proto_dir dir, uint8_t pdev_id) + enum qdf_proto_dir dir, uint8_t pdev_id, + enum QDF_OPMODE op_mode) { enum qdf_proto_subtype subtype = QDF_PROTO_INVALID; uint32_t dp_dhcp_trace; @@ -1932,7 +1945,7 @@ static bool qdf_log_dhcp_pkt(uint8_t vdev_id, struct sk_buff *skb, QDF_TRACE_DEFAULT_MSDU_ID, QDF_TX_RX_STATUS_INVALID); qdf_fill_wlan_connectivity_log(QDF_PROTO_TYPE_DHCP, subtype, - QDF_RX, 0, vdev_id, 0); + QDF_RX, 0, op_mode, vdev_id, 0); } if (dp_dhcp_trace) { @@ -2024,15 +2037,16 @@ static bool qdf_log_arp_pkt(uint8_t vdev_id, struct sk_buff *skb, bool qdf_dp_trace_log_pkt(uint8_t vdev_id, struct sk_buff *skb, - enum qdf_proto_dir dir, uint8_t pdev_id) + enum qdf_proto_dir dir, uint8_t pdev_id, + enum QDF_OPMODE op_mode) { if (!qdf_dp_get_proto_bitmap() && !qdf_dp_get_proto_event_bitmap()) return false; if (qdf_log_arp_pkt(vdev_id, skb, dir, pdev_id)) return true; - if (qdf_log_dhcp_pkt(vdev_id, skb, dir, pdev_id)) + if (qdf_log_dhcp_pkt(vdev_id, skb, dir, pdev_id, op_mode)) return true; - if (qdf_log_eapol_pkt(vdev_id, skb, dir, pdev_id)) + if (qdf_log_eapol_pkt(vdev_id, skb, dir, pdev_id, op_mode)) return true; if (qdf_log_icmp_pkt(vdev_id, skb, dir, pdev_id)) return true; @@ -2419,7 +2433,8 @@ qdf_export_symbol(qdf_dp_get_status_from_a_status); void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, uint8_t pdev_id, uint8_t *data, uint8_t size, uint16_t msdu_id, uint16_t buf_arg_status, - enum qdf_dp_tx_rx_status qdf_tx_status) + enum qdf_dp_tx_rx_status qdf_tx_status, + enum QDF_OPMODE op_mode) { struct qdf_dp_trace_ptr_buf buf; int buf_size = sizeof(struct qdf_dp_trace_ptr_buf); @@ -2436,7 +2451,7 @@ void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code, pkt_type, subtype, QDF_TX, msdu_id, qdf_tx_status); qdf_fill_wlan_connectivity_log(pkt_type, subtype, - QDF_TX, qdf_tx_status, + QDF_TX, qdf_tx_status, op_mode, QDF_NBUF_CB_TX_VDEV_CTX(nbuf), nbuf->data); } diff --git a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_tx_api.c b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_tx_api.c index 76e78a448b..305b682eb8 100644 --- a/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_tx_api.c +++ b/umac/mlme/vdev_mgr/dispatcher/src/wlan_vdev_mgr_tgt_if_tx_api.c @@ -107,6 +107,7 @@ QDF_STATUS tgt_vdev_mgr_create_send( vdev_info.vdev_stats_id = param->vdev_stats_id; vdev_info.op_mode = wlan_util_vdev_get_cdp_txrx_opmode(vdev); vdev_info.subtype = wlan_util_vdev_get_cdp_txrx_subtype(vdev); + vdev_info.qdf_opmode = wlan_vdev_mlme_get_opmode(vdev); wlan_vdev_mgr_fill_mlo_params(&vdev_info, param); pdev = wlan_vdev_get_pdev(vdev); @@ -748,6 +749,7 @@ QDF_STATUS tgt_vdev_mgr_cdp_vdev_attach(struct vdev_mlme_obj *mlme_obj) vdev_info.vdev_id = wlan_vdev_get_id(vdev); vdev_info.op_mode = wlan_util_vdev_get_cdp_txrx_opmode(vdev); vdev_info.subtype = wlan_util_vdev_get_cdp_txrx_subtype(vdev); + vdev_info.qdf_opmode = wlan_vdev_mlme_get_opmode(vdev); tgt_vdev_mgr_fill_mlo_params(&vdev_info, vdev); return cdp_vdev_attach(soc_txrx_handle, wlan_objmgr_pdev_get_pdev_id(pdev),