diff --git a/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h b/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h index ffc7ac071f..1c667125e9 100644 --- a/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h +++ b/components/fw_offload/dispatcher/inc/cfg_fwol_generic.h @@ -393,7 +393,7 @@ #ifdef DHCP_SERVER_OFFLOAD /* - * gEnableDeauthToDisassocMap + * gDHCPServerOffloadEnable * @Min: 0 * @Max: 1 * @Default: 0 @@ -407,7 +407,7 @@ * */ #define CFG_DHCP_SERVER_OFFLOAD_SUPPORT CFG_INI_BOOL( \ - "gEnableDeauthToDisassocMap", \ + "gDHCPServerOffloadEnable", \ 0, \ "DHCP Server offload support") diff --git a/components/mlme/core/src/wlan_mlme_main.c b/components/mlme/core/src/wlan_mlme_main.c index 94ad206061..224615e3af 100644 --- a/components/mlme/core/src/wlan_mlme_main.c +++ b/components/mlme/core/src/wlan_mlme_main.c @@ -347,6 +347,8 @@ static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc, gen->fw_timeout_crash = cfg_get(psoc, CFG_CRASH_FW_TIMEOUT); gen->debug_packet_log = cfg_get(psoc, CFG_ENABLE_DEBUG_PACKET_LOG); + gen->enable_deauth_to_disassoc_map = + cfg_get(psoc, CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP); mlme_init_pmf_cfg(psoc, gen); mlme_init_lpass_support_cfg(psoc, gen); @@ -1150,6 +1152,8 @@ static void mlme_init_sap_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_SAP_FORCE_11N_FOR_11AC); sap_cfg->go_force_11n_for_11ac = cfg_get(psoc, CFG_GO_FORCE_11N_FOR_11AC); + sap_cfg->ap_random_bssid_enable = + cfg_get(psoc, CFG_AP_ENABLE_RANDOM_BSSID); } @@ -1251,6 +1255,8 @@ static void mlme_init_sta_cfg(struct wlan_objmgr_psoc *psoc, sta->current_rssi = (uint32_t)cfg_default(CFG_CURRENT_RSSI); sta->allow_tpc_from_ap = cfg_get(psoc, CFG_TX_POWER_CTRL); + sta->sta_keepalive_method = + cfg_get(psoc, CFG_STA_KEEPALIVE_METHOD); } #ifdef WLAN_FEATURE_ROAM_OFFLOAD diff --git a/components/mlme/dispatcher/inc/cfg_mlme_generic.h b/components/mlme/dispatcher/inc/cfg_mlme_generic.h index 0d60a3ffbe..1d5e4d067e 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_generic.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_generic.h @@ -503,6 +503,28 @@ CFG_VALUE_OR_DEFAULT, \ "ITO Repeat Count") +/* + * + * gEnableDeauthToDisassocMap - Enables deauth to disassoc map + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to set default disassoc map + * + * Related: None + * + * Supported Feature: STA + * + * Usage: External + * + * + */ +#define CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP CFG_INI_BOOL( \ + "gEnableDeauthToDisassocMap", \ + 0, \ + "Enables deauth to disassoc map") + /* * * gEnableDebugLog - Enable/Disable the Connection related logs @@ -548,6 +570,7 @@ CFG(CFG_ENABLE_CRASH_INJECT) \ CFG(CFG_ENABLE_LPASS_SUPPORT) \ CFG(CFG_ENABLE_SELF_RECOVERY) \ + CFG(CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP) \ CFG(CFG_SAP_DOT11MC) \ CFG(CFG_ENABLE_FATAL_EVENT_TRIGGER) \ CFG(CFG_SUB_20_CHANNEL_WIDTH) \ diff --git a/components/mlme/dispatcher/inc/cfg_mlme_sap.h b/components/mlme/dispatcher/inc/cfg_mlme_sap.h index f4a098acd8..5fed6ceb8f 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_sap.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_sap.h @@ -578,7 +578,31 @@ "GO force 11n for 11ac") +/* + * + * gEnableApRandomBssid - Create ramdom BSSID + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to create a random BSSID in SoftAP mode to meet + * the Android requirement. + * + * Related: None. + * + * Supported Feature: SAP + * + * Usage: Internal/External + * + * + */ +#define CFG_AP_ENABLE_RANDOM_BSSID CFG_INI_BOOL( \ + "gEnableApRandomBssid", \ + 0, \ + "Create ramdom BSSID") + #define CFG_SAP_ALL \ + CFG(CFG_AP_ENABLE_RANDOM_BSSID) \ CFG(CFG_SSID) \ CFG(CFG_BEACON_INTERVAL) \ CFG(CFG_DTIM_PERIOD) \ diff --git a/components/mlme/dispatcher/inc/cfg_mlme_sta.h b/components/mlme/dispatcher/inc/cfg_mlme_sta.h index 5bb9eb3531..32f1e9cb22 100644 --- a/components/mlme/dispatcher/inc/cfg_mlme_sta.h +++ b/components/mlme/dispatcher/inc/cfg_mlme_sta.h @@ -397,6 +397,33 @@ 1, \ "Support for AP power constraint") +/* + * + * gStaKeepAliveMethod - Which keepalive method to use + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * This ini determines which keepalive method to use for station interfaces + * 1) Use null data packets + * 2) Use gratuitous ARP packets + * + * Related: gStaKeepAlivePeriod, gApKeepAlivePeriod, gGoKeepAlivePeriod + * + * Supported Feature: STA, Keepalive + * + * Usage: External + * + * + */ +#define CFG_STA_KEEPALIVE_METHOD CFG_INI_INT( \ + "gStaKeepAliveMethod", \ + MLME_STA_KEEPALIVE_NULL_DATA, \ + MLME_STA_KEEPALIVE_COUNT - 1, \ + MLME_STA_KEEPALIVE_GRAT_ARP, \ + CFG_VALUE_OR_DEFAULT, \ + "Which keepalive method to use") + #define CFG_STA_ALL \ CFG(CFG_INFRA_STA_KEEP_ALIVE_PERIOD) \ CFG(CFG_TGT_GTX_USR_CFG) \ @@ -411,6 +438,7 @@ CFG(CFG_FILS_MAX_CHAN_GUARD_TIME) \ CFG(CFG_FORCE_RSNE_OVERRIDE) \ CFG(CFG_SINGLE_TID_RC) \ + CFG(CFG_STA_KEEPALIVE_METHOD) \ CFG(CFG_WT_CNF_TIMEOUT) \ CFG(CFG_CURRENT_RSSI) \ CFG(CFG_TX_POWER_CTRL) diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index d171c955f0..8436f1857f 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -568,6 +568,7 @@ struct wlan_mlme_cfg_sap { uint8_t sap_pref_chan_location; bool sap_force_11n_for_11ac; bool go_force_11n_for_11ac; + bool ap_random_bssid_enable; }; /** @@ -935,6 +936,7 @@ struct wlan_mlme_generic { uint8_t debug_packet_log; bool enabled_11h; bool enabled_11d; + bool enable_deauth_to_disassoc_map; }; /* @@ -1046,6 +1048,19 @@ struct wlan_mlme_nss_chains { bool disable_tx_mrc[NSS_CHAINS_BAND_MAX]; }; +/** + * enum station_keepalive_method - available keepalive methods for stations + * @MLME_STA_KEEPALIVE_NULL_DATA: null data packet + * @MLME_STA_KEEPALIVE_GRAT_ARP: gratuitous ARP packet + * @MLME_STA_KEEPALIVE_COUNT: number of method options available + */ +enum station_keepalive_method { + MLME_STA_KEEPALIVE_NULL_DATA, + MLME_STA_KEEPALIVE_GRAT_ARP, + /* keep at the end */ + MLME_STA_KEEPALIVE_COUNT +}; + /** * struct wlan_mlme_sta_cfg - MLME STA configuration items * @sta_keep_alive_period: Sends NULL frame to AP period @@ -1082,6 +1097,7 @@ struct wlan_mlme_sta_cfg { bool force_rsne_override; bool single_tid; bool allow_tpc_from_ap; + enum station_keepalive_method sta_keepalive_method; }; /** diff --git a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index ab08b1abaa..7e0f21a03d 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -2473,6 +2473,17 @@ QDF_STATUS ucfg_mlme_get_current_mcs_set(struct wlan_objmgr_psoc *psoc, uint8_t *buf, qdf_size_t *len); +/** + * ucfg_mlme_get_sta_keepalive_method() - Get sta_keepalive_method + * @psoc: pointer to psoc object + * @val: Value to pass to the caller + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_sta_keepalive_method(struct wlan_objmgr_psoc *psoc, + enum station_keepalive_method *val); + /** * ucfg_mlme_get_wmm_dir_ac_vi() - Get TSPEC direction * for VI @@ -3068,4 +3079,30 @@ ucfg_mlme_set_sap_uapsd_flag(struct wlan_objmgr_psoc *psoc, bool value) return wlan_mlme_set_sap_uapsd_flag(psoc, value); } +/** + * ucfg_mlme_get_enable_deauth_to_disassoc_map() - Enable deauth_to_disassoc_map + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_enable_deauth_to_disassoc_map(struct wlan_objmgr_psoc *psoc, + bool *value); + +/** + * ucfg_mlme_get_ap_random_bssid_enable() - Enable random bssid + * @psoc: pointer to psoc object + * @value: Value that needs to be set from the caller + * + * UCFG API to be used by HDD/OSIF callers + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_ap_random_bssid_enable(struct wlan_objmgr_psoc *psoc, + bool *value); + #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 index 533e045dca..835d38321d 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_ucfg_api.c @@ -1231,3 +1231,52 @@ ucfg_mlme_set_ps_data_inactivity_timeout(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } + +QDF_STATUS +ucfg_mlme_get_sta_keepalive_method(struct wlan_objmgr_psoc *psoc, + enum station_keepalive_method *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; + } + + *val = mlme_obj->cfg.sta.sta_keepalive_method; + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +ucfg_mlme_get_enable_deauth_to_disassoc_map(struct wlan_objmgr_psoc *psoc, + bool *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + *value = mlme_obj->cfg.gen.enable_deauth_to_disassoc_map; + return QDF_STATUS_SUCCESS; +} + + +QDF_STATUS +ucfg_mlme_get_ap_random_bssid_enable(struct wlan_objmgr_psoc *psoc, + bool *value) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + *value = mlme_obj->cfg.sap_cfg.ap_random_bssid_enable; + return QDF_STATUS_SUCCESS; +} diff --git a/components/pmo/core/src/wlan_pmo_main.c b/components/pmo/core/src/wlan_pmo_main.c index b75bdb49a4..8b1b837c0d 100644 --- a/components/pmo/core/src/wlan_pmo_main.c +++ b/components/pmo/core/src/wlan_pmo_main.c @@ -175,6 +175,7 @@ static void wlan_pmo_init_cfg(struct wlan_objmgr_psoc *psoc, wlan_pmo_runtime_pm_init_cfg(psoc, psoc_cfg); psoc_cfg->auto_power_save_fail_mode = cfg_get(psoc, CFG_PMO_PWR_FAILURE); + psoc_cfg->enable_sap_suspend = cfg_get(psoc, CFG_ENABLE_SAP_SUSPEND); } QDF_STATUS pmo_psoc_open(struct wlan_objmgr_psoc *psoc) diff --git a/components/pmo/dispatcher/inc/wlan_pmo_common_cfg.h b/components/pmo/dispatcher/inc/wlan_pmo_common_cfg.h index 34a28e86cc..88eef48354 100644 --- a/components/pmo/dispatcher/inc/wlan_pmo_common_cfg.h +++ b/components/pmo/dispatcher/inc/wlan_pmo_common_cfg.h @@ -346,7 +346,29 @@ CFG_VALUE_OR_DEFAULT, \ "Auto detect power save failure mode") +/* + * + * gEnableSapSuspend - Enable/disable SAP Suspend + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * + * Related: None + * + * Supported Feature: SAP + * + * Usage: External + * + * + */ +#define CFG_ENABLE_SAP_SUSPEND CFG_INI_BOOL( \ + "gEnableSapSuspend", \ + 1, \ + "Enable/disable SAP Suspend") + #define CFG_PMO_COMMON_ALL \ + CFG(CFG_ENABLE_SAP_SUSPEND) \ CFG(CFG_PMO_ENABLE_HOST_ARPOFFLOAD) \ CFG(CFG_PMO_HW_FILTER_MODE) \ CFG(CFG_PMO_ENABLE_HOST_SSDP) \ diff --git a/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h b/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h index 7b1b6fa3bb..0d455491ad 100644 --- a/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h +++ b/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h @@ -392,6 +392,8 @@ struct pmo_psoc_cfg { #ifdef WLAN_FEATURE_PACKET_FILTERING uint8_t packet_filters_bitmap; #endif + bool enable_sap_suspend; + }; /** diff --git a/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h b/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h index b759d3a6c6..6b8422fc6c 100644 --- a/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h +++ b/components/pmo/dispatcher/inc/wlan_pmo_ucfg_api.h @@ -1780,4 +1780,14 @@ ucfg_pmo_get_runtime_pm_delay(struct wlan_objmgr_psoc *psoc) return 0; } #endif /* FEATURE_RUNTIME_PM */ + +/** + * ucfg_pmo_get_enable_sap_suspend - Return enable_sap_suspend value to caller + * @psoc: Pointer to psoc object + * + * Return: The value of enable_sap_suspend as stored in CFG + */ +bool +ucfg_pmo_get_enable_sap_suspend(struct wlan_objmgr_psoc *psoc); + #endif /* end of _WLAN_PMO_UCFG_API_H_ */ diff --git a/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c b/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c index b9d4a6c671..775212ff74 100644 --- a/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c +++ b/components/pmo/dispatcher/src/wlan_pmo_ucfg_api.c @@ -782,3 +782,11 @@ ucfg_pmo_extwow_app2_tcp_rx_timeout(struct wlan_objmgr_psoc *psoc) return pmo_psoc_ctx->psoc_cfg.extwow_app2_tcp_rx_timeout; } #endif + +bool +ucfg_pmo_get_enable_sap_suspend(struct wlan_objmgr_psoc *psoc) +{ + struct pmo_psoc_priv_obj *pmo_psoc_ctx = pmo_psoc_get_priv(psoc); + + return pmo_psoc_ctx->psoc_cfg.enable_sap_suspend; +} diff --git a/core/hdd/inc/hdd_config.h b/core/hdd/inc/hdd_config.h index f484ca87f9..7ec968ae5c 100644 --- a/core/hdd/inc/hdd_config.h +++ b/core/hdd/inc/hdd_config.h @@ -342,6 +342,132 @@ enum hdd_wext_control { #define CFG_ENABLE_PACKET_LOG_ALL #endif +#ifdef FEATURE_RUNTIME_PM +/* + * + * gRuntimePM - enable runtime suspend + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to enable runtime_suspend + * + * Related: None + * + * Supported Feature: Power Save + * + * Usage: External + * + * + */ +#define CFG_ENABLE_RUNTIME_PM CFG_INI_BOOL( \ + "gRuntimePM", \ + 0, \ + "This ini is used to enable runtime_suspend") +#define CFG_ENABLE_RUNTIME_PM_ALL \ + CFG(CFG_ENABLE_RUNTIME_PM) +#else +#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 + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * Option to report rssi in cfg80211_inform_bss_frame() + * + * Related: None + * + * Supported Feature: N/A + * + * Usage: External + * + * + */ +#define CFG_INFORM_BSS_RSSI_RAW CFG_INI_BOOL( \ + "gInformBssRssiRaw", \ + 1, \ + "Option to report rssi in cfg80211_inform_bss_frame") + +#ifdef FEATURE_WLAN_DYNAMIC_CVM +/* + * + * gConfigVCmodeBitmap - Bitmap for operating voltage corner mode + * @Min: 0x00000000 + * @Max: 0x0fffffff + * @Default: 0x0000000a + * This ini is used to set operating voltage corner mode for differenet + * phymode and bw configurations. Every 2 bits till BIT27 are dedicated + * for a specific configuration. Bit values decide the type of voltage + * corner mode. All the details below - + * + * Configure operating voltage corner mode based on phymode and bw. + * bit 0-1 - operating voltage corner mode for 11a/b. + * bit 2-3 - operating voltage corner mode for 11g. + * bit 4-5 - operating voltage corner mode for 11n, 20MHz, 1x1. + * bit 6-7 - operating voltage corner mode for 11n, 20MHz, 2x2. + * bit 8-9 - operating voltage corner mode for 11n, 40MHz, 1x1. + * bit 10-11 - operating voltage corner mode for 11n, 40MHz, 2x2. + * bit 12-13 - operating voltage corner mode for 11ac, 20MHz, 1x1. + * bit 14-15 - operating voltage corner mode for 11ac, 20MHz, 2x2. + * bit 16-17 - operating voltage corner mode for 11ac, 40MHz, 1x1. + * bit 18-19 - operating voltage corner mode for 11ac, 40MHz, 2x2. + * bit 20-21 - operating voltage corner mode for 11ac, 80MHz, 1x1. + * bit 22-23 - operating voltage corner mode for 11ac, 80MHz, 2x2. + * bit 24-25 - operating voltage corner mode for 11ac, 160MHz, 1x1. + * bit 26-27 - operating voltage corner mode for 11ac, 160MHz, 2x2. + * --------------------------------------------- + * 00 - Static voltage corner SVS + * 01 - static voltage corner LOW SVS + * 10 - Dynamic voltage corner selection based on TPUT + * 11 - Dynamic voltage corner selection based on TPUT and Tx Flush counters + + * Related: None + * + * Supported Feature: None + * + * Usage: External + * + * + */ +#define CFG_VC_MODE_BITMAP CFG_INI_INT( \ + "gConfigVCmode", \ + 0x00000000, \ + 0x0fffffff, \ + 0x00000005, \ + CFG_VALUE_OR_DEFAULT, \ + "Bitmap for operating voltage corner mode") + +#define CFG_VC_MODE_BITMAP_ALL CFG(CFG_VC_MODE_BITMAP) +#else +#define CFG_VC_MODE_BITMAP_ALL +#endif + /* * * gOperatingChannel- Default STA operating channel @@ -399,10 +525,11 @@ enum hdd_wext_control { * along with the creation of wlan0 and p2p0. The name of the interface is * specified as the parameter * - * Usage: Internal/External + * Usage: Internal * * */ + #define CFG_ENABLE_CONCURRENT_STA CFG_INI_STRING( \ "gEnableConcurrentSTA", \ 0, \ @@ -443,6 +570,8 @@ enum hdd_wext_control { #define CFG_HDD_ALL \ CFG_ENABLE_PACKET_LOG_ALL \ + CFG_ENABLE_RUNTIME_PM_ALL \ + CFG_VC_MODE_BITMAP_ALL \ CFG_WLAN_AUTO_SHUTDOWN_ALL \ CFG_WLAN_LOGGING_SUPPORT_ALL \ CFG(CFG_BUG_ON_REINIT_FAILURE) \ @@ -451,7 +580,9 @@ enum hdd_wext_control { CFG(CFG_ENABLE_FW_LOG) \ CFG(CFG_ENABLE_FW_UART_PRINT) \ CFG(CFG_ENABLE_RAMDUMP_COLLECTION) \ + CFG(CFG_ENABLE_MCC_ENABLED) \ CFG(CFG_INTERFACE_CHANGE_WAIT) \ + CFG(CFG_INFORM_BSS_RSSI_RAW) \ CFG(CFG_MULTICAST_HOST_FW_MSGS) \ CFG(CFG_NUM_VDEV_ENABLE) \ CFG(CFG_OPERATING_CHANNEL) \ diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 96d6ea5cc4..df23794868 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -1613,29 +1613,6 @@ enum hdd_dot11_mode { #define CFG_DOT11_MODE_DEFAULT eHDD_DOT11_MODE_11ax #define CFG_DOT11_MODE_MAX eHDD_DOT11_MODE_11ax -/* - * - * gEnableApRandomBssid - Create ramdom BSSID - * @Min: 0 - * @Max: 1 - * @Default: 0 - * - * This ini is used to create a random BSSID in SoftAP mode to meet - * the Android requirement. - * - * Related: None. - * - * Supported Feature: SAP - * - * Usage: Internal/External - * - * - */ -#define CFG_AP_ENABLE_RANDOM_BSSID_NAME "gEnableApRandomBssid" -#define CFG_AP_ENABLE_RANDOM_BSSID_MIN (0) -#define CFG_AP_ENABLE_RANDOM_BSSID_MAX (1) -#define CFG_AP_ENABLE_RANDOM_BSSID_DEFAULT (0) - /* * * gEnableApProt - Enable/Disable AP protection @@ -1919,43 +1896,6 @@ enum hdd_dot11_mode { #define CFG_WOW_DATA_INACTIVITY_TIMEOUT_MAX (255) #define CFG_WOW_DATA_INACTIVITY_TIMEOUT_DEFAULT (50) -/** - * enum station_keepalive_method - available keepalive methods for stations - * @HDD_STA_KEEPALIVE_NULL_DATA: null data packet - * @HDD_STA_KEEPALIVE_GRAT_ARP: gratuitous ARP packet - * @HDD_STA_KEEPALIVE_COUNT: number of method options available - */ -enum station_keepalive_method { - HDD_STA_KEEPALIVE_NULL_DATA, - HDD_STA_KEEPALIVE_GRAT_ARP, - /* keep at the end */ - HDD_STA_KEEPALIVE_COUNT -}; - -/* - * - * gStaKeepAliveMethod - Which keepalive method to use - * @Min: 0 - * @Max: 1 - * @Default: 1 - * - * This ini determines which keepalive method to use for station interfaces - * 1) Use null data packets - * 2) Use gratuitous ARP packets - * - * Related: gStaKeepAlivePeriod, gApKeepAlivePeriod, gGoKeepAlivePeriod - * - * Supported Feature: STA, Keepalive - * - * Usage: Internal/External - * - * - */ -#define CFG_STA_KEEPALIVE_METHOD_NAME "gStaKeepAliveMethod" -#define CFG_STA_KEEPALIVE_METHOD_MIN (HDD_STA_KEEPALIVE_NULL_DATA) -#define CFG_STA_KEEPALIVE_METHOD_MAX (HDD_STA_KEEPALIVE_COUNT - 1) -#define CFG_STA_KEEPALIVE_METHOD_DEFAULT (HDD_STA_KEEPALIVE_GRAT_ARP) - /* WMM configuration */ /* * @@ -2328,52 +2268,6 @@ enum hdd_link_speed_rpt_type { #define HDD_MULTICAST_FILTER_LIST 0x04 #define HDD_MULTICAST_FILTER_LIST_CLEAR 0x05 -/* - * - * gConfigVCmode - Bitmap for operating voltage corner mode - * @Min: 0x00000000 - * @Max: 0x0fffffff - * @Default: 0x0000000a - * This ini is used to set operating voltage corner mode for differenet - * phymode and bw configurations. Every 2 bits till BIT27 are dedicated - * for a specific configuration. Bit values decide the type of voltage - * corner mode. All the details below - - * - * Configure operating voltage corner mode based on phymode and bw. - * bit 0-1 - operating voltage corner mode for 11a/b. - * bit 2-3 - operating voltage corner mode for 11g. - * bit 4-5 - operating voltage corner mode for 11n, 20MHz, 1x1. - * bit 6-7 - operating voltage corner mode for 11n, 20MHz, 2x2. - * bit 8-9 - operating voltage corner mode for 11n, 40MHz, 1x1. - * bit 10-11 - operating voltage corner mode for 11n, 40MHz, 2x2. - * bit 12-13 - operating voltage corner mode for 11ac, 20MHz, 1x1. - * bit 14-15 - operating voltage corner mode for 11ac, 20MHz, 2x2. - * bit 16-17 - operating voltage corner mode for 11ac, 40MHz, 1x1. - * bit 18-19 - operating voltage corner mode for 11ac, 40MHz, 2x2. - * bit 20-21 - operating voltage corner mode for 11ac, 80MHz, 1x1. - * bit 22-23 - operating voltage corner mode for 11ac, 80MHz, 2x2. - * bit 24-25 - operating voltage corner mode for 11ac, 160MHz, 1x1. - * bit 26-27 - operating voltage corner mode for 11ac, 160MHz, 2x2. - * --------------------------------------------- - * 00 - Static voltage corner SVS - * 01 - static voltage corner LOW SVS - * 10 - Dynamic voltage corner selection based on TPUT - * 11 - Dynamic voltage corner selection based on TPUT and Tx Flush counters - - * Related: None - * - * Supported Feature: None - * - * Usage: External - * - * - */ - -#define CFG_VC_MODE_BITMAP "gConfigVCmode" -#define CFG_VC_MODE_BITMAP_MIN (0x00000000) -#define CFG_VC_MODE_BITMAP_MAX (0x0fffffff) -#define CFG_VC_MODE_BITMAP_DEFAULT (0x00000005) - /* * * gEnableSAPManadatoryChanList - Enable SAP Mandatory channel list @@ -2398,28 +2292,6 @@ enum hdd_link_speed_rpt_type { #define CFG_ENABLE_SAP_MANDATORY_CHAN_LIST_MAX (1) #define CFG_ENABLE_SAP_MANDATORY_CHAN_LIST_DEFAULT (0) -/* - * - * 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_ENABLE_MCC_ENABLED_NAME "gEnableMCCMode" -#define CFG_ENABLE_MCC_ENABLED_MIN (0) -#define CFG_ENABLE_MCC_ENABLED_MAX (1) -#define CFG_ENABLE_MCC_ENABLED_DEFAULT (1) - /* * * gAllowMCCGODiffBI - Allow GO in MCC mode to accept different beacon interval @@ -2822,34 +2694,6 @@ enum hdd_link_speed_rpt_type { #endif /* MSM_PLATFORM */ -#define CFG_ENABLE_SAP_SUSPEND "gEnableSapSuspend" -#define CFG_ENABLE_SAP_SUSPEND_MIN (0) -#define CFG_ENABLE_SAP_SUSPEND_MAX (1) -#define CFG_ENABLE_SAP_SUSPEND_DEFAULT (1) - -/* - * - * gEnableDeauthToDisassocMap - Enables deauth to disassoc map - * @Min: 0 - * @Max: 1 - * @Default: 0 - * - * This ini is used to set default disassoc map - * - * Related: None - * - * Supported Feature: STA - * - * Usage: Internal/External - * - * - */ - -#define CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_NAME "gEnableDeauthToDisassocMap" -#define CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_MIN (0) -#define CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_MAX (1) -#define CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_DEFAULT (0) - #ifdef DHCP_SERVER_OFFLOAD #define CFG_DHCP_SERVER_IP_NAME "gDHCPServerIP" #define CFG_DHCP_SERVER_IP_DEFAULT "" @@ -3112,15 +2956,6 @@ enum hdd_link_speed_rpt_type { #define CFG_STATIONARY_THRESHOLD_MAX (100) #define CFG_STATIONARY_THRESHOLD_DEFAULT (10) -/* Option to report rssi in cfg80211_inform_bss_frame() - * 0 = use rssi value based on noise floor = -96 dBm - * 1 = use rssi value based on actual noise floor in hardware - */ -#define CFG_INFORM_BSS_RSSI_RAW_NAME "gInformBssRssiRaw" -#define CFG_INFORM_BSS_RSSI_RAW_MIN (0) -#define CFG_INFORM_BSS_RSSI_RAW_MAX (1) -#define CFG_INFORM_BSS_RSSI_RAW_DEFAULT (1) - #ifdef WLAN_FEATURE_TSF_PLUS /* PTP options */ #define CFG_SET_TSF_PTP_OPT_NAME "gtsf_ptp_options" @@ -3579,30 +3414,6 @@ enum hdd_link_speed_rpt_type { #define CFG_BMPS_MAXIMUM_LI_MAX (65535) #define CFG_BMPS_MAXIMUM_LI_DEFAULT (1) -#ifdef FEATURE_RUNTIME_PM -/* - * - * gRuntimePM - enable runtime suspend - * @Min: 0 - * @Max: 1 - * @Default: 0 - * - * This ini is used to enable runtime_suspend - * - * Related: None - * - * Supported Feature: Power Save - * - * Usage: External - * - * - */ -#define CFG_ENABLE_RUNTIME_PM "gRuntimePM" -#define CFG_ENABLE_RUNTIME_PM_MIN (0) -#define CFG_ENABLE_RUNTIME_PM_MAX (1) -#define CFG_ENABLE_RUNTIME_PM_DEFAULT (0) -#endif - /* * * gActiveUcBpfMode - Control UC active APF mode @@ -4780,9 +4591,7 @@ struct hdd_config { uint8_t intfAddrMask; struct qdf_mac_addr intfMacAddr[QDF_MAX_CONCURRENCY_PERSONA]; - bool apRandomBssidEnabled; bool apProtEnabled; - enum station_keepalive_method sta_keepalive_method; uint8_t nTxPowerCap; /* In dBm */ uint8_t disablePacketFilter; bool fRrmEnable; @@ -4830,10 +4639,6 @@ struct hdd_config { uint32_t DelayedTriggerFrmInt; -#ifdef FEATURE_RUNTIME_PM - bool runtime_pm; -#endif - #ifdef FEATURE_WLAN_RA_FILTERING uint16_t RArateLimitInterval; #endif @@ -4849,7 +4654,6 @@ struct hdd_config { int32_t linkSpeedRssiHigh; int32_t linkSpeedRssiMid; int32_t linkSpeedRssiLow; - uint8_t enableMCC; uint8_t allowMCCGODiffBI; uint8_t thermalMitigationEnable; uint32_t throttlePeriod; @@ -4920,9 +4724,6 @@ struct hdd_config { uint8_t SapSccChanAvoidance; #endif /* FEATURE_WLAN_FORCE_SAP_SCC */ - bool enable_sap_suspend; - - bool gEnableDeauthToDisassocMap; #ifdef DHCP_SERVER_OFFLOAD uint8_t dhcpServerIP[IPADDR_STRING_LENGTH]; #endif /* DHCP_SERVER_OFFLOAD */ @@ -4952,7 +4753,6 @@ struct hdd_config { #ifdef FEATURE_LFR_SUBNET_DETECTION bool enable_lfr_subnet_detection; #endif - uint8_t inform_bss_rssi_raw; #ifdef WLAN_FEATURE_TSF #ifdef WLAN_FEATURE_TSF_PLUS uint8_t tsf_ptp_options; @@ -5116,6 +4916,11 @@ struct hdd_config { uint8_t enable_concurrent_sta[CFG_CONCURRENT_IFACE_MAX_LEN]; uint8_t dbs_scan_selection[CFG_DBS_SCAN_PARAM_LENGTH]; uint8_t remove_time_stamp_sync_cmd; +#ifdef FEATURE_RUNTIME_PM + bool runtime_pm; +#endif + uint8_t enableMCC; + uint8_t inform_bss_rssi_raw; }; #define VAR_OFFSET(_Struct, _Var) (offsetof(_Struct, _Var)) diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index b73173d98a..e466fe2423 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -160,13 +160,6 @@ struct reg_table_entry g_registry_table[] = { VAR_FLAGS_OPTIONAL, (void *)CFG_INTF3_MAC_ADDR_DEFAULT), - REG_VARIABLE(CFG_AP_ENABLE_RANDOM_BSSID_NAME, WLAN_PARAM_Integer, - struct hdd_config, apRandomBssidEnabled, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_AP_ENABLE_RANDOM_BSSID_DEFAULT, - CFG_AP_ENABLE_RANDOM_BSSID_MIN, - CFG_AP_ENABLE_RANDOM_BSSID_MAX), - REG_VARIABLE(CFG_AP_ENABLE_PROTECTION_MODE_NAME, WLAN_PARAM_Integer, struct hdd_config, apProtEnabled, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -174,15 +167,6 @@ struct reg_table_entry g_registry_table[] = { CFG_AP_ENABLE_PROTECTION_MODE_MIN, CFG_AP_ENABLE_PROTECTION_MODE_MAX), -#ifdef FEATURE_WLAN_DYNAMIC_CVM - REG_VARIABLE(CFG_VC_MODE_BITMAP, WLAN_PARAM_HexInteger, - struct hdd_config, vc_mode_cfg_bitmap, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_VC_MODE_BITMAP_DEFAULT, - CFG_VC_MODE_BITMAP_MIN, - CFG_VC_MODE_BITMAP_MAX), -#endif - REG_VARIABLE(CFG_ENABLE_SAP_MANDATORY_CHAN_LIST, WLAN_PARAM_Integer, struct hdd_config, enable_sap_mandatory_chan_list, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -341,22 +325,6 @@ struct reg_table_entry g_registry_table[] = { CFG_RA_RATE_LIMIT_INTERVAL_MAX), #endif -#ifdef FEATURE_RUNTIME_PM - REG_VARIABLE(CFG_ENABLE_RUNTIME_PM, WLAN_PARAM_Integer, - struct hdd_config, runtime_pm, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ENABLE_RUNTIME_PM_DEFAULT, - CFG_ENABLE_RUNTIME_PM_MIN, - CFG_ENABLE_RUNTIME_PM_MAX), -#endif - - REG_VARIABLE(CFG_STA_KEEPALIVE_METHOD_NAME, WLAN_PARAM_Integer, - struct hdd_config, sta_keepalive_method, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_STA_KEEPALIVE_METHOD_DEFAULT, - CFG_STA_KEEPALIVE_METHOD_MIN, - CFG_STA_KEEPALIVE_METHOD_MAX), - #ifdef ENABLE_MTRACE_LOG REG_VARIABLE(CFG_ENABLE_MTRACE, WLAN_PARAM_Integer, struct hdd_config, enable_mtrace, @@ -416,13 +384,6 @@ struct reg_table_entry g_registry_table[] = { CFG_LINK_SPEED_RSSI_LOW_MAX, NULL, 0), - REG_VARIABLE(CFG_ENABLE_MCC_ENABLED_NAME, WLAN_PARAM_Integer, - struct hdd_config, enableMCC, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ENABLE_MCC_ENABLED_DEFAULT, - CFG_ENABLE_MCC_ENABLED_MIN, - CFG_ENABLE_MCC_ENABLED_MAX), - REG_VARIABLE(CFG_ALLOW_MCC_GO_DIFF_BI_NAME, WLAN_PARAM_Integer, struct hdd_config, allowMCCGODiffBI, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, @@ -644,19 +605,6 @@ struct reg_table_entry g_registry_table[] = { VAR_FLAGS_OPTIONAL, (void *)CFG_ENABLE_FW_MODULE_LOG_DEFAULT), - REG_VARIABLE(CFG_ENABLE_SAP_SUSPEND, WLAN_PARAM_Integer, - struct hdd_config, enable_sap_suspend, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ENABLE_SAP_SUSPEND_DEFAULT, - CFG_ENABLE_SAP_SUSPEND_MIN, - CFG_ENABLE_SAP_SUSPEND_MAX), - - REG_VARIABLE(CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_NAME, WLAN_PARAM_Integer, - struct hdd_config, gEnableDeauthToDisassocMap, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_DEFAULT, - CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_MIN, - CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP_MAX), #ifdef DHCP_SERVER_OFFLOAD REG_VARIABLE_STRING(CFG_DHCP_SERVER_IP_NAME, WLAN_PARAM_String, struct hdd_config, dhcpServerIP, @@ -793,12 +741,6 @@ struct reg_table_entry g_registry_table[] = { CFG_ENABLE_LFR_SUBNET_MIN, CFG_ENABLE_LFR_SUBNET_MAX), #endif - REG_VARIABLE(CFG_INFORM_BSS_RSSI_RAW_NAME, WLAN_PARAM_Integer, - struct hdd_config, inform_bss_rssi_raw, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_INFORM_BSS_RSSI_RAW_DEFAULT, - CFG_INFORM_BSS_RSSI_RAW_MIN, - CFG_INFORM_BSS_RSSI_RAW_MAX), #ifdef WLAN_FEATURE_TSF #ifdef WLAN_FEATURE_TSF_PLUS diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 6b0e24e826..f5beb62110 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -13248,6 +13248,7 @@ static int __wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy, struct hdd_context *hdd_ctx; bool iff_up = ndev->flags & IFF_UP; enum QDF_OPMODE new_mode; + bool ap_random_bssid_enabled; QDF_STATUS status; int errno; @@ -13333,8 +13334,14 @@ static int __wlan_hdd_cfg80211_change_iface(struct wiphy *wiphy, memset(&adapter->session, 0, sizeof(adapter->session)); adapter->device_mode = new_mode; + status = ucfg_mlme_get_ap_random_bssid_enable( + hdd_ctx->psoc, + &ap_random_bssid_enabled); + if (QDF_IS_STATUS_ERROR(status)) + return qdf_status_to_os_return(status); + if (adapter->device_mode == QDF_SAP_MODE && - hdd_ctx->config->apRandomBssidEnabled) { + ap_random_bssid_enabled) { /* To meet Android requirements create * a randomized MAC address of the * form 02:1A:11:Fx:xx:xx @@ -17266,6 +17273,7 @@ static int __wlan_hdd_cfg80211_disconnect(struct wiphy *wiphy, WLAN_HDD_GET_STATION_CTX_PTR(adapter); struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); struct wlan_objmgr_vdev *vdev; + bool enable_deauth_to_disassoc_map; hdd_enter(); @@ -17322,9 +17330,14 @@ static int __wlan_hdd_cfg80211_disconnect(struct wiphy *wiphy, break; case WLAN_REASON_DEAUTH_LEAVING: + status = ucfg_mlme_get_enable_deauth_to_disassoc_map( + hdd_ctx->psoc, + &enable_deauth_to_disassoc_map); + if (QDF_IS_STATUS_ERROR(status)) + return -EINVAL; + reasonCode = - hdd_ctx->config-> - gEnableDeauthToDisassocMap ? + enable_deauth_to_disassoc_map ? eCSR_DISCONNECT_REASON_STA_HAS_LEFT : eCSR_DISCONNECT_REASON_DEAUTH; qdf_dp_trace_dump_all( diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 594bcca9c0..89afee44b5 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -9280,6 +9280,33 @@ static void hdd_init_packet_log(struct hdd_config *config, } #endif +#ifdef FEATURE_RUNTIME_PM +static void hdd_init_runtime_pm(struct hdd_config *config, + struct wlan_objmgr_psoc *psoc) +{ + config->runtime_pm = cfg_get(psoc, CFG_ENABLE_RUNTIME_PM); +} +#else +static void hdd_init_runtime_pm(struct hdd_config *config, + struct wlan_objmgr_psoc *psoc) + +{ +} +#endif + +#ifdef FEATURE_WLAN_DYNAMIC_CVM +static void hdd_init_vc_mode_cfg_bitmap(struct hdd_config *config, + struct wlan_objmgr_psoc *psoc) +{ + config->vc_mode_cfg_bitmap = cfg_get(psoc, CFG_VC_MODE_BITMAP); +} +#else +static void hdd_init_vc_mode_cfg_bitmap(struct hdd_config *config, + struct wlan_objmgr_psoc *psoc) +{ +} +#endif + /** * hdd_cfg_params_init() - Initialize hdd params in hdd_config strucuture * @hdd_ctx - Pointer to HDD context @@ -9326,7 +9353,11 @@ 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); + hdd_init_vc_mode_cfg_bitmap(config, psoc); + hdd_init_runtime_pm(config, psoc); hdd_init_wlan_auto_shutdown(config, psoc); hdd_init_wlan_logging_params(config, psoc); hdd_init_packet_log(config, psoc); diff --git a/core/hdd/src/wlan_hdd_power.c b/core/hdd/src/wlan_hdd_power.c index e28861c885..ca4a8361d8 100644 --- a/core/hdd/src/wlan_hdd_power.c +++ b/core/hdd/src/wlan_hdd_power.c @@ -753,6 +753,8 @@ static void __hdd_ipv4_notifier_work_queue(struct work_struct *work) int errno; struct csr_roam_profile *roam_profile; struct in_ifaddr *ifa; + enum station_keepalive_method val; + QDF_STATUS status; hdd_enter(); @@ -768,7 +770,11 @@ static void __hdd_ipv4_notifier_work_queue(struct work_struct *work) hdd_enable_arp_offload(adapter, pmo_ipv4_change_notify); - if (hdd_ctx->config->sta_keepalive_method == HDD_STA_KEEPALIVE_GRAT_ARP) + status = ucfg_mlme_get_sta_keepalive_method(hdd_ctx->psoc, &val); + if (QDF_IS_STATUS_ERROR(status)) + goto exit; + + if (val == MLME_STA_KEEPALIVE_GRAT_ARP) hdd_set_grat_arp_keepalive(adapter); hdd_debug("FILS Roaming support: %d", @@ -1730,7 +1736,8 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, wlan_hdd_inc_suspend_stats(hdd_ctx, SUSPEND_FAIL_RADAR); return -EAGAIN; - } else if (!hdd_ctx->config->enable_sap_suspend) { + } else if (!ucfg_pmo_get_enable_sap_suspend( + hdd_ctx->psoc)) { /* return -EOPNOTSUPP if SAP does not support * suspend */ @@ -1738,7 +1745,8 @@ static int __wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, return -EOPNOTSUPP; } } else if (QDF_P2P_GO_MODE == adapter->device_mode) { - if (!hdd_ctx->config->enable_sap_suspend) { + if (!!ucfg_pmo_get_enable_sap_suspend( + hdd_ctx->psoc)) { /* return -EOPNOTSUPP if GO does not support * suspend */