diff --git a/components/fw_offload/core/inc/wlan_fw_offload_main.h b/components/fw_offload/core/inc/wlan_fw_offload_main.h index 5ec08e715f..5442ea1b79 100644 --- a/components/fw_offload/core/inc/wlan_fw_offload_main.h +++ b/components/fw_offload/core/inc/wlan_fw_offload_main.h @@ -109,11 +109,34 @@ struct wlan_fwol_ie_whitelist { uint32_t probe_req_voui[MAX_PROBE_REQ_OUIS]; }; +/** + * struct wlan_fwol_neighbor_report_cfg - Neighbor report config params + * @enable_bitmask: Neighbor report offload bitmask control + * @params_bitmask: Param validity bitmask + * @time_offset: Neighbor report frame time offset + * @low_rssi_offset: Low RSSI offset + * @bmiss_count_trigger: Beacon miss trigger count + * @per_threshold_offset: PER Threshold offset + * @cache_timeout: Cache timeout + * @max_req_cap: Max request per peer + */ +struct wlan_fwol_neighbor_report_cfg { + uint32_t enable_bitmask; + uint32_t params_bitmask; + uint32_t time_offset; + uint32_t low_rssi_offset; + uint32_t bmiss_count_trigger; + uint32_t per_threshold_offset; + uint32_t cache_timeout; + uint32_t max_req_cap; +}; + /** * struct wlan_fwol_cfg - fwol config items - * coex_config: coex config items - * thermal_temp_cfg: Thermal temperature related config items - * ie_whitelist_cfg: IE Whitelist related config items + * @coex_config: coex config items + * @thermal_temp_cfg: Thermal temperature related config items + * @ie_whitelist_cfg: IE Whitelist related config items + * @neighbor_report_cfg: 11K neighbor report config * @ani_enabled: ANI enable/disable * @enable_rts_sifsbursting: Enable RTS SIFS Bursting * @max_mpdus_inampdu: Max number of MPDUS @@ -139,6 +162,7 @@ struct wlan_fwol_cfg { struct wlan_fwol_coex_config coex_config; struct wlan_fwol_thermal_temp thermal_temp_cfg; struct wlan_fwol_ie_whitelist ie_whitelist_cfg; + struct wlan_fwol_neighbor_report_cfg neighbor_report_cfg; bool ani_enabled; bool enable_rts_sifsbursting; uint8_t max_mpdus_inampdu; @@ -201,4 +225,15 @@ QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc); * Return: QDF_STATUS */ QDF_STATUS fwol_cfg_on_psoc_disable(struct wlan_objmgr_psoc *psoc); + +/* + * fwol_init_neighbor_report_cfg() - Populate default neighbor report CFG values + * @psoc: pointer to the psoc object + * @fwol_neighbor_report_cfg: Pointer to Neighbor report config data structure + * + * Return: QDF_STATUS + */ +QDF_STATUS fwol_init_neighbor_report_cfg(struct wlan_objmgr_psoc *psoc, + struct wlan_fwol_neighbor_report_cfg + *fwol_neighbor_report_cfg); #endif diff --git a/components/fw_offload/core/src/wlan_fw_offload_main.c b/components/fw_offload/core/src/wlan_fw_offload_main.c index 4e0608e94e..617b73d2cd 100644 --- a/components/fw_offload/core/src/wlan_fw_offload_main.c +++ b/components/fw_offload/core/src/wlan_fw_offload_main.c @@ -87,6 +87,35 @@ fwol_init_thermal_temp_in_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_THROTTLE_DUTY_CYCLE_LEVEL3); } +QDF_STATUS fwol_init_neighbor_report_cfg(struct wlan_objmgr_psoc *psoc, + struct wlan_fwol_neighbor_report_cfg + *fwol_neighbor_report_cfg) +{ + if (!fwol_neighbor_report_cfg) { + fwol_err("Neighbor report config pointer null"); + return QDF_STATUS_E_FAILURE; + } + + fwol_neighbor_report_cfg->enable_bitmask = + cfg_get(psoc, CFG_OFFLOAD_11K_ENABLE_BITMASK); + fwol_neighbor_report_cfg->params_bitmask = + cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK); + fwol_neighbor_report_cfg->time_offset = + cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET); + fwol_neighbor_report_cfg->low_rssi_offset = + cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET); + fwol_neighbor_report_cfg->bmiss_count_trigger = + cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER); + fwol_neighbor_report_cfg->per_threshold_offset = + cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET); + fwol_neighbor_report_cfg->cache_timeout = + cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT); + fwol_neighbor_report_cfg->max_req_cap = + cfg_get(psoc, CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP); + + return QDF_STATUS_SUCCESS; +} + /** * fwol_parse_probe_req_ouis - form ouis from ini gProbeReqOUIs * @psoc: Pointer to struct wlan_objmgr_psoc context @@ -280,6 +309,7 @@ QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) fwol_init_coex_config_in_cfg(psoc, &fwol_cfg->coex_config); fwol_init_thermal_temp_in_cfg(psoc, &fwol_cfg->thermal_temp_cfg); fwol_init_ie_whiltelist_in_cfg(psoc, &fwol_cfg->ie_whitelist_cfg); + fwol_init_neighbor_report_cfg(psoc, &fwol_cfg->neighbor_report_cfg); fwol_cfg->ani_enabled = cfg_get(psoc, CFG_ENABLE_ANI); fwol_cfg->enable_rts_sifsbursting = cfg_get(psoc, CFG_SET_RTS_FOR_SIFS_BURSTING); diff --git a/components/fw_offload/dispatcher/inc/cfg_fwol.h b/components/fw_offload/dispatcher/inc/cfg_fwol.h index 91a2f75580..e1632b8c59 100644 --- a/components/fw_offload/dispatcher/inc/cfg_fwol.h +++ b/components/fw_offload/dispatcher/inc/cfg_fwol.h @@ -26,8 +26,10 @@ #include "cfg_thermal_temp.h" #include "cfg_ie_whitelist.h" #include "cfg_fwol_generic.h" +#include "cfg_neighbor_roam.h" #define CFG_FWOL_ALL \ + CFG_11K_ALL \ CFG_COEX_ALL \ CFG_FWOL_GENERIC_ALL \ CFG_IE_WHITELIST \ diff --git a/components/fw_offload/dispatcher/inc/cfg_neighbor_roam.h b/components/fw_offload/dispatcher/inc/cfg_neighbor_roam.h new file mode 100644 index 0000000000..d2b1c69bb6 --- /dev/null +++ b/components/fw_offload/dispatcher/inc/cfg_neighbor_roam.h @@ -0,0 +1,225 @@ +/* + * 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_NR_H +#define __CFG_NR_H + +/* + * + * 11k_offload_enable_bitmask - 11K offload bitmask feature control + * @Min: 0 + * @Max: 1 + * @Default: 1 + * + * Disabled when 0 and enabled when 1 + * Usage: External + * + * + */ +#define CFG_OFFLOAD_11K_ENABLE_BITMASK CFG_INI_BOOL( \ + "11k_offload_enable_bitmask", \ + 1, \ + "11K offload bitmask feature control") + +/* + * + * nr_offload_params_bitmask - bitmask to specify which of the + * neighbor report offload params are valid in the ini + * frame + * @Min: 0 + * @Max: 63 + * @Default: 63 + * + * This ini specifies which of the neighbor report offload params are valid + * and should be considered by the FW. The bitmask is as follows + * B0: nr_offload_time_offset + * B1: nr_offload_low_rssi_offset + * B2: nr_offload_bmiss_count_trigger + * B3: nr_offload_per_threshold_offset + * B4: nr_offload_cache_timeout + * B5: nr_offload_max_req_cap + * B6-B7: Reserved + * + * Related : 11k_offload_enable_bitmask + * + * Usage: External + * + * + */ +#define CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK CFG_INI_UINT( \ + "nr_offload_params_bitmask", \ + 0, \ + 63, \ + 63, \ + CFG_VALUE_OR_DEFAULT, \ + "Neighbor report offload params validity bitmask") + +#define OFFLOAD_11K_BITMASK_NEIGHBOR_REPORT_REQUEST 0x1 + +/* + * + * nr_offload_time_offset - time interval in seconds after the + * neighbor report offload command to send the first neighbor report request + * frame + * @Min: 0 + * @Max: 3600 + * @Default: 30 + * + * Related : nr_offload_params_bitmask + * + * Usage: External + * + * + */ +#define CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET CFG_INI_UINT( \ + "nr_offload_time_offset", \ + 0, \ + 3600, \ + 30, \ + CFG_VALUE_OR_DEFAULT, \ + "Neighbor report time offset") + +/* + * + * nr_offload_low_rssi_offset - offset from the roam RSSI threshold + * to trigger the neighbor report request frame (in dBm) + * @Min: 4 + * @Max: 10 + * @Default: 4 + * + * Related : nr_offload_params_bitmask + * + * Usage: External + * + * + */ +#define CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET CFG_INI_UINT( \ + "nr_offload_low_rssi_offset", \ + 4, \ + 10, \ + 4, \ + CFG_VALUE_OR_DEFAULT, \ + "Neighbor report low RSSI offset") + +/* + * + * nr_offload_bmiss_count_trigger - Number of beacon miss events to + * trigger a neighbor report request frame + * @Min: 1 + * @Max: 5 + * @Default: 1 + * + * Related : nr_offload_params_bitmask + * + * Usage: External + * + * + */ +#define CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER CFG_INI_UINT( \ + "nr_offload_bmiss_count_trigger", \ + 1, \ + 5, \ + 1, \ + CFG_VALUE_OR_DEFAULT, \ + "Beacon miss count trigger for neighbor report req frame") + +/* + * + * nr_offload_per_threshold_offset - offset from PER threshold to + * trigger a neighbor report request frame (in %) + * @Min: 5 + * @Max: 20 + * @Default: 5 + * + * This ini is used to set the neighbor report offload parameter: + * + * Related : nr_offload_params_bitmask + * + * Usage: External + * + * + */ +#define CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET CFG_INI_UINT( \ + "nr_offload_per_threshold_offset", \ + 5, \ + 20, \ + 5, \ + CFG_VALUE_OR_DEFAULT, \ + "PER threshold offset to trigger neighbor report req frame") + +/* + * + * nr_offload_cache_timeout - time in seconds after which the + * neighbor report cache is marked as timed out and any of the triggers would + * cause a neighbor report request frame to be sent. + * @Min: 5 + * @Max: 86400 + * @Default: 1200 + * + * Related : nr_offload_params_bitmask + * + * Usage: External + * + * + */ +#define CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT CFG_INI_UINT( \ + "nr_offload_cache_timeout", \ + 5, \ + 86400, \ + 1200, \ + CFG_VALUE_OR_DEFAULT, \ + "Neighbor report cache timeout to trigger report req frame") + +/* + * + * nr_offload_max_req_cap - Max number of neighbor + * report requests that can be sent to a connected peer in the current session. + * This counter is reset once a successful roam happens or at cache timeout + * @Min: 3 + * @Max: 300 + * @Default: 3 + * + * Related : nr_offload_params_bitmask + * + * Usage: External + * + * + */ +#define CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP CFG_INI_UINT( \ + "nr_offload_max_req_cap", \ + 3, \ + 300, \ + 3, \ + CFG_VALUE_OR_DEFAULT, \ + "Max neighbor report request to be sent to connected peer") + +#define CFG_11K_ALL \ + CFG(CFG_OFFLOAD_11K_ENABLE_BITMASK) \ + CFG(CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK) \ + CFG(CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET) \ + CFG(CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET) \ + CFG(CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER) \ + CFG(CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET) \ + CFG(CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT) \ + CFG(CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP) + +#endif diff --git a/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h b/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h index f2066cb3bd..8611f351ed 100644 --- a/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h +++ b/components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h @@ -27,8 +27,6 @@ #include #include "wlan_fw_offload_main.h" -#include "wlan_fw_offload_main.h" - /** * ucfg_fwol_psoc_open() - FWOL component Open * @psoc: pointer to psoc object @@ -89,6 +87,29 @@ QDF_STATUS ucfg_fwol_get_thermal_temp(struct wlan_objmgr_psoc *psoc, struct wlan_fwol_thermal_temp *thermal_temp); +/** + * ucfg_fwol_get_neighbor_report_cfg() - Get neighbor report config params + * @psoc: Pointer to psoc object + * @fwol_neighbor_report_cfg: Pointer to return neighbor report config + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_fwol_get_neighbor_report_cfg(struct wlan_objmgr_psoc *psoc, + struct wlan_fwol_neighbor_report_cfg + *fwol_neighbor_report_cfg); + +/** + * ucfg_fwol_get_neighbor_report_req() - Get neighbor report request bit + * @psoc: Pointer to psoc object + * @neighbor_report_req: Pointer to return value + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_fwol_is_neighbor_report_req_supported(struct wlan_objmgr_psoc *psoc, + bool *neighbor_report_req); + /** * ucfg_fwol_get_ie_whitelist() - Get IE whitelist param value * @psoc: Pointer to psoc object diff --git a/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c b/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c index f75bbcb5e4..64f557fdc4 100644 --- a/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c +++ b/components/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c @@ -182,6 +182,52 @@ ucfg_fwol_get_thermal_temp(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS +ucfg_fwol_get_neighbor_report_cfg(struct wlan_objmgr_psoc *psoc, + struct wlan_fwol_neighbor_report_cfg + *fwol_neighbor_report_cfg) +{ + struct wlan_fwol_psoc_obj *fwol_obj; + QDF_STATUS status = QDF_STATUS_SUCCESS; + + if (!fwol_neighbor_report_cfg) + return QDF_STATUS_E_FAILURE; + + fwol_obj = fwol_get_psoc_obj(psoc); + if (!fwol_obj) { + fwol_err("Failed to get fwol obj"); + fwol_init_neighbor_report_cfg(psoc, fwol_neighbor_report_cfg); + status = QDF_STATUS_E_FAILURE; + } else { + fwol_neighbor_report_cfg = &fwol_obj->cfg.neighbor_report_cfg; + } + + return status; +} + +QDF_STATUS +ucfg_fwol_is_neighbor_report_req_supported(struct wlan_objmgr_psoc *psoc, + bool *neighbor_report_req) +{ + struct wlan_fwol_psoc_obj *fwol_obj; + + fwol_obj = fwol_get_psoc_obj(psoc); + if (!fwol_obj) { + fwol_err("Failed to get fwol obj"); + *neighbor_report_req = + !!(cfg_get(psoc, + CFG_OFFLOAD_11K_ENABLE_BITMASK) & + OFFLOAD_11K_BITMASK_NEIGHBOR_REPORT_REQUEST); + return QDF_STATUS_E_FAILURE; + } + + *neighbor_report_req = + !!(fwol_obj->cfg.neighbor_report_cfg.enable_bitmask & + OFFLOAD_11K_BITMASK_NEIGHBOR_REPORT_REQUEST); + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS ucfg_fwol_get_ie_whitelist(struct wlan_objmgr_psoc *psoc, bool *ie_whitelist) { diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 7ce3dc82a1..a603866da5 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -1652,189 +1652,6 @@ enum hdd_dot11_mode { #define CFG_ENABLE_GCMP_MAX (1) #define CFG_ENABLE_GCMP_DEFAULT (1) -/* - * - * 11k_offload_enable_bitmask - Bitmask to enable 11k offload to FW - * @Min: 0 - * @Max: 1 - * @Default: 1 - * - * This ini is used to set which of the 11k features is offloaded to FW - * Currently Neighbor Report Request is supported for offload and is enabled - * by default - * B0: Offload 11k neighbor report requests - * B1-B31: Reserved - * - * Related : None - * - * Usage: External - * - * - */ - -#define CFG_OFFLOAD_11K_ENABLE_BITMASK_NAME "11k_offload_enable_bitmask" -#define CFG_OFFLOAD_11K_ENABLE_BITMASK_MIN (0) -#define CFG_OFFLOAD_11K_ENABLE_BITMASK_MAX (1) -#define CFG_OFFLOAD_11K_ENABLE_BITMASK_DEFAULT (1) - -#define OFFLOAD_11K_BITMASK_NEIGHBOR_REPORT_REQUEST 0x1 -/* - * - * nr_offload_params_bitmask - bitmask to specify which of the - * neighbor report offload params are valid in the ini - * frame - * @Min: 0 - * @Max: 63 - * @Default: 63 - * - * This ini specifies which of the neighbor report offload params are valid - * and should be considered by the FW. The bitmask is as follows - * B0: nr_offload_time_offset - * B1: nr_offload_low_rssi_offset - * B2: nr_offload_bmiss_count_trigger - * B3: nr_offload_per_threshold_offset - * B4: nr_offload_cache_timeout - * B5: nr_offload_max_req_cap - * B6-B7: Reserved - * - * Related : 11k_offload_enable_bitmask - * - * Usage: External - * - * - */ - -#define CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_NAME \ - "nr_offload_params_bitmask" -#define CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_MIN (0) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_MAX (63) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_DEFAULT (63) - -/* - * - * nr_offload_time_offset - time interval in seconds after the - * neighbor report offload command to send the first neighbor report request - * frame - * @Min: 0 - * @Max: 3600 - * @Default: 30 - * - * Related : nr_offload_params_bitmask - * - * Usage: External - * - * - */ -#define CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_NAME \ - "nr_offload_time_offset" -#define CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_MIN (0) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_MAX (3600) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_DEFAULT (30) - -/* - * - * nr_offload_low_rssi_offset - offset from the roam RSSI threshold - * to trigger the neighbor report request frame (in dBm) - * @Min: 4 - * @Max: 10 - * @Default: 4 - * - * Related : nr_offload_params_bitmask - * - * Usage: External - * - * - */ -#define CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_NAME \ - "nr_offload_low_rssi_offset" -#define CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_MIN (4) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_MAX (10) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_DEFAULT (4) - -/* - * - * nr_offload_bmiss_count_trigger - Number of beacon miss events to - * trigger a neighbor report request frame - * @Min: 1 - * @Max: 5 - * @Default: 1 - * - * Related : nr_offload_params_bitmask - * - * Usage: External - * - * - */ -#define CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_NAME \ - "nr_offload_bmiss_count_trigger" -#define CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_MIN (1) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_MAX (5) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_DEFAULT (1) - -/* - * - * nr_offload_per_threshold_offset - offset from PER threshold to - * trigger a neighbor report request frame (in %) - * @Min: 5 - * @Max: 20 - * @Default: 5 - * - * This ini is used to set the neighbor report offload parameter: - * - * Related : nr_offload_params_bitmask - * - * Usage: External - * - * - */ -#define CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_NAME \ - "nr_offload_per_threshold_offset" -#define CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_MIN (5) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_MAX (20) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_DEFAULT (5) - -/* - * - * nr_offload_cache_timeout - time in seconds after which the - * neighbor report cache is marked as timed out and any of the triggers would - * cause a neighbor report request frame to be sent. - * @Min: 5 - * @Max: 86400 - * @Default: 1200 - * - * Related : nr_offload_params_bitmask - * - * Usage: External - * - * - */ -#define CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_NAME \ - "nr_offload_cache_timeout" -#define CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_MIN (5) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_MAX (86400) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_DEFAULT (1200) - -/* - * - * nr_offload_max_req_cap - Max number of neighbor - * report requests that can be sent to a connected peer in the current session. - * This counter is reset once a successful roam happens or at cache timeout - * @Min: 3 - * @Max: 300 - * @Default: 3 - * - * Related : nr_offload_params_bitmask - * - * Usage: External - * - * - */ -#define CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_NAME \ - "nr_offload_max_req_cap" -#define CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_MIN (3) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_MAX (300) -#define CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_DEFAULT (3) - /* * * gTxSchDelay - Enable/Disable Tx sch delay @@ -2052,14 +1869,6 @@ struct hdd_config { #endif bool gcmp_enabled; bool is_11k_offload_supported; - uint32_t offload_11k_enable_bitmask; - uint32_t neighbor_report_offload_params_bitmask; - uint32_t neighbor_report_offload_time_offset; - uint32_t neighbor_report_offload_low_rssi_offset; - uint32_t neighbor_report_offload_bmiss_count_trigger; - uint32_t neighbor_report_offload_per_threshold_offset; - uint32_t neighbor_report_offload_cache_timeout; - uint32_t neighbor_report_offload_max_req_cap; bool action_oui_enable; uint8_t action_oui_str[ACTION_OUI_MAXIMUM_ID][ACTION_OUI_MAX_STR_LEN]; uint8_t enable_tx_sch_delay; diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 5152fc38d9..09bae7c8c2 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -546,72 +546,6 @@ struct reg_table_entry g_registry_table[] = { CFG_ENABLE_GCMP_MIN, CFG_ENABLE_GCMP_MAX), - REG_VARIABLE(CFG_OFFLOAD_11K_ENABLE_BITMASK_NAME, - WLAN_PARAM_Integer, - struct hdd_config, offload_11k_enable_bitmask, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OFFLOAD_11K_ENABLE_BITMASK_DEFAULT, - CFG_OFFLOAD_11K_ENABLE_BITMASK_MIN, - CFG_OFFLOAD_11K_ENABLE_BITMASK_MAX), - - REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_NAME, - WLAN_PARAM_Integer, - struct hdd_config, neighbor_report_offload_params_bitmask, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_MIN, - CFG_OFFLOAD_NEIGHBOR_REPORT_PARAMS_BITMASK_MAX), - - REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_NAME, - WLAN_PARAM_Integer, - struct hdd_config, neighbor_report_offload_time_offset, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_MIN, - CFG_OFFLOAD_NEIGHBOR_REPORT_TIME_OFFSET_MAX), - - REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_NAME, - WLAN_PARAM_Integer, - struct hdd_config, neighbor_report_offload_low_rssi_offset, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_MIN, - CFG_OFFLOAD_NEIGHBOR_REPORT_LOW_RSSI_OFFSET_MAX), - - REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_NAME, - WLAN_PARAM_Integer, - struct hdd_config, - neighbor_report_offload_bmiss_count_trigger, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_MIN, - CFG_OFFLOAD_NEIGHBOR_REPORT_BMISS_COUNT_TRIGGER_MAX), - - REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_NAME, - WLAN_PARAM_Integer, - struct hdd_config, - neighbor_report_offload_per_threshold_offset, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_MIN, - CFG_OFFLOAD_NEIGHBOR_REPORT_PER_THRESHOLD_OFFSET_MAX), - - REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_NAME, - WLAN_PARAM_Integer, - struct hdd_config, neighbor_report_offload_cache_timeout, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_MIN, - CFG_OFFLOAD_NEIGHBOR_REPORT_CACHE_TIMEOUT_MAX), - - REG_VARIABLE(CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_NAME, - WLAN_PARAM_Integer, - struct hdd_config, neighbor_report_offload_max_req_cap, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_DEFAULT, - CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_MIN, - CFG_OFFLOAD_NEIGHBOR_REPORT_MAX_REQ_CAP_MAX), - REG_VARIABLE(CFG_TX_SCH_DELAY_NAME, WLAN_PARAM_Integer, struct hdd_config, enable_tx_sch_delay, @@ -2002,36 +1936,6 @@ eCsrRoamWmmUserModeType hdd_to_csr_wmm_mode(uint8_t mode) } } -/** - * hdd_update_11k_offload_params() - initializes the 11k offload related params - * - * @config: pointer to hdd_config structure - * @csr_config: pointer to the csr config structure - * - * Return: None - */ -static -void hdd_update_11k_offload_params(struct hdd_config *config, - tCsrConfigParam *csr_config) -{ - csr_config->offload_11k_enable_bitmask = - config->offload_11k_enable_bitmask; - csr_config->neighbor_report_offload.params_bitmask = - config->neighbor_report_offload_params_bitmask; - csr_config->neighbor_report_offload.time_offset = - config->neighbor_report_offload_time_offset; - csr_config->neighbor_report_offload.low_rssi_offset = - config->neighbor_report_offload_low_rssi_offset; - csr_config->neighbor_report_offload.bmiss_count_trigger = - config->neighbor_report_offload_bmiss_count_trigger; - csr_config->neighbor_report_offload.per_threshold_offset = - config->neighbor_report_offload_per_threshold_offset; - csr_config->neighbor_report_offload.neighbor_report_cache_timeout = - config->neighbor_report_offload_cache_timeout; - csr_config->neighbor_report_offload.max_neighbor_report_req_cap = - config->neighbor_report_offload_max_req_cap; -} - static QDF_STATUS hdd_set_sme_cfgs_related_to_plcy_mgr(struct hdd_context *hdd_ctx, tSmeConfigParams *sme_cfg) @@ -2285,9 +2189,6 @@ QDF_STATUS hdd_set_sme_config(struct hdd_context *hdd_ctx) 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)) diff --git a/core/hdd/src/wlan_hdd_wext.c b/core/hdd/src/wlan_hdd_wext.c index 417ca252ba..e736afa69f 100644 --- a/core/hdd/src/wlan_hdd_wext.c +++ b/core/hdd/src/wlan_hdd_wext.c @@ -111,6 +111,7 @@ #include "cfg_mlme_threshold.h" #include "wlan_pmo_cfg.h" #include "wlan_pmo_ucfg_api.h" +#include "wlan_fwol_ucfg_api.h" /* Private ioctls and their sub-ioctls */ #define WLAN_PRIV_SET_INT_GET_NONE (SIOCIWFIRSTPRIV + 0) @@ -5483,6 +5484,7 @@ static int __iw_setchar_getnone(struct net_device *dev, struct hdd_adapter *adapter = (netdev_priv(dev)); struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); struct iw_point s_priv_data; + bool neighbor_report_req_support = false; hdd_enter_dev(dev); @@ -5559,9 +5561,13 @@ static int __iw_setchar_getnone(struct net_device *dev, * If 11k offload is supported by FW and enabled * in the ini, set the offload to true */ + if (QDF_IS_STATUS_ERROR( + ucfg_fwol_is_neighbor_report_req_supported( + hdd_ctx->psoc, &neighbor_report_req_support))) + hdd_err("Neighbor report req bit get fail"); + if (hdd_ctx->config->is_11k_offload_supported && - (hdd_ctx->config->offload_11k_enable_bitmask & - OFFLOAD_11K_BITMASK_NEIGHBOR_REPORT_REQUEST)) { + neighbor_report_req_support) { hdd_debug("Neighbor report offloaded to FW"); neighborReq.neighbor_report_offload = true; } diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 265a4cd0e1..9ac4105f8b 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -858,6 +858,43 @@ void sme_update_fine_time_measurement_capab(mac_handle_t mac_handle, } } +/** + * sme_update_neighbor_report_config() - Update CSR config for 11k params + * @mac_handle: Pointer to MAC context + * @csr_config: Pointer to CSR config data structure + * + * Return: None + */ +static void sme_update_neighbor_report_config(struct mac_context *mac, + tCsrConfigParam *csr_config) +{ + struct wlan_fwol_neighbor_report_cfg fwol_neighbor_report_cfg = {0}; + QDF_STATUS status; + + status = ucfg_fwol_get_neighbor_report_cfg(mac->psoc, + &fwol_neighbor_report_cfg); + if (!QDF_IS_STATUS_SUCCESS(status)) + sme_err("Using defaults for 11K offload params: Error: %d", + status); + + csr_config->offload_11k_enable_bitmask = + fwol_neighbor_report_cfg.enable_bitmask; + csr_config->neighbor_report_offload.params_bitmask = + fwol_neighbor_report_cfg.params_bitmask; + csr_config->neighbor_report_offload.time_offset = + fwol_neighbor_report_cfg.time_offset; + csr_config->neighbor_report_offload.low_rssi_offset = + fwol_neighbor_report_cfg.low_rssi_offset; + csr_config->neighbor_report_offload.bmiss_count_trigger = + fwol_neighbor_report_cfg.bmiss_count_trigger; + csr_config->neighbor_report_offload.per_threshold_offset = + fwol_neighbor_report_cfg.per_threshold_offset; + csr_config->neighbor_report_offload.neighbor_report_cache_timeout = + fwol_neighbor_report_cfg.cache_timeout; + csr_config->neighbor_report_offload.max_neighbor_report_req_cap = + fwol_neighbor_report_cfg.max_req_cap; +} + /* * sme_update_config() - Change configurations for all SME moduels * The function updates some configuration for modules in SME, CSR, etc @@ -884,7 +921,7 @@ QDF_STATUS sme_update_config(mac_handle_t mac_handle, tpSmeConfigParams sme_err("SME config params empty"); return status; } - + sme_update_neighbor_report_config(mac, &pSmeConfigParams->csrConfig); status = csr_change_default_config_param(mac, &pSmeConfigParams-> csrConfig);