diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 224615e3af..bf16442766 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -896,6 +896,11 @@ static void mlme_init_feature_flag_in_cfg( cfg_default(CFG_CHANNEL_BONDING_MODE); feature_flags->enable_block_ack = cfg_default(CFG_BLOCK_ACK_ENABLED); feature_flags->enable_ampdu = cfg_get(psoc, CFG_ENABLE_AMPDUPS); + feature_flags->mcc_rts_cts_prot = cfg_get(psoc, + CFG_FW_MCC_RTS_CTS_PROT); + feature_flags->mcc_bcast_prob_rsp = cfg_get(psoc, + CFG_FW_MCC_BCAST_PROB_RESP); + feature_flags->enable_mcc = cfg_get(psoc, CFG_MCC_FEATURE); } static void mlme_init_sap_protection_cfg(struct wlan_objmgr_psoc *psoc, @@ -1154,7 +1159,8 @@ static void mlme_init_sap_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_GO_FORCE_11N_FOR_11AC); sap_cfg->ap_random_bssid_enable = cfg_get(psoc, CFG_AP_ENABLE_RANDOM_BSSID); - + sap_cfg->sap_mcc_chnl_avoid = + cfg_get(psoc, CFG_SAP_MCC_CHANNEL_AVOIDANCE); } static void mlme_init_obss_ht40_cfg(struct wlan_objmgr_psoc *psoc, @@ -1250,6 +1256,8 @@ static void mlme_init_sta_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_FORCE_RSNE_OVERRIDE); sta->single_tid = cfg_get(psoc, CFG_SINGLE_TID_RC); + sta->sta_miracast_mcc_rest_time = + cfg_get(psoc, CFG_STA_MCAST_MCC_REST_TIME); sta->wait_cnf_timeout = (uint32_t)cfg_default(CFG_WT_CNF_TIMEOUT); sta->current_rssi = diff --git a/components/mlme/dispatcher/inc/cfg_mlme_feature_flag.h b/components/mlme/dispatcher/inc/cfg_mlme_feature_flag.h index a27006344c..b8e27059b7 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_feature_flag.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_feature_flag.h @@ -86,10 +86,85 @@ 0, \ "Enable AMPDU") +/* + * + * gFWMccRtsCtsProtection - RTS-CTS protection in MCC. + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable/disable use of long duration RTS-CTS protection + * when SAP goes off channel in MCC mode. + * + * Related: None. + * + * Supported Feature: Concurrency + * + * Usage: Internal/External + * + * + */ +#define CFG_FW_MCC_RTS_CTS_PROT CFG_INI_UINT( \ + "gFWMccRtsCtsProtection", \ + 0, 1, 0, \ + CFG_VALUE_OR_DEFAULT, \ + "RTS-CTS protection in MCC") + +/* + * + * gFWMccBCastProbeResponse - Broadcast Probe Response in MCC. + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable/disable use of broadcast probe response to + * increase the detectability of SAP in MCC mode. + * + * Related: None. + * + * Supported Feature: Concurrency + * + * Usage: Internal/External + * + * + */ + +#define CFG_FW_MCC_BCAST_PROB_RESP CFG_INI_UINT( \ + "gFWMccBCastProbeResponse", \ + 0, 1, 0, \ + CFG_VALUE_OR_DEFAULT, \ + "Broadcast Probe Response in MCC") + +/* + * + * gEnableMCCMode - Enable/Disable MCC feature. + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini is used to enable/disable MCC feature. + * + * Related: None. + * + * Supported Feature: Concurrency + * + * Usage: Internal/External + * + * + */ +#define CFG_MCC_FEATURE CFG_INI_UINT( \ + "gEnableMCCMode", \ + 0, 1, 1, \ + CFG_VALUE_OR_DEFAULT, \ + "Enable/Disable MCC feature.") + #define CFG_FEATURE_FLAG_ALL \ CFG(CFG_ACCEPT_SHORT_SLOT_ASSOC_ONLY) \ CFG(CFG_HCF_ENABLED) \ CFG(CFG_RSN_ENABLED) \ + CFG(CFG_FW_MCC_RTS_CTS_PROT) \ + CFG(CFG_FW_MCC_BCAST_PROB_RESP) \ + CFG(CFG_MCC_FEATURE) \ CFG(CFG_11G_SHORT_PREAMBLE_ENABLED) \ CFG(CFG_11G_SHORT_SLOT_TIME_ENABLED) \ CFG(CFG_CHANNEL_BONDING_MODE) \ diff --git a/components/mlme/dispatcher/inc/cfg_mlme_sap.h b/components/mlme/dispatcher/inc/cfg_mlme_sap.h index 5fed6ceb8f..54de780c9d 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_sap.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_sap.h @@ -601,6 +601,31 @@ 0, \ "Create ramdom BSSID") +/* + * + * gSapChannelAvoidance - SAP MCC channel avoidance. + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to sets sap mcc channel avoidance. + * + * Related: None. + * + * Supported Feature: Concurrency + * + * Usage: Internal/External + * + * + */ +#define CFG_SAP_MCC_CHANNEL_AVOIDANCE CFG_INI_UINT( \ + "gSapChannelAvoidance", \ + 0, \ + 1, \ + 0, \ + CFG_VALUE_OR_DEFAULT, \ + "SAP MCC channel avoidance") + #define CFG_SAP_ALL \ CFG(CFG_AP_ENABLE_RANDOM_BSSID) \ CFG(CFG_SSID) \ @@ -616,6 +641,7 @@ CFG(CFG_RATE_FOR_TX_MGMT_5G) \ CFG(CFG_TELE_BCN_WAKEUP_EN) \ CFG(CFG_TELE_BCN_MAX_LI) \ + CFG(CFG_SAP_MCC_CHANNEL_AVOIDANCE) \ CFG(CFG_SAP_GET_PEER_INFO) \ CFG(CFG_SAP_ALLOW_ALL_CHANNEL_PARAM) \ CFG(CFG_SAP_MAX_NO_PEERS) \ diff --git a/components/mlme/dispatcher/inc/cfg_mlme_sta.h b/components/mlme/dispatcher/inc/cfg_mlme_sta.h index 32f1e9cb22..c39f87605b 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_sta.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_sta.h @@ -354,6 +354,33 @@ CFG_VALUE_OR_DEFAULT, \ "Wait confirm timeout") +/* + * + * gStaMiracastMccRestTimeVal - Rest time when Miracast is running. + * @Min: 100 + * @Max: 500 + * @Default: 400 + * + * This ini is used to set rest time for home channel for Miracast before + * going for scan. + * + * Related: None. + * + * Supported Feature: Concurrency + * + * Usage: Internal/External + * + * + */ + +#define CFG_STA_MCAST_MCC_REST_TIME CFG_INI_UINT( \ + "gStaMiracastMccRestTimeVal", \ + 100, \ + 500, \ + 400, \ + CFG_VALUE_OR_DEFAULT, \ + "Rest time when Miracast is running") + /* * current_rssi - current rssi * @Min: 0 @@ -435,6 +462,7 @@ CFG(CFG_DOT11P_MODE) \ CFG(CFG_ENABLE_GO_CTS2SELF_FOR_STA) \ CFG(CFG_QCN_IE_SUPPORT) \ + CFG(CFG_STA_MCAST_MCC_REST_TIME) \ CFG(CFG_FILS_MAX_CHAN_GUARD_TIME) \ CFG(CFG_FORCE_RSNE_OVERRIDE) \ CFG(CFG_SINGLE_TID_RC) \ diff --git a/components/mlme/dispatcher/inc/wlan_mlme_api.h b/components/mlme/dispatcher/inc/wlan_mlme_api.h index 9b6fd49b98..055d7d4256 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_api.h @@ -1857,7 +1857,6 @@ QDF_STATUS wlan_mlme_is_sap_uapsd_enabled(struct wlan_objmgr_psoc *psoc, */ QDF_STATUS wlan_mlme_set_sap_uapsd_flag(struct wlan_objmgr_psoc *psoc, bool value); - /** * wlan_mlme_is_11h_enabled() - Get the 11h flag * @psoc: psoc context @@ -1894,4 +1893,74 @@ wlan_mlme_is_11d_enabled(struct wlan_objmgr_psoc *psoc, bool *value); QDF_STATUS wlan_mlme_set_11d_enabled(struct wlan_objmgr_psoc *psoc, bool value); +/** + * wlan_mlme_get_sta_miracast_mcc_rest_time() - Get STA/MIRACAST MCC rest time + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * This API gives rest time to be used when STA and MIRACAST MCC conc happens + * + * Return: QDF_STATUS + */ +QDF_STATUS +wlan_mlme_get_sta_miracast_mcc_rest_time(struct wlan_objmgr_psoc *psoc, + uint32_t *value); +/** + * wlan_mlme_get_sap_mcc_chnl_avoid() - Check if SAP MCC needs to be avoided + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * This API fetches the user setting to determine if SAP MCC with other persona + * to be avoided. + * + * Return: QDF_STATUS + */ +QDF_STATUS +wlan_mlme_get_sap_mcc_chnl_avoid(struct wlan_objmgr_psoc *psoc, + uint8_t *value); +/** + * wlan_mlme_get_mcc_bcast_prob_resp() - Get broadcast probe rsp in MCC + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * To get INI value which helps to determe whether to enable/disable use of + * broadcast probe response to increase the detectability of SAP in MCC mode. + * + * + * Return: QDF_STATUS + */ +QDF_STATUS +wlan_mlme_get_mcc_bcast_prob_resp(struct wlan_objmgr_psoc *psoc, + uint8_t *value); +/** + * wlan_mlme_get_mcc_rts_cts_prot() - To get RTS-CTS protection in MCC. + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * To get INI value which helps to determine whether to enable/disable + * use of long duration RTS-CTS protection when SAP goes off + * channel in MCC mode. + * + * Return: QDF_STATUS + */ +QDF_STATUS +wlan_mlme_get_mcc_rts_cts_prot(struct wlan_objmgr_psoc *psoc, + uint8_t *value); +/** + * wlan_mlme_get_mcc_feature() - To find out to enable/disable MCC feature + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * To get INI value which helps to determine whether to enable MCC feature + * + * Return: QDF_STATUS + */ +QDF_STATUS +wlan_mlme_get_mcc_feature(struct wlan_objmgr_psoc *psoc, + uint8_t *value); #endif /* _WLAN_MLME_API_H_ */ diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 8436f1857f..ea2508f519 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -537,6 +537,7 @@ struct wlan_mlme_wps_params { * @max_li_modulated_dtim_time: Max modulated DTIM time. * @country_code_priority: Country code priority. * @sap_pref_chan_location: SAP Preferred channel location. + * @sap_mcc_chnl_avoid: SAP MCC channel avoidance flag */ struct wlan_mlme_cfg_sap { uint8_t cfg_ssid[MLME_CFG_SSID_LEN]; @@ -569,6 +570,7 @@ struct wlan_mlme_cfg_sap { bool sap_force_11n_for_11ac; bool go_force_11n_for_11ac; bool ap_random_bssid_enable; + uint8_t sap_mcc_chnl_avoid; }; /** @@ -837,9 +839,12 @@ struct wlan_mlme_feature_flag { bool enable_rsn; bool enable_short_preamble_11g; bool enable_short_slot_time_11g; + bool enable_ampdu; + bool enable_mcc; + uint8_t mcc_rts_cts_prot; + uint8_t mcc_bcast_prob_rsp; uint32_t channel_bonding_mode; uint32_t enable_block_ack; - bool enable_ampdu; }; /* @@ -1067,6 +1072,7 @@ enum station_keepalive_method { * @tgt_gtx_usr_cfg: Target gtx user config * @pmkid_modes: Enable PMKID modes * @wait_cnf_timeout: Wait assoc cnf timeout + * @sta_miracast_mcc_rest_time: STA+MIRACAST(P2P) MCC rest time * @dot11p_mode: Set 802.11p mode * @fils_max_chan_guard_time: Set maximum channel guard time * @current_rssi: Current rssi @@ -1085,6 +1091,7 @@ struct wlan_mlme_sta_cfg { uint32_t tgt_gtx_usr_cfg; uint32_t pmkid_modes; uint32_t wait_cnf_timeout; + uint32_t sta_miracast_mcc_rest_time; enum dot11p_mode dot11p_mode; uint8_t fils_max_chan_guard_time; uint8_t current_rssi; diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 7e0f21a03d..974ddce3a3 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -3105,4 +3105,93 @@ QDF_STATUS ucfg_mlme_get_ap_random_bssid_enable(struct wlan_objmgr_psoc *psoc, bool *value); +/** + * ucfg_mlme_get_sta_miracast_mcc_rest_time() - Get STA/MIRACAST MCC rest time + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * This API gives rest time to be used when STA and MIRACAST MCC conc happens + * + * Return: QDF_STATUS + */ +static inline QDF_STATUS +ucfg_mlme_get_sta_miracast_mcc_rest_time(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + return wlan_mlme_get_sta_miracast_mcc_rest_time(psoc, value); +} + +/** + * ucfg_mlme_get_sap_mcc_chnl_avoid() - Check if SAP MCC needs to be avoided + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * This API fetches the user setting to determine if SAP MCC with other persona + * to be avoided. + * + * Return: QDF_STATUS + */ +static inline QDF_STATUS +ucfg_mlme_get_sap_mcc_chnl_avoid(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + return wlan_mlme_get_sap_mcc_chnl_avoid(psoc, value); +} + +/** + * ucfg_mlme_get_mcc_bcast_prob_resp() - Get broadcast probe rsp in MCC + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * To get INI value which helps to determe whether to enable/disable use of + * broadcast probe response to increase the detectability of SAP in MCC mode. + * + * + * Return: QDF_STATUS + */ +static inline QDF_STATUS +ucfg_mlme_get_mcc_bcast_prob_resp(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + return wlan_mlme_get_mcc_bcast_prob_resp(psoc, value); +} + +/** + * ucfg_mlme_get_mcc_rts_cts_prot() - To get RTS-CTS protection in MCC. + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * To get INI value which helps to determine whether to enable/disable + * use of long duration RTS-CTS protection when SAP goes off + * channel in MCC mode. + * + * Return: QDF_STATUS + */ +static inline QDF_STATUS +ucfg_mlme_get_mcc_rts_cts_prot(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + return wlan_mlme_get_mcc_rts_cts_prot(psoc, value); +} + +/** + * ucfg_mlme_get_mcc_feature() - To find out to enable/disable MCC feature + * + * @psoc: pointer to psoc object + * @value: value which needs to filled by API + * + * To get INI value which helps to determine whether to enable MCC feature + * + * Return: QDF_STATUS + */ +static inline QDF_STATUS +ucfg_mlme_get_mcc_feature(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + return wlan_mlme_get_mcc_feature(psoc, value); +} #endif /* _WLAN_MLME_UCFG_API_H_ */ diff --git a/components/mlme/dispatcher/src/wlan_mlme_api.c b/components/mlme/dispatcher/src/wlan_mlme_api.c index 093b8a6da7..2906cb778f 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_api.c @@ -2140,6 +2140,91 @@ QDF_STATUS wlan_mlme_set_enable_bcast_probe_rsp(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS +wlan_mlme_get_sta_miracast_mcc_rest_time(struct wlan_objmgr_psoc *psoc, + uint32_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.sta.sta_miracast_mcc_rest_time; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_sap_mcc_chnl_avoid(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.sap_cfg.sap_mcc_chnl_avoid; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_mcc_bcast_prob_resp(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.feature_flags.mcc_bcast_prob_rsp; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_mcc_rts_cts_prot(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.feature_flags.mcc_rts_cts_prot; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +wlan_mlme_get_mcc_feature(struct wlan_objmgr_psoc *psoc, + uint8_t *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("Failed to get MLME Obj"); + return QDF_STATUS_E_FAILURE; + } + + *value = mlme_obj->cfg.feature_flags.enable_mcc; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS wlan_mlme_get_edca_params(struct wlan_mlme_edca_params *edca_params, uint8_t *data, enum e_edca_type edca_ac) { diff --git a/core/hdd/inc/hdd_config.h b/core/hdd/inc/hdd_config.h index 0bf9f12899..ce61536e9c 100644 --- a/core/hdd/inc/hdd_config.h +++ b/core/hdd/inc/hdd_config.h @@ -371,28 +371,6 @@ enum hdd_wext_control { #define CFG_ENABLE_RUNTIME_PM_ALL #endif -/* - * - * gEnableMCCMode - Enable/Disable MCC feature. - * @Min: 0 - * @Max: 1 - * @Default: 1 - * - * This ini is used to enable/disable MCC feature. - * - * Related: None. - * - * Supported Feature: Concurrency - * - * Usage: Internal - * - * - */ -#define CFG_ENABLE_MCC_ENABLED CFG_INI_BOOL( \ - "gEnableMCCMode", \ - 1, \ - "Enable/Disable MCC feature") - /* * * gInformBssRssiRaw - Report rssi in cfg80211_inform_bss_frame @@ -1017,7 +995,6 @@ enum hdd_wext_control { CFG(CFG_ENABLE_ACTION_OUI) \ CFG(CFG_ENABLE_FW_LOG) \ CFG(CFG_ENABLE_FW_UART_PRINT) \ - CFG(CFG_ENABLE_MCC_ENABLED) \ CFG(CFG_ENABLE_RAMDUMP_COLLECTION) \ CFG(CFG_INTERFACE_CHANGE_WAIT) \ CFG(CFG_INFORM_BSS_RSSI_RAW) \ diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 8d12daa699..d070f2b87e 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -1710,53 +1710,6 @@ enum hdd_dot11_mode { /* Not to use CFG default because if no registry setting, this is ignored by SME. */ #define CFG_MAX_TX_POWER_DEFAULT WNI_CFG_CURRENT_TX_POWER_LEVEL_STAMAX -/* - * - * gFWMccRtsCtsProtection - RTS-CTS protection in MCC. - * @Min: 0 - * @Max: 1 - * @Default: 0 - * - * This ini is used to enable/disable use of long duration RTS-CTS protection - * when SAP goes off channel in MCC mode. - * - * Related: None. - * - * Supported Feature: Concurrency - * - * Usage: Internal/External - * - * - */ - -#define CFG_FW_MCC_RTS_CTS_PROT_NAME "gFWMccRtsCtsProtection" -#define CFG_FW_MCC_RTS_CTS_PROT_MIN (0) -#define CFG_FW_MCC_RTS_CTS_PROT_MAX (1) -#define CFG_FW_MCC_RTS_CTS_PROT_DEFAULT (0) - -/* - * - * gFWMccBCastProbeResponse - Broadcast Probe Response in MCC. - * @Min: 0 - * @Max: 1 - * @Default: 0 - * - * This ini is used to enable/disable use of broadcast probe response to - * increase the detectability of SAP in MCC mode. - * - * Related: None. - * - * Supported Feature: Concurrency - * - * Usage: Internal/External - * - * - */ -#define CFG_FW_MCC_BCAST_PROB_RESP_NAME "gFWMccBCastProbeResponse" -#define CFG_FW_MCC_BCAST_PROB_RESP_MIN (0) -#define CFG_FW_MCC_BCAST_PROB_RESP_MAX (1) -#define CFG_FW_MCC_BCAST_PROB_RESP_DEFAULT (0) - /* * * g_wow_data_inactivity_timeout - Data activity timeout in wow mode. @@ -2500,53 +2453,6 @@ enum hdd_link_speed_rpt_type { #define CFG_ENABLE_MAC_ADDR_SPOOFING_MAX (1) #define CFG_ENABLE_MAC_ADDR_SPOOFING_DEFAULT (1) -/* - * - * gStaMiracastMccRestTimeVal - Rest time when Miracast is running. - * @Min: 100 - * @Max: 500 - * @Default: 400 - * - * This ini is used to set rest time for home channel for Miracast before - * going for scan. - * - * Related: None. - * - * Supported Feature: Concurrency - * - * Usage: Internal/External - * - * - */ -#define CFG_STA_MIRACAST_MCC_REST_TIME_VAL "gStaMiracastMccRestTimeVal" -#define CFG_STA_MIRACAST_MCC_REST_TIME_VAL_MIN (100) -#define CFG_STA_MIRACAST_MCC_REST_TIME_VAL_MAX (500) -#define CFG_STA_MIRACAST_MCC_REST_TIME_VAL_DEFAULT (400) - -#ifdef FEATURE_AP_MCC_CH_AVOIDANCE -/* - * - * gSapChannelAvoidance - SAP MCC channel avoidance. - * @Min: 0 - * @Max: 1 - * @Default: 0 - * - * This ini is used to sets sap mcc channel avoidance. - * - * Related: None. - * - * Supported Feature: Concurrency - * - * Usage: Internal/External - * - * - */ -#define CFG_SAP_MCC_CHANNEL_AVOIDANCE_NAME "gSapChannelAvoidance" -#define CFG_SAP_MCC_CHANNEL_AVOIDANCE_MIN (0) -#define CFG_SAP_MCC_CHANNEL_AVOIDANCE_MAX (1) -#define CFG_SAP_MCC_CHANNEL_AVOIDANCE_DEFAULT (0) -#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ - /* * * gSAP11ACOverride - Override bw to 11ac for SAP in driver even if supplicant @@ -3988,8 +3894,6 @@ struct hdd_config { uint8_t nRssiFilterPeriod; - bool mcc_rts_cts_prot_enable; - bool mcc_bcast_prob_resp_enable; uint8_t wow_data_inactivity_timeout; uint32_t DelayedTriggerFrmInt; @@ -4078,10 +3982,6 @@ struct hdd_config { uint8_t dhcpServerIP[IPADDR_STRING_LENGTH]; #endif /* DHCP_SERVER_OFFLOAD */ bool enable_mac_spoofing; - uint32_t sta_miracast_mcc_rest_time_val; -#ifdef FEATURE_AP_MCC_CH_AVOIDANCE - bool sap_channel_avoidance; -#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ uint8_t sap_11ac_override; uint8_t go_11ac_override; uint8_t max_scan_count; @@ -4263,7 +4163,6 @@ struct hdd_config { #ifdef FEATURE_RUNTIME_PM bool runtime_pm; #endif - uint8_t enableMCC; uint8_t inform_bss_rssi_raw; struct qdf_mac_addr intfMacAddr[QDF_MAX_CONCURRENCY_PERSONA]; }; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 2c8932b867..742f695ce9 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -238,20 +238,6 @@ struct reg_table_entry g_registry_table[] = { CFG_MAX_TX_POWER_MIN, CFG_MAX_TX_POWER_MAX), - REG_VARIABLE(CFG_FW_MCC_RTS_CTS_PROT_NAME, WLAN_PARAM_Integer, - struct hdd_config, mcc_rts_cts_prot_enable, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_FW_MCC_RTS_CTS_PROT_DEFAULT, - CFG_FW_MCC_RTS_CTS_PROT_MIN, - CFG_FW_MCC_RTS_CTS_PROT_MAX), - - REG_VARIABLE(CFG_FW_MCC_BCAST_PROB_RESP_NAME, WLAN_PARAM_Integer, - struct hdd_config, mcc_bcast_prob_resp_enable, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_FW_MCC_BCAST_PROB_RESP_DEFAULT, - CFG_FW_MCC_BCAST_PROB_RESP_MIN, - CFG_FW_MCC_BCAST_PROB_RESP_MAX), - REG_VARIABLE(CFG_WOW_DATA_INACTIVITY_TIMEOUT_NAME, WLAN_PARAM_Integer, struct hdd_config, wow_data_inactivity_timeout, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -578,24 +564,6 @@ struct reg_table_entry g_registry_table[] = { CFG_ENABLE_MAC_ADDR_SPOOFING_MIN, CFG_ENABLE_MAC_ADDR_SPOOFING_MAX), - REG_VARIABLE(CFG_STA_MIRACAST_MCC_REST_TIME_VAL, WLAN_PARAM_Integer, - struct hdd_config, sta_miracast_mcc_rest_time_val, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_STA_MIRACAST_MCC_REST_TIME_VAL_DEFAULT, - CFG_STA_MIRACAST_MCC_REST_TIME_VAL_MIN, - CFG_STA_MIRACAST_MCC_REST_TIME_VAL_MAX), - -#ifdef FEATURE_AP_MCC_CH_AVOIDANCE - REG_VARIABLE(CFG_SAP_MCC_CHANNEL_AVOIDANCE_NAME, - WLAN_PARAM_Integer, - struct hdd_config, - sap_channel_avoidance, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, - CFG_SAP_MCC_CHANNEL_AVOIDANCE_DEFAULT, - CFG_SAP_MCC_CHANNEL_AVOIDANCE_MIN, - CFG_SAP_MCC_CHANNEL_AVOIDANCE_MAX), -#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ - REG_VARIABLE(CFG_SAP_11AC_OVERRIDE_NAME, WLAN_PARAM_Integer, struct hdd_config, sap_11ac_override, VAR_FLAGS_OPTIONAL | @@ -2561,6 +2529,88 @@ QDF_STATUS hdd_set_sme_cfgs_related_to_plcy_mgr(struct hdd_context *hdd_ctx, return QDF_STATUS_SUCCESS; } +#ifdef FEATURE_AP_MCC_CH_AVOIDANCE +static QDF_STATUS hdd_set_sap_mcc_chnl_avoid(tSmeConfigParams *sme_cfg, + uint8_t val) +{ + sme_cfg->csrConfig.sap_channel_avoidance = val; + return QDF_STATUS_SUCCESS; +} +#else +static QDF_STATUS hdd_set_sap_mcc_chnl_avoid(tSmeConfigParams *sme_cfg, + uint8_t val) +{ + return QDF_STATUS_SUCCESS; +} +#endif + +static +QDF_STATUS hdd_set_sme_cfgs_related_to_mlme(struct hdd_context *hdd_ctx, + tSmeConfigParams *sme_cfg) +{ + QDF_STATUS status; + uint8_t wmm_mode = 0, enable_mcc = 0, sap_mcc_avoid = 0; + uint8_t mcc_rts_cts = 0, mcc_bcast_prob_rsp = 0; + uint32_t mcast_mcc_rest_time = 0; + bool b80211e_enabled = 0; + + status = ucfg_mlme_get_80211e_is_enabled(hdd_ctx->psoc, + &b80211e_enabled); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get b80211e_enabled failed"); + return QDF_STATUS_E_FAILURE; + } + sme_cfg->csrConfig.Is11eSupportEnabled = b80211e_enabled; + + status = ucfg_mlme_get_wmm_mode(hdd_ctx->psoc, &wmm_mode); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("Get wmm_mode failed"); + return QDF_STATUS_E_FAILURE; + } + sme_cfg->csrConfig.WMMSupportMode = hdd_to_csr_wmm_mode(wmm_mode); + hdd_debug("wmm_mode=%d 802_11e_enabled=%d", wmm_mode, b80211e_enabled); + + status = ucfg_mlme_get_mcc_feature(hdd_ctx->psoc, &enable_mcc); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("ucfg_mlme_get_mcc_feature fail, use def"); + return QDF_STATUS_E_FAILURE; + } + sme_cfg->csrConfig.fEnableMCCMode = enable_mcc; + + status = ucfg_mlme_get_mcc_rts_cts_prot(hdd_ctx->psoc, &mcc_rts_cts); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("ucfg_mlme_get_mcc_rts_cts_prot fail, use def"); + return QDF_STATUS_E_FAILURE; + } + sme_cfg->csrConfig.mcc_rts_cts_prot_enable = mcc_rts_cts; + + status = ucfg_mlme_get_mcc_bcast_prob_resp(hdd_ctx->psoc, + &mcc_bcast_prob_rsp); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("ucfg_mlme_get_mcc_bcast_prob_resp fail, use def"); + return QDF_STATUS_E_FAILURE; + } + sme_cfg->csrConfig.mcc_bcast_prob_resp_enable = mcc_bcast_prob_rsp; + + status = ucfg_mlme_get_sta_miracast_mcc_rest_time(hdd_ctx->psoc, + &mcast_mcc_rest_time); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("ucfg_mlme_get_sta_miracast_mcc_rest_time, use def"); + return QDF_STATUS_E_FAILURE; + } + sme_cfg->csrConfig.f_sta_miracast_mcc_rest_time_val = + mcast_mcc_rest_time; + status = ucfg_mlme_get_sap_mcc_chnl_avoid(hdd_ctx->psoc, + &sap_mcc_avoid); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("ucfg_mlme_get_sap_mcc_chnl_avoid, use def"); + return QDF_STATUS_E_FAILURE; + } + status = hdd_set_sap_mcc_chnl_avoid(sme_cfg, sap_mcc_avoid); + + return status; +} + /** * hdd_set_sme_config() -initializes the sme configuration parameters * @@ -2575,8 +2625,6 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) tSmeConfigParams *smeConfig; uint8_t rrm_capab_len; mac_handle_t mac_handle = hdd_ctx->mac_handle; - uint8_t wmm_mode = 0; - bool b80211e_is_enabled; bool roam_scan_enabled; #ifdef FEATURE_WLAN_ESE bool ese_enabled; @@ -2626,26 +2674,6 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) smeConfig->csrConfig.nRestTimeConc = pConfig->nRestTimeConc; smeConfig->csrConfig.min_rest_time_conc = pConfig->min_rest_time_conc; smeConfig->csrConfig.idle_time_conc = pConfig->idle_time_conc; - - status = ucfg_mlme_get_80211e_is_enabled(hdd_ctx->psoc, - &b80211e_is_enabled); - if (!QDF_IS_STATUS_SUCCESS(status)) { - hdd_err("Get b80211e_is_enabled failed"); - return QDF_STATUS_E_FAILURE; - } - smeConfig->csrConfig.Is11eSupportEnabled = b80211e_is_enabled; - - status = ucfg_mlme_get_wmm_mode(hdd_ctx->psoc, &wmm_mode); - if (!QDF_IS_STATUS_SUCCESS(status)) { - hdd_err("Get wmm_mode failed"); - return QDF_STATUS_E_FAILURE; - } - smeConfig->csrConfig.WMMSupportMode = hdd_to_csr_wmm_mode(wmm_mode); - - hdd_debug("%s bWmmIsEnabled=%d 802_11e_enabled=%d dot11Mode=%d", - __func__, wmm_mode, b80211e_is_enabled, - pConfig->dot11Mode); - smeConfig->rrmConfig.rrm_enabled = pConfig->fRrmEnable; smeConfig->rrmConfig.max_randn_interval = pConfig->nRrmRandnIntvl; hdd_hex_string_to_u8_array(pConfig->rm_capability, @@ -2687,12 +2715,6 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) hdd_ctx->psoc, false); } - /* Enable/Disable MCC */ - smeConfig->csrConfig.fEnableMCCMode = pConfig->enableMCC; - smeConfig->csrConfig.mcc_rts_cts_prot_enable = - pConfig->mcc_rts_cts_prot_enable; - smeConfig->csrConfig.mcc_bcast_prob_resp_enable = - pConfig->mcc_bcast_prob_resp_enable; /* Scan Results Aging Time out value */ smeConfig->csrConfig.scanCfgAgingTime = pConfig->scanAgingTimeout; @@ -2702,14 +2724,6 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) /* Update maximum interfaces information */ smeConfig->csrConfig.max_intf_count = hdd_ctx->max_intf_count; - smeConfig->csrConfig.f_sta_miracast_mcc_rest_time_val = - hdd_ctx->config->sta_miracast_mcc_rest_time_val; - -#ifdef FEATURE_AP_MCC_CH_AVOIDANCE - smeConfig->csrConfig.sap_channel_avoidance = - hdd_ctx->config->sap_channel_avoidance; -#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ - smeConfig->csrConfig.is_ps_enabled = hdd_ctx->config->is_ps_enabled; smeConfig->csrConfig.auto_bmps_timer_val = hdd_ctx->config->auto_bmps_timer_val; @@ -2755,10 +2769,17 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) hdd_ctx->config->wlm_latency_flags_low; smeConfig->csrConfig.wlm_latency_flags[3] = hdd_ctx->config->wlm_latency_flags_ultralow; - hdd_set_sme_cfgs_related_to_plcy_mgr(hdd_ctx, smeConfig); + status = hdd_set_sme_cfgs_related_to_mlme(hdd_ctx, smeConfig); + if (!QDF_IS_STATUS_SUCCESS(status)) + hdd_err("hdd_set_sme_cfgs_related_to_mlme() fail: %d", status); + status = hdd_set_sme_cfgs_related_to_plcy_mgr(hdd_ctx, smeConfig); + if (!QDF_IS_STATUS_SUCCESS(status)) + hdd_err("hdd_set_sme_cfgs_related_to_plcy_mgr fail: %d", + status); hdd_update_11k_offload_params(hdd_ctx->config, &smeConfig->csrConfig); + hdd_debug("dot11Mode=%d", pConfig->dot11Mode); status = sme_update_config(mac_handle, smeConfig); if (!QDF_IS_STATUS_SUCCESS(status)) hdd_err("sme_update_config() failure: %d", status); diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 9349a60c08..49e06af253 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -12273,7 +12273,7 @@ int wlan_hdd_cfg80211_init(struct device *dev, int len_5g_ch = 0, num_ch, ch_arr_size; int num_dsrc_ch, len_dsrc_ch, num_srd_ch, len_srd_ch; uint32_t *cipher_suites; - uint8_t allow_mcc_go_diff_bi = 0; + uint8_t allow_mcc_go_diff_bi = 0, enable_mcc = 0; hdd_enter(); @@ -12334,8 +12334,11 @@ int wlan_hdd_cfg80211_init(struct device *dev, ucfg_policy_mgr_get_allow_mcc_go_diff_bi(hdd_ctx->psoc, &allow_mcc_go_diff_bi)) hdd_err("can't get mcc_go_diff_bi value, use default"); + if (QDF_STATUS_SUCCESS != + ucfg_mlme_get_mcc_feature(hdd_ctx->psoc, &enable_mcc)) + hdd_err("can't get enable_mcc value, use default"); if (pCfg->advertiseConcurrentOperation) { - if (pCfg->enableMCC) { + if (enable_mcc) { int i; for (i = 0; diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 8626456007..eddb638c5b 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -4599,6 +4599,23 @@ hdd_set_vdev_crypto_prarams_from_ie(struct wlan_objmgr_vdev *vdev, } #endif +#ifdef FEATURE_AP_MCC_CH_AVOIDANCE +static void wlan_hdd_set_sap_mcc_chnl_avoid(struct hdd_context *hdd_ctx) +{ + uint8_t sap_mcc_avoid = 0; + + status = ucfg_mlme_get_sap_mcc_chnl_avoid(hdd_ctx->psoc, + &sap_mcc_avoid); + if (!QDF_IS_STATUS_SUCCESS(status)) + hdd_err("can't get sap mcc chnl avoid, use def"); + wlan_sap_set_channel_avoidance(hdd_ctx->mac_handle, sap_mcc_avoid); +} +#else +static void wlan_hdd_set_sap_mcc_chnl_avoid(struct hdd_context *hdd_ctx) +{ +} +#endif + /** * wlan_hdd_cfg80211_start_bss() - start bss * @adapter: Pointer to hostapd adapter @@ -4917,10 +4934,7 @@ int wlan_hdd_cfg80211_start_bss(struct hdd_adapter *adapter, &pref_chan_location); wlansap_set_dfs_preferred_channel_location(mac_handle, pref_chan_location); -#ifdef FEATURE_AP_MCC_CH_AVOIDANCE - wlan_sap_set_channel_avoidance(mac_handle, - iniConfig->sap_channel_avoidance); -#endif + wlan_hdd_set_sap_mcc_chnl_avoid(hdd_ctx); } else if (adapter->device_mode == QDF_P2P_GO_MODE) { pConfig->countryCode[0] = hdd_ctx->reg.alpha2[0]; pConfig->countryCode[1] = hdd_ctx->reg.alpha2[1]; diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 72bca2ceec..7695cdbf10 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -9383,7 +9383,6 @@ static void hdd_cfg_params_init(struct hdd_context *hdd_ctx) qdf_str_lcopy(config->dbs_scan_selection, cfg_get(psoc, CFG_DBS_SCAN_SELECTION), CFG_DBS_SCAN_PARAM_LENGTH); - config->enableMCC = cfg_get(psoc, CFG_ENABLE_MCC_ENABLED); config->inform_bss_rssi_raw = cfg_get(psoc, CFG_INFORM_BSS_RSSI_RAW); config->intfMacAddr[0] = cfg_get(psoc, CFG_INTF0_MAC_ADDR); config->intfMacAddr[1] = cfg_get(psoc, CFG_INTF1_MAC_ADDR); @@ -14371,6 +14370,7 @@ static int hdd_update_scan_config(struct hdd_context *hdd_ctx) uint8_t scan_bucket_thre; uint8_t select_5ghz_margin; bool roam_prefer_5ghz; + uint32_t mcast_mcc_rest_time = 0; status = ucfg_mlme_get_select_5ghz_margin(hdd_ctx->psoc, &select_5ghz_margin); @@ -14402,8 +14402,13 @@ static int hdd_update_scan_config(struct hdd_context *hdd_ctx) scan_cfg.usr_cfg_num_probes = cfg->scan_num_probes; scan_cfg.is_bssid_hint_priority = cfg->is_bssid_hint_priority; scan_cfg.enable_mac_spoofing = cfg->enable_mac_spoofing; - scan_cfg.sta_miracast_mcc_rest_time = - cfg->sta_miracast_mcc_rest_time_val; + status = ucfg_mlme_get_sta_miracast_mcc_rest_time(hdd_ctx->psoc, + &mcast_mcc_rest_time); + if (!QDF_IS_STATUS_SUCCESS(status)) { + hdd_err("ucfg_mlme_get_sta_miracast_mcc_rest_time, use def"); + return -EIO; + } + scan_cfg.sta_miracast_mcc_rest_time = mcast_mcc_rest_time; hdd_update_pno_config(&scan_cfg.pno_cfg, hdd_ctx); hdd_update_ie_whitelist_attr(&scan_cfg.ie_whitelist, hdd_ctx);