diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index d0bdf68680..4436425827 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -2709,6 +2709,14 @@ static void dp_htt_t2h_msg_handler(void *context, HTC_PACKET *pkt) "HTT_T2H_MSG_TYPE_PEER_MAP msg for peer id %d vdev id %d n", peer_id, vdev_id); + QDF_TRACE(QDF_MODULE_ID_TXRX, + QDF_TRACE_LEVEL_INFO, + "ast_idx[0] %d ast_idx[1] %d ast_idx[2] %d ast_idx[3] %d n", + ast_flow_info.ast_idx[0], + ast_flow_info.ast_idx[1], + ast_flow_info.ast_idx[2], + ast_flow_info.ast_idx[3]); + dp_rx_peer_map_handler(soc->dp_soc, peer_id, hw_peer_id, vdev_id, peer_mac_addr, ast_hash, diff --git a/dp/wifi3.0/monitor/dp_rx_mon_status.c b/dp/wifi3.0/monitor/dp_rx_mon_status.c index 9b334423f7..347a62f341 100644 --- a/dp/wifi3.0/monitor/dp_rx_mon_status.c +++ b/dp/wifi3.0/monitor/dp_rx_mon_status.c @@ -274,8 +274,6 @@ dp_rx_populate_cdp_indication_ppdu_user(struct dp_pdev *pdev, { struct dp_peer *peer; struct dp_soc *soc = pdev->soc; - struct dp_ast_entry *ast_entry; - uint32_t ast_index; int i; struct mon_rx_user_status *rx_user_status; struct mon_rx_user_info *rx_user_info; @@ -283,6 +281,7 @@ dp_rx_populate_cdp_indication_ppdu_user(struct dp_pdev *pdev, int ru_size; bool is_data = false; uint32_t num_users; + uint16_t sw_peer_id; num_users = ppdu_info->com_info.num_users; for (i = 0; i < num_users; i++) { @@ -293,20 +292,11 @@ dp_rx_populate_cdp_indication_ppdu_user(struct dp_pdev *pdev, rx_user_info = &ppdu_info->rx_user_info[i]; rx_stats_peruser = &cdp_rx_ppdu->user[i]; - ast_index = rx_user_status->ast_index; - if (ast_index >= wlan_cfg_get_max_ast_idx(soc->wlan_cfg_ctx)) { - rx_stats_peruser->peer_id = HTT_INVALID_PEER; - continue; - } + sw_peer_id = rx_user_status->sw_peer_id; - ast_entry = soc->ast_table[ast_index]; - if (!ast_entry || ast_entry->peer_id == HTT_INVALID_PEER) { - rx_stats_peruser->peer_id = HTT_INVALID_PEER; - continue; - } - - peer = dp_peer_get_ref_by_id(soc, ast_entry->peer_id, + peer = dp_peer_get_ref_by_id(soc, sw_peer_id, DP_MOD_ID_RX_PPDU_STATS); + if (!peer) { rx_stats_peruser->peer_id = HTT_INVALID_PEER; continue; @@ -422,9 +412,10 @@ dp_rx_populate_cdp_indication_ppdu(struct dp_pdev *pdev, { struct dp_peer *peer; struct dp_soc *soc = pdev->soc; - struct dp_ast_entry *ast_entry; - uint32_t ast_index; uint32_t i; + struct mon_rx_user_status *rx_user_status; + uint32_t num_users = ppdu_info->com_info.num_users; + uint16_t sw_peer_id; cdp_rx_ppdu->first_data_seq_ctrl = ppdu_info->rx_status.first_data_seq_ctrl; @@ -450,22 +441,14 @@ dp_rx_populate_cdp_indication_ppdu(struct dp_pdev *pdev, cdp_rx_ppdu->is_ampdu = 0; cdp_rx_ppdu->tid = ppdu_info->rx_status.tid; + qdf_assert_always(num_users <= CDP_MU_MAX_USERS); + rx_user_status = &ppdu_info->rx_user_status[num_users - 1]; - ast_index = ppdu_info->rx_status.ast_index; - if (ast_index >= wlan_cfg_get_max_ast_idx(soc->wlan_cfg_ctx)) { - cdp_rx_ppdu->peer_id = HTT_INVALID_PEER; - cdp_rx_ppdu->num_users = 0; - goto end; - } + sw_peer_id = rx_user_status->sw_peer_id; - ast_entry = soc->ast_table[ast_index]; - if (!ast_entry || ast_entry->peer_id == HTT_INVALID_PEER) { - cdp_rx_ppdu->peer_id = HTT_INVALID_PEER; - cdp_rx_ppdu->num_users = 0; - goto end; - } - peer = dp_peer_get_ref_by_id(soc, ast_entry->peer_id, + peer = dp_peer_get_ref_by_id(soc, sw_peer_id, DP_MOD_ID_RX_PPDU_STATS); + if (!peer) { cdp_rx_ppdu->peer_id = HTT_INVALID_PEER; cdp_rx_ppdu->num_users = 0; @@ -1167,12 +1150,11 @@ dp_rx_mon_handle_cfr_mu_info(struct dp_pdev *pdev, { struct dp_peer *peer; struct dp_soc *soc = pdev->soc; - struct dp_ast_entry *ast_entry; struct mon_rx_user_status *rx_user_status; struct cdp_rx_stats_ppdu_user *rx_stats_peruser; uint32_t num_users; + uint16_t sw_peer_id; int user_id; - uint32_t ast_index; qdf_spin_lock_bh(&soc->ast_lock); @@ -1185,21 +1167,12 @@ dp_rx_mon_handle_cfr_mu_info(struct dp_pdev *pdev, rx_user_status = &ppdu_info->rx_user_status[user_id]; rx_stats_peruser = &cdp_rx_ppdu->user[user_id]; - ast_index = rx_user_status->ast_index; - if (ast_index >= wlan_cfg_get_max_ast_idx(soc->wlan_cfg_ctx)) { - rx_stats_peruser->peer_id = HTT_INVALID_PEER; - continue; - } + sw_peer_id = rx_user_status->sw_peer_id; - ast_entry = soc->ast_table[ast_index]; - if (!ast_entry || ast_entry->peer_id == HTT_INVALID_PEER) { - rx_stats_peruser->peer_id = HTT_INVALID_PEER; - continue; - } - - peer = dp_peer_get_ref_by_id(soc, ast_entry->peer_id, + peer = dp_peer_get_ref_by_id(soc, sw_peer_id, DP_MOD_ID_RX_PPDU_STATS); + if (!peer) { rx_stats_peruser->peer_id = HTT_INVALID_PEER; continue; @@ -1610,29 +1583,31 @@ dp_rx_process_peer_based_pktlog(struct dp_soc *soc, qdf_nbuf_t status_nbuf, uint32_t pdev_id) { struct dp_peer *peer; - struct dp_ast_entry *ast_entry; - uint32_t ast_index; + struct mon_rx_user_status *rx_user_status; + uint32_t num_users = ppdu_info->com_info.num_users; + uint16_t sw_peer_id; - ast_index = ppdu_info->rx_status.ast_index; - if (ast_index < wlan_cfg_get_max_ast_idx(soc->wlan_cfg_ctx)) { - ast_entry = soc->ast_table[ast_index]; - if (ast_entry) { - peer = dp_peer_get_ref_by_id(soc, ast_entry->peer_id, - DP_MOD_ID_RX_PPDU_STATS); - if (peer) { - if ((peer->peer_id != HTT_INVALID_PEER) && - (peer->peer_based_pktlog_filter)) { - dp_wdi_event_handler( - WDI_EVENT_RX_DESC, soc, - status_nbuf, - peer->peer_id, - WDI_NO_VAL, pdev_id); - } - dp_peer_unref_delete(peer, - DP_MOD_ID_RX_PPDU_STATS); - } - } + qdf_assert_always(num_users <= CDP_MU_MAX_USERS); + rx_user_status = &ppdu_info->rx_user_status[num_users - 1]; + + sw_peer_id = rx_user_status->sw_peer_id; + + peer = dp_peer_get_ref_by_id(soc, sw_peer_id, + DP_MOD_ID_RX_PPDU_STATS); + + if (!peer) + return; + + if ((peer->peer_id != HTT_INVALID_PEER) && + (peer->peer_based_pktlog_filter)) { + dp_wdi_event_handler( + WDI_EVENT_RX_DESC, soc, + status_nbuf, + peer->peer_id, + WDI_NO_VAL, pdev_id); } + dp_peer_unref_delete(peer, + DP_MOD_ID_RX_PPDU_STATS); } #if defined(HTT_UL_OFDMA_USER_INFO_V0_W0_VALID_M) diff --git a/hal/wifi3.0/li/hal_li_generic_api.h b/hal/wifi3.0/li/hal_li_generic_api.h index 18c85a66b1..e093755d01 100644 --- a/hal/wifi3.0/li/hal_li_generic_api.h +++ b/hal/wifi3.0/li/hal_li_generic_api.h @@ -1524,6 +1524,9 @@ hal_rx_status_get_tlv_info_generic_li(void *rx_tlv_hdr, void *ppduinfo, ppdu_info->sw_frame_group_id = HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start); + ppdu_info->rx_user_status[user_id].sw_peer_id = + HAL_RX_GET_SW_PEER_ID(rx_mpdu_start); + if (ppdu_info->sw_frame_group_id == HAL_MPDU_SW_FRAME_GROUP_NULL_DATA) { ppdu_info->rx_status.frame_control_info_valid = diff --git a/hal/wifi3.0/qca5018/hal_5018_rx.h b/hal/wifi3.0/qca5018/hal_5018_rx.h index 8fc28d032b..47927ea397 100644 --- a/hal/wifi3.0/qca5018/hal_5018_rx.h +++ b/hal/wifi3.0/qca5018/hal_5018_rx.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2021 The Linux Foundation. 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 @@ -52,6 +52,10 @@ #define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, SW_FRAME_GROUP_ID) + +#define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_10, SW_PEER_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ (reg_val) &= \ diff --git a/hal/wifi3.0/qca6290/hal_6290_rx.h b/hal/wifi3.0/qca6290/hal_6290_rx.h index 1bbcf837cc..8c5e0b81ad 100644 --- a/hal/wifi3.0/qca6290/hal_6290_rx.h +++ b/hal/wifi3.0/qca6290/hal_6290_rx.h @@ -270,6 +270,9 @@ #define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, SW_FRAME_GROUP_ID) +#define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_1, SW_PEER_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ (reg_val) &= \ diff --git a/hal/wifi3.0/qca6390/hal_6390_rx.h b/hal/wifi3.0/qca6390/hal_6390_rx.h index 3201f6cc1b..15b631bd52 100644 --- a/hal/wifi3.0/qca6390/hal_6390_rx.h +++ b/hal/wifi3.0/qca6390/hal_6390_rx.h @@ -276,6 +276,9 @@ #define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, SW_FRAME_GROUP_ID) +#define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_1, SW_PEER_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \ diff --git a/hal/wifi3.0/qca6490/hal_6490_rx.h b/hal/wifi3.0/qca6490/hal_6490_rx.h index 8859e95eb0..828a036692 100644 --- a/hal/wifi3.0/qca6490/hal_6490_rx.h +++ b/hal/wifi3.0/qca6490/hal_6490_rx.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2019-2021 The Linux Foundation. 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 @@ -279,6 +279,9 @@ #define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, SW_FRAME_GROUP_ID) +#define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_10, SW_PEER_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \ diff --git a/hal/wifi3.0/qca6750/hal_6750_rx.h b/hal/wifi3.0/qca6750/hal_6750_rx.h index 2563993227..414af34d93 100644 --- a/hal/wifi3.0/qca6750/hal_6750_rx.h +++ b/hal/wifi3.0/qca6750/hal_6750_rx.h @@ -279,6 +279,9 @@ #define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, SW_FRAME_GROUP_ID) +#define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_10, SW_PEER_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \ diff --git a/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h b/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h index 65aea86961..6c38ab628f 100644 --- a/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h +++ b/hal/wifi3.0/qca8074v1/hal_8074v1_rx.h @@ -259,6 +259,9 @@ #define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, SW_FRAME_GROUP_ID) +#define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_1, SW_PEER_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \ diff --git a/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h b/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h index 29cbfce7c1..80fdd0ae80 100644 --- a/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h +++ b/hal/wifi3.0/qca8074v2/hal_8074v2_rx.h @@ -268,6 +268,9 @@ #define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_0, SW_FRAME_GROUP_ID) +#define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_1, SW_PEER_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \ diff --git a/hal/wifi3.0/qcn6122/hal_qcn6122_rx.h b/hal/wifi3.0/qcn6122/hal_qcn6122_rx.h index a94fdbc9e4..632c4e0766 100644 --- a/hal/wifi3.0/qcn6122/hal_qcn6122_rx.h +++ b/hal/wifi3.0/qcn6122/hal_qcn6122_rx.h @@ -59,6 +59,9 @@ #define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, SW_FRAME_GROUP_ID) +#define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_10, SW_PEER_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ (reg_val) &= \ diff --git a/hal/wifi3.0/qcn9000/hal_9000_rx.h b/hal/wifi3.0/qcn9000/hal_9000_rx.h index 3e6a166d46..a2acfae0bd 100644 --- a/hal/wifi3.0/qcn9000/hal_9000_rx.h +++ b/hal/wifi3.0/qcn9000/hal_9000_rx.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2021 The Linux Foundation. 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 @@ -57,6 +57,9 @@ #define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_9, SW_FRAME_GROUP_ID) +#define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO_10, SW_PEER_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \ diff --git a/hal/wifi3.0/wcn7850/hal_7850_rx.h b/hal/wifi3.0/wcn7850/hal_7850_rx.h index 12e07ed60f..83e31378c5 100644 --- a/hal/wifi3.0/wcn7850/hal_7850_rx.h +++ b/hal/wifi3.0/wcn7850/hal_7850_rx.h @@ -60,6 +60,9 @@ #define HAL_RX_GET_SW_FRAME_GROUP_ID(rx_mpdu_start) \ HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO, SW_FRAME_GROUP_ID) +#define HAL_RX_GET_SW_PEER_ID(rx_mpdu_start) \ + HAL_RX_GET(rx_mpdu_start, RX_MPDU_INFO, SW_PEER_ID) + #define HAL_REO_R0_CONFIG(soc, reg_val, reo_params) \ do { \ reg_val &= \ diff --git a/qdf/inc/qdf_nbuf.h b/qdf/inc/qdf_nbuf.h index 8e1d270338..64d19ec873 100644 --- a/qdf/inc/qdf_nbuf.h +++ b/qdf/inc/qdf_nbuf.h @@ -403,6 +403,7 @@ struct mon_rx_status { * @mpdu_fcs_ok_bitmap: mpdu with fcs ok bitmap * @mpdu_ok_byte_count: mpdu byte count with fcs ok * @mpdu_err_byte_count: mpdu byte count with fcs err + * @sw_peer_id: software peer id */ struct mon_rx_user_status { uint32_t mcs:4, @@ -433,6 +434,7 @@ struct mon_rx_user_status { uint32_t mpdu_fcs_ok_bitmap[QDF_MON_STATUS_MPDU_FCS_BMAP_NWORDS]; uint32_t mpdu_ok_byte_count; uint32_t mpdu_err_byte_count; + uint16_t sw_peer_id; }; /**