Browse Source

qcacld-3.0: Add 11K offload param to converged CFG component

Update driver to move 11K offload params to converged CFG component
and remove redundant entries from HDD config.

Change-Id: I7703ca5b23d5fa95a3b5dc5ccd9690771a4bf43d
CRs-fixed: 2357708
Manikandan Mohan 6 years ago
parent
commit
06d38d8c48

+ 38 - 3
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

+ 30 - 0
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);

+ 2 - 0
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 \

+ 225 - 0
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
+
+/*
+ * <ini>
+ * 11k_offload_enable_bitmask - 11K offload bitmask feature control
+ * @Min: 0
+ * @Max: 1
+ * @Default: 1
+ *
+ * Disabled when 0 and enabled when 1
+ * Usage: External
+ *
+ * </ini>
+ */
+#define CFG_OFFLOAD_11K_ENABLE_BITMASK CFG_INI_BOOL( \
+		"11k_offload_enable_bitmask", \
+		1, \
+		"11K offload bitmask feature control")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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")
+
+/*
+ * <ini>
+ * 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
+ *
+ * </ini>
+ */
+#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

+ 23 - 2
components/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h

@@ -27,8 +27,6 @@
 #include <wlan_cmn.h>
 #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

+ 46 - 0
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)
 {

+ 0 - 191
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)
 
-/*
- * <ini>
- * 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
- *
- * </ini>
- */
-
-#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
-/*
- * <ini>
- * 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
- *
- * </ini>
- */
-
-#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)
-
-/*
- * <ini>
- * 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
- *
- * </ini>
- */
-#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)
-
-/*
- * <ini>
- * 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
- *
- * </ini>
- */
-#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)
-
-/*
- * <ini>
- * 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
- *
- * </ini>
- */
-#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)
-
-/*
- * <ini>
- * 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
- *
- * </ini>
- */
-#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)
-
-/*
- * <ini>
- * 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
- *
- * </ini>
- */
-#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)
-
-/*
- * <ini>
- * 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
- *
- * </ini>
- */
-#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)
-
 /*
  * <ini>
  * 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;

+ 0 - 99
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))

+ 8 - 2
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;
 			}

+ 38 - 1
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);