diff --git a/Android.mk b/Android.mk
index 4274443..faff1ce 100644
--- a/Android.mk
+++ b/Android.mk
@@ -31,6 +31,13 @@
                     $(LOCAL_PATH)/../bluetooth/bluez-clean-headers
 
 LOCAL_CFLAGS := -DINTERNAL_SHA1 -DCONFIG_CRYPTO_INTERNAL -DCONFIG_NO_T_PRF -DCONFIG_NO_TLS_PRF
+ifdef WIFI_DRIVER_FW_STA_PATH
+LOCAL_CFLAGS += -DWIFI_DRIVER_FW_STA_PATH=\"$(WIFI_DRIVER_FW_STA_PATH)\"
+endif
+ifdef WIFI_DRIVER_FW_AP_PATH
+LOCAL_CFLAGS += -DWIFI_DRIVER_FW_AP_PATH=\"$(WIFI_DRIVER_FW_AP_PATH)\"
+endif
+
 LOCAL_SHARED_LIBRARIES := libsysutils libcutils libnetutils
 
 ifeq ($(BOARD_HAVE_BLUETOOTH),true)
diff --git a/CommandListener.cpp b/CommandListener.cpp
index e65f783..f1a592e 100644
--- a/CommandListener.cpp
+++ b/CommandListener.cpp
@@ -510,7 +510,7 @@
 
 int CommandListener::SoftapCmd::runCommand(SocketClient *cli,
                                         int argc, char **argv) {
-    int rc = 0;
+    int rc = 0, flag = 0;
 
     if (argc < 2) {
         cli->sendMsg(ResponseCode::CommandSyntaxError, "Softap Missing argument", false);
@@ -521,6 +521,8 @@
         rc = sSoftapCtrl->startSoftap();
     } else if (!strcmp(argv[1], "stop")) {
         rc = sSoftapCtrl->stopSoftap();
+    } else if (!strcmp(argv[1], "fwreload")) {
+        rc = sSoftapCtrl->fwReloadSoftap(argc, argv);
     } else if (!strcmp(argv[1], "status")) {
         char *tmp = NULL;
 
diff --git a/SoftapController.cpp b/SoftapController.cpp
index 352c353..392f11b 100644
--- a/SoftapController.cpp
+++ b/SoftapController.cpp
@@ -258,3 +258,53 @@
     }
     return ret;
 }
+
+/*
+ * Arguments:
+ *	argv[2] - interface name
+ *	argv[3] - AP or STA
+ */
+int SoftapController::fwReloadSoftap(int argc, char *argv[])
+{
+    struct iwreq wrq;
+    int fnum, ret, i = 0;
+    char *iface;
+
+    if (mSock < 0) {
+        LOGE("Softap fwrealod - failed to open socket");
+        return -1;
+    }
+    if (argc < 4) {
+        LOGE("Softap fwreload - missing arguments");
+        return -1;
+    }
+
+    iface = argv[2];
+    fnum = getPrivFuncNum(iface, "WL_FW_RELOAD");
+    if (fnum < 0) {
+        LOGE("Softap fwReload - function not supported");
+        return -1;
+    }
+
+    if (strcmp(argv[3], "AP") == 0) {
+#ifdef WIFI_DRIVER_FW_AP_PATH
+        sprintf(mBuf, "FW_PATH=%s", WIFI_DRIVER_FW_AP_PATH);
+#endif
+    } else {
+#ifdef WIFI_DRIVER_FW_STA_PATH
+        sprintf(mBuf, "FW_PATH=%s", WIFI_DRIVER_FW_STA_PATH);
+#endif
+    }
+    strncpy(wrq.ifr_name, iface, sizeof(wrq.ifr_name));
+    wrq.u.data.length = strlen(mBuf) + 1;
+    wrq.u.data.pointer = mBuf;
+    wrq.u.data.flags = 0;
+    ret = ioctl(mSock, fnum, &wrq);
+    if (ret) {
+        LOGE("Softap fwReload - failed: %d", ret);
+    }
+    else {
+        LOGD("Softap fwReload - Ok");
+    }
+    return ret;
+}
diff --git a/SoftapController.h b/SoftapController.h
index c42b1fa..ae0e007 100644
--- a/SoftapController.h
+++ b/SoftapController.h
@@ -39,6 +39,7 @@
     int stopSoftap();
     bool isSoftapStarted();
     int setSoftap(int argc, char *argv[]);
+    int fwReloadSoftap(int argc, char *argv[]);
 };
 
 #endif
