diff --git a/cfg/cfg_all.h b/cfg/cfg_all.h index ffe29c9fdc..d86c3a452a 100644 --- a/cfg/cfg_all.h +++ b/cfg/cfg_all.h @@ -18,6 +18,7 @@ #include "cfg_define.h" #include "cfg_converged.h" +#include "cfg_mlme.h" #ifdef CONVERGED_P2P_ENABLE #include "wlan_p2p_cfg.h" @@ -37,8 +38,10 @@ #define CFG_NAN_ALL #endif +/* Maintain Alphabetic order here while adding components */ #define CFG_ALL \ CFG_CONVERGED_ALL \ + CFG_MLME_ALL \ + CFG_NAN_ALL \ CFG_P2P_ALL \ - CFG_TDLS_ALL \ - CFG_NAN_ALL + CFG_TDLS_ALL diff --git a/mlme/core/inc/wlan_mlme_main.h b/mlme/core/inc/wlan_mlme_main.h index 812f634d0c..46f56ff3de 100644 --- a/mlme/core/inc/wlan_mlme_main.h +++ b/mlme/core/inc/wlan_mlme_main.h @@ -16,8 +16,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ /** - * DOC: declare utility API related to the pmo component - * called by other components + * DOC: declare internal API related to the mlme component */ #ifndef _WLAN_MLME_MAIN_H_ @@ -70,20 +69,41 @@ QDF_STATUS mlme_deinit(void); * * Register this api with objmgr to detect psoc is created * - * Return QDF_STATUS status in case of success else return error + * Return: QDF_STATUS status in case of success else return error */ QDF_STATUS mlme_psoc_object_created_notification( struct wlan_objmgr_psoc *psoc, void *arg); /** - * mlme_psoc_object_destroyed_notification(): mlme psoc delete handler + * mlme_psoc_object_destroyed_notification(): mlme psoc delete handler * @psoc: psoc which is going to delete by objmgr * @arg: argument for vdev delete handler * * Register this api with objmgr to detect psoc is deleted * - * Return QDF_STATUS status in case of success else return error + * Return: QDF_STATUS status in case of success else return error */ QDF_STATUS mlme_psoc_object_destroyed_notification( struct wlan_objmgr_psoc *psoc, void *arg); + +/** + * mlme_cfg_on_psoc_enable() - Populate MLME structure from CFG and INI + * @psoc: pointer to the psoc object + * + * Populate the MLME CFG structure from CFG and INI values using CFG APIs + * + * Return: QDF_STATUS + */ +QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc); + +/** + * mlme_get_psoc_obj() - Get MLME object from psoc + * @psoc: pointer to the psoc object + * + * Get the MLME object pointer from the psoc + * + * Return: pointer to MLME object + */ +struct wlan_mlme_psoc_obj *mlme_get_psoc_obj(struct wlan_objmgr_psoc *psoc); + #endif diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c index 6e160085f1..80a194c7e3 100644 --- a/mlme/core/src/wlan_mlme_main.c +++ b/mlme/core/src/wlan_mlme_main.c @@ -16,20 +16,13 @@ * PERFORMANCE OF THIS SOFTWARE. */ /** - * DOC: define utility API related to the mlme component - * called by other components + * DOC: define internal APIs related to the mlme component */ #include "wlan_mlme_main.h" +#include "cfg_ucfg_api.h" -/** - * wlan_psoc_get_mlme_obj() - private API to get mlme object from psoc - * @psoc: psoc object - * - * Return: mlme object - */ -static inline struct wlan_mlme_psoc_obj * -wlan_psoc_get_mlme_obj(struct wlan_objmgr_psoc *psoc) +struct wlan_mlme_psoc_obj *mlme_get_psoc_obj(struct wlan_objmgr_psoc *psoc) { struct wlan_mlme_psoc_obj *mlme_obj; @@ -116,7 +109,7 @@ QDF_STATUS mlme_psoc_object_destroyed_notification( struct wlan_mlme_psoc_obj *mlme_obj = NULL; QDF_STATUS status; - mlme_obj = wlan_psoc_get_mlme_obj(psoc); + mlme_obj = mlme_get_psoc_obj(psoc); status = wlan_objmgr_psoc_component_obj_detach(psoc, WLAN_UMAC_COMP_MLME, @@ -133,3 +126,43 @@ out: return status; } +static void mlme_update_ht_cap_in_cfg(struct wlan_objmgr_psoc *psoc, + struct mlme_ht_capabilities_info + *ht_cap_info) +{ + union { + uint16_t val_16; + struct mlme_ht_capabilities_info default_ht_cap_info; + } u; + + u.val_16 = (uint16_t)cfg_default(CFG_HT_CAP_INFO); + + u.default_ht_cap_info.advCodingCap = cfg_get(psoc, CFG_RX_LDPC_ENABLE); + u.default_ht_cap_info.rxSTBC = cfg_get(psoc, CFG_RX_STBC_ENABLE); + u.default_ht_cap_info.txSTBC = cfg_get(psoc, CFG_TX_STBC_ENABLE); + u.default_ht_cap_info.shortGI20MHz = + cfg_get(psoc, CFG_SHORT_GI_20MHZ); + u.default_ht_cap_info.shortGI40MHz = + cfg_get(psoc, CFG_SHORT_GI_40MHZ); + + *ht_cap_info = u.default_ht_cap_info; +} + +QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + struct wlan_mlme_cfg *mlme_cfg; + QDF_STATUS status = QDF_STATUS_SUCCESS; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + mlme_cfg = &mlme_obj->cfg; + mlme_update_ht_cap_in_cfg(psoc, &mlme_cfg->ht_caps.ht_cap_info); + + return status; +} + diff --git a/mlme/dispatcher/inc/cfg_mlme.h b/mlme/dispatcher/inc/cfg_mlme.h new file mode 100644 index 0000000000..2bd5c94ee8 --- /dev/null +++ b/mlme/dispatcher/inc/cfg_mlme.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2018 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef __CFG_MLME_H +#define __CFG_MLME_H + +#include "cfg_define.h" +#include "cfg_converged.h" +#include "qdf_types.h" + +#include "cfg_mlme_ht_caps.h" +#include "cfg_mlme_vht_caps.h" + +#define CFG_MLME_ALL \ + CFG_HT_CAPS_ALL \ + CFG_VHT_CAPS_ALL + +#endif /* __CFG_MLME_H */ + diff --git a/mlme/dispatcher/inc/cfg_mlme_ht_caps.h b/mlme/dispatcher/inc/cfg_mlme_ht_caps.h new file mode 100644 index 0000000000..a8a1cdf6e6 --- /dev/null +++ b/mlme/dispatcher/inc/cfg_mlme_ht_caps.h @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2012-2018 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/** + * DOC: This file contains centralized definitions of converged configuration. + */ + +#ifndef __CFG_MLME_HT_CAPS_H +#define __CFG_MLME_HT_CAPS_H + +/* + * + * gTxLdpcEnable - Config Param to enable Tx LDPC capability + * @Min: 0 + * @Max: 3 + * @Default: 3 + * + * This ini is used to enable/disable Tx LDPC capability + * 0 - disable + * 1 - HT LDPC enable + * 2 - VHT LDPC enable + * 3 - HT & VHT LDPC enable + * + * Related: STA/SAP/P2P/IBSS/NAN. + * + * Supported Feature: Concurrency/Standalone + * + * Usage: Internal/External + * + * + */ +#define CFG_TX_LDPC_ENABLE CFG_INI_UINT( \ + "gTxLdpcEnable", \ + 0, \ + 3, \ + 3, \ + CFG_VALUE_OR_DEFAULT, \ + "Tx LDPC capability") + +/* + * + * gEnableRXLDPC - Config Param to enable Rx LDPC capability + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable/disable Rx LDPC capability + * 0 - disable Rx LDPC + * 1 - enable Rx LDPC + * + * Related: STA/SAP/P2P/IBSS/NAN. + * + * Supported Feature: Concurrency/Standalone + * + * Usage: Internal/External + * + * + */ +#define CFG_RX_LDPC_ENABLE CFG_INI_BOOL( \ + "gEnableRXLDPC", \ + 0, \ + "Rx LDPC capability") + +/* + * + * gEnableTXSTBC - Enables/disables Tx STBC capability in STA mode + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to set default Tx STBC capability + * + * Related: None + * + * Supported Feature: STA + * + * Usage: Internal/External + * + * + */ +#define CFG_TX_STBC_ENABLE CFG_INI_BOOL( \ + "gEnableTXSTBC", \ + 0, \ + "Tx STBC capability") + +/* + * + * gEnableRXSTBC - Enables/disables Rx STBC capability in STA mode + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to set default Rx STBC capability + * + * Related: None + * + * Supported Feature: STA + * + * Usage: Internal/External + * + * + */ +#define CFG_RX_STBC_ENABLE CFG_INI_BOOL( \ + "gEnableRXSTBC", \ + 1, \ + "Rx STBC capability") + +/* + * + * gShortGI20Mhz - Short Guard Interval for HT20 + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to set default short interval for HT20 + * + * Related: None + * + * Supported Feature: STA + * + * Usage: Internal/External + * + * + */ +#define CFG_SHORT_GI_20MHZ CFG_INI_BOOL( \ + "gShortGI20Mhz", \ + 1, \ + "Short Guard Interval for HT20") + +/* + * + * gShortGI40Mhz - It will check gShortGI20Mhz and + * gShortGI40Mhz from session entry + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to set default gShortGI40Mhz + * + * Related: None + * + * Supported Feature: STA + * + * Usage: Internal/External + * + * + */ +#define CFG_SHORT_GI_40MHZ CFG_INI_BOOL( \ + "gShortGI40Mhz", \ + 1, \ + "Short Guard Interval for HT40") + +#define CFG_HT_CAP_INFO CFG_UINT( \ + "ht_cap_info", \ + 0, \ + 65535, \ + 364, \ + CFG_VALUE_OR_DEFAULT, \ + "HT cap info") + +#define CFG_HT_CAPS_ALL \ + CFG(CFG_HT_CAP_INFO) \ + CFG(CFG_TX_LDPC_ENABLE) \ + CFG(CFG_RX_LDPC_ENABLE) \ + CFG(CFG_TX_STBC_ENABLE) \ + CFG(CFG_RX_STBC_ENABLE) \ + CFG(CFG_SHORT_GI_20MHZ) \ + CFG(CFG_SHORT_GI_40MHZ) + +#endif /* __CFG_MLME_HT_CAPS_H */ diff --git a/mlme/dispatcher/inc/cfg_mlme_vht_caps.h b/mlme/dispatcher/inc/cfg_mlme_vht_caps.h new file mode 100644 index 0000000000..b61d3a8d58 --- /dev/null +++ b/mlme/dispatcher/inc/cfg_mlme_vht_caps.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2018 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/** + * DOC: This file contains centralized definitions of converged configuration. + */ + +#ifndef __CFG_MLME_VHT_CAPS_H +#define __CFG_MLME_VHT_CAPS_H + +#define CFG_VHT_CAPS_ALL + +#endif /* __CFG_MLME_HT_CAPS_H */ diff --git a/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 67b1e36141..73eea29825 100644 --- a/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -26,13 +26,78 @@ #include /** - * struct wlan_mlme_cfg -MLME config items - * @cfg: cfg items + * struct mlme_ht_capabilities_info - HT Capabilities Info + * @lsigTXOPProtection: L-SIG TXOP Protection Mechanism support + * @stbcControlFrame: STBC Control frame support + * @psmp: PSMP Support + * @dsssCckMode40MHz: To indicate use of DSSS/CCK in 40Mhz + * @maximalAMSDUsize: Maximum AMSDU Size - 0:3839 octes, 1:7935 octets + * @delayedBA: Support of Delayed Block Ack + * @rxSTBC: Rx STBC Support - 0:Not Supported, 1: 1SS, 2: 1,2SS, 3: 1,2,3SS + * @txSTBC: Tx STBC Support + * @shortGI40MHz: Short GI Support for HT40 + * @shortGI20MHz: Short GI support for HT20 + * @greenField: Support for HT Greenfield PPDUs + * @mimoPowerSave: SM Power Save Mode - 0:Static, 1:Dynamic, 3:Disabled, 2:Res + * @supportedChannelWidthSet: Supported Channel Width - 0:20Mhz, 1:20Mhz & 40Mhz + * @advCodingCap: Rx LDPC support + */ +#ifndef ANI_LITTLE_BIT_ENDIAN +struct mlme_ht_capabilities_info { + uint16_t lsigTXOPProtection:1; + uint16_t stbcControlFrame:1; + uint16_t psmp:1; + uint16_t dsssCckMode40MHz:1; + uint16_t maximalAMSDUsize:1; + uint16_t delayedBA:1; + uint16_t rxSTBC:2; + uint16_t txSTBC:1; + uint16_t shortGI40MHz:1; + uint16_t shortGI20MHz:1; + uint16_t greenField:1; + uint16_t mimoPowerSave:2; + uint16_t supportedChannelWidthSet:1; + uint16_t advCodingCap:1; +} qdf_packed; +#else +struct mlme_ht_capabilities_info { + uint16_t advCodingCap:1; + uint16_t supportedChannelWidthSet:1; + uint16_t mimoPowerSave:2; + uint16_t greenField:1; + uint16_t shortGI20MHz:1; + uint16_t shortGI40MHz:1; + uint16_t txSTBC:1; + uint16_t rxSTBC:2; + uint16_t delayedBA:1; + uint16_t maximalAMSDUsize:1; + uint16_t dsssCckMode40MHz:1; + uint16_t psmp:1; + uint16_t stbcControlFrame:1; + uint16_t lsigTXOPProtection:1; +} qdf_packed; +#endif + +/** + * struct wlan_mlme_ht_caps - HT Capabilities related config items + * @ht_cap_info: HT capabilities Info Structure + */ +struct wlan_mlme_ht_caps { + struct mlme_ht_capabilities_info ht_cap_info; +}; + +struct wlan_mlme_vht_caps { + /* VHT related configs */ +}; + +/** + * struct wlan_mlme_cfg - MLME config items + * @ht_cfg: HT related CFG Items + * @vht_cfg: VHT related CFG Items */ struct wlan_mlme_cfg { - uint8_t test; - /* VHT config */ - /* HT config */ + struct wlan_mlme_ht_caps ht_caps; + struct wlan_mlme_vht_caps vht_caps; }; #endif diff --git a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h new file mode 100644 index 0000000000..f345467698 --- /dev/null +++ b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2018 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +/** + * DOC: declare internal API related to the mlme component + */ + +#ifndef _WLAN_MLME_UCFG_API_H_ +#define _WLAN_MLME_UCFG_API_H_ + +#include +#include +#include +#include + +/** + * mlme_psoc_open() - MLME component Open + * @psoc: pointer to psoc object + * + * Open the MLME component and initialize the MLME strucutre + * + * Return: QDF Status + */ +QDF_STATUS mlme_psoc_open(struct wlan_objmgr_psoc *psoc); + +/** + * mlme_psoc_close() - MLME component close + * @psoc: pointer to psoc object + * + * Close the MLME component and clear the MLME structures + * + * Return: None + */ +void mlme_psoc_close(struct wlan_objmgr_psoc *psoc); + +/** + * wlan_mlme_get_ht_cap_info() - Get the HT cap info config + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS wlan_mlme_get_ht_cap_info(struct wlan_objmgr_psoc *psoc, + struct mlme_ht_capabilities_info + *ht_cap_info); + +/** + * wlan_mlme_set_ht_cap_info() - Set the HT cap info config + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * Return: QDF Status + */ +QDF_STATUS wlan_mlme_set_ht_cap_info(struct wlan_objmgr_psoc *psoc, + struct mlme_ht_capabilities_info + ht_cap_info); + +/** + * ucfg_mlme_get_ht_cap_info() - Get the HT cap info config + * @psoc: pointer to psoc object + * @value: pointer to the value which will be filled for the caller + * + * Inline UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +static inline +QDF_STATUS ucfg_mlme_get_ht_cap_info(struct wlan_objmgr_psoc *psoc, + struct mlme_ht_capabilities_info + *ht_cap_info) +{ + return wlan_mlme_get_ht_cap_info(psoc, ht_cap_info); +} + +/** + * ucfg_mlme_set_ht_cap_info() - Set the HT cap info config + * @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_ht_cap_info(struct wlan_objmgr_psoc *psoc, + struct mlme_ht_capabilities_info + ht_cap_info) +{ + return wlan_mlme_set_ht_cap_info(psoc, ht_cap_info); +} +#endif /* _WLAN_MLME_UCFG_API_H_ */ diff --git a/mlme/dispatcher/src/wlan_mlme_ucfg_api.c b/mlme/dispatcher/src/wlan_mlme_ucfg_api.c new file mode 100644 index 0000000000..385ac4eaf8 --- /dev/null +++ b/mlme/dispatcher/src/wlan_mlme_ucfg_api.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2018 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +/** + * DOC: define internal APIs related to the mlme component + */ + +#include "cfg_ucfg_api.h" +#include "wlan_mlme_main.h" +#include "wlan_mlme_ucfg_api.h" + +QDF_STATUS mlme_psoc_open(struct wlan_objmgr_psoc *psoc) +{ + QDF_STATUS status; + + status = mlme_cfg_on_psoc_enable(psoc); + if (!QDF_IS_STATUS_SUCCESS(status)) + mlme_err("Failed to initialize MLME CFG"); + + return status; +} + +void mlme_psoc_close(struct wlan_objmgr_psoc *psoc) +{ + /* Clear the MLME CFG Structure */ +} + +QDF_STATUS wlan_mlme_get_ht_cap_info(struct wlan_objmgr_psoc *psoc, + struct mlme_ht_capabilities_info + *ht_cap_info) +{ + 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; + } + + *ht_cap_info = mlme_obj->cfg.ht_caps.ht_cap_info; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wlan_mlme_set_ht_cap_info(struct wlan_objmgr_psoc *psoc, + struct mlme_ht_capabilities_info + ht_cap_info) +{ + 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.ht_caps.ht_cap_info = ht_cap_info; + + return QDF_STATUS_SUCCESS; +}