diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c index e21b3a854c..1ab1ffe471 100644 --- a/mlme/core/src/wlan_mlme_main.c +++ b/mlme/core/src/wlan_mlme_main.c @@ -349,6 +349,9 @@ static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc, gen->debug_packet_log = cfg_get(psoc, CFG_ENABLE_DEBUG_PACKET_LOG); mlme_init_pmf_cfg(psoc, gen); mlme_init_lpass_support_cfg(psoc, gen); + + gen->enabled_11h = cfg_default(CFG_11H_SUPPORT_ENABLED); + gen->enabled_11d = cfg_default(CFG_11D_SUPPORT_ENABLED); } static void mlme_init_edca_ani_cfg(struct wlan_mlme_edca_params *edca_params) @@ -806,6 +809,11 @@ static void mlme_init_vht_cap_cfg(struct wlan_objmgr_psoc *psoc, if (vht_cap_info->enable2x2 && vht_cap_info->su_bformer) vht_cap_info->num_soundingdim = NUM_OF_SOUNDING_DIMENSIONS; + + vht_cap_info->tx_bf_cap = cfg_default(CFG_TX_BF_CAP); + vht_cap_info->as_cap = cfg_default(CFG_AS_CAP); + vht_cap_info->disable_ldpc_with_txbf_ap = + cfg_get(psoc, CFG_DISABLE_LDPC_WITH_TXBF_AP); } static void mlme_init_rates_in_cfg(struct wlan_objmgr_psoc *psoc, diff --git a/mlme/dispatcher/inc/cfg_mlme_generic.h b/mlme/dispatcher/inc/cfg_mlme_generic.h index 08180bcb9f..0d60a3ffbe 100644 --- a/mlme/dispatcher/inc/cfg_mlme_generic.h +++ b/mlme/dispatcher/inc/cfg_mlme_generic.h @@ -94,6 +94,50 @@ 1, \ "RTT3 enable/disable info") +/* + * + * g11hSupportEnabled - Enable 11h support + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to set 11h support flag + * + * Related: None + * + * Supported Feature: STA + * + * Usage: Internal/External + * + * + */ +#define CFG_11H_SUPPORT_ENABLED CFG_INI_BOOL( \ + "g11hSupportEnabled", \ + 1, \ + "11h Enable Flag") + +/* + * + * g11dSupportEnabled - Enable 11d support + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to set 11d support flag + * + * Related: None + * + * Supported Feature: STA + * + * Usage: Internal/External + * + * + */ +#define CFG_11D_SUPPORT_ENABLED CFG_INI_BOOL( \ + "g11dSupportEnabled", \ + 1, \ + "11d Enable Flag") + /* * * BandCapability - Preferred band (0: Both, 1: 2.4G only, 2: 5G only) @@ -494,6 +538,8 @@ CFG(CFG_PMF_SA_QUERY_RETRY_INTERVAL) \ CFG(CFG_ENABLE_RTT_MAC_RANDOMIZATION) \ CFG(CFG_RTT3_ENABLE) \ + CFG(CFG_11H_SUPPORT_ENABLED) \ + CFG(CFG_11D_SUPPORT_ENABLED) \ CFG(CFG_BAND_CAPABILITY) \ CFG(CFG_PREVENT_LINK_DOWN) \ CFG(CFG_SELECT_5GHZ_MARGIN) \ diff --git a/mlme/dispatcher/inc/cfg_mlme_vht_caps.h b/mlme/dispatcher/inc/cfg_mlme_vht_caps.h index ba4ef5f5d8..dc664ccb78 100644 --- a/mlme/dispatcher/inc/cfg_mlme_vht_caps.h +++ b/mlme/dispatcher/inc/cfg_mlme_vht_caps.h @@ -126,6 +126,42 @@ CFG_VALUE_OR_DEFAULT, \ "VHT TX SUPP DATA RATE") +#define CFG_TX_BF_CAP CFG_INT( \ + "tx_bf_cap", \ + 0, \ + -1, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "TX BF CAP") + +#define CFG_AS_CAP CFG_UINT( \ + "as_cap", \ + 0, \ + 255, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "AS CAP") + +/* + * + * gDisableLDPCWithTxbfAP - Disable LDPC with tx bf AP + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * Related: NA + * + * Supported Feature: 11AC + * + * Usage: External + * + * + */ +#define CFG_DISABLE_LDPC_WITH_TXBF_AP CFG_INI_BOOL( \ + "gDisableLDPCWithTxbfAP", \ + 0, \ + "Disable LDPC with tx bf AP") + /* * * gTxBFEnable - Enables SU beamformee caps @@ -591,6 +627,9 @@ CFG(CFG_VHT_AMPDU_LEN_EXPONENT) \ CFG(CFG_VHT_MPDU_LEN) \ CFG(CFG_VHT_ENABLE_TXBF_SAP_MODE) \ - CFG(CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE) + CFG(CFG_ENABLE_SUBFEE_IN_VENDOR_VHTIE) \ + CFG(CFG_TX_BF_CAP) \ + CFG(CFG_AS_CAP) \ + CFG(CFG_DISABLE_LDPC_WITH_TXBF_AP) #endif /* __CFG_MLME_VHT_CAPS_H */ diff --git a/mlme/dispatcher/inc/wlan_mlme_api.h b/mlme/dispatcher/inc/wlan_mlme_api.h index 34dd11b67a..9b6fd49b98 100644 --- a/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_api.h @@ -1857,4 +1857,41 @@ QDF_STATUS wlan_mlme_is_sap_uapsd_enabled(struct wlan_objmgr_psoc *psoc, */ QDF_STATUS wlan_mlme_set_sap_uapsd_flag(struct wlan_objmgr_psoc *psoc, bool value); + +/** + * wlan_mlme_is_11h_enabled() - Get the 11h flag + * @psoc: psoc context + * + * Return: QDF_STATUS + */ +QDF_STATUS +wlan_mlme_is_11h_enabled(struct wlan_objmgr_psoc *psoc, bool *value); + +/** + * wlan_mlme_set_11h_enabled() - Set the 11h flag + * @psoc: psoc context + * + * Return: QDF_STATUS + */ +QDF_STATUS +wlan_mlme_set_11h_enabled(struct wlan_objmgr_psoc *psoc, bool value); + +/** + * wlan_mlme_is_11d_enabled() - Get the 11d flag + * @psoc: psoc context + * + * Return: QDF_STATUS + */ +QDF_STATUS +wlan_mlme_is_11d_enabled(struct wlan_objmgr_psoc *psoc, bool *value); + +/** + * wlan_mlme_set_11d_enabled() - Set the 11h flag + * @psoc: psoc context + * + * Return: QDF_STATUS + */ +QDF_STATUS +wlan_mlme_set_11d_enabled(struct wlan_objmgr_psoc *psoc, bool value); + #endif /* _WLAN_MLME_API_H_ */ diff --git a/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 3a59cd7fa9..65df894c29 100644 --- a/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -646,6 +646,9 @@ struct wlan_mlme_mbo { * @ampdu_len: To handle maximum receive AMPDU ampdu len * @tx_bfee_sap: enable tx bfee SAp * @subfee_vendor_vhtie: enable subfee vendor vht ie + * @tx_bf_cap: Transmit bf capability + * @as_cap: Antenna sharing capability info + * @disable_ldpc_with_txbf_ap: Disable ldpc capability */ struct mlme_vht_capabilities_info { uint8_t supp_chan_width; @@ -686,6 +689,9 @@ struct mlme_vht_capabilities_info { uint8_t ampdu_len; bool tx_bfee_sap; bool vendor_vhtie; + uint8_t tx_bf_cap; + uint8_t as_cap; + bool disable_ldpc_with_txbf_ap; }; /** @@ -902,6 +908,8 @@ struct wlan_mlme_chainmask { * @optimize_ca_event: Enable/Disable Optimization of CA events * @fw_timeout_crash: Enable/Disable FW Timeout Crash * * @debug_packet_log: Debug packet log flags + * @enabled_11h: enable 11h flag + * @enabled_11d: enable 11d flag */ struct wlan_mlme_generic { enum band_info band_capability; @@ -925,6 +933,8 @@ struct wlan_mlme_generic { bool optimize_ca_event; bool fw_timeout_crash; uint8_t debug_packet_log; + bool enabled_11h; + bool enabled_11d; }; /* diff --git a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 908d9bf768..ab08b1abaa 100644 --- a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -2358,6 +2358,66 @@ ucfg_mlme_update_nss_vht_cap(struct wlan_objmgr_psoc *psoc) return mlme_update_nss_vht_cap(psoc); } +/** + * ucfg_mlme_is_11h_enabled() - Get 11h flag + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_is_11h_enabled(struct wlan_objmgr_psoc *psoc, bool *value) +{ + return wlan_mlme_is_11h_enabled(psoc, value); +} + +/** + * ucfg_mlme_set_11h_enabled() - Set 11h flag + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_set_11h_enabled(struct wlan_objmgr_psoc *psoc, bool value) +{ + return wlan_mlme_set_11h_enabled(psoc, value); +} + +/** + * ucfg_mlme_is_11d_enabled() - Get 11d flag + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_is_11d_enabled(struct wlan_objmgr_psoc *psoc, bool *value) +{ + return wlan_mlme_is_11d_enabled(psoc, value); +} + +/** + * ucfg_mlme_set_11d_enabled() - Set 11d flag + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline QDF_STATUS +ucfg_mlme_set_11d_enabled(struct wlan_objmgr_psoc *psoc, bool value) +{ + return wlan_mlme_set_11d_enabled(psoc, value); +} + /** * ucfg_mlme_get_opr_rate_set() - Get operational rate set * @psoc: pointer to psoc object diff --git a/mlme/dispatcher/src/wlan_mlme_api.c b/mlme/dispatcher/src/wlan_mlme_api.c index 6bd024531e..093b8a6da7 100644 --- a/mlme/dispatcher/src/wlan_mlme_api.c +++ b/mlme/dispatcher/src/wlan_mlme_api.c @@ -2351,6 +2351,69 @@ QDF_STATUS mlme_set_wep_key(struct wlan_mlme_wep_cfg *wep_params, return QDF_STATUS_SUCCESS; } +QDF_STATUS +wlan_mlme_is_11h_enabled(struct wlan_objmgr_psoc *psoc, bool *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.gen.enabled_11h; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_set_11h_enabled(struct wlan_objmgr_psoc *psoc, bool value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + mlme_obj->cfg.gen.enabled_11h = value; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_is_11d_enabled(struct wlan_objmgr_psoc *psoc, bool *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.gen.enabled_11d; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_set_11d_enabled(struct wlan_objmgr_psoc *psoc, bool value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + mlme_obj->cfg.gen.enabled_11d = value; + + return QDF_STATUS_SUCCESS; +} QDF_STATUS wlan_mlme_cfg_set_vht_chan_width(struct wlan_objmgr_psoc *psoc, uint8_t value) {