diff --git a/Kbuild b/Kbuild
index 59b3f40..6459bf1 100644
--- a/Kbuild
+++ b/Kbuild
@@ -1917,6 +1917,7 @@
 cppflags-$(CONFIG_SOFTAP_CHANNEL_RANGE) += -DSOFTAP_CHANNEL_RANGE
 cppflags-$(CONFIG_FEATURE_WLAN_SCAN_PNO) += -DFEATURE_WLAN_SCAN_PNO
 cppflags-$(CONFIG_WLAN_FEATURE_PACKET_FILTERING) += -DWLAN_FEATURE_PACKET_FILTERING
+cppflags-$(CONFIG_DHCP_SERVER_OFFLOAD) += -DDHCP_SERVER_OFFLOAD
 cppflags-$(CONFIG_WLAN_NS_OFFLOAD) += -DWLAN_NS_OFFLOAD
 cppflags-$(CONFIG_FEATURE_WLAN_RA_FILTERING) += -DFEATURE_WLAN_RA_FILTERING
 cppflags-$(CONFIG_FEATURE_WLAN_LPHB) += -DFEATURE_WLAN_LPHB
diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c
index 5723b87..a8738ba 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/core/hdd/src/wlan_hdd_cfg80211.c
@@ -13377,61 +13377,6 @@
 
 }
 
-#ifdef DHCP_SERVER_OFFLOAD
-static void wlan_hdd_set_dhcp_server_offload(struct hdd_adapter *adapter)
-{
-	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
-	tpSirDhcpSrvOffloadInfo pDhcpSrvInfo;
-	uint8_t numEntries = 0;
-	uint8_t srv_ip[IPADDR_NUM_ENTRIES];
-	uint8_t num;
-	uint32_t temp;
-	uint32_t dhcp_max_num_clients;
-	mac_handle_t mac_handle;
-	QDF_STATUS status;
-
-	pDhcpSrvInfo = qdf_mem_malloc(sizeof(*pDhcpSrvInfo));
-	if (!pDhcpSrvInfo)
-		return;
-	pDhcpSrvInfo->vdev_id = adapter->vdev_id;
-	pDhcpSrvInfo->dhcpSrvOffloadEnabled = true;
-
-	status = ucfg_fwol_get_dhcp_max_num_clients(hdd_ctx->psoc,
-						    &dhcp_max_num_clients);
-	if (QDF_IS_STATUS_ERROR(status))
-		return;
-
-	pDhcpSrvInfo->dhcpClientNum = dhcp_max_num_clients;
-	hdd_string_to_u8_array(hdd_ctx->config->dhcpServerIP,
-			       srv_ip, &numEntries, IPADDR_NUM_ENTRIES);
-	if (numEntries != IPADDR_NUM_ENTRIES) {
-		hdd_err("Incorrect IP address (%s) assigned for DHCP server!", hdd_ctx->config->dhcpServerIP);
-		goto end;
-	}
-	if ((srv_ip[0] >= 224) && (srv_ip[0] <= 239)) {
-		hdd_err("Invalid IP address (%s)! It could NOT be multicast IP address!", hdd_ctx->config->dhcpServerIP);
-		goto end;
-	}
-	if (srv_ip[IPADDR_NUM_ENTRIES - 1] >= 100) {
-		hdd_err("Invalid IP address (%s)! The last field must be less than 100!", hdd_ctx->config->dhcpServerIP);
-		goto end;
-	}
-	for (num = 0; num < numEntries; num++) {
-		temp = srv_ip[num];
-		pDhcpSrvInfo->dhcpSrvIP |= (temp << (8 * num));
-	}
-	mac_handle = hdd_ctx->mac_handle;
-	if (QDF_STATUS_SUCCESS !=
-	    sme_set_dhcp_srv_offload(mac_handle, pDhcpSrvInfo)) {
-		hdd_err("sme_setDHCPSrvOffload fail!");
-		goto end;
-	}
-	hdd_debug("enable DHCP Server offload successfully!");
-end:
-	qdf_mem_free(pDhcpSrvInfo);
-}
-#endif /* DHCP_SERVER_OFFLOAD */
-
 static int __wlan_hdd_cfg80211_change_bss(struct wiphy *wiphy,
 					  struct net_device *dev,
 					  struct bss_parameters *params)
diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c
index 0c74341..f6ca328 100644
--- a/core/hdd/src/wlan_hdd_hostapd.c
+++ b/core/hdd/src/wlan_hdd_hostapd.c
@@ -86,6 +86,7 @@
 #include "cfg_ucfg_api.h"
 #include "wlan_crypto_global_api.h"
 #include "wlan_action_oui_ucfg_api.h"
+#include "wlan_fwol_ucfg_api.h"
 #include "nan_ucfg_api.h"
 #include <wlan_reg_services_api.h>
 
@@ -4708,16 +4709,71 @@
 }
 #endif
 
+#ifdef DHCP_SERVER_OFFLOAD
+static void wlan_hdd_set_dhcp_server_offload(struct hdd_adapter *adapter)
+{
+	struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
+	tpSirDhcpSrvOffloadInfo pDhcpSrvInfo;
+	uint8_t numEntries = 0;
+	uint8_t srv_ip[IPADDR_NUM_ENTRIES];
+	uint8_t num;
+	uint32_t temp;
+	uint32_t dhcp_max_num_clients;
+	mac_handle_t mac_handle;
+	QDF_STATUS status;
+
+	pDhcpSrvInfo = qdf_mem_malloc(sizeof(*pDhcpSrvInfo));
+	if (!pDhcpSrvInfo)
+		return;
+	pDhcpSrvInfo->vdev_id = adapter->vdev_id;
+	pDhcpSrvInfo->dhcpSrvOffloadEnabled = true;
+
+	status = ucfg_fwol_get_dhcp_max_num_clients(hdd_ctx->psoc,
+						    &dhcp_max_num_clients);
+	if (QDF_IS_STATUS_ERROR(status))
+		return;
+
+	pDhcpSrvInfo->dhcpClientNum = dhcp_max_num_clients;
+	hdd_string_to_u8_array(hdd_ctx->config->dhcpServerIP,
+			       srv_ip, &numEntries, IPADDR_NUM_ENTRIES);
+	if (numEntries != IPADDR_NUM_ENTRIES) {
+		hdd_err("Incorrect IP address (%s) assigned for DHCP server!", hdd_ctx->config->dhcpServerIP);
+		goto end;
+	}
+	if ((srv_ip[0] >= 224) && (srv_ip[0] <= 239)) {
+		hdd_err("Invalid IP address (%s)! It could NOT be multicast IP address!", hdd_ctx->config->dhcpServerIP);
+		goto end;
+	}
+	if (srv_ip[IPADDR_NUM_ENTRIES - 1] >= 100) {
+		hdd_err("Invalid IP address (%s)! The last field must be less than 100!", hdd_ctx->config->dhcpServerIP);
+		goto end;
+	}
+	for (num = 0; num < numEntries; num++) {
+		temp = srv_ip[num];
+		pDhcpSrvInfo->dhcpSrvIP |= (temp << (8 * num));
+	}
+	mac_handle = hdd_ctx->mac_handle;
+	if (QDF_STATUS_SUCCESS !=
+	    sme_set_dhcp_srv_offload(mac_handle, pDhcpSrvInfo)) {
+		hdd_err("sme_setDHCPSrvOffload fail!");
+		goto end;
+	}
+	hdd_debug("enable DHCP Server offload successfully!");
+end:
+	qdf_mem_free(pDhcpSrvInfo);
+}
+
 /**
- * wlan_hdd_is_dhcp_enabled: Enable DHCP offload
+ * wlan_hdd_dhcp_offload_enable: Enable DHCP offload
  * @hdd_ctx: HDD context handler
  * @adapter: Adapter pointer
  *
+ * Enables the DHCP Offload feature in firmware if it has been configured.
+ *
  * Return: None
  */
-#ifdef DHCP_SERVER_OFFLOAD
-static void wlan_hdd_is_dhcp_enabled(struct hdd_context *hdd_ctx,
-				     struct hdd_adapter *adapter)
+static void wlan_hdd_dhcp_offload_enable(struct hdd_context *hdd_ctx,
+					 struct hdd_adapter *adapter)
 {
 	bool enable_dhcp_server_offload;
 	QDF_STATUS status;
@@ -4732,11 +4788,11 @@
 		wlan_hdd_set_dhcp_server_offload(adapter);
 }
 #else
-static void wlan_hdd_is_dhcp_enabled(struct hdd_context *hdd_ctx,
-				     struct hdd_adapter *adapter)
+static void wlan_hdd_dhcp_offload_enable(struct hdd_context *hdd_ctx,
+					 struct hdd_adapter *adapter)
 {
 }
-#endif
+#endif /* DHCP_SERVER_OFFLOAD */
 
 #ifdef WLAN_CONV_CRYPTO_SUPPORTED
 /**
@@ -5553,7 +5609,7 @@
 					    true);
 	}
 
-	wlan_hdd_is_dhcp_enabled(hdd_ctx, adapter);
+	wlan_hdd_dhcp_offload_enable(hdd_ctx, adapter);
 	ucfg_p2p_status_start_bss(adapter->vdev);
 
 	/* Check and restart SAP if it is on unsafe channel */
diff --git a/core/wma/inc/wma_internal.h b/core/wma/inc/wma_internal.h
index d8a35a0..02c180e 100644
--- a/core/wma/inc/wma_internal.h
+++ b/core/wma/inc/wma_internal.h
@@ -1231,9 +1231,9 @@
 QDF_STATUS wma_set_wisa_params(tp_wma_handle wma, struct sir_wisa_params *wisa);
 
 #ifdef DHCP_SERVER_OFFLOAD
-int wma_process_dhcpserver_offload(tp_wma_handle wma_handle,
-				   tSirDhcpSrvOffloadInfo *
-				   pDhcpSrvOffloadInfo);
+QDF_STATUS wma_process_dhcpserver_offload(tp_wma_handle wma_handle,
+					  tSirDhcpSrvOffloadInfo *
+					  pDhcpSrvOffloadInfo);
 #endif
 
 #ifdef WLAN_FEATURE_GPIO_LED_FLASHING
diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c
index 97eb95d..3f01ed8 100644
--- a/core/wma/src/wma_features.c
+++ b/core/wma/src/wma_features.c
@@ -3868,7 +3868,7 @@
 
 	if (!wma_handle) {
 		WMA_LOGE("%s: wma handle is NULL", __func__);
-		return -EIO;
+		return QDF_STATUS_E_FAILURE;
 	}
 
 	params.vdev_id = pDhcpSrvOffloadInfo->vdev_id;
diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c
index f80a478..df48790 100644
--- a/core/wma/src/wma_main.c
+++ b/core/wma/src/wma_main.c
@@ -8698,8 +8698,7 @@
 
 #ifdef DHCP_SERVER_OFFLOAD
 	case WMA_SET_DHCP_SERVER_OFFLOAD_CMD:
-		wma_process_dhcpserver_offload(wma_handle,
-			(tSirDhcpSrvOffloadInfo *) msg->bodyptr);
+		wma_process_dhcpserver_offload(wma_handle, msg->bodyptr);
 		qdf_mem_free(msg->bodyptr);
 		break;
 #endif /* DHCP_SERVER_OFFLOAD */
