Просмотр исходного кода

qcacld-3.0: Add FW offload INI items (2)

Add the following fw param ini items to the fw offload component

CFG_ENABLE_SMART_CHAINMASK - gEnableSmartChainmask
CFG_ENABLE_FW_RTS_PROFILE - gEnableRTSProfiles
CFG_ENABLE_FW_DEBUG_LOG_LEVEL - gFwDebugLogLevel
CFG_ENABLE_FW_LOG_TYPE - gFwDebugLogType
CFG_RA_FILTER_ENABLE - gRAFilterEnable
CFG_SET_TSF_GPIO_PIN - gtsf_gpio_pin
CFG_DHCP_SERVER_OFFLOAD_SUPPORT - gEnableDeauthToDisassocMap
CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT - gDHCPMaxNumClients

Change-Id: I296e095cf2a7b83856e1ab777c7dbdcc005ee96a
CRs-Fixed: 2316269
Sourav Mohapatra 6 лет назад
Родитель
Сommit
b6740f6150

+ 22 - 0
fw_offload/core/inc/wlan_fw_offload_main.h

@@ -121,6 +121,14 @@ struct wlan_fwol_ie_whitelist {
  * @lower_brssi_thresh: Lower BRSSI threshold
  * @enable_dtim_1chrx: Enable/disable DTIM 1 CHRX
  * @alternative_chainmask_enabled: Alternate chainmask
+ * @smart_chainmask_enabled: Enable/disable chainmask
+ * @get_rts_profile: Set the RTS profile
+ * @enable_fw_log_level: Set the FW log level
+ * @enable_fw_log_type: Set the FW log type
+ * @is_rate_limit_enabled: Enable/disable RA rate limited
+ * @tsf_gpio_pin: TSF GPIO Pin config
+ * @enable_dhcp_server_offload: DHCP Offload is enabled or not
+ * @dhcp_max_num_clients: Max number of DHCP client supported
  */
 struct wlan_fwol_cfg {
 	/* Add CFG and INI items here */
@@ -136,6 +144,20 @@ struct wlan_fwol_cfg {
 	uint16_t lower_brssi_thresh;
 	bool enable_dtim_1chrx;
 	bool alternative_chainmask_enabled;
+	bool smart_chainmask_enabled;
+	uint16_t get_rts_profile;
+	uint16_t enable_fw_log_level;
+	uint16_t enable_fw_log_type;
+#ifdef FEATURE_WLAN_RA_FILTERING
+	bool is_rate_limit_enabled;
+#endif
+#ifdef WLAN_FEATURE_TSF
+	uint32_t tsf_gpio_pin;
+#endif
+#ifdef DHCP_SERVER_OFFLOAD
+	bool enable_dhcp_server_offload;
+	uint32_t dhcp_max_num_clients;
+#endif
 };
 
 /**

+ 73 - 0
fw_offload/core/src/wlan_fw_offload_main.c

@@ -91,6 +91,70 @@ fwol_init_ie_whiltelist_in_cfg(struct wlan_objmgr_psoc *psoc,
 	whitelist->ie_bitmap_7 = cfg_get(psoc, CFG_PROBE_REQ_IE_BIT_MAP7);
 }
 
+/**
+ * ucfg_fwol_fetch_dhcp_server_settings: Populate the enable_dhcp_server_offload
+ * and dhcp_max_num_clients from cfg
+ * @psoc: The global psoc handler
+ * @fwol_cfg: The cfg structure
+ *
+ * Return: none
+ */
+#ifdef DHCP_SERVER_OFFLOAD
+static void ucfg_fwol_fetch_dhcp_server_settings(struct wlan_objmgr_psoc *psoc,
+						 struct wlan_fwol_cfg *fwol_cfg)
+{
+	fwol_cfg->enable_dhcp_server_offload =
+			cfg_get(psoc, CFG_DHCP_SERVER_OFFLOAD_SUPPORT);
+	fwol_cfg->dhcp_max_num_clients =
+			cfg_get(psoc, CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT);
+}
+#else
+static void ucfg_fwol_fetch_dhcp_server_settings(struct wlan_objmgr_psoc *psoc,
+						 struct wlan_fwol_cfg *fwol_cfg)
+{
+}
+#endif
+
+/**
+ * ucfg_fwol_fetch_tsf_gpio_pin: Populate the tsf_gpio_pin from cfg
+ * @psoc: The global psoc handler
+ * @fwol_cfg: The cfg structure
+ *
+ * Return: none
+ */
+#ifdef WLAN_FEATURE_TSF
+static void ucfg_fwol_fetch_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
+					 struct wlan_fwol_cfg *fwol_cfg)
+{
+	fwol_cfg->tsf_gpio_pin = cfg_get(psoc, CFG_SET_TSF_GPIO_PIN);
+}
+#else
+static void ucfg_fwol_fetch_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
+					 struct wlan_fwol_cfg *fwol_cfg)
+{
+}
+#endif
+
+/**
+ * ucfg_fwol_fetch_ra_filter: Populate the RA filter enabled or not from cfg
+ * @psoc: The global psoc handler
+ * @fwol_cfg: The cfg structure
+ *
+ * Return: none
+ */
+#ifdef FEATURE_WLAN_RA_FILTERING
+static void ucfg_fwol_fetch_ra_filter(struct wlan_objmgr_psoc *psoc,
+				      struct wlan_fwol_cfg *fwol_cfg)
+{
+	fwol_cfg->is_rate_limit_enabled = cfg_get(psoc, CFG_RA_FILTER_ENABLE);
+}
+#else
+static void ucfg_fwol_fetch_ra_filter(struct wlan_objmgr_psoc *psoc,
+				      struct wlan_fwol_cfg *fwol_cfg)
+{
+}
+#endif
+
 QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
 {
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
@@ -119,6 +183,15 @@ QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
 	fwol_cfg->enable_dtim_1chrx = cfg_get(psoc, CFG_DTIM_1CHRX_ENABLE);
 	fwol_cfg->alternative_chainmask_enabled =
 				cfg_get(psoc, CFG_ENABLE_COEX_ALT_CHAINMASK);
+	fwol_cfg->smart_chainmask_enabled =
+				cfg_get(psoc, CFG_ENABLE_SMART_CHAINMASK);
+	fwol_cfg->get_rts_profile = cfg_get(psoc, CFG_ENABLE_FW_RTS_PROFILE);
+	fwol_cfg->enable_fw_log_level =
+				cfg_get(psoc, CFG_ENABLE_FW_DEBUG_LOG_LEVEL);
+	fwol_cfg->enable_fw_log_type = cfg_get(psoc, CFG_ENABLE_FW_LOG_TYPE);
+	ucfg_fwol_fetch_ra_filter(psoc, fwol_cfg);
+	ucfg_fwol_fetch_tsf_gpio_pin(psoc, fwol_cfg);
+	ucfg_fwol_fetch_dhcp_server_settings(psoc, fwol_cfg);
 
 	return status;
 }

+ 214 - 1
fw_offload/dispatcher/inc/cfg_fwol_generic.h

@@ -233,8 +233,215 @@
 		0, \
 		"Enable Co-Ex Alternative Chainmask")
 
+/*
+ * <ini>
+ * gEnableSmartChainmask - Enable Smart Chainmask
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * This ini is used to enable/disable the Smart Chainmask feature via
+ * the WMI_PDEV_PARAM_SMART_CHAINMASK_SCHEME firmware parameter.
+ *
+ * Related: None
+ *
+ * Supported Feature: STA
+ *
+ * Usage: Internal/External
+ *
+ * </ini>
+ */
+#define CFG_ENABLE_SMART_CHAINMASK CFG_INI_BOOL( \
+		"gEnableSmartChainmask", \
+		0, \
+		"Enable/disable the Smart Chainmask feature")
+
+/*
+ * <ini>
+ * gEnableRTSProfiles - It will use configuring different RTS profiles
+ * @Min: 0
+ * @Max: 66
+ * @Default: 33
+ *
+ * This ini used for configuring different RTS profiles
+ * to firmware.
+ * Following are the valid values for the rts profile:
+ * RTSCTS_DISABLED				0
+ * NOT_ALLOWED					1
+ * NOT_ALLOWED					2
+ * RTSCTS_DISABLED				16
+ * RTSCTS_ENABLED_4_SECOND_RATESERIES		17
+ * CTS2SELF_ENABLED_4_SECOND_RATESERIES		18
+ * RTSCTS_DISABLED				32
+ * RTSCTS_ENABLED_4_SWRETRIES			33
+ * CTS2SELF_ENABLED_4_SWRETRIES			34
+ * NOT_ALLOWED					48
+ * NOT_ALLOWED					49
+ * NOT_ALLOWED					50
+ * RTSCTS_DISABLED				64
+ * RTSCTS_ENABLED_4_ALL_RATESERIES		65
+ * CTS2SELF_ENABLED_4_ALL_RATESERIES		66
+ *
+ * Related: None
+ *
+ * Supported Feature: STA
+ *
+ * Usage: Internal/External
+ *
+ * </ini>
+ */
+#define CFG_ENABLE_FW_RTS_PROFILE CFG_INI_INT( \
+		"gEnableRTSProfiles", \
+		0, \
+		66, \
+		33, \
+		CFG_VALUE_OR_DEFAULT, \
+		"It is used to configure different RTS profiles")
+
+/* <ini>
+ * gFwDebugLogLevel: Takes values from enum DBGLOG_LOG_LVL,
+ * make default value as DBGLOG_WARN to enable error and
+ * warning logs by default.
+ * @Min: 0
+ * @Max: 255
+ * @Default: 3
+ *
+ * Related: None
+ *
+ * Supported Features: Debugging
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+#define CFG_ENABLE_FW_DEBUG_LOG_LEVEL CFG_INI_INT( \
+		"gFwDebugLogLevel", \
+		0, \
+		255, \
+		3, \
+		CFG_VALUE_OR_DEFAULT, \
+		"enable error and warning logs by default")
+
+/* <ini>
+ * gFwDebugLogType: takes values from enum dbglog_process_t,
+ * make default value as DBGLOG_PROCESS_NET_RAW to give the
+ * logs to net link since cnss_diag service is started at boot
+ * time by default.
+ * @Min: 0
+ * @Max: 255
+ * @Default: 3
+ *
+ * Related: None
+ *
+ * Supported Features: Debugging
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+#define CFG_ENABLE_FW_LOG_TYPE CFG_INI_INT( \
+		"gFwDebugLogType", \
+		0, \
+		255, \
+		3, \
+		CFG_VALUE_OR_DEFAULT, \
+		"Default value to be given to the net link cnss_diag service")
+
+#ifdef FEATURE_WLAN_RA_FILTERING
+/* <ini>
+ * gRAFilterEnable
+ * @Min: 0
+ * @Max: 1
+ * @Default: 1
+ *
+ * Related: None
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+#define CFG_RA_FILTER_ENABLE CFG_INI_BOOL( \
+		"gRAFilterEnable", \
+		1, \
+		"Enable RA Filter")
+#else
+#define CFG_RA_FILTER_ENABLE
+#endif
+
+/* <ini>
+ * gtsf_gpio_pin
+ * @Min: 0
+ * @Max: 254
+ * @Default: 255
+ *
+ * GPIO pin to toggle when capture tsf
+ *
+ * Related: None
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+#define CFG_SET_TSF_GPIO_PIN CFG_INI_INT( \
+		"gtsf_gpio_pin", \
+		0, \
+		254, \
+		255, \
+		CFG_VALUE_OR_DEFAULT, \
+		"GPIO pin to toggle when capture tsf")
+
+#ifdef DHCP_SERVER_OFFLOAD
+/* <ini>
+ * gEnableDeauthToDisassocMap
+ * @Min: 0
+ * @Max: 1
+ * @Default: 0
+ *
+ * DHCP Server offload support
+ *
+ * Related: None
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+#define CFG_DHCP_SERVER_OFFLOAD_SUPPORT CFG_INI_BOOL( \
+		"gEnableDeauthToDisassocMap", \
+		0, \
+		"DHCP Server offload support")
+
+/* <ini>
+ * gDHCPMaxNumClients
+ * @Min: 1
+ * @Max: 8
+ * @Default: 8
+ *
+ * Number of DHCP server offload clients
+ *
+ * Related: None
+ *
+ * Usage: Internal
+ *
+ * </ini>
+ */
+#define CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT CFG_INI_INT( \
+		"gDHCPMaxNumClients", \
+		1, \
+		8, \
+		8, \
+		CFG_VALUE_OR_DEFAULT, \
+		"Number of DHCP server offload clients")
+
+#define CFG_FWOL_DHCP \
+		CFG(CFG_DHCP_SERVER_OFFLOAD_SUPPORT) \
+		CFG(CFG_DHCP_SERVER_OFFLOAD_NUM_CLIENT)
+
+#else
+#define CFG_FWOL_DHCP
+#endif
 
 #define CFG_FWOL_GENERIC_ALL \
+	CFG_FWOL_DHCP \
 	CFG(CFG_ENABLE_ANI) \
 	CFG(CFG_SET_RTS_FOR_SIFS_BURSTING) \
 	CFG(CFG_MAX_MPDUS_IN_AMPDU) \
@@ -243,6 +450,12 @@
 	CFG(CFG_UPPER_BRSSI_THRESH) \
 	CFG(CFG_LOWER_BRSSI_THRESH) \
 	CFG(CFG_DTIM_1CHRX_ENABLE) \
-	CFG(CFG_ENABLE_COEX_ALT_CHAINMASK)
+	CFG(CFG_ENABLE_COEX_ALT_CHAINMASK) \
+	CFG(CFG_ENABLE_SMART_CHAINMASK) \
+	CFG(CFG_ENABLE_FW_RTS_PROFILE) \
+	CFG(CFG_ENABLE_FW_DEBUG_LOG_LEVEL) \
+	CFG(CFG_ENABLE_FW_LOG_TYPE) \
+	CFG(CFG_RA_FILTER_ENABLE) \
+	CFG(CFG_SET_TSF_GPIO_PIN)
 
 #endif

+ 88 - 0
fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h

@@ -209,4 +209,92 @@ QDF_STATUS
 ucfg_get_alternative_chainmask_enabled(struct wlan_objmgr_psoc *psoc,
 				       bool *alternative_chainmask_enabled);
 
+/**
+ * ucfg_get_smart_chainmask_enabled() - Assigns smart_chainmask_enabled value
+ * @psoc: pointer to the psoc object
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS ucfg_get_smart_chainmask_enabled(struct wlan_objmgr_psoc *psoc,
+					    bool *smart_chainmask_enabled);
+
+/**
+ * ucfg_fwol_get_rts_profile() - Assigns get_rts_profile value
+ * @psoc: pointer to the psoc object
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS ucfg_fwol_get_rts_profile(struct wlan_objmgr_psoc *psoc,
+				     uint16_t *get_rts_profile);
+
+/**
+ * ucfg_fwol_get_enable_fw_log_level() - Assigns enable_fw_log_level value
+ * @psoc: pointer to the psoc object
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS ucfg_fwol_get_enable_fw_log_level(struct wlan_objmgr_psoc *psoc,
+					     uint16_t *enable_fw_log_level);
+
+/**
+ * ucfg_fwol_get_enable_fw_log_type() - Assigns enable_fw_log_type value
+ * @psoc: pointer to the psoc object
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS ucfg_fwol_get_enable_fw_log_type(struct wlan_objmgr_psoc *psoc,
+					    uint16_t *enable_fw_log_type);
+
+#ifdef FEATURE_WLAN_RA_FILTERING
+/**
+ * ucfg_fwol_set_is_rate_limit_enabled() - Sets the is_rate_limit_enabled value
+ * @psoc: pointer to the psoc object
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS ucfg_fwol_set_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc,
+					       bool is_rate_limit_enabled);
+
+/**
+ * ucfg_fwol_get_is_rate_limit_enabled() - Assigns is_rate_limit_enabled value
+ * @psoc: pointer to the psoc object
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS ucfg_fwol_get_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc,
+					       bool *is_rate_limit_enabled);
+
+#endif /* FEATURE_WLAN_RA_FILTERING */
+
+/**
+ * ucfg_fwol_get_tsf_gpio_pin() - Assigns tsf_gpio_pin value
+ * @psoc: pointer to the psoc object
+ *
+ * Return: QDF Status
+ */
+
+QDF_STATUS ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
+				      uint32_t *tsf_gpio_pin);
+
+#ifdef DHCP_SERVER_OFFLOAD
+/**
+ * ucfg_fwol_get_enable_dhcp_server_offload()-Assign enable_dhcp_server_offload
+ * @psoc: pointer to the psoc object
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS
+ucfg_fwol_get_enable_dhcp_server_offload(struct wlan_objmgr_psoc *psoc,
+					 bool *enable_dhcp_server_offload);
+
+/**
+ * ucfg_fwol_get_dhcp_max_num_clients() - Assigns dhcp_max_num_clients value
+ * @psoc: pointer to the psoc object
+ *
+ * Return: QDF Status
+ */
+QDF_STATUS ucfg_fwol_get_dhcp_max_num_clients(struct wlan_objmgr_psoc *psoc,
+					      uint32_t *dhcp_max_num_clients);
+
+#endif
 #endif /* _WLAN_FWOL_UCFG_API_H_ */

+ 150 - 0
fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c

@@ -389,3 +389,153 @@ ucfg_get_alternative_chainmask_enabled(struct wlan_objmgr_psoc *psoc,
 				fwol_obj->cfg.alternative_chainmask_enabled;
 	return QDF_STATUS_SUCCESS;
 }
+
+QDF_STATUS ucfg_get_smart_chainmask_enabled(struct wlan_objmgr_psoc *psoc,
+					    bool *smart_chainmask_enabled)
+{
+	struct wlan_fwol_psoc_obj *fwol_obj;
+
+	fwol_obj = fwol_get_psoc_obj(psoc);
+	if (!fwol_obj) {
+		fwol_err("Failed to get FWOL obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*smart_chainmask_enabled =
+				fwol_obj->cfg.smart_chainmask_enabled;
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS ucfg_fwol_get_rts_profile(struct wlan_objmgr_psoc *psoc,
+				     uint16_t *get_rts_profile)
+{
+	struct wlan_fwol_psoc_obj *fwol_obj;
+
+	fwol_obj = fwol_get_psoc_obj(psoc);
+	if (!fwol_obj) {
+		fwol_err("Failed to get FWOL obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*get_rts_profile = fwol_obj->cfg.get_rts_profile;
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS ucfg_fwol_get_enable_fw_log_level(struct wlan_objmgr_psoc *psoc,
+					     uint16_t *enable_fw_log_level)
+{
+	struct wlan_fwol_psoc_obj *fwol_obj;
+
+	fwol_obj = fwol_get_psoc_obj(psoc);
+	if (!fwol_obj) {
+		fwol_err("Failed to get FWOL obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*enable_fw_log_level = fwol_obj->cfg.enable_fw_log_level;
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS ucfg_fwol_get_enable_fw_log_type(struct wlan_objmgr_psoc *psoc,
+					    uint16_t *enable_fw_log_type)
+{
+	struct wlan_fwol_psoc_obj *fwol_obj;
+
+	fwol_obj = fwol_get_psoc_obj(psoc);
+	if (!fwol_obj) {
+		fwol_err("Failed to get FWOL obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*enable_fw_log_type = fwol_obj->cfg.enable_fw_log_type;
+	return QDF_STATUS_SUCCESS;
+}
+
+#ifdef FEATURE_WLAN_RA_FILTERING
+QDF_STATUS ucfg_fwol_set_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc,
+					       bool is_rate_limit_enabled)
+{
+	struct wlan_fwol_psoc_obj *fwol_obj;
+
+	fwol_obj = fwol_get_psoc_obj(psoc);
+	if (!fwol_obj) {
+		fwol_err("Failed to get FWOL obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	fwol_obj->cfg.is_rate_limit_enabled = is_rate_limit_enabled;
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS ucfg_fwol_get_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc,
+					       bool *is_rate_limit_enabled)
+{
+	struct wlan_fwol_psoc_obj *fwol_obj;
+
+	fwol_obj = fwol_get_psoc_obj(psoc);
+	if (!fwol_obj) {
+		fwol_err("Failed to get FWOL obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*is_rate_limit_enabled = fwol_obj->cfg.is_rate_limit_enabled;
+	return QDF_STATUS_SUCCESS;
+}
+#endif
+
+#ifdef WLAN_FEATURE_TSF
+QDF_STATUS ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
+				      uint32_t *tsf_gpio_pin)
+{
+	struct wlan_fwol_psoc_obj *fwol_obj;
+
+	fwol_obj = fwol_get_psoc_obj(psoc);
+	if (!fwol_obj) {
+		fwol_err("Failed to get FWOL obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*tsf_gpio_pin = fwol_obj->cfg.tsf_gpio_pin;
+	return QDF_STATUS_SUCCESS;
+}
+#else
+QDF_STATUS ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc,
+				      uint32_t *tsf_gpio_pin)
+{
+	return QDF_STATUS_SUCCESS;
+}
+#endif
+
+#ifdef DHCP_SERVER_OFFLOAD
+QDF_STATUS
+ucfg_fwol_get_enable_dhcp_server_offload(struct wlan_objmgr_psoc *psoc,
+					 bool *enable_dhcp_server_offload)
+{
+	struct wlan_fwol_psoc_obj *fwol_obj;
+
+	fwol_obj = fwol_get_psoc_obj(psoc);
+	if (!fwol_obj) {
+		fwol_err("Failed to get FWOL obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*enable_dhcp_server_offload = fwol_obj->cfg.enable_dhcp_server_offload;
+	return QDF_STATUS_SUCCESS;
+}
+
+QDF_STATUS ucfg_fwol_get_dhcp_max_num_clients(struct wlan_objmgr_psoc *psoc,
+					      uint32_t *dhcp_max_num_clients)
+{
+	struct wlan_fwol_psoc_obj *fwol_obj;
+
+	fwol_obj = fwol_get_psoc_obj(psoc);
+	if (!fwol_obj) {
+		fwol_err("Failed to get FWOL obj");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	*dhcp_max_num_clients = fwol_obj->cfg.dhcp_max_num_clients;
+	return QDF_STATUS_SUCCESS;
+}
+#endif
+