diff --git a/.gitupstream b/.gitupstream
new file mode 100644
index 0000000..bb4a4b8
--- /dev/null
+++ b/.gitupstream
@@ -0,0 +1 @@
+https://git.codelinaro.org/clo/la/platform/vendor/qcom-opensource/interfaces
diff --git a/Android.bp b/Android.bp
index 251bb87..7aef46b 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,50 +1,3 @@
 subdirs = [
     "*"
 ]
-hidl_package_root {
-    name: "vendor.qti.hardware.camera",
-    path: "vendor/qcom/opensource/interfaces/camera",
-}
-
-hidl_package_root {
-    name: "vendor.qti.hardware.display",
-    path: "vendor/qcom/opensource/interfaces/display",
-}
-
-hidl_package_root {
-    name: "vendor.qti.hardware.wifi",
-    path: "vendor/qcom/opensource/interfaces/wifi",
-}
-
-hidl_package_root {
-    name: "vendor.display",
-    path: "vendor/qcom/opensource/interfaces/display",
-}
-
-hidl_package_root {
-    name: "vendor.qti.hardware.servicetracker",
-    path: "vendor/qcom/opensource/interfaces/servicetracker",
-}
-
-hidl_package_root {
-    name: "vendor.qti.hardware.bluetooth_audio",
-    path: "vendor/qcom/opensource/interfaces/bluetooth_audio",
-}
-hidl_package_root {
-    name: "vendor.qti.hardware.systemhelper",
-    path: "vendor/qcom/opensource/interfaces/systemhelper",
-}
-
-hidl_package_root {
-    name: "vendor.qti.hardware.bluetooth_dun",
-    path: "vendor/qcom/opensource/interfaces/bluetooth_dun",
-}
-
-hidl_package_root {
-    name: "vendor.qti.hardware.fstman",
-    path: "vendor/qcom/opensource/interfaces/fstman",
-}
-hidl_package_root {
-    name:"vendor.qti.hardware.debugutils",
-    path:"vendor/qcom/opensource/interfaces/debugutils"
-}
diff --git a/bluetooth_audio/Android.bp b/bluetooth_audio/Android.bp
new file mode 100644
index 0000000..1ad26f1
--- /dev/null
+++ b/bluetooth_audio/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.bluetooth_audio",
+    use_current: true,
+}
diff --git a/bluetooth_dun/Android.bp b/bluetooth_dun/Android.bp
new file mode 100644
index 0000000..3dee575
--- /dev/null
+++ b/bluetooth_dun/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.bluetooth_dun",
+    use_current: true,
+}
diff --git a/btconfigstore/1.0/Android.bp b/btconfigstore/1.0/Android.bp
new file mode 100644
index 0000000..2c0f21f
--- /dev/null
+++ b/btconfigstore/1.0/Android.bp
@@ -0,0 +1,15 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+hidl_interface {
+    name: "vendor.qti.hardware.btconfigstore@1.0",
+    root: "vendor.qti.hardware.btconfigstore",
+    system_ext_specific: true,
+    srcs: [
+        "types.hal",
+        "IBTConfigStore.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
+}
diff --git a/btconfigstore/1.0/IBTConfigStore.hal b/btconfigstore/1.0/IBTConfigStore.hal
new file mode 100644
index 0000000..b5711af
--- /dev/null
+++ b/btconfigstore/1.0/IBTConfigStore.hal
@@ -0,0 +1,7 @@
+package vendor.qti.hardware.btconfigstore@1.0;
+
+interface IBTConfigStore {
+    getVendorProperties(uint32_t prop) generates (Result result, vec<VendorProperty> vendorProperty);
+    setVendorProperty(VendorProperty vendorProperty) generates (Result result);
+    getAddOnFeatures() generates (Result result, AddOnFeaturesList featuresList);
+};
diff --git a/btconfigstore/1.0/types.hal b/btconfigstore/1.0/types.hal
new file mode 100644
index 0000000..8ad0281
--- /dev/null
+++ b/btconfigstore/1.0/types.hal
@@ -0,0 +1,18 @@
+package vendor.qti.hardware.btconfigstore@1.0;
+
+enum Result : int32_t {
+    SUCCESS,
+    UNKNOWN_ERROR,
+};
+
+struct VendorProperty {
+    uint32_t type;
+    string value;
+};
+
+struct AddOnFeaturesList {
+    uint16_t product_id;
+    uint16_t rsp_version;
+    uint8_t feat_mask_len;
+    uint8_t[8] features;
+};
diff --git a/btconfigstore/2.0/Android.bp b/btconfigstore/2.0/Android.bp
new file mode 100644
index 0000000..2dbca58
--- /dev/null
+++ b/btconfigstore/2.0/Android.bp
@@ -0,0 +1,15 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+hidl_interface {
+    name: "vendor.qti.hardware.btconfigstore@2.0",
+    root: "vendor.qti.hardware.btconfigstore",
+    system_ext_specific: true,
+    srcs: [
+        "types.hal",
+        "IBTConfigStore.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
+}
diff --git a/btconfigstore/2.0/IBTConfigStore.hal b/btconfigstore/2.0/IBTConfigStore.hal
new file mode 100644
index 0000000..61c97ea
--- /dev/null
+++ b/btconfigstore/2.0/IBTConfigStore.hal
@@ -0,0 +1,8 @@
+package vendor.qti.hardware.btconfigstore@2.0;
+
+interface IBTConfigStore {
+    getVendorProperties(uint32_t prop) generates (Result result, vec<VendorProperty> vendorProperty);
+    setVendorProperty(VendorProperty vendorProperty) generates (Result result);
+    getControllerAddOnFeatures() generates (Result result, ControllerAddOnFeatures featuresList);
+    getHostAddOnFeatures() generates (Result result, HostAddOnFeatures featuresList);
+};
diff --git a/btconfigstore/2.0/types.hal b/btconfigstore/2.0/types.hal
new file mode 100644
index 0000000..23877f9
--- /dev/null
+++ b/btconfigstore/2.0/types.hal
@@ -0,0 +1,23 @@
+package vendor.qti.hardware.btconfigstore@2.0;
+
+enum Result : int32_t {
+    SUCCESS,
+    UNKNOWN_ERROR,
+};
+
+struct VendorProperty {
+    uint32_t type;
+    string value;
+};
+
+struct ControllerAddOnFeatures {
+    uint16_t product_id;
+    uint16_t rsp_version;
+    uint8_t feat_mask_len;
+    uint8_t[8] features;
+};
+
+struct HostAddOnFeatures {
+    uint8_t feat_mask_len;
+    uint8_t[8] features;
+};
diff --git a/btconfigstore/Android.bp b/btconfigstore/Android.bp
new file mode 100644
index 0000000..75db3fe
--- /dev/null
+++ b/btconfigstore/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.btconfigstore",
+    use_current: true,
+}
diff --git a/btconfigstore/current.txt b/btconfigstore/current.txt
new file mode 100644
index 0000000..bd7dab1
--- /dev/null
+++ b/btconfigstore/current.txt
@@ -0,0 +1,4 @@
+b0d81417ddc5daf549ac2fb63db24a83b4fe2fae71cd38c76f7482d029dd338f vendor.qti.hardware.btconfigstore@1.0::types
+04a894025ae70cb5821de82289b1a13426583696a4d3bf99042d0a25b615c10a vendor.qti.hardware.btconfigstore@1.0::IBTConfigStore
+a307100d75a6a01b259f10a079c736b667cf485e2b35940e35eae965d42bb598 vendor.qti.hardware.btconfigstore@2.0::types
+27abd90a8a0e7b6473166247213d152cf413fa88db2e78826debb0a8864ffa57 vendor.qti.hardware.btconfigstore@2.0::IBTConfigStore
diff --git a/camera/Android.bp b/camera/Android.bp
new file mode 100644
index 0000000..d7cafff
--- /dev/null
+++ b/camera/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.camera",
+    use_current: true,
+}
diff --git a/capabilityconfigstore/1.0/Android.bp b/capabilityconfigstore/1.0/Android.bp
new file mode 100644
index 0000000..1bfbf02
--- /dev/null
+++ b/capabilityconfigstore/1.0/Android.bp
@@ -0,0 +1,15 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+hidl_interface {
+    name: "vendor.qti.hardware.capabilityconfigstore@1.0",
+    root: "vendor.qti.hardware.capabilityconfigstore",
+    system_ext_specific: true,
+    srcs: [
+        "types.hal",
+        "ICapabilityConfigStore.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
+}
diff --git a/capabilityconfigstore/1.0/ICapabilityConfigStore.hal b/capabilityconfigstore/1.0/ICapabilityConfigStore.hal
new file mode 100755
index 0000000..6235404
--- /dev/null
+++ b/capabilityconfigstore/1.0/ICapabilityConfigStore.hal
@@ -0,0 +1,5 @@
+package vendor.qti.hardware.capabilityconfigstore@1.0;
+
+interface ICapabilityConfigStore {
+    getConfig(string area, string key) generates (CommandResult result);
+};
diff --git a/capabilityconfigstore/1.0/types.hal b/capabilityconfigstore/1.0/types.hal
new file mode 100755
index 0000000..ea4f5f6
--- /dev/null
+++ b/capabilityconfigstore/1.0/types.hal
@@ -0,0 +1,11 @@
+package vendor.qti.hardware.capabilityconfigstore@1.0;
+
+enum Result : int32_t {
+    SUCCESS = 0,
+    NOT_FOUND = -1
+};
+
+struct CommandResult {
+    Result result_type;
+    string value;
+};
diff --git a/capabilityconfigstore/Android.bp b/capabilityconfigstore/Android.bp
new file mode 100644
index 0000000..2675fbd
--- /dev/null
+++ b/capabilityconfigstore/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.capabilityconfigstore",
+    use_current: true,
+}
diff --git a/capabilityconfigstore/current.txt b/capabilityconfigstore/current.txt
new file mode 100644
index 0000000..d1d31e3
--- /dev/null
+++ b/capabilityconfigstore/current.txt
@@ -0,0 +1,2 @@
+fcb328dadfd824969db78c07517d7f551d1e61da9513e4488a75be0e7b5400b6 vendor.qti.hardware.capabilityconfigstore@1.0::types
+b9b280c383d0928b36e5f9afb0392e6671779fdced1515af13ad359f5edcf9e8 vendor.qti.hardware.capabilityconfigstore@1.0::ICapabilityConfigStore
diff --git a/debugutils/Android.bp b/debugutils/Android.bp
new file mode 100644
index 0000000..5a1386e
--- /dev/null
+++ b/debugutils/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.debugutils",
+    use_current: true,
+}
diff --git a/display/Android.bp b/display/Android.bp
new file mode 100644
index 0000000..72b9cb9
--- /dev/null
+++ b/display/Android.bp
@@ -0,0 +1,9 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.display",
+    use_current: true,
+}
+
+hidl_package_root {
+    name: "vendor.display",
+    use_current: true,
+}
diff --git a/display/composer/3.2/Android.bp b/display/composer/3.2/Android.bp
new file mode 100644
index 0000000..0446fb4
--- /dev/null
+++ b/display/composer/3.2/Android.bp
@@ -0,0 +1,24 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+hidl_interface {
+    name: "vendor.qti.hardware.display.composer@3.2",
+    root: "vendor.qti.hardware.display",
+    system_ext_specific: true,
+    srcs: [
+        "IQtiComposer.hal",
+        "IQtiComposerClient.hal",
+    ],
+    interfaces: [
+        "android.hardware.graphics.common@1.0",
+        "android.hardware.graphics.common@1.1",
+        "android.hardware.graphics.common@1.2",
+        "android.hardware.graphics.composer@2.1",
+        "android.hardware.graphics.composer@2.2",
+        "android.hardware.graphics.composer@2.3",
+        "android.hardware.graphics.composer@2.4",
+        "vendor.qti.hardware.display.composer@3.0",
+        "vendor.qti.hardware.display.composer@3.1",
+        "android.hidl.base@1.0",
+    ],
+    gen_java: false,
+}
diff --git a/display/composer/3.2/IQtiComposer.hal b/display/composer/3.2/IQtiComposer.hal
new file mode 100644
index 0000000..f34f86c
--- /dev/null
+++ b/display/composer/3.2/IQtiComposer.hal
@@ -0,0 +1,24 @@
+/* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+*/
+
+package vendor.qti.hardware.display.composer@3.2;
+
+import @3.1::IQtiComposer;
+import IQtiComposerClient;
+import android.hardware.graphics.composer@2.1::Error;
+
+interface IQtiComposer extends @3.1::IQtiComposer {
+      /**
+     * Creates a v3.2 client of the composer.
+     *
+     * @return error is NONE upon success. Otherwise,
+     *         NO_RESOURCES when the client could not be created.
+     * @return client is the newly created client.
+     */
+    @entry
+    @callflow(next="*")
+    createClient_3_2() generates (Error error, IQtiComposerClient client);
+
+};
+
diff --git a/display/composer/3.2/IQtiComposerClient.hal b/display/composer/3.2/IQtiComposerClient.hal
new file mode 100644
index 0000000..156cc7b
--- /dev/null
+++ b/display/composer/3.2/IQtiComposerClient.hal
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+*/
+
+
+package vendor.qti.hardware.display.composer@3.2;
+
+import @3.1::IQtiComposerClient;
+interface IQtiComposerClient extends @3.1::IQtiComposerClient {
+
+    enum Command : @3.1::IQtiComposerClient.Command {
+        /**
+         * SET_SINGLE_BUFFER_MODE has this pseudo prototype
+         * setSingleBufferMode(bool isAutoRefresh);
+         */
+
+        SET_SINGLE_BUFFER_MODE_3_2 = 0x805 << IQtiComposerClient.Command:OPCODE_SHIFT,
+    };
+
+
+};
+
diff --git a/display/composer/3.2/hidl_gen_version b/display/composer/3.2/hidl_gen_version
new file mode 100644
index 0000000..e4ca12c
--- /dev/null
+++ b/display/composer/3.2/hidl_gen_version
@@ -0,0 +1 @@
+version=3.2
diff --git a/display/current.txt b/display/current.txt
index 4115e18..e9a5789 100644
--- a/display/current.txt
+++ b/display/current.txt
@@ -113,6 +113,11 @@
 fa035077927f2dff68d2b1ad6e6379822d29364999aa3fd70c5d2ffe93707d9b vendor.qti.hardware.display.demura@1.0::IDemuraFileFinder
 e609d77b00158060ca222ccd13e0ba8019a42336e3b6a6a32c6396f7b7ea2077 vendor.qti.hardware.display.composer@3.1::IQtiComposer
 ee6870d17e33bf8e2365165637b75559ceffda57770b1a35f3a9a8bbf3769266 vendor.qti.hardware.display.composer@3.1::IQtiComposerClient
+dcd4f8ce2125de8f3e4f7fb790bc10b39c0b1eeabc464e89acda557d9003c0ee vendor.qti.hardware.display.composer@3.2::IQtiComposer
+cf55579bd148bc2dc71274109cfed27bd378020e9fe2444500d6691a01bdf537 vendor.qti.hardware.display.composer@3.2::IQtiComposerClient
+
+
+
 550322847ebc31fd2c13a34aefa1f75df1c879cb423422831d5a5f35ba77aca4 vendor.qti.hardware.display.demura@2.0::IDemuraFileFinder
 
 #HAL released in Android T
diff --git a/fstman/Android.bp b/fstman/Android.bp
new file mode 100644
index 0000000..8a89f0f
--- /dev/null
+++ b/fstman/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.fstman",
+    use_current: true,
+}
diff --git a/perf/1.0/Android.bp b/perf/1.0/Android.bp
new file mode 100644
index 0000000..15cd335
--- /dev/null
+++ b/perf/1.0/Android.bp
@@ -0,0 +1,14 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+hidl_interface {
+    name: "vendor.qti.hardware.perf@1.0",
+    root: "vendor.qti.hardware.perf",
+    system_ext_specific: true,
+    srcs: [
+        "IPerf.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
+}
diff --git a/perf/1.0/IPerf.hal b/perf/1.0/IPerf.hal
new file mode 100644
index 0000000..0e7b530
--- /dev/null
+++ b/perf/1.0/IPerf.hal
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2021 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package vendor.qti.hardware.perf@1.0;
+
+interface IPerf {
+    perfLockAcquire(int32_t pl_handle, uint32_t duration, vec<int32_t> boostsList, int32_t reserved) generates (int32_t ret);
+    perfLockRelease(int32_t pl_handle, int32_t reserved);
+    perfHint(uint32_t hint, string userDataStr, int32_t userData1, int32_t userData2, int32_t reserved) generates (int32_t ret);
+    perfProfile(int32_t pl_handle, int32_t profile, int32_t reserved) generates (int32_t ret);
+    perfLockCmd(int32_t cmd, int32_t reserved);
+};
diff --git a/perf/2.0/Android.bp b/perf/2.0/Android.bp
new file mode 100644
index 0000000..6c1bab3
--- /dev/null
+++ b/perf/2.0/Android.bp
@@ -0,0 +1,14 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+hidl_interface {
+    name: "vendor.qti.hardware.perf@2.0",
+    root: "vendor.qti.hardware.perf",
+    system_ext_specific: true,
+    srcs: [
+        "IPerf.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
+}
diff --git a/perf/2.0/IPerf.hal b/perf/2.0/IPerf.hal
new file mode 100644
index 0000000..1faf0cd
--- /dev/null
+++ b/perf/2.0/IPerf.hal
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2021 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package vendor.qti.hardware.perf@2.0;
+
+interface IPerf {
+    perfLockAcquire(int32_t pl_handle, uint32_t duration, vec<int32_t> boostsList, vec<int32_t> reserved) generates (int32_t ret);
+    perfLockRelease(int32_t pl_handle, vec<int32_t> reserved);
+    perfHint(uint32_t hint, string userDataStr, int32_t userData1, int32_t userData2, vec<int32_t> reserved) generates (int32_t ret);
+    perfProfile(int32_t pl_handle, int32_t profile, int32_t reserved) generates (int32_t ret);
+    perfLockCmd(int32_t cmd, int32_t reserved);
+    perfGetProp(string propName, string defaultVal) generates (string ret);
+    perfSetProp(string propName, string value) generates (int32_t ret);
+    perfAsyncRequest(int32_t cmd, string userDataStr, vec<int32_t> params) generates (int32_t ret);
+    perfSyncRequest(int32_t cmd, string userDataStr, vec<int32_t> params) generates (string ret);
+};
diff --git a/perf/2.1/Android.bp b/perf/2.1/Android.bp
new file mode 100644
index 0000000..e3de373
--- /dev/null
+++ b/perf/2.1/Android.bp
@@ -0,0 +1,16 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+hidl_interface {
+    name: "vendor.qti.hardware.perf@2.1",
+    root: "vendor.qti.hardware.perf",
+    system_ext_specific: true,
+    srcs: [
+        "IPerf.hal",
+        "IPerfCallback.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+        "vendor.qti.hardware.perf@2.0",
+    ],
+    gen_java: true,
+}
diff --git a/perf/2.1/IPerf.hal b/perf/2.1/IPerf.hal
new file mode 100644
index 0000000..7275334
--- /dev/null
+++ b/perf/2.1/IPerf.hal
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2021 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package vendor.qti.hardware.perf@2.1;
+
+import @2.0::IPerf;
+import IPerfCallback;
+
+interface IPerf extends @2.0::IPerf {
+    perfCallbackRegister(IPerfCallback callback, int32_t clientId) generates (int32_t ret);
+    perfCallbackDeregister(IPerfCallback callback, int32_t clientId) generates (int32_t ret);
+};
diff --git a/perf/2.1/IPerfCallback.hal b/perf/2.1/IPerfCallback.hal
new file mode 100644
index 0000000..e7bf260
--- /dev/null
+++ b/perf/2.1/IPerfCallback.hal
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2021 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package vendor.qti.hardware.perf@2.1;
+
+interface IPerfCallback {
+    oneway notifyCallback (uint32_t hint, string userDataStr, int32_t userData1, int32_t userData2, vec<int32_t> reserved);
+};
diff --git a/perf/2.2/Android.bp b/perf/2.2/Android.bp
new file mode 100644
index 0000000..8174e35
--- /dev/null
+++ b/perf/2.2/Android.bp
@@ -0,0 +1,16 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+hidl_interface {
+    name: "vendor.qti.hardware.perf@2.2",
+    root: "vendor.qti.hardware.perf",
+    system_ext_specific: true,
+    srcs: [
+        "IPerf.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+        "vendor.qti.hardware.perf@2.0",
+        "vendor.qti.hardware.perf@2.1",
+    ],
+    gen_java: true,
+}
diff --git a/perf/2.2/IPerf.hal b/perf/2.2/IPerf.hal
new file mode 100644
index 0000000..bd648ff
--- /dev/null
+++ b/perf/2.2/IPerf.hal
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2021 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package vendor.qti.hardware.perf@2.2;
+
+import @2.1::IPerf;
+
+interface IPerf extends @2.1::IPerf {
+    perfLockAcqAndRelease(int32_t pl_handle, uint32_t duration, vec<int32_t> boostsList, vec<int32_t> reserved) generates (int32_t ret);
+    oneway perfEvent(uint32_t eventId, string userDataStr, vec<int32_t> reserved);
+    perfGetFeedback(uint32_t featureId, string userDataStr, vec<int32_t> reserved) generates (int32_t ret);
+};
diff --git a/perf/2.3/Android.bp b/perf/2.3/Android.bp
new file mode 100644
index 0000000..fe41cd8
--- /dev/null
+++ b/perf/2.3/Android.bp
@@ -0,0 +1,17 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+hidl_interface {
+    name: "vendor.qti.hardware.perf@2.3",
+    root: "vendor.qti.hardware.perf",
+    system_ext_specific: true,
+    srcs: [
+        "IPerf.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+        "vendor.qti.hardware.perf@2.0",
+        "vendor.qti.hardware.perf@2.1",
+        "vendor.qti.hardware.perf@2.2",
+    ],
+    gen_java: true,
+}
diff --git a/perf/2.3/IPerf.hal b/perf/2.3/IPerf.hal
new file mode 100644
index 0000000..51f4191
--- /dev/null
+++ b/perf/2.3/IPerf.hal
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2022 The LineageOS Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package vendor.qti.hardware.perf@2.3;
+
+import @2.2::IPerf;
+
+interface IPerf extends @2.2::IPerf {
+    perfHintAcqRel(int32_t pl_handle, uint32_t hint, string pkg_name, int32_t duration, int32_t hint_type, vec<int32_t> reserved) generates (int32_t ret);
+    perfHintRenew(int32_t pl_handle, uint32_t hint, string pkg_name, int32_t duration, int32_t hint_type, vec<int32_t> reserved) generates (int32_t ret);
+};
diff --git a/perf/Android.bp b/perf/Android.bp
new file mode 100644
index 0000000..335ba0f
--- /dev/null
+++ b/perf/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.perf",
+    use_current: true,
+}
diff --git a/perf/current.txt b/perf/current.txt
new file mode 100644
index 0000000..f924c22
--- /dev/null
+++ b/perf/current.txt
@@ -0,0 +1,6 @@
+3b62e5f205de632f6c1d6b46d01a2945b5a855ec4a98247515ce8d14b51a4fa3 vendor.qti.hardware.perf@1.0::IPerf
+517008020b188864935535fa5c9ab30c686d01a4e7559659658d61b78fcd7cd1 vendor.qti.hardware.perf@2.0::IPerf
+429bbf6c78faecc882e6d39ea05329be9519b3ae547448ec3cc5c2393b918740 vendor.qti.hardware.perf@2.1::IPerf
+d5308ed1c730c17c0ae57de676255eb68f48846b5e976fccc1b046755e015a2e vendor.qti.hardware.perf@2.1::IPerfCallback
+dd76694de5ef346703b450dc96e6c96e274caacb52fba60ad52cb69352467040 vendor.qti.hardware.perf@2.2::IPerf
+ca3830177c6813da7219ffa8fd4bf2ffc161f9d10bcbb08b334a93838974f852 vendor.qti.hardware.perf@2.3::IPerf
diff --git a/servicetracker/Android.bp b/servicetracker/Android.bp
new file mode 100644
index 0000000..0519361
--- /dev/null
+++ b/servicetracker/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.servicetracker",
+    use_current: true,
+}
diff --git a/systemhelper/Android.bp b/systemhelper/Android.bp
new file mode 100644
index 0000000..19c539c
--- /dev/null
+++ b/systemhelper/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.systemhelper",
+    use_current: true,
+}
diff --git a/systemhelper/current.txt b/systemhelper/current.txt
new file mode 100644
index 0000000..ab632c9
--- /dev/null
+++ b/systemhelper/current.txt
@@ -0,0 +1,4 @@
+0edcd9296043bf6c11d9fa63573c16da2ab2c89459f9f48b7c4125b8c67b311c vendor.qti.hardware.systemhelper@1.0::types
+40cd1de76b9d3ca23f4c8197b1da75c818fdf891ecc56ed04220f6ca4645b1b8 vendor.qti.hardware.systemhelper@1.0::ISystemEvent
+a75908e4d4f357ac281f47e16312e05d0bcfb1a11ca42ce20306cf2170cec0af vendor.qti.hardware.systemhelper@1.0::ISystemEventCallback
+7b0def6f56ef8b7a02923ea26def3101002594cfdc8209baf66743ac408171c0 vendor.qti.hardware.systemhelper@1.0::ISystemResource
diff --git a/umd/1.0/Android.bp b/umd/1.0/Android.bp
new file mode 100644
index 0000000..0347769
--- /dev/null
+++ b/umd/1.0/Android.bp
@@ -0,0 +1,17 @@
+// This file is autogenerated by hidl-gen -Landroidbp.
+
+hidl_interface {
+    name: "vendor.qti.hardware.umd@1.0",
+    root: "vendor.qti.hardware.umd",
+    product_specific: true,
+    srcs: [
+        "types.hal",
+        "IUMDAdaptor.hal",
+        "IUMDAdaptorCallback.hal",
+    ],
+    interfaces: [
+        "android.hidl.base@1.0",
+    ],
+    gen_java: true,
+}
+
diff --git a/umd/1.0/IUMDAdaptor.hal b/umd/1.0/IUMDAdaptor.hal
new file mode 100644
index 0000000..d452af7
--- /dev/null
+++ b/umd/1.0/IUMDAdaptor.hal
@@ -0,0 +1,17 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+
+package vendor.qti.hardware.umd@1.0;
+
+import IUMDAdaptorCallback;
+
+interface IUMDAdaptor {
+  initUVC() generates (int32_t result);
+  deInitUVC();
+  initUAC(IUMDAdaptorCallback callback) generates (int32_t result);
+  deInitUAC();
+  submitAudioBuffer(vec<uint8_t> data) generates (int32_t result);
+  setAudioBufferSize(uint64_t size);
+};
\ No newline at end of file
diff --git a/umd/1.0/IUMDAdaptorCallback.hal b/umd/1.0/IUMDAdaptorCallback.hal
new file mode 100644
index 0000000..e6d53f7
--- /dev/null
+++ b/umd/1.0/IUMDAdaptorCallback.hal
@@ -0,0 +1,11 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+
+package vendor.qti.hardware.umd@1.0;
+
+interface IUMDAdaptorCallback {
+  onAudioBufferReceive(vec<uint8_t> data) generates (int32_t result);
+  onAudioUevent(AudioStatus status);
+};
\ No newline at end of file
diff --git a/umd/1.0/types.hal b/umd/1.0/types.hal
new file mode 100644
index 0000000..8407e89
--- /dev/null
+++ b/umd/1.0/types.hal
@@ -0,0 +1,14 @@
+/*
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: BSD-3-Clause-Clear
+ */
+
+package vendor.qti.hardware.umd@1.0;
+
+enum AudioStatus : int32_t {
+  AUDIO_STATE_INVALID,
+  AUDIO_STATE_PLAYBACK,
+  AUDIO_STATE_CAPTURE,
+  AUDIO_STATE_PLAYBACK_CAPTURE,
+  AUDIO_STATE_PAUSED
+};
\ No newline at end of file
diff --git a/umd/Android.bp b/umd/Android.bp
new file mode 100644
index 0000000..026474d
--- /dev/null
+++ b/umd/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.umd",
+    use_current: true,
+}
diff --git a/umd/current.txt b/umd/current.txt
new file mode 100644
index 0000000..57a8e88
--- /dev/null
+++ b/umd/current.txt
@@ -0,0 +1,7 @@
+#Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+#SPDX-License-Identifier: BSD-3-Clause-Clear
+
+#HAL released in Android Q
+0ea54fffbc009eb09ad8eb56832f97192fcc49551672b7d4e1c60f5baf5f496b vendor.qti.hardware.umd@1.0::types
+28265d6a58d414bc244d0b0e93b88660b2f9bf12da48361a2f54d54120fb2e96 vendor.qti.hardware.umd@1.0::IUMDAdaptor
+ad5906c3bcf8b4ced9f51e804ba345f2c0831217ac45188f11057507e7dbd692 vendor.qti.hardware.umd@1.0::IUMDAdaptorCallback
diff --git a/vendor_hal_makefile_generator.sh b/vendor_hal_makefile_generator.sh
new file mode 100755
index 0000000..8a01731
--- /dev/null
+++ b/vendor_hal_makefile_generator.sh
@@ -0,0 +1,161 @@
+#!/bin/bash
+# Copyright (c) 2018, 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 US
+
+# This file is used to generate blueprint/makefiles for the vendor hals
+
+# Sanitize host tools
+LS=`which ls`
+LS=${LS:-ls}
+MV=`which mv`
+MV=${MV:-mv}
+CAT=`which cat`
+CAT=${CAT:-cat}
+CUT=`which cut`
+CUT=${CUT:-cut}
+REV=`which rev`
+REV=${REV:-rev}
+SED=`which sed`
+SED=${SED:-sed}
+DIFF=`which diff`
+DIFF=${DIFF:-diff}
+ECHO=`which echo`
+ECHO=${ECHO:-echo}
+FIND=`which find`
+FIND=${FIND:-find}
+GREP=`which grep`
+GREP=${GREP:-grep}
+SORT=`which sort`
+SORT=${SORT:-sort}
+TOUCH=`which touch`
+TOUCH=${TOUCH:-touch}
+
+function generate_make_files() {
+    local dir_path="$ANDROID_BUILD_TOP/$1"
+    pushd $dir_path > /dev/null
+
+    # Due to same package name in different folders we need to detect
+    # opensource case so that it can be handled.
+    local flag_opensource=false
+    if ${ECHO} "$dir_path" | ${GREP} "opensource" > /dev/null;then
+        flag_opensource=true
+    fi
+
+    # Search for all HAL files in given dir.
+    local halFilePaths=`${ECHO} $(${FIND} -iname "*.hal" | ${SORT})`
+
+    #Store package name in below array to create a unique set so that we trigger
+    #hidl-gen only once  for a given package.
+    package_collection=()
+
+    #Iterate over identified .hal Paths
+    local prev_path=""
+    for file in $halFilePaths; do
+        local hal_path=`${ECHO} "$file" | ${REV} | ${CUT} -d"/" -f2- | ${REV}`
+        if [ -e "$hal_path/Android.bp" ] && [ ! -e "$hal_path/.hidl-autogen" ]; then
+            if [ ! "$hal_path" = "$prev_path" ]; then
+                ${ECHO} "Skipping hidl-gen on $1/$hal_path as Android.bp is not compile-time generated"
+                prev_path="$hal_path"
+            fi
+            continue;
+        fi
+        prev_path="$hal_path"
+
+        # Find out package name from HAL file
+        local hal_package=`${ECHO} $(${CAT} $file | ${GREP} -E -m 1 "^package ") | ${CUT} -d' ' -f2`
+
+        # Get rid of extra delimter
+        hal_package=${hal_package%?}
+
+        #Check if we already executed hidl-gen for a given package
+        if ${ECHO} "${package_collection[@]}" | ${GREP} -w $hal_package > /dev/null; then
+            continue;
+        else
+            package_collection+=($hal_package)
+            local delimeter=`${ECHO} "$file" | ${CUT} -d'/' -f2`
+            local root=`${ECHO} "$hal_package" | ${SED} "s/$delimeter/#/g" | ${CUT} -d'#' -f1`
+            #Identify Package Root
+            root=${root%?}
+            #Create root arguments for hidl-command
+            local root_arguments="-r $root:$1 -r  $2"
+        fi
+
+        local hal_path2=$1;
+        #Handling for opensource HAL to solve package name conflict
+        if [ "$flag_opensource" = true ]; then
+            root="$root.$delimeter"
+            hal_path2="$hal_path2/$delimeter"
+        fi
+
+        local root_arguments="-r $root:$hal_path2 -r  $2"
+
+        update_check=0
+        if [ -e "$hal_path/Android.bp" ]; then
+            ${MV} $hal_path/Android.bp $hal_path/.hidl-autogen
+            update_check=1
+        fi
+        ${TOUCH} $hal_path/.hidl-autogen
+
+        ${ECHO} -n "Running hidl-gen on $hal_package: "
+        hidl-gen -Landroidbp $root_arguments $hal_package;
+        rc=$?; if [[ $rc != 0 ]]; then return $rc; fi
+
+        if [ "$update_check" -eq 1 ]; then
+            ${DIFF} -q $hal_path/Android.bp $hal_path/.hidl-autogen > /dev/null
+            if [ $? -eq 0 ]; then
+                ${ECHO} "no changes"
+                ${MV} $hal_path/.hidl-autogen $hal_path/Android.bp
+            else
+                ${ECHO} "updated"
+            fi
+        else
+            ${ECHO} "created"
+        fi
+        ${TOUCH} $hal_path/.hidl-autogen
+    done
+    popd > /dev/null
+}
+
+function start_script_for_interfaces {
+    #Find interfaces in workspace
+    local interfaces=$(${LS} -d ${ANDROID_BUILD_TOP}/vendor/qcom/*/interfaces)
+
+    ${ECHO} "HIDL interfaces:  Scanning for changes..."
+    for interface in $interfaces; do
+        #generate interfaces
+        local relative_interface=${interface#${ANDROID_BUILD_TOP}/}
+        generate_make_files $relative_interface "android.hidl:system/libhidl/transport"
+        if [ $? -ne 0 ] ; then
+           ${ECHO} "HIDL interfaces: Update Failed"
+           return 1;
+        fi
+    done
+    ${ECHO} "HIDL interfaces:  Update complete."
+}
+
+#Start script for interfaces
+start_script_for_interfaces
+
diff --git a/wifi/Android.bp b/wifi/Android.bp
new file mode 100644
index 0000000..3bd94af
--- /dev/null
+++ b/wifi/Android.bp
@@ -0,0 +1,4 @@
+hidl_package_root {
+    name: "vendor.qti.hardware.wifi",
+    use_current: true,
+}
