Преглед изворни кода

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
Soumya Bhat пре 7 година
родитељ
комит
835033e388
2 измењених фајлова са 32 додато и 18 уклоњено
  1. 9 6
      dp/inc/cdp_txrx_cmn_struct.h
  2. 23 12
      dp/wifi3.0/dp_htt.c

+ 9 - 6
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];
 };
 
 /**

+ 23 - 12
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 =