diff --git a/wifi/current.txt b/wifi/current.txt
index 03554a7..5feb652 100644
--- a/wifi/current.txt
+++ b/wifi/current.txt
@@ -59,3 +59,9 @@
 ##hostapd
 dc94b24d2b88da954eeb718dd72a4efb82d7399f5ffb9c2c5b5ea6b2e7843d83 vendor.qti.hardware.wifi.hostapd@1.1::IHostapdVendor
 c3f75d8b9d47c8d5083b29fa1838cd2d6c655dbfc1433cc3cee98aad0f9729dc vendor.qti.hardware.wifi.hostapd@1.1::IHostapdVendorIfaceCallback
+
+7512cd0a563c0bab38bdbcfd3935dac93f5c99b7e1ef957e2b024119d6a5a8b9 vendor.qti.hardware.wifi.supplicant@2.1::types
+ccb298d65dff8c8b978b3145fe648db5e96de63ff0e7dc2a6c07d55201708482 vendor.qti.hardware.wifi.supplicant@2.1::ISupplicantVendor
+593777080f116d12eec9db81ea86f2d28691f364c64d5d9f3a26e8d2ed805c2e vendor.qti.hardware.wifi.supplicant@2.1::ISupplicantVendorStaIface
+d9f3911d1cf245669f6df42670aba2d28fb926e805164b0fc02f07226b838714 vendor.qti.hardware.wifi.supplicant@2.2::ISupplicantVendor
+088160ba6fc1ed96e1863345ef41ea1b4d6e9dadefd2a24489bd3e676e9529a7 vendor.qti.hardware.wifi.supplicant@2.2::ISupplicantVendorStaIface
diff --git a/wifi/supplicant/2.1/ISupplicantVendor.hal b/wifi/supplicant/2.1/ISupplicantVendor.hal
new file mode 100644
index 0000000..5a8c6ef
--- /dev/null
+++ b/wifi/supplicant/2.1/ISupplicantVendor.hal
@@ -0,0 +1,40 @@
+/* Copyright (c) 2020, The Linux Foundation. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+*     * Redistributions of source code must retain the above copyright
+*       notice, this list of conditions and the following disclaimer.
+*     * Redistributions in binary form must reproduce the above
+*       copyright notice, this list of conditions and the following
+*       disclaimer in the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of The Linux Foundation nor the names of its
+*       contributors may be used to endorse or promote products derived
+*       from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+package vendor.qti.hardware.wifi.supplicant@2.1;
+
+import vendor.qti.hardware.wifi.supplicant@2.0::ISupplicantVendor;
+
+/**
+ * Vendor Interface exposed by the supplicant HIDL service registered
+ * with the hardware service manager.
+ * This is the root level object for any vendor specific supplicant interactions.
+ */
+interface ISupplicantVendor extends @2.0::ISupplicantVendor {
+};
diff --git a/wifi/supplicant/2.2/ISupplicantVendor.hal b/wifi/supplicant/2.2/ISupplicantVendor.hal
new file mode 100644
index 0000000..2ed8c6a
--- /dev/null
+++ b/wifi/supplicant/2.2/ISupplicantVendor.hal
@@ -0,0 +1,40 @@
+/* Copyright (c) 2020, The Linux Foundation. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+*     * Redistributions of source code must retain the above copyright
+*       notice, this list of conditions and the following disclaimer.
+*     * Redistributions in binary form must reproduce the above
+*       copyright notice, this list of conditions and the following
+*       disclaimer in the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of The Linux Foundation nor the names of its
+*       contributors may be used to endorse or promote products derived
+*       from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+package vendor.qti.hardware.wifi.supplicant@2.2;
+
+import vendor.qti.hardware.wifi.supplicant@2.1::ISupplicantVendor;
+
+/**
+ * Vendor Interface exposed by the supplicant HIDL service registered
+ * with the hardware service manager.
+ * This is the root level object for any vendor specific supplicant interactions.
+ */
+interface ISupplicantVendor extends @2.1::ISupplicantVendor {
+};
diff --git a/wifi/supplicant/2.2/ISupplicantVendorStaIface.hal b/wifi/supplicant/2.2/ISupplicantVendorStaIface.hal
new file mode 100644
index 0000000..240593d
--- /dev/null
+++ b/wifi/supplicant/2.2/ISupplicantVendorStaIface.hal
@@ -0,0 +1,52 @@
+/* Copyright (c) 2020, The Linux Foundation. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are
+* met:
+*     * Redistributions of source code must retain the above copyright
+*       notice, this list of conditions and the following disclaimer.
+*     * Redistributions in binary form must reproduce the above
+*       copyright notice, this list of conditions and the following
+*       disclaimer in the documentation and/or other materials provided
+*       with the distribution.
+*     * Neither the name of The Linux Foundation nor the names of its
+*       contributors may be used to endorse or promote products derived
+*       from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+* ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*
+*/
+
+package vendor.qti.hardware.wifi.supplicant@2.2;
+
+import android.hardware.wifi.supplicant@1.0::types;
+import vendor.qti.hardware.wifi.supplicant@2.1::ISupplicantVendorStaIface;
+
+/**
+ * Vendor StaIface Interface
+ */
+interface ISupplicantVendorStaIface extends @2.1::ISupplicantVendorStaIface{
+
+  /**
+   * run Driver Commands
+   *
+   * @param command Driver Command
+   * @return status Supplicant Status
+   * @return reply Command Message Reply
+   *         Possible status codes:
+   *         |SupplicantStatusCode.SUCCESS|,
+   *         |SupplicantStatusCode.FAILURE_UNKNOWN|
+   */
+  doDriverCmd(string command)
+     generates (SupplicantStatus status, string reply);
+};
