diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index ddb34f8f59cf..d9e07c3b6350 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -756,6 +756,7 @@ struct wlan_mlme_powersave { * @tx_bf_cap: Transmit bf capability * @as_cap: Antenna sharing capability info * @disable_ldpc_with_txbf_ap: Disable ldpc capability + * @vht_mcs_10_11_supp: VHT MCS 10 & 11 support */ struct mlme_vht_capabilities_info { uint8_t supp_chan_width; @@ -799,6 +800,7 @@ struct mlme_vht_capabilities_info { uint8_t tx_bf_cap; uint8_t as_cap; bool disable_ldpc_with_txbf_ap; + bool vht_mcs_10_11_supp; }; /** diff --git a/components/mlme/dispatcher/src/wlan_mlme_api.c b/components/mlme/dispatcher/src/wlan_mlme_api.c index b1dffdb0710d..40f342898006 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_api.c @@ -3121,6 +3121,9 @@ mlme_update_vht_cap(struct wlan_objmgr_psoc *psoc, struct wma_tgt_vht_cap *cfg) if (vht_cap_info->short_gi_160mhz && !cfg->vht_short_gi_160) vht_cap_info->short_gi_160mhz = cfg->vht_short_gi_160; + vht_cap_info->vht_mcs_10_11_supp = cfg->vht_mcs_10_11_supp; + mlme_legacy_debug(" vht_mcs_10_11_supp %d", cfg->vht_mcs_10_11_supp); + return QDF_STATUS_SUCCESS; } diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index d1f5998b42c7..4f9d3120cb58 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -6201,41 +6201,6 @@ wlan_hdd_wifi_test_config_policy[ .type = NLA_U8}, }; -/** - * wlan_hdd_add_qcn_ie() - Add QCN IE to a given IE buffer - * @ie_data: IE buffer - * @ie_len: length of the @ie_data - * - * Return: QDF_STATUS - */ -static QDF_STATUS wlan_hdd_add_qcn_ie(uint8_t *ie_data, uint16_t *ie_len) -{ - tDot11fIEQCN_IE qcn_ie; - uint8_t qcn_ie_hdr[QCN_IE_HDR_LEN] - = {WLAN_ELEMID_VENDOR, DOT11F_IE_QCN_IE_MAX_LEN, - 0x8C, 0xFD, 0xF0, 0x1}; - - if (((*ie_len) + QCN_IE_HDR_LEN + - QCN_IE_VERSION_SUBATTR_DATA_LEN) > MAX_DEFAULT_SCAN_IE_LEN) { - hdd_err("IE buffer not enough for QCN IE"); - return QDF_STATUS_E_FAILURE; - } - - /* Add QCN IE header */ - qdf_mem_copy(ie_data + (*ie_len), qcn_ie_hdr, QCN_IE_HDR_LEN); - (*ie_len) += QCN_IE_HDR_LEN; - - /* Retrieve Version sub-attribute data */ - populate_dot11f_qcn_ie(&qcn_ie); - - /* Add QCN IE data[version sub attribute] */ - qdf_mem_copy(ie_data + (*ie_len), qcn_ie.version, - (QCN_IE_VERSION_SUBATTR_LEN)); - (*ie_len) += (QCN_IE_VERSION_SUBATTR_LEN); - - return QDF_STATUS_SUCCESS; -} - /** * wlan_hdd_save_default_scan_ies() - API to store the default scan IEs * @hdd_ctx: HDD context @@ -6279,8 +6244,9 @@ static int wlan_hdd_save_default_scan_ies(struct hdd_context *hdd_ctx, /* Add QCN IE if g_qcn_ie_support INI is enabled */ if (add_qcn_ie) - wlan_hdd_add_qcn_ie(scan_info->default_scan_ies, - &(scan_info->default_scan_ies_len)); + sme_add_qcn_ie(hdd_ctx->mac_handle, + scan_info->default_scan_ies, + &scan_info->default_scan_ies_len); hdd_debug("Saved default scan IE:"); qdf_trace_hex_dump(QDF_MODULE_ID_HDD, QDF_TRACE_LEVEL_DEBUG, diff --git a/core/mac/src/cfg/cfgUtil/dot11f.frms b/core/mac/src/cfg/cfgUtil/dot11f.frms index 3f4f5d0cc81b..8b29b35aab1e 100644 --- a/core/mac/src/cfg/cfgUtil/dot11f.frms +++ b/core/mac/src/cfg/cfgUtil/dot11f.frms @@ -2612,9 +2612,21 @@ IE TimeAdvertisement (EID_TIME_ADVERTISEMENT) // 8.4.2.63 time_error[5]; } -IE QCN_IE (EID_VENDOR_SPECIFIC) OUI ( 0x8C, 0xFD, 0xF0, 0x01 ) +const QCOM_VERSION_ATTR_ID = 1; +const QCOM_VHT_MCS_10_11_ATTR_ID = 2; + +IE qcn_ie (EID_VENDOR_SPECIFIC) OUI ( 0x8C, 0xFD, 0xF0, 0x01 ) { - version[4]; + OPTIE IE version_attr (QCOM_VERSION_ATTR_ID) + { + version, 1; + sub_version, 1; + } + + OPTIE IE vht_mcs11_attr (QCOM_VHT_MCS_10_11_ATTR_ID) + { + vht_mcs_10_11_supp, 1; + } } IE esp_information (EID_EXTN_ID_ELEMENT) OUI ( 0x0B ) @@ -3465,7 +3477,7 @@ FRAME Beacon // C.f. Sec. 7.2.3.1 OPTIE QComVendorIE; OPTIE ESEVersion; OPTIE MBO_IE; - OPTIE QCN_IE; + OPTIE qcn_ie; OPTIE he_cap; OPTIE he_op; OPTIE bss_color_change; @@ -3561,7 +3573,7 @@ FRAME Beacon2 OPTIE hs20vendor_ie; OPTIE QComVendorIE; OPTIE ESEVersion; - OPTIE QCN_IE; + OPTIE qcn_ie; OPTIE he_cap; OPTIE he_op; OPTIE bss_color_change; @@ -3633,7 +3645,7 @@ FRAME BeaconIEs OPTIE ChannelSwitchWrapper; OPTIE QComVendorIE; OPTIE MBO_IE; - OPTIE QCN_IE; + OPTIE qcn_ie; OPTIE he_cap; OPTIE he_op; OPTIE bss_color_change; @@ -3685,7 +3697,7 @@ FRAME AssocRequest // 7.2.3.4 OPTIE WFDIEOpaque; OPTIE vendor_vht_ie; OPTIE hs20vendor_ie; - OPTIE QCN_IE; + OPTIE qcn_ie; OPTIE he_cap; OPTIE osen_ie; OPTIE roaming_consortium_sel; @@ -3729,7 +3741,7 @@ FRAME AssocResponse // 7.2.3.5 OPTIE fragment_ie; OPTIE fils_kde; OPTIE vendor_vht_ie; - OPTIE QCN_IE; + OPTIE qcn_ie; OPTIE he_cap; OPTIE he_op; OPTIE bss_color_change; @@ -3829,7 +3841,7 @@ FRAME ProbeRequest // 7.2.3.8 OPTIE P2PProbeReq; OPTIE VHTCaps; OPTIE ExtCap; - OPTIE QCN_IE; + OPTIE qcn_ie; OPTIE he_cap; } // End frame ProbeRequest. @@ -3890,7 +3902,7 @@ FRAME ProbeResponse // 7.2.3.9 OPTIE QComVendorIE; OPTIE ESEVersion; OPTIE MBO_IE; - OPTIE QCN_IE; + OPTIE qcn_ie; OPTIE he_cap; OPTIE he_op; OPTIE bss_color_change; diff --git a/core/mac/src/include/dot11f.h b/core/mac/src/include/dot11f.h index 20b7f30b0a9d..2b57b0dc99d8 100644 --- a/core/mac/src/include/dot11f.h +++ b/core/mac/src/include/dot11f.h @@ -26,7 +26,7 @@ * * * This file was automatically generated by 'framesc' - * Fri May 31 20:00:27 2019 from the following file(s): + * Wed Aug 7 14:47:51 2019 from the following file(s): * * dot11f.frms * @@ -2730,6 +2730,85 @@ uint32_t dot11f_get_packed_ie_R1KH_ID( }; /* End extern "C". */ #endif /* C++ */ +/* EID 1 (0x01) */ +typedef struct sDot11fIEversion_attr { + uint8_t present; + uint8_t version; + uint8_t sub_version; +} tDot11fIEversion_attr; + +#define DOT11F_EID_VERSION_ATTR (1) + +/* N.B. These #defines do *not* include the EID & length */ +#define DOT11F_IE_VERSION_ATTR_MIN_LEN (2) + +#define DOT11F_IE_VERSION_ATTR_MAX_LEN (2) + +#ifdef __cplusplus +extern "C" { +#endif /* C++ */ +__must_check uint32_t dot11f_unpack_ie_version_attr( + tpAniSirGlobal, + uint8_t *, + uint8_t, + tDot11fIEversion_attr*, + bool); + +uint32_t dot11f_pack_ie_version_attr( + tpAniSirGlobal, + tDot11fIEversion_attr *, + uint8_t *, + uint32_t, + uint32_t*); + +uint32_t dot11f_get_packed_ie_version_attr( + tpAniSirGlobal, + tDot11fIEversion_attr *, + uint32_t*); + +#ifdef __cplusplus +}; /* End extern "C". */ +#endif /* C++ */ + +/* EID 2 (0x02) */ +typedef struct sDot11fIEvht_mcs11_attr { + uint8_t present; + uint8_t vht_mcs_10_11_supp; +} tDot11fIEvht_mcs11_attr; + +#define DOT11F_EID_VHT_MCS11_ATTR (2) + +/* N.B. These #defines do *not* include the EID & length */ +#define DOT11F_IE_VHT_MCS11_ATTR_MIN_LEN (1) + +#define DOT11F_IE_VHT_MCS11_ATTR_MAX_LEN (1) + +#ifdef __cplusplus +extern "C" { +#endif /* C++ */ +__must_check uint32_t dot11f_unpack_ie_vht_mcs11_attr( + tpAniSirGlobal, + uint8_t *, + uint8_t, + tDot11fIEvht_mcs11_attr*, + bool); + +uint32_t dot11f_pack_ie_vht_mcs11_attr( + tpAniSirGlobal, + tDot11fIEvht_mcs11_attr *, + uint8_t *, + uint32_t, + uint32_t*); + +uint32_t dot11f_get_packed_ie_vht_mcs11_attr( + tpAniSirGlobal, + tDot11fIEvht_mcs11_attr *, + uint32_t*); + +#ifdef __cplusplus +}; /* End extern "C". */ +#endif /* C++ */ + /* EID 51 (0x33) */ typedef struct sDot11fIEAPChannelReport { uint8_t present; @@ -6395,45 +6474,6 @@ uint32_t dot11f_get_packed_ie_QBSSLoad( }; /* End extern "C". */ #endif /* C++ */ -/* EID 221 (0xdd) {OUI 0x8c, 0xfd, 0xf0, 0x01} */ -typedef struct sDot11fIEQCN_IE { - uint8_t present; - uint8_t version[4]; -} tDot11fIEQCN_IE; - -#define DOT11F_EID_QCN_IE (221) - -/* N.B. These #defines do *not* include the EID & length */ -#define DOT11F_IE_QCN_IE_MIN_LEN (8) - -#define DOT11F_IE_QCN_IE_MAX_LEN (8) - -#ifdef __cplusplus -extern "C" { -#endif /* C++ */ -__must_check uint32_t dot11f_unpack_ie_QCN_IE( - tpAniSirGlobal, - uint8_t *, - uint8_t, - tDot11fIEQCN_IE*, - bool); - -uint32_t dot11f_pack_ie_QCN_IE( - tpAniSirGlobal, - tDot11fIEQCN_IE *, - uint8_t *, - uint32_t, - uint32_t*); - -uint32_t dot11f_get_packed_ie_QCN_IE( - tpAniSirGlobal, - tDot11fIEQCN_IE *, - uint32_t*); - -#ifdef __cplusplus -}; /* End extern "C". */ -#endif /* C++ */ - /* EID 221 (0xdd) {OUI 0x00, 0xa0, 0xc6} */ typedef struct sDot11fIEQComVendorIE { uint8_t present; @@ -9270,6 +9310,46 @@ uint32_t dot11f_get_packed_ie_osen_ie( }; /* End extern "C". */ #endif /* C++ */ +/* EID 221 (0xdd) {OUI 0x8c, 0xfd, 0xf0, 0x01} */ +typedef struct sDot11fIEqcn_ie { + uint8_t present; + tDot11fIEversion_attr version_attr; + tDot11fIEvht_mcs11_attr vht_mcs11_attr; +} tDot11fIEqcn_ie; + +#define DOT11F_EID_QCN_IE (221) + +/* N.B. These #defines do *not* include the EID & length */ +#define DOT11F_IE_QCN_IE_MIN_LEN (4) + +#define DOT11F_IE_QCN_IE_MAX_LEN (11) + +#ifdef __cplusplus +extern "C" { +#endif /* C++ */ +__must_check uint32_t dot11f_unpack_ie_qcn_ie( + tpAniSirGlobal, + uint8_t *, + uint8_t, + tDot11fIEqcn_ie*, + bool); + +uint32_t dot11f_pack_ie_qcn_ie( + tpAniSirGlobal, + tDot11fIEqcn_ie *, + uint8_t *, + uint32_t, + uint32_t*); + +uint32_t dot11f_get_packed_ie_qcn_ie( + tpAniSirGlobal, + tDot11fIEqcn_ie *, + uint32_t*); + +#ifdef __cplusplus +}; /* End extern "C". */ +#endif /* C++ */ + /* EID 221 (0xdd) {OUI 0x50, 0x6f, 0x9a, 0x1d} */ typedef struct sDot11fIEroaming_consortium_sel { uint8_t present; @@ -9505,7 +9585,7 @@ typedef struct sDot11fAssocRequest{ tDot11fIEWFDIEOpaque WFDIEOpaque; tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEhs20vendor_ie hs20vendor_ie; - tDot11fIEQCN_IE QCN_IE; + tDot11fIEqcn_ie qcn_ie; tDot11fIEhe_cap he_cap; tDot11fIEosen_ie osen_ie; tDot11fIEroaming_consortium_sel roaming_consortium_sel; @@ -9570,7 +9650,7 @@ typedef struct sDot11fAssocResponse{ tDot11fIEfragment_ie fragment_ie; tDot11fIEfils_kde fils_kde; tDot11fIEvendor_vht_ie vendor_vht_ie; - tDot11fIEQCN_IE QCN_IE; + tDot11fIEqcn_ie qcn_ie; tDot11fIEhe_cap he_cap; tDot11fIEhe_op he_op; tDot11fIEbss_color_change bss_color_change; @@ -9693,7 +9773,7 @@ typedef struct sDot11fBeacon{ tDot11fIEQComVendorIE QComVendorIE; tDot11fIEESEVersion ESEVersion; tDot11fIEMBO_IE MBO_IE; - tDot11fIEQCN_IE QCN_IE; + tDot11fIEqcn_ie qcn_ie; tDot11fIEhe_cap he_cap; tDot11fIEhe_op he_op; tDot11fIEbss_color_change bss_color_change; @@ -9795,7 +9875,7 @@ typedef struct sDot11fBeacon2{ tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEQComVendorIE QComVendorIE; tDot11fIEESEVersion ESEVersion; - tDot11fIEQCN_IE QCN_IE; + tDot11fIEqcn_ie qcn_ie; tDot11fIEhe_cap he_cap; tDot11fIEhe_op he_op; tDot11fIEbss_color_change bss_color_change; @@ -9878,7 +9958,7 @@ typedef struct sDot11fBeaconIEs{ tDot11fIEChannelSwitchWrapper ChannelSwitchWrapper; tDot11fIEQComVendorIE QComVendorIE; tDot11fIEMBO_IE MBO_IE; - tDot11fIEQCN_IE QCN_IE; + tDot11fIEqcn_ie qcn_ie; tDot11fIEhe_cap he_cap; tDot11fIEhe_op he_op; tDot11fIEbss_color_change bss_color_change; @@ -10221,7 +10301,7 @@ typedef struct sDot11fProbeRequest{ tDot11fIEP2PProbeReq P2PProbeReq; tDot11fIEVHTCaps VHTCaps; tDot11fIEExtCap ExtCap; - tDot11fIEQCN_IE QCN_IE; + tDot11fIEqcn_ie qcn_ie; tDot11fIEhe_cap he_cap; } tDot11fProbeRequest; @@ -10299,7 +10379,7 @@ typedef struct sDot11fProbeResponse{ tDot11fIEQComVendorIE QComVendorIE; tDot11fIEESEVersion ESEVersion; tDot11fIEMBO_IE MBO_IE; - tDot11fIEQCN_IE QCN_IE; + tDot11fIEqcn_ie qcn_ie; tDot11fIEhe_cap he_cap; tDot11fIEhe_op he_op; tDot11fIEbss_color_change bss_color_change; diff --git a/core/mac/src/include/dph_global.h b/core/mac/src/include/dph_global.h index 32262c5eb89b..4d1771e0d11c 100644 --- a/core/mac/src/include/dph_global.h +++ b/core/mac/src/include/dph_global.h @@ -152,6 +152,7 @@ typedef struct sDphHashNode { uint8_t vhtSupportedRxNss; uint8_t vhtBeamFormerCapable; uint8_t vht_su_bfee_capable; + uint8_t vht_mcs_10_11_supp; #ifdef WLAN_FEATURE_11W TX_TIMER pmfSaQueryTimer; uint16_t pmfSaQueryCurrentTransId; diff --git a/core/mac/src/include/parser_api.h b/core/mac/src/include/parser_api.h index ef86ec27c082..fe4e3a8f3619 100644 --- a/core/mac/src/include/parser_api.h +++ b/core/mac/src/include/parser_api.h @@ -69,6 +69,10 @@ #define QCN_IE_VERSION_SUPPORTED 1 #define QCN_IE_SUBVERSION_SUPPORTED 0 +#define QCN_IE_ATTR_ID_VERSION 1 +#define QCN_IE_ATTR_ID_VHT_MCS11 2 +#define QCN_IE_ATTR_ID_ALL 0xFF + #define SIZE_OF_FIXED_PARAM 12 #define SIZE_OF_TAG_PARAM_NUM 1 #define SIZE_OF_TAG_PARAM_LEN 1 @@ -104,12 +108,6 @@ typedef struct sSirCountryInformation { } channelTransmitPower[COUNTRY_INFO_MAX_CHANNEL]; } tSirCountryInformation, *tpSirCountryInformation; -typedef struct sSirQCNIE { - bool is_present; - uint8_t version; - uint8_t sub_version; -} tSirQCNIE, *tpSirQCNIE; - #ifdef WLAN_FEATURE_FILS_SK #define SIR_MAX_IDENTIFIER_CNT 7 #define SIR_CACHE_IDENTIFIER_LEN 2 @@ -281,7 +279,7 @@ typedef struct sSirProbeRespBeacon { uint8_t MBO_capability; bool assoc_disallowed; uint8_t assoc_disallowed_reason; - tSirQCNIE QCN_IE; + tDot11fIEqcn_ie qcn_ie; tDot11fIEhe_cap he_cap; tDot11fIEhe_op he_op; #ifdef WLAN_FEATURE_11AX_BSS_COLOR @@ -359,6 +357,7 @@ typedef struct sSirAssocReq { tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEhs20vendor_ie hs20vendor_ie; tDot11fIEhe_cap he_cap; + tDot11fIEqcn_ie qcn_ie; bool is_sae_authenticated; } tSirAssocReq, *tpSirAssocReq; @@ -457,7 +456,7 @@ typedef struct sSirAssocRsp { tDot11fIEvendor_vht_ie vendor_vht_ie; tDot11fIEOBSSScanParameters obss_scanparams; tDot11fTLVrssi_assoc_rej rssi_assoc_rej; - tSirQCNIE QCN_IE; + tDot11fIEqcn_ie qcn_ie; tDot11fIEhe_cap he_cap; tDot11fIEhe_op he_op; bool mu_edca_present; @@ -1065,7 +1064,9 @@ QDF_STATUS populate_dot11f_ext_cap(struct mac_context *mac, bool isVHTEnabled, tDot11fIEExtCap *pDot11f, struct pe_session *pe_session); -void populate_dot11f_qcn_ie(tDot11fIEQCN_IE *pDot11f); +void populate_dot11f_qcn_ie(struct mac_context *mac, + tDot11fIEqcn_ie *qcn_ie, + uint8_t attr_id); #ifdef WLAN_FEATURE_FILS_SK /** diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c index 81956b6c87bc..4015aa9e423d 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.c +++ b/core/mac/src/pe/lim/lim_assoc_utils.c @@ -2303,11 +2303,14 @@ lim_add_sta(struct mac_context *mac_ctx, #endif add_sta_params->enable_su_tx_bformer = sta_ds->vht_su_bfee_capable; + add_sta_params->vht_mcs_10_11_supp = + sta_ds->vht_mcs_10_11_supp; } - pe_debug("TxChWidth %d vhtTxBFCap %d, su_bfer %d", - add_sta_params->ch_width, add_sta_params->vhtTxBFCapable, - add_sta_params->enable_su_tx_bformer); + pe_debug("TxChWidth %d vhtTxBFCap %d, su_bfer %d, vht_mcs11 %d", + add_sta_params->ch_width, add_sta_params->vhtTxBFCapable, + add_sta_params->enable_su_tx_bformer, + add_sta_params->vht_mcs_10_11_supp); #ifdef FEATURE_WLAN_TDLS if ((STA_ENTRY_PEER == sta_ds->staType) || (STA_ENTRY_TDLS_PEER == sta_ds->staType)) @@ -3804,6 +3807,9 @@ QDF_STATUS lim_sta_send_add_bss(struct mac_context *mac, tpSirAssocRsp pAssocRsp IS_BSS_VHT_CAPABLE(pBeaconStruct-> vendor_vht_ie.VHTCaps))) { pAddBssParams->staContext.vhtCapable = 1; + pAddBssParams->staContext.vht_mcs_10_11_supp = + sta->vht_mcs_10_11_supp; + pAddBssParams->staContext.vhtSupportedRxNss = sta->vhtSupportedRxNss; if (pAssocRsp->VHTCaps.present) @@ -3861,8 +3867,9 @@ QDF_STATUS lim_sta_send_add_bss(struct mac_context *mac, tpSirAssocRsp pAssocRsp pAddBssParams->staContext.vhtCapable, pAddBssParams->staContext.ch_width, sta_context->vhtTxBFCapable); - pe_debug("StaContext su_tx_bfer %d", - sta_context->enable_su_tx_bformer); + pe_debug("StaContext su_tx_bfer %d, vht_mcs11 %d", + sta_context->enable_su_tx_bformer, + pAddBssParams->staContext.vht_mcs_10_11_supp); pAddBssParams->staContext.mimoPS = (tSirMacHTMIMOPowerSaveState) diff --git a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c index 6d9594ca1296..e705137d1f1d 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c @@ -1644,6 +1644,17 @@ static bool lim_update_sta_ds(struct mac_context *mac_ctx, tpSirMacMgmtHdr hdr, sta_ds->vht_su_bfee_capable); } + sta_ds->vht_mcs_10_11_supp = 0; + if (IS_DOT11_MODE_HT(session->dot11mode) && + sta_ds->mlmStaContext.vhtCapability) { + if (mac_ctx->mlme_cfg->vht_caps.vht_cap_info. + vht_mcs_10_11_supp && + assoc_req->qcn_ie.present && + assoc_req->qcn_ie.vht_mcs11_attr.present) + sta_ds->vht_mcs_10_11_supp = + assoc_req->qcn_ie.vht_mcs11_attr. + vht_mcs_10_11_supp; + } lim_intersect_sta_he_caps(assoc_req, session, sta_ds); if (lim_populate_matching_rate_set(mac_ctx, sta_ds, diff --git a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c index 2fbf98462f55..0464bc2a49ce 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_rsp_frame.c @@ -156,26 +156,33 @@ void lim_update_assoc_sta_datas(struct mac_context *mac_ctx, else if (assoc_rsp->vendor_vht_ie.VHTCaps.present) vht_caps = &assoc_rsp->vendor_vht_ie.VHTCaps; - if (IS_DOT11_MODE_VHT(session_entry->dot11mode)) { - if ((vht_caps) && vht_caps->present) { - sta_ds->mlmStaContext.vhtCapability = - vht_caps->present; - /* - * If 11ac is supported and if the peer is - * sending VHT capabilities, - * then htMaxRxAMpduFactor should be - * overloaded with VHT maxAMPDULenExp - */ - sta_ds->htMaxRxAMpduFactor = vht_caps->maxAMPDULenExp; - if (session_entry->htSupportedChannelWidthSet) { - if (assoc_rsp->VHTOperation.present) - sta_ds->vhtSupportedChannelWidthSet = + if ((IS_DOT11_MODE_VHT(session_entry->dot11mode)) && + ((vht_caps) && vht_caps->present)) { + sta_ds->mlmStaContext.vhtCapability = + vht_caps->present; + /* + * If 11ac is supported and if the peer is + * sending VHT capabilities, + * then htMaxRxAMpduFactor should be + * overloaded with VHT maxAMPDULenExp + */ + sta_ds->htMaxRxAMpduFactor = vht_caps->maxAMPDULenExp; + if (session_entry->htSupportedChannelWidthSet) { + if (assoc_rsp->VHTOperation.present) + sta_ds->vhtSupportedChannelWidthSet = assoc_rsp->VHTOperation.chanWidth; - else - sta_ds->vhtSupportedChannelWidthSet = - eHT_CHANNEL_WIDTH_40MHZ; - } + else + sta_ds->vhtSupportedChannelWidthSet = + eHT_CHANNEL_WIDTH_40MHZ; } + sta_ds->vht_mcs_10_11_supp = 0; + if (mac_ctx->mlme_cfg->vht_caps.vht_cap_info. + vht_mcs_10_11_supp && + assoc_rsp->qcn_ie.present && + assoc_rsp->qcn_ie.vht_mcs11_attr.present) + sta_ds->vht_mcs_10_11_supp = + assoc_rsp->qcn_ie.vht_mcs11_attr. + vht_mcs_10_11_supp; } if (IS_DOT11_MODE_HE(session_entry->dot11mode)) diff --git a/core/mac/src/pe/lim/lim_send_management_frames.c b/core/mac/src/pe/lim/lim_send_management_frames.c index 867fd882ef80..c5503f9dbe52 100644 --- a/core/mac/src/pe/lim/lim_send_management_frames.c +++ b/core/mac/src/pe/lim/lim_send_management_frames.c @@ -345,8 +345,11 @@ lim_send_probe_req_mgmt_frame(struct mac_context *mac_ctx, additional_ie, addn_ielen); } /* Add qcn_ie only if qcn ie is not present in additional_ie */ - if (mac_ctx->mlme_cfg->sta.qcn_ie_support && !qcn_ie) - populate_dot11f_qcn_ie(&pr.QCN_IE); + if (!qcn_ie) + populate_dot11f_qcn_ie(mac_ctx, &pr.qcn_ie, QCN_IE_ATTR_ID_ALL); + else + populate_dot11f_qcn_ie(mac_ctx, &pr.qcn_ie, + QCN_IE_ATTR_ID_VHT_MCS11); /* * Extcap IE now support variable length, merge Extcap IE from addn_ie @@ -1187,6 +1190,8 @@ lim_send_assoc_rsp_mgmt_frame(struct mac_context *mac_ctx, populate_dot11f_vht_operation(mac_ctx, pe_session, &frm.vendor_vht_ie.VHTOperation); is_vht = true; + populate_dot11f_qcn_ie(mac_ctx, &frm.qcn_ie, + QCN_IE_ATTR_ID_ALL); } populate_dot11f_ext_cap(mac_ctx, is_vht, &frm.ExtCap, pe_session); @@ -1899,8 +1904,7 @@ lim_send_assoc_req_mgmt_frame(struct mac_context *mac_ctx, populate_dot11f_ext_cap(mac_ctx, vht_enabled, &frm->ExtCap, pe_session); - if (mac_ctx->mlme_cfg->sta.qcn_ie_support) - populate_dot11f_qcn_ie(&frm->QCN_IE); + populate_dot11f_qcn_ie(mac_ctx, &frm->qcn_ie, QCN_IE_ATTR_ID_ALL); if (lim_is_session_he_capable(pe_session)) { pe_debug("Populate HE IEs"); diff --git a/core/mac/src/pe/sch/sch_beacon_gen.c b/core/mac/src/pe/sch/sch_beacon_gen.c index 7448ab0b8c25..15b56417231e 100644 --- a/core/mac/src/pe/sch/sch_beacon_gen.c +++ b/core/mac/src/pe/sch/sch_beacon_gen.c @@ -462,6 +462,8 @@ sch_set_fixed_beacon_fields(struct mac_context *mac_ctx, struct pe_session *sess wlan_reg_freq_to_chan( mac_ctx->pdev, session->curr_op_freq)); + populate_dot11f_qcn_ie(mac_ctx, &bcn_2->qcn_ie, + QCN_IE_ATTR_ID_ALL); } if (lim_is_session_he_capable(session)) { 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 df595dada987..dc2421a84e27 100644 --- a/core/mac/src/sys/legacy/src/utils/src/dot11f.c +++ b/core/mac/src/sys/legacy/src/utils/src/dot11f.c @@ -24,7 +24,7 @@ * * * This file was automatically generated by 'framesc' - * Fri May 31 20:00:27 2019 from the following file(s): + * Wed Aug 7 14:47:51 2019 from the following file(s): * * dot11f.frms * @@ -1846,6 +1846,62 @@ uint32_t dot11f_unpack_ie_r1_kh_id(tpAniSirGlobal pCtx, #define SigIeR1KH_ID (0x0004) +uint32_t dot11f_unpack_ie_version_attr(tpAniSirGlobal pCtx, + uint8_t *pBuf, + uint8_t ielen, + tDot11fIEversion_attr *pDst, + bool append_ie) +{ + uint32_t status = DOT11F_PARSE_SUCCESS; + (void) pBuf; (void)ielen; /* Shutup the compiler */ + if (pDst->present) + return DOT11F_DUPLICATE_IE; + pDst->present = 1; + if (unlikely(ielen < 1)) { + pDst->present = 0; + return DOT11F_INCOMPLETE_IE; + } + + pDst->version = *pBuf; + pBuf += 1; + ielen -= (uint8_t)1; + if (unlikely(ielen < 1)) { + pDst->present = 0; + return DOT11F_INCOMPLETE_IE; + } + + pDst->sub_version = *pBuf; + (void)pCtx; + return status; +} /* End dot11f_unpack_ie_version_attr. */ + +#define SigIeversion_attr (0x0005) + + +uint32_t dot11f_unpack_ie_vht_mcs11_attr(tpAniSirGlobal pCtx, + uint8_t *pBuf, + uint8_t ielen, + tDot11fIEvht_mcs11_attr *pDst, + bool append_ie) +{ + uint32_t status = DOT11F_PARSE_SUCCESS; + (void) pBuf; (void)ielen; /* Shutup the compiler */ + if (pDst->present) + return DOT11F_DUPLICATE_IE; + pDst->present = 1; + if (unlikely(ielen < 1)) { + pDst->present = 0; + return DOT11F_INCOMPLETE_IE; + } + + pDst->vht_mcs_10_11_supp = *pBuf; + (void)pCtx; + return status; +} /* End dot11f_unpack_ie_vht_mcs11_attr. */ + +#define SigIevht_mcs11_attr (0x0006) + + uint32_t dot11f_unpack_ie_ap_channel_report(tpAniSirGlobal pCtx, uint8_t *pBuf, uint8_t ielen, @@ -1876,7 +1932,7 @@ uint32_t dot11f_unpack_ie_ap_channel_report(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ap_channel_report. */ -#define SigIeAPChannelReport (0x0005) +#define SigIeAPChannelReport (0x0007) uint32_t dot11f_unpack_ie_bcn_reporting_detail(tpAniSirGlobal pCtx, @@ -1900,7 +1956,7 @@ uint32_t dot11f_unpack_ie_bcn_reporting_detail(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_bcn_reporting_detail. */ -#define SigIeBcnReportingDetail (0x0006) +#define SigIeBcnReportingDetail (0x0008) uint32_t dot11f_unpack_ie_beacon_report_frm_body(tpAniSirGlobal pCtx, @@ -1925,7 +1981,7 @@ uint32_t dot11f_unpack_ie_beacon_report_frm_body(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_beacon_report_frm_body. */ -#define SigIeBeaconReportFrmBody (0x0007) +#define SigIeBeaconReportFrmBody (0x0009) uint32_t dot11f_unpack_ie_beacon_reporting(tpAniSirGlobal pCtx, @@ -1957,7 +2013,7 @@ uint32_t dot11f_unpack_ie_beacon_reporting(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_beacon_reporting. */ -#define SigIeBeaconReporting (0x0008) +#define SigIeBeaconReporting (0x000a) uint32_t dot11f_unpack_ie_condensed_country_str(tpAniSirGlobal pCtx, @@ -1981,7 +2037,7 @@ uint32_t dot11f_unpack_ie_condensed_country_str(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_condensed_country_str. */ -#define SigIeCondensedCountryStr (0x0009) +#define SigIeCondensedCountryStr (0x000b) uint32_t dot11f_unpack_ie_measurement_pilot(tpAniSirGlobal pCtx, @@ -2009,7 +2065,7 @@ uint32_t dot11f_unpack_ie_measurement_pilot(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_measurement_pilot. */ -#define SigIeMeasurementPilot (0x000a) +#define SigIeMeasurementPilot (0x000c) uint32_t dot11f_unpack_ie_multi_bssid(tpAniSirGlobal pCtx, @@ -2037,7 +2093,7 @@ uint32_t dot11f_unpack_ie_multi_bssid(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_multi_bssid. */ -#define SigIeMultiBssid (0x000b) +#define SigIeMultiBssid (0x000d) uint32_t dot11f_unpack_ie_ric_data(tpAniSirGlobal pCtx, @@ -2077,7 +2133,7 @@ uint32_t dot11f_unpack_ie_ric_data(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ric_data. */ -#define SigIeRICData (0x000c) +#define SigIeRICData (0x000e) uint32_t dot11f_unpack_ie_ric_descriptor(tpAniSirGlobal pCtx, @@ -2105,7 +2161,7 @@ uint32_t dot11f_unpack_ie_ric_descriptor(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ric_descriptor. */ -#define SigIeRICDescriptor (0x000d) +#define SigIeRICDescriptor (0x000f) uint32_t dot11f_unpack_ie_rrm_enabled_cap(tpAniSirGlobal pCtx, @@ -2197,7 +2253,7 @@ uint32_t dot11f_unpack_ie_rrm_enabled_cap(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_rrm_enabled_cap. */ -#define SigIeRRMEnabledCap (0x000e) +#define SigIeRRMEnabledCap (0x0010) uint32_t dot11f_unpack_ie_requested_info(tpAniSirGlobal pCtx, @@ -2217,7 +2273,7 @@ uint32_t dot11f_unpack_ie_requested_info(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_requested_info. */ -#define SigIeRequestedInfo (0x000f) +#define SigIeRequestedInfo (0x0011) uint32_t dot11f_unpack_ie_ssid(tpAniSirGlobal pCtx, @@ -2244,7 +2300,7 @@ uint32_t dot11f_unpack_ie_ssid(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ssid. */ -#define SigIeSSID (0x0010) +#define SigIeSSID (0x0012) uint32_t dot11f_unpack_ie_schedule(tpAniSirGlobal pCtx, @@ -2305,7 +2361,7 @@ uint32_t dot11f_unpack_ie_schedule(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_schedule. */ -#define SigIeSchedule (0x0011) +#define SigIeSchedule (0x0013) uint32_t dot11f_unpack_ie_tclas(tpAniSirGlobal pCtx, @@ -2497,10 +2553,10 @@ uint32_t dot11f_unpack_ie_tclas(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_tclas. */ -#define SigIeTCLAS (0x0012) +#define SigIeTCLAS (0x0014) -#define SigIeTCLASSPROC (0x0013) +#define SigIeTCLASSPROC (0x0015) uint32_t dot11f_unpack_ie_ts_delay(tpAniSirGlobal pCtx, @@ -2524,7 +2580,7 @@ uint32_t dot11f_unpack_ie_ts_delay(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ts_delay. */ -#define SigIeTSDelay (0x0014) +#define SigIeTSDelay (0x0016) uint32_t dot11f_unpack_ie_tsf_info(tpAniSirGlobal pCtx, @@ -2556,7 +2612,7 @@ uint32_t dot11f_unpack_ie_tsf_info(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_tsf_info. */ -#define SigIeTSFInfo (0x0015) +#define SigIeTSFInfo (0x0017) uint32_t dot11f_unpack_ie_tspec(tpAniSirGlobal pCtx, @@ -2723,7 +2779,7 @@ uint32_t dot11f_unpack_ie_tspec(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_tspec. */ -#define SigIeTSPEC (0x0016) +#define SigIeTSPEC (0x0018) uint32_t dot11f_unpack_ie_vht_caps(tpAniSirGlobal pCtx, @@ -2806,7 +2862,7 @@ uint32_t dot11f_unpack_ie_vht_caps(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_vht_caps. */ -#define SigIeVHTCaps (0x0017) +#define SigIeVHTCaps (0x0019) uint32_t dot11f_unpack_ie_vht_operation(tpAniSirGlobal pCtx, @@ -2854,7 +2910,7 @@ uint32_t dot11f_unpack_ie_vht_operation(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_vht_operation. */ -#define SigIeVHTOperation (0x0018) +#define SigIeVHTOperation (0x001a) uint32_t dot11f_unpack_ie_wmm_schedule(tpAniSirGlobal pCtx, @@ -2927,7 +2983,7 @@ uint32_t dot11f_unpack_ie_wmm_schedule(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wmm_schedule. */ -#define SigIeWMMSchedule (0x0019) +#define SigIeWMMSchedule (0x001b) uint32_t dot11f_unpack_ie_wmmtclas(tpAniSirGlobal pCtx, @@ -3131,7 +3187,7 @@ uint32_t dot11f_unpack_ie_wmmtclas(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wmmtclas. */ -#define SigIeWMMTCLAS (0x001a) +#define SigIeWMMTCLAS (0x001c) uint32_t dot11f_unpack_ie_wmmtclasproc(tpAniSirGlobal pCtx, @@ -3167,7 +3223,7 @@ uint32_t dot11f_unpack_ie_wmmtclasproc(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wmmtclasproc. */ -#define SigIeWMMTCLASPROC (0x001b) +#define SigIeWMMTCLASPROC (0x001d) uint32_t dot11f_unpack_ie_wmmts_delay(tpAniSirGlobal pCtx, @@ -3203,7 +3259,7 @@ uint32_t dot11f_unpack_ie_wmmts_delay(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wmmts_delay. */ -#define SigIeWMMTSDelay (0x001c) +#define SigIeWMMTSDelay (0x001e) uint32_t dot11f_unpack_ie_wmmtspec(tpAniSirGlobal pCtx, @@ -3382,7 +3438,7 @@ uint32_t dot11f_unpack_ie_wmmtspec(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wmmtspec. */ -#define SigIeWMMTSPEC (0x001d) +#define SigIeWMMTSPEC (0x001f) uint32_t dot11f_unpack_ie_wider_bw_chan_switch_ann(tpAniSirGlobal pCtx, @@ -3422,7 +3478,7 @@ uint32_t dot11f_unpack_ie_wider_bw_chan_switch_ann(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wider_bw_chan_switch_ann. */ -#define SigIeWiderBWChanSwitchAnn (0x001e) +#define SigIeWiderBWChanSwitchAnn (0x0020) uint32_t dot11f_unpack_ie_azimuth_req(tpAniSirGlobal pCtx, @@ -3446,7 +3502,7 @@ uint32_t dot11f_unpack_ie_azimuth_req(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_azimuth_req. */ -#define SigIeazimuth_req (0x001f) +#define SigIeazimuth_req (0x0021) uint32_t dot11f_unpack_ie_beacon_report_frm_body_fragment_id(tpAniSirGlobal pCtx, @@ -3474,7 +3530,7 @@ uint32_t dot11f_unpack_ie_beacon_report_frm_body_fragment_id(tpAniSirGlobal pCtx return status; } /* End dot11f_unpack_ie_beacon_report_frm_body_fragment_id. */ -#define SigIebeacon_report_frm_body_fragment_id (0x0020) +#define SigIebeacon_report_frm_body_fragment_id (0x0022) uint32_t dot11f_unpack_ie_last_beacon_report_indication(tpAniSirGlobal pCtx, @@ -3498,7 +3554,7 @@ uint32_t dot11f_unpack_ie_last_beacon_report_indication(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_last_beacon_report_indication. */ -#define SigIelast_beacon_report_indication (0x0021) +#define SigIelast_beacon_report_indication (0x0023) uint32_t dot11f_unpack_ie_max_age(tpAniSirGlobal pCtx, @@ -3522,7 +3578,7 @@ uint32_t dot11f_unpack_ie_max_age(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_max_age. */ -#define SigIemax_age (0x0022) +#define SigIemax_age (0x0024) static const tFFDefn FFS_neighbor_rpt[] = { @@ -3644,7 +3700,7 @@ uint32_t dot11f_unpack_ie_neighbor_rpt(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_neighbor_rpt. */ -#define SigIeneighbor_rpt (0x0023) +#define SigIeneighbor_rpt (0x0025) uint32_t dot11f_unpack_ie_req_mac_addr(tpAniSirGlobal pCtx, @@ -3668,7 +3724,7 @@ uint32_t dot11f_unpack_ie_req_mac_addr(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_req_mac_addr. */ -#define SigIereq_mac_addr (0x0024) +#define SigIereq_mac_addr (0x0026) uint32_t dot11f_unpack_ie_tgt_mac_addr(tpAniSirGlobal pCtx, @@ -3692,7 +3748,7 @@ uint32_t dot11f_unpack_ie_tgt_mac_addr(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_tgt_mac_addr. */ -#define SigIetgt_mac_addr (0x0025) +#define SigIetgt_mac_addr (0x0027) uint32_t dot11f_unpack_ie_vht_transmit_power_env(tpAniSirGlobal pCtx, @@ -3717,7 +3773,7 @@ uint32_t dot11f_unpack_ie_vht_transmit_power_env(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_vht_transmit_power_env. */ -#define SigIevht_transmit_power_env (0x0026) +#define SigIevht_transmit_power_env (0x0028) uint32_t dot11f_unpack_ie_aid(tpAniSirGlobal pCtx, @@ -3741,7 +3797,7 @@ uint32_t dot11f_unpack_ie_aid(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_aid. */ -#define SigIeAID (0x0027) +#define SigIeAID (0x0029) uint32_t dot11f_unpack_ie_cf_params(tpAniSirGlobal pCtx, @@ -3789,7 +3845,7 @@ uint32_t dot11f_unpack_ie_cf_params(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_cf_params. */ -#define SigIeCFParams (0x0028) +#define SigIeCFParams (0x002a) uint32_t dot11f_unpack_ie_challenge_text(tpAniSirGlobal pCtx, @@ -3814,7 +3870,7 @@ uint32_t dot11f_unpack_ie_challenge_text(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_challenge_text. */ -#define SigIeChallengeText (0x0029) +#define SigIeChallengeText (0x002b) uint32_t dot11f_unpack_ie_chan_switch_ann(tpAniSirGlobal pCtx, @@ -3854,7 +3910,7 @@ uint32_t dot11f_unpack_ie_chan_switch_ann(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_chan_switch_ann. */ -#define SigIeChanSwitchAnn (0x002a) +#define SigIeChanSwitchAnn (0x002c) static const tFFDefn FFS_ChannelSwitchWrapper[] = { @@ -3896,7 +3952,7 @@ uint32_t dot11f_unpack_ie_channel_switch_wrapper(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_channel_switch_wrapper. */ -#define SigIeChannelSwitchWrapper (0x002b) +#define SigIeChannelSwitchWrapper (0x002d) uint32_t dot11f_unpack_ie_country(tpAniSirGlobal pCtx, @@ -3934,10 +3990,10 @@ uint32_t dot11f_unpack_ie_country(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_country. */ -#define SigIeCountry (0x002c) +#define SigIeCountry (0x002e) -#define SigIeDSParams (0x002d) +#define SigIeDSParams (0x002f) uint32_t dot11f_unpack_ie_edca_param_set(tpAniSirGlobal pCtx, @@ -4097,7 +4153,7 @@ uint32_t dot11f_unpack_ie_edca_param_set(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_edca_param_set. */ -#define SigIeEDCAParamSet (0x002e) +#define SigIeEDCAParamSet (0x0030) uint32_t dot11f_unpack_ie_erp_info(tpAniSirGlobal pCtx, @@ -4126,7 +4182,7 @@ uint32_t dot11f_unpack_ie_erp_info(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_erp_info. */ -#define SigIeERPInfo (0x002f) +#define SigIeERPInfo (0x0031) uint32_t dot11f_unpack_ie_ese_cckm_opaque(tpAniSirGlobal pCtx, @@ -4151,7 +4207,7 @@ uint32_t dot11f_unpack_ie_ese_cckm_opaque(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ese_cckm_opaque. */ -#define SigIeESECckmOpaque (0x0030) +#define SigIeESECckmOpaque (0x0032) uint32_t dot11f_unpack_ie_ese_rad_mgmt_cap(tpAniSirGlobal pCtx, @@ -4186,7 +4242,7 @@ uint32_t dot11f_unpack_ie_ese_rad_mgmt_cap(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ese_rad_mgmt_cap. */ -#define SigIeESERadMgmtCap (0x0031) +#define SigIeESERadMgmtCap (0x0033) uint32_t dot11f_unpack_ie_ese_traf_strm_met(tpAniSirGlobal pCtx, @@ -4226,7 +4282,7 @@ uint32_t dot11f_unpack_ie_ese_traf_strm_met(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ese_traf_strm_met. */ -#define SigIeESETrafStrmMet (0x0032) +#define SigIeESETrafStrmMet (0x0034) uint32_t dot11f_unpack_ie_ese_traf_strm_rate_set(tpAniSirGlobal pCtx, @@ -4259,7 +4315,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 (0x0033) +#define SigIeESETrafStrmRateSet (0x0035) uint32_t dot11f_unpack_ie_ese_txmit_power(tpAniSirGlobal pCtx, @@ -4291,7 +4347,7 @@ uint32_t dot11f_unpack_ie_ese_txmit_power(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ese_txmit_power. */ -#define SigIeESETxmitPower (0x0034) +#define SigIeESETxmitPower (0x0036) uint32_t dot11f_unpack_ie_ese_version(tpAniSirGlobal pCtx, @@ -4315,7 +4371,8 @@ uint32_t dot11f_unpack_ie_ese_version(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ese_version. */ -#define SigIeESEVersion (0x0035) +#define SigIeESEVersion (0x0037) + uint32_t dot11f_unpack_ie_ext_cap(tpAniSirGlobal pCtx, uint8_t *pBuf, @@ -4344,7 +4401,7 @@ endUnpackIeExtCap: return status; } /* End dot11f_unpack_ie_ext_cap. */ -#define SigIeExtCap (0x0036) +#define SigIeExtCap (0x0038) uint32_t dot11f_unpack_ie_ext_supp_rates(tpAniSirGlobal pCtx, @@ -4377,7 +4434,7 @@ uint32_t dot11f_unpack_ie_ext_supp_rates(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ext_supp_rates. */ -#define SigIeExtSuppRates (0x0037) +#define SigIeExtSuppRates (0x0039) uint32_t dot11f_unpack_ie_fh_param_set(tpAniSirGlobal pCtx, @@ -4425,7 +4482,7 @@ uint32_t dot11f_unpack_ie_fh_param_set(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fh_param_set. */ -#define SigIeFHParamSet (0x0038) +#define SigIeFHParamSet (0x003a) uint32_t dot11f_unpack_ie_fh_params(tpAniSirGlobal pCtx, @@ -4457,7 +4514,7 @@ uint32_t dot11f_unpack_ie_fh_params(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fh_params. */ -#define SigIeFHParams (0x0039) +#define SigIeFHParams (0x003b) uint32_t dot11f_unpack_ie_fh_patt_table(tpAniSirGlobal pCtx, @@ -4514,7 +4571,7 @@ uint32_t dot11f_unpack_ie_fh_patt_table(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fh_patt_table. */ -#define SigIeFHPattTable (0x003a) +#define SigIeFHPattTable (0x003c) static const tFFDefn FFS_FTInfo[] = { @@ -4594,7 +4651,7 @@ uint32_t dot11f_unpack_ie_ft_info(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ft_info. */ -#define SigIeFTInfo (0x003b) +#define SigIeFTInfo (0x003d) uint32_t dot11f_unpack_ie_ht_caps(tpAniSirGlobal pCtx, @@ -4718,7 +4775,7 @@ uint32_t dot11f_unpack_ie_ht_caps(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ht_caps. */ -#define SigIeHTCaps (0x003c) +#define SigIeHTCaps (0x003e) uint32_t dot11f_unpack_ie_ht_info(tpAniSirGlobal pCtx, @@ -4803,7 +4860,7 @@ uint32_t dot11f_unpack_ie_ht_info(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ht_info. */ -#define SigIeHTInfo (0x003d) +#define SigIeHTInfo (0x003f) uint32_t dot11f_unpack_ie_ibss_params(tpAniSirGlobal pCtx, @@ -4827,7 +4884,7 @@ uint32_t dot11f_unpack_ie_ibss_params(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ibss_params. */ -#define SigIeIBSSParams (0x003e) +#define SigIeIBSSParams (0x0040) uint32_t dot11f_unpack_ie_link_identifier(tpAniSirGlobal pCtx, @@ -4867,7 +4924,7 @@ uint32_t dot11f_unpack_ie_link_identifier(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_link_identifier. */ -#define SigIeLinkIdentifier (0x003f) +#define SigIeLinkIdentifier (0x0041) static const tTLVDefn TLVS_MBO_IE[] = { @@ -4930,7 +4987,7 @@ uint32_t dot11f_unpack_ie_MBO_IE(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_MBO_IE. */ -#define SigIeMBO_IE (0x0040) +#define SigIeMBO_IE (0x0042) static const tFFDefn FFS_reportBeacon[] = { @@ -5265,7 +5322,7 @@ uint32_t dot11f_unpack_ie_measurement_report(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_measurement_report. */ -#define SigIeMeasurementReport (0x0041) +#define SigIeMeasurementReport (0x0043) static const tFFDefn FFS_measurement_requestBeacon[] = { @@ -5569,7 +5626,7 @@ uint32_t dot11f_unpack_ie_measurement_request(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_measurement_request. */ -#define SigIeMeasurementRequest (0x0042) +#define SigIeMeasurementRequest (0x0044) uint32_t dot11f_unpack_ie_mobility_domain(tpAniSirGlobal pCtx, @@ -5605,7 +5662,7 @@ uint32_t dot11f_unpack_ie_mobility_domain(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_mobility_domain. */ -#define SigIeMobilityDomain (0x0043) +#define SigIeMobilityDomain (0x0045) static const tFFDefn FFS_NeighborReport[] = { @@ -5727,7 +5784,7 @@ uint32_t dot11f_unpack_ie_neighbor_report(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_neighbor_report. */ -#define SigIeNeighborReport (0x0044) +#define SigIeNeighborReport (0x0046) uint32_t dot11f_unpack_ie_obss_scan_parameters(tpAniSirGlobal pCtx, @@ -5799,7 +5856,7 @@ uint32_t dot11f_unpack_ie_obss_scan_parameters(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_obss_scan_parameters. */ -#define SigIeOBSSScanParameters (0x0045) +#define SigIeOBSSScanParameters (0x0047) uint32_t dot11f_unpack_ie_operating_mode(tpAniSirGlobal pCtx, @@ -5828,7 +5885,7 @@ uint32_t dot11f_unpack_ie_operating_mode(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_operating_mode. */ -#define SigIeOperatingMode (0x0046) +#define SigIeOperatingMode (0x0048) static const tTLVDefn TLVS_P2PAssocReq[] = { @@ -5860,7 +5917,7 @@ uint32_t dot11f_unpack_ie_p2_p_assoc_req(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_p2_p_assoc_req. */ -#define SigIeP2PAssocReq (0x0047) +#define SigIeP2PAssocReq (0x0049) static const tTLVDefn TLVS_P2PAssocRes[] = { @@ -5889,7 +5946,7 @@ uint32_t dot11f_unpack_ie_p2_p_assoc_res(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_p2_p_assoc_res. */ -#define SigIeP2PAssocRes (0x0048) +#define SigIeP2PAssocRes (0x004a) static const tTLVDefn TLVS_P2PBeacon[] = { @@ -5921,7 +5978,7 @@ uint32_t dot11f_unpack_ie_p2_p_beacon(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_p2_p_beacon. */ -#define SigIeP2PBeacon (0x0049) +#define SigIeP2PBeacon (0x004b) static const tTLVDefn TLVS_P2PBeaconProbeRes[] = { @@ -5963,7 +6020,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 (0x004a) +#define SigIeP2PBeaconProbeRes (0x004c) static const tTLVDefn TLVS_P2PDeAuth[] = { @@ -5989,7 +6046,7 @@ uint32_t dot11f_unpack_ie_p2_p_de_auth(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_p2_p_de_auth. */ -#define SigIeP2PDeAuth (0x004b) +#define SigIeP2PDeAuth (0x004d) static const tTLVDefn TLVS_P2PDisAssoc[] = { @@ -6015,7 +6072,7 @@ uint32_t dot11f_unpack_ie_p2_p_dis_assoc(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_p2_p_dis_assoc. */ -#define SigIeP2PDisAssoc (0x004c) +#define SigIeP2PDisAssoc (0x004e) uint32_t dot11f_unpack_ie_p2_pie_opaque(tpAniSirGlobal pCtx, @@ -6040,7 +6097,7 @@ uint32_t dot11f_unpack_ie_p2_pie_opaque(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_p2_pie_opaque. */ -#define SigIeP2PIEOpaque (0x004d) +#define SigIeP2PIEOpaque (0x004f) static const tTLVDefn TLVS_P2PProbeReq[] = { @@ -6079,7 +6136,7 @@ uint32_t dot11f_unpack_ie_p2_p_probe_req(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_p2_p_probe_req. */ -#define SigIeP2PProbeReq (0x004e) +#define SigIeP2PProbeReq (0x0050) static const tTLVDefn TLVS_P2PProbeRes[] = { @@ -6118,7 +6175,7 @@ uint32_t dot11f_unpack_ie_p2_p_probe_res(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_p2_p_probe_res. */ -#define SigIeP2PProbeRes (0x004f) +#define SigIeP2PProbeRes (0x0051) uint32_t dot11f_unpack_ie_pti_control(tpAniSirGlobal pCtx, @@ -6150,7 +6207,7 @@ uint32_t dot11f_unpack_ie_pti_control(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_pti_control. */ -#define SigIePTIControl (0x0050) +#define SigIePTIControl (0x0052) uint32_t dot11f_unpack_ie_pu_buffer_status(tpAniSirGlobal pCtx, @@ -6180,7 +6237,7 @@ uint32_t dot11f_unpack_ie_pu_buffer_status(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_pu_buffer_status. */ -#define SigIePUBufferStatus (0x0051) +#define SigIePUBufferStatus (0x0053) uint32_t dot11f_unpack_ie_power_caps(tpAniSirGlobal pCtx, @@ -6212,7 +6269,7 @@ uint32_t dot11f_unpack_ie_power_caps(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_power_caps. */ -#define SigIePowerCaps (0x0052) +#define SigIePowerCaps (0x0054) uint32_t dot11f_unpack_ie_power_constraints(tpAniSirGlobal pCtx, @@ -6236,7 +6293,7 @@ uint32_t dot11f_unpack_ie_power_constraints(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_power_constraints. */ -#define SigIePowerConstraints (0x0053) +#define SigIePowerConstraints (0x0055) uint32_t dot11f_unpack_ie_qbss_load(tpAniSirGlobal pCtx, @@ -6276,31 +6333,7 @@ uint32_t dot11f_unpack_ie_qbss_load(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_qbss_load. */ -#define SigIeQBSSLoad (0x0054) - - -uint32_t dot11f_unpack_ie_QCN_IE(tpAniSirGlobal pCtx, - uint8_t *pBuf, - uint8_t ielen, - tDot11fIEQCN_IE *pDst, - bool append_ie) -{ - uint32_t status = DOT11F_PARSE_SUCCESS; - (void) pBuf; (void)ielen; /* Shutup the compiler */ - if (pDst->present) - return DOT11F_DUPLICATE_IE; - pDst->present = 1; - if (unlikely(ielen < 4)) { - pDst->present = 0; - return DOT11F_INCOMPLETE_IE; - } - - DOT11F_MEMCPY(pCtx, pDst->version, pBuf, 4); - (void)pCtx; - return status; -} /* End dot11f_unpack_ie_QCN_IE. */ - -#define SigIeQCN_IE (0x0055) +#define SigIeQBSSLoad (0x0056) uint32_t dot11f_unpack_ie_QComVendorIE(tpAniSirGlobal pCtx, @@ -6332,7 +6365,7 @@ uint32_t dot11f_unpack_ie_QComVendorIE(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_QComVendorIE. */ -#define SigIeQComVendorIE (0x0056) +#define SigIeQComVendorIE (0x0057) uint32_t dot11f_unpack_ie_qos_caps_ap(tpAniSirGlobal pCtx, @@ -6362,7 +6395,7 @@ uint32_t dot11f_unpack_ie_qos_caps_ap(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_qos_caps_ap. */ -#define SigIeQOSCapsAp (0x0057) +#define SigIeQOSCapsAp (0x0058) uint32_t dot11f_unpack_ie_qos_caps_station(tpAniSirGlobal pCtx, @@ -6394,7 +6427,7 @@ uint32_t dot11f_unpack_ie_qos_caps_station(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_qos_caps_station. */ -#define SigIeQOSCapsStation (0x0058) +#define SigIeQOSCapsStation (0x0059) uint32_t dot11f_unpack_ie_qos_map_set(tpAniSirGlobal pCtx, @@ -6419,7 +6452,7 @@ uint32_t dot11f_unpack_ie_qos_map_set(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_qos_map_set. */ -#define SigIeQosMapSet (0x0059) +#define SigIeQosMapSet (0x005a) uint32_t dot11f_unpack_ie_quiet(tpAniSirGlobal pCtx, @@ -6467,7 +6500,7 @@ uint32_t dot11f_unpack_ie_quiet(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_quiet. */ -#define SigIeQuiet (0x005a) +#define SigIeQuiet (0x005b) uint32_t dot11f_unpack_ie_rcpiie(tpAniSirGlobal pCtx, @@ -6491,7 +6524,7 @@ uint32_t dot11f_unpack_ie_rcpiie(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_rcpiie. */ -#define SigIeRCPIIE (0x005b) +#define SigIeRCPIIE (0x005c) static const tFFDefn FFS_RICDataDesc[] = { @@ -6567,7 +6600,7 @@ uint32_t dot11f_unpack_ie_ric_data_desc(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ric_data_desc. */ -#define SigIeRICDataDesc (0x005c) +#define SigIeRICDataDesc (0x005d) uint32_t dot11f_unpack_ie_rsn(tpAniSirGlobal pCtx, @@ -6743,7 +6776,7 @@ uint32_t dot11f_unpack_ie_rsn(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_rsn. */ -#define SigIeRSN (0x005d) +#define SigIeRSN (0x005e) uint32_t dot11f_unpack_ie_rsniie(tpAniSirGlobal pCtx, @@ -6767,7 +6800,7 @@ uint32_t dot11f_unpack_ie_rsniie(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_rsniie. */ -#define SigIeRSNIIE (0x005e) +#define SigIeRSNIIE (0x005f) uint32_t dot11f_unpack_ie_rsn_opaque(tpAniSirGlobal pCtx, @@ -6792,7 +6825,7 @@ uint32_t dot11f_unpack_ie_rsn_opaque(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_rsn_opaque. */ -#define SigIeRSNOpaque (0x005f) +#define SigIeRSNOpaque (0x0060) uint32_t dot11f_unpack_ie_supp_channels(tpAniSirGlobal pCtx, @@ -6817,7 +6850,7 @@ uint32_t dot11f_unpack_ie_supp_channels(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_supp_channels. */ -#define SigIeSuppChannels (0x0060) +#define SigIeSuppChannels (0x0061) uint32_t dot11f_unpack_ie_supp_operating_classes(tpAniSirGlobal pCtx, @@ -6842,7 +6875,7 @@ uint32_t dot11f_unpack_ie_supp_operating_classes(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_supp_operating_classes. */ -#define SigIeSuppOperatingClasses (0x0061) +#define SigIeSuppOperatingClasses (0x0062) uint32_t dot11f_unpack_ie_supp_rates(tpAniSirGlobal pCtx, @@ -6875,7 +6908,7 @@ uint32_t dot11f_unpack_ie_supp_rates(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_supp_rates. */ -#define SigIeSuppRates (0x0062) +#define SigIeSuppRates (0x0063) uint32_t dot11f_unpack_ie_tim(tpAniSirGlobal pCtx, @@ -6924,7 +6957,7 @@ uint32_t dot11f_unpack_ie_tim(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_tim. */ -#define SigIeTIM (0x0063) +#define SigIeTIM (0x0064) uint32_t dot11f_unpack_ie_tpc_report(tpAniSirGlobal pCtx, @@ -6956,7 +6989,7 @@ uint32_t dot11f_unpack_ie_tpc_report(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_tpc_report. */ -#define SigIeTPCReport (0x0064) +#define SigIeTPCReport (0x0065) uint32_t dot11f_unpack_ie_tpc_request(tpAniSirGlobal pCtx, @@ -6974,7 +7007,7 @@ uint32_t dot11f_unpack_ie_tpc_request(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_tpc_request. */ -#define SigIeTPCRequest (0x0065) +#define SigIeTPCRequest (0x0066) uint32_t dot11f_unpack_ie_time_advertisement(tpAniSirGlobal pCtx, @@ -7014,7 +7047,7 @@ uint32_t dot11f_unpack_ie_time_advertisement(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_time_advertisement. */ -#define SigIeTimeAdvertisement (0x0066) +#define SigIeTimeAdvertisement (0x0067) uint32_t dot11f_unpack_ie_timeout_interval(tpAniSirGlobal pCtx, @@ -7046,7 +7079,7 @@ uint32_t dot11f_unpack_ie_timeout_interval(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_timeout_interval. */ -#define SigIeTimeoutInterval (0x0067) +#define SigIeTimeoutInterval (0x0068) uint32_t dot11f_unpack_ie_vht_ext_bss_load(tpAniSirGlobal pCtx, @@ -7102,7 +7135,7 @@ uint32_t dot11f_unpack_ie_vht_ext_bss_load(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_vht_ext_bss_load. */ -#define SigIeVHTExtBssLoad (0x0068) +#define SigIeVHTExtBssLoad (0x0069) uint32_t dot11f_unpack_ie_vendor1_ie(tpAniSirGlobal pCtx, @@ -7120,7 +7153,7 @@ uint32_t dot11f_unpack_ie_vendor1_ie(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_vendor1_ie. */ -#define SigIeVendor1IE (0x0069) +#define SigIeVendor1IE (0x006a) uint32_t dot11f_unpack_ie_vendor3_ie(tpAniSirGlobal pCtx, @@ -7138,7 +7171,7 @@ uint32_t dot11f_unpack_ie_vendor3_ie(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_vendor3_ie. */ -#define SigIeVendor3IE (0x006a) +#define SigIeVendor3IE (0x006b) uint32_t dot11f_unpack_ie_wapi(tpAniSirGlobal pCtx, @@ -7253,7 +7286,7 @@ uint32_t dot11f_unpack_ie_wapi(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wapi. */ -#define SigIeWAPI (0x006b) +#define SigIeWAPI (0x006c) uint32_t dot11f_unpack_ie_wapi_opaque(tpAniSirGlobal pCtx, @@ -7278,7 +7311,7 @@ uint32_t dot11f_unpack_ie_wapi_opaque(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wapi_opaque. */ -#define SigIeWAPIOpaque (0x006c) +#define SigIeWAPIOpaque (0x006d) uint32_t dot11f_unpack_ie_wfatpc(tpAniSirGlobal pCtx, @@ -7310,7 +7343,7 @@ uint32_t dot11f_unpack_ie_wfatpc(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wfatpc. */ -#define SigIeWFATPC (0x006d) +#define SigIeWFATPC (0x006e) uint32_t dot11f_unpack_ie_wfdie_opaque(tpAniSirGlobal pCtx, @@ -7335,7 +7368,7 @@ uint32_t dot11f_unpack_ie_wfdie_opaque(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wfdie_opaque. */ -#define SigIeWFDIEOpaque (0x006e) +#define SigIeWFDIEOpaque (0x006f) uint32_t dot11f_unpack_ie_wmm_caps(tpAniSirGlobal pCtx, @@ -7377,7 +7410,7 @@ uint32_t dot11f_unpack_ie_wmm_caps(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wmm_caps. */ -#define SigIeWMMCaps (0x006f) +#define SigIeWMMCaps (0x0070) uint32_t dot11f_unpack_ie_wmm_info_ap(tpAniSirGlobal pCtx, @@ -7413,7 +7446,7 @@ uint32_t dot11f_unpack_ie_wmm_info_ap(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wmm_info_ap. */ -#define SigIeWMMInfoAp (0x0070) +#define SigIeWMMInfoAp (0x0071) uint32_t dot11f_unpack_ie_wmm_info_station(tpAniSirGlobal pCtx, @@ -7453,7 +7486,7 @@ uint32_t dot11f_unpack_ie_wmm_info_station(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wmm_info_station. */ -#define SigIeWMMInfoStation (0x0071) +#define SigIeWMMInfoStation (0x0072) uint32_t dot11f_unpack_ie_wmm_params(tpAniSirGlobal pCtx, @@ -7625,7 +7658,7 @@ uint32_t dot11f_unpack_ie_wmm_params(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wmm_params. */ -#define SigIeWMMParams (0x0072) +#define SigIeWMMParams (0x0073) uint32_t dot11f_unpack_ie_wpa(tpAniSirGlobal pCtx, @@ -7734,7 +7767,7 @@ uint32_t dot11f_unpack_ie_wpa(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wpa. */ -#define SigIeWPA (0x0073) +#define SigIeWPA (0x0074) uint32_t dot11f_unpack_ie_wpa_opaque(tpAniSirGlobal pCtx, @@ -7759,7 +7792,7 @@ uint32_t dot11f_unpack_ie_wpa_opaque(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wpa_opaque. */ -#define SigIeWPAOpaque (0x0074) +#define SigIeWPAOpaque (0x0075) static const tTLVDefn TLVS_WSC[] = { @@ -7850,7 +7883,7 @@ uint32_t dot11f_unpack_ie_wsc(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wsc. */ -#define SigIeWSC (0x0075) +#define SigIeWSC (0x0076) static const tTLVDefn TLVS_WscAssocReq[] = { @@ -7882,7 +7915,7 @@ uint32_t dot11f_unpack_ie_wsc_assoc_req(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wsc_assoc_req. */ -#define SigIeWscAssocReq (0x0076) +#define SigIeWscAssocReq (0x0077) static const tTLVDefn TLVS_WscAssocRes[] = { @@ -7914,7 +7947,7 @@ uint32_t dot11f_unpack_ie_wsc_assoc_res(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wsc_assoc_res. */ -#define SigIeWscAssocRes (0x0077) +#define SigIeWscAssocRes (0x0078) static const tTLVDefn TLVS_WscBeacon[] = { @@ -7967,7 +8000,7 @@ uint32_t dot11f_unpack_ie_wsc_beacon(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wsc_beacon. */ -#define SigIeWscBeacon (0x0078) +#define SigIeWscBeacon (0x0079) static const tTLVDefn TLVS_WscBeaconProbeRes[] = { @@ -8045,7 +8078,7 @@ uint32_t dot11f_unpack_ie_wsc_beacon_probe_res(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wsc_beacon_probe_res. */ -#define SigIeWscBeaconProbeRes (0x0079) +#define SigIeWscBeaconProbeRes (0x007a) uint32_t dot11f_unpack_ie_wsc_ie_opaque(tpAniSirGlobal pCtx, @@ -8070,7 +8103,7 @@ uint32_t dot11f_unpack_ie_wsc_ie_opaque(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wsc_ie_opaque. */ -#define SigIeWscIEOpaque (0x007a) +#define SigIeWscIEOpaque (0x007b) static const tTLVDefn TLVS_WscProbeReq[] = { @@ -8143,7 +8176,7 @@ uint32_t dot11f_unpack_ie_wsc_probe_req(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wsc_probe_req. */ -#define SigIeWscProbeReq (0x007b) +#define SigIeWscProbeReq (0x007c) static const tTLVDefn TLVS_WscProbeRes[] = { @@ -8221,7 +8254,7 @@ uint32_t dot11f_unpack_ie_wsc_probe_res(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wsc_probe_res. */ -#define SigIeWscProbeRes (0x007c) +#define SigIeWscProbeRes (0x007d) static const tTLVDefn TLVS_WscReassocRes[] = { @@ -8253,7 +8286,7 @@ uint32_t dot11f_unpack_ie_wsc_reassoc_res(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_wsc_reassoc_res. */ -#define SigIeWscReassocRes (0x007d) +#define SigIeWscReassocRes (0x007e) uint32_t dot11f_unpack_ie_addba_extn_element(tpAniSirGlobal pCtx, @@ -8281,7 +8314,7 @@ uint32_t dot11f_unpack_ie_addba_extn_element(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_addba_extn_element. */ -#define SigIeaddba_extn_element (0x007e) +#define SigIeaddba_extn_element (0x007f) uint32_t dot11f_unpack_ie_bss_color_change(tpAniSirGlobal pCtx, @@ -8316,7 +8349,7 @@ uint32_t dot11f_unpack_ie_bss_color_change(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_bss_color_change. */ -#define SigIebss_color_change (0x007f) +#define SigIebss_color_change (0x0080) uint32_t dot11f_unpack_ie_dh_parameter_element(tpAniSirGlobal pCtx, @@ -8344,7 +8377,7 @@ uint32_t dot11f_unpack_ie_dh_parameter_element(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_dh_parameter_element. */ -#define SigIedh_parameter_element (0x0080) +#define SigIedh_parameter_element (0x0081) uint32_t dot11f_unpack_ie_esp_information(tpAniSirGlobal pCtx, @@ -8369,7 +8402,7 @@ uint32_t dot11f_unpack_ie_esp_information(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_esp_information. */ -#define SigIeesp_information (0x0081) +#define SigIeesp_information (0x0082) uint32_t dot11f_unpack_ie_ext_chan_switch_ann(tpAniSirGlobal pCtx, @@ -8417,7 +8450,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 (0x0082) +#define SigIeext_chan_switch_ann (0x0083) uint32_t dot11f_unpack_ie_fils_assoc_delay_info(tpAniSirGlobal pCtx, @@ -8441,7 +8474,7 @@ uint32_t dot11f_unpack_ie_fils_assoc_delay_info(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fils_assoc_delay_info. */ -#define SigIefils_assoc_delay_info (0x0083) +#define SigIefils_assoc_delay_info (0x0084) uint32_t dot11f_unpack_ie_fils_hlp_container(tpAniSirGlobal pCtx, @@ -8477,7 +8510,7 @@ uint32_t dot11f_unpack_ie_fils_hlp_container(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fils_hlp_container. */ -#define SigIefils_hlp_container (0x0084) +#define SigIefils_hlp_container (0x0085) uint32_t dot11f_unpack_ie_fils_indication(tpAniSirGlobal pCtx, @@ -8515,7 +8548,7 @@ uint32_t dot11f_unpack_ie_fils_indication(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fils_indication. */ -#define SigIefils_indication (0x0085) +#define SigIefils_indication (0x0086) uint32_t dot11f_unpack_ie_fils_kde(tpAniSirGlobal pCtx, @@ -8543,7 +8576,7 @@ uint32_t dot11f_unpack_ie_fils_kde(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fils_kde. */ -#define SigIefils_kde (0x0086) +#define SigIefils_kde (0x0087) uint32_t dot11f_unpack_ie_fils_key_confirmation(tpAniSirGlobal pCtx, @@ -8563,7 +8596,7 @@ uint32_t dot11f_unpack_ie_fils_key_confirmation(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fils_key_confirmation. */ -#define SigIefils_key_confirmation (0x0087) +#define SigIefils_key_confirmation (0x0088) uint32_t dot11f_unpack_ie_fils_nonce(tpAniSirGlobal pCtx, @@ -8587,7 +8620,7 @@ uint32_t dot11f_unpack_ie_fils_nonce(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fils_nonce. */ -#define SigIefils_nonce (0x0088) +#define SigIefils_nonce (0x0089) uint32_t dot11f_unpack_ie_fils_public_key(tpAniSirGlobal pCtx, @@ -8615,7 +8648,7 @@ uint32_t dot11f_unpack_ie_fils_public_key(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fils_public_key. */ -#define SigIefils_public_key (0x0089) +#define SigIefils_public_key (0x008a) uint32_t dot11f_unpack_ie_fils_session(tpAniSirGlobal pCtx, @@ -8639,7 +8672,7 @@ uint32_t dot11f_unpack_ie_fils_session(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fils_session. */ -#define SigIefils_session (0x008a) +#define SigIefils_session (0x008b) uint32_t dot11f_unpack_ie_fils_wrapped_data(tpAniSirGlobal pCtx, @@ -8659,7 +8692,7 @@ uint32_t dot11f_unpack_ie_fils_wrapped_data(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fils_wrapped_data. */ -#define SigIefils_wrapped_data (0x008b) +#define SigIefils_wrapped_data (0x008c) uint32_t dot11f_unpack_ie_fragment_ie(tpAniSirGlobal pCtx, @@ -8679,7 +8712,7 @@ uint32_t dot11f_unpack_ie_fragment_ie(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_fragment_ie. */ -#define SigIefragment_ie (0x008c) +#define SigIefragment_ie (0x008d) uint32_t dot11f_unpack_ie_he_cap(tpAniSirGlobal pCtx, @@ -8924,7 +8957,7 @@ uint32_t dot11f_unpack_ie_he_cap(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_he_cap. */ -#define SigIehe_cap (0x008d) +#define SigIehe_cap (0x008e) uint32_t dot11f_unpack_ie_he_op(tpAniSirGlobal pCtx, @@ -9027,7 +9060,7 @@ uint32_t dot11f_unpack_ie_he_op(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_he_op. */ -#define SigIehe_op (0x008e) +#define SigIehe_op (0x008f) uint32_t dot11f_unpack_ie_hs20vendor_ie(tpAniSirGlobal pCtx, @@ -9084,7 +9117,7 @@ uint32_t dot11f_unpack_ie_hs20vendor_ie(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_hs20vendor_ie. */ -#define SigIehs20vendor_ie (0x008f) +#define SigIehs20vendor_ie (0x0090) uint32_t dot11f_unpack_ie_ht2040_bss_coexistence(tpAniSirGlobal pCtx, @@ -9115,7 +9148,7 @@ uint32_t dot11f_unpack_ie_ht2040_bss_coexistence(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_ht2040_bss_coexistence. */ -#define SigIeht2040_bss_coexistence (0x0090) +#define SigIeht2040_bss_coexistence (0x0091) uint32_t dot11f_unpack_ie_ht2040_bss_intolerant_report(tpAniSirGlobal pCtx, @@ -9148,7 +9181,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 (0x0091) +#define SigIeht2040_bss_intolerant_report (0x0092) uint32_t dot11f_unpack_ie_mu_edca_param_set(tpAniSirGlobal pCtx, @@ -9300,7 +9333,7 @@ uint32_t dot11f_unpack_ie_mu_edca_param_set(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_mu_edca_param_set. */ -#define SigIemu_edca_param_set (0x0092) +#define SigIemu_edca_param_set (0x0093) uint32_t dot11f_unpack_ie_osen_ie(tpAniSirGlobal pCtx, @@ -9320,7 +9353,49 @@ uint32_t dot11f_unpack_ie_osen_ie(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_osen_ie. */ -#define SigIeosen_ie (0x0093) +#define SigIeosen_ie (0x0094) + + +static const tFFDefn FFS_qcn_ie[] = { + { NULL, 0, 0, 0,}, +}; + +static const tIEDefn IES_qcn_ie[] = { + { offsetof(tDot11fIEqcn_ie, version_attr), + offsetof(tDot11fIEversion_attr, present), 0, "version_attr", + 0, 4, 4, SigIeversion_attr, {0, 0, 0, 0, 0}, + 0, DOT11F_EID_VERSION_ATTR, 0, 0, }, + { offsetof(tDot11fIEqcn_ie, vht_mcs11_attr), + offsetof(tDot11fIEvht_mcs11_attr, present), 0, "vht_mcs11_attr", + 0, 3, 3, SigIevht_mcs11_attr, {0, 0, 0, 0, 0}, + 0, DOT11F_EID_VHT_MCS11_ATTR, 0, 0, }, + {0, 0, 0, NULL, 0, 0, 0, 0, {0, 0, 0, 0, 0}, 0, 0xff, 0, }, +}; + +uint32_t dot11f_unpack_ie_qcn_ie(tpAniSirGlobal pCtx, + uint8_t *pBuf, + uint8_t ielen, + tDot11fIEqcn_ie *pDst, + bool append_ie) +{ + uint32_t status = DOT11F_PARSE_SUCCESS; + (void) pBuf; (void)ielen; /* Shutup the compiler */ + if (pDst->present) + return DOT11F_DUPLICATE_IE; + pDst->present = 1; + (void)pCtx; + status |= unpack_core(pCtx, + pBuf, + ielen, + FFS_qcn_ie, + IES_qcn_ie, + (uint8_t *)pDst, + sizeof(*pDst), + append_ie); + return status; +} /* End dot11f_unpack_ie_qcn_ie. */ + +#define SigIeqcn_ie (0x0095) uint32_t dot11f_unpack_ie_roaming_consortium_sel(tpAniSirGlobal pCtx, @@ -9340,7 +9415,7 @@ uint32_t dot11f_unpack_ie_roaming_consortium_sel(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_roaming_consortium_sel. */ -#define SigIeroaming_consortium_sel (0x0094) +#define SigIeroaming_consortium_sel (0x0096) uint32_t dot11f_unpack_ie_sec_chan_offset_ele(tpAniSirGlobal pCtx, @@ -9364,7 +9439,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 (0x0095) +#define SigIesec_chan_offset_ele (0x0097) static const tFFDefn FFS_vendor_vht_ie[] = { @@ -9413,7 +9488,7 @@ uint32_t dot11f_unpack_ie_vendor_vht_ie(tpAniSirGlobal pCtx, return status; } /* End dot11f_unpack_ie_vendor_vht_ie. */ -#define SigIevendor_vht_ie (0x0096) +#define SigIevendor_vht_ie (0x0098) static const tFFDefn FFS_AddTSRequest[] = { @@ -9670,8 +9745,8 @@ static const tIEDefn IES_AssocRequest[] = { offsetof(tDot11fIEhs20vendor_ie, present), 0, "hs20vendor_ie", 0, 7, 9, SigIehs20vendor_ie, {80, 111, 154, 16, 0}, 4, DOT11F_EID_HS20VENDOR_IE, 0, 0, }, - { offsetof(tDot11fAssocRequest, QCN_IE), offsetof(tDot11fIEQCN_IE, - present), 0, "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0}, + { offsetof(tDot11fAssocRequest, qcn_ie), offsetof(tDot11fIEqcn_ie, + present), 0, "qcn_ie", 0, 6, 13, SigIeqcn_ie, {140, 253, 240, 1, 0}, 4, DOT11F_EID_QCN_IE, 0, 0, }, { offsetof(tDot11fAssocRequest, he_cap), offsetof(tDot11fIEhe_cap, present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0}, @@ -9830,8 +9905,8 @@ static const tIEDefn IES_AssocResponse[] = { offsetof(tDot11fIEvendor_vht_ie, present), 0, "vendor_vht_ie", 0, 7, 28, SigIevendor_vht_ie, {0, 144, 76, 4, 0}, 4, DOT11F_EID_VENDOR_VHT_IE, 0, 0, }, - { offsetof(tDot11fAssocResponse, QCN_IE), offsetof(tDot11fIEQCN_IE, - present), 0, "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0}, + { offsetof(tDot11fAssocResponse, qcn_ie), offsetof(tDot11fIEqcn_ie, + present), 0, "qcn_ie", 0, 6, 13, SigIeqcn_ie, {140, 253, 240, 1, 0}, 4, DOT11F_EID_QCN_IE, 0, 0, }, { offsetof(tDot11fAssocResponse, he_cap), offsetof(tDot11fIEhe_cap, present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0}, @@ -10123,8 +10198,8 @@ static const tIEDefn IES_Beacon[] = { { offsetof(tDot11fBeacon, MBO_IE), offsetof(tDot11fIEMBO_IE, present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0}, 4, DOT11F_EID_MBO_IE, 0, 0, }, - { offsetof(tDot11fBeacon, QCN_IE), offsetof(tDot11fIEQCN_IE, present), 0, - "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0}, + { offsetof(tDot11fBeacon, qcn_ie), offsetof(tDot11fIEqcn_ie, present), 0, + "qcn_ie", 0, 6, 13, SigIeqcn_ie, {140, 253, 240, 1, 0}, 4, DOT11F_EID_QCN_IE, 0, 0, }, { offsetof(tDot11fBeacon, he_cap), offsetof(tDot11fIEhe_cap, present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0}, @@ -10353,8 +10428,8 @@ static const tIEDefn IES_Beacon2[] = { { offsetof(tDot11fBeacon2, ESEVersion), offsetof(tDot11fIEESEVersion, present), 0, "ESEVersion", 0, 7, 7, SigIeESEVersion, {0, 64, 150, 3, 0}, 4, DOT11F_EID_ESEVERSION, 0, 0, }, - { offsetof(tDot11fBeacon2, QCN_IE), offsetof(tDot11fIEQCN_IE, present), 0, - "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0}, + { offsetof(tDot11fBeacon2, qcn_ie), offsetof(tDot11fIEqcn_ie, present), 0, + "qcn_ie", 0, 6, 13, SigIeqcn_ie, {140, 253, 240, 1, 0}, 4, DOT11F_EID_QCN_IE, 0, 0, }, { offsetof(tDot11fBeacon2, he_cap), offsetof(tDot11fIEhe_cap, present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0}, @@ -10579,8 +10654,8 @@ static const tIEDefn IES_BeaconIEs[] = { { offsetof(tDot11fBeaconIEs, MBO_IE), offsetof(tDot11fIEMBO_IE, present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0}, 4, DOT11F_EID_MBO_IE, 0, 0, }, - { offsetof(tDot11fBeaconIEs, QCN_IE), offsetof(tDot11fIEQCN_IE, present), - 0, "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0}, + { offsetof(tDot11fBeaconIEs, qcn_ie), offsetof(tDot11fIEqcn_ie, present), + 0, "qcn_ie", 0, 6, 13, SigIeqcn_ie, {140, 253, 240, 1, 0}, 4, DOT11F_EID_QCN_IE, 0, 0, }, { offsetof(tDot11fBeaconIEs, he_cap), offsetof(tDot11fIEhe_cap, present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0}, @@ -11014,8 +11089,8 @@ static const tIEDefn IES_ProbeRequest[] = { { offsetof(tDot11fProbeRequest, ExtCap), offsetof(tDot11fIEExtCap, present), 0, "ExtCap", 0, 3, 17, SigIeExtCap, {0, 0, 0, 0, 0}, 0, DOT11F_EID_EXTCAP, 0, 0, }, - { offsetof(tDot11fProbeRequest, QCN_IE), offsetof(tDot11fIEQCN_IE, - present), 0, "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0}, + { offsetof(tDot11fProbeRequest, qcn_ie), offsetof(tDot11fIEqcn_ie, + present), 0, "qcn_ie", 0, 6, 13, SigIeqcn_ie, {140, 253, 240, 1, 0}, 4, DOT11F_EID_QCN_IE, 0, 0, }, { offsetof(tDot11fProbeRequest, he_cap), offsetof(tDot11fIEhe_cap, present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0}, @@ -11224,8 +11299,8 @@ static const tIEDefn IES_ProbeResponse[] = { { offsetof(tDot11fProbeResponse, MBO_IE), offsetof(tDot11fIEMBO_IE, present), 0, "MBO_IE", 0, 6, 295, SigIeMBO_IE, {80, 111, 154, 22, 0}, 4, DOT11F_EID_MBO_IE, 0, 0, }, - { offsetof(tDot11fProbeResponse, QCN_IE), offsetof(tDot11fIEQCN_IE, - present), 0, "QCN_IE", 0, 10, 10, SigIeQCN_IE, {140, 253, 240, 1, 0}, + { offsetof(tDot11fProbeResponse, qcn_ie), offsetof(tDot11fIEqcn_ie, + present), 0, "qcn_ie", 0, 6, 13, SigIeqcn_ie, {140, 253, 240, 1, 0}, 4, DOT11F_EID_QCN_IE, 0, 0, }, { offsetof(tDot11fProbeResponse, he_cap), offsetof(tDot11fIEhe_cap, present), 0, "he_cap", 0, 23, 56, SigIehe_cap, {0, 0, 0, 0, 0}, @@ -13081,6 +13156,26 @@ static uint32_t unpack_core(tpAniSirGlobal pCtx, countOffset), append_ie); break; + case SigIeversion_attr: + status |= + dot11f_unpack_ie_version_attr( + pCtx, pBufRemaining, len, + (tDot11fIEversion_attr *) + (pFrm + pIe->offset + + sizeof(tDot11fIEversion_attr) * + countOffset), + append_ie); + break; + case SigIevht_mcs11_attr: + status |= + dot11f_unpack_ie_vht_mcs11_attr( + pCtx, pBufRemaining, len, + (tDot11fIEvht_mcs11_attr *) + (pFrm + pIe->offset + + sizeof(tDot11fIEvht_mcs11_attr) * + countOffset), + append_ie); + break; case SigIeAPChannelReport: status |= dot11f_unpack_ie_ap_channel_report( @@ -13871,16 +13966,6 @@ static uint32_t unpack_core(tpAniSirGlobal pCtx, countOffset), append_ie); break; - case SigIeQCN_IE: - status |= - dot11f_unpack_ie_QCN_IE( - pCtx, pBufRemaining, len, - (tDot11fIEQCN_IE *) - (pFrm + pIe->offset + - sizeof(tDot11fIEQCN_IE) * - countOffset), - append_ie); - break; case SigIeQComVendorIE: status |= dot11f_unpack_ie_QComVendorIE( @@ -14512,6 +14597,16 @@ static uint32_t unpack_core(tpAniSirGlobal pCtx, countOffset), append_ie); break; + case SigIeqcn_ie: + status |= + dot11f_unpack_ie_qcn_ie( + pCtx, pBufRemaining, len, + (tDot11fIEqcn_ie *) + (pFrm + pIe->offset + + sizeof(tDot11fIEqcn_ie) * + countOffset), + append_ie); + break; case SigIeroaming_consortium_sel: status |= dot11f_unpack_ie_roaming_consortium_sel( @@ -15891,6 +15986,19 @@ uint32_t dot11f_get_packed_ie_hs20vendor_ie(tpAniSirGlobal pCtx, return status; } /* End dot11f_get_packed_ie_hs20vendor_ie. */ +uint32_t dot11f_get_packed_ie_qcn_ie(tpAniSirGlobal pCtx, + tDot11fIEqcn_ie *pIe, uint32_t *pnNeeded) +{ + uint32_t status = DOT11F_PARSE_SUCCESS; + (void)pCtx; + while (pIe->present) { + status = get_packed_size_core(pCtx, (uint8_t *)pIe, pnNeeded, + IES_qcn_ie); + break; + } + return status; +} /* End dot11f_get_packed_ie_qcn_ie. */ + uint32_t dot11f_get_packed_ie_vendor_vht_ie(tpAniSirGlobal pCtx, tDot11fIEvendor_vht_ie *pIe, uint32_t *pnNeeded) { @@ -16488,6 +16596,20 @@ static uint32_t get_packed_size_core(tpAniSirGlobal pCtx, (pFrm + pIe->offset + offset * i))-> present; break; + case SigIeversion_attr: + offset = sizeof(tDot11fIEversion_attr); + byteCount = 2; + pIePresent = ((tDot11fIEversion_attr *) + (pFrm + pIe->offset + offset * i))-> + present; + break; + case SigIevht_mcs11_attr: + offset = sizeof(tDot11fIEvht_mcs11_attr); + byteCount = 1; + pIePresent = ((tDot11fIEvht_mcs11_attr *) + (pFrm + pIe->offset + offset * i))-> + present; + break; case SigIeAPChannelReport: offset = sizeof(tDot11fIEAPChannelReport); byteCount = ((tDot11fIEAPChannelReport *) @@ -17100,13 +17222,6 @@ static uint32_t get_packed_size_core(tpAniSirGlobal pCtx, (pFrm + pIe->offset + offset * i))-> present; break; - case SigIeQCN_IE: - offset = sizeof(tDot11fIEQCN_IE); - byteCount = 4; - pIePresent = ((tDot11fIEQCN_IE *) - (pFrm + pIe->offset + offset * i))-> - present; - break; case SigIeQComVendorIE: offset = sizeof(tDot11fIEQComVendorIE); byteCount = 2; @@ -17599,6 +17714,14 @@ static uint32_t get_packed_size_core(tpAniSirGlobal pCtx, (pFrm + pIe->offset + offset * i))-> present; break; + case SigIeqcn_ie: + offset = sizeof(tDot11fIEqcn_ie); + status |= + dot11f_get_packed_ie_qcn_ie( + pCtx, (tDot11fIEqcn_ie *) + (pFrm + pIe->offset + offset * i), + pnNeeded); + break; case SigIeroaming_consortium_sel: offset = sizeof(tDot11fIEroaming_consortium_sel); byteCount = ((tDot11fIEroaming_consortium_sel *) @@ -19932,6 +20055,67 @@ uint32_t dot11f_pack_ie_r1_kh_id(tpAniSirGlobal pCtx, return DOT11F_PARSE_SUCCESS; } /* End dot11f_pack_ie_r1_kh_id. */ +uint32_t dot11f_pack_ie_version_attr(tpAniSirGlobal pCtx, + tDot11fIEversion_attr *pSrc, + uint8_t *pBuf, + uint32_t nBuf, + uint32_t *pnConsumed) +{ + uint8_t *pIeLen = 0; + uint32_t nConsumedOnEntry = *pnConsumed; + uint32_t nNeeded = 0U; + nNeeded += 2; + while (pSrc->present) { + if (nNeeded > nBuf) + return DOT11F_BUFFER_OVERFLOW; + *pBuf = 1; + ++pBuf; ++(*pnConsumed); + pIeLen = pBuf; + ++pBuf; ++(*pnConsumed); + *pBuf = pSrc->version; + *pnConsumed += 1; + pBuf += 1; + *pBuf = pSrc->sub_version; + *pnConsumed += 1; + /* fieldsEndFlag = 1 */ + break; + } + (void)pCtx; + if (pIeLen) { + *pIeLen = *pnConsumed - nConsumedOnEntry - 2; + } + return DOT11F_PARSE_SUCCESS; +} /* End dot11f_pack_ie_version_attr. */ + +uint32_t dot11f_pack_ie_vht_mcs11_attr(tpAniSirGlobal pCtx, + tDot11fIEvht_mcs11_attr *pSrc, + uint8_t *pBuf, + uint32_t nBuf, + uint32_t *pnConsumed) +{ + uint8_t *pIeLen = 0; + uint32_t nConsumedOnEntry = *pnConsumed; + uint32_t nNeeded = 0U; + nNeeded += 1; + while (pSrc->present) { + if (nNeeded > nBuf) + return DOT11F_BUFFER_OVERFLOW; + *pBuf = 2; + ++pBuf; ++(*pnConsumed); + pIeLen = pBuf; + ++pBuf; ++(*pnConsumed); + *pBuf = pSrc->vht_mcs_10_11_supp; + *pnConsumed += 1; + /* fieldsEndFlag = 1 */ + break; + } + (void)pCtx; + if (pIeLen) { + *pIeLen = *pnConsumed - nConsumedOnEntry - 2; + } + return DOT11F_PARSE_SUCCESS; +} /* End dot11f_pack_ie_vht_mcs11_attr. */ + uint32_t dot11f_pack_ie_ap_channel_report(tpAniSirGlobal pCtx, tDot11fIEAPChannelReport *pSrc, uint8_t *pBuf, @@ -23866,43 +24050,6 @@ uint32_t dot11f_pack_ie_qbss_load(tpAniSirGlobal pCtx, return DOT11F_PARSE_SUCCESS; } /* End dot11f_pack_ie_qbss_load. */ -uint32_t dot11f_pack_ie_QCN_IE(tpAniSirGlobal pCtx, - tDot11fIEQCN_IE *pSrc, - uint8_t *pBuf, - uint32_t nBuf, - uint32_t *pnConsumed) -{ - uint8_t *pIeLen = 0; - uint32_t nConsumedOnEntry = *pnConsumed; - uint32_t nNeeded = 0U; - nNeeded += 4; - while (pSrc->present) { - if (nNeeded > nBuf) - return DOT11F_BUFFER_OVERFLOW; - *pBuf = 221; - ++pBuf; ++(*pnConsumed); - pIeLen = pBuf; - ++pBuf; ++(*pnConsumed); - *pBuf = 0x8c; - ++pBuf; ++(*pnConsumed); - *pBuf = 0xfd; - ++pBuf; ++(*pnConsumed); - *pBuf = 0xf0; - ++pBuf; ++(*pnConsumed); - *pBuf = 0x1; - ++pBuf; ++(*pnConsumed); - DOT11F_MEMCPY(pCtx, pBuf, pSrc->version, 4); - *pnConsumed += 4; - /* fieldsEndFlag = 1 */ - break; - } - (void)pCtx; - if (pIeLen) { - *pIeLen = *pnConsumed - nConsumedOnEntry - 2; - } - return DOT11F_PARSE_SUCCESS; -} /* End dot11f_pack_ie_QCN_IE. */ - uint32_t dot11f_pack_ie_QComVendorIE(tpAniSirGlobal pCtx, tDot11fIEQComVendorIE *pSrc, uint8_t *pBuf, @@ -26796,6 +26943,50 @@ uint32_t dot11f_pack_ie_osen_ie(tpAniSirGlobal pCtx, return DOT11F_PARSE_SUCCESS; } /* End dot11f_pack_ie_osen_ie. */ +uint32_t dot11f_pack_ie_qcn_ie(tpAniSirGlobal pCtx, + tDot11fIEqcn_ie *pSrc, + uint8_t *pBuf, + uint32_t nBuf, + uint32_t *pnConsumed) +{ + uint8_t *pIeLen = 0; + uint32_t nConsumedOnEntry = *pnConsumed; + uint32_t nNeeded = 0U; + uint32_t status = DOT11F_PARSE_SUCCESS; + status = dot11f_get_packed_ie_qcn_ie(pCtx, pSrc, &nNeeded); + if (!DOT11F_SUCCEEDED(status)) + return status; + while (pSrc->present) { + if (nNeeded > nBuf) + return DOT11F_BUFFER_OVERFLOW; + *pBuf = 221; + ++pBuf; --nBuf; ++(*pnConsumed); + pIeLen = pBuf; + ++pBuf; --nBuf; ++(*pnConsumed); + *pBuf = 0x8c; + ++pBuf; --nBuf; ++(*pnConsumed); + *pBuf = 0xfd; + ++pBuf; --nBuf; ++(*pnConsumed); + *pBuf = 0xf0; + ++pBuf; --nBuf; ++(*pnConsumed); + *pBuf = 0x1; + ++pBuf; --nBuf; ++(*pnConsumed); + status = pack_core(pCtx, + (uint8_t *)pSrc, + pBuf, + nBuf, + pnConsumed, + FFS_qcn_ie, + IES_qcn_ie); + break; + } + (void)pCtx; + if (pIeLen) { + *pIeLen = *pnConsumed - nConsumedOnEntry - 2; + } + return status; +} /* End dot11f_pack_ie_qcn_ie. */ + uint32_t dot11f_pack_ie_roaming_consortium_sel(tpAniSirGlobal pCtx, tDot11fIEroaming_consortium_sel *pSrc, uint8_t *pBuf, @@ -27981,6 +28172,22 @@ static uint32_t pack_core(tpAniSirGlobal pCtx, sizeof(tDot11fIER1KH_ID) * i), pBufRemaining, nBufRemaining, &len); break; + case SigIeversion_attr: + status |= + dot11f_pack_ie_version_attr( + pCtx, (tDot11fIEversion_attr *) + (pSrc + pIe->offset + + sizeof(tDot11fIEversion_attr) * i), + pBufRemaining, nBufRemaining, &len); + break; + case SigIevht_mcs11_attr: + status |= + dot11f_pack_ie_vht_mcs11_attr( + pCtx, (tDot11fIEvht_mcs11_attr *) + (pSrc + pIe->offset + + sizeof(tDot11fIEvht_mcs11_attr) * i), + pBufRemaining, nBufRemaining, &len); + break; case SigIeAPChannelReport: status |= dot11f_pack_ie_ap_channel_report( @@ -28621,14 +28828,6 @@ static uint32_t pack_core(tpAniSirGlobal pCtx, sizeof(tDot11fIEQBSSLoad) * i), pBufRemaining, nBufRemaining, &len); break; - case SigIeQCN_IE: - status |= - dot11f_pack_ie_QCN_IE( - pCtx, (tDot11fIEQCN_IE *) - (pSrc + pIe->offset + - sizeof(tDot11fIEQCN_IE) * i), - pBufRemaining, nBufRemaining, &len); - break; case SigIeQComVendorIE: status |= dot11f_pack_ie_QComVendorIE( @@ -29125,6 +29324,14 @@ static uint32_t pack_core(tpAniSirGlobal pCtx, sizeof(tDot11fIEosen_ie) * i), pBufRemaining, nBufRemaining, &len); break; + case SigIeqcn_ie: + status |= + dot11f_pack_ie_qcn_ie( + pCtx, (tDot11fIEqcn_ie *) + (pSrc + pIe->offset + + sizeof(tDot11fIEqcn_ie) * i), + pBufRemaining, nBufRemaining, &len); + break; case SigIeroaming_consortium_sel: status |= dot11f_pack_ie_roaming_consortium_sel( 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 9bb643fc76c8..15cdbb8b3ad5 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 @@ -1159,13 +1159,24 @@ populate_dot11f_ext_cap(struct mac_context *mac, return QDF_STATUS_SUCCESS; } -void populate_dot11f_qcn_ie(tDot11fIEQCN_IE *pDot11f) +void populate_dot11f_qcn_ie(struct mac_context *mac, + tDot11fIEqcn_ie *qcn_ie, + uint8_t attr_id) { - pDot11f->present = 1; - pDot11f->version[0] = QCN_IE_VERSION_SUBATTR_ID; - pDot11f->version[1] = QCN_IE_VERSION_SUBATTR_DATA_LEN; - pDot11f->version[2] = QCN_IE_VERSION_SUPPORTED; - pDot11f->version[3] = QCN_IE_SUBVERSION_SUPPORTED; + qcn_ie->present = 0; + if (mac->mlme_cfg->sta.qcn_ie_support && + ((attr_id == QCN_IE_ATTR_ID_ALL) || + (attr_id == QCN_IE_ATTR_ID_VERSION))) { + qcn_ie->present = 1; + qcn_ie->version_attr.present = 1; + qcn_ie->version_attr.version = QCN_IE_VERSION_SUPPORTED; + qcn_ie->version_attr.sub_version = QCN_IE_SUBVERSION_SUPPORTED; + } + if (mac->mlme_cfg->vht_caps.vht_cap_info.vht_mcs_10_11_supp) { + qcn_ie->present = 1; + qcn_ie->vht_mcs11_attr.present = 1; + qcn_ie->vht_mcs11_attr.vht_mcs_10_11_supp = 1; + } } QDF_STATUS @@ -2507,16 +2518,9 @@ QDF_STATUS sir_convert_probe_frame2_struct(struct mac_context *mac, } } - if (pr->QCN_IE.present) { - pProbeResp->QCN_IE.is_present = true; - - if (pr->QCN_IE.version[0] == QCN_IE_VERSION_SUBATTR_ID) { - pProbeResp->QCN_IE.version - = pr->QCN_IE.version[2]; - pProbeResp->QCN_IE.sub_version - = pr->QCN_IE.version[3]; - } - } + if (pr->qcn_ie.present) + qdf_mem_copy(&pProbeResp->qcn_ie, &pr->qcn_ie, + sizeof(tDot11fIEqcn_ie)); if (pr->he_cap.present) { pe_debug("11AX: HE cap IE present"); @@ -2721,6 +2725,9 @@ sir_convert_assoc_req_frame2_struct(struct mac_context *mac, lim_log_vht_cap(mac, &pAssocReq->VHTCaps); } } + if (ar->qcn_ie.present) + qdf_mem_copy(&pAssocReq->qcn_ie, &ar->qcn_ie, + sizeof(tDot11fIEqcn_ie)); if (ar->he_cap.present) { qdf_mem_copy(&pAssocReq->he_cap, &ar->he_cap, sizeof(tDot11fIEhe_cap)); @@ -3173,6 +3180,9 @@ sir_convert_assoc_resp_frame2_struct(struct mac_context *mac, lim_log_vht_operation(mac, &pAssocRsp->VHTOperation); } + if (ar->qcn_ie.present) + qdf_mem_copy(&pAssocRsp->qcn_ie, &ar->qcn_ie, + sizeof(tDot11fIEqcn_ie)); if (ar->he_cap.present) { pe_debug("11AX: HE cap IE present"); qdf_mem_copy(&pAssocRsp->he_cap, &ar->he_cap, @@ -3951,15 +3961,9 @@ sir_parse_beacon_ie(struct mac_context *mac, } } - if (pBies->QCN_IE.present) { - pBeaconStruct->QCN_IE.is_present = true; - if (pBies->QCN_IE.version[0] == QCN_IE_VERSION_SUBATTR_ID) { - pBeaconStruct->QCN_IE.version - = pBies->QCN_IE.version[2]; - pBeaconStruct->QCN_IE.sub_version - = pBies->QCN_IE.version[3]; - } - } + if (pBies->qcn_ie.present) + qdf_mem_copy(&pBeaconStruct->qcn_ie, &pBies->qcn_ie, + sizeof(tDot11fIEqcn_ie)); if (pBies->he_cap.present) { qdf_mem_copy(&pBeaconStruct->he_cap, &pBies->he_cap, @@ -4324,16 +4328,9 @@ sir_convert_beacon_frame2_struct(struct mac_context *mac, } } - if (pBeacon->QCN_IE.present) { - pBeaconStruct->QCN_IE.is_present = true; - if (pBeacon->QCN_IE.version[0] - == QCN_IE_VERSION_SUBATTR_ID) { - pBeaconStruct->QCN_IE.version - = pBeacon->QCN_IE.version[2]; - pBeaconStruct->QCN_IE.sub_version - = pBeacon->QCN_IE.version[3]; - } - } + if (pBeacon->qcn_ie.present) + qdf_mem_copy(&pBeaconStruct->qcn_ie, &pBeacon->qcn_ie, + sizeof(tDot11fIEqcn_ie)); if (pBeacon->he_cap.present) { pe_debug("11AX: HE cap IE present"); diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index 11640001f2a6..6b50f49b7494 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -2653,6 +2653,18 @@ QDF_STATUS sme_get_bss_transition_status(mac_handle_t mac_handle, uint32_t sme_unpack_rsn_ie(mac_handle_t mac_handle, uint8_t *buf, uint8_t buf_len, tDot11fIERSN *rsn_ie, bool append_ie); + +/** + * sme_add_qcn_ie: Adds QCN IE data to IE buffer + * @mac_handle: handle returned by mac_open + * @ie_data: ie buffer pointer + * @ie_len: ie length pointer + * + * Return: none + */ +void sme_add_qcn_ie(mac_handle_t mac_handle, uint8_t *ie_data, + uint16_t *ie_len); + /** * sme_get_oper_chan_freq - gets the operating channel freq * @vdev: vdev handle diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 8e8e713e9f1a..d028fb699596 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -14843,6 +14843,30 @@ uint32_t sme_unpack_rsn_ie(mac_handle_t mac_handle, uint8_t *buf, return dot11f_unpack_ie_rsn(mac_ctx, buf, buf_len, rsn_ie, append_ie); } +void sme_add_qcn_ie(mac_handle_t mac_handle, uint8_t *ie_data, + uint16_t *ie_len) +{ + struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle); + uint8_t qcn_ie[] = {WLAN_ELEMID_VENDOR, DOT11F_IE_QCN_IE_MAX_LEN, + 0x8C, 0xFD, 0xF0, 0x1, QCN_IE_VERSION_SUBATTR_ID, + QCN_IE_VERSION_SUBATTR_DATA_LEN, + QCN_IE_VERSION_SUPPORTED, + QCN_IE_SUBVERSION_SUPPORTED}; + + if (!mac_ctx->mlme_cfg->sta.qcn_ie_support) { + sme_debug("QCN IE is not supported"); + return; + } + + if (((*ie_len) + sizeof(qcn_ie)) > MAX_DEFAULT_SCAN_IE_LEN) { + sme_err("IE buffer not enough for QCN IE"); + return; + } + + qdf_mem_copy(ie_data + (*ie_len), qcn_ie, sizeof(qcn_ie)); + (*ie_len) += sizeof(qcn_ie); +} + #ifdef FEATURE_BSS_TRANSITION /** * sme_get_status_for_candidate() - Get bss transition status for candidate diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index c4a516ebddde..ad448ae21b78 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -15217,11 +15217,11 @@ static bool csr_enable_twt(struct mac_context *mac_ctx, tDot11fBeaconIEs *ie) if ((IS_FEATURE_SUPPORTED_BY_FW(DOT11AX) || mac_ctx->mlme_cfg->twt_cfg.is_twt_requestor_enabled) && ie && - (ie->QCN_IE.present || ie->he_cap.twt_responder)) { + (ie->qcn_ie.present || ie->he_cap.twt_responder)) { sme_debug("TWT is supported, hence disable UAPSD; twt req supp: %d,twt respon supp: %d, QCN_IE: %d", mac_ctx->mlme_cfg->twt_cfg.is_twt_requestor_enabled, ie->he_cap.twt_responder, - ie->QCN_IE.present); + ie->qcn_ie.present); return true; } return false; diff --git a/core/wma/inc/wma_if.h b/core/wma/inc/wma_if.h index 6e48c3ab86ed..d0072b5e2842 100644 --- a/core/wma/inc/wma_if.h +++ b/core/wma/inc/wma_if.h @@ -166,6 +166,7 @@ struct sAniProbeRspStruct { * @htSmpsconfig: HT SMPS config * @htLdpcCapable: HT LDPC capable * @vhtLdpcCapable: VHT LDPC capable + * @vht_mcs_10_11_supp: VHT MCS 10 & 11 support * @smesessionId: sme session id * @wpa_rsn: RSN capable * @capab_info: capabality info @@ -265,6 +266,7 @@ typedef struct { bool send_smps_action; uint8_t htLdpcCapable; uint8_t vhtLdpcCapable; + uint8_t vht_mcs_10_11_supp; uint8_t smesessionId; uint8_t wpa_rsn; uint16_t capab_info; diff --git a/core/wma/inc/wma_tgt_cfg.h b/core/wma/inc/wma_tgt_cfg.h index b7ddd9933d7d..43b99febab78 100644 --- a/core/wma/inc/wma_tgt_cfg.h +++ b/core/wma/inc/wma_tgt_cfg.h @@ -112,6 +112,7 @@ struct wma_tgt_ht_cap { * @vht_mu_bformee: vht mu bformee * @vht_max_ampdu_len_exp: vht max ampdu len exp * @vht_txop_ps: vht txop ps + * @vht_mcs_10_11_supp: VHT MCS 10 & 11 support */ struct wma_tgt_vht_cap { uint32_t vht_max_mpdu; @@ -127,6 +128,7 @@ struct wma_tgt_vht_cap { uint32_t vht_mu_bformee; uint32_t vht_max_ampdu_len_exp; uint32_t vht_txop_ps; + uint32_t vht_mcs_10_11_supp; }; /** diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 4ec67ed92c9a..adbd045689d2 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -5341,6 +5341,7 @@ static void wma_update_target_ext_vht_cap(struct target_psoc_info *tgt_hdl, uint32_t vht_cap_info_2g, vht_cap_info_5g; struct wma_tgt_vht_cap tmp_vht_cap = {0}, tmp_cap = {0}; struct wlan_psoc_host_mac_phy_caps *mac_phy_cap; + uint32_t vht_mcs_10_11_supp = 0; total_mac_phy_cnt = target_psoc_get_total_mac_phy_cnt(tgt_hdl); num_hw_modes = target_psoc_get_num_hw_modes(tgt_hdl); @@ -5364,6 +5365,14 @@ static void wma_update_target_ext_vht_cap(struct target_psoc_info *tgt_hdl, if (vht_cap_info_5g) wma_derive_ext_vht_cap(&tmp_vht_cap, vht_cap_info_5g); + if (WMI_GET_BITS(mac_phy_cap[i].vht_supp_mcs_5G, 16, 2) && + WMI_VHT_MCS_NOTIFY_EXT_SS_GET(mac_phy_cap[i]. + vht_supp_mcs_5G)) + vht_mcs_10_11_supp = 1; + if (WMI_GET_BITS(mac_phy_cap[i].vht_supp_mcs_2G, 16, 2) && + WMI_VHT_MCS_NOTIFY_EXT_SS_GET(mac_phy_cap[i]. + vht_supp_mcs_2G)) + vht_mcs_10_11_supp = 1; } if (qdf_mem_cmp(&tmp_cap, &tmp_vht_cap, @@ -5371,15 +5380,17 @@ static void wma_update_target_ext_vht_cap(struct target_psoc_info *tgt_hdl, qdf_mem_copy(vht_cap, &tmp_vht_cap, sizeof(struct wma_tgt_vht_cap)); } - + vht_cap->vht_mcs_10_11_supp = vht_mcs_10_11_supp; WMA_LOGD("%s: [ext vhtcap] max_mpdu %d supp_chan_width %x rx_ldpc %x\n" "short_gi_80 %x tx_stbc %x rx_stbc %x txop_ps %x\n" - "su_bformee %x mu_bformee %x max_ampdu_len_exp %d", __func__, + "su_bformee %x mu_bformee %x max_ampdu_len_exp %d\n" + "vht_mcs_10_11_supp %d", __func__, vht_cap->vht_max_mpdu, vht_cap->supp_chan_width, vht_cap->vht_rx_ldpc, vht_cap->vht_short_gi_80, vht_cap->vht_tx_stbc, vht_cap->vht_rx_stbc, vht_cap->vht_txop_ps, vht_cap->vht_su_bformee, - vht_cap->vht_mu_bformee, vht_cap->vht_max_ampdu_len_exp); + vht_cap->vht_mu_bformee, vht_cap->vht_max_ampdu_len_exp, + vht_cap->vht_mcs_10_11_supp); } static void @@ -6426,14 +6437,14 @@ static void wma_print_mac_phy_capabilities(struct wlan_psoc_host_mac_phy_caps WMA_LOGD("\t: ampdu_density[%d]", cap->ampdu_density); WMA_LOGD("\t: max_bw_supported_2G[%d]", cap->max_bw_supported_2G); WMA_LOGD("\t: ht_cap_info_2G[%d]", cap->ht_cap_info_2G); - WMA_LOGD("\t: vht_cap_info_2G[%d]", cap->vht_cap_info_2G); - WMA_LOGD("\t: vht_supp_mcs_2G[%d]", cap->vht_supp_mcs_2G); + WMA_LOGD("\t: vht_cap_info_2G[0x%0X]", cap->vht_cap_info_2G); + WMA_LOGD("\t: vht_supp_mcs_2G[0x%0X]", cap->vht_supp_mcs_2G); WMA_LOGD("\t: tx_chain_mask_2G[%d]", cap->tx_chain_mask_2G); WMA_LOGD("\t: rx_chain_mask_2G[%d]", cap->rx_chain_mask_2G); WMA_LOGD("\t: max_bw_supported_5G[%d]", cap->max_bw_supported_5G); WMA_LOGD("\t: ht_cap_info_5G[%d]", cap->ht_cap_info_5G); - WMA_LOGD("\t: vht_cap_info_5G[%d]", cap->vht_cap_info_5G); - WMA_LOGD("\t: vht_supp_mcs_5G[%d]", cap->vht_supp_mcs_5G); + WMA_LOGD("\t: vht_cap_info_5G[0x%0X]", cap->vht_cap_info_5G); + WMA_LOGD("\t: vht_supp_mcs_5G[0x%0X]", cap->vht_supp_mcs_5G); WMA_LOGD("\t: tx_chain_mask_5G[%d]", cap->tx_chain_mask_5G); WMA_LOGD("\t: rx_chain_mask_5G[%d]", cap->rx_chain_mask_5G); WMA_LOGD("\t: he_cap_info_2G[0][%08x]", cap->he_cap_info_2G[0]); diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index 77c5ba891b2e..dadd13e5c515 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -1549,6 +1549,12 @@ QDF_STATUS wma_send_peer_assoc(tp_wma_handle wma, cmd->peer_nss = ((cmd->rx_mcs_set & VHT2x2MCSMASK) == VHT2x2MCSMASK) ? 1 : 2; } + + if (params->vht_mcs_10_11_supp) { + WMI_SET_BITS(cmd->tx_mcs_set, 16, cmd->peer_nss, + ((1 << cmd->peer_nss) - 1)); + WMI_VHT_MCS_NOTIFY_EXT_SS_SET(cmd->tx_mcs_set, 1); + } } WMA_LOGD(FL("rx_max_rate: %d, rx_mcs: %x, tx_max_rate: %d, tx_mcs: %x"),