Bläddra i källkod

qcacmn: add HE radiotap flags for MU cases

HE field in radiotap header are not being updated for MU frames.
Add support for MU-MIMO and MU-OFDMA frames.

Change-Id: If33e9f9039c8df6e1bb8f591879d4defed184ac8
CRs-Fixed: 2191215
Mohit Khanna 7 år sedan
förälder
incheckning
1fe9fd414a
3 ändrade filer med 218 tillägg och 124 borttagningar
  1. 198 69
      hal/wifi3.0/hal_api_mon.h
  2. 8 14
      qdf/inc/qdf_nbuf.h
  3. 12 41
      qdf/linux/src/qdf_nbuf.c

+ 198 - 69
hal/wifi3.0/hal_api_mon.h

@@ -752,10 +752,10 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 				QDF_MON_STATUS_HE_TRIG_FORMAT_TYPE;
 		} else {
 			 ppdu_info->rx_status.he_data1 =
-				 QDF_MON_STATUS_HE_SU_OR_EXT_SU_FORMAT_TYPE;
+				 QDF_MON_STATUS_HE_SU_FORMAT_TYPE;
 		}
 
-		/*data1*/
+		/* data1 */
 		ppdu_info->rx_status.he_data1 |=
 			QDF_MON_STATUS_HE_BSS_COLOR_KNOWN |
 			QDF_MON_STATUS_HE_BEAM_CHANGE_KNOWN |
@@ -768,7 +768,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 			QDF_MON_STATUS_HE_DATA_BW_RU_KNOWN |
 			QDF_MON_STATUS_HE_DOPPLER_KNOWN;
 
-		/*data2*/
+		/* data2 */
 		ppdu_info->rx_status.he_data2 =
 			QDF_MON_STATUS_HE_GI_KNOWN;
 		ppdu_info->rx_status.he_data2 |=
@@ -779,7 +779,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 			QDF_MON_STATUS_PRE_FEC_PADDING_KNOWN |
 			QDF_MON_STATUS_MIDABLE_PERIODICITY_KNOWN;
 
-		/*data3*/
+		/* data3 */
 		value = HAL_RX_GET(he_sig_a_su_info,
 				HE_SIG_A_SU_INFO_0, BSS_COLOR_ID);
 		ppdu_info->rx_status.he_data3 = value;
@@ -791,11 +791,13 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 				HE_SIG_A_SU_INFO_0, DL_UL_FLAG);
 		value = value << QDF_MON_STATUS_DL_UL_SHIFT;
 		ppdu_info->rx_status.he_data3 |= value;
+
 		value = HAL_RX_GET(he_sig_a_su_info,
 				HE_SIG_A_SU_INFO_0, TRANSMIT_MCS);
 		ppdu_info->rx_status.mcs = value;
 		value = value << QDF_MON_STATUS_TRANSMIT_MCS_SHIFT;
 		ppdu_info->rx_status.he_data3 |= value;
+
 		value = HAL_RX_GET(he_sig_a_su_info,
 				HE_SIG_A_SU_INFO_0, DCM);
 		he_dcm = value;
@@ -816,12 +818,12 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 		value = value << QDF_MON_STATUS_STBC_SHIFT;
 		ppdu_info->rx_status.he_data3 |= value;
 
-		/*data4*/
+		/* data4 */
 		value = HAL_RX_GET(he_sig_a_su_info, HE_SIG_A_SU_INFO_0,
 							SPATIAL_REUSE);
 		ppdu_info->rx_status.he_data4 = value;
 
-		/*data5*/
+		/* data5 */
 		value = HAL_RX_GET(he_sig_a_su_info,
 				HE_SIG_A_SU_INFO_0, TRANSMIT_BW);
 		ppdu_info->rx_status.he_data5 = value;
@@ -869,7 +871,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 		value = value << QDF_MON_STATUS_PE_DISAMBIGUITY_SHIFT;
 		ppdu_info->rx_status.he_data5 |= value;
 
-		/*data6*/
+		/* data6 */
 		value = HAL_RX_GET(he_sig_a_su_info, HE_SIG_A_SU_INFO_0, NSTS);
 		value++;
 		ppdu_info->rx_status.nss = value;
@@ -891,23 +893,114 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 			HAL_RX_OFFSET(PHYRX_HE_SIG_A_MU_DL_0,
 			HE_SIG_A_MU_DL_INFO_PHYRX_HE_SIG_A_MU_DL_INFO_DETAILS);
 
-		ppdu_info->rx_status.he_sig_A1 =
-			*((uint32_t *)((uint8_t *)rx_tlv +
-			HAL_RX_OFFSET(PHYRX_HE_SIG_A_MU_DL_0,
-			HE_SIG_A_MU_DL_INFO_PHYRX_HE_SIG_A_MU_DL_INFO_DETAILS)));
-		ppdu_info->rx_status.he_sig_A1 |=
-			QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_MU;
-		ppdu_info->rx_status.he_sig_A1_known =
-			QDF_MON_STATUS_HE_SIG_A1_MU_KNOWN_ALL;
-
-		ppdu_info->rx_status.he_sig_A2 =
-			*((uint32_t *)((uint8_t *)rx_tlv +
-			HAL_RX_OFFSET(PHYRX_HE_SIG_A_MU_DL_1,
-			HE_SIG_A_MU_DL_INFO_PHYRX_HE_SIG_A_MU_DL_INFO_DETAILS)));
-		ppdu_info->rx_status.he_sig_A2_known =
-			QDF_MON_STATUS_HE_SIG_A2_MU_KNOWN_ALL;
-
 		ppdu_info->rx_status.he_mu_flags = 1;
+
+		/* HE Flags */
+		/*data1*/
+		ppdu_info->rx_status.he_data1 =
+					QDF_MON_STATUS_HE_MU_FORMAT_TYPE;
+		ppdu_info->rx_status.he_data1 |=
+			QDF_MON_STATUS_HE_BSS_COLOR_KNOWN |
+			QDF_MON_STATUS_HE_DL_UL_KNOWN |
+			QDF_MON_STATUS_HE_LDPC_EXTRA_SYMBOL_KNOWN |
+			QDF_MON_STATUS_HE_STBC_KNOWN |
+			QDF_MON_STATUS_HE_DATA_BW_RU_KNOWN |
+			QDF_MON_STATUS_HE_DOPPLER_KNOWN;
+
+		/* data2 */
+		ppdu_info->rx_status.he_data2 =
+			QDF_MON_STATUS_HE_GI_KNOWN;
+		ppdu_info->rx_status.he_data2 |=
+			QDF_MON_STATUS_LTF_SYMBOLS_KNOWN |
+			QDF_MON_STATUS_PRE_FEC_PADDING_KNOWN |
+			QDF_MON_STATUS_PE_DISAMBIGUITY_KNOWN |
+			QDF_MON_STATUS_TXOP_KNOWN |
+			QDF_MON_STATUS_MIDABLE_PERIODICITY_KNOWN;
+
+		/*data3*/
+		value = HAL_RX_GET(he_sig_a_mu_dl_info,
+				HE_SIG_A_MU_DL_INFO_0, BSS_COLOR_ID);
+		ppdu_info->rx_status.he_data3 = value;
+
+		value = HAL_RX_GET(he_sig_a_mu_dl_info,
+				HE_SIG_A_MU_DL_INFO_0, DL_UL_FLAG);
+		value = value << QDF_MON_STATUS_DL_UL_SHIFT;
+		ppdu_info->rx_status.he_data3 |= value;
+
+		value = HAL_RX_GET(he_sig_a_mu_dl_info,
+				HE_SIG_A_MU_DL_INFO_1,
+				LDPC_EXTRA_SYMBOL);
+		value = value << QDF_MON_STATUS_LDPC_EXTRA_SYMBOL_SHIFT;
+		ppdu_info->rx_status.he_data3 |= value;
+
+		value = HAL_RX_GET(he_sig_a_mu_dl_info,
+				HE_SIG_A_MU_DL_INFO_1, STBC);
+		he_stbc = value;
+		value = value << QDF_MON_STATUS_STBC_SHIFT;
+		ppdu_info->rx_status.he_data3 |= value;
+
+		/*data4*/
+		value = HAL_RX_GET(he_sig_a_mu_dl_info, HE_SIG_A_MU_DL_INFO_0,
+							SPATIAL_REUSE);
+		ppdu_info->rx_status.he_data4 = value;
+
+		/*data5*/
+		value = HAL_RX_GET(he_sig_a_mu_dl_info,
+				HE_SIG_A_MU_DL_INFO_0, TRANSMIT_BW);
+		ppdu_info->rx_status.he_data5 = value;
+		ppdu_info->rx_status.bw = value;
+
+		value = HAL_RX_GET(he_sig_a_mu_dl_info,
+				HE_SIG_A_MU_DL_INFO_0, CP_LTF_SIZE);
+		switch (value) {
+		case 0:
+			he_gi = HE_GI_0_8;
+			he_ltf = HE_LTF_4_X;
+			break;
+		case 1:
+			he_gi = HE_GI_0_8;
+			he_ltf = HE_LTF_2_X;
+			break;
+		case 2:
+			he_gi = HE_GI_1_6;
+			he_ltf = HE_LTF_2_X;
+			break;
+		case 3:
+			he_gi = HE_GI_3_2;
+			he_ltf = HE_LTF_4_X;
+			break;
+		}
+		ppdu_info->rx_status.sgi = he_gi;
+		value = he_gi << QDF_MON_STATUS_GI_SHIFT;
+		ppdu_info->rx_status.he_data5 |= value;
+
+		value = he_ltf << QDF_MON_STATUS_HE_LTF_SHIFT;
+		ppdu_info->rx_status.he_data5 |= value;
+
+		value = HAL_RX_GET(he_sig_a_mu_dl_info, HE_SIG_A_MU_DL_INFO_1,
+				   PACKET_EXTENSION_A_FACTOR);
+		value = value << QDF_MON_STATUS_PRE_FEC_PAD_SHIFT;
+		ppdu_info->rx_status.he_data5 |= value;
+
+
+		value = HAL_RX_GET(he_sig_a_mu_dl_info, HE_SIG_A_MU_DL_INFO_1,
+				   PACKET_EXTENSION_PE_DISAMBIGUITY);
+		value = value << QDF_MON_STATUS_PE_DISAMBIGUITY_SHIFT;
+		ppdu_info->rx_status.he_data5 |= value;
+
+		/*data6*/
+		value = HAL_RX_GET(he_sig_a_mu_dl_info, HE_SIG_A_MU_DL_INFO_0,
+							DOPPLER_INDICATION);
+		value = value << QDF_MON_STATUS_DOPPLER_SHIFT;
+		ppdu_info->rx_status.he_data6 |= value;
+
+		value = HAL_RX_GET(he_sig_a_mu_dl_info, HE_SIG_A_MU_DL_INFO_1,
+							TXOP_DURATION);
+		value = value << QDF_MON_STATUS_TXOP_SHIFT;
+		ppdu_info->rx_status.he_data6 |= value;
+
+		/* HE-MU Flags */
+		/* HE-MU-flags1 */
 		ppdu_info->rx_status.he_flags1 =
 			QDF_MON_STATUS_SIG_B_MCS_KNOWN |
 			QDF_MON_STATUS_SIG_B_DCM_KNOWN |
@@ -923,6 +1016,7 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 		value = value << QDF_MON_STATUS_DCM_FLAG_1_SHIFT;
 		ppdu_info->rx_status.he_flags1 |= value;
 
+		/* HE-MU-flags2 */
 		ppdu_info->rx_status.he_flags2 =
 			QDF_MON_STATUS_BW_KNOWN;
 
@@ -963,32 +1057,50 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 		uint8_t *he_sig_b2_mu_info = (uint8_t *)rx_tlv +
 			HAL_RX_OFFSET(PHYRX_HE_SIG_B2_MU_0,
 			HE_SIG_B2_MU_INFO_PHYRX_HE_SIG_B2_MU_INFO_DETAILS);
+		/*
+		 * Not all "HE" fields can be updated from
+		 * WIFIPHYRX_HE_SIG_A_MU_DL_E TLV. Use WIFIPHYRX_HE_SIG_B2_MU_E
+		 * to populate rest of the "HE" fields for MU scenarios.
+		 */
 
-		ppdu_info->rx_status.he_mu_other_flags = 1;
+		/* HE-data1 */
+		ppdu_info->rx_status.he_data1 |=
+			QDF_MON_STATUS_HE_MCS_KNOWN |
+			QDF_MON_STATUS_HE_CODING_KNOWN;
 
-		ppdu_info->rx_status.he_per_user_known =
-			QDF_MON_STATUS_STA_ID_PER_USER_KNOWN |
-			QDF_MON_STATUS_STA_CODING_KNOWN |
-			QDF_MON_STATUS_STA_SPATIAL_CONFIG_KNOWN |
-			QDF_MON_STATUS_STA_MCS_KNOWN;
+		/* HE-data2 */
 
+		/* HE-data3 */
 		value = HAL_RX_GET(he_sig_b2_mu_info,
-				HE_SIG_B2_MU_INFO_0, STA_ID);
-		ppdu_info->rx_status.he_per_user_1 = value;
+				HE_SIG_B2_MU_INFO_0, STA_MCS);
+		ppdu_info->rx_status.mcs = value;
+		value = value << QDF_MON_STATUS_TRANSMIT_MCS_SHIFT;
+		ppdu_info->rx_status.he_data3 |= value;
+
+
 		value = HAL_RX_GET(he_sig_b2_mu_info,
-				HE_SIG_B2_MU_INFO_0, STA_SPATIAL_CONFIG);
-		value = value << QDF_MON_STATUS_STA_SPATIAL_SHIFT;
-		ppdu_info->rx_status.he_per_user_1 |= value;
+				HE_SIG_B2_MU_INFO_0, STA_CODING);
+		value = value << QDF_MON_STATUS_CODING_SHIFT;
+		ppdu_info->rx_status.he_data3 |= value;
 
+		/* HE-data4 */
 		value = HAL_RX_GET(he_sig_b2_mu_info,
-				HE_SIG_B2_OFDMA_INFO_0, STA_MCS);
-		ppdu_info->rx_status.he_per_user_2 = value;
+				HE_SIG_B2_MU_INFO_0, STA_ID);
+		value = value << QDF_MON_STATUS_STA_ID_SHIFT;
+		ppdu_info->rx_status.he_data4 |= value;
+
+		/* HE-data5 */
+
+		/* HE-data6 */
 		value = HAL_RX_GET(he_sig_b2_mu_info,
-				HE_SIG_B2_OFDMA_INFO_0, STA_CODING);
-		value = value << QDF_MON_STATUS_STA_DCM_SHIFT;
-		ppdu_info->rx_status.he_per_user_2 |= value;
+				   HE_SIG_B2_MU_INFO_0, NSTS);
+		/* value n indicates n+1 spatial streams */
+		value++;
+		ppdu_info->rx_status.nss = value;
+		ppdu_info->rx_status.he_data6 |= value;
 
 		break;
+
 	}
 	case WIFIPHYRX_HE_SIG_B2_OFDMA_E:
 	{
@@ -996,44 +1108,61 @@ hal_rx_status_get_tlv_info(void *rx_tlv, struct hal_rx_ppdu_info *ppdu_info)
 		(uint8_t *)rx_tlv +
 		HAL_RX_OFFSET(PHYRX_HE_SIG_B2_OFDMA_0,
 		HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS);
-		ppdu_info->rx_status.he_sig_b_user =
-			*((uint32_t *)((uint8_t *)rx_tlv +
-			HAL_RX_OFFSET(PHYRX_HE_SIG_B2_OFDMA_0,
-			HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS)));
-		ppdu_info->rx_status.he_sig_b_user_known =
-			QDF_MON_STATUS_HE_SIG_B_USER_KNOWN_SIG_B_ALL;
-
-		ppdu_info->rx_status.he_per_user_known =
-			QDF_MON_STATUS_STA_ID_PER_USER_KNOWN |
-			QDF_MON_STATUS_STA_NSTS_KNOWN |
-			QDF_MON_STATUS_STA_TX_BF_KNOWN |
-			QDF_MON_STATUS_STA_MCS_KNOWN |
-			QDF_MON_STATUS_STA_DCM_KNOWN |
-			QDF_MON_STATUS_STA_CODING_KNOWN;
 
-		value = HAL_RX_GET(he_sig_b2_ofdma_info,
-				HE_SIG_B2_OFDMA_INFO_0, STA_ID);
-		ppdu_info->rx_status.he_per_user_1 = value;
-		value = HAL_RX_GET(he_sig_b2_ofdma_info,
-				HE_SIG_B2_OFDMA_INFO_0, NSTS);
-		value = value << QDF_MON_STATUS_STA_SPATIAL_SHIFT;
-		ppdu_info->rx_status.he_per_user_1 |= value;
-		value = HAL_RX_GET(he_sig_b2_ofdma_info,
-				HE_SIG_B2_OFDMA_INFO_0, TXBF);
-		value = value << QDF_MON_STATUS_TXBF_SHIFT;
-		ppdu_info->rx_status.he_per_user_1 |= value;
+		/*
+		 * Not all "HE" fields can be updated from
+		 * WIFIPHYRX_HE_SIG_A_MU_DL_E TLV. Use WIFIPHYRX_HE_SIG_B2_MU_E
+		 * to populate rest of "HE" fields for MU OFDMA scenarios.
+		 */
+
+		/* HE-data1 */
+		ppdu_info->rx_status.he_data1 |=
+			QDF_MON_STATUS_HE_MCS_KNOWN |
+			QDF_MON_STATUS_HE_DCM_KNOWN |
+			QDF_MON_STATUS_HE_CODING_KNOWN;
 
+		/* HE-data2 */
+		ppdu_info->rx_status.he_data2 |=
+					QDF_MON_STATUS_TXBF_KNOWN;
+
+		/* HE-data3 */
 		value = HAL_RX_GET(he_sig_b2_ofdma_info,
 				HE_SIG_B2_OFDMA_INFO_0, STA_MCS);
-		ppdu_info->rx_status.he_per_user_2 = value;
+		ppdu_info->rx_status.mcs = value;
+		value = value << QDF_MON_STATUS_TRANSMIT_MCS_SHIFT;
+		ppdu_info->rx_status.he_data3 |= value;
+
 		value = HAL_RX_GET(he_sig_b2_ofdma_info,
 				HE_SIG_B2_OFDMA_INFO_0, STA_DCM);
-		value = value << QDF_MON_STATUS_STA_MCS_SHIFT;
-		ppdu_info->rx_status.he_per_user_2 |= value;
+		he_dcm = value;
+		value = value << QDF_MON_STATUS_DCM_SHIFT;
+		ppdu_info->rx_status.he_data3 |= value;
+
 		value = HAL_RX_GET(he_sig_b2_ofdma_info,
 				HE_SIG_B2_OFDMA_INFO_0, STA_CODING);
-		value = value << QDF_MON_STATUS_STA_DCM_SHIFT;
-		ppdu_info->rx_status.he_per_user_2 |= value;
+		value = value << QDF_MON_STATUS_CODING_SHIFT;
+		ppdu_info->rx_status.he_data3 |= value;
+
+		/* HE-data4 */
+		value = HAL_RX_GET(he_sig_b2_ofdma_info,
+				HE_SIG_B2_OFDMA_INFO_0, STA_ID);
+		value = value << QDF_MON_STATUS_STA_ID_SHIFT;
+		ppdu_info->rx_status.he_data4 |= value;
+
+		/* HE-data5 */
+		value = HAL_RX_GET(he_sig_b2_ofdma_info,
+				   HE_SIG_B2_OFDMA_INFO_0, TXBF);
+		value = value << QDF_MON_STATUS_TXBF_SHIFT;
+		ppdu_info->rx_status.he_data5 |= value;
+
+		/* HE-data6 */
+		value = HAL_RX_GET(he_sig_b2_ofdma_info,
+				   HE_SIG_B2_OFDMA_INFO_0, NSTS);
+		/* value n indicates n+1 spatial streams */
+		value++;
+		ppdu_info->rx_status.nss = value;
+		ppdu_info->rx_status.he_data6 |= value;
+
 		break;
 	}
 	case WIFIPHYRX_RSSI_LEGACY_E:

+ 8 - 14
qdf/inc/qdf_nbuf.h

@@ -164,10 +164,6 @@
  * struct mon_rx_status - This will have monitor mode rx_status extracted from
  * htt_rx_desc used later to update radiotap information.
  * @tsft: Time Synchronization Function timer
- * @he_sig_A1: HE (11ax) sig A1 field
- * @he_sig_A2: HE (11ax) sig A1 field
- * @he_sig_b_user: HE (11ax) sig B user field
- * @he_sig_b_user_known: HE (11ax) sig B user known field
  * @preamble_type: Preamble type in radio header
  * @chan_freq: Capture channel frequency
  * @chan_num: Capture channel number
@@ -222,10 +218,6 @@
  */
 struct mon_rx_status {
 	uint64_t tsft;
-	uint32_t he_sig_A1;
-	uint32_t he_sig_A2;
-	uint32_t he_sig_b_user;
-	uint32_t he_sig_b_user_known;
 	uint32_t preamble_type;
 	uint16_t chan_freq;
 	uint16_t chan_num;
@@ -292,10 +284,6 @@ struct mon_rx_status {
 };
 
 /* Masks for HE SIG known fields in mon_rx_status structure */
-#define QDF_MON_STATUS_HE_SIG_A1_SU_KNOWN_ALL		0x000007ff
-#define QDF_MON_STATUS_HE_SIG_A1_MU_KNOWN_ALL		0x000003ff
-#define QDF_MON_STATUS_HE_SIG_A2_SU_KNOWN_ALL		0x00000ffd
-#define QDF_MON_STATUS_HE_SIG_A2_MU_KNOWN_ALL		0x00000ffd
 #define QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU0	0x00000001
 #define QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU1	0x00000002
 #define QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU2	0x00000004
@@ -303,7 +291,6 @@ struct mon_rx_status {
 #define QDF_MON_STATUS_HE_SIG_B_USER_KNOWN_SIG_B_ALL   0x00fe0000
 #define QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_SU		0x00000000
 #define QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_EXT_SU	0x40000000
-#define QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_MU		0x80000000
 #define QDF_MON_STATUS_HE_SIG_A1_HE_FORMAT_TRIG		0xc0000000
 
 /* DHCP Related Mask */
@@ -366,8 +353,12 @@ struct mon_rx_status {
 #define QDF_NBUF_IPA_CHECK_MASK		0x80000000
 
 /* HE Radiotap data1 Mask */
+#define QDF_MON_STATUS_HE_SU_FORMAT_TYPE 0x0000
+#define QDF_MON_STATUS_HE_EXT_SU_FORMAT_TYPE 0x0001
+#define QDF_MON_STATUS_HE_MU_FORMAT_TYPE 0x0002
 #define QDF_MON_STATUS_HE_TRIG_FORMAT_TYPE 0x0003
-#define QDF_MON_STATUS_HE_SU_OR_EXT_SU_FORMAT_TYPE 0x0000
+
+
 #define QDF_MON_STATUS_HE_BEAM_CHANGE_KNOWN 0x0008
 #define QDF_MON_STATUS_HE_DL_UL_KNOWN 0x0010
 #define QDF_MON_STATUS_HE_MCS_KNOWN 0x0020
@@ -397,6 +388,9 @@ struct mon_rx_status {
 #define QDF_MON_STATUS_LDPC_EXTRA_SYMBOL_SHIFT 14
 #define QDF_MON_STATUS_STBC_SHIFT 15
 
+/* HE radiotap data4 shift values */
+#define QDF_MON_STATUS_STA_ID_SHIFT 4
+
 /* HE radiotap data5 */
 #define QDF_MON_STATUS_GI_SHIFT 4
 #define QDF_MON_STATUS_HE_LTF_SHIFT 8

+ 12 - 41
qdf/linux/src/qdf_nbuf.c

@@ -3815,34 +3815,24 @@ qdf_nbuf_update_radiotap_he_mu_flags(struct mon_rx_status *rx_status,
 	 * IEEE80211_RADIOTAP_HE_MU u16, u16, u8[4]
 	 * Enable all "known" he-mu radiotap flags for now
 	 */
-	if (rx_status->he_sig_b_common_known &
-			QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU0) {
-		rtap_buf[rtap_len] = rx_status->he_RU[0];
-		rtap_len += 1;
-	}
-
-	if (rx_status->he_sig_b_common_known &
-			QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU1) {
-		rtap_buf[rtap_len] = rx_status->he_RU[1];
-		rtap_len += 1;
-	}
-	if (rx_status->he_sig_b_common_known &
-			QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU2) {
-		rtap_buf[rtap_len] = rx_status->he_RU[2];
-		rtap_len += 1;
-	}
-	if (rx_status->he_sig_b_common_known &
-			QDF_MON_STATUS_HE_SIG_B_COMMON_KNOWN_RU3) {
-		rtap_buf[rtap_len] = rx_status->he_RU[3];
-		rtap_len += 1;
-	}
-
 	put_unaligned_le16(rx_status->he_flags1, &rtap_buf[rtap_len]);
 	rtap_len += 2;
 
 	put_unaligned_le16(rx_status->he_flags2, &rtap_buf[rtap_len]);
 	rtap_len += 2;
 
+	rtap_buf[rtap_len] = rx_status->he_RU[0];
+	rtap_len += 1;
+
+	rtap_buf[rtap_len] = rx_status->he_RU[1];
+	rtap_len += 1;
+
+	rtap_buf[rtap_len] = rx_status->he_RU[2];
+	rtap_len += 1;
+
+	rtap_buf[rtap_len] = rx_status->he_RU[3];
+	rtap_len += 1;
+
 	return rtap_len;
 }
 
@@ -3876,25 +3866,6 @@ qdf_nbuf_update_radiotap_he_mu_other_flags(struct mon_rx_status *rx_status,
 	rtap_buf[rtap_len] = rx_status->he_per_user_known;
 	rtap_len += 1;
 
-	/* HE fields */
-	put_unaligned_le16(rx_status->he_data1, &rtap_buf[rtap_len]);
-	rtap_len += 2;
-
-	put_unaligned_le16(rx_status->he_data2, &rtap_buf[rtap_len]);
-	rtap_len += 2;
-
-	put_unaligned_le16(rx_status->he_data3, &rtap_buf[rtap_len]);
-	rtap_len += 2;
-
-	put_unaligned_le16(rx_status->he_data4, &rtap_buf[rtap_len]);
-	rtap_len += 2;
-
-	put_unaligned_le16(rx_status->he_data5, &rtap_buf[rtap_len]);
-	rtap_len += 2;
-
-	put_unaligned_le16(rx_status->he_data6, &rtap_buf[rtap_len]);
-	rtap_len += 2;
-
 	return rtap_len;
 }