Просмотр исходного кода

qcacld-3.0: Fix the EHT Tx beamformee NSTS capability

Fix the EHT Tx beamformee NSTS capability setting in
management frames.

Change-Id: I0a4da6cdda15880178f37795ad7b105267814c24
CRs-Fixed: 3202438
Kiran Kumar Lokere 2 лет назад
Родитель
Сommit
66056009ad
1 измененных файлов с 22 добавлено и 7 удалено
  1. 22 7
      core/mac/src/sys/legacy/src/utils/src/parser_api.c

+ 22 - 7
core/mac/src/sys/legacy/src/utils/src/parser_api.c

@@ -7126,16 +7126,24 @@ enum EHT_PER_BW_TXRX_MCS_NSS_MAP_IDX {
 				      EHTCAP_PHY_SUBFME_IDX, \
 				      EHTCAP_PHY_SUBFME_BITS, value)
 
-#define EHTCAP_PHY_BFMESSLT80MHZ_GET_FROM_IE(__eht_cap_phy) \
+#define EHTCAP_PHY_BFMESSLT80MHZ_GET_FROM_IE_BYTE0(__eht_cap_phy) \
 			ehtcap_ie_get(__eht_cap_phy[EHTCAP_PHYBYTE_IDX0], \
 				      EHTCAP_PHY_BFMESSLT80MHZ_IDX, \
-				      EHTCAP_PHY_BFMESSLT80MHZ_BITS)
-#define EHTCAP_PHY_BFMESSLT80MHZ_SET_TO_IE(__eht_cap_phy, __value) \
+				      1)
+#define EHTCAP_PHY_BFMESSLT80MHZ_SET_TO_IE_BYTE0(__eht_cap_phy, __value) \
 			ehtcap_ie_set(&__eht_cap_phy[EHTCAP_PHYBYTE_IDX0], \
 				      EHTCAP_PHY_BFMESSLT80MHZ_IDX, \
-				      EHTCAP_PHY_BFMESSLT80MHZ_BITS, __value)
+				      1, __value)
 
 /* byte 1 */
+#define EHTCAP_PHY_BFMESSLT80MHZ_GET_FROM_IE_BYTE1(__eht_cap_phy) \
+			ehtcap_ie_get(__eht_cap_phy[EHTCAP_PHYBYTE_IDX1], \
+				      8, \
+				      2)
+#define EHTCAP_PHY_BFMESSLT80MHZ_SET_TO_IE_BYTE1(__eht_cap_phy, __value) \
+			ehtcap_ie_set(&__eht_cap_phy[EHTCAP_PHYBYTE_IDX1], \
+				      8, \
+				      2, __value)
 #define EHTCAP_PHY_BFMESS160MHZ_GET_FROM_IE(__eht_cap_phy) \
 			ehtcap_ie_get(__eht_cap_phy[EHTCAP_PHYBYTE_IDX1], \
 				      EHTCAP_PHY_BFMESS160MHZ_IDX, \
@@ -7527,9 +7535,12 @@ QDF_STATUS lim_ieee80211_unpack_ehtcap(const uint8_t *eht_cap_ie,
 	      EHTCAP_PHY_SUBFME_GET_FROM_IE(ehtcap->eht_phy_cap.phy_cap_bytes);
 
 	dot11f_eht_cap->bfee_ss_le_80mhz =
-			EHTCAP_PHY_BFMESSLT80MHZ_GET_FROM_IE(
+			EHTCAP_PHY_BFMESSLT80MHZ_GET_FROM_IE_BYTE0(
 					ehtcap->eht_phy_cap.phy_cap_bytes);
 
+	dot11f_eht_cap->bfee_ss_le_80mhz |=
+			(EHTCAP_PHY_BFMESSLT80MHZ_GET_FROM_IE_BYTE1(
+				ehtcap->eht_phy_cap.phy_cap_bytes) << 1);
 	dot11f_eht_cap->bfee_ss_160mhz =
 			EHTCAP_PHY_BFMESS160MHZ_GET_FROM_IE(
 					ehtcap->eht_phy_cap.phy_cap_bytes);
@@ -7933,9 +7944,13 @@ void lim_ieee80211_pack_ehtcap(uint8_t *ie, tDot11fIEeht_cap dot11f_eht_cap,
 	EHTCAP_PHY_SUBFME_SET_TO_IE(ehtcap->eht_phy_cap.phy_cap_bytes, val);
 
 	val = dot11f_eht_cap.bfee_ss_le_80mhz;
-	EHTCAP_PHY_BFMESSLT80MHZ_SET_TO_IE(
-				     ehtcap->eht_phy_cap.phy_cap_bytes, val);
+	EHTCAP_PHY_BFMESSLT80MHZ_SET_TO_IE_BYTE0(
+				     ehtcap->eht_phy_cap.phy_cap_bytes,
+				     val & 1);
 
+	EHTCAP_PHY_BFMESSLT80MHZ_SET_TO_IE_BYTE1(
+				     ehtcap->eht_phy_cap.phy_cap_bytes,
+				     (val >> 1));
 	val = dot11f_eht_cap.bfee_ss_160mhz;
 	EHTCAP_PHY_BFMESS160MHZ_SET_TO_IE(
 				     ehtcap->eht_phy_cap.phy_cap_bytes, val);