Quellcode durchsuchen

qcacmn: VHT/HE info in radiotap header of mgmt & control frames

In monitor mode, radiotap header contains VHT/HE information in management
and control frames after association of STA to AP.For this,reset of
ppdu_info is required before processing of ppdu in order to avoid reuse
of ppdu_info.

Change-Id: Ia36ec2664f79d645ff76db016f986dfb92ec8bbd
CRs-Fixed: 2734804
Harsh Kumar Bijlani vor 5 Jahren
Ursprung
Commit
cc9f9c7c1f
4 geänderte Dateien mit 25 neuen und 18 gelöschten Zeilen
  1. 7 2
      dp/wifi3.0/dp_rx_mon_status.c
  2. 9 1
      hal/wifi3.0/hal_api_mon.h
  3. 8 15
      hal/wifi3.0/hal_generic_api.h
  4. 1 0
      hal/wifi3.0/hal_rx.h

+ 7 - 2
dp/wifi3.0/dp_rx_mon_status.c

@@ -2036,8 +2036,13 @@ dp_rx_pdev_mon_status_desc_pool_init(struct dp_pdev *pdev, uint32_t mac_id)
 
 	pdev->mon_ppdu_status = DP_PPDU_STATUS_START;
 
-	qdf_mem_zero(&pdev->ppdu_info.rx_status,
-		     sizeof(pdev->ppdu_info.rx_status));
+	qdf_mem_zero(&pdev->ppdu_info, sizeof(pdev->ppdu_info));
+
+	/*
+	 * Set ppdu_id to HAL_INVALID_PPDU_ID in order to avoid ppdu_id
+	 * match with '0' ppdu_id from monitor status ring
+	 */
+	pdev->ppdu_info.com_info.ppdu_id = HAL_INVALID_PPDU_ID;
 
 	qdf_mem_zero(&pdev->rx_mon_stats, sizeof(pdev->rx_mon_stats));
 

+ 9 - 1
hal/wifi3.0/hal_api_mon.h

@@ -154,8 +154,15 @@
 		rs->rs_flags |= (IEEE80211_AMSDU_FLAG); \
 } \
 
+#define HAL_RX_SET_MSDU_AGGREGATION((rs_mpdu), (rs_ppdu))\
+{\
+	if (rs_mpdu->rs_flags & IEEE80211_AMSDU_FLAG)\
+		rs_ppdu->rs_flags |= IEEE80211_AMSDU_FLAG;\
+} \
+
 #else
 #define HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs)
+#define HAL_RX_SET_MSDU_AGGREGATION(rs_mpdu, rs_ppdu)
 #endif
 
 /* Max MPDUs per status buffer */
@@ -170,6 +177,7 @@
  * struct hal_rx_mon_desc_info () - HAL Rx Monitor descriptor info
  *
  * @ppdu_id:                 PHY ppdu id
+ * @status_ppdu_id:          status PHY ppdu id
  * @status_buf_count:        number of status buffer count
  * @rxdma_push_reason:       rxdma push reason
  * @rxdma_error_code:        rxdma error code
@@ -184,6 +192,7 @@
  */
 struct hal_rx_mon_desc_info {
 	uint16_t ppdu_id;
+	uint16_t status_ppdu_id;
 	uint8_t status_buf_count;
 	uint8_t rxdma_push_reason;
 	uint8_t rxdma_error_code;
@@ -471,7 +480,6 @@ struct hal_rx_ppdu_common_info {
 	uint32_t mpdu_cnt_fcs_ok;
 	uint32_t mpdu_cnt_fcs_err;
 	uint32_t mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP];
-	uint32_t last_ppdu_id;
 	uint32_t mpdu_cnt;
 	uint8_t num_users;
 };

+ 8 - 15
hal/wifi3.0/hal_generic_api.h

@@ -568,11 +568,18 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
 
 	case WIFIRX_PPDU_START_E:
 	{
-		struct hal_rx_ppdu_common_info *com_info = &ppdu_info->com_info;
+		if (qdf_likely(ppdu_info->com_info.ppdu_id !=
+		    HAL_RX_GET(rx_tlv, RX_PPDU_START_0, PHY_PPDU_ID)))
+			/* Reset ppdu_info before processing the ppdu */
+			qdf_mem_zero(ppdu_info,
+				     sizeof(struct hal_rx_ppdu_info));
+		else
+			qdf_assert_always(0);
 
 		ppdu_info->com_info.ppdu_id =
 			HAL_RX_GET(rx_tlv, RX_PPDU_START_0,
 				PHY_PPDU_ID);
+
 		/* channel number is set in PHY meta data */
 		ppdu_info->rx_status.chan_num =
 			(HAL_RX_GET(rx_tlv, RX_PPDU_START_1,
@@ -594,20 +601,6 @@ hal_rx_status_get_tlv_info_generic(void *rx_tlv_hdr, void *ppduinfo,
 			ppdu_info->com_info.ppdu_timestamp;
 		ppdu_info->rx_state = HAL_RX_MON_PPDU_START;
 
-		/* If last ppdu_id doesn't match new ppdu_id,
-		 * 1. reset mpdu_cnt
-		 * 2. update last_ppdu_id with new
-		 * 3. reset mpdu fcs bitmap
-		 */
-		if (com_info->ppdu_id != com_info->last_ppdu_id) {
-			com_info->mpdu_cnt = 0;
-			com_info->last_ppdu_id =
-				com_info->ppdu_id;
-			com_info->num_users = 0;
-			qdf_mem_zero(&com_info->mpdu_fcs_ok_bitmap,
-				     HAL_RX_NUM_WORDS_PER_PPDU_BITMAP *
-				     sizeof(com_info->mpdu_fcs_ok_bitmap[0]));
-		}
 		break;
 	}
 

+ 1 - 0
hal/wifi3.0/hal_rx.h

@@ -21,6 +21,7 @@
 
 #include <hal_api.h>
 
+#define HAL_INVALID_PPDU_ID    0xFFFFFFFF
 #define HAL_RX_OFFSET(block, field) block##_##field##_OFFSET
 #define HAL_RX_LSB(block, field) block##_##field##_LSB
 #define HAL_RX_MASk(block, field) block##_##field##_MASK