From 835033e388eaa9b238c7f052489b662fd1a54abf Mon Sep 17 00:00:00 2001 From: Soumya Bhat Date: Wed, 4 Oct 2017 22:21:46 +0530 Subject: [PATCH] qcacmn: Fix TX PPDU stats issues 1. Define bitmap array appropriately and expand ppdu per user tx stats array to accomodate upto 8 users stats 2. Fix issue where even with 1 WLAN STA user_index was exceeding zero 3. Allocate 5 bits for ppdu_type variable Change-Id: I969c929c3e16d4027a5e642a0a9195979c95e9cc CRs-Fixed: 2121122 --- dp/inc/cdp_txrx_cmn_struct.h | 15 +++++++++------ dp/wifi3.0/dp_htt.c | 35 +++++++++++++++++++++++------------ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index ec4142c8f320..9a0ac5aca631 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -42,8 +42,8 @@ #define OL_TXRX_NUM_LOCAL_PEER_IDS 33 /* default */ #endif -#define CDP_BA_256_BIT_MAP_SIZE_DWORDS 256 -#define CDP_BA_64_BIT_MAP_SIZE_DWORDS 64 +#define CDP_BA_256_BIT_MAP_SIZE_DWORDS 8 +#define CDP_BA_64_BIT_MAP_SIZE_DWORDS 2 #define OL_TXRX_INVALID_LOCAL_PEER_ID 0xffff #define CDP_INVALID_VDEV_ID 0xff @@ -99,6 +99,9 @@ #define CDP_MAX_RX_RINGS 4 +#define CDP_MU_MAX_USERS 8 +#define CDP_MU_MAX_USER_INDEX (CDP_MU_MAX_USERS - 1) + /* * DP configuration parameters */ @@ -1053,7 +1056,8 @@ struct cdp_tx_completion_ppdu_user { uint32_t long_retries:4, short_retries:4, tx_ratecode:8, - is_ampdu:1; + is_ampdu:1, + ppdu_type:5; uint32_t success_bytes; uint32_t retry_bytes; uint32_t failed_bytes; @@ -1071,8 +1075,7 @@ struct cdp_tx_completion_ppdu_user { preamble:4, gi:4, dcm:1, - ldpc:1, - ppdu_type:2; + ldpc:1; uint32_t ba_seq_no; uint32_t ba_bitmap[CDP_BA_256_BIT_MAP_SIZE_DWORDS]; uint32_t start_seq; @@ -1109,7 +1112,7 @@ struct cdp_tx_completion_ppdu { uint32_t ppdu_start_timestamp; uint32_t ppdu_end_timestamp; uint32_t ack_timestamp; - struct cdp_tx_completion_ppdu_user user[1]; + struct cdp_tx_completion_ppdu_user user[CDP_MU_MAX_USERS]; }; /** diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index efb4306cc8f8..2ade3d5ce416 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -1284,7 +1284,7 @@ void htt_t2h_stats_handler(void *context) */ #ifdef FEATURE_PERPKT_INFO static uint8_t dp_get_ppdu_info_user_index(struct dp_pdev *pdev, - uint32_t peer_id) + uint16_t peer_id) { uint8_t user_index = 0; struct cdp_tx_completion_ppdu *ppdu_desc; @@ -1293,18 +1293,23 @@ static uint8_t dp_get_ppdu_info_user_index(struct dp_pdev *pdev, ppdu_desc = (struct cdp_tx_completion_ppdu *)qdf_nbuf_data(pdev->tx_ppdu_info.buf); - while ((user_index + 1) <= pdev->tx_ppdu_info.last_user) { ppdu_user_desc = &ppdu_desc->user[user_index]; if (ppdu_user_desc->peer_id != peer_id) { user_index++; continue; } else { + /* Max users possible is 8 so user array index should + * not exceed 7 + */ + qdf_assert_always(user_index <= CDP_MU_MAX_USER_INDEX); return user_index; } } pdev->tx_ppdu_info.last_user++; + /* Max users possible is 8 so last user should not exceed 8 */ + qdf_assert_always(pdev->tx_ppdu_info.last_user <= CDP_MU_MAX_USERS); return pdev->tx_ppdu_info.last_user - 1; } #endif @@ -1359,7 +1364,7 @@ static void dp_process_ppdu_stats_common_tlv(struct dp_pdev *pdev, static void dp_process_ppdu_stats_user_common_tlv( struct dp_pdev *pdev, uint32_t *tag_buf) { - uint32_t peer_id; + uint16_t peer_id; struct dp_peer *peer; struct cdp_tx_completion_ppdu *ppdu_desc; struct cdp_tx_completion_ppdu_user *ppdu_user_desc; @@ -1374,6 +1379,7 @@ static void dp_process_ppdu_stats_user_common_tlv( if (!peer) return; + curr_user_index = dp_get_ppdu_info_user_index(pdev, peer_id); ppdu_user_desc = &ppdu_desc->user[curr_user_index]; @@ -1407,7 +1413,7 @@ static void dp_process_ppdu_stats_user_common_tlv( static void dp_process_ppdu_stats_user_rate_tlv(struct dp_pdev *pdev, uint32_t *tag_buf) { - uint32_t peer_id; + uint16_t peer_id; struct dp_peer *peer; struct cdp_tx_completion_ppdu *ppdu_desc; struct cdp_tx_completion_ppdu_user *ppdu_user_desc; @@ -1478,7 +1484,7 @@ static void dp_process_ppdu_stats_enq_mpdu_bitmap_64_tlv( struct cdp_tx_completion_ppdu *ppdu_desc; struct cdp_tx_completion_ppdu_user *ppdu_user_desc; uint8_t curr_user_index = 0; - uint32_t peer_id; + uint16_t peer_id; struct dp_peer *peer; ppdu_desc = @@ -1487,7 +1493,7 @@ static void dp_process_ppdu_stats_enq_mpdu_bitmap_64_tlv( tag_buf++; peer_id = - HTT_PPDU_STATS_USER_CMPLTN_BA_BITMAP_TLV_SW_PEER_ID_GET(*tag_buf); + HTT_PPDU_STATS_ENQ_MPDU_BITMAP_TLV_SW_PEER_ID_GET(*tag_buf); peer = dp_peer_find_by_id(pdev->soc, peer_id); @@ -1497,6 +1503,7 @@ static void dp_process_ppdu_stats_enq_mpdu_bitmap_64_tlv( curr_user_index = dp_get_ppdu_info_user_index(pdev, peer_id); ppdu_user_desc = &ppdu_desc->user[curr_user_index]; + ppdu_user_desc->peer_id = peer_id; ppdu_user_desc->start_seq = dp_stats_buf->start_seq; qdf_mem_copy(&ppdu_user_desc->enq_bitmap, &dp_stats_buf->enq_bitmap, @@ -1522,7 +1529,7 @@ static void dp_process_ppdu_stats_enq_mpdu_bitmap_256_tlv( struct cdp_tx_completion_ppdu *ppdu_desc; struct cdp_tx_completion_ppdu_user *ppdu_user_desc; uint8_t curr_user_index = 0; - uint32_t peer_id; + uint16_t peer_id; struct dp_peer *peer; ppdu_desc = @@ -1531,7 +1538,7 @@ static void dp_process_ppdu_stats_enq_mpdu_bitmap_256_tlv( tag_buf++; peer_id = - HTT_PPDU_STATS_USER_CMPLTN_BA_BITMAP_TLV_SW_PEER_ID_GET(*tag_buf); + HTT_PPDU_STATS_ENQ_MPDU_BITMAP_TLV_SW_PEER_ID_GET(*tag_buf); peer = dp_peer_find_by_id(pdev->soc, peer_id); @@ -1541,6 +1548,7 @@ static void dp_process_ppdu_stats_enq_mpdu_bitmap_256_tlv( curr_user_index = dp_get_ppdu_info_user_index(pdev, peer_id); ppdu_user_desc = &ppdu_desc->user[curr_user_index]; + ppdu_user_desc->peer_id = peer_id; ppdu_user_desc->start_seq = dp_stats_buf->start_seq; qdf_mem_copy(&ppdu_user_desc->enq_bitmap, &dp_stats_buf->enq_bitmap, @@ -1560,7 +1568,7 @@ static void dp_process_ppdu_stats_enq_mpdu_bitmap_256_tlv( static void dp_process_ppdu_stats_user_cmpltn_common_tlv( struct dp_pdev *pdev, uint32_t *tag_buf) { - uint32_t peer_id; + uint16_t peer_id; struct dp_peer *peer; struct cdp_tx_completion_ppdu *ppdu_desc; struct cdp_tx_completion_ppdu_user *ppdu_user_desc; @@ -1630,7 +1638,7 @@ static void dp_process_ppdu_stats_user_compltn_ba_bitmap_64_tlv( struct cdp_tx_completion_ppdu_user *ppdu_user_desc; struct cdp_tx_completion_ppdu *ppdu_desc; uint8_t curr_user_index = 0; - uint32_t peer_id; + uint16_t peer_id; struct dp_peer *peer; ppdu_desc = @@ -1649,6 +1657,7 @@ static void dp_process_ppdu_stats_user_compltn_ba_bitmap_64_tlv( curr_user_index = dp_get_ppdu_info_user_index(pdev, peer_id); ppdu_user_desc = &ppdu_desc->user[curr_user_index]; + ppdu_user_desc->peer_id = peer_id; ppdu_user_desc->ba_seq_no = dp_stats_buf->ba_seq_no; qdf_mem_copy(&ppdu_user_desc->ba_bitmap, &dp_stats_buf->ba_bitmap, @@ -1673,7 +1682,7 @@ static void dp_process_ppdu_stats_user_compltn_ba_bitmap_256_tlv( struct cdp_tx_completion_ppdu_user *ppdu_user_desc; struct cdp_tx_completion_ppdu *ppdu_desc; uint8_t curr_user_index = 0; - uint32_t peer_id; + uint16_t peer_id; struct dp_peer *peer; ppdu_desc = @@ -1692,6 +1701,7 @@ static void dp_process_ppdu_stats_user_compltn_ba_bitmap_256_tlv( curr_user_index = dp_get_ppdu_info_user_index(pdev, peer_id); ppdu_user_desc = &ppdu_desc->user[curr_user_index]; + ppdu_user_desc->peer_id = peer_id; ppdu_user_desc->ba_seq_no = dp_stats_buf->ba_seq_no; qdf_mem_copy(&ppdu_user_desc->ba_bitmap, &dp_stats_buf->ba_bitmap, @@ -1711,7 +1721,7 @@ static void dp_process_ppdu_stats_user_compltn_ba_bitmap_256_tlv( static void dp_process_ppdu_stats_user_compltn_ack_ba_status_tlv( struct dp_pdev *pdev, uint32_t *tag_buf) { - uint32_t peer_id; + uint16_t peer_id; struct dp_peer *peer; struct cdp_tx_completion_ppdu *ppdu_desc; struct cdp_tx_completion_ppdu_user *ppdu_user_desc; @@ -1732,6 +1742,7 @@ static void dp_process_ppdu_stats_user_compltn_ack_ba_status_tlv( curr_user_index = dp_get_ppdu_info_user_index(pdev, peer_id); ppdu_user_desc = &ppdu_desc->user[curr_user_index]; + ppdu_user_desc->peer_id = peer_id; tag_buf += 2; ppdu_user_desc->num_mpdu =