From 37456d231de48f56ead716a1c67caffe8143ee60 Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Mon, 29 Aug 2016 16:05:11 +0530 Subject: [PATCH] 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 --- core/mac/src/cfg/cfgUtil/dot11f.frms | 7 + core/mac/src/include/dot11f.h | 42 ++- .../mac/src/sys/legacy/src/utils/src/dot11f.c | 275 ++++++++++++------ .../src/sys/legacy/src/utils/src/parser_api.c | 18 ++ 4 files changed, 245 insertions(+), 97 deletions(-) diff --git a/core/mac/src/cfg/cfgUtil/dot11f.frms b/core/mac/src/cfg/cfgUtil/dot11f.frms index 567492f58582..e204e7ff9731 100644 --- a/core/mac/src/cfg/cfgUtil/dot11f.frms +++ b/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) { diff --git a/core/mac/src/include/dot11f.h b/core/mac/src/include/dot11f.h index fcc6477d904d..8e8c7ada1105 100644 --- a/core/mac/src/include/dot11f.h +++ b/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" { diff --git a/core/mac/src/sys/legacy/src/utils/src/dot11f.c b/core/mac/src/sys/legacy/src/utils/src/dot11f.c index 77fa6c2db8c3..9b7206c3fe68 100644 --- a/core/mac/src/sys/legacy/src/utils/src/dot11f.c +++ b/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( diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c index 7c7bc5314b4a..de0ff9b20457 100644 --- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c +++ b/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