From 5f91ff23cb5a710097113e961dd4c38977a87ae1 Mon Sep 17 00:00:00 2001 From: Wu Gao Date: Mon, 10 Sep 2018 13:51:37 +0800 Subject: [PATCH] qcacld-3.0: Refine mlme sta configurations Define mlme sta configures based on converged cfg component, add APIs to get and set mlme sta configurations. Change-Id: I1a03037081ebe27760d23405adc3cc9042ba7698 CRs-Fixed: 2312002 --- mlme/core/src/wlan_mlme_main.c | 36 ++ mlme/dispatcher/inc/cfg_mlme.h | 4 +- mlme/dispatcher/inc/cfg_mlme_sta.h | 395 ++++++++++++++++++ mlme/dispatcher/inc/wlan_mlme_public_struct.h | 53 +++ mlme/dispatcher/inc/wlan_mlme_ucfg_api.h | 87 ++++ mlme/dispatcher/src/wlan_mlme_ucfg_api.c | 145 +++++++ 6 files changed, 719 insertions(+), 1 deletion(-) create mode 100644 mlme/dispatcher/inc/cfg_mlme_sta.h diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c index 436ed80ddc..2c3247f459 100644 --- a/mlme/core/src/wlan_mlme_main.c +++ b/mlme/core/src/wlan_mlme_main.c @@ -244,6 +244,41 @@ static void mlme_init_obss_ht40_cfg(struct wlan_objmgr_psoc *psoc, cfg_default(CFG_OBSS_HT40_SCAN_ACTIVITY_THRESHOLD); } +static void mlme_init_sta_cfg(struct wlan_objmgr_psoc *psoc, + struct wlan_mlme_sta_cfg *sta) +{ + sta->sta_keep_alive_period = + cfg_get(psoc, CFG_INFRA_STA_KEEP_ALIVE_PERIOD); + sta->tgt_gtx_usr_cfg = + cfg_get(psoc, CFG_TGT_GTX_USR_CFG); + sta->pmkid_modes = + cfg_get(psoc, CFG_PMKID_MODES); + sta->ignore_peer_erp_info = + cfg_get(psoc, CFG_IGNORE_PEER_ERP_INFO); + sta->sta_prefer_80mhz_over_160mhz = + cfg_get(psoc, CFG_STA_PREFER_80MHZ_OVER_160MHZ); + sta->enable_5g_ebt = + cfg_get(psoc, CFG_PPS_ENABLE_5G_EBT); + sta->deauth_before_connection = + cfg_get(psoc, CFG_ENABLE_DEAUTH_BEFORE_CONNECTION); + sta->dot11p_mode = + cfg_get(psoc, CFG_DOT11P_MODE); + sta->enable_go_cts2self_for_sta = + cfg_get(psoc, CFG_ENABLE_GO_CTS2SELF_FOR_STA); + sta->qcn_ie_support = + cfg_get(psoc, CFG_QCN_IE_SUPPORT); + sta->fils_max_chan_guard_time = + cfg_get(psoc, CFG_FILS_MAX_CHAN_GUARD_TIME); + sta->force_rsne_override = + cfg_get(psoc, CFG_FORCE_RSNE_OVERRIDE); + sta->single_tid = + cfg_get(psoc, CFG_SINGLE_TID_RC); + sta->wait_cnf_timeout = + (uint32_t)cfg_default(CFG_WT_CNF_TIMEOUT); + sta->current_rssi = + (uint32_t)cfg_default(CFG_CURRENT_RSSI); +} + QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) { struct wlan_mlme_psoc_obj *mlme_obj; @@ -264,6 +299,7 @@ QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) mlme_init_chainmask_cfg(psoc, &mlme_cfg->chainmask_cfg); mlme_update_sap_cfg(psoc, &mlme_cfg->sap_cfg); mlme_init_obss_ht40_cfg(psoc, &mlme_cfg->obss_ht40); + mlme_init_sta_cfg(psoc, &mlme_cfg->sta); return status; } diff --git a/mlme/dispatcher/inc/cfg_mlme.h b/mlme/dispatcher/inc/cfg_mlme.h index 81f7cc30e6..954824c6ff 100644 --- a/mlme/dispatcher/inc/cfg_mlme.h +++ b/mlme/dispatcher/inc/cfg_mlme.h @@ -29,6 +29,7 @@ #include "cfg_mlme_vht_caps.h" #include "cfg_qos.h" #include "cfg_mlme_rates.h" +#include "cfg_mlme_sta.h" #include "cfg_sap_protection.h" #include "cfg_mlme_sap.h" @@ -40,6 +41,7 @@ CFG_QOS_ALL \ CFG_RATES_ALL \ CFG_SAP_PROTECTION_ALL \ - CFG_SAP_ALL + CFG_SAP_ALL \ + CFG_STA_ALL #endif /* __CFG_MLME_H */ diff --git a/mlme/dispatcher/inc/cfg_mlme_sta.h b/mlme/dispatcher/inc/cfg_mlme_sta.h new file mode 100644 index 0000000000..2fc1d1b8a5 --- /dev/null +++ b/mlme/dispatcher/inc/cfg_mlme_sta.h @@ -0,0 +1,395 @@ +/* + * 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 configuration definitions for MLME STA. + */ + +#ifndef CFG_MLME_STA_H__ +#define CFG_MLME_STA_H__ + +#include "wlan_mlme_public_struct.h" + +/* + * + * gStaKeepAlivePeriod - Sends NULL frame to AP periodically in + * seconds to notify STA's existence + * @Min: 0 + * @Max: 1000 + * @Default: 60 + * + * This ini is used to send default NULL frame to AP + * + * Related: None + * + * Supported Feature: STA + * + * Usage: Internal/External + * + * + */ +#define CFG_INFRA_STA_KEEP_ALIVE_PERIOD CFG_INI_UINT( \ + "gStaKeepAlivePeriod", \ + 0, \ + 1000, \ + 60, \ + CFG_VALUE_OR_DEFAULT, \ + "send default NULL frame to AP") + +/* + * + * tgt_gtx_usr_cfg - target gtx user config + * @Min: 0 + * @Max: 32 + * @Default: 32 + * + * This ini is used to set target gtx user config. + * + * Related: None + * + * Usage: Internal/External + * + * + */ +#define CFG_TGT_GTX_USR_CFG CFG_INI_UINT( \ + "tgt_gtx_usr_cfg", \ + 0, \ + 32, \ + 32, \ + CFG_VALUE_OR_DEFAULT, \ + "target gtx user config") + +/* + * + * pmkidModes - Enable PMKID modes + * This INI is used to enable PMKID feature options + * @Min: 0 + * @Max: 3 + * @Default: 3 + * + * Related: None + * + * Supported Feature: Scan + * + * Usage: External + * + * + */ +#define CFG_PMKID_MODES CFG_INI_UINT( \ + "pmkidModes", \ + 0, \ + 3, \ + 3, \ + CFG_VALUE_OR_DEFAULT, \ + "PMKID feature options") + +/* + * + * gIgnorePeerErpInfo - Ignore peer information + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to ignore default peer info + * + * Related: None + * + * Supported Feature: STA + * + * Usage: Internal/External + * + * + */ +#define CFG_IGNORE_PEER_ERP_INFO CFG_INI_BOOL( \ + "gIgnorePeerErpInfo", \ + 0, \ + "ignore default peer info") + +/* + * + * gStaPrefer80MHzOver160MHz - set sta preference to connect in 80HZ/160HZ + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to set sta preference to connect in 80HZ/160HZ + * + * 0 - Connects in 160MHz 1x1 when AP is 160MHz 2x2 + * 1 - Connects in 80MHz 2x2 when AP is 160MHz 2x2 + * + * Related: NA + * + * Supported Feature: 11AC + * + * Usage: External + * + * + */ +#define CFG_STA_PREFER_80MHZ_OVER_160MHZ CFG_INI_BOOL( \ + "gStaPrefer80MHzOver160MHz", \ + 1, \ + "Sta preference to connect in 80HZ/160HZ") + +/* + * + * gEnable5gEBT - Enables/disables 5G early beacon termination. When enabled + * terminate the reception of beacon if the TIM element is + * clear for the power saving + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to set default 5G early beacon termination + * + * Related: None + * + * Supported Feature: STA + * + * Usage: Internal/External + * + * + */ +#define CFG_PPS_ENABLE_5G_EBT CFG_INI_BOOL( \ + "gEnable5gEBT", \ + 1, \ + "5G early beacon termination") + +/* + * + * gSendDeauthBeforeCon - Send deauth before connection or not + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to set whether send deauth before connection or + * not. If last disconnection was due to HB failure and we reconnect + * to same AP next time, send deauth before starting connection. + * + * Related: None + * + * Supported Feature: STA + * + * Usage: Internal/External + * + * + */ +#define CFG_ENABLE_DEAUTH_BEFORE_CONNECTION CFG_INI_BOOL( \ + "gSendDeauthBeforeCon", \ + 0, \ + "send deauth before connection") + +/* + * + * CFG_DOT11P_MODE - 802.11p mode + * @Min: CFG_11P_DISABLED + * @Max: CFG_11P_CONCURRENT + * @Default: CFG_11P_DISABLED + * + * This ini used to set 802.11p mode. + * + * + * Usage: Internal/External + * + * + */ +#define CFG_DOT11P_MODE CFG_INI_UINT( \ + "gDot11PMode", \ + CFG_11P_DISABLED, \ + CFG_11P_CONCURRENT, \ + CFG_11P_DISABLED, \ + CFG_VALUE_OR_DEFAULT, \ + "802.11p mode") + +/* + * + * gEnable_go_cts2self_for_sta - Indicate firmware to stop NOA and + * start using cts2self + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * When gEnable_go_cts2self_for_sta is enabled then if a legacy + * client connects to P2P GO, Host will send a WMI VDEV command + * to FW to stop using NOA for P2P GO + * and start using CTS2SELF. + * + * + * Supported Feature: P2P + * + * + * Usage: Internal/External + * + * + */ +#define CFG_ENABLE_GO_CTS2SELF_FOR_STA CFG_INI_BOOL( \ + "gEnable_go_cts2self_for_sta", \ + 0, \ + "firmware to stop NOA and start using cts2self") + +/* + * + * g_qcn_ie_support - QCN IE support + * @Min: 0 (disabled) + * @Max: 1 (enabled) + * @Default: 1 (enabled) + * + * This config item is used to support QCN IE in probe/assoc/reassoc request + * for STA mode. QCN IE support is not added for SAP mode. + * + * Related: N/A + * + * Supported Feature: N/A + * + * Usage: Internal/External + * + * + */ +#define CFG_QCN_IE_SUPPORT CFG_INI_BOOL( \ + "g_qcn_ie_support", \ + 1, \ + "QCN IE support") + +/* + * + * g_fils_max_chan_guard_time - Set maximum channel guard time(ms) + * @Min: 0 + * @Max: 10 + * @Default: 0 + * + * This ini is used to set maximum channel guard time in milliseconds. + * + * Related: None + * + * Supported Feature: FILS + * + * Usage: External + * + * + */ +#define CFG_FILS_MAX_CHAN_GUARD_TIME CFG_INI_UINT( \ + "g_fils_max_chan_guard_time", \ + 0, \ + 10, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "Set maximum channel guard time") + +/* + * + * force_rsne_override - force rsnie override from user + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable/disable test mode to force rsne override used in + * security enhancement test cases to pass the RSNIE sent by user in + * assoc request. + * + * Related: None + * + * Supported Feature: STA + * + * Usage: internal + * + * + */ +#define CFG_FORCE_RSNE_OVERRIDE CFG_INI_BOOL( \ + "force_rsne_override", \ + 0, \ + "Set obss active dwelltime") + +/* + * + * SingleTIDRC - Set replay counter for all TID's + * @Min: 0 Separate replay counter for all TID + * @Max: 1 Single replay counter for all TID + * @Default: 1 + * + * This ini is used to set replay counter for all TID's + * + * Related: None. + * + * Supported Feature: WMM + * + * Usage: Internal/External + * + * + */ +#define CFG_SINGLE_TID_RC CFG_INI_BOOL( \ + "SingleTIDRC", \ + 1, \ + "replay counter for all TID") + +/* + * wait_cnf_timeout - Wait assoc cnf timeout + * @Min: 10 + * @Max: 3000 + * @Default: 1000 + * + * This is internal configure for waiting assoc cnf timeout + * + * Related: None + * + * Usage: Internal + * + */ +#define CFG_WT_CNF_TIMEOUT CFG_UINT( \ + "wait_cnf_timeout", \ + 10, \ + 3000, \ + 1000, \ + CFG_VALUE_OR_DEFAULT, \ + "Wait confirm timeout") + +/* + * current_rssi - current rssi + * @Min: 0 + * @Max: 127 + * @Default: 0 + * + * This is internal configure for current rssi + * + * Related: None + * + * Usage: Internal + * + */ +#define CFG_CURRENT_RSSI CFG_UINT( \ + "current_rssi", \ + 0, \ + 127, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "Current RSSI") + +#define CFG_STA_ALL \ + CFG(CFG_INFRA_STA_KEEP_ALIVE_PERIOD) \ + CFG(CFG_TGT_GTX_USR_CFG) \ + CFG(CFG_PMKID_MODES) \ + CFG(CFG_IGNORE_PEER_ERP_INFO) \ + CFG(CFG_STA_PREFER_80MHZ_OVER_160MHZ) \ + CFG(CFG_PPS_ENABLE_5G_EBT) \ + CFG(CFG_ENABLE_DEAUTH_BEFORE_CONNECTION) \ + CFG(CFG_DOT11P_MODE) \ + CFG(CFG_ENABLE_GO_CTS2SELF_FOR_STA) \ + CFG(CFG_QCN_IE_SUPPORT) \ + CFG(CFG_FILS_MAX_CHAN_GUARD_TIME) \ + CFG(CFG_FORCE_RSNE_OVERRIDE) \ + CFG(CFG_SINGLE_TID_RC) \ + CFG(CFG_WT_CNF_TIMEOUT) \ + CFG(CFG_CURRENT_RSSI) + +#endif /* CFG_MLME_STA_H__ */ diff --git a/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 535f67a4e1..7c393e760a 100644 --- a/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -25,6 +25,9 @@ #include +#define CFG_PMKID_MODES_OKC (0x1) +#define CFG_PMKID_MODES_PMKSA_CACHING (0x2) + /** * struct mlme_ht_capabilities_info - HT Capabilities Info * @l_sig_tx_op_protection: L-SIG TXOP Protection Mechanism support @@ -228,6 +231,54 @@ struct wlan_mlme_obss_ht40 { uint32_t scan_activity_threshold; }; +/** + * enum dot11p_mode - The 802.11p mode of operation + * @WLAN_HDD_11P_DISABLED: 802.11p mode is disabled + * @WLAN_HDD_11P_STANDALONE: 802.11p-only operation + * @WLAN_HDD_11P_CONCURRENT: 802.11p and WLAN operate concurrently + */ +enum dot11p_mode { + CFG_11P_DISABLED = 0, + CFG_11P_STANDALONE, + CFG_11P_CONCURRENT, +}; + +/** + * struct wlan_mlme_sta_cfg - MLME STA configuration items + * @sta_keep_alive_period: Sends NULL frame to AP period + * @tgt_gtx_usr_cfg: Target gtx user config + * @pmkid_modes: Enable PMKID modes + * @wait_cnf_timeout: Wait assoc cnf timeout + * @dot11p_mode: Set 802.11p mode + * @fils_max_chan_guard_time: Set maximum channel guard time + * @current_rssi: Current rssi + * @ignore_peer_erp_info: Ignore peer infrormation + * @sta_prefer_80mhz_over_160mhz: Set Sta preference to connect in 80HZ/160HZ + * @enable_5g_ebt: Set default 5G early beacon termination + * @deauth_before_connection: Send deauth before connection or not + * @enable_go_cts2self_for_sta: Stop NOA and start using cts2self + * @qcn_ie_support: QCN IE support + * @force_rsne_override: Force rsnie override from user + * @single_tid: Set replay counter for all TID + */ +struct wlan_mlme_sta_cfg { + uint32_t sta_keep_alive_period; + uint32_t tgt_gtx_usr_cfg; + uint32_t pmkid_modes; + uint32_t wait_cnf_timeout; + uint8_t dot11p_mode; + uint8_t fils_max_chan_guard_time; + uint8_t current_rssi; + bool ignore_peer_erp_info; + bool sta_prefer_80mhz_over_160mhz; + bool enable_5g_ebt; + bool deauth_before_connection; + bool enable_go_cts2self_for_sta; + bool qcn_ie_support; + bool force_rsne_override; + bool single_tid; +}; + /** * struct wlan_mlme_cfg - MLME config items * @ht_cfg: HT related CFG Items @@ -235,6 +286,7 @@ struct wlan_mlme_obss_ht40 { * @vht_cfg: VHT related CFG Items * @rates: Rates related cfg items * @sap_protection_cfg: SAP erp protection related CFG items + * @sta: sta CFG Items */ struct wlan_mlme_cfg { struct wlan_mlme_ht_caps ht_caps; @@ -245,6 +297,7 @@ struct wlan_mlme_cfg { struct wlan_mlme_sap_protection sap_protection_cfg; struct wlan_mlme_chainmask chainmask_cfg; struct wlan_mlme_cfg_sap sap_cfg; + struct wlan_mlme_sta_cfg sta; }; #endif diff --git a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 0e3e7a857a..30c58edf8d 100644 --- a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -246,4 +246,91 @@ QDF_STATUS ucfg_mlme_configure_chain_mask(struct wlan_objmgr_psoc *psoc, return wlan_mlme_configure_chain_mask(psoc, session_id); } +/* + * ucfg_mlme_get_sta_keep_alive_period() - Get the sta keep alive period + * @psoc: pointer to psoc object + * @val: Pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_sta_keep_alive_period(struct wlan_objmgr_psoc *psoc, + uint32_t *val); + +/** + * ucfg_mlme_get_pmkid_modes() - Get PMKID modes + * @psoc: pointer to psoc object + * @val: Pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_pmkid_modes(struct wlan_objmgr_psoc *psoc, + uint32_t *val); + +/** + * ucfg_mlme_set_pmkid_modes() - Set PMKID modes + * @psoc: pointer to psoc object + * @val: Pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_set_pmkid_modes(struct wlan_objmgr_psoc *psoc, + uint32_t val); + +/** + * ucfg_mlme_get_dot11p_mode() - Get the setting about 802.11p mode + * @psoc: pointer to psoc object + * @val: Pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_dot11p_mode(struct wlan_objmgr_psoc *psoc, + uint8_t *val); + +/** + * ucfg_mlme_get_go_cts2self_for_sta() - Stop NOA and start using cts2self + * @psoc: pointer to psoc object + * @val: Pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_go_cts2self_for_sta(struct wlan_objmgr_psoc *psoc, + bool *val); + +/** + * ucfg_mlme_get_force_rsne_override() - Force rsnie override from user + * @psoc: pointer to psoc object + * @val: Pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_force_rsne_override(struct wlan_objmgr_psoc *psoc, + bool *val); + +/** + * ucfg_mlme_get_qcn_ie_support() - QCN IE support or not + * @psoc: pointer to psoc object + * @val: Pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_qcn_ie_support(struct wlan_objmgr_psoc *psoc, + bool *val); + +/** + * ucfg_mlme_get_tgt_gtx_usr_cfg() - Get the target gtx user config + * @psoc: pointer to psoc object + * @val: Pointer to the value which will be filled for the caller + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_tgt_gtx_usr_cfg(struct wlan_objmgr_psoc *psoc, + uint32_t *val); #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 index 861b166d13..31dc81b62c 100644 --- a/mlme/dispatcher/src/wlan_mlme_ucfg_api.c +++ b/mlme/dispatcher/src/wlan_mlme_ucfg_api.c @@ -19,6 +19,8 @@ * DOC: define UCFG APIs exposed by the mlme component */ +#include "cfg_ucfg_api.h" +#include "cfg_mlme_sta.h" #include "wlan_mlme_main.h" #include "wlan_mlme_api.h" #include "wlan_mlme_ucfg_api.h" @@ -100,3 +102,146 @@ QDF_STATUS ucfg_mlme_pdev_close(struct wlan_objmgr_pdev *pdev) return QDF_STATUS_SUCCESS; } #endif + +QDF_STATUS +ucfg_mlme_get_sta_keep_alive_period(struct wlan_objmgr_psoc *psoc, + uint32_t *val) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_INFRA_STA_KEEP_ALIVE_PERIOD); + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.sta.sta_keep_alive_period; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +ucfg_mlme_get_pmkid_modes(struct wlan_objmgr_psoc *psoc, + uint32_t *val) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_PMKID_MODES); + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.sta.pmkid_modes; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +ucfg_mlme_set_pmkid_modes(struct wlan_objmgr_psoc *psoc, + uint32_t val) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + mlme_obj->cfg.sta.pmkid_modes = val; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +ucfg_mlme_get_dot11p_mode(struct wlan_objmgr_psoc *psoc, + uint8_t *val) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_DOT11P_MODE); + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.sta.dot11p_mode; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +ucfg_mlme_get_go_cts2self_for_sta(struct wlan_objmgr_psoc *psoc, + bool *val) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_ENABLE_GO_CTS2SELF_FOR_STA); + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.sta.enable_go_cts2self_for_sta; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +ucfg_mlme_get_force_rsne_override(struct wlan_objmgr_psoc *psoc, + bool *val) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_FORCE_RSNE_OVERRIDE); + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.sta.force_rsne_override; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +ucfg_mlme_get_qcn_ie_support(struct wlan_objmgr_psoc *psoc, + bool *val) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_QCN_IE_SUPPORT); + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.sta.qcn_ie_support; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +ucfg_mlme_get_tgt_gtx_usr_cfg(struct wlan_objmgr_psoc *psoc, + uint32_t *val) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *val = cfg_default(CFG_TGT_GTX_USR_CFG); + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + *val = mlme_obj->cfg.sta.tgt_gtx_usr_cfg; + + return QDF_STATUS_SUCCESS; +}