From 21c58cb8c3e13c9c682501c690d0e19d14116146 Mon Sep 17 00:00:00 2001 From: Vignesh Viswanathan Date: Thu, 24 May 2018 15:53:58 +0530 Subject: [PATCH] qcacld-3.0: Add MLME CFG items and APIs Add the basic infra for MLME CFG items and the APIs to be used from other components. Change-Id: I39654de8f7266089d574b85437a19e8d21f91249 CRs-Fixed: 2293825 --- Kbuild | 3 +- components/cfg/cfg_all.h | 7 +- components/mlme/core/inc/wlan_mlme_main.h | 30 ++- components/mlme/core/src/wlan_mlme_main.c | 55 ++++-- components/mlme/dispatcher/inc/cfg_mlme.h | 34 ++++ .../mlme/dispatcher/inc/cfg_mlme_ht_caps.h | 185 ++++++++++++++++++ .../mlme/dispatcher/inc/cfg_mlme_vht_caps.h | 28 +++ .../dispatcher/inc/wlan_mlme_public_struct.h | 75 ++++++- .../mlme/dispatcher/inc/wlan_mlme_ucfg_api.h | 105 ++++++++++ .../mlme/dispatcher/src/wlan_mlme_ucfg_api.c | 74 +++++++ core/cds/src/cds_api.c | 8 +- core/hdd/inc/wlan_hdd_cfg.h | 25 --- core/hdd/inc/wlan_hdd_main.h | 22 +++ core/hdd/src/wlan_hdd_cfg.c | 77 ++------ core/hdd/src/wlan_hdd_cfg80211.c | 41 ++-- core/hdd/src/wlan_hdd_main.c | 73 ++++--- core/hdd/src/wlan_hdd_wext.c | 50 ++--- core/mac/inc/ani_global.h | 2 + core/mac/inc/sir_mac_prot_def.h | 35 ---- core/mac/src/pe/lim/lim_api.c | 25 +-- .../src/pe/lim/lim_process_message_queue.c | 28 ++- core/mac/src/pe/lim/lim_process_tdls.c | 3 +- core/mac/src/pe/lim/lim_utils.c | 23 ++- .../sys/legacy/src/system/src/mac_init_api.c | 10 + .../src/sys/legacy/src/utils/src/parser_api.c | 43 ++-- core/sme/src/common/sme_api.c | 13 +- core/sme/src/csr/csr_api_roam.c | 25 +-- core/wma/src/wma_dev_if.c | 24 +-- core/wma/src/wma_scan_roam.c | 10 +- 29 files changed, 782 insertions(+), 351 deletions(-) create mode 100644 components/mlme/dispatcher/inc/cfg_mlme.h create mode 100644 components/mlme/dispatcher/inc/cfg_mlme_ht_caps.h create mode 100644 components/mlme/dispatcher/inc/cfg_mlme_vht_caps.h create mode 100644 components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h create mode 100644 components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c diff --git a/Kbuild b/Kbuild index 31efed7aab..2d937f0d47 100755 --- a/Kbuild +++ b/Kbuild @@ -820,7 +820,8 @@ MLME_DIR := components/mlme MLME_INC := -I$(WLAN_ROOT)/$(MLME_DIR)/core/inc \ -I$(WLAN_ROOT)/$(MLME_DIR)/dispatcher/inc -MLME_OBJS := $(MLME_DIR)/core/src/wlan_mlme_main.o +MLME_OBJS := $(MLME_DIR)/core/src/wlan_mlme_main.o \ + $(MLME_DIR)/dispatcher/src/wlan_mlme_ucfg_api.o ########## ACTION OUI ########## diff --git a/components/cfg/cfg_all.h b/components/cfg/cfg_all.h index ffe29c9fdc..d86c3a452a 100644 --- a/components/cfg/cfg_all.h +++ b/components/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/components/mlme/core/inc/wlan_mlme_main.h b/components/mlme/core/inc/wlan_mlme_main.h index 812f634d0c..46f56ff3de 100644 --- a/components/mlme/core/inc/wlan_mlme_main.h +++ b/components/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/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 6e160085f1..80a194c7e3 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/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/components/mlme/dispatcher/inc/cfg_mlme.h b/components/mlme/dispatcher/inc/cfg_mlme.h new file mode 100644 index 0000000000..2bd5c94ee8 --- /dev/null +++ b/components/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/components/mlme/dispatcher/inc/cfg_mlme_ht_caps.h b/components/mlme/dispatcher/inc/cfg_mlme_ht_caps.h new file mode 100644 index 0000000000..a8a1cdf6e6 --- /dev/null +++ b/components/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/components/mlme/dispatcher/inc/cfg_mlme_vht_caps.h b/components/mlme/dispatcher/inc/cfg_mlme_vht_caps.h new file mode 100644 index 0000000000..b61d3a8d58 --- /dev/null +++ b/components/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/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 67b1e36141..73eea29825 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/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/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h new file mode 100644 index 0000000000..f345467698 --- /dev/null +++ b/components/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/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c new file mode 100644 index 0000000000..385ac4eaf8 --- /dev/null +++ b/components/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; +} diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c index c50460cbed..f615c94b23 100644 --- a/core/cds/src/cds_api.c +++ b/core/cds/src/cds_api.c @@ -680,7 +680,13 @@ QDF_STATUS cds_open(struct wlan_objmgr_psoc *psoc) cds_register_all_modules(); - return dispatcher_psoc_open(psoc); + status = dispatcher_psoc_open(psoc); + + if (QDF_IS_STATUS_SUCCESS(status)) + return status; + + cds_alert("Failed to open PSOC Components"); + QDF_ASSERT(0); err_mac_close: mac_close(mac_handle); diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 5a33b56305..71df56182e 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -345,29 +345,6 @@ enum hdd_dot11_mode { #define CFG_CHANNEL_BONDING_MODE_MAX WNI_CFG_CHANNEL_BONDING_MODE_STAMAX #define CFG_CHANNEL_BONDING_MODE_DEFAULT WNI_CFG_CHANNEL_BONDING_MODE_STADEF -/* - * - * 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_NAME "gShortGI20Mhz" -#define CFG_SHORT_GI_20MHZ_MIN WNI_CFG_SHORT_GI_20MHZ_STAMIN -#define CFG_SHORT_GI_20MHZ_MAX WNI_CFG_SHORT_GI_20MHZ_STAMAX -#define CFG_SHORT_GI_20MHZ_DEFAULT WNI_CFG_SHORT_GI_20MHZ_STADEF - /* * * gScanResultAgeCount - Set scan result age count @@ -5771,7 +5748,6 @@ enum hdd_link_speed_rpt_type { * * */ - #define CFG_SHORT_GI_40MHZ_NAME "gShortGI40Mhz" #define CFG_SHORT_GI_40MHZ_MIN 0 #define CFG_SHORT_GI_40MHZ_MAX 1 @@ -13969,7 +13945,6 @@ struct hdd_config { bool override_ht20_40_24g; uint32_t nChannelBondingMode5GHz; uint32_t MaxRxAmpduFactor; - uint32_t ShortGI20MhzEnable; uint32_t ScanResultAgeCount; uint8_t nRssiCatGap; bool fIsShortPreamble; diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 8be54edb5c..c01554f7fb 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -3217,6 +3217,28 @@ uint32_t hdd_limit_max_per_index_score(uint32_t per_index_score); struct hdd_station_info *hdd_get_stainfo(struct hdd_station_info *astainfo, struct qdf_mac_addr mac_addr); +/** + * hdd_component_psoc_open() - Open the legacy components + * @psoc: Pointer to psoc object + * + * This function opens the legacy components and initializes the + * component's private objects. + * + * Return: QDF_STATUS + */ +QDF_STATUS hdd_component_psoc_open(struct wlan_objmgr_psoc *psoc); + +/** + * hdd_component_psoc_close() - Close the legacy components + * @psoc: Pointer to psoc object + * + * This function closes the legacy components and resets the + * component's private objects. + * + * Return: None + */ +void hdd_component_psoc_close(struct wlan_objmgr_psoc *psoc); + /** * hdd_component_psoc_enable() - Trigger psoc enable for CLD Components * diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index cae7ec159d..b3c231de71 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -42,6 +42,8 @@ #include "wlan_hdd_green_ap.h" #include "wlan_hdd_green_ap_cfg.h" #include "wlan_hdd_twt.h" +#include "wlan_mlme_ucfg_api.h" +#include "wlan_mlme_public_struct.h" static void cb_notify_set_roam_prefer5_g_hz(struct hdd_context *hdd_ctx, @@ -520,13 +522,6 @@ struct reg_table_entry g_registry_table[] = { CFG_HT_MPDU_DENSITY_MIN, CFG_HT_MPDU_DENSITY_MAX), - REG_VARIABLE(CFG_SHORT_GI_20MHZ_NAME, WLAN_PARAM_Integer, - struct hdd_config, ShortGI20MhzEnable, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_SHORT_GI_20MHZ_DEFAULT, - CFG_SHORT_GI_20MHZ_MIN, - CFG_SHORT_GI_20MHZ_MAX), - REG_VARIABLE(CFG_SCAN_RESULT_AGE_COUNT_NAME, WLAN_PARAM_Integer, struct hdd_config, ScanResultAgeCount, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, @@ -7737,45 +7732,6 @@ QDF_STATUS hdd_hex_string_to_u16_array(char *str, return QDF_STATUS_SUCCESS; } -/** - * hdd_update_ht_cap_in_cfg() - to update HT cap in global CFG - * @hdd_ctx: pointer to hdd context - * - * This API will update the HT config in CFG after taking intersection - * of INI and firmware capabilities provided reading CFG - * - * Return: true or false - */ -static bool hdd_update_ht_cap_in_cfg(struct hdd_context *hdd_ctx) -{ - uint32_t val32; - uint16_t val16; - bool status = true; - tSirMacHTCapabilityInfo *ht_cap_info; - - if (sme_cfg_get_int(hdd_ctx->mac_handle, WNI_CFG_HT_CAP_INFO, - &val32) == - QDF_STATUS_E_FAILURE) { - status = false; - hdd_err("Could not get WNI_CFG_HT_CAP_INFO"); - } - val16 = (uint16_t) val32; - ht_cap_info = (tSirMacHTCapabilityInfo *) &val16; - ht_cap_info->advCodingCap &= hdd_ctx->config->enable_rx_ldpc; - ht_cap_info->rxSTBC = QDF_MIN(ht_cap_info->rxSTBC, - hdd_ctx->config->enableRxSTBC); - ht_cap_info->txSTBC &= hdd_ctx->config->enableTxSTBC; - ht_cap_info->shortGI20MHz &= hdd_ctx->config->ShortGI20MhzEnable; - ht_cap_info->shortGI40MHz &= hdd_ctx->config->ShortGI40MhzEnable; - val32 = val16; - if (sme_cfg_set_int(hdd_ctx->mac_handle, WNI_CFG_HT_CAP_INFO, val32) == - QDF_STATUS_E_FAILURE) { - status = false; - hdd_err("Could not set WNI_CFG_HT_CAP_INFO"); - } - return status; -} - /** * hdd_update_vht_cap_in_cfg() - to update VHT cap in global CFG * @hdd_ctx: pointer to hdd context @@ -7929,10 +7885,6 @@ bool hdd_update_config_cfg(struct hdd_context *hdd_ctx) * During the initialization both 2G and 5G capabilities should be same. * So read 5G HT capablity and update 2G and 5G capablities. */ - if (!hdd_update_ht_cap_in_cfg(hdd_ctx)) { - status = false; - hdd_err("Couldn't set HT CAP in cfg"); - } if (!hdd_update_vht_cap_in_cfg(hdd_ctx)) { status = false; @@ -9055,11 +9007,11 @@ QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss) uint32_t temp = 0; uint32_t rx_supp_data_rate, tx_supp_data_rate; bool status = true; - tSirMacHTCapabilityInfo *ht_cap_info; + QDF_STATUS qdf_status; + struct mlme_ht_capabilities_info ht_cap_info; uint8_t mcs_set[SIZE_OF_SUPPORTED_MCS_SET] = {0}; uint8_t mcs_set_temp[SIZE_OF_SUPPORTED_MCS_SET]; uint32_t val, val32; - uint16_t val16; uint8_t enable2x2; mac_handle_t mac_handle; @@ -9109,21 +9061,24 @@ QDF_STATUS hdd_update_nss(struct hdd_adapter *adapter, uint8_t nss) hdd_err("Could not pass on WNI_CFG_VHT_TX_HIGHEST_SUPPORTED_DATA_RATE to CFG"); } - sme_cfg_get_int(mac_handle, WNI_CFG_HT_CAP_INFO, &temp); - val16 = (uint16_t)temp; - ht_cap_info = (tSirMacHTCapabilityInfo *)&val16; + qdf_status = ucfg_mlme_get_ht_cap_info(hdd_ctx->hdd_psoc, &ht_cap_info); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Failed to get HT Cap info"); + status = false; + } + if (!(hdd_ctx->ht_tx_stbc_supported && hdd_config->enable2x2)) { - ht_cap_info->txSTBC = 0; + ht_cap_info.txSTBC = 0; } else { sme_cfg_get_int(mac_handle, WNI_CFG_VHT_TXSTBC, &val32); hdd_debug("STBC %d", val32); - ht_cap_info->txSTBC = val32; + ht_cap_info.txSTBC = val32; } - temp = val16; - if (sme_cfg_set_int(mac_handle, WNI_CFG_HT_CAP_INFO, - temp) == QDF_STATUS_E_FAILURE) { + + qdf_status = ucfg_mlme_set_ht_cap_info(hdd_ctx->hdd_psoc, ht_cap_info); + if (!QDF_IS_STATUS_SUCCESS(status)) { status = false; - hdd_err("Could not pass on WNI_CFG_HT_CAP_INFO to CFG"); + hdd_err("Could not pass on HT_CAP_INFO to CFG"); } sme_cfg_get_int(mac_handle, WNI_CFG_VHT_BASIC_MCS_SET, &temp); diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index cd9ec2c3ed..4de7b71a11 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -117,6 +117,8 @@ #include #include #include +#include "wlan_mlme_ucfg_api.h" +#include "wlan_mlme_public_struct.h" #define g_mode_rates_size (12) #define a_mode_rates_size (8) @@ -12066,18 +12068,6 @@ int wlan_hdd_cfg80211_init(struct device *dev, wiphy->iface_combinations = wlan_hdd_iface_combination; } - /* Before registering we need to update the ht capabilitied based - * on ini values - */ - if (!pCfg->ShortGI20MhzEnable) { - wlan_hdd_band_2_4_ghz.ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_20; - wlan_hdd_band_5_ghz.ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_20; - } - - if (!pCfg->ShortGI40MhzEnable) - wlan_hdd_band_5_ghz.ht_cap.cap &= - ~IEEE80211_HT_CAP_SGI_40; - if (!pCfg->nChannelBondingMode5GHz) wlan_hdd_band_5_ghz.ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; @@ -12277,23 +12267,16 @@ void wlan_hdd_cfg80211_deinit(struct wiphy *wiphy) * * Return: void */ -static void wlan_hdd_update_band_cap(struct hdd_context *hdd_ctx) +static void wlan_hdd_update_ht_cap(struct hdd_context *hdd_ctx) { - uint32_t val32; - uint16_t val16; - tSirMacHTCapabilityInfo *ht_cap_info; + struct mlme_ht_capabilities_info ht_cap_info = {0}; QDF_STATUS status; - mac_handle_t mac_handle = hdd_ctx->mac_handle; - status = sme_cfg_get_int(mac_handle, WNI_CFG_HT_CAP_INFO, &val32); - if (QDF_STATUS_SUCCESS != status) { + status = ucfg_mlme_get_ht_cap_info(hdd_ctx->hdd_psoc, &ht_cap_info); + if (QDF_STATUS_SUCCESS != status) hdd_err("could not get HT capability info"); - val32 = 0; - } - val16 = (uint16_t)val32; - ht_cap_info = (tSirMacHTCapabilityInfo *)&val16; - if (ht_cap_info->txSTBC == true) { + if (ht_cap_info.txSTBC) { if (NULL != hdd_ctx->wiphy->bands[HDD_NL80211_BAND_2GHZ]) hdd_ctx->wiphy->bands[HDD_NL80211_BAND_2GHZ]->ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC; @@ -12310,6 +12293,14 @@ static void wlan_hdd_update_band_cap(struct hdd_context *hdd_ctx) vht_cap.vht_supported = 0; hdd_ctx->wiphy->bands[HDD_NL80211_BAND_5GHZ]->vht_cap.cap = 0; } + + if (!ht_cap_info.shortGI20MHz) { + wlan_hdd_band_2_4_ghz.ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_20; + wlan_hdd_band_5_ghz.ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_20; + } + + if (!ht_cap_info.shortGI40MHz) + wlan_hdd_band_5_ghz.ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40; } /* @@ -12322,7 +12313,7 @@ void wlan_hdd_update_wiphy(struct hdd_context *hdd_ctx) { hdd_ctx->wiphy->max_ap_assoc_sta = hdd_ctx->config->maxNumberOfPeers; - wlan_hdd_update_band_cap(hdd_ctx); + wlan_hdd_update_ht_cap(hdd_ctx); } /** diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index f99b78b198..0661fc4835 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -139,7 +139,8 @@ #include "wlan_p2p_cfg_api.h" #include "wlan_tdls_cfg_api.h" #include - +#include "wlan_mlme_ucfg_api.h" +#include "wlan_mlme_public_struct.h" #ifdef CNSS_GENL #include #endif @@ -299,6 +300,7 @@ static const struct category_info cinfo[MAX_SUPPORTED_CATEGORY] = { [QDF_MODULE_ID_IPA] = {QDF_TRACE_LEVEL_ALL}, [QDF_MODULE_ID_ACTION_OUI] = {QDF_TRACE_LEVEL_ALL}, [QDF_MODULE_ID_CONFIG] = {QDF_TRACE_LEVEL_ALL}, + [QDF_MODULE_ID_MLME] = {QDF_TRACE_LEVEL_ALL}, }; struct notifier_block hdd_netdev_notifier; @@ -1333,19 +1335,11 @@ static void hdd_update_tgt_ht_cap(struct hdd_context *hdd_ctx, struct wma_tgt_ht_cap *cfg) { QDF_STATUS status; - uint32_t value, val32; - uint16_t val16; + uint32_t value; struct hdd_config *pconfig = hdd_ctx->config; - tSirMacHTCapabilityInfo *phtCapInfo; + struct mlme_ht_capabilities_info ht_cap_info; uint8_t mcs_set[SIZE_OF_SUPPORTED_MCS_SET]; - uint8_t enable_tx_stbc; - mac_handle_t mac_handle; - - /* check and update RX STBC */ - if (pconfig->enableRxSTBC && !cfg->ht_rx_stbc) - pconfig->enableRxSTBC = cfg->ht_rx_stbc; - - mac_handle = hdd_ctx->mac_handle; + mac_handle_t mac_handle = hdd_ctx->mac_handle; /* get the MPDU density */ status = sme_cfg_get_int(mac_handle, WNI_CFG_MPDU_DENSITY, &value); @@ -1369,33 +1363,33 @@ static void hdd_update_tgt_ht_cap(struct hdd_context *hdd_ctx, } /* get the HT capability info */ - status = sme_cfg_get_int(mac_handle, WNI_CFG_HT_CAP_INFO, &val32); + status = ucfg_mlme_get_ht_cap_info(hdd_ctx->hdd_psoc, &ht_cap_info); if (QDF_STATUS_SUCCESS != status) { hdd_err("could not get HT capability info"); return; } - val16 = (uint16_t) val32; - phtCapInfo = (tSirMacHTCapabilityInfo *) &val16; + + /* check and update RX STBC */ + if (ht_cap_info.rxSTBC && !cfg->ht_rx_stbc) + ht_cap_info.rxSTBC = cfg->ht_rx_stbc; /* Set the LDPC capability */ - phtCapInfo->advCodingCap = cfg->ht_rx_ldpc; + ht_cap_info.advCodingCap = cfg->ht_rx_ldpc; - if (pconfig->ShortGI20MhzEnable && !cfg->ht_sgi_20) - pconfig->ShortGI20MhzEnable = cfg->ht_sgi_20; + if (ht_cap_info.shortGI20MHz && !cfg->ht_sgi_20) + ht_cap_info.shortGI20MHz = cfg->ht_sgi_20; - if (pconfig->ShortGI40MhzEnable && !cfg->ht_sgi_40) - pconfig->ShortGI40MhzEnable = cfg->ht_sgi_40; + if (ht_cap_info.shortGI40MHz && !cfg->ht_sgi_40) + ht_cap_info.shortGI40MHz = cfg->ht_sgi_40; hdd_ctx->num_rf_chains = cfg->num_rf_chains; hdd_ctx->ht_tx_stbc_supported = cfg->ht_tx_stbc; - enable_tx_stbc = pconfig->enableTxSTBC; - if (pconfig->enable2x2 && (cfg->num_rf_chains == 2)) { pconfig->enable2x2 = 1; } else { pconfig->enable2x2 = 0; - enable_tx_stbc = 0; + ht_cap_info.txSTBC = 0; /* 1x1 */ /* Update Rx Highest Long GI data Rate */ @@ -1416,11 +1410,9 @@ static void hdd_update_tgt_ht_cap(struct hdd_context *hdd_ctx, } } if (!(cfg->ht_tx_stbc && pconfig->enable2x2)) - enable_tx_stbc = 0; - phtCapInfo->txSTBC = enable_tx_stbc; + ht_cap_info.txSTBC = 0; - val32 = val16; - status = sme_cfg_set_int(mac_handle, WNI_CFG_HT_CAP_INFO, val32); + status = ucfg_mlme_set_ht_cap_info(hdd_ctx->hdd_psoc, ht_cap_info); if (status != QDF_STATUS_SUCCESS) hdd_err("could not set HT capability to CCM"); #define WLAN_HDD_RX_MCS_ALL_NSTREAM_RATES 0xff @@ -2896,11 +2888,19 @@ int hdd_wlan_start_modules(struct hdd_context *hdd_ctx, bool reinit) hdd_update_cds_ac_specs_params(hdd_ctx); + status = hdd_component_psoc_open(hdd_ctx->hdd_psoc); + if (QDF_IS_STATUS_ERROR(status)) { + hdd_err("Failed to Open legacy components; status: %d", + status); + ret = qdf_status_to_os_return(status); + goto deinit_config; + } + status = cds_open(hdd_ctx->hdd_psoc); if (QDF_IS_STATUS_ERROR(status)) { hdd_err("Failed to Open CDS; status: %d", status); ret = qdf_status_to_os_return(status); - goto deinit_config; + goto hdd_psoc_close; } if (hdd_ctx->config->rx_thread_affinity_mask) @@ -3013,6 +3013,9 @@ close: cds_close(hdd_ctx->hdd_psoc); +hdd_psoc_close: + hdd_component_psoc_close(hdd_ctx->hdd_psoc); + deinit_config: cds_deinit_ini_config(); @@ -8818,6 +8821,7 @@ static void hdd_set_trace_level_for_each(struct hdd_context *hdd_ctx) hdd_ctx->config->qdf_trace_enable_regulatory); hdd_qdf_trace_enable(QDF_MODULE_ID_CP_STATS, hdd_ctx->config->qdf_trace_enable_cp_stats); + hdd_qdf_trace_enable(QDF_MODULE_ID_MLME, 0xffff); hdd_cfg_print(hdd_ctx); } @@ -10938,6 +10942,7 @@ int hdd_wlan_stop_modules(struct hdd_context *hdd_ctx, bool ftm_mode) QDF_ASSERT(0); } + hdd_component_psoc_close(hdd_ctx->hdd_psoc); dispatcher_pdev_close(hdd_ctx->hdd_pdev); ret = hdd_objmgr_release_and_destroy_pdev(hdd_ctx); if (ret) { @@ -11169,6 +11174,7 @@ int hdd_wlan_startup(struct device *dev) { QDF_STATUS status; struct hdd_context *hdd_ctx; + struct wlan_objmgr_psoc *psoc; int ret; bool rtnl_held; mac_handle_t mac_handle; @@ -11189,6 +11195,7 @@ int hdd_wlan_startup(struct device *dev) } hdd_action_oui_config(hdd_ctx); + psoc = hdd_ctx->hdd_psoc; qdf_nbuf_init_replenish_timer(); @@ -12486,6 +12493,16 @@ static void component_deinit(void) mlme_deinit(); } +QDF_STATUS hdd_component_psoc_open(struct wlan_objmgr_psoc *psoc) +{ + return mlme_psoc_open(psoc); +} + +void hdd_component_psoc_close(struct wlan_objmgr_psoc *psoc) +{ + mlme_psoc_close(psoc); +} + void hdd_component_psoc_enable(struct wlan_objmgr_psoc *psoc) { ocb_psoc_enable(psoc); diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 4982eb53ed..6c746e0983 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -98,6 +98,8 @@ #include "wlan_reg_ucfg_api.h" #include "wlan_hdd_packet_filter_api.h" #include "wlan_cp_stats_mc_ucfg_api.h" +#include "wlan_mlme_ucfg_api.h" +#include "wlan_mlme_public_struct.h" #define HDD_FINISH_ULA_TIME_OUT 800 #define HDD_SET_MCBC_FILTERS_TO_FW 1 @@ -3389,13 +3391,9 @@ int hdd_set_ldpc(struct hdd_adapter *adapter, int value) mac_handle_t mac_handle = adapter->hdd_ctx->mac_handle; int ret; QDF_STATUS status; - uint32_t cfg_value; struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); struct hdd_config *config = hdd_ctx->config; - union { - uint16_t cfg_value16; - tSirMacHTCapabilityInfo ht_cap_info; - } u; + struct mlme_ht_capabilities_info ht_cap_info; hdd_debug("%d", value); if (value) { @@ -3408,16 +3406,14 @@ int hdd_set_ldpc(struct hdd_adapter *adapter, int value) hdd_err("LDCP is already disabled"); return 0; } - status = sme_cfg_get_int(mac_handle, WNI_CFG_HT_CAP_INFO, &cfg_value); + status = ucfg_mlme_get_ht_cap_info(hdd_ctx->hdd_psoc, &ht_cap_info); if (QDF_STATUS_SUCCESS != status) { hdd_err("Failed to get HT capability info"); return -EIO; } - u.cfg_value16 = cfg_value & 0xFFFF; - u.ht_cap_info.advCodingCap = value; - status = sme_cfg_set_int(mac_handle, WNI_CFG_HT_CAP_INFO, - u.cfg_value16); + ht_cap_info.advCodingCap = value; + status = ucfg_mlme_set_ht_cap_info(hdd_ctx->hdd_psoc, ht_cap_info); if (QDF_STATUS_SUCCESS != status) { hdd_err("Failed to set HT capability info"); return -EIO; @@ -3476,26 +3472,21 @@ int hdd_get_tx_stbc(struct hdd_adapter *adapter, int *value) int hdd_set_tx_stbc(struct hdd_adapter *adapter, int value) { mac_handle_t mac_handle = adapter->hdd_ctx->mac_handle; + struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); int ret; + QDF_STATUS status; + struct mlme_ht_capabilities_info ht_cap_info; hdd_debug("%d", value); if (value) { /* make sure HT capabilities allow this */ - QDF_STATUS status; - uint32_t cfg_value; - union { - uint16_t cfg_value16; - tSirMacHTCapabilityInfo ht_cap_info; - } u; - - status = sme_cfg_get_int(mac_handle, WNI_CFG_HT_CAP_INFO, - &cfg_value); + status = ucfg_mlme_get_ht_cap_info(hdd_ctx->hdd_psoc, + &ht_cap_info); if (QDF_STATUS_SUCCESS != status) { hdd_err("Failed to get HT capability info"); return -EIO; } - u.cfg_value16 = cfg_value & 0xFFFF; - if (!u.ht_cap_info.txSTBC) { + if (!ht_cap_info.txSTBC) { hdd_err("TX STBC not supported"); return -EINVAL; } @@ -3547,26 +3538,21 @@ int hdd_get_rx_stbc(struct hdd_adapter *adapter, int *value) int hdd_set_rx_stbc(struct hdd_adapter *adapter, int value) { mac_handle_t mac_handle = adapter->hdd_ctx->mac_handle; + struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); int ret; + QDF_STATUS status; + struct mlme_ht_capabilities_info ht_cap_info; hdd_debug("%d", value); if (value) { /* make sure HT capabilities allow this */ - QDF_STATUS status; - uint32_t cfg_value; - union { - uint16_t cfg_value16; - tSirMacHTCapabilityInfo ht_cap_info; - } u; - - status = sme_cfg_get_int(mac_handle, WNI_CFG_HT_CAP_INFO, - &cfg_value); + status = ucfg_mlme_get_ht_cap_info(hdd_ctx->hdd_psoc, + &ht_cap_info); if (QDF_STATUS_SUCCESS != status) { hdd_err("Failed to get HT capability info"); return -EIO; } - u.cfg_value16 = cfg_value & 0xFFFF; - if (!u.ht_cap_info.rxSTBC) { + if (!ht_cap_info.rxSTBC) { hdd_warn("RX STBC not supported"); return -EINVAL; } diff --git a/core/mac/inc/ani_global.h b/core/mac/inc/ani_global.h index e1e648f5c4..f2adc553b2 100644 --- a/core/mac/inc/ani_global.h +++ b/core/mac/inc/ani_global.h @@ -42,6 +42,7 @@ #include #include "wlan_objmgr_psoc_obj.h" +#include "wlan_mlme_public_struct.h" /** * MAC_CONTEXT() - Convert an opaque mac handle into a mac context @@ -847,6 +848,7 @@ typedef struct sAniSirGlobal { enum qdf_driver_type gDriverType; tAniSirCfg cfg; + struct wlan_mlme_cfg *mlme_cfg; tAniSirLim lim; tAniSirSch sch; tAniSirSys sys; diff --git a/core/mac/inc/sir_mac_prot_def.h b/core/mac/inc/sir_mac_prot_def.h index d19b49445a..41751824b9 100644 --- a/core/mac/inc/sir_mac_prot_def.h +++ b/core/mac/inc/sir_mac_prot_def.h @@ -1760,41 +1760,6 @@ typedef enum eHTCapability { eHT_PCO_PHASE } tHTCapability; -/* HT Capabilities Info */ -typedef struct sSirMacHTCapabilityInfo { -#ifndef ANI_LITTLE_BIT_ENDIAN - uint16_t lsigTXOPProtection:1; /* Dynamic state */ - uint16_t stbcControlFrame:1; /* Static via CFG */ - uint16_t psmp:1; /* Static via CFG */ - uint16_t dsssCckMode40MHz:1; /* Static via CFG */ - uint16_t maximalAMSDUsize:1; /* Static via CFG */ - uint16_t delayedBA:1; /* Static via CFG */ - uint16_t rxSTBC:2; /* Static via CFG */ - uint16_t txSTBC:1; /* Static via CFG */ - uint16_t shortGI40MHz:1; /* Static via CFG */ - uint16_t shortGI20MHz:1; /* Static via CFG */ - uint16_t greenField:1; /* Static via CFG */ - uint16_t mimoPowerSave:2; /* Dynamic state */ - uint16_t supportedChannelWidthSet:1; /* Static via CFG */ - uint16_t advCodingCap:1; /* Static via CFG */ -#else - 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; -#endif -} qdf_packed tSirMacHTCapabilityInfo; - /* HT Parameters Info */ typedef struct sSirMacHTParametersInfo { #ifndef ANI_LITTLE_BIT_ENDIAN diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c index a4910c24ab..3bd335dbf0 100644 --- a/core/mac/src/pe/lim/lim_api.c +++ b/core/mac/src/pe/lim/lim_api.c @@ -71,6 +71,8 @@ #include #include "wlan_utility.h" #include +#include "cfg_ucfg_api.h" +#include "wlan_mlme_public_struct.h" static void __lim_init_scan_vars(tpAniSirGlobal pMac) { @@ -267,8 +269,8 @@ static QDF_STATUS __lim_init_config(tpAniSirGlobal pMac) uint16_t val16; uint8_t val8; bool valb; + struct mlme_ht_capabilities_info *ht_cap_info; QDF_STATUS status; - tSirMacHTCapabilityInfo *pHTCapabilityInfo; tSirMacHTInfoField1 *pHTInfoField1; tSirMacHTParametersInfo *pAmpduParamInfo; @@ -285,30 +287,19 @@ static QDF_STATUS __lim_init_config(tpAniSirGlobal pMac) pMac->lim.gLimAssocStaLimit = val1; pMac->lim.gLimIbssStaLimit = val1; - if (wlan_cfg_get_int(pMac, WNI_CFG_HT_CAP_INFO, &val1) != QDF_STATUS_SUCCESS) { - pe_err("could not retrieve HT Cap CFG"); - return QDF_STATUS_E_FAILURE; - } + ht_cap_info = &pMac->mlme_cfg->ht_caps.ht_cap_info; if (wlan_cfg_get_int(pMac, WNI_CFG_CHANNEL_BONDING_MODE, &val2) != QDF_STATUS_SUCCESS) { pe_err("could not retrieve Channel Bonding CFG"); return QDF_STATUS_E_FAILURE; } - val16 = (uint16_t) val1; - pHTCapabilityInfo = (tSirMacHTCapabilityInfo *) &val16; /* channel bonding mode could be set to anything from 0 to 4(Titan had these */ /* modes But for Taurus we have only two modes: enable(>0) or disable(=0) */ - pHTCapabilityInfo->supportedChannelWidthSet = val2 ? - WNI_CFG_CHANNEL_BONDING_MODE_ENABLE : - WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; - if (cfg_set_int - (pMac, WNI_CFG_HT_CAP_INFO, *(uint16_t *) pHTCapabilityInfo) - != QDF_STATUS_SUCCESS) { - pe_err("could not update HT Cap Info CFG"); - return QDF_STATUS_E_FAILURE; - } + ht_cap_info->supportedChannelWidthSet = val2 ? + WNI_CFG_CHANNEL_BONDING_MODE_ENABLE : + WNI_CFG_CHANNEL_BONDING_MODE_DISABLE; if (wlan_cfg_get_int(pMac, WNI_CFG_HT_INFO_FIELD1, &val1) != QDF_STATUS_SUCCESS) { pe_err("could not retrieve HT INFO Field1 CFG"); @@ -318,7 +309,7 @@ static QDF_STATUS __lim_init_config(tpAniSirGlobal pMac) val8 = (uint8_t) val1; pHTInfoField1 = (tSirMacHTInfoField1 *) &val8; pHTInfoField1->recommendedTxWidthSet = - (uint8_t) pHTCapabilityInfo->supportedChannelWidthSet; + ht_cap_info->supportedChannelWidthSet; if (cfg_set_int(pMac, WNI_CFG_HT_INFO_FIELD1, *(uint8_t *) pHTInfoField1) != QDF_STATUS_SUCCESS) { pe_err("could not update HT Info Field"); diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c index 311c77b189..52826dbbb7 100644 --- a/core/mac/src/pe/lim/lim_process_message_queue.c +++ b/core/mac/src/pe/lim/lim_process_message_queue.c @@ -59,7 +59,7 @@ #include "lim_security_utils.h" #include "cds_ieee80211_common.h" #include - +#include "wlan_mlme_public_struct.h" void lim_log_session_states(tpAniSirGlobal pMac); static void lim_process_normal_hdd_msg(tpAniSirGlobal mac_ctx, @@ -2232,7 +2232,7 @@ void handle_ht_capabilityand_ht_info(struct sAniSirGlobal *pMac, tpPESession psessionEntry) { - tSirMacHTCapabilityInfo macHTCapabilityInfo; + struct mlme_ht_capabilities_info *ht_cap_info; tSirMacHTParametersInfo macHTParametersInfo; tSirMacHTInfoField1 macHTInfoField1; tSirMacHTInfoField2 macHTInfoField2; @@ -2240,25 +2240,19 @@ handle_ht_capabilityand_ht_info(struct sAniSirGlobal *pMac, uint32_t cfgValue; uint8_t *ptr; - if (wlan_cfg_get_int(pMac, WNI_CFG_HT_CAP_INFO, &cfgValue) != - QDF_STATUS_SUCCESS) { - pe_err("Fail to retrieve WNI_CFG_HT_CAP_INFO value"); - return; - } - ptr = (uint8_t *) &macHTCapabilityInfo; - *((uint16_t *) ptr) = (uint16_t) (cfgValue & 0xffff); + ht_cap_info = &pMac->mlme_cfg->ht_caps.ht_cap_info; pMac->lim.gHTLsigTXOPProtection = - (uint8_t) macHTCapabilityInfo.lsigTXOPProtection; + (uint8_t)ht_cap_info->lsigTXOPProtection; pMac->lim.gHTMIMOPSState = - (tSirMacHTMIMOPowerSaveState) macHTCapabilityInfo.mimoPowerSave; - pMac->lim.gHTGreenfield = (uint8_t) macHTCapabilityInfo.greenField; + (tSirMacHTMIMOPowerSaveState) ht_cap_info->mimoPowerSave; + pMac->lim.gHTGreenfield = (uint8_t)ht_cap_info->greenField; pMac->lim.gHTMaxAmsduLength = - (uint8_t) macHTCapabilityInfo.maximalAMSDUsize; - pMac->lim.gHTShortGI20Mhz = (uint8_t) macHTCapabilityInfo.shortGI20MHz; - pMac->lim.gHTShortGI40Mhz = (uint8_t) macHTCapabilityInfo.shortGI40MHz; - pMac->lim.gHTPSMPSupport = (uint8_t) macHTCapabilityInfo.psmp; + (uint8_t)ht_cap_info->maximalAMSDUsize; + pMac->lim.gHTShortGI20Mhz = (uint8_t)ht_cap_info->shortGI20MHz; + pMac->lim.gHTShortGI40Mhz = (uint8_t)ht_cap_info->shortGI40MHz; + pMac->lim.gHTPSMPSupport = (uint8_t)ht_cap_info->psmp; pMac->lim.gHTDsssCckRate40MHzSupport = - (uint8_t) macHTCapabilityInfo.dsssCckMode40MHz; + (uint8_t)ht_cap_info->dsssCckMode40MHz; if (wlan_cfg_get_int(pMac, WNI_CFG_HT_AMPDU_PARAMS, &cfgValue) != QDF_STATUS_SUCCESS) { diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c index 1019bdfce1..ef96bbdc9e 100644 --- a/core/mac/src/pe/lim/lim_process_tdls.c +++ b/core/mac/src/pe/lim/lim_process_tdls.c @@ -71,6 +71,7 @@ #include "cds_utils.h" #include "wlan_reg_services_api.h" #include "wlan_tdls_tgt_api.h" +#include "wlan_mlme_public_struct.h" /* define NO_PAD_TDLS_MIN_8023_SIZE to NOT padding: See CR#447630 There was IOT issue with cisco 1252 open mode, where it pads @@ -2035,7 +2036,7 @@ static QDF_STATUS lim_tdls_populate_dot11f_ht_caps(tpAniSirGlobal pMac, tSirMacHTParametersInfo *pHTParametersInfo; union { uint16_t nCfgValue16; - tSirMacHTCapabilityInfo htCapInfo; + struct mlme_ht_capabilities_info htCapInfo; tSirMacExtendedHTCapabilityInfo extHtCapInfo; } uHTCapabilityInfo; diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index ffe0f92de0..947193b4ad 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -52,6 +52,7 @@ #include "wma.h" #include "wlan_reg_services_api.h" #include "wlan_policy_mgr_api.h" +#include "wlan_mlme_public_struct.h" #ifdef WLAN_FEATURE_11AX_BSS_COLOR #include "wma_he.h" #endif @@ -2731,7 +2732,7 @@ uint8_t lim_get_ht_capability(tpAniSirGlobal pMac, uint8_t retVal = 0; uint8_t *ptr; uint32_t cfgValue; - tSirMacHTCapabilityInfo macHTCapabilityInfo = { 0 }; + struct mlme_ht_capabilities_info ht_cap_info = { 0 }; tSirMacExtendedHTCapabilityInfo macExtHTCapabilityInfo = { 0 }; tSirMacTxBFCapabilityInfo macTxBFCapabilityInfo = { 0 }; tSirMacASCapabilityInfo macASCapabilityInfo = { 0 }; @@ -2771,12 +2772,10 @@ uint8_t lim_get_ht_capability(tpAniSirGlobal pMac, } else { if (htCap < eHT_MAX_RX_AMPDU_FACTOR) { /* Get HT Capabilities */ - if (QDF_STATUS_SUCCESS != - wlan_cfg_get_int(pMac, - WNI_CFG_HT_CAP_INFO, - &cfgValue)) - cfgValue = 0; - ptr = (uint8_t *) &macHTCapabilityInfo; + cfgValue = *(uint32_t *) + &pMac->mlme_cfg->ht_caps. + ht_cap_info; + ptr = (uint8_t *)&ht_cap_info; /* CR 265282 MDM SoftAP 2.4PL: SoftAP boot up crash in 2.4 PL builds while same WLAN SU is working on 2.1 PL */ *ptr++ = cfgValue & 0xff; *ptr = (cfgValue >> 8) & 0xff; @@ -2791,7 +2790,7 @@ uint8_t lim_get_ht_capability(tpAniSirGlobal pMac, break; case eHT_STBC_CONTROL_FRAME: - retVal = (uint8_t) macHTCapabilityInfo.stbcControlFrame; + retVal = (uint8_t)ht_cap_info.stbcControlFrame; break; case eHT_PSMP: @@ -2803,7 +2802,7 @@ uint8_t lim_get_ht_capability(tpAniSirGlobal pMac, break; case eHT_MAX_AMSDU_LENGTH: - retVal = (uint8_t) macHTCapabilityInfo.maximalAMSDUsize; + retVal = (uint8_t)ht_cap_info.maximalAMSDUsize; break; case eHT_MAX_AMSDU_NUM: @@ -2820,16 +2819,16 @@ uint8_t lim_get_ht_capability(tpAniSirGlobal pMac, case eHT_SHORT_GI_40MHZ: retVal = (uint8_t) (psessionEntry->htConfig.ht_sgi40) ? - macHTCapabilityInfo.shortGI40MHz : 0; + ht_cap_info.shortGI40MHz : 0; break; case eHT_SHORT_GI_20MHZ: retVal = (uint8_t) (psessionEntry->htConfig.ht_sgi20) ? - macHTCapabilityInfo.shortGI20MHz : 0; + ht_cap_info.shortGI20MHz : 0; break; case eHT_GREENFIELD: - retVal = (uint8_t) macHTCapabilityInfo.greenField; + retVal = (uint8_t)ht_cap_info.greenField; break; case eHT_MIMO_POWER_SAVE: diff --git a/core/mac/src/sys/legacy/src/system/src/mac_init_api.c b/core/mac/src/sys/legacy/src/system/src/mac_init_api.c index 884bea712e..e41bb26297 100644 --- a/core/mac/src/sys/legacy/src/system/src/mac_init_api.c +++ b/core/mac/src/sys/legacy/src/system/src/mac_init_api.c @@ -34,6 +34,7 @@ #include "sir_types.h" #include "sys_entry_func.h" #include "mac_init_api.h" +#include "wlan_mlme_main.h" #ifdef TRACE_RECORD #include "mac_trace.h" @@ -112,6 +113,7 @@ QDF_STATUS mac_open(struct wlan_objmgr_psoc *psoc, tHalHandle *pHalHandle, { tpAniSirGlobal p_mac; QDF_STATUS status; + struct wlan_mlme_psoc_obj *mlme_obj; if (pHalHandle == NULL) return QDF_STATUS_E_FAILURE; @@ -139,6 +141,13 @@ QDF_STATUS mac_open(struct wlan_objmgr_psoc *psoc, tHalHandle *pHalHandle, } p_mac->psoc = psoc; + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + pe_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + p_mac->mlme_cfg = &mlme_obj->cfg; + *pHalHandle = (tHalHandle) p_mac; { @@ -199,6 +208,7 @@ QDF_STATUS mac_close(tHalHandle hHal) pMac->pdev = NULL; } wlan_objmgr_psoc_release_ref(pMac->psoc, WLAN_LEGACY_MAC_ID); + pMac->mlme_cfg = NULL; pMac->psoc = NULL; mac_free_context_buffer(); 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 20a9217bec..be35efe8e1 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 @@ -43,7 +43,7 @@ #include "lim_process_fils.h" #include "wlan_utility.h" #include "wifi_pos_api.h" - +#include "wlan_mlme_public_struct.h" #define RSN_OUI_SIZE 4 /* ////////////////////////////////////////////////////////////////////// */ @@ -607,42 +607,33 @@ populate_dot11f_ht_caps(tpAniSirGlobal pMac, uint8_t disable_high_ht_mcs_2x2 = 0; union { uint16_t nCfgValue16; - tSirMacHTCapabilityInfo htCapInfo; tSirMacExtendedHTCapabilityInfo extHtCapInfo; } uHTCapabilityInfo; tSirMacTxBFCapabilityInfo *pTxBFCapabilityInfo; tSirMacASCapabilityInfo *pASCapabilityInfo; + struct mlme_ht_capabilities_info *ht_cap_info; - CFG_GET_INT(nSirStatus, pMac, WNI_CFG_HT_CAP_INFO, nCfgValue); + ht_cap_info = &pMac->mlme_cfg->ht_caps.ht_cap_info; - uHTCapabilityInfo.nCfgValue16 = nCfgValue & 0xFFFF; - - pDot11f->mimoPowerSave = uHTCapabilityInfo.htCapInfo.mimoPowerSave; - pDot11f->greenField = uHTCapabilityInfo.htCapInfo.greenField; - pDot11f->delayedBA = uHTCapabilityInfo.htCapInfo.delayedBA; - pDot11f->maximalAMSDUsize = - uHTCapabilityInfo.htCapInfo.maximalAMSDUsize; - pDot11f->dsssCckMode40MHz = - uHTCapabilityInfo.htCapInfo.dsssCckMode40MHz; - pDot11f->psmp = uHTCapabilityInfo.htCapInfo.psmp; - pDot11f->stbcControlFrame = - uHTCapabilityInfo.htCapInfo.stbcControlFrame; - pDot11f->lsigTXOPProtection = - uHTCapabilityInfo.htCapInfo.lsigTXOPProtection; + pDot11f->mimoPowerSave = ht_cap_info->mimoPowerSave; + pDot11f->greenField = ht_cap_info->greenField; + pDot11f->delayedBA = ht_cap_info->delayedBA; + pDot11f->maximalAMSDUsize = ht_cap_info->maximalAMSDUsize; + pDot11f->dsssCckMode40MHz = ht_cap_info->dsssCckMode40MHz; + pDot11f->psmp = ht_cap_info->psmp; + pDot11f->stbcControlFrame = ht_cap_info->stbcControlFrame; + pDot11f->lsigTXOPProtection = ht_cap_info->lsigTXOPProtection; /* All sessionized entries will need the check below */ if (psessionEntry == NULL) { /* Only in case of NO session */ pDot11f->supportedChannelWidthSet = - uHTCapabilityInfo.htCapInfo.supportedChannelWidthSet; - pDot11f->advCodingCap = - uHTCapabilityInfo.htCapInfo.advCodingCap; - pDot11f->txSTBC = uHTCapabilityInfo.htCapInfo.txSTBC; - pDot11f->rxSTBC = uHTCapabilityInfo.htCapInfo.rxSTBC; - pDot11f->shortGI20MHz = - uHTCapabilityInfo.htCapInfo.shortGI20MHz; - pDot11f->shortGI40MHz = - uHTCapabilityInfo.htCapInfo.shortGI40MHz; + ht_cap_info->supportedChannelWidthSet; + pDot11f->advCodingCap = ht_cap_info->advCodingCap; + pDot11f->txSTBC = ht_cap_info->txSTBC; + pDot11f->rxSTBC = ht_cap_info->rxSTBC; + pDot11f->shortGI20MHz = ht_cap_info->shortGI20MHz; + pDot11f->shortGI40MHz = ht_cap_info->shortGI40MHz; } else { pDot11f->advCodingCap = psessionEntry->htConfig.ht_rx_ldpc; pDot11f->supportedChannelWidthSet = diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 36368baa6e..35de71c096 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -57,6 +57,7 @@ #include "net/cfg80211.h" #include #include +#include "wlan_mlme_public_struct.h" static tSelfRecoveryStats g_self_recovery_stats; @@ -12626,11 +12627,8 @@ QDF_STATUS sme_update_nss(tHalHandle h_hal, uint8_t nss) { QDF_STATUS status; tpAniSirGlobal mac_ctx = PMAC_STRUCT(h_hal); - uint32_t i, value = 0; - union { - uint16_t cfg_value16; - tSirMacHTCapabilityInfo ht_cap_info; - } uHTCapabilityInfo; + uint32_t i; + struct mlme_ht_capabilities_info *ht_cap_info; struct csr_roam_session *csr_session; status = sme_acquire_global_lock(&mac_ctx->sme); @@ -12639,14 +12637,13 @@ QDF_STATUS sme_update_nss(tHalHandle h_hal, uint8_t nss) mac_ctx->roam.configParam.enable2x2 = (nss == 1) ? 0 : 1; /* get the HT capability info*/ - sme_cfg_get_int(h_hal, WNI_CFG_HT_CAP_INFO, &value); - uHTCapabilityInfo.cfg_value16 = (0xFFFF & value); + ht_cap_info = &mac_ctx->mlme_cfg->ht_caps.ht_cap_info; for (i = 0; i < CSR_ROAM_SESSION_MAX; i++) { if (CSR_IS_SESSION_VALID(mac_ctx, i)) { csr_session = &mac_ctx->roam.roamSession[i]; csr_session->htConfig.ht_tx_stbc = - uHTCapabilityInfo.ht_cap_info.txSTBC; + ht_cap_info->txSTBC; } } diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 28e419750b..2d5c9a6e07 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -55,6 +55,7 @@ #include #include #include +#include "wlan_mlme_public_struct.h" #define MAX_PWR_FCC_CHAN_12 8 #define MAX_PWR_FCC_CHAN_13 2 @@ -17379,10 +17380,7 @@ QDF_STATUS csr_roam_open_session(tpAniSirGlobal mac_ctx, { QDF_STATUS status; uint32_t existing_session_id; - union { - uint16_t nCfgValue16; - tSirMacHTCapabilityInfo htCapInfo; - } uHTCapabilityInfo; + struct mlme_ht_capabilities_info *ht_cap_info; uint32_t nCfgValue; struct csr_roam_session *session; @@ -17443,19 +17441,12 @@ QDF_STATUS csr_roam_open_session(tpAniSirGlobal mac_ctx, return status; } - /* get the HT capability info */ - if (wlan_cfg_get_int(mac_ctx, WNI_CFG_HT_CAP_INFO, &nCfgValue) != - QDF_STATUS_SUCCESS) { - sme_err("could not get HT capability info"); - return QDF_STATUS_SUCCESS; - } - - uHTCapabilityInfo.nCfgValue16 = 0xFFFF & nCfgValue; - session->htConfig.ht_rx_ldpc = uHTCapabilityInfo.htCapInfo.advCodingCap; - session->htConfig.ht_tx_stbc = uHTCapabilityInfo.htCapInfo.txSTBC; - session->htConfig.ht_rx_stbc = uHTCapabilityInfo.htCapInfo.rxSTBC; - session->htConfig.ht_sgi20 = uHTCapabilityInfo.htCapInfo.shortGI20MHz; - session->htConfig.ht_sgi40 = uHTCapabilityInfo.htCapInfo.shortGI40MHz; + ht_cap_info = &mac_ctx->mlme_cfg->ht_caps.ht_cap_info; + session->htConfig.ht_rx_ldpc = ht_cap_info->advCodingCap; + session->htConfig.ht_tx_stbc = ht_cap_info->txSTBC; + session->htConfig.ht_rx_stbc = ht_cap_info->rxSTBC; + session->htConfig.ht_sgi20 = ht_cap_info->shortGI20MHz; + session->htConfig.ht_sgi40 = ht_cap_info->shortGI40MHz; #ifdef FEATURE_WLAN_BTAMP_UT_RF status = qdf_mc_timer_init(&session->hTimerJoinRetry, QDF_TIMER_TYPE_SW, diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 4ca21cbc0d..41fda58d12 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -74,6 +74,7 @@ #include "wlan_ocb_ucfg_api.h" #include "init_deinit_lmac.h" #include +#include "wlan_mlme_public_struct.h" /** * wma_find_vdev_by_addr() - find vdev_id from mac address @@ -2191,9 +2192,8 @@ struct cdp_vdev *wma_vdev_attach(tp_wma_handle wma_handle, QDF_STATUS status = QDF_STATUS_SUCCESS; struct sAniSirGlobal *mac = cds_get_context(QDF_MODULE_ID_PE); uint32_t cfg_val; - uint16_t val16; QDF_STATUS ret; - tSirMacHTCapabilityInfo *phtCapInfo; + struct mlme_ht_capabilities_info *ht_cap_info; struct scheduler_msg sme_msg = { 0 }; struct vdev_create_params params = { 0 }; u_int8_t vdev_id; @@ -2436,20 +2436,14 @@ struct cdp_vdev *wma_vdev_attach(tp_wma_handle wma_handle, WMA_LOGE("Failed to get value for WNI_CFG_FRAGMENTATION_THRESHOLD, leaving unchanged"); } - if (wlan_cfg_get_int(mac, WNI_CFG_HT_CAP_INFO, &cfg_val) == - QDF_STATUS_SUCCESS) { - val16 = (uint16_t) cfg_val; - phtCapInfo = (tSirMacHTCapabilityInfo *) &cfg_val; + ht_cap_info = &mac->mlme_cfg->ht_caps.ht_cap_info; - ret = wma_vdev_set_param(wma_handle->wmi_handle, - self_sta_req->session_id, - WMI_VDEV_PARAM_TX_STBC, - phtCapInfo->txSTBC); - if (QDF_IS_STATUS_ERROR(ret)) - WMA_LOGE("Failed to set WMI_VDEV_PARAM_TX_STBC"); - } else { - WMA_LOGE("Failed to get value of HT_CAP, TX STBC unchanged"); - } + ret = wma_vdev_set_param(wma_handle->wmi_handle, + self_sta_req->session_id, + WMI_VDEV_PARAM_TX_STBC, + ht_cap_info->txSTBC); + if (QDF_IS_STATUS_ERROR(ret)) + WMA_LOGE("Failed to set WMI_VDEV_PARAM_TX_STBC"); wma_set_vdev_mgmt_rate(wma_handle, self_sta_req->session_id); diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index f4d7ca74ed..cdb4fdcac1 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -60,6 +60,7 @@ #include "wlan_tgt_def_config.h" #include "wlan_reg_services_api.h" #include "wlan_roam_debug.h" +#include "wlan_mlme_public_struct.h" /* This is temporary, should be removed */ #include "ol_htt_api.h" @@ -2653,7 +2654,7 @@ QDF_STATUS wma_roam_scan_fill_self_caps(tp_wma_handle wma_handle, tSirMacQosInfoStation macQosInfoSta; union { uint16_t nCfgValue16; - tSirMacHTCapabilityInfo htCapInfo; + struct mlme_ht_capabilities_info htCapInfo; tSirMacExtendedHTCapabilityInfo extHtCapInfo; } uHTCapabilityInfo; @@ -2749,12 +2750,7 @@ QDF_STATUS wma_roam_scan_fill_self_caps(tp_wma_handle wma_handle, roam_offload_params->capability <<= RSN_CAPS_SHIFT; roam_offload_params->capability |= ((*pCfgValue16) & 0xFFFF); - if (wlan_cfg_get_int(pMac, WNI_CFG_HT_CAP_INFO, &nCfgValue) != - QDF_STATUS_SUCCESS) { - QDF_TRACE(QDF_MODULE_ID_WMA, QDF_TRACE_LEVEL_ERROR, - "Failed to get WNI_CFG_HT_CAP_INFO"); - return QDF_STATUS_E_FAILURE; - } + nCfgValue = *(uint32_t *)&pMac->mlme_cfg->ht_caps.ht_cap_info; uHTCapabilityInfo.nCfgValue16 = nCfgValue & 0xFFFF; roam_offload_params->ht_caps_info = uHTCapabilityInfo.nCfgValue16 & 0xFFFF;