浏览代码

qcacld-3.0: Add VHT transmit power envelope IE in chan switch wrapper

qcacld-2.0 to qcacld-3.0 propagation

Add changes to support VHT transmit power envelope sub element in
channel switch wrapper.

Change-Id: Ieac517ec44238034e1a5539cbe10ebbefb30dd09
CRs-Fixed: 1052716
Abhishek Singh 8 年之前
父节点
当前提交
37456d231d

+ 7 - 0
core/mac/src/cfg/cfgUtil/dot11f.frms

@@ -120,6 +120,7 @@ const EID_AID                        =  197;
 const EID_EXT_CAP           	     =  127;
 const EID_OPERATING_MODE             =  199;
 const EID_WIDER_BW_CHANNEL_SWITCH_ANN=  194;
+const VHT_TRANSMIT_POWER_ENVELOPE    = 195;
 const EID_CHANNEL_SWITCH_WRAPPER     = 196;
 const EID_VENDOR_SPECIFIC            = 221;
 
@@ -2248,9 +2249,15 @@ IE WiderBWChanSwitchAnn (EID_WIDER_BW_CHANNEL_SWITCH_ANN)
    newCenterChanFreq1,    1;
 }
 
+IE vht_transmit_power_env (VHT_TRANSMIT_POWER_ENVELOPE)
+{
+    bytes[2..5];
+}
+
 IE ChannelSwitchWrapper (EID_CHANNEL_SWITCH_WRAPPER)
 {
     OPTIE IE  WiderBWChanSwitchAnn;
+    OPTIE IE  vht_transmit_power_env;
 }
 IE ExtCap (EID_EXT_CAP)
 {

+ 41 - 1
core/mac/src/include/dot11f.h

@@ -3581,6 +3581,45 @@ uint32_t dot11f_get_packed_ie_tgt_mac_addr(
 }; /* End extern "C". */
 #endif /* C++ */
 
+/* EID 195 (0xc3) */
+typedef struct sDot11fIEvht_transmit_power_env {
+	uint8_t             present;
+	uint8_t             num_bytes;
+	uint8_t             bytes[5];
+} tDot11fIEvht_transmit_power_env;
+
+#define DOT11F_EID_VHT_TRANSMIT_POWER_ENV (195)
+
+/* N.B. These #defines do *not* include the EID & length */
+#define DOT11F_IE_VHT_TRANSMIT_POWER_ENV_MIN_LEN (2)
+
+#define DOT11F_IE_VHT_TRANSMIT_POWER_ENV_MAX_LEN (5)
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* C++ */
+uint32_t dot11f_unpack_ie_vht_transmit_power_env(
+	tpAniSirGlobal,
+	uint8_t *,
+	uint8_t,
+	tDot11fIEvht_transmit_power_env*);
+
+uint32_t dot11f_pack_ie_vht_transmit_power_env(
+	tpAniSirGlobal,
+	tDot11fIEvht_transmit_power_env *,
+	uint8_t *,
+	uint32_t,
+	uint32_t*);
+
+uint32_t dot11f_get_packed_ie_vht_transmit_power_env(
+	tpAniSirGlobal,
+	tDot11fIEvht_transmit_power_env *,
+	uint32_t*);
+
+#ifdef __cplusplus
+}; /* End extern "C". */
+#endif /* C++ */
+
 /* EID 197 (0xc5) */
 typedef struct sDot11fIEAID {
 	uint8_t             present;
@@ -3743,6 +3782,7 @@ uint32_t dot11f_get_packed_ie_ChanSwitchAnn(
 typedef struct sDot11fIEChannelSwitchWrapper {
 	uint8_t                              present;
 	tDot11fIEWiderBWChanSwitchAnn        WiderBWChanSwitchAnn;
+	tDot11fIEvht_transmit_power_env        vht_transmit_power_env;
 } tDot11fIEChannelSwitchWrapper;
 
 #define DOT11F_EID_CHANNELSWITCHWRAPPER (196)
@@ -3750,7 +3790,7 @@ typedef struct sDot11fIEChannelSwitchWrapper {
 /* N.B. These #defines do *not* include the EID & length */
 #define DOT11F_IE_CHANNELSWITCHWRAPPER_MIN_LEN (0)
 
-#define DOT11F_IE_CHANNELSWITCHWRAPPER_MAX_LEN (5)
+#define DOT11F_IE_CHANNELSWITCHWRAPPER_MAX_LEN (12)
 
 #ifdef __cplusplus
 extern "C" {

+ 179 - 96
core/mac/src/sys/legacy/src/utils/src/dot11f.c

@@ -2526,6 +2526,30 @@ uint32_t dot11f_unpack_ie_tgt_mac_addr(tpAniSirGlobal pCtx,
 #define SigIetgt_mac_addr (0x0023)
 
 
+uint32_t dot11f_unpack_ie_vht_transmit_power_env(tpAniSirGlobal pCtx,
+						 uint8_t *pBuf,
+						 uint8_t ielen,
+						 tDot11fIEvht_transmit_power_env *pDst)
+{
+	uint32_t status = DOT11F_PARSE_SUCCESS;
+	(void) pBuf; (void)ielen; /* Shutup the compiler */
+	if (pDst->present)
+		status = DOT11F_DUPLICATE_IE;
+	pDst->present = 1;
+	pDst->num_bytes = (uint8_t)(ielen);
+	if (ielen > 5) {
+		pDst->present = 0;
+		return DOT11F_SKIPPED_BAD_IE;
+	}
+
+	DOT11F_MEMCPY(pCtx, pDst->bytes, pBuf, (ielen));
+	(void)pCtx;
+	return status;
+} /* End dot11f_unpack_ie_vht_transmit_power_env. */
+
+#define SigIevht_transmit_power_env (0x0024)
+
+
 uint32_t dot11f_unpack_ie_aid(tpAniSirGlobal pCtx,
 			      uint8_t *pBuf,
 			      uint8_t ielen,
@@ -2541,7 +2565,7 @@ uint32_t dot11f_unpack_ie_aid(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_aid. */
 
-#define SigIeAID (0x0024)
+#define SigIeAID (0x0025)
 
 
 uint32_t dot11f_unpack_ie_cf_params(tpAniSirGlobal pCtx,
@@ -2568,7 +2592,7 @@ uint32_t dot11f_unpack_ie_cf_params(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_cf_params. */
 
-#define SigIeCFParams (0x0025)
+#define SigIeCFParams (0x0026)
 
 
 uint32_t dot11f_unpack_ie_challenge_text(tpAniSirGlobal pCtx,
@@ -2592,7 +2616,7 @@ uint32_t dot11f_unpack_ie_challenge_text(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_challenge_text. */
 
-#define SigIeChallengeText (0x0026)
+#define SigIeChallengeText (0x0027)
 
 
 uint32_t dot11f_unpack_ie_chan_switch_ann(tpAniSirGlobal pCtx,
@@ -2616,7 +2640,7 @@ uint32_t dot11f_unpack_ie_chan_switch_ann(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_chan_switch_ann. */
 
-#define SigIeChanSwitchAnn (0x0027)
+#define SigIeChanSwitchAnn (0x0028)
 
 
 static const tFFDefn FFS_ChannelSwitchWrapper[] = {
@@ -2628,6 +2652,10 @@ static const tIEDefn IES_ChannelSwitchWrapper[] = {
 	offsetof(tDot11fIEWiderBWChanSwitchAnn, present), 0,
 	"WiderBWChanSwitchAnn", 0, 5, 5, SigIeWiderBWChanSwitchAnn,
 	{0, 0, 0, 0, 0}, 0, DOT11F_EID_WIDERBWCHANSWITCHANN, 0, },
+	{ offsetof(tDot11fIEChannelSwitchWrapper, vht_transmit_power_env),
+	offsetof(tDot11fIEvht_transmit_power_env, present), 0,
+	"vht_transmit_power_env", 0, 4, 7, SigIevht_transmit_power_env,
+	{0, 0, 0, 0, 0}, 0, DOT11F_EID_VHT_TRANSMIT_POWER_ENV, 0, },
 	{0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, },
 };
 
@@ -2652,7 +2680,7 @@ uint32_t dot11f_unpack_ie_channel_switch_wrapper(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_channel_switch_wrapper. */
 
-#define SigIeChannelSwitchWrapper (0x0028)
+#define SigIeChannelSwitchWrapper (0x0029)
 
 
 uint32_t dot11f_unpack_ie_country(tpAniSirGlobal pCtx,
@@ -2684,10 +2712,10 @@ uint32_t dot11f_unpack_ie_country(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_country. */
 
-#define SigIeCountry (0x0029)
+#define SigIeCountry (0x002a)
 
 
-#define SigIeDSParams (0x002a)
+#define SigIeDSParams (0x002b)
 
 
 uint32_t dot11f_unpack_ie_edca_param_set(tpAniSirGlobal pCtx,
@@ -2776,7 +2804,7 @@ uint32_t dot11f_unpack_ie_edca_param_set(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_edca_param_set. */
 
-#define SigIeEDCAParamSet (0x002b)
+#define SigIeEDCAParamSet (0x002c)
 
 
 uint32_t dot11f_unpack_ie_erp_info(tpAniSirGlobal pCtx,
@@ -2799,7 +2827,7 @@ uint32_t dot11f_unpack_ie_erp_info(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_erp_info. */
 
-#define SigIeERPInfo (0x002c)
+#define SigIeERPInfo (0x002d)
 
 
 uint32_t dot11f_unpack_ie_ese_cckm_opaque(tpAniSirGlobal pCtx,
@@ -2823,7 +2851,7 @@ uint32_t dot11f_unpack_ie_ese_cckm_opaque(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ese_cckm_opaque. */
 
-#define SigIeESECckmOpaque (0x002d)
+#define SigIeESECckmOpaque (0x002e)
 
 
 uint32_t dot11f_unpack_ie_ese_rad_mgmt_cap(tpAniSirGlobal pCtx,
@@ -2847,7 +2875,7 @@ uint32_t dot11f_unpack_ie_ese_rad_mgmt_cap(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ese_rad_mgmt_cap. */
 
-#define SigIeESERadMgmtCap (0x002e)
+#define SigIeESERadMgmtCap (0x002f)
 
 
 uint32_t dot11f_unpack_ie_ese_traf_strm_met(tpAniSirGlobal pCtx,
@@ -2871,7 +2899,7 @@ uint32_t dot11f_unpack_ie_ese_traf_strm_met(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ese_traf_strm_met. */
 
-#define SigIeESETrafStrmMet (0x002f)
+#define SigIeESETrafStrmMet (0x0030)
 
 
 uint32_t dot11f_unpack_ie_ese_traf_strm_rate_set(tpAniSirGlobal pCtx,
@@ -2898,7 +2926,7 @@ uint32_t dot11f_unpack_ie_ese_traf_strm_rate_set(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ese_traf_strm_rate_set. */
 
-#define SigIeESETrafStrmRateSet (0x0030)
+#define SigIeESETrafStrmRateSet (0x0031)
 
 
 uint32_t dot11f_unpack_ie_ese_txmit_power(tpAniSirGlobal pCtx,
@@ -2919,7 +2947,7 @@ uint32_t dot11f_unpack_ie_ese_txmit_power(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ese_txmit_power. */
 
-#define SigIeESETxmitPower (0x0031)
+#define SigIeESETxmitPower (0x0032)
 
 
 uint32_t dot11f_unpack_ie_ese_version(tpAniSirGlobal pCtx,
@@ -2937,7 +2965,7 @@ uint32_t dot11f_unpack_ie_ese_version(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ese_version. */
 
-#define SigIeESEVersion (0x0032)
+#define SigIeESEVersion (0x0033)
 
 
 uint32_t dot11f_unpack_ie_ext_cap(tpAniSirGlobal pCtx,
@@ -2966,7 +2994,7 @@ endUnpackIeExtCap:
 	return status;
 } /* End dot11f_unpack_ie_ext_cap. */
 
-#define SigIeExtCap (0x0033)
+#define SigIeExtCap (0x0034)
 
 
 uint32_t dot11f_unpack_ie_ext_supp_rates(tpAniSirGlobal pCtx,
@@ -2998,7 +3026,7 @@ uint32_t dot11f_unpack_ie_ext_supp_rates(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ext_supp_rates. */
 
-#define SigIeExtSuppRates (0x0034)
+#define SigIeExtSuppRates (0x0035)
 
 
 uint32_t dot11f_unpack_ie_fh_param_set(tpAniSirGlobal pCtx,
@@ -3025,7 +3053,7 @@ uint32_t dot11f_unpack_ie_fh_param_set(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_fh_param_set. */
 
-#define SigIeFHParamSet (0x0035)
+#define SigIeFHParamSet (0x0036)
 
 
 uint32_t dot11f_unpack_ie_fh_params(tpAniSirGlobal pCtx,
@@ -3046,7 +3074,7 @@ uint32_t dot11f_unpack_ie_fh_params(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_fh_params. */
 
-#define SigIeFHParams (0x0036)
+#define SigIeFHParams (0x0037)
 
 
 uint32_t dot11f_unpack_ie_fh_patt_table(tpAniSirGlobal pCtx,
@@ -3082,7 +3110,7 @@ uint32_t dot11f_unpack_ie_fh_patt_table(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_fh_patt_table. */
 
-#define SigIeFHPattTable (0x0037)
+#define SigIeFHPattTable (0x0038)
 
 
 static const tFFDefn FFS_FTInfo[] = {
@@ -3139,7 +3167,7 @@ uint32_t dot11f_unpack_ie_ft_info(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ft_info. */
 
-#define SigIeFTInfo (0x0038)
+#define SigIeFTInfo (0x0039)
 
 
 uint32_t dot11f_unpack_ie_ht_caps(tpAniSirGlobal pCtx,
@@ -3232,7 +3260,7 @@ uint32_t dot11f_unpack_ie_ht_caps(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ht_caps. */
 
-#define SigIeHTCaps (0x0039)
+#define SigIeHTCaps (0x003a)
 
 
 uint32_t dot11f_unpack_ie_ht_info(tpAniSirGlobal pCtx,
@@ -3291,7 +3319,7 @@ uint32_t dot11f_unpack_ie_ht_info(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ht_info. */
 
-#define SigIeHTInfo (0x003a)
+#define SigIeHTInfo (0x003b)
 
 
 uint32_t dot11f_unpack_ie_ibss_params(tpAniSirGlobal pCtx,
@@ -3309,7 +3337,7 @@ uint32_t dot11f_unpack_ie_ibss_params(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ibss_params. */
 
-#define SigIeIBSSParams (0x003b)
+#define SigIeIBSSParams (0x003c)
 
 
 uint32_t dot11f_unpack_ie_link_identifier(tpAniSirGlobal pCtx,
@@ -3333,7 +3361,7 @@ uint32_t dot11f_unpack_ie_link_identifier(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_link_identifier. */
 
-#define SigIeLinkIdentifier (0x003c)
+#define SigIeLinkIdentifier (0x003d)
 
 
 uint32_t dot11f_unpack_ie_MBO_IE(tpAniSirGlobal pCtx,
@@ -3360,7 +3388,7 @@ uint32_t dot11f_unpack_ie_MBO_IE(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_MBO_IE. */
 
-#define SigIeMBO_IE (0x003d)
+#define SigIeMBO_IE (0x003e)
 
 
 static const tFFDefn FFS_reportBeacon[] = {
@@ -3522,7 +3550,7 @@ uint32_t dot11f_unpack_ie_measurement_report(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_measurement_report. */
 
-#define SigIeMeasurementReport (0x003e)
+#define SigIeMeasurementReport (0x003f)
 
 
 static const tFFDefn FFS_measurement_requestBeacon[] = {
@@ -3714,7 +3742,7 @@ uint32_t dot11f_unpack_ie_measurement_request(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_measurement_request. */
 
-#define SigIeMeasurementRequest (0x003f)
+#define SigIeMeasurementRequest (0x0040)
 
 
 uint32_t dot11f_unpack_ie_mobility_domain(tpAniSirGlobal pCtx,
@@ -3739,7 +3767,7 @@ uint32_t dot11f_unpack_ie_mobility_domain(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_mobility_domain. */
 
-#define SigIeMobilityDomain (0x0040)
+#define SigIeMobilityDomain (0x0041)
 
 
 static const tFFDefn FFS_NeighborReport[] = {
@@ -3824,7 +3852,7 @@ uint32_t dot11f_unpack_ie_neighbor_report(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_neighbor_report. */
 
-#define SigIeNeighborReport (0x0041)
+#define SigIeNeighborReport (0x0042)
 
 
 uint32_t dot11f_unpack_ie_obss_scan_parameters(tpAniSirGlobal pCtx,
@@ -3860,7 +3888,7 @@ uint32_t dot11f_unpack_ie_obss_scan_parameters(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_obss_scan_parameters. */
 
-#define SigIeOBSSScanParameters (0x0042)
+#define SigIeOBSSScanParameters (0x0043)
 
 
 uint32_t dot11f_unpack_ie_operating_mode(tpAniSirGlobal pCtx,
@@ -3883,7 +3911,7 @@ uint32_t dot11f_unpack_ie_operating_mode(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_operating_mode. */
 
-#define SigIeOperatingMode (0x0043)
+#define SigIeOperatingMode (0x0044)
 
 
 static const tTLVDefn TLVS_P2PAssocReq[] = {
@@ -3914,7 +3942,7 @@ uint32_t dot11f_unpack_ie_p2_p_assoc_req(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_p2_p_assoc_req. */
 
-#define SigIeP2PAssocReq (0x0044)
+#define SigIeP2PAssocReq (0x0045)
 
 
 static const tTLVDefn TLVS_P2PAssocRes[] = {
@@ -3942,7 +3970,7 @@ uint32_t dot11f_unpack_ie_p2_p_assoc_res(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_p2_p_assoc_res. */
 
-#define SigIeP2PAssocRes (0x0045)
+#define SigIeP2PAssocRes (0x0046)
 
 
 static const tTLVDefn TLVS_P2PBeacon[] = {
@@ -3973,7 +4001,7 @@ uint32_t dot11f_unpack_ie_p2_p_beacon(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_p2_p_beacon. */
 
-#define SigIeP2PBeacon (0x0046)
+#define SigIeP2PBeacon (0x0047)
 
 
 static const tTLVDefn TLVS_P2PBeaconProbeRes[] = {
@@ -4014,7 +4042,7 @@ uint32_t dot11f_unpack_ie_p2_p_beacon_probe_res(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_p2_p_beacon_probe_res. */
 
-#define SigIeP2PBeaconProbeRes (0x0047)
+#define SigIeP2PBeaconProbeRes (0x0048)
 
 
 static const tTLVDefn TLVS_P2PDeAuth[] = {
@@ -4039,7 +4067,7 @@ uint32_t dot11f_unpack_ie_p2_p_de_auth(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_p2_p_de_auth. */
 
-#define SigIeP2PDeAuth (0x0048)
+#define SigIeP2PDeAuth (0x0049)
 
 
 static const tTLVDefn TLVS_P2PDisAssoc[] = {
@@ -4064,7 +4092,7 @@ uint32_t dot11f_unpack_ie_p2_p_dis_assoc(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_p2_p_dis_assoc. */
 
-#define SigIeP2PDisAssoc (0x0049)
+#define SigIeP2PDisAssoc (0x004a)
 
 
 uint32_t dot11f_unpack_ie_p2_pie_opaque(tpAniSirGlobal pCtx,
@@ -4088,7 +4116,7 @@ uint32_t dot11f_unpack_ie_p2_pie_opaque(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_p2_pie_opaque. */
 
-#define SigIeP2PIEOpaque (0x004a)
+#define SigIeP2PIEOpaque (0x004b)
 
 
 static const tTLVDefn TLVS_P2PProbeReq[] = {
@@ -4126,7 +4154,7 @@ uint32_t dot11f_unpack_ie_p2_p_probe_req(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_p2_p_probe_req. */
 
-#define SigIeP2PProbeReq (0x004b)
+#define SigIeP2PProbeReq (0x004c)
 
 
 static const tTLVDefn TLVS_P2PProbeRes[] = {
@@ -4164,7 +4192,7 @@ uint32_t dot11f_unpack_ie_p2_p_probe_res(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_p2_p_probe_res. */
 
-#define SigIeP2PProbeRes (0x004c)
+#define SigIeP2PProbeRes (0x004d)
 
 
 uint32_t dot11f_unpack_ie_pti_control(tpAniSirGlobal pCtx,
@@ -4185,7 +4213,7 @@ uint32_t dot11f_unpack_ie_pti_control(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_pti_control. */
 
-#define SigIePTIControl (0x004d)
+#define SigIePTIControl (0x004e)
 
 
 uint32_t dot11f_unpack_ie_pu_buffer_status(tpAniSirGlobal pCtx,
@@ -4209,7 +4237,7 @@ uint32_t dot11f_unpack_ie_pu_buffer_status(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_pu_buffer_status. */
 
-#define SigIePUBufferStatus (0x004e)
+#define SigIePUBufferStatus (0x004f)
 
 
 uint32_t dot11f_unpack_ie_power_caps(tpAniSirGlobal pCtx,
@@ -4230,7 +4258,7 @@ uint32_t dot11f_unpack_ie_power_caps(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_power_caps. */
 
-#define SigIePowerCaps (0x004f)
+#define SigIePowerCaps (0x0050)
 
 
 uint32_t dot11f_unpack_ie_power_constraints(tpAniSirGlobal pCtx,
@@ -4248,7 +4276,7 @@ uint32_t dot11f_unpack_ie_power_constraints(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_power_constraints. */
 
-#define SigIePowerConstraints (0x0050)
+#define SigIePowerConstraints (0x0051)
 
 
 uint32_t dot11f_unpack_ie_qbss_load(tpAniSirGlobal pCtx,
@@ -4272,7 +4300,7 @@ uint32_t dot11f_unpack_ie_qbss_load(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_qbss_load. */
 
-#define SigIeQBSSLoad (0x0051)
+#define SigIeQBSSLoad (0x0052)
 
 
 uint32_t dot11f_unpack_ie_QComVendorIE(tpAniSirGlobal pCtx,
@@ -4293,7 +4321,7 @@ uint32_t dot11f_unpack_ie_QComVendorIE(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_QComVendorIE. */
 
-#define SigIeQComVendorIE (0x0052)
+#define SigIeQComVendorIE (0x0053)
 
 
 uint32_t dot11f_unpack_ie_qos_caps_ap(tpAniSirGlobal pCtx,
@@ -4317,7 +4345,7 @@ uint32_t dot11f_unpack_ie_qos_caps_ap(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_qos_caps_ap. */
 
-#define SigIeQOSCapsAp (0x0053)
+#define SigIeQOSCapsAp (0x0054)
 
 
 uint32_t dot11f_unpack_ie_qos_caps_station(tpAniSirGlobal pCtx,
@@ -4343,7 +4371,7 @@ uint32_t dot11f_unpack_ie_qos_caps_station(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_qos_caps_station. */
 
-#define SigIeQOSCapsStation (0x0054)
+#define SigIeQOSCapsStation (0x0055)
 
 
 uint32_t dot11f_unpack_ie_qos_map_set(tpAniSirGlobal pCtx,
@@ -4367,7 +4395,7 @@ uint32_t dot11f_unpack_ie_qos_map_set(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_qos_map_set. */
 
-#define SigIeQosMapSet (0x0055)
+#define SigIeQosMapSet (0x0056)
 
 
 uint32_t dot11f_unpack_ie_quiet(tpAniSirGlobal pCtx,
@@ -4394,7 +4422,7 @@ uint32_t dot11f_unpack_ie_quiet(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_quiet. */
 
-#define SigIeQuiet (0x0056)
+#define SigIeQuiet (0x0057)
 
 
 uint32_t dot11f_unpack_ie_rcpiie(tpAniSirGlobal pCtx,
@@ -4412,7 +4440,7 @@ uint32_t dot11f_unpack_ie_rcpiie(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_rcpiie. */
 
-#define SigIeRCPIIE (0x0057)
+#define SigIeRCPIIE (0x0058)
 
 
 static const tFFDefn FFS_RICDataDesc[] = {
@@ -4486,7 +4514,7 @@ uint32_t dot11f_unpack_ie_ric_data_desc(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ric_data_desc. */
 
-#define SigIeRICDataDesc (0x0058)
+#define SigIeRICDataDesc (0x0059)
 
 
 uint32_t dot11f_unpack_ie_rsn(tpAniSirGlobal pCtx,
@@ -4577,7 +4605,7 @@ uint32_t dot11f_unpack_ie_rsn(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_rsn. */
 
-#define SigIeRSN (0x0059)
+#define SigIeRSN (0x005a)
 
 
 uint32_t dot11f_unpack_ie_rsniie(tpAniSirGlobal pCtx,
@@ -4595,7 +4623,7 @@ uint32_t dot11f_unpack_ie_rsniie(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_rsniie. */
 
-#define SigIeRSNIIE (0x005a)
+#define SigIeRSNIIE (0x005b)
 
 
 uint32_t dot11f_unpack_ie_rsn_opaque(tpAniSirGlobal pCtx,
@@ -4619,7 +4647,7 @@ uint32_t dot11f_unpack_ie_rsn_opaque(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_rsn_opaque. */
 
-#define SigIeRSNOpaque (0x005b)
+#define SigIeRSNOpaque (0x005c)
 
 
 uint32_t dot11f_unpack_ie_supp_channels(tpAniSirGlobal pCtx,
@@ -4643,7 +4671,7 @@ uint32_t dot11f_unpack_ie_supp_channels(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_supp_channels. */
 
-#define SigIeSuppChannels (0x005c)
+#define SigIeSuppChannels (0x005d)
 
 
 uint32_t dot11f_unpack_ie_supp_operating_classes(tpAniSirGlobal pCtx,
@@ -4667,7 +4695,7 @@ uint32_t dot11f_unpack_ie_supp_operating_classes(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_supp_operating_classes. */
 
-#define SigIeSuppOperatingClasses (0x005d)
+#define SigIeSuppOperatingClasses (0x005e)
 
 
 uint32_t dot11f_unpack_ie_supp_rates(tpAniSirGlobal pCtx,
@@ -4699,7 +4727,7 @@ uint32_t dot11f_unpack_ie_supp_rates(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_supp_rates. */
 
-#define SigIeSuppRates (0x005e)
+#define SigIeSuppRates (0x005f)
 
 
 uint32_t dot11f_unpack_ie_tim(tpAniSirGlobal pCtx,
@@ -4732,7 +4760,7 @@ uint32_t dot11f_unpack_ie_tim(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_tim. */
 
-#define SigIeTIM (0x005f)
+#define SigIeTIM (0x0060)
 
 
 uint32_t dot11f_unpack_ie_tpc_report(tpAniSirGlobal pCtx,
@@ -4753,7 +4781,7 @@ uint32_t dot11f_unpack_ie_tpc_report(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_tpc_report. */
 
-#define SigIeTPCReport (0x0060)
+#define SigIeTPCReport (0x0061)
 
 
 uint32_t dot11f_unpack_ie_tpc_request(tpAniSirGlobal pCtx,
@@ -4770,7 +4798,7 @@ uint32_t dot11f_unpack_ie_tpc_request(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_tpc_request. */
 
-#define SigIeTPCRequest (0x0061)
+#define SigIeTPCRequest (0x0062)
 
 
 uint32_t dot11f_unpack_ie_time_advertisement(tpAniSirGlobal pCtx,
@@ -4794,7 +4822,7 @@ uint32_t dot11f_unpack_ie_time_advertisement(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_time_advertisement. */
 
-#define SigIeTimeAdvertisement (0x0062)
+#define SigIeTimeAdvertisement (0x0063)
 
 
 uint32_t dot11f_unpack_ie_timeout_interval(tpAniSirGlobal pCtx,
@@ -4815,7 +4843,7 @@ uint32_t dot11f_unpack_ie_timeout_interval(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_timeout_interval. */
 
-#define SigIeTimeoutInterval (0x0063)
+#define SigIeTimeoutInterval (0x0064)
 
 
 uint32_t dot11f_unpack_ie_vht_ext_bss_load(tpAniSirGlobal pCtx,
@@ -4845,7 +4873,7 @@ uint32_t dot11f_unpack_ie_vht_ext_bss_load(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_vht_ext_bss_load. */
 
-#define SigIeVHTExtBssLoad (0x0064)
+#define SigIeVHTExtBssLoad (0x0065)
 
 
 uint32_t dot11f_unpack_ie_vendor1_ie(tpAniSirGlobal pCtx,
@@ -4862,7 +4890,7 @@ uint32_t dot11f_unpack_ie_vendor1_ie(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_vendor1_ie. */
 
-#define SigIeVendor1IE (0x0065)
+#define SigIeVendor1IE (0x0066)
 
 
 uint32_t dot11f_unpack_ie_vendor3_ie(tpAniSirGlobal pCtx,
@@ -4879,7 +4907,7 @@ uint32_t dot11f_unpack_ie_vendor3_ie(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_vendor3_ie. */
 
-#define SigIeVendor3IE (0x0066)
+#define SigIeVendor3IE (0x0067)
 
 
 uint32_t dot11f_unpack_ie_wapi(tpAniSirGlobal pCtx,
@@ -4948,7 +4976,7 @@ uint32_t dot11f_unpack_ie_wapi(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wapi. */
 
-#define SigIeWAPI (0x0067)
+#define SigIeWAPI (0x0068)
 
 
 uint32_t dot11f_unpack_ie_wapi_opaque(tpAniSirGlobal pCtx,
@@ -4972,7 +5000,7 @@ uint32_t dot11f_unpack_ie_wapi_opaque(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wapi_opaque. */
 
-#define SigIeWAPIOpaque (0x0068)
+#define SigIeWAPIOpaque (0x0069)
 
 
 uint32_t dot11f_unpack_ie_wfatpc(tpAniSirGlobal pCtx,
@@ -4993,7 +5021,7 @@ uint32_t dot11f_unpack_ie_wfatpc(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wfatpc. */
 
-#define SigIeWFATPC (0x0069)
+#define SigIeWFATPC (0x006a)
 
 
 uint32_t dot11f_unpack_ie_wfdie_opaque(tpAniSirGlobal pCtx,
@@ -5017,7 +5045,7 @@ uint32_t dot11f_unpack_ie_wfdie_opaque(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wfdie_opaque. */
 
-#define SigIeWFDIEOpaque (0x006a)
+#define SigIeWFDIEOpaque (0x006b)
 
 
 uint32_t dot11f_unpack_ie_wmm_caps(tpAniSirGlobal pCtx,
@@ -5048,7 +5076,7 @@ uint32_t dot11f_unpack_ie_wmm_caps(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wmm_caps. */
 
-#define SigIeWMMCaps (0x006b)
+#define SigIeWMMCaps (0x006c)
 
 
 uint32_t dot11f_unpack_ie_wmm_info_ap(tpAniSirGlobal pCtx,
@@ -5073,7 +5101,7 @@ uint32_t dot11f_unpack_ie_wmm_info_ap(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wmm_info_ap. */
 
-#define SigIeWMMInfoAp (0x006c)
+#define SigIeWMMInfoAp (0x006d)
 
 
 uint32_t dot11f_unpack_ie_wmm_info_station(tpAniSirGlobal pCtx,
@@ -5102,7 +5130,7 @@ uint32_t dot11f_unpack_ie_wmm_info_station(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wmm_info_station. */
 
-#define SigIeWMMInfoStation (0x006d)
+#define SigIeWMMInfoStation (0x006e)
 
 
 uint32_t dot11f_unpack_ie_wmm_params(tpAniSirGlobal pCtx,
@@ -5198,7 +5226,7 @@ uint32_t dot11f_unpack_ie_wmm_params(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wmm_params. */
 
-#define SigIeWMMParams (0x006e)
+#define SigIeWMMParams (0x006f)
 
 
 uint32_t dot11f_unpack_ie_wpa(tpAniSirGlobal pCtx,
@@ -5271,7 +5299,7 @@ uint32_t dot11f_unpack_ie_wpa(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wpa. */
 
-#define SigIeWPA (0x006f)
+#define SigIeWPA (0x0070)
 
 
 uint32_t dot11f_unpack_ie_wpa_opaque(tpAniSirGlobal pCtx,
@@ -5295,7 +5323,7 @@ uint32_t dot11f_unpack_ie_wpa_opaque(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wpa_opaque. */
 
-#define SigIeWPAOpaque (0x0070)
+#define SigIeWPAOpaque (0x0071)
 
 
 static const tTLVDefn TLVS_WSC[] = {
@@ -5385,7 +5413,7 @@ uint32_t dot11f_unpack_ie_wsc(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wsc. */
 
-#define SigIeWSC (0x0071)
+#define SigIeWSC (0x0072)
 
 
 static const tTLVDefn TLVS_WscAssocReq[] = {
@@ -5416,7 +5444,7 @@ uint32_t dot11f_unpack_ie_wsc_assoc_req(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wsc_assoc_req. */
 
-#define SigIeWscAssocReq (0x0072)
+#define SigIeWscAssocReq (0x0073)
 
 
 static const tTLVDefn TLVS_WscAssocRes[] = {
@@ -5447,7 +5475,7 @@ uint32_t dot11f_unpack_ie_wsc_assoc_res(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wsc_assoc_res. */
 
-#define SigIeWscAssocRes (0x0073)
+#define SigIeWscAssocRes (0x0074)
 
 
 static const tTLVDefn TLVS_WscBeacon[] = {
@@ -5499,7 +5527,7 @@ uint32_t dot11f_unpack_ie_wsc_beacon(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wsc_beacon. */
 
-#define SigIeWscBeacon (0x0074)
+#define SigIeWscBeacon (0x0075)
 
 
 static const tTLVDefn TLVS_WscBeaconProbeRes[] = {
@@ -5576,7 +5604,7 @@ uint32_t dot11f_unpack_ie_wsc_beacon_probe_res(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wsc_beacon_probe_res. */
 
-#define SigIeWscBeaconProbeRes (0x0075)
+#define SigIeWscBeaconProbeRes (0x0076)
 
 
 uint32_t dot11f_unpack_ie_wsc_ie_opaque(tpAniSirGlobal pCtx,
@@ -5600,7 +5628,7 @@ uint32_t dot11f_unpack_ie_wsc_ie_opaque(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wsc_ie_opaque. */
 
-#define SigIeWscIEOpaque (0x0076)
+#define SigIeWscIEOpaque (0x0077)
 
 
 static const tTLVDefn TLVS_WscProbeReq[] = {
@@ -5672,7 +5700,7 @@ uint32_t dot11f_unpack_ie_wsc_probe_req(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wsc_probe_req. */
 
-#define SigIeWscProbeReq (0x0077)
+#define SigIeWscProbeReq (0x0078)
 
 
 static const tTLVDefn TLVS_WscProbeRes[] = {
@@ -5749,7 +5777,7 @@ uint32_t dot11f_unpack_ie_wsc_probe_res(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wsc_probe_res. */
 
-#define SigIeWscProbeRes (0x0078)
+#define SigIeWscProbeRes (0x0079)
 
 
 static const tTLVDefn TLVS_WscReassocRes[] = {
@@ -5780,7 +5808,7 @@ uint32_t dot11f_unpack_ie_wsc_reassoc_res(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_wsc_reassoc_res. */
 
-#define SigIeWscReassocRes (0x0079)
+#define SigIeWscReassocRes (0x007a)
 
 
 uint32_t dot11f_unpack_ie_ext_chan_switch_ann(tpAniSirGlobal pCtx,
@@ -5807,7 +5835,7 @@ uint32_t dot11f_unpack_ie_ext_chan_switch_ann(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ext_chan_switch_ann. */
 
-#define SigIeext_chan_switch_ann (0x007a)
+#define SigIeext_chan_switch_ann (0x007b)
 
 
 uint32_t dot11f_unpack_ie_hs20vendor_ie(tpAniSirGlobal pCtx,
@@ -5851,7 +5879,7 @@ uint32_t dot11f_unpack_ie_hs20vendor_ie(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_hs20vendor_ie. */
 
-#define SigIehs20vendor_ie (0x007b)
+#define SigIehs20vendor_ie (0x007c)
 
 
 uint32_t dot11f_unpack_ie_ht2040_bss_coexistence(tpAniSirGlobal pCtx,
@@ -5876,7 +5904,7 @@ uint32_t dot11f_unpack_ie_ht2040_bss_coexistence(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ht2040_bss_coexistence. */
 
-#define SigIeht2040_bss_coexistence (0x007c)
+#define SigIeht2040_bss_coexistence (0x007d)
 
 
 uint32_t dot11f_unpack_ie_ht2040_bss_intolerant_report(tpAniSirGlobal pCtx,
@@ -5903,7 +5931,7 @@ uint32_t dot11f_unpack_ie_ht2040_bss_intolerant_report(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_ht2040_bss_intolerant_report. */
 
-#define SigIeht2040_bss_intolerant_report (0x007d)
+#define SigIeht2040_bss_intolerant_report (0x007e)
 
 
 uint32_t dot11f_unpack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx,
@@ -5921,7 +5949,7 @@ uint32_t dot11f_unpack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_sec_chan_offset_ele. */
 
-#define SigIesec_chan_offset_ele (0x007e)
+#define SigIesec_chan_offset_ele (0x007f)
 
 
 static const tFFDefn FFS_vendor2_ie[] = {
@@ -5966,7 +5994,7 @@ uint32_t dot11f_unpack_ie_vendor2_ie(tpAniSirGlobal pCtx,
 	return status;
 } /* End dot11f_unpack_ie_vendor2_ie. */
 
-#define SigIevendor2_ie (0x007f)
+#define SigIevendor2_ie (0x0080)
 
 
 static const tFFDefn FFS_AddTSRequest[] = {
@@ -6554,7 +6582,7 @@ static const tIEDefn IES_Beacon[] = {
 	3, DOT11F_EID_HS20VENDOR_IE, 0, },
 	{ offsetof(tDot11fBeacon, ChannelSwitchWrapper),
 	offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
-	"ChannelSwitchWrapper", 0, 2, 7, SigIeChannelSwitchWrapper,
+	"ChannelSwitchWrapper", 0, 2, 14, SigIeChannelSwitchWrapper,
 	{0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, },
 	{ offsetof(tDot11fBeacon, QComVendorIE), offsetof(tDot11fIEQComVendorIE,
 	present), 0, "QComVendorIE", 0, 7, 7, SigIeQComVendorIE,
@@ -6755,7 +6783,7 @@ static const tIEDefn IES_Beacon2[] = {
 	3, DOT11F_EID_HS20VENDOR_IE, 0, },
 	{ offsetof(tDot11fBeacon2, ChannelSwitchWrapper),
 	offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
-	"ChannelSwitchWrapper", 0, 2, 7, SigIeChannelSwitchWrapper,
+	"ChannelSwitchWrapper", 0, 2, 14, SigIeChannelSwitchWrapper,
 	{0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, },
 	{ offsetof(tDot11fBeacon2, QComVendorIE), offsetof(tDot11fIEQComVendorIE,
 	present), 0, "QComVendorIE", 0, 7, 7, SigIeQComVendorIE,
@@ -6952,7 +6980,7 @@ static const tIEDefn IES_BeaconIEs[] = {
 	3, DOT11F_EID_HS20VENDOR_IE, 0, },
 	{ offsetof(tDot11fBeaconIEs, ChannelSwitchWrapper),
 	offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
-	"ChannelSwitchWrapper", 0, 2, 7, SigIeChannelSwitchWrapper,
+	"ChannelSwitchWrapper", 0, 2, 14, SigIeChannelSwitchWrapper,
 	{0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, },
 	{ offsetof(tDot11fBeaconIEs, QComVendorIE),
 	offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE",
@@ -7561,7 +7589,7 @@ static const tIEDefn IES_ProbeResponse[] = {
 	3, DOT11F_EID_HS20VENDOR_IE, 0, },
 	{ offsetof(tDot11fProbeResponse, ChannelSwitchWrapper),
 	offsetof(tDot11fIEChannelSwitchWrapper, present), 0,
-	"ChannelSwitchWrapper", 0, 2, 7, SigIeChannelSwitchWrapper,
+	"ChannelSwitchWrapper", 0, 2, 14, SigIeChannelSwitchWrapper,
 	{0, 0, 0, 0, 0}, 0, DOT11F_EID_CHANNELSWITCHWRAPPER, 0, },
 	{ offsetof(tDot11fProbeResponse, QComVendorIE),
 	offsetof(tDot11fIEQComVendorIE, present), 0, "QComVendorIE",
@@ -9410,6 +9438,15 @@ static uint32_t unpack_core(tpAniSirGlobal pCtx,
 						    sizeof(tDot11fIEtgt_mac_addr) *
 						    countOffset));
 					break;
+				case SigIevht_transmit_power_env:
+					status |=
+						dot11f_unpack_ie_vht_transmit_power_env(
+						    pCtx, pBufRemaining, len,
+						    (tDot11fIEvht_transmit_power_env *)
+						    (pFrm + pIe->offset +
+						    sizeof(tDot11fIEvht_transmit_power_env) *
+						    countOffset));
+					break;
 				case SigIeAID:
 					status |=
 						dot11f_unpack_ie_aid(
@@ -12200,6 +12237,15 @@ static uint32_t get_packed_size_core(tpAniSirGlobal pCtx,
 					  (pFrm + pIe->offset + offset * i))->
 					  present;
 					break;
+				case SigIevht_transmit_power_env:
+					offset = sizeof(tDot11fIEvht_transmit_power_env);
+					byteCount = ((tDot11fIEvht_transmit_power_env *)
+					  (pFrm + pIe->offset + offset * i))->
+					  num_bytes;
+					pIePresent = ((tDot11fIEvht_transmit_power_env *)
+					  (pFrm + pIe->offset + offset * i))->
+					  present;
+					break;
 				case SigIeAID:
 					offset = sizeof(tDot11fIEAID);
 					byteCount = 2;
@@ -16212,6 +16258,35 @@ uint32_t dot11f_pack_ie_tgt_mac_addr(tpAniSirGlobal pCtx,
 	return DOT11F_PARSE_SUCCESS;
 } /* End dot11f_pack_ie_tgt_mac_addr. */
 
+uint32_t dot11f_pack_ie_vht_transmit_power_env(tpAniSirGlobal pCtx,
+					       tDot11fIEvht_transmit_power_env *pSrc,
+					       uint8_t *pBuf,
+					       uint32_t nBuf,
+					       uint32_t *pnConsumed)
+{
+	uint8_t *pIeLen = 0;
+	uint32_t nConsumedOnEntry = *pnConsumed;
+	uint32_t nNeeded = 0U;
+	nNeeded  +=  pSrc->num_bytes;
+	while (pSrc->present) {
+		if (nNeeded > nBuf)
+			return DOT11F_BUFFER_OVERFLOW;
+		*pBuf = 195;
+		++pBuf; ++(*pnConsumed);
+		pIeLen = pBuf;
+		++pBuf; ++(*pnConsumed);
+		DOT11F_MEMCPY(pCtx, pBuf, &(pSrc->bytes), pSrc->num_bytes);
+		*pnConsumed += pSrc->num_bytes;
+		/* fieldsEndFlag = 1 */
+		break;
+	}
+	(void)pCtx;
+	if (pIeLen) {
+		*pIeLen = *pnConsumed - nConsumedOnEntry - 2;
+	}
+	return DOT11F_PARSE_SUCCESS;
+} /* End dot11f_pack_ie_vht_transmit_power_env. */
+
 uint32_t dot11f_pack_ie_aid(tpAniSirGlobal pCtx,
 			    tDot11fIEAID *pSrc,
 			    uint8_t *pBuf,
@@ -21596,6 +21671,14 @@ static uint32_t pack_core(tpAniSirGlobal pCtx,
 				sizeof(tDot11fIEtgt_mac_addr) * i),
 				pBufRemaining, nBufRemaining, &len);
 			break;
+			case SigIevht_transmit_power_env:
+			status |=
+				dot11f_pack_ie_vht_transmit_power_env(
+				pCtx, (tDot11fIEvht_transmit_power_env *)
+				(pSrc + pIe->offset +
+				sizeof(tDot11fIEvht_transmit_power_env) * i),
+				pBufRemaining, nBufRemaining, &len);
+			break;
 			case SigIeAID:
 			status |=
 				dot11f_pack_ie_aid(

+ 18 - 0
core/mac/src/sys/legacy/src/utils/src/parser_api.c

@@ -331,6 +331,8 @@ populate_dot11f_chan_switch_wrapper(tpAniSirGlobal pMac,
 				    tDot11fIEChannelSwitchWrapper *pDot11f,
 				    tpPESession psessionEntry)
 {
+	uint8_t *ie_ptr = NULL;
+
 	/*
 	 * The new country subelement is present only when
 	 * 1. AP performs Extended Channel switching to new country.
@@ -360,6 +362,22 @@ populate_dot11f_chan_switch_wrapper(tpAniSirGlobal pMac,
 		psessionEntry->gLimWiderBWChannelSwitch.newCenterChanFreq1;
 	pDot11f->WiderBWChanSwitchAnn.present = 1;
 
+	/*
+	 * Add the VHT Transmit power Envelope Sublement.
+	 */
+	ie_ptr = lim_get_ie_ptr_new(pMac,
+		psessionEntry->addIeParams.probeRespBCNData_buff,
+		psessionEntry->addIeParams.probeRespBCNDataLen,
+		DOT11F_EID_VHT_TRANSMIT_POWER_ENV, ONE_BYTE);
+	if (ie_ptr) {
+		/* Ignore EID field */
+		ie_ptr++;
+		pDot11f->vht_transmit_power_env.present = 1;
+		pDot11f->vht_transmit_power_env.num_bytes = *ie_ptr++;
+		qdf_mem_copy(pDot11f->vht_transmit_power_env.bytes,
+			ie_ptr, pDot11f->vht_transmit_power_env.num_bytes);
+	}
+
 }
 
 #ifdef FEATURE_AP_MCC_CH_AVOIDANCE