[meta-freescale] [PATCH v2 38/43] kernel-module-qca9377: Add support for QCA9377 on i.MX 7ULP

Tom Hochstein tom.hochstein at nxp.com
Mon Aug 6 13:05:50 PDT 2018


Signed-off-by: Tom Hochstein <tom.hochstein at nxp.com>
---
 .../kernel-modules/kernel-module-qca9377_2.0.bb    |    5 +
 .../kernel-modules/kernel-module-qcacld-lea.inc    |   53 +
 ...7-CLD-LEA-2.0-porting-to-support-Android-.patch |  257 ++++
 ...inate-errors-by-tool-chain-and-disable-de.patch |   66 +
 ...t-add-timeout-for-dbglog_block-fwlog-read.patch |   39 +
 ...-CORE-remove-the-debug-message-in-default.patch |  176 +++
 ...E-cannot-call-spin_lock_bh-in-irq-context.patch |   81 ++
 .../0006-Kbuild-disable-QCA_CONFIG_SMP.patch       |   31 +
 .../0007-LEA.NRT_2.0-fix-the-build-error.patch     |   53 +
 .../0008-CORE-add-pcie-multi_if_name-support.patch |   85 ++
 ...meout-when-BMI-request-response-transacti.patch |   83 ++
 ...0-CORE-HIF-PCIe-only-support-one-instance.patch |   45 +
 ...RE-BMI-RF-align-the-utf-firmware-bin-name.patch |   31 +
 ...ORE-revert-two-patches-to-support-QCA-SMP.patch |   81 ++
 ...es-os-fix-issue-to-avoid-spin_lock_bh-in-.patch | 1367 ++++++++++++++++++++
 ...d-CONFIG_HDD_WLAN_WAIT_TIME-support-for-u.patch |   51 +
 .../0015-CORE-HIF-enable-pcie-MSI-feature.patch    |   96 ++
 ...016-MLK-18490-CORE-HDD-add-ssid-len-check.patch |   75 ++
 ...cacld-2.0-avoid-overflow-of-bounce-buffer.patch |   29 +
 ...2-qcacld-2.0-fix-the-overflow-of-bounce-b.patch |   90 ++
 20 files changed, 2794 insertions(+)
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qca9377_2.0.bb
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea.inc
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0001-CORE-QCA9377-CLD-LEA-2.0-porting-to-support-Android-.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0002-Kbuild-Eliminate-errors-by-tool-chain-and-disable-de.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0003-dbglog_host-add-timeout-for-dbglog_block-fwlog-read.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0004-CORE-remove-the-debug-message-in-default.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0005-CORE-cannot-call-spin_lock_bh-in-irq-context.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0006-Kbuild-disable-QCA_CONFIG_SMP.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0007-LEA.NRT_2.0-fix-the-build-error.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0008-CORE-add-pcie-multi_if_name-support.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0009-CORE-add-timeout-when-BMI-request-response-transacti.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0010-CORE-HIF-PCIe-only-support-one-instance.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0011-CORE-BMI-RF-align-the-utf-firmware-bin-name.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0012-CORE-revert-two-patches-to-support-QCA-SMP.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0013-CORE-services-os-fix-issue-to-avoid-spin_lock_bh-in-.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0014-CLD-CORE-add-CONFIG_HDD_WLAN_WAIT_TIME-support-for-u.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0015-CORE-HIF-enable-pcie-MSI-feature.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0016-MLK-18490-CORE-HDD-add-ssid-len-check.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0017-MLK-18491-qcacld-2.0-avoid-overflow-of-bounce-buffer.patch
 create mode 100644 recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0018-MLK-18491-02-qcacld-2.0-fix-the-overflow-of-bounce-b.patch

diff --git a/recipes-kernel/kernel-modules/kernel-module-qca9377_2.0.bb b/recipes-kernel/kernel-modules/kernel-module-qca9377_2.0.bb
new file mode 100644
index 0000000..1b4f313
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qca9377_2.0.bb
@@ -0,0 +1,5 @@
+require kernel-module-qcacld-lea.inc
+
+SUMMARY = "Qualcomm WiFi driver for QCA module 9377"
+
+EXTRA_OEMAKE += "${EXTRA_OEMAKE_QCA9377}"
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea.inc b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea.inc
new file mode 100644
index 0000000..1284f24
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea.inc
@@ -0,0 +1,53 @@
+# Copyright 2018 NXP
+
+SUMMARY = "Qualcomm WiFi driver for QCA module 9377"
+LICENSE = "BSD & GPLv2"
+LIC_FILES_CHKSUM = "file://CORE/HDD/src/wlan_hdd_main.c;beginline=1;endline=20;md5=ec8d62116b13db773825ebf7cf91be1d;"
+
+FILESEXTRAPATHS_prepend := "${THISDIR}/kernel-module-qcacld-lea:"
+SRC_URI = " \
+    git://source.codeaurora.org/external/wlan/qcacld-2.0;protocol=https;branch=CNSS.LEA.NRT_2.0; \
+    file://0001-CORE-QCA9377-CLD-LEA-2.0-porting-to-support-Android-.patch \
+    file://0002-Kbuild-Eliminate-errors-by-tool-chain-and-disable-de.patch \
+    file://0003-dbglog_host-add-timeout-for-dbglog_block-fwlog-read.patch \
+    file://0004-CORE-remove-the-debug-message-in-default.patch \
+    file://0005-CORE-cannot-call-spin_lock_bh-in-irq-context.patch \
+    file://0006-Kbuild-disable-QCA_CONFIG_SMP.patch \
+    file://0007-LEA.NRT_2.0-fix-the-build-error.patch \
+    file://0008-CORE-add-pcie-multi_if_name-support.patch \
+    file://0009-CORE-add-timeout-when-BMI-request-response-transacti.patch \
+    file://0010-CORE-HIF-PCIe-only-support-one-instance.patch \
+    file://0011-CORE-BMI-RF-align-the-utf-firmware-bin-name.patch \
+    file://0012-CORE-revert-two-patches-to-support-QCA-SMP.patch \
+    file://0013-CORE-services-os-fix-issue-to-avoid-spin_lock_bh-in-.patch \
+    file://0014-CLD-CORE-add-CONFIG_HDD_WLAN_WAIT_TIME-support-for-u.patch \
+    file://0015-CORE-HIF-enable-pcie-MSI-feature.patch \
+    file://0016-MLK-18490-CORE-HDD-add-ssid-len-check.patch \
+    file://0017-MLK-18491-qcacld-2.0-avoid-overflow-of-bounce-buffer.patch \
+    file://0018-MLK-18491-02-qcacld-2.0-fix-the-overflow-of-bounce-b.patch \
+"
+# version v4.5.23.1
+SRCREV = "af6adc6662dd2e8f5ca25af2d184faef44465b45"
+S = "${WORKDIR}/git"
+
+inherit module
+
+EXTRA_OEMAKE_QCA9377 += " \
+    CONFIG_CLD_HL_SDIO_CORE=y \
+    CONFIG_FEATURE_COEX_PTA_CONFIG_ENABLE=y \
+    CONFIG_PER_VDEV_TX_DESC_POOL=1 \
+    CONFIG_QCA_LL_TX_FLOW_CT=1 \
+    CONFIG_QCA_SUPPORT_TXRX_DRIVER_TCP_DEL_ACK=y \
+    CONFIG_WLAN_FEATURE_FILS=y \
+    CONFIG_WLAN_WAPI_MODE_11AC_DISABLE=y \
+    MODNAME=qca9377 \
+    SAP_AUTH_OFFLOAD=1 \
+"
+EXTRA_OEMAKE += " \
+    CONFIG_CFG80211_INTERNAL_REGDB=y \
+    CONFIG_HDD_WLAN_WAIT_TIME=10000 \
+    CONFIG_LINUX_QCMBR=y \
+    CONFIG_NON_QC_PLATFORM=y \
+    CONFIG_PMF_SUPPORT=y \
+    TARGET_BUILD_VARIANT=user \
+"
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0001-CORE-QCA9377-CLD-LEA-2.0-porting-to-support-Android-.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0001-CORE-QCA9377-CLD-LEA-2.0-porting-to-support-Android-.patch
new file mode 100644
index 0000000..e9b7fb7
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0001-CORE-QCA9377-CLD-LEA-2.0-porting-to-support-Android-.patch
@@ -0,0 +1,257 @@
+From 7984a38559bf13bfc3aeff868faf3aacea4df20b Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Mon, 14 May 2018 14:19:46 +0800
+Subject: [PATCH 01/11] CORE: QCA9377 CLD LEA 2.0 porting to support Android O
+
+QCA9377 CLD LEA 2.0 porting to support Android O.
+
+Signed-off-by: Hangtian Zhu <hangtian at qti.qualcomm.com>
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/HDD/src/wlan_hdd_cfg80211.c           |  6 ++++++
+ CORE/HDD/src/wlan_hdd_hostapd.c            | 10 ++++++++++
+ CORE/HDD/src/wlan_hdd_wext.c               |  8 ++++++++
+ CORE/SERVICES/BMI/ol_fw.c                  |  4 +++-
+ CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c |  2 +-
+ CORE/VOSS/inc/vos_cnss.h                   |  2 ++
+ CORE/VOSS/src/vos_nvitem.c                 |  4 ++--
+ Kbuild                                     |  2 ++
+ 8 files changed, 34 insertions(+), 4 deletions(-)
+
+diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
+index c2793ce..cb6f03d 100644
+--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
++++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
+@@ -7520,6 +7520,8 @@ static int __wlan_hdd_cfg80211_ll_stats_get(struct wiphy *wiphy,
+     hdd_station_ctx_t *hddstactx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
+     int status;
+ 
++    printk("WAR: return ll_stats, because fw didn't enable\n");
++    return 0;
+     if (VOS_FTM_MODE == hdd_get_conparam()) {
+         hddLog(LOGE, FL("Command not allowed in FTM mode"));
+         return -EINVAL;
+@@ -29309,6 +29311,7 @@ wlan_hdd_cfg80211_set_mac_acl(struct wiphy *wiphy,
+ 	return ret;
+ }
+ 
++#ifdef CONFIG_NL80211_TESTMODE
+ #ifdef WLAN_NL80211_TESTMODE
+ #ifdef FEATURE_WLAN_LPHB
+ void wlan_hdd_cfg80211_lphb_ind_handler
+@@ -29558,6 +29561,7 @@ nla_put_failure:
+ }
+ #endif
+ #endif /* CONFIG_NL80211_TESTMODE */
++#endif
+ 
+ /**
+  * wlan_hdd_chan_info_cb() - channel info callback
+@@ -31911,9 +31915,11 @@ static struct cfg80211_ops wlan_hdd_cfg80211_ops =
+      .resume = wlan_hdd_cfg80211_resume_wlan,
+      .suspend = wlan_hdd_cfg80211_suspend_wlan,
+      .set_mac_acl = wlan_hdd_cfg80211_set_mac_acl,
++#ifdef CONFIG_NL80211_TESTMODE
+ #ifdef WLAN_NL80211_TESTMODE
+      .testmode_cmd = wlan_hdd_cfg80211_testmode,
+ #endif
++#endif
+ #ifdef QCA_HT_2040_COEX
+      .set_ap_chanwidth = wlan_hdd_cfg80211_set_ap_channel_width,
+ #endif
+diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
+index 3b8373f..9519764 100644
+--- a/CORE/HDD/src/wlan_hdd_hostapd.c
++++ b/CORE/HDD/src/wlan_hdd_hostapd.c
+@@ -7670,11 +7670,15 @@ static const iw_handler hostapd_private[] = {
+ };
+ const struct iw_handler_def hostapd_handler_def = {
+    .num_standard     = sizeof(hostapd_handler) / sizeof(hostapd_handler[0]),
++#ifdef CONFIG_WEXT_PRIV
+    .num_private      = sizeof(hostapd_private) / sizeof(hostapd_private[0]),
+    .num_private_args = sizeof(hostapd_private_args) / sizeof(hostapd_private_args[0]),
++#endif
+    .standard         = (iw_handler *)hostapd_handler,
++#ifdef CONFIG_WEXT_PRIV
+    .private          = (iw_handler *)hostapd_private,
+    .private_args     = hostapd_private_args,
++#endif
+    .get_wireless_stats = NULL,
+ };
+ 
+@@ -7704,7 +7708,9 @@ void hdd_set_ap_ops( struct net_device *pWlanHostapdDev )
+ VOS_STATUS hdd_init_ap_mode(hdd_adapter_t *pAdapter, bool reinit)
+ {
+     hdd_hostapd_state_t * phostapdBuf;
++#ifdef CONFIG_WIRELESS_EXT
+     struct net_device *dev = pAdapter->dev;
++#endif
+     hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
+     VOS_STATUS status;
+ #ifdef WLAN_FEATURE_MBSSID
+@@ -7841,7 +7847,9 @@ VOS_STATUS hdd_init_ap_mode(hdd_adapter_t *pAdapter, bool reinit)
+     sema_init(&(WLAN_HDD_GET_AP_CTX_PTR(pAdapter))->semWpsPBCOverlapInd, 1);
+ 
+      // Register as a wireless device
++#ifdef CONFIG_WIRELESS_EXT
+     dev->wireless_handlers = (struct iw_handler_def *)& hostapd_handler_def;
++#endif
+ 
+     //Initialize the data path module
+     status = hdd_softap_init_tx_rx(pAdapter);
+@@ -8013,6 +8021,7 @@ VOS_STATUS hdd_unregister_hostapd(hdd_adapter_t *pAdapter, bool rtnl_held)
+       detach the wireless device handlers */
+    if (pAdapter->dev)
+    {
++#ifdef CONFIG_WIRELESS_EXT
+       if (rtnl_held)
+           pAdapter->dev->wireless_handlers = NULL;
+       else {
+@@ -8020,6 +8029,7 @@ VOS_STATUS hdd_unregister_hostapd(hdd_adapter_t *pAdapter, bool rtnl_held)
+           pAdapter->dev->wireless_handlers = NULL;
+           rtnl_unlock();
+       }
++#endif
+    }
+ 
+ #ifdef WLAN_FEATURE_MBSSID
+diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
+index eeeeab6..d139555 100644
+--- a/CORE/HDD/src/wlan_hdd_wext.c
++++ b/CORE/HDD/src/wlan_hdd_wext.c
+@@ -12822,12 +12822,16 @@ static const struct iw_priv_args we_private_args[] = {
+ 
+ const struct iw_handler_def we_handler_def = {
+    .num_standard     = sizeof(we_handler) / sizeof(we_handler[0]),
++#ifdef CONFIG_WEXT_PRIV
+    .num_private      = sizeof(we_private) / sizeof(we_private[0]),
+    .num_private_args = sizeof(we_private_args) / sizeof(we_private_args[0]),
++#endif
+ 
+    .standard         = (iw_handler *)we_handler,
++#ifdef CONFIG_WEXT_PRIV
+    .private          = (iw_handler *)we_private,
+    .private_args     = we_private_args,
++#endif
+    .get_wireless_stats = get_wireless_stats,
+ };
+ 
+@@ -13116,7 +13120,9 @@ int hdd_register_wext(struct net_device *dev)
+     }
+     hdd_initialize_fils_info(pwextBuf);
+     /* Register as a wireless device */
++#ifdef CONFIG_WIRELESS_EXT
+     dev->wireless_handlers = (struct iw_handler_def *)&we_handler_def;
++#endif
+ 
+     EXIT();
+     return 0;
+@@ -13127,9 +13133,11 @@ int hdd_UnregisterWext(struct net_device *dev)
+ 	hddLog(LOG1, FL("dev(%pK)"), dev);
+ 
+ 	if (dev != NULL) {
++#ifdef CONFIG_WIRELESS_EXT
+ 		rtnl_lock();
+ 		dev->wireless_handlers = NULL;
+ 		rtnl_unlock();
++#endif
+ 	}
+ 
+ 	return 0;
+diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c
+index 83ae0d9..4f7dfbd 100644
+--- a/CORE/SERVICES/BMI/ol_fw.c
++++ b/CORE/SERVICES/BMI/ol_fw.c
+@@ -552,7 +552,7 @@ static char *ol_board_id_to_filename(struct ol_softc *scn, uint16_t board_id)
+ 	if (board_id > 0xFF)
+ 		board_id = 0x0;
+ 
+-	snprintf(&dest[input_len - 2], 3, "%.2x", board_id);
++	//snprintf(&dest[input_len - 2], 3, "%.2x", board_id);
+ out:
+ 	return dest;
+ }
+@@ -2314,6 +2314,7 @@ int ol_download_firmware(struct ol_softc *scn)
+ 	}
+ 
+ 	address = BMI_SEGMENTED_WRITE_ADDR;
++#if 0
+ 	if (scn->enablesinglebinary == FALSE) {
+ 		if (ol_transfer_bin_file(scn, ATH_SETUP_FILE,
+ 					BMI_SEGMENTED_WRITE_ADDR, TRUE) == EOK) {
+@@ -2322,6 +2323,7 @@ int ol_download_firmware(struct ol_softc *scn)
+ 			BMIExecute(scn->hif_hdl, address, &param, scn);
+ 		}
+ 	}
++#endif
+ 
+ 	/* Download Target firmware - TODO point to target specific files in runtime */
+ 	if (ol_transfer_bin_file(scn, ATH_FIRMWARE_FILE, address, TRUE) != EOK) {
+diff --git a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c
+index 24bf785..0f68c58 100644
+--- a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c
++++ b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c
+@@ -227,7 +227,7 @@ ath_hif_sdio_probe(void *context, void *hif_handle)
+     ol_sc->hif_hdl = hif_handle;
+ 
+     /* Get RAM dump memory address and size */
+-    ol_sc->ramdump_base = hif_get_virt_ramdump_mem(&ol_sc->ramdump_size);
++    ol_sc->ramdump_base = NULL;//hif_get_virt_ramdump_mem(&ol_sc->ramdump_size);
+     if (ol_sc->ramdump_base == NULL || !ol_sc->ramdump_size) {
+         VOS_TRACE(VOS_MODULE_ID_HIF, VOS_TRACE_LEVEL_ERROR,
+             "%s: Failed to get RAM dump memory address or size!\n",
+diff --git a/CORE/VOSS/inc/vos_cnss.h b/CORE/VOSS/inc/vos_cnss.h
+index fa2d7f8..6d7c8f1 100644
+--- a/CORE/VOSS/inc/vos_cnss.h
++++ b/CORE/VOSS/inc/vos_cnss.h
+@@ -53,10 +53,12 @@ enum cnss_cc_src {
+ };
+ 
+ static inline void vos_wlan_pci_link_down(void){ return; }
++#ifdef HIF_PCI
+ static inline int vos_pcie_shadow_control(struct pci_dev *dev, bool enable)
+ {
+ 	return -ENODEV;
+ }
++#endif
+ 
+ static inline u8 *vos_get_cnss_wlan_mac_buff(struct device *dev, uint32_t *num)
+ {
+diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c
+index bd463d0..ed7a048 100644
+--- a/CORE/VOSS/src/vos_nvitem.c
++++ b/CORE/VOSS/src/vos_nvitem.c
+@@ -976,7 +976,7 @@ static void vos_set_5g_channel_params(uint16_t oper_ch,
+ 				      struct ch_params_s *ch_params)
+ {
+ 	eNVChannelEnabledType chan_state = NV_CHANNEL_ENABLE;
+-	const struct bonded_chan *bonded_chan_ptr;
++	const struct bonded_chan *bonded_chan_ptr = NULL;
+ 	uint16_t center_chan;
+ 
+ 	if (CH_WIDTH_MAX <= ch_params->ch_width)
+@@ -1782,7 +1782,7 @@ bool vos_is_channel_support_sub20(uint16_t operation_channel,
+ 	eNVChannelEnabledType channel_state;
+ 
+ 	if (VOS_IS_CHANNEL_5GHZ(operation_channel)) {
+-		const struct bonded_chan *bonded_chan_ptr;
++		const struct bonded_chan *bonded_chan_ptr = NULL;
+ 
+ 		channel_state =
+ 		    vos_search_5g_bonded_channel(operation_channel,
+diff --git a/Kbuild b/Kbuild
+index c386d37..96d9b37 100644
+--- a/Kbuild
++++ b/Kbuild
+@@ -222,6 +222,8 @@ ifeq ($(CONFIG_ROME_IF),usb)
+ endif
+ ifeq ($(CONFIG_QCA_WIFI_SDIO), 1)
+ CONFIG_ATH_11AC_TXCOMPACT := 0
++CONFIG_WLAN_SYNC_TSF := y
++#CONFIG_WLAN_SYNC_TSF_PLUS := y
+ endif
+ 
+ #Enable per vdev Tx desc pool
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0002-Kbuild-Eliminate-errors-by-tool-chain-and-disable-de.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0002-Kbuild-Eliminate-errors-by-tool-chain-and-disable-de.patch
new file mode 100644
index 0000000..7df6558
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0002-Kbuild-Eliminate-errors-by-tool-chain-and-disable-de.patch
@@ -0,0 +1,66 @@
+From 990dd836c6dffa810611e2b1e42582b79088e345 Mon Sep 17 00:00:00 2001
+From: Fugang Duan <fugang.duan at nxp.com>
+Date: Mon, 2 Apr 2018 14:51:05 +0800
+Subject: [PATCH 02/11] Kbuild: Eliminate errors by tool chain and disable
+ debug configs
+
+- Eliminate errors caused by GCC 6.x warning.
+- Disable debug configs in default.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ Kbuild | 13 +++++++------
+ 1 file changed, 7 insertions(+), 6 deletions(-)
+
+diff --git a/Kbuild b/Kbuild
+index 96d9b37..3c4bd8d 100644
+--- a/Kbuild
++++ b/Kbuild
+@@ -191,13 +191,13 @@ endif
+ # Feature flags which are not (currently) configurable via Kconfig
+ 
+ #Whether to build debug version
+-BUILD_DEBUG_VERSION := 1
++#BUILD_DEBUG_VERSION := 1
+ 
+ #Enable this flag to build driver in diag version
+-BUILD_DIAG_VERSION := 1
++#BUILD_DIAG_VERSION := 1
+ 
+ #Do we panic on bug?  default is to warn
+-PANIC_ON_BUG := 1
++#PANIC_ON_BUG := 1
+ 
+ #Re-enable wifi on WDI timeout
+ RE_ENABLE_WIFI_ON_WDI_TIMEOUT := 0
+@@ -1015,7 +1015,6 @@ CDEFINES :=	-DANI_LITTLE_BYTE_ENDIAN \
+ 		-DWLAN_PERF \
+ 		-DPTT_SOCK_SVC_ENABLE \
+ 		-Wall\
+-		-Werror\
+ 		-D__linux__ \
+ 		-DHAL_SELF_STA_PER_BSS=1 \
+ 		-DWLAN_FEATURE_VOWIFI_11R \
+@@ -1055,7 +1054,9 @@ CDEFINES :=	-DANI_LITTLE_BYTE_ENDIAN \
+ 		-DFEATURE_WLAN_CH144 \
+ 		-DHTC_CRP_DEBUG \
+ 		-DWLAN_VOWIFI_DEBUG \
+-		-DATH_SUPPORT_DFS
++		-DATH_SUPPORT_DFS \
++		-Wno-misleading-indentation
++#-Werror is omitted
+ 
+ ifeq ($(CONFIG_WLAN_POWER_DEBUGFS), y)
+ CDEFINES += -DWLAN_POWER_DEBUGFS
+@@ -1156,7 +1157,7 @@ CDEFINES += -DMDNS_OFFLOAD
+ endif
+ 
+ ifeq (y,$(findstring y,$(CONFIG_ARCH_MSM) $(CONFIG_ARCH_QCOM)))
+-CDEFINES += -DMSM_PLATFORM
++#CDEFINES += -DMSM_PLATFORM
+ ifeq ($(CONFIG_CNSS), y)
+ ifeq ($(CONFIG_HIF_PCI), 1)
+ CDEFINES += -DFEATURE_BUS_BANDWIDTH
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0003-dbglog_host-add-timeout-for-dbglog_block-fwlog-read.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0003-dbglog_host-add-timeout-for-dbglog_block-fwlog-read.patch
new file mode 100644
index 0000000..60dbcff
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0003-dbglog_host-add-timeout-for-dbglog_block-fwlog-read.patch
@@ -0,0 +1,39 @@
+From 48b35557f766f360d65b1c693c472997847c4738 Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Wed, 9 May 2018 16:08:57 +0800
+Subject: [PATCH 03/11] dbglog_host: add timeout for dbglog_block fwlog read
+
+Add timeout for dbglog_block fwlog read operation.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/UTILS/FWLOG/dbglog_host.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/CORE/UTILS/FWLOG/dbglog_host.c b/CORE/UTILS/FWLOG/dbglog_host.c
+index 7a7be6d..5ac1dee 100644
+--- a/CORE/UTILS/FWLOG/dbglog_host.c
++++ b/CORE/UTILS/FWLOG/dbglog_host.c
+@@ -57,6 +57,7 @@
+ #define CLD_DEBUGFS_DIR          "cld"
+ #endif
+ #define DEBUGFS_BLOCK_NAME       "dbglog_block"
++#define CNSS_DIAG_FWLOG_TIMEOUT	2000
+ 
+ #define ATH_MODULE_NAME fwlog
+ #include <a_debug.h>
+@@ -4291,8 +4292,9 @@ static ssize_t dbglog_block_read(struct file *file,
+ 
+        spin_unlock_bh(&fwlog->fwlog_queue.lock);
+ 
+-       ret = wait_for_completion_interruptible(
+-                    &fwlog->fwlog_completion);
++       ret = wait_for_completion_interruptible_timeout(
++                    &fwlog->fwlog_completion,
++		    msecs_to_jiffies(CNSS_DIAG_FWLOG_TIMEOUT));
+        if (ret == -ERESTARTSYS) {
+                vfree(buf);
+                return ret;
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0004-CORE-remove-the-debug-message-in-default.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0004-CORE-remove-the-debug-message-in-default.patch
new file mode 100644
index 0000000..451de5e
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0004-CORE-remove-the-debug-message-in-default.patch
@@ -0,0 +1,176 @@
+From 1f285b2023fa97a140bf65e81a5778c96320a275 Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Mon, 14 May 2018 14:42:37 +0800
+Subject: [PATCH 04/11] CORE: remove the debug message in default
+
+Remove the debug message in default.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/CLD_TXRX/HTT/htt.c                            |  2 +-
+ CORE/CLD_TXRX/HTT/htt_t2h.c                        |  2 +-
+ CORE/CLD_TXRX/TXRX/ol_txrx.c                       |  2 +-
+ CORE/SERVICES/BMI/ol_fw.c                          | 10 +++++-----
+ CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c |  2 +-
+ CORE/SERVICES/WMA/wma_dfs_interface.c              |  2 +-
+ CORE/SERVICES/WMI/wmi_unified.c                    | 10 +++++-----
+ 7 files changed, 15 insertions(+), 15 deletions(-)
+
+diff --git a/CORE/CLD_TXRX/HTT/htt.c b/CORE/CLD_TXRX/HTT/htt.c
+index 3e91ceb..e3b97f5 100644
+--- a/CORE/CLD_TXRX/HTT/htt.c
++++ b/CORE/CLD_TXRX/HTT/htt.c
+@@ -217,7 +217,7 @@ htt_attach(
+ 
+     pdev->cfg.is_full_reorder_offload =
+          ol_cfg_is_full_reorder_offload(pdev->ctrl_pdev);
+-    adf_os_print("is_full_reorder_offloaded? %d\n",
++    pr_debug("is_full_reorder_offloaded? %d\n",
+                   (int)pdev->cfg.is_full_reorder_offload);
+     pdev->targetdef = htc_get_targetdef(htc_pdev);
+     /*
+diff --git a/CORE/CLD_TXRX/HTT/htt_t2h.c b/CORE/CLD_TXRX/HTT/htt_t2h.c
+index 78c7c4e..6ea740c 100644
+--- a/CORE/CLD_TXRX/HTT/htt_t2h.c
++++ b/CORE/CLD_TXRX/HTT/htt_t2h.c
+@@ -168,7 +168,7 @@ htt_t2h_lp_msg_handler(void *context, adf_nbuf_t htt_t2h_msg )
+             /* abort if the target is incompatible with the host */
+             adf_os_assert(pdev->tgt_ver.major == HTT_CURRENT_VERSION_MAJOR);
+             if (pdev->tgt_ver.minor != HTT_CURRENT_VERSION_MINOR) {
+-                adf_os_print(
++                pr_debug(
+                     "*** Warning: host/target HTT versions are different, "
+                     "though compatible!\n");
+             }
+diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c
+index e251c79..f9ded71 100644
+--- a/CORE/CLD_TXRX/TXRX/ol_txrx.c
++++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c
+@@ -486,7 +486,7 @@ ol_txrx_pdev_attach(
+         desc_per_page = desc_per_page >> 1;
+     }
+     pdev->tx_desc.page_divider = (sig_bit - 1);
+-    TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
++    TXRX_PRINT(TXRX_PRINT_LEVEL_INFO1,
+         "page_divider 0x%x, offset_filter 0x%x num elem %d, ol desc num page %d, ol desc per page %d",
+         pdev->tx_desc.page_divider, pdev->tx_desc.offset_filter,
+         desc_pool_size, pdev->tx_desc.desc_pages.num_pages,
+diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c
+index 4f7dfbd..8e8f7cb 100644
+--- a/CORE/SERVICES/BMI/ol_fw.c
++++ b/CORE/SERVICES/BMI/ol_fw.c
+@@ -744,7 +744,7 @@ defined(CONFIG_NON_QC_PLATFORM_PCI)
+        status = request_firmware(&fw_entry, filename, scn->sc_osdev->device);
+ 	if (status)
+ 	{
+-		pr_err("%s: Failed to get %s:%d\n", __func__, filename, status);
++		pr_debug("%s: Failed to get %s:%d\n", __func__, filename, status);
+ 
+ 		if (file == ATH_OTP_FILE)
+ 			return -ENOENT;
+@@ -759,7 +759,7 @@ defined(CONFIG_NON_QC_PLATFORM_PCI)
+ 				return -1;
+ 			}
+ 
+-			pr_info("%s: Trying to load default %s\n",
++			pr_debug("%s: Trying to load default %s\n",
+ 							__func__, filename);
+ 
+ 			status = request_firmware(&fw_entry, filename,
+@@ -836,7 +836,7 @@ defined(CONFIG_NON_QC_PLATFORM_PCI)
+ 		BMIReadMemory(scn->hif_hdl,
+ 				HOST_INTEREST_ITEM_ADDRESS(scn->target_type, hi_board_ext_data),
+ 				(u_int8_t *)&board_ext_address, 4, scn);
+-		printk("Board extended Data download address: 0x%x\n", board_ext_address);
++		pr_debug("Board extended Data download address: 0x%x\n", board_ext_address);
+ 
+ 		/*
+ 		 * Check whether the target has allocated memory for extended board
+@@ -2240,7 +2240,7 @@ int ol_download_firmware(struct ol_softc *scn)
+ 	} else {
+ 		/* Transfer One Time Programmable data */
+ 		address = BMI_SEGMENTED_WRITE_ADDR;
+-		printk("%s: Using 0x%x for the remainder of init\n", __func__, address);
++		pr_debug("%s: Using 0x%x for the remainder of init\n", __func__, address);
+ 
+ 		if ( scn->enablesinglebinary == FALSE ) {
+ #ifdef HIF_PCI
+@@ -2258,7 +2258,7 @@ int ol_download_firmware(struct ol_softc *scn)
+ 				bdf_ret = param & 0xff;
+ 				if (!bdf_ret)
+ 					scn->board_id = (param >> 8) & 0xffff;
+-				pr_err("%s: chip_id:0x%0x board_id:0x%0x\n",
++				pr_debug("%s: chip_id:0x%0x board_id:0x%0x\n",
+ 						__func__, scn->target_version,
+ 							scn->board_id);
+ 			} else if (status < 0) {
+diff --git a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
+index 0174a60..51148ad 100644
+--- a/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
++++ b/CORE/SERVICES/HIF/sdio/linux/native_sdio/src/hif.c
+@@ -114,7 +114,7 @@ unsigned int forcecard = 0;
+ module_param(forcecard, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ MODULE_PARM_DESC(forcecard, "Ignore card capabilities information to switch bus mode");
+ 
+-unsigned int debugcccr = 1;
++unsigned int debugcccr = 0;
+ module_param(debugcccr, uint, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ MODULE_PARM_DESC(debugcccr, "Output this cccr values");
+ 
+diff --git a/CORE/SERVICES/WMA/wma_dfs_interface.c b/CORE/SERVICES/WMA/wma_dfs_interface.c
+index 61f161c..2f90886 100644
+--- a/CORE/SERVICES/WMA/wma_dfs_interface.c
++++ b/CORE/SERVICES/WMA/wma_dfs_interface.c
+@@ -65,7 +65,7 @@ ol_if_dfs_attach(struct ieee80211com *ic, void *ptr, void *radar_info)
+ {
+     struct ath_dfs_caps *pCap = (struct ath_dfs_caps *) ptr;
+ 
+-    adf_os_print("%s: called; ptr=%pK, radar_info=%pK\n",
++    pr_debug("%s: called; ptr=%pK, radar_info=%pK\n",
+                   __func__, ptr, radar_info);
+ 
+     pCap->ath_chip_is_bb_tlv = 1;
+diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c
+index 386a3b7..0b9c1cd 100644
+--- a/CORE/SERVICES/WMI/wmi_unified.c
++++ b/CORE/SERVICES/WMI/wmi_unified.c
+@@ -1066,7 +1066,7 @@ int wmi_unified_unregister_event_handler(wmi_unified_t wmi_handle,
+ {
+     u_int32_t idx=0;
+     if ( (idx = wmi_unified_get_event_handler_ix( wmi_handle, event_id)) == -1) {
+-        printk("%s : event handler is not registered: event id 0x%x \n",
++        pr_debug("%s : event handler is not registered: event id 0x%x \n",
+                 __func__, event_id);
+         return -1;
+     }
+@@ -1237,7 +1237,7 @@ void __wmi_control_rx(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf)
+ 
+ 		idx = wmi_unified_get_event_handler_ix(wmi_handle, id) ;
+ 		if (idx == -1) {
+-			pr_err("%s : event handler is not registered: event id 0x%x\n",
++			pr_debug("%s : event handler is not registered: event id 0x%x\n",
+ 			       __func__, id);
+ 			goto end;
+ 		}
+@@ -1256,15 +1256,15 @@ void __wmi_control_rx(struct wmi_unified *wmi_handle, wmi_buf_t evt_buf)
+ 
+ 	switch (id) {
+ 	default:
+-		pr_info("%s: Unhandled WMI event %d\n", __func__, id);
++		pr_debug("%s: Unhandled WMI event %d\n", __func__, id);
+ 		break;
+ 	case WMI_SERVICE_READY_EVENTID:
+-		pr_info("%s: WMI UNIFIED SERVICE READY event\n", __func__);
++		pr_debug("%s: WMI UNIFIED SERVICE READY event\n", __func__);
+ 		wma_rx_service_ready_event(wmi_handle->scn_handle,
+ 					   wmi_cmd_struct_ptr);
+ 		break;
+ 	case WMI_READY_EVENTID:
+-		pr_info("%s:  WMI UNIFIED READY event\n", __func__);
++		pr_debug("%s:  WMI UNIFIED READY event\n", __func__);
+ 		wma_rx_ready_event(wmi_handle->scn_handle, wmi_cmd_struct_ptr);
+ 		break;
+ 	}
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0005-CORE-cannot-call-spin_lock_bh-in-irq-context.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0005-CORE-cannot-call-spin_lock_bh-in-irq-context.patch
new file mode 100644
index 0000000..191cb7c
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0005-CORE-cannot-call-spin_lock_bh-in-irq-context.patch
@@ -0,0 +1,81 @@
+From b0944b8c45efecf75b9d1be3182bd41cba0a1859 Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Mon, 14 May 2018 15:36:44 +0800
+Subject: [PATCH 05/11] CORE: cannot call spin_lock_bh in irq context
+
+Cannot call spin_lock_bh in irq context.
+Remove the dump message when send wmi command during target is suspended.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/HDD/src/wlan_hdd_main.c    |  7 +++++--
+ CORE/SERVICES/WMI/wmi_unified.c |  3 +--
+ CORE/VOSS/src/vos_sched.c       | 10 +++++++---
+ 3 files changed, 13 insertions(+), 7 deletions(-)
+
+diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
+index db42731..4f48d53 100644
+--- a/CORE/HDD/src/wlan_hdd_main.c
++++ b/CORE/HDD/src/wlan_hdd_main.c
+@@ -13823,10 +13823,13 @@ VOS_STATUS hdd_get_front_adapter( hdd_context_t *pHddCtx,
+                                   hdd_adapter_list_node_t** ppAdapterNode)
+ {
+     VOS_STATUS status;
+-    spin_lock_bh(&pHddCtx->hddAdapters.lock);
++    bool in_irq_context = (in_irq() || irqs_disabled());
++    if (!in_irq_context)
++	spin_lock_bh(&pHddCtx->hddAdapters.lock);
+     status =  hdd_list_peek_front ( &pHddCtx->hddAdapters,
+                    (hdd_list_node_t**) ppAdapterNode );
+-    spin_unlock_bh(&pHddCtx->hddAdapters.lock);
++    if (!in_irq_context)
++	spin_unlock_bh(&pHddCtx->hddAdapters.lock);
+     return status;
+ }
+ 
+diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c
+index 0b9c1cd..b291614 100644
+--- a/CORE/SERVICES/WMI/wmi_unified.c
++++ b/CORE/SERVICES/WMI/wmi_unified.c
+@@ -926,9 +926,8 @@ int wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, int len,
+ 	if (adf_os_atomic_read(&wmi_handle->is_target_suspended) &&
+ 			( (WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID != cmd_id) &&
+ 			  (WMI_PDEV_RESUME_CMDID != cmd_id)) ) {
+-		adf_os_print("\nERROR: %s: Target is suspended  could not send WMI command: %d\n",
++		pr_debug("\nERROR: %s: Target is suspended  could not send WMI command: %d\n",
+ 				__func__, cmd_id);
+-		VOS_ASSERT(0);
+ 		return -EBUSY;
+ 	} else
+ 		goto dont_tag;
+diff --git a/CORE/VOSS/src/vos_sched.c b/CORE/VOSS/src/vos_sched.c
+index cb5787e..99912ab 100644
+--- a/CORE/VOSS/src/vos_sched.c
++++ b/CORE/VOSS/src/vos_sched.c
+@@ -1370,16 +1370,20 @@ void vos_free_tlshim_pkt(pVosSchedContext pSchedContext,
+ struct VosTlshimPkt *vos_alloc_tlshim_pkt(pVosSchedContext pSchedContext)
+ {
+    struct VosTlshimPkt *pkt;
++   bool in_irq_context = (in_irq() || irqs_disabled());
+ 
+-   spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++   if (!in_irq_context)
++	spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+    if (list_empty(&pSchedContext->VosTlshimPktFreeQ)) {
+-       spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++   	if (!in_irq_context)
++		spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+        return NULL;
+    }
+    pkt = list_first_entry(&pSchedContext->VosTlshimPktFreeQ,
+                           struct VosTlshimPkt, list);
+    list_del(&pkt->list);
+-   spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++   if (!in_irq_context)
++	spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+    return pkt;
+ }
+ 
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0006-Kbuild-disable-QCA_CONFIG_SMP.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0006-Kbuild-disable-QCA_CONFIG_SMP.patch
new file mode 100644
index 0000000..0cbb75e
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0006-Kbuild-disable-QCA_CONFIG_SMP.patch
@@ -0,0 +1,31 @@
+From 8b67d5d294896db83badb8d860051a2ab69e6a3d Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Mon, 14 May 2018 20:09:13 +0800
+Subject: [PATCH 06/11] Kbuild: disable QCA_CONFIG_SMP
+
+Disable QCA_CONFIG_SMP config for CLD driver since it still
+have bug that cause kernel dump.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ Kbuild | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/Kbuild b/Kbuild
+index 3c4bd8d..af52286 100644
+--- a/Kbuild
++++ b/Kbuild
+@@ -1470,8 +1470,10 @@ endif
+ 
+ #Mark it as SMP Kernel
+ ifeq ($(CONFIG_SMP),y)
++ifneq ($(CONFIG_ROME_IF), sdio)
+ CDEFINES += -DQCA_CONFIG_SMP
+ endif
++endif
+ 
+ #rps feature
+ ifeq ($(CONFIG_RPS),y)
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0007-LEA.NRT_2.0-fix-the-build-error.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0007-LEA.NRT_2.0-fix-the-build-error.patch
new file mode 100644
index 0000000..0e6f98e
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0007-LEA.NRT_2.0-fix-the-build-error.patch
@@ -0,0 +1,53 @@
+From 26a981e1b0f0a4c123d2c2eaa59d50811e25929b Mon Sep 17 00:00:00 2001
+From: Fugang Duan <fugang.duan at nxp.com>
+Date: Mon, 2 Apr 2018 15:33:38 +0800
+Subject: [PATCH 07/11] LEA.NRT_2.0: fix the build error
+
+Fix the build error for PCI host in LEA.NRT_1.0 version.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/HDD/src/wlan_hdd_cfg80211.c | 2 ++
+ CORE/SERVICES/BMI/ol_fw.h        | 4 ++--
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
+index cb6f03d..50d5ae0 100644
+--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
++++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
+@@ -13492,12 +13492,14 @@ static int hdd_convert_auth_type(uint32_t auth_type)
+ 	case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
+ 		ret_val = QCA_WLAN_AUTH_TYPE_WAI_PSK;
+ 		break;
++#ifdef WLAN_FEATURE_11W
+ 	case eCSR_AUTH_TYPE_RSN_PSK_SHA256:
+ 		ret_val = QCA_WLAN_AUTH_TYPE_SHA256_PSK;
+ 		break;
+ 	case eCSR_AUTH_TYPE_RSN_8021X_SHA256:
+ 		ret_val = QCA_WLAN_AUTH_TYPE_SHA256;
+ 		break;
++#endif
+ 	case eCSR_NUM_OF_SUPPORT_AUTH_TYPE:
+ 	case eCSR_AUTH_TYPE_FAILED:
+ 	case eCSR_AUTH_TYPE_NONE:
+diff --git a/CORE/SERVICES/BMI/ol_fw.h b/CORE/SERVICES/BMI/ol_fw.h
+index aca4961..fdd07f4 100644
+--- a/CORE/SERVICES/BMI/ol_fw.h
++++ b/CORE/SERVICES/BMI/ol_fw.h
+@@ -162,11 +162,11 @@ void ol_target_failure(void *instance, A_STATUS status);
+ u_int8_t ol_get_number_of_peers_supported(struct ol_softc *scn);
+ 
+ #ifdef REMOVE_PKT_LOG
+-static inline void ol_pktlog_init(void *)
++static inline void ol_pktlog_init(void *hif_sc)
+ {
+ }
+ #else
+-void ol_pktlog_init(void *);
++void ol_pktlog_init(void *hif_sc);
+ #endif
+ 
+ #if defined(HIF_SDIO)
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0008-CORE-add-pcie-multi_if_name-support.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0008-CORE-add-pcie-multi_if_name-support.patch
new file mode 100644
index 0000000..d98d800
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0008-CORE-add-pcie-multi_if_name-support.patch
@@ -0,0 +1,85 @@
+From 72964bb8777fd806e23849a44a07c11af55fdf92 Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Fri, 4 May 2018 15:31:21 +0800
+Subject: [PATCH 08/11] CORE: add pcie multi_if_name support
+
+Add pcie multi_if_name support.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/SERVICES/BMI/ol_fw.c           | 33 +++++++++++++++++++++++----------
+ CORE/SERVICES/COMMON/ol_if_athvar.h |  2 +-
+ 2 files changed, 24 insertions(+), 11 deletions(-)
+
+diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c
+index 8e8f7cb..e8d52a5 100644
+--- a/CORE/SERVICES/BMI/ol_fw.c
++++ b/CORE/SERVICES/BMI/ol_fw.c
+@@ -152,21 +152,28 @@ static int ol_get_fw_files_for_target(struct ol_fw_files *pfw_files,
+ #endif
+ 
+ #ifdef CONFIG_NON_QC_PLATFORM_PCI
++
++#ifdef MULTI_IF_NAME
++#define PREFIX MULTI_IF_NAME "/"
++#else
++#define PREFIX ""
++#endif
++
+ static struct non_qc_platform_pci_fw_files FW_FILES_QCA6174_FW_1_1 = {
+-"qwlan11.bin", "bdwlan11.bin", "otp11.bin", "utf11.bin",
+-"utfbd11.bin", "epping11.bin", "evicted11.bin"};
++	PREFIX "qwlan11.bin", PREFIX "bdwlan11.bin", PREFIX "otp11.bin",  PREFIX "utf11.bin",
++	PREFIX "utfbd11.bin", PREFIX "epping11.bin", PREFIX "evicted11.bin"};
+ static struct non_qc_platform_pci_fw_files FW_FILES_QCA6174_FW_2_0 = {
+-"qwlan20.bin", "bdwlan20.bin", "otp20.bin", "utf20.bin",
+-"utfbd20.bin", "epping20.bin", "evicted20.bin"};
++	PREFIX "qwlan20.bin", PREFIX "bdwlan20.bin", PREFIX "otp20.bin", PREFIX "utf20.bin",
++	PREFIX "utfbd20.bin", PREFIX "epping20.bin", PREFIX "evicted20.bin"};
+ static struct non_qc_platform_pci_fw_files FW_FILES_QCA6174_FW_1_3 = {
+-"qwlan13.bin", "bdwlan13.bin", "otp13.bin", "utf13.bin",
+-"utfbd13.bin", "epping13.bin", "evicted13.bin"};
++	PREFIX "qwlan13.bin", PREFIX "bdwlan13.bin", PREFIX "otp13.bin", PREFIX "utf13.bin",
++	PREFIX "utfbd13.bin", PREFIX "epping13.bin", PREFIX "evicted13.bin"};
+ static struct non_qc_platform_pci_fw_files FW_FILES_QCA6174_FW_3_0 = {
+-"qwlan30.bin", "bdwlan30.bin", "otp30.bin", "utf30.bin",
+-"utfbd30.bin", "epping30.bin", "evicted30.bin"};
++	PREFIX "qwlan30.bin", PREFIX "bdwlan30.bin", PREFIX "otp30.bin", PREFIX "utf30.bin",
++	PREFIX "utfbd30.bin", PREFIX "epping30.bin", PREFIX "evicted30.bin"};
+ static struct non_qc_platform_pci_fw_files FW_FILES_DEFAULT = {
+-"qwlan.bin", "bdwlan.bin", "otp.bin", "utf.bin",
+-"utfbd.bin", "epping.bin", "evicted.bin"};
++	PREFIX "qwlan.bin", PREFIX "bdwlan.bin", PREFIX "otp.bin", PREFIX "utf.bin",
++	PREFIX "utfbd.bin", PREFIX "epping.bin", PREFIX "evicted.bin"};
+ 
+ static
+ int get_fw_files_for_non_qc_pci_target(struct non_qc_platform_pci_fw_files *pfw_files,
+@@ -202,6 +209,12 @@ int get_fw_files_for_non_qc_pci_target(struct non_qc_platform_pci_fw_files *pfw_
+ 				__func__, target_type, target_version);
+ 			break;
+ 	}
++
++	pr_debug("%s:%d: pfw_files:%s, %s, %s, %s, %s, %s, %s\n", __func__, __LINE__,
++		pfw_files->image_file, pfw_files->board_data, pfw_files->otp_data,
++		pfw_files->utf_file, pfw_files->utf_board_data, pfw_files->epping_file,
++		pfw_files->evicted_data);
++
+ 	return 0;
+ }
+ #endif
+diff --git a/CORE/SERVICES/COMMON/ol_if_athvar.h b/CORE/SERVICES/COMMON/ol_if_athvar.h
+index 03fc4d3..a689b6b 100644
+--- a/CORE/SERVICES/COMMON/ol_if_athvar.h
++++ b/CORE/SERVICES/COMMON/ol_if_athvar.h
+@@ -149,7 +149,7 @@ struct fw_ramdump {
+ };
+ #endif
+ #ifdef CONFIG_NON_QC_PLATFORM_PCI
+-#define MAX_FILE_NAME        20
++#define MAX_FILE_NAME        40
+ struct non_qc_platform_pci_fw_files {
+     char image_file[MAX_FILE_NAME];
+     char board_data[MAX_FILE_NAME];
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0009-CORE-add-timeout-when-BMI-request-response-transacti.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0009-CORE-add-timeout-when-BMI-request-response-transacti.patch
new file mode 100644
index 0000000..4ce2612
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0009-CORE-add-timeout-when-BMI-request-response-transacti.patch
@@ -0,0 +1,83 @@
+From a2314b0afa1687cd043183ab3794e27336ad47b3 Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Tue, 15 May 2018 10:45:21 +0800
+Subject: [PATCH 09/11] CORE: add timeout when BMI request/response transaction
+ are not completed
+
+Add timeout when BMI request/response transaction are not completed.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/SERVICES/COMMON/adf/adf_os_lock.h           | 10 ++++++++++
+ CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h |  6 ++++++
+ CORE/SERVICES/HIF/PCIe/hif_pci.c                 |  7 ++++---
+ 3 files changed, 20 insertions(+), 3 deletions(-)
+
+diff --git a/CORE/SERVICES/COMMON/adf/adf_os_lock.h b/CORE/SERVICES/COMMON/adf/adf_os_lock.h
+index 9e0a733..a634ea3 100644
+--- a/CORE/SERVICES/COMMON/adf/adf_os_lock.h
++++ b/CORE/SERVICES/COMMON/adf/adf_os_lock.h
+@@ -72,6 +72,16 @@ static inline int adf_os_mutex_acquire(adf_os_device_t osdev, adf_os_mutex_t *m)
+ }
+ 
+ /**
++ * @brief Take the mutex
++ *
++ * @param[in] m mutex to take
++ */
++static inline int adf_os_mutex_acquire_timeout(adf_os_device_t osdev, adf_os_mutex_t *m, long timeout)
++{
++    return (__adf_os_mutex_acquire_timeout(osdev, m, timeout));
++}
++
++/**
+  * @brief Give the mutex
+  *
+  * @param[in] m mutex to give
+diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h
+index 9bfdb50..36c847e 100644
+--- a/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h
++++ b/CORE/SERVICES/COMMON/adf/linux/adf_os_lock_pvt.h
+@@ -70,6 +70,12 @@ __adf_os_mutex_acquire(adf_os_device_t osdev, struct semaphore *m)
+     return 0;
+ }
+ 
++static inline int
++__adf_os_mutex_acquire_timeout(adf_os_device_t osdev, struct semaphore *m, long timeout)
++{
++    return down_timeout(m, timeout);
++}
++
+ static inline void
+ __adf_os_mutex_release(adf_os_device_t osdev, struct semaphore *m)
+ {
+diff --git a/CORE/SERVICES/HIF/PCIe/hif_pci.c b/CORE/SERVICES/HIF/PCIe/hif_pci.c
+index 508aac9..1496f08 100644
+--- a/CORE/SERVICES/HIF/PCIe/hif_pci.c
++++ b/CORE/SERVICES/HIF/PCIe/hif_pci.c
+@@ -2033,9 +2033,9 @@ HIFExchangeBMIMsg(HIF_DEVICE *hif_device,
+     struct CE_handle *ce_recv = recv_pipe_info->ce_hdl;
+ 
+ #ifdef BMI_RSP_POLLING
++    int i;
+     CE_addr_t buf;
+     unsigned int completed_nbytes, id, flags;
+-    int i;
+ #endif
+ 
+     AR_DEBUG_PRINTF(ATH_DEBUG_TRC, (" %s\n",__FUNCTION__));
+@@ -2092,8 +2092,9 @@ HIFExchangeBMIMsg(HIF_DEVICE *hif_device,
+ 
+     /* Wait for BMI request/response transaction to complete */
+     /* Always just wait for BMI request here if BMI_RSP_POLLING is defined */
+-    while (adf_os_mutex_acquire(scn->adf_dev, &transaction->bmi_transaction_sem)) {
+-        /*need some break out condition(time out?)*/
++    if (adf_os_mutex_acquire_timeout(scn->adf_dev, &transaction->bmi_transaction_sem, HZ)) {
++	printk("%s:error, can't get bmi response\n", __func__);
++	status = A_EBUSY;
+     }
+ 
+     if (bmi_response) {
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0010-CORE-HIF-PCIe-only-support-one-instance.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0010-CORE-HIF-PCIe-only-support-one-instance.patch
new file mode 100644
index 0000000..a258674
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0010-CORE-HIF-PCIe-only-support-one-instance.patch
@@ -0,0 +1,45 @@
+From 5c01620b0b3a3d7d6a95b4d00d75d44bd8e78b0c Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Tue, 15 May 2018 10:55:42 +0800
+Subject: [PATCH 10/11] CORE: HIF: PCIe: only support one instance
+
+The CLD driver only support one instance, add code check it.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/SERVICES/HIF/PCIe/if_pci.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.c b/CORE/SERVICES/HIF/PCIe/if_pci.c
+index 53fb1c2..374a9b0 100644
+--- a/CORE/SERVICES/HIF/PCIe/if_pci.c
++++ b/CORE/SERVICES/HIF/PCIe/if_pci.c
+@@ -1601,12 +1601,17 @@ hif_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
+     u_int16_t device_id;
+     u_int16_t revision_id;
+     u_int32_t lcr_val;
++    static int devid = 0;
+ 
+     printk(KERN_INFO "%s:, con_mode= 0x%x\n", __func__, vos_get_conparam());
+ 
+ again:
+     ret = 0;
+ 
++    /* CLD driver only support one instance */
++    if (devid)
++	return -EIO;
++
+ #define BAR_NUM 0
+     /*
+      * Without any knowledge of the Host, the Target
+@@ -1886,6 +1891,7 @@ again:
+     pci_write_config_dword(pdev, 0x80, lcr_val);
+ 
+     hif_pci_pm_runtime_init(sc);
++    devid++;
+ 
+     return 0;
+ 
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0011-CORE-BMI-RF-align-the-utf-firmware-bin-name.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0011-CORE-BMI-RF-align-the-utf-firmware-bin-name.patch
new file mode 100644
index 0000000..884464c
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0011-CORE-BMI-RF-align-the-utf-firmware-bin-name.patch
@@ -0,0 +1,31 @@
+From bcddb095fb2ac2a4584705178d78c08d2d5ad583 Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Tue, 15 May 2018 14:03:02 +0800
+Subject: [PATCH 11/11] CORE: BMI: RF: align the utf firmware bin name
+
+Align the utf firmware bin with release's name.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/SERVICES/BMI/ol_fw.c | 4 ----
+ 1 file changed, 4 deletions(-)
+
+diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c
+index e8d52a5..8f7d978 100644
+--- a/CORE/SERVICES/BMI/ol_fw.c
++++ b/CORE/SERVICES/BMI/ol_fw.c
+@@ -682,11 +682,7 @@ defined(CONFIG_NON_QC_PLATFORM_PCI)
+ 		}
+ #ifdef QCA_WIFI_FTM
+ 		if (vos_get_conparam() == VOS_FTM_MODE) {
+-#if defined(CONFIG_CNSS) || defined(HIF_SDIO)
+ 			filename = scn->fw_files.utf_file;
+-#else
+-			filename = QCA_UTF_FIRMWARE_FILE;
+-#endif
+ #ifdef QCA_SIGNED_SPLIT_BINARY_SUPPORT
+ 			bin_sign = TRUE;
+ #endif
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0012-CORE-revert-two-patches-to-support-QCA-SMP.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0012-CORE-revert-two-patches-to-support-QCA-SMP.patch
new file mode 100644
index 0000000..5cdf338
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0012-CORE-revert-two-patches-to-support-QCA-SMP.patch
@@ -0,0 +1,81 @@
+From 3ff83bf4a4f7c0e399f6ed32b0883ac1239b7b1c Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Fri, 18 May 2018 16:52:01 +0800
+Subject: [PATCH 1/2] CORE: revert two patches to support QCA SMP
+
+This reverts commit af8e2f5c3b2f4cd56ed972a22761049f402742c4.
+This reverts commit 2ba3dce3e199a29efcc1d56a4a33be0cfa8de529.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/HDD/src/wlan_hdd_main.c |  7 ++-----
+ CORE/VOSS/src/vos_sched.c    | 10 +++-------
+ Kbuild                       |  2 --
+ 3 files changed, 5 insertions(+), 14 deletions(-)
+
+diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
+index 4f48d53..db42731 100644
+--- a/CORE/HDD/src/wlan_hdd_main.c
++++ b/CORE/HDD/src/wlan_hdd_main.c
+@@ -13823,13 +13823,10 @@ VOS_STATUS hdd_get_front_adapter( hdd_context_t *pHddCtx,
+                                   hdd_adapter_list_node_t** ppAdapterNode)
+ {
+     VOS_STATUS status;
+-    bool in_irq_context = (in_irq() || irqs_disabled());
+-    if (!in_irq_context)
+-	spin_lock_bh(&pHddCtx->hddAdapters.lock);
++    spin_lock_bh(&pHddCtx->hddAdapters.lock);
+     status =  hdd_list_peek_front ( &pHddCtx->hddAdapters,
+                    (hdd_list_node_t**) ppAdapterNode );
+-    if (!in_irq_context)
+-	spin_unlock_bh(&pHddCtx->hddAdapters.lock);
++    spin_unlock_bh(&pHddCtx->hddAdapters.lock);
+     return status;
+ }
+ 
+diff --git a/CORE/VOSS/src/vos_sched.c b/CORE/VOSS/src/vos_sched.c
+index 99912ab..cb5787e 100644
+--- a/CORE/VOSS/src/vos_sched.c
++++ b/CORE/VOSS/src/vos_sched.c
+@@ -1370,20 +1370,16 @@ void vos_free_tlshim_pkt(pVosSchedContext pSchedContext,
+ struct VosTlshimPkt *vos_alloc_tlshim_pkt(pVosSchedContext pSchedContext)
+ {
+    struct VosTlshimPkt *pkt;
+-   bool in_irq_context = (in_irq() || irqs_disabled());
+ 
+-   if (!in_irq_context)
+-	spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++   spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+    if (list_empty(&pSchedContext->VosTlshimPktFreeQ)) {
+-   	if (!in_irq_context)
+-		spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++       spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+        return NULL;
+    }
+    pkt = list_first_entry(&pSchedContext->VosTlshimPktFreeQ,
+                           struct VosTlshimPkt, list);
+    list_del(&pkt->list);
+-   if (!in_irq_context)
+-	spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++   spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
+    return pkt;
+ }
+ 
+diff --git a/Kbuild b/Kbuild
+index af52286..3c4bd8d 100644
+--- a/Kbuild
++++ b/Kbuild
+@@ -1470,10 +1470,8 @@ endif
+ 
+ #Mark it as SMP Kernel
+ ifeq ($(CONFIG_SMP),y)
+-ifneq ($(CONFIG_ROME_IF), sdio)
+ CDEFINES += -DQCA_CONFIG_SMP
+ endif
+-endif
+ 
+ #rps feature
+ ifeq ($(CONFIG_RPS),y)
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0013-CORE-services-os-fix-issue-to-avoid-spin_lock_bh-in-.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0013-CORE-services-os-fix-issue-to-avoid-spin_lock_bh-in-.patch
new file mode 100644
index 0000000..2e6dfc7
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0013-CORE-services-os-fix-issue-to-avoid-spin_lock_bh-in-.patch
@@ -0,0 +1,1367 @@
+From a2ba3705d738df2870ee58e7c65de0472428d5e4 Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Thu, 17 May 2018 19:03:22 +0800
+Subject: [PATCH 2/2] CORE: services: os: fix issue to avoid spin_lock_bh in
+ irq context
+
+Iusse fixes: to avoid spin_lock_bh calling in irq context.
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/HDD/src/wlan_hdd_assoc.c        |  8 +++---
+ CORE/HDD/src/wlan_hdd_ftm.c          | 12 ++++-----
+ CORE/HDD/src/wlan_hdd_hostapd.c      | 30 +++++++++++-----------
+ CORE/HDD/src/wlan_hdd_ipa.c          | 50 ++++++++++++++++++------------------
+ CORE/HDD/src/wlan_hdd_main.c         | 34 ++++++++++++------------
+ CORE/HDD/src/wlan_hdd_softap_tx_rx.c | 28 ++++++++++----------
+ CORE/HDD/src/wlan_hdd_tx_rx.c        | 38 +++++++++++++--------------
+ CORE/HDD/src/wlan_hdd_wext.c         |  8 +++---
+ CORE/SERVICES/COMMON/adf/adf_trace.c | 24 +++++++++--------
+ CORE/SERVICES/COMMON/osapi_linux.h   |  4 +--
+ CORE/SERVICES/COMMON/osdep_adf.h     | 18 +++++++++++++
+ CORE/UTILS/FWLOG/dbglog_host.c       |  8 +++---
+ CORE/UTILS/PKTLOG/linux_ac.c         | 42 +++++++++++++++---------------
+ CORE/UTILS/PKTLOG/pktlog_ac.c        |  8 +++---
+ CORE/VOSS/src/vos_packet.c           |  8 +++---
+ CORE/VOSS/src/vos_sched.c            | 42 +++++++++++++++---------------
+ 16 files changed, 191 insertions(+), 171 deletions(-)
+
+diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
+index 1c16702..889ea95 100644
+--- a/CORE/HDD/src/wlan_hdd_assoc.c
++++ b/CORE/HDD/src/wlan_hdd_assoc.c
+@@ -1299,13 +1299,13 @@ static void hdd_SendAssociationEvent(struct net_device *dev,tCsrRoamInfo *pCsrRo
+ 
+ #ifdef FEATURE_BUS_BANDWIDTH
+         /* start timer in sta/p2p_cli */
+-        spin_lock_bh(&pHddCtx->bus_bw_lock);
++        SPIN_LOCK_BH(&pHddCtx->bus_bw_lock);
+         pAdapter->prev_tx_packets = pAdapter->stats.tx_packets;
+         pAdapter->prev_rx_packets = pAdapter->stats.rx_packets;
+         tlshim_get_intra_bss_fwd_pkts_count(pAdapter->sessionId,
+              &pAdapter->prev_fwd_tx_packets, &pAdapter->prev_fwd_rx_packets);
+         pAdapter->prev_tx_bytes = pAdapter->stats.tx_bytes;
+-        spin_unlock_bh(&pHddCtx->bus_bw_lock);
++        SPIN_UNLOCK_BH(&pHddCtx->bus_bw_lock);
+         hdd_start_bus_bw_compute_timer(pAdapter);
+ #endif
+         if (pHddCtx->cfg_ini->mon_on_sta_enable &&
+@@ -1364,13 +1364,13 @@ static void hdd_SendAssociationEvent(struct net_device *dev,tCsrRoamInfo *pCsrRo
+ 
+ #ifdef FEATURE_BUS_BANDWIDTH
+         /* stop timer in sta/p2p_cli */
+-        spin_lock_bh(&pHddCtx->bus_bw_lock);
++        SPIN_LOCK_BH(&pHddCtx->bus_bw_lock);
+         pAdapter->prev_tx_packets = 0;
+         pAdapter->prev_rx_packets = 0;
+         pAdapter->prev_fwd_tx_packets = 0;
+         pAdapter->prev_fwd_rx_packets = 0;
+         pAdapter->prev_tx_bytes = 0;
+-        spin_unlock_bh(&pHddCtx->bus_bw_lock);
++        SPIN_UNLOCK_BH(&pHddCtx->bus_bw_lock);
+         hdd_stop_bus_bw_compute_timer(pAdapter);
+ #endif
+         if (pHddCtx->cfg_ini->mon_on_sta_enable &&
+diff --git a/CORE/HDD/src/wlan_hdd_ftm.c b/CORE/HDD/src/wlan_hdd_ftm.c
+index acf8c77..2854eb2 100644
+--- a/CORE/HDD/src/wlan_hdd_ftm.c
++++ b/CORE/HDD/src/wlan_hdd_ftm.c
+@@ -834,7 +834,7 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx)
+     }
+ 
+ #if defined(QCA_WIFI_FTM) && defined(LINUX_QCMBR)
+-    spin_lock_bh(&qcmbr_queue_lock);
++    SPIN_LOCK_BH(&qcmbr_queue_lock);
+     if (!list_empty(&qcmbr_queue_head)) {
+         qcmbr_queue_t *msg_buf, *tmp_buf;
+         list_for_each_entry_safe(msg_buf, tmp_buf, &qcmbr_queue_head, list) {
+@@ -842,7 +842,7 @@ int wlan_hdd_ftm_close(hdd_context_t *pHddCtx)
+             kfree(msg_buf);
+         }
+     }
+-    spin_unlock_bh(&qcmbr_queue_lock);
++    SPIN_UNLOCK_BH(&qcmbr_queue_lock);
+ #endif
+ 
+     return 0;
+@@ -972,7 +972,7 @@ static int wlan_hdd_qcmbr_command(hdd_adapter_t *pAdapter, qcmbr_data_t *pqcmbr_
+         case ATH_XIOCTL_UNIFIED_UTF_RSP: {
+             pqcmbr_data->copy_to_user = 1;
+ 
+-            spin_lock_bh(&qcmbr_queue_lock);
++            SPIN_LOCK_BH(&qcmbr_queue_lock);
+             if (!list_empty(&qcmbr_queue_head)) {
+                 qcmbr_buf = list_first_entry(&qcmbr_queue_head,
+                                              qcmbr_queue_t, list);
+@@ -981,7 +981,7 @@ static int wlan_hdd_qcmbr_command(hdd_adapter_t *pAdapter, qcmbr_data_t *pqcmbr_
+             } else {
+                 ret = -1;
+             }
+-            spin_unlock_bh(&qcmbr_queue_lock);
++            SPIN_UNLOCK_BH(&qcmbr_queue_lock);
+ 
+             if (!ret) {
+                 memcpy(pqcmbr_data->buf, qcmbr_buf->utf_buf,
+@@ -1085,9 +1085,9 @@ static void WLANQCMBR_McProcessMsg(v_VOID_t *message)
+     qcmbr_buf = kzalloc(sizeof(qcmbr_queue_t), GFP_KERNEL);
+     if (qcmbr_buf != NULL) {
+         memcpy(qcmbr_buf->utf_buf, message, data_len);
+-        spin_lock_bh(&qcmbr_queue_lock);
++        SPIN_LOCK_BH(&qcmbr_queue_lock);
+         list_add_tail(&(qcmbr_buf->list), &qcmbr_queue_head);
+-        spin_unlock_bh(&qcmbr_queue_lock);
++        SPIN_UNLOCK_BH(&qcmbr_queue_lock);
+     }
+ }
+ #endif /*LINUX_QCMBR*/
+diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
+index 9519764..8bea288 100644
+--- a/CORE/HDD/src/wlan_hdd_hostapd.c
++++ b/CORE/HDD/src/wlan_hdd_hostapd.c
+@@ -2389,9 +2389,9 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
+                 }
+            }
+ 
+-            spin_lock_bh(&pHddCtx->dfs_lock);
++            SPIN_LOCK_BH(&pHddCtx->dfs_lock);
+             pHddCtx->dfs_radar_found = VOS_FALSE;
+-            spin_unlock_bh(&pHddCtx->dfs_lock);
++            SPIN_UNLOCK_BH(&pHddCtx->dfs_lock);
+             WLANSAP_Get_Dfs_Ignore_CAC(pHddCtx->hHal, &ignoreCAC);
+             if ((NV_CHANNEL_DFS !=
+                 vos_nv_getChannelEnabledState(pHddApCtx->operatingChannel))
+@@ -2723,7 +2723,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
+             /* start timer in sap/p2p_go */
+             if (pHddApCtx->bApActive == VOS_FALSE)
+             {
+-                spin_lock_bh(&pHddCtx->bus_bw_lock);
++                SPIN_LOCK_BH(&pHddCtx->bus_bw_lock);
+                 pHostapdAdapter->prev_tx_packets = pHostapdAdapter->stats.tx_packets;
+                 pHostapdAdapter->prev_rx_packets = pHostapdAdapter->stats.rx_packets;
+                 tlshim_get_intra_bss_fwd_pkts_count(
+@@ -2732,7 +2732,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
+                        &pHostapdAdapter->prev_fwd_rx_packets);
+                 pHostapdAdapter->prev_tx_bytes =
+                         pHostapdAdapter->stats.tx_bytes;
+-                spin_unlock_bh(&pHddCtx->bus_bw_lock);
++                SPIN_UNLOCK_BH(&pHddCtx->bus_bw_lock);
+                 hdd_start_bus_bw_compute_timer(pHostapdAdapter);
+             }
+ #endif
+@@ -2869,7 +2869,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
+             hdd_softap_DeregisterSTA(pHostapdAdapter, staId);
+ 
+             pHddApCtx->bApActive = VOS_FALSE;
+-            spin_lock_bh( &pHostapdAdapter->staInfo_lock );
++            SPIN_LOCK_BH( &pHostapdAdapter->staInfo_lock );
+             for (i = 0; i < WLAN_MAX_STA_COUNT; i++)
+             {
+                 if (pHostapdAdapter->aStaInfo[i].isUsed && i != (WLAN_HDD_GET_AP_CTX_PTR(pHostapdAdapter))->uBCStaId)
+@@ -2878,7 +2878,7 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
+                     break;
+                 }
+             }
+-            spin_unlock_bh( &pHostapdAdapter->staInfo_lock );
++            SPIN_UNLOCK_BH( &pHostapdAdapter->staInfo_lock );
+ 
+             // Start AP inactivity timer if no stations associated with it
+             if ((0 != (WLAN_HDD_GET_CTX(pHostapdAdapter))->cfg_ini->nAPAutoShutOff))
+@@ -2943,13 +2943,13 @@ VOS_STATUS hdd_hostapd_SAPEventCB( tpSap_Event pSapEvent, v_PVOID_t usrDataForCa
+             /*stop timer in sap/p2p_go */
+             if (pHddApCtx->bApActive == FALSE)
+             {
+-                spin_lock_bh(&pHddCtx->bus_bw_lock);
++                SPIN_LOCK_BH(&pHddCtx->bus_bw_lock);
+                 pHostapdAdapter->prev_tx_packets = 0;
+                 pHostapdAdapter->prev_rx_packets = 0;
+                 pHostapdAdapter->prev_fwd_tx_packets = 0;
+                 pHostapdAdapter->prev_fwd_rx_packets = 0;
+                 pHostapdAdapter->prev_tx_bytes = 0;
+-                spin_unlock_bh(&pHddCtx->bus_bw_lock);
++                SPIN_UNLOCK_BH(&pHddCtx->bus_bw_lock);
+                 hdd_stop_bus_bw_compute_timer(pHostapdAdapter);
+             }
+ #endif
+@@ -3359,10 +3359,10 @@ int hdd_softap_set_channel_change(struct net_device *dev, int target_channel)
+         }
+     }
+ 
+-    spin_lock_bh(&pHddCtx->dfs_lock);
++    SPIN_LOCK_BH(&pHddCtx->dfs_lock);
+     if (pHddCtx->dfs_radar_found == VOS_TRUE)
+     {
+-        spin_unlock_bh(&pHddCtx->dfs_lock);
++        SPIN_UNLOCK_BH(&pHddCtx->dfs_lock);
+         hddLog(VOS_TRACE_LEVEL_ERROR, "%s: Channel switch in progress!!",
+                __func__);
+         ret = -EBUSY;
+@@ -3379,7 +3379,7 @@ int hdd_softap_set_channel_change(struct net_device *dev, int target_channel)
+      */
+     pHddCtx->dfs_radar_found = VOS_TRUE;
+ 
+-    spin_unlock_bh(&pHddCtx->dfs_lock);
++    SPIN_UNLOCK_BH(&pHddCtx->dfs_lock);
+     /*
+      * Post the Channel Change request to SAP.
+      */
+@@ -3402,9 +3402,9 @@ int hdd_softap_set_channel_change(struct net_device *dev, int target_channel)
+          * queues.
+          */
+ 
+-        spin_lock_bh(&pHddCtx->dfs_lock);
++        SPIN_LOCK_BH(&pHddCtx->dfs_lock);
+         pHddCtx->dfs_radar_found = VOS_FALSE;
+-        spin_unlock_bh(&pHddCtx->dfs_lock);
++        SPIN_UNLOCK_BH(&pHddCtx->dfs_lock);
+ 
+         ret = -EINVAL;
+     }
+@@ -5278,7 +5278,7 @@ static __iw_softap_getassoc_stamacaddr(struct net_device *dev,
+     maclist_index = sizeof(maclist_index);
+     left = wrqu->data.length - maclist_index;
+ 
+-    spin_lock_bh(&pHostapdAdapter->staInfo_lock);
++    SPIN_LOCK_BH(&pHostapdAdapter->staInfo_lock);
+     while ((cnt < WLAN_MAX_STA_COUNT) && (left >= VOS_MAC_ADDR_SIZE)) {
+         if ((pStaInfo[cnt].isUsed) &&
+             (!IS_BROADCAST_MAC(pStaInfo[cnt].macAddrSTA.bytes))) {
+@@ -5289,7 +5289,7 @@ static __iw_softap_getassoc_stamacaddr(struct net_device *dev,
+         }
+         cnt++;
+     }
+-    spin_unlock_bh(&pHostapdAdapter->staInfo_lock);
++    SPIN_UNLOCK_BH(&pHostapdAdapter->staInfo_lock);
+ 
+     *((u32 *)buf) = maclist_index;
+     wrqu->data.length = maclist_index;
+diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c
+index f169620..8837214 100644
+--- a/CORE/HDD/src/wlan_hdd_ipa.c
++++ b/CORE/HDD/src/wlan_hdd_ipa.c
+@@ -596,7 +596,7 @@ static struct ipa_tx_data_desc *hdd_ipa_alloc_data_desc(
+ {
+ 	struct ipa_tx_data_desc *desc = NULL;
+ 
+-	spin_lock_bh(&hdd_ipa->q_lock);
++	SPIN_LOCK_BH(&hdd_ipa->q_lock);
+ 
+ 	/* Keep the descriptors for priority alloc which can be used for
+ 	 * anchor nodes
+@@ -616,7 +616,7 @@ static struct ipa_tx_data_desc *hdd_ipa_alloc_data_desc(
+ 	}
+ 
+ end:
+-	spin_unlock_bh(&hdd_ipa->q_lock);
++	SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 
+ 	return desc;
+ }
+@@ -627,10 +627,10 @@ static void hdd_ipa_free_data_desc(struct hdd_ipa_priv *hdd_ipa,
+ 	desc->priv = NULL;
+ 	desc->pyld_buffer = NULL;
+ 	desc->pyld_len = 0;
+-	spin_lock_bh(&hdd_ipa->q_lock);
++	SPIN_LOCK_BH(&hdd_ipa->q_lock);
+ 	list_add_tail(&desc->link, &hdd_ipa->free_desc_head);
+ 	hdd_ipa->freeq_cnt++;
+-	spin_unlock_bh(&hdd_ipa->q_lock);
++	SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ }
+ 
+ static struct iphdr * hdd_ipa_get_ip_pkt(void *data, uint16_t *eth_type)
+@@ -2532,12 +2532,12 @@ static int hdd_ipa_rm_try_release(struct hdd_ipa_priv *hdd_ipa)
+ 		return -EAGAIN;
+ 
+ #ifndef IPA_UC_STA_OFFLOAD
+-	spin_lock_bh(&hdd_ipa->q_lock);
++	SPIN_LOCK_BH(&hdd_ipa->q_lock);
+ 	if (hdd_ipa->pending_hw_desc_cnt || hdd_ipa->pend_q_cnt) {
+-		spin_unlock_bh(&hdd_ipa->q_lock);
++		SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 		return -EAGAIN;
+ 	}
+-	spin_unlock_bh(&hdd_ipa->q_lock);
++	SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ #endif
+ 
+ 	adf_os_spin_lock_bh(&hdd_ipa->pm_lock);
+@@ -2613,11 +2613,11 @@ static void hdd_ipa_send_pkt_to_ipa(struct hdd_ipa_priv *hdd_ipa)
+ 
+ 	INIT_LIST_HEAD(&send_desc_head->link);
+ 
+-	spin_lock_bh(&hdd_ipa->q_lock);
++	SPIN_LOCK_BH(&hdd_ipa->q_lock);
+ 
+ 	if (hdd_ipa->pending_hw_desc_cnt >= hdd_ipa->hw_desc_cnt) {
+ 		hdd_ipa->stats.num_rx_ipa_hw_maxed_out++;
+-		spin_unlock_bh(&hdd_ipa->q_lock);
++		SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 		hdd_ipa_free_data_desc(hdd_ipa, send_desc_head);
+ 		return;
+ 	}
+@@ -2625,7 +2625,7 @@ static void hdd_ipa_send_pkt_to_ipa(struct hdd_ipa_priv *hdd_ipa)
+ 	pend_q_cnt = hdd_ipa->pend_q_cnt;
+ 
+ 	if (pend_q_cnt == 0) {
+-		spin_unlock_bh(&hdd_ipa->q_lock);
++		SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 		hdd_ipa_free_data_desc(hdd_ipa, send_desc_head);
+ 		return;
+ 	}
+@@ -2659,7 +2659,7 @@ static void hdd_ipa_send_pkt_to_ipa(struct hdd_ipa_priv *hdd_ipa)
+ 	}
+ 
+ 	hdd_ipa->pending_hw_desc_cnt += cur_send_cnt;
+-	spin_unlock_bh(&hdd_ipa->q_lock);
++	SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 
+ 	if (ipa_tx_dp_mul(hdd_ipa->prod_client, send_desc_head) != 0) {
+ 		HDD_IPA_LOG(VOS_TRACE_LEVEL_ERROR,
+@@ -2677,9 +2677,9 @@ static void hdd_ipa_send_pkt_to_ipa(struct hdd_ipa_priv *hdd_ipa)
+ 
+ ipa_tx_failed:
+ 
+-	spin_lock_bh(&hdd_ipa->q_lock);
++	SPIN_LOCK_BH(&hdd_ipa->q_lock);
+ 	hdd_ipa->pending_hw_desc_cnt -= cur_send_cnt;
+-	spin_unlock_bh(&hdd_ipa->q_lock);
++	SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 
+ 	list_for_each_entry_safe(desc, tmp, &send_desc_head->link, link) {
+ 		list_del(&desc->link);
+@@ -3126,10 +3126,10 @@ VOS_STATUS hdd_ipa_process_rxt(v_VOID_t *vosContext, adf_nbuf_t rx_buf_list,
+ 		send_desc->priv = buf;
+ 		send_desc->pyld_buffer = buf->data;
+ 		send_desc->pyld_len = buf->len;
+-		spin_lock_bh(&hdd_ipa->q_lock);
++		SPIN_LOCK_BH(&hdd_ipa->q_lock);
+ 		list_add_tail(&send_desc->link, &hdd_ipa->pend_desc_head);
+ 		hdd_ipa->pend_q_cnt++;
+-		spin_unlock_bh(&hdd_ipa->q_lock);
++		SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 		cur_cnt++;
+ 		buf = next_buf;
+ 	}
+@@ -3392,9 +3392,9 @@ static void hdd_ipa_w2i_cb(void *priv, enum ipa_dp_evt_type evt,
+ 			buf = done_desc->priv;
+ 			adf_nbuf_free(buf);
+ 			hdd_ipa_free_data_desc(hdd_ipa, done_desc);
+-			spin_lock_bh(&hdd_ipa->q_lock);
++			SPIN_LOCK_BH(&hdd_ipa->q_lock);
+ 			hdd_ipa->pending_hw_desc_cnt--;
+-			spin_unlock_bh(&hdd_ipa->q_lock);
++			SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 			hdd_ipa->stats.num_rx_ipa_write_done++;
+ 		}
+ 		/* add anchor node also back to free list */
+@@ -4751,24 +4751,24 @@ static void hdd_ipa_rx_pipe_desc_free(void)
+ 
+ 	max_desc_cnt = hdd_ipa->hw_desc_cnt * HDD_IPA_DESC_BUFFER_RATIO;
+ 
+-	spin_lock_bh(&hdd_ipa->q_lock);
++	SPIN_LOCK_BH(&hdd_ipa->q_lock);
+ 
+ 	list_for_each_entry_safe(desc, tmp, &hdd_ipa->pend_desc_head, link) {
+ 		list_del(&desc->link);
+ 		adf_nbuf_free(desc->priv);
+-		spin_unlock_bh(&hdd_ipa->q_lock);
++		SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 		hdd_ipa_free_data_desc(hdd_ipa, desc);
+-		spin_lock_bh(&hdd_ipa->q_lock);
++		SPIN_LOCK_BH(&hdd_ipa->q_lock);
+ 	}
+ 
+ 	list_for_each_entry_safe(desc, tmp, &hdd_ipa->free_desc_head, link) {
+ 		list_del(&desc->link);
+-		spin_unlock_bh(&hdd_ipa->q_lock);
++		SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 		adf_os_mem_free(desc);
+-		spin_lock_bh(&hdd_ipa->q_lock);
++		SPIN_LOCK_BH(&hdd_ipa->q_lock);
+ 		i++;
+ 	}
+-	spin_unlock_bh(&hdd_ipa->q_lock);
++	SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 
+ 	if (i != max_desc_cnt)
+ 		HDD_IPA_LOG(VOS_TRACE_LEVEL_FATAL, "free desc leak: %u, %u", i,
+@@ -4803,9 +4803,9 @@ static int hdd_ipa_rx_pipe_desc_alloc(void)
+ 					"Descriptor allocation failed");
+ 			goto fail;
+ 		}
+-		spin_lock_bh(&hdd_ipa->q_lock);
++		SPIN_LOCK_BH(&hdd_ipa->q_lock);
+ 		list_add_tail(&tmp_desc->link, &hdd_ipa->free_desc_head);
+-		spin_unlock_bh(&hdd_ipa->q_lock);
++		SPIN_UNLOCK_BH(&hdd_ipa->q_lock);
+ 	}
+ 
+ 
+diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
+old mode 100644
+new mode 100755
+index db42731..636ba5f
+--- a/CORE/HDD/src/wlan_hdd_main.c
++++ b/CORE/HDD/src/wlan_hdd_main.c
+@@ -9513,18 +9513,18 @@ bool hdd_dfs_indicate_radar(void *context, void *param)
+ 
+     if (VOS_TRUE == hdd_radar_event->dfs_radar_status)
+     {
+-        spin_lock_bh(&pHddCtx->dfs_lock);
++        SPIN_LOCK_BH(&pHddCtx->dfs_lock);
+         if (pHddCtx->dfs_radar_found)
+         {
+             /* Application already triggered channel switch
+              * on current channel, so return here
+              */
+-            spin_unlock_bh(&pHddCtx->dfs_lock);
++            SPIN_UNLOCK_BH(&pHddCtx->dfs_lock);
+             return false;
+         }
+ 
+         pHddCtx->dfs_radar_found = VOS_TRUE;
+-        spin_unlock_bh(&pHddCtx->dfs_lock);
++        SPIN_UNLOCK_BH(&pHddCtx->dfs_lock);
+ 
+         status = hdd_get_front_adapter ( pHddCtx, &pAdapterNode );
+         while ( NULL != pAdapterNode && VOS_STATUS_SUCCESS == status )
+@@ -13823,10 +13823,10 @@ VOS_STATUS hdd_get_front_adapter( hdd_context_t *pHddCtx,
+                                   hdd_adapter_list_node_t** ppAdapterNode)
+ {
+     VOS_STATUS status;
+-    spin_lock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_LOCK_BH(&pHddCtx->hddAdapters.lock);
+     status =  hdd_list_peek_front ( &pHddCtx->hddAdapters,
+                    (hdd_list_node_t**) ppAdapterNode );
+-    spin_unlock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_UNLOCK_BH(&pHddCtx->hddAdapters.lock);
+     return status;
+ }
+ 
+@@ -13835,12 +13835,12 @@ VOS_STATUS hdd_get_next_adapter( hdd_context_t *pHddCtx,
+                                  hdd_adapter_list_node_t** pNextAdapterNode)
+ {
+     VOS_STATUS status;
+-    spin_lock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_LOCK_BH(&pHddCtx->hddAdapters.lock);
+     status = hdd_list_peek_next ( &pHddCtx->hddAdapters,
+                                   (hdd_list_node_t*) pAdapterNode,
+                                   (hdd_list_node_t**)pNextAdapterNode );
+ 
+-    spin_unlock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_UNLOCK_BH(&pHddCtx->hddAdapters.lock);
+     return status;
+ }
+ 
+@@ -13848,10 +13848,10 @@ VOS_STATUS hdd_remove_adapter( hdd_context_t *pHddCtx,
+                                hdd_adapter_list_node_t* pAdapterNode)
+ {
+     VOS_STATUS status;
+-    spin_lock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_LOCK_BH(&pHddCtx->hddAdapters.lock);
+     status =  hdd_list_remove_node ( &pHddCtx->hddAdapters,
+                                      &pAdapterNode->node );
+-    spin_unlock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_UNLOCK_BH(&pHddCtx->hddAdapters.lock);
+     return status;
+ }
+ 
+@@ -13859,10 +13859,10 @@ VOS_STATUS hdd_remove_front_adapter( hdd_context_t *pHddCtx,
+                                      hdd_adapter_list_node_t** ppAdapterNode)
+ {
+     VOS_STATUS status;
+-    spin_lock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_LOCK_BH(&pHddCtx->hddAdapters.lock);
+     status =  hdd_list_remove_front( &pHddCtx->hddAdapters,
+                    (hdd_list_node_t**) ppAdapterNode );
+-    spin_unlock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_UNLOCK_BH(&pHddCtx->hddAdapters.lock);
+     return status;
+ }
+ 
+@@ -13870,10 +13870,10 @@ VOS_STATUS hdd_add_adapter_back( hdd_context_t *pHddCtx,
+                                  hdd_adapter_list_node_t* pAdapterNode)
+ {
+     VOS_STATUS status;
+-    spin_lock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_LOCK_BH(&pHddCtx->hddAdapters.lock);
+     status =  hdd_list_insert_back ( &pHddCtx->hddAdapters,
+                    (hdd_list_node_t*) pAdapterNode );
+-    spin_unlock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_UNLOCK_BH(&pHddCtx->hddAdapters.lock);
+     return status;
+ }
+ 
+@@ -13881,10 +13881,10 @@ VOS_STATUS hdd_add_adapter_front( hdd_context_t *pHddCtx,
+                                   hdd_adapter_list_node_t* pAdapterNode)
+ {
+     VOS_STATUS status;
+-    spin_lock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_LOCK_BH(&pHddCtx->hddAdapters.lock);
+     status =  hdd_list_insert_front ( &pHddCtx->hddAdapters,
+                    (hdd_list_node_t*) pAdapterNode );
+-    spin_unlock_bh(&pHddCtx->hddAdapters.lock);
++    SPIN_UNLOCK_BH(&pHddCtx->hddAdapters.lock);
+     return status;
+ }
+ 
+@@ -15527,13 +15527,13 @@ static void hdd_bus_bw_compute_cbk(void *priv)
+         total_tx += pAdapter->stats.tx_packets;
+ 
+ 
+-        spin_lock_bh(&pHddCtx->bus_bw_lock);
++        SPIN_LOCK_BH(&pHddCtx->bus_bw_lock);
+         pAdapter->prev_tx_packets = pAdapter->stats.tx_packets;
+         pAdapter->prev_tx_bytes = pAdapter->stats.tx_bytes;
+         pAdapter->prev_rx_packets = pAdapter->stats.rx_packets;
+         pAdapter->prev_fwd_tx_packets = fwd_tx_packets;
+         pAdapter->prev_fwd_rx_packets = fwd_rx_packets;
+-        spin_unlock_bh(&pHddCtx->bus_bw_lock);
++        SPIN_UNLOCK_BH(&pHddCtx->bus_bw_lock);
+         connected = TRUE;
+     }
+ 
+diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
+index 501f073..c02e983 100644
+--- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
++++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
+@@ -82,7 +82,7 @@ static VOS_STATUS hdd_softap_flush_tx_queues( hdd_adapter_t *pAdapter )
+    skb_list_node_t *pktNode = NULL;
+    struct sk_buff *skb = NULL;
+ 
+-   spin_lock_bh( &pAdapter->staInfo_lock );
++   SPIN_LOCK_BH( &pAdapter->staInfo_lock );
+    for (STAId = 0; STAId < WLAN_MAX_STA_COUNT; STAId++)
+    {
+       if (FALSE == pAdapter->aStaInfo[STAId].isUsed)
+@@ -92,7 +92,7 @@ static VOS_STATUS hdd_softap_flush_tx_queues( hdd_adapter_t *pAdapter )
+ 
+       for (i = 0; i < NUM_TX_QUEUES; i ++)
+       {
+-         spin_lock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
++         SPIN_LOCK_BH(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
+          while (true)
+          {
+             status = hdd_list_remove_front ( &pAdapter->aStaInfo[STAId].wmm_tx_queue[i], &anchor);
+@@ -111,12 +111,12 @@ static VOS_STATUS hdd_softap_flush_tx_queues( hdd_adapter_t *pAdapter )
+             break;
+          }
+          pAdapter->aStaInfo[STAId].txSuspended[i] = VOS_FALSE;
+-         spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
++         SPIN_UNLOCK_BH(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
+       }
+       pAdapter->aStaInfo[STAId].vosLowResource = VOS_FALSE;
+    }
+ 
+-   spin_unlock_bh( &pAdapter->staInfo_lock );
++   SPIN_UNLOCK_BH( &pAdapter->staInfo_lock );
+ 
+    return status;
+ }
+@@ -680,7 +680,7 @@ static void hdd_softap_flush_tx_queues_sta( hdd_adapter_t *pAdapter, v_U8_t STAI
+ 
+    for (i = 0; i < NUM_TX_QUEUES; i ++)
+    {
+-      spin_lock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
++      SPIN_LOCK_BH(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
+       while (true)
+       {
+          if (VOS_STATUS_E_EMPTY !=
+@@ -698,7 +698,7 @@ static void hdd_softap_flush_tx_queues_sta( hdd_adapter_t *pAdapter, v_U8_t STAI
+          //current list is empty
+          break;
+       }
+-      spin_unlock_bh(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
++      SPIN_UNLOCK_BH(&pAdapter->aStaInfo[STAId].wmm_tx_queue[i].lock);
+    }
+ 
+    return;
+@@ -717,12 +717,12 @@ static void hdd_softap_flush_tx_queues_sta( hdd_adapter_t *pAdapter, v_U8_t STAI
+ VOS_STATUS hdd_softap_init_tx_rx_sta( hdd_adapter_t *pAdapter, v_U8_t STAId, v_MACADDR_t *pmacAddrSTA)
+ {
+    v_U8_t i = 0;
+-   spin_lock_bh( &pAdapter->staInfo_lock );
++   SPIN_LOCK_BH( &pAdapter->staInfo_lock );
+    if (pAdapter->aStaInfo[STAId].isUsed)
+    {
+       VOS_TRACE( VOS_MODULE_ID_HDD_SAP_DATA, VOS_TRACE_LEVEL_ERROR,
+                  "%s: Reinit station %d", __func__, STAId );
+-      spin_unlock_bh( &pAdapter->staInfo_lock );
++      SPIN_UNLOCK_BH( &pAdapter->staInfo_lock );
+       return VOS_STATUS_E_FAILURE;
+    }
+ 
+@@ -736,7 +736,7 @@ VOS_STATUS hdd_softap_init_tx_rx_sta( hdd_adapter_t *pAdapter, v_U8_t STAId, v_M
+    pAdapter->aStaInfo[STAId].isDeauthInProgress = FALSE;
+    vos_copy_macaddr( &pAdapter->aStaInfo[STAId].macAddrSTA, pmacAddrSTA);
+ 
+-   spin_unlock_bh( &pAdapter->staInfo_lock );
++   SPIN_UNLOCK_BH( &pAdapter->staInfo_lock );
+    return VOS_STATUS_SUCCESS;
+ }
+ 
+@@ -761,12 +761,12 @@ VOS_STATUS hdd_softap_deinit_tx_rx_sta ( hdd_adapter_t *pAdapter, v_U8_t STAId )
+ 
+    pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter);
+ 
+-   spin_lock_bh( &pAdapter->staInfo_lock );
++   SPIN_LOCK_BH( &pAdapter->staInfo_lock );
+    if (FALSE == pAdapter->aStaInfo[STAId].isUsed)
+    {
+       VOS_TRACE( VOS_MODULE_ID_HDD_SAP_DATA, VOS_TRACE_LEVEL_ERROR,
+                  "%s: Deinit station not inited %d", __func__, STAId );
+-      spin_unlock_bh( &pAdapter->staInfo_lock );
++      SPIN_UNLOCK_BH( &pAdapter->staInfo_lock );
+       return VOS_STATUS_E_FAILURE;
+    }
+ 
+@@ -814,7 +814,7 @@ VOS_STATUS hdd_softap_deinit_tx_rx_sta ( hdd_adapter_t *pAdapter, v_U8_t STAId )
+       }
+    }
+ 
+-   spin_unlock_bh( &pAdapter->staInfo_lock );
++   SPIN_UNLOCK_BH( &pAdapter->staInfo_lock );
+    return status;
+ }
+ 
+@@ -1008,7 +1008,7 @@ VOS_STATUS hdd_softap_DeregisterSTA( hdd_adapter_t *pAdapter, tANI_U8 staId )
+     }
+ 
+     if (pAdapter->aStaInfo[staId].isUsed) {
+-        spin_lock_bh( &pAdapter->staInfo_lock );
++        SPIN_LOCK_BH( &pAdapter->staInfo_lock );
+         vos_mem_zero(&pAdapter->aStaInfo[staId], sizeof(hdd_station_info_t));
+ 
+         /* re-init spin lock, since netdev can still open adapter until
+@@ -1019,7 +1019,7 @@ VOS_STATUS hdd_softap_DeregisterSTA( hdd_adapter_t *pAdapter, tANI_U8 staId )
+             hdd_list_init(&pAdapter->aStaInfo[staId].wmm_tx_queue[i],
+                           HDD_TX_QUEUE_MAX_LEN);
+         }
+-        spin_unlock_bh( &pAdapter->staInfo_lock );
++        SPIN_UNLOCK_BH( &pAdapter->staInfo_lock );
+    }
+     pHddCtx->sta_to_adapter[staId] = NULL;
+ 
+diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c
+index 8e9464f..b874191 100644
+--- a/CORE/HDD/src/wlan_hdd_tx_rx.c
++++ b/CORE/HDD/src/wlan_hdd_tx_rx.c
+@@ -114,7 +114,7 @@ static VOS_STATUS hdd_flush_tx_queues( hdd_adapter_t *pAdapter )
+    while (++i != NUM_TX_QUEUES)
+    {
+       //Free up any packets in the Tx queue
+-      spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock);
++      SPIN_LOCK_BH(&pAdapter->wmm_tx_queue[i].lock);
+       while (true)
+       {
+          status = hdd_list_remove_front( &pAdapter->wmm_tx_queue[i], &anchor );
+@@ -128,7 +128,7 @@ static VOS_STATUS hdd_flush_tx_queues( hdd_adapter_t *pAdapter )
+          }
+          break;
+       }
+-      spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
++      SPIN_UNLOCK_BH(&pAdapter->wmm_tx_queue[i].lock);
+       /* Back pressure is no longer in effect */
+       pAdapter->isTxSuspended[i] = VOS_FALSE;
+    }
+@@ -165,11 +165,11 @@ void hdd_flush_ibss_tx_queues( hdd_adapter_t *pAdapter, v_U8_t STAId)
+ 
+    for (i = 0; i < NUM_TX_QUEUES; i++)
+    {
+-      spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock);
++      SPIN_LOCK_BH(&pAdapter->wmm_tx_queue[i].lock);
+ 
+       if ( list_empty( &pAdapter->wmm_tx_queue[i].anchor ) )
+       {
+-         spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
++         SPIN_UNLOCK_BH(&pAdapter->wmm_tx_queue[i].lock);
+          continue;
+       }
+ 
+@@ -204,7 +204,7 @@ void hdd_flush_ibss_tx_queues( hdd_adapter_t *pAdapter, v_U8_t STAId)
+          pAdapter->isTxSuspended[i] = VOS_FALSE;
+       }
+ 
+-      spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
++      SPIN_UNLOCK_BH(&pAdapter->wmm_tx_queue[i].lock);
+    }
+ }
+ 
+@@ -1723,38 +1723,38 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
+ 		break;
+ 
+ 	case WLAN_STOP_ALL_NETIF_QUEUE:
+-		spin_lock_bh(&adapter->pause_map_lock);
++		SPIN_LOCK_BH(&adapter->pause_map_lock);
+ 		if (!adapter->pause_map) {
+ 			netif_tx_stop_all_queues(adapter->dev);
+ 			wlan_hdd_update_txq_timestamp(adapter->dev);
+ 			wlan_hdd_update_unpause_time(adapter);
+ 		}
+ 		adapter->pause_map |= (1 << reason);
+-		spin_unlock_bh(&adapter->pause_map_lock);
++		SPIN_UNLOCK_BH(&adapter->pause_map_lock);
+ 		break;
+ 
+ 	case WLAN_START_ALL_NETIF_QUEUE:
+-		spin_lock_bh(&adapter->pause_map_lock);
++		SPIN_LOCK_BH(&adapter->pause_map_lock);
+ 		adapter->pause_map &= ~(1 << reason);
+ 		if (!adapter->pause_map) {
+ 			netif_tx_start_all_queues(adapter->dev);
+ 			wlan_hdd_update_pause_time(adapter);
+ 		}
+-		spin_unlock_bh(&adapter->pause_map_lock);
++		SPIN_UNLOCK_BH(&adapter->pause_map_lock);
+ 		break;
+ 
+ 	case WLAN_WAKE_ALL_NETIF_QUEUE:
+-		spin_lock_bh(&adapter->pause_map_lock);
++		SPIN_LOCK_BH(&adapter->pause_map_lock);
+ 		adapter->pause_map &= ~(1 << reason);
+ 		if (!adapter->pause_map) {
+ 			netif_tx_wake_all_queues(adapter->dev);
+ 			wlan_hdd_update_pause_time(adapter);
+ 		}
+-		spin_unlock_bh(&adapter->pause_map_lock);
++		SPIN_UNLOCK_BH(&adapter->pause_map_lock);
+ 		break;
+ 
+ 	case WLAN_STOP_ALL_NETIF_QUEUE_N_CARRIER:
+-		spin_lock_bh(&adapter->pause_map_lock);
++		SPIN_LOCK_BH(&adapter->pause_map_lock);
+ 		if (!adapter->pause_map) {
+ 			netif_tx_stop_all_queues(adapter->dev);
+ 			wlan_hdd_update_txq_timestamp(adapter->dev);
+@@ -1762,33 +1762,33 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
+ 		}
+ 		adapter->pause_map |= (1 << reason);
+ 		netif_carrier_off(adapter->dev);
+-		spin_unlock_bh(&adapter->pause_map_lock);
++		SPIN_UNLOCK_BH(&adapter->pause_map_lock);
+ 		break;
+ 
+ 	case WLAN_START_ALL_NETIF_QUEUE_N_CARRIER:
+-		spin_lock_bh(&adapter->pause_map_lock);
++		SPIN_LOCK_BH(&adapter->pause_map_lock);
+ 		netif_carrier_on(adapter->dev);
+ 		adapter->pause_map &= ~(1 << reason);
+ 		if (!adapter->pause_map) {
+ 			netif_tx_start_all_queues(adapter->dev);
+ 			wlan_hdd_update_pause_time(adapter);
+ 		}
+-		spin_unlock_bh(&adapter->pause_map_lock);
++		SPIN_UNLOCK_BH(&adapter->pause_map_lock);
+ 		break;
+ 
+ 	case WLAN_NETIF_TX_DISABLE:
+-		spin_lock_bh(&adapter->pause_map_lock);
++		SPIN_LOCK_BH(&adapter->pause_map_lock);
+ 		if (!adapter->pause_map) {
+ 			netif_tx_disable(adapter->dev);
+ 			wlan_hdd_update_txq_timestamp(adapter->dev);
+ 			wlan_hdd_update_unpause_time(adapter);
+ 		}
+ 		adapter->pause_map |= (1 << reason);
+-		spin_unlock_bh(&adapter->pause_map_lock);
++		SPIN_UNLOCK_BH(&adapter->pause_map_lock);
+ 		break;
+ 
+ 	case WLAN_NETIF_TX_DISABLE_N_CARRIER:
+-		spin_lock_bh(&adapter->pause_map_lock);
++		SPIN_LOCK_BH(&adapter->pause_map_lock);
+ 		if (!adapter->pause_map) {
+ 			netif_tx_disable(adapter->dev);
+ 			wlan_hdd_update_txq_timestamp(adapter->dev);
+@@ -1796,7 +1796,7 @@ void wlan_hdd_netif_queue_control(hdd_adapter_t *adapter,
+ 		}
+ 		adapter->pause_map |= (1 << reason);
+ 		netif_carrier_off(adapter->dev);
+-		spin_unlock_bh(&adapter->pause_map_lock);
++		SPIN_UNLOCK_BH(&adapter->pause_map_lock);
+ 		break;
+ 
+ 	default:
+diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
+index d139555..83d3b82 100644
+--- a/CORE/HDD/src/wlan_hdd_wext.c
++++ b/CORE/HDD/src/wlan_hdd_wext.c
+@@ -8924,11 +8924,11 @@ void hdd_wmm_tx_snapshot(hdd_adapter_t *pAdapter)
+     int i = 0, j = 0;
+     for ( i=0; i< NUM_TX_QUEUES; i++)
+     {
+-        spin_lock_bh(&pAdapter->wmm_tx_queue[i].lock);
++	SPIN_LOCK_BH(&pAdapter->wmm_tx_queue[i].lock);
+         hddLog(LOGE, "HDD WMM TxQueue Info For AC: %d Count: %d PrevAdress:%pK, NextAddress:%pK",
+                i, pAdapter->wmm_tx_queue[i].count,
+                pAdapter->wmm_tx_queue[i].anchor.prev, pAdapter->wmm_tx_queue[i].anchor.next);
+-        spin_unlock_bh(&pAdapter->wmm_tx_queue[i].lock);
++        SPIN_UNLOCK_BH(&pAdapter->wmm_tx_queue[i].lock);
+     }
+ 
+     for(i =0; i<WLAN_MAX_STA_COUNT; i++)
+@@ -8938,12 +8938,12 @@ void hdd_wmm_tx_snapshot(hdd_adapter_t *pAdapter)
+              hddLog(LOGE, "******STAIndex: %d*********", i);
+              for ( j=0; j< NUM_TX_QUEUES; j++)
+              {
+-                spin_lock_bh(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock);
++                SPIN_LOCK_BH(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock);
+                 hddLog(LOGE, "HDD TxQueue Info For AC: %d Count: %d PrevAdress:%pK, NextAddress:%pK",
+                        j, pAdapter->aStaInfo[i].wmm_tx_queue[j].count,
+                        pAdapter->aStaInfo[i].wmm_tx_queue[j].anchor.prev,
+                        pAdapter->aStaInfo[i].wmm_tx_queue[j].anchor.next);
+-                spin_unlock_bh(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock);
++                SPIN_UNLOCK_BH(&pAdapter->aStaInfo[i].wmm_tx_queue[j].lock);
+              }
+         }
+     }
+diff --git a/CORE/SERVICES/COMMON/adf/adf_trace.c b/CORE/SERVICES/COMMON/adf/adf_trace.c
+index 4a7b30a..d910f1a 100644
+--- a/CORE/SERVICES/COMMON/adf/adf_trace.c
++++ b/CORE/SERVICES/COMMON/adf/adf_trace.c
+@@ -44,6 +44,8 @@
+ #include "debug_linux.h"
+ #include "adf_os_io.h"
+ #include "vos_timer.h"
++#include "osdep.h"
++
+ 
+ /* Static and Global variables */
+ static spinlock_t l_dp_trace_lock;
+@@ -114,11 +116,11 @@ void adf_dp_trace_init(void)
+ void adf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_record,
+ 			 uint8_t verbosity)
+ {
+-	spin_lock_bh(&l_dp_trace_lock);
++	SPIN_LOCK_BH(&l_dp_trace_lock);
+ 	g_adf_dp_trace_data.proto_bitmap = proto_bitmap;
+ 	g_adf_dp_trace_data.no_of_record = no_of_record;
+ 	g_adf_dp_trace_data.verbosity    = verbosity;
+-	spin_unlock_bh(&l_dp_trace_lock);
++	SPIN_UNLOCK_BH(&l_dp_trace_lock);
+ }
+ 
+ /**
+@@ -173,7 +175,7 @@ void adf_dp_trace_set_track(adf_nbuf_t nbuf,  enum adf_proto_dir dir)
+ {
+ 	uint32_t count = 0;
+ 
+-	spin_lock_bh(&l_dp_trace_lock);
++	SPIN_LOCK_BH(&l_dp_trace_lock);
+ 	if (ADF_TX == dir)
+ 		count = ++g_adf_dp_trace_data.tx_count;
+ 	else if (ADF_RX == dir)
+@@ -186,7 +188,7 @@ void adf_dp_trace_set_track(adf_nbuf_t nbuf,  enum adf_proto_dir dir)
+ 		else if (ADF_RX == dir)
+ 			ADF_NBUF_CB_RX_DP_TRACE(nbuf) = 1;
+ 	}
+-	spin_unlock_bh(&l_dp_trace_lock);
++	SPIN_UNLOCK_BH(&l_dp_trace_lock);
+ }
+ 
+ #define DPTRACE_PRINT(args...) \
+@@ -415,7 +417,7 @@ void adf_dp_add_record(enum ADF_DP_TRACE_ID code,
+ 	struct adf_dp_trace_record_s *rec = NULL;
+ 	int index;
+ 
+-	spin_lock_bh(&l_dp_trace_lock);
++	SPIN_LOCK_BH(&l_dp_trace_lock);
+ 
+ 	g_adf_dp_trace_data.num++;
+ 
+@@ -456,7 +458,7 @@ void adf_dp_add_record(enum ADF_DP_TRACE_ID code,
+ 	vos_get_time_of_the_day_in_hr_min_sec_usec(rec->time,
+ 					sizeof(rec->time));
+ 	rec->pid = (in_interrupt() ? 0 : current->pid);
+-	spin_unlock_bh(&l_dp_trace_lock);
++	SPIN_UNLOCK_BH(&l_dp_trace_lock);
+ 
+ 	if ((g_adf_dp_trace_data.live_mode || print == true) &&
+ 	    (rec->code < ADF_DP_TRACE_MAX))
+@@ -874,7 +876,7 @@ void adf_dp_trace_dump_all(uint32_t count)
+ 	/* aquire the lock so that only one thread at a time can read
+ 	 * the ring buffer
+ 	 */
+-	spin_lock_bh(&l_dp_trace_lock);
++	SPIN_LOCK_BH(&l_dp_trace_lock);
+ 
+ 	if (g_adf_dp_trace_data.head != INVALID_ADF_DP_TRACE_ADDR) {
+ 		i = g_adf_dp_trace_data.head;
+@@ -891,7 +893,7 @@ void adf_dp_trace_dump_all(uint32_t count)
+ 		}
+ 
+ 		pRecord = g_adf_dp_trace_tbl[i];
+-		spin_unlock_bh(&l_dp_trace_lock);
++		SPIN_UNLOCK_BH(&l_dp_trace_lock);
+ 		for (;; ) {
+ 			adf_dp_trace_cb_table[pRecord.
+ 					   code] (&pRecord, (uint16_t)i);
+@@ -899,14 +901,14 @@ void adf_dp_trace_dump_all(uint32_t count)
+ 				break;
+ 			i += 1;
+ 
+-			spin_lock_bh(&l_dp_trace_lock);
++			SPIN_LOCK_BH(&l_dp_trace_lock);
+ 			if (MAX_ADF_DP_TRACE_RECORDS == i)
+ 				i = 0;
+ 
+ 			pRecord = g_adf_dp_trace_tbl[i];
+-			spin_unlock_bh(&l_dp_trace_lock);
++			SPIN_UNLOCK_BH(&l_dp_trace_lock);
+ 		}
+ 	} else {
+-		spin_unlock_bh(&l_dp_trace_lock);
++		SPIN_UNLOCK_BH(&l_dp_trace_lock);
+ 	}
+ }
+diff --git a/CORE/SERVICES/COMMON/osapi_linux.h b/CORE/SERVICES/COMMON/osapi_linux.h
+index cb7b3ac..92b791d 100644
+--- a/CORE/SERVICES/COMMON/osapi_linux.h
++++ b/CORE/SERVICES/COMMON/osapi_linux.h
+@@ -149,8 +149,8 @@ extern int logger_write(const enum logidx idx,
+ /* Mutual Exclusion */
+ typedef spinlock_t                      A_MUTEX_T;
+ #define A_MUTEX_INIT(mutex)             spin_lock_init(mutex)
+-#define A_MUTEX_LOCK(mutex)             spin_lock_bh(mutex)
+-#define A_MUTEX_UNLOCK(mutex)           spin_unlock_bh(mutex)
++#define A_MUTEX_LOCK(mutex)             SPIN_LOCK_BH(mutex)
++#define A_MUTEX_UNLOCK(mutex)           SPIN_UNLOCK_BH(mutex)
+ #define A_IS_MUTEX_VALID(mutex)         TRUE  /* okay to return true, since A_MUTEX_DELETE does nothing */
+ #define A_MUTEX_DELETE(mutex)           /* spin locks are not kernel resources so nothing to free.. */
+ 
+diff --git a/CORE/SERVICES/COMMON/osdep_adf.h b/CORE/SERVICES/COMMON/osdep_adf.h
+index 4e2ff99..f111cde 100644
+--- a/CORE/SERVICES/COMMON/osdep_adf.h
++++ b/CORE/SERVICES/COMMON/osdep_adf.h
+@@ -277,6 +277,7 @@ typedef rwlock_t usb_readwrite_lock_t;
+ 
+ #ifdef CONFIG_SMP
+ /* Undo the one provided by the kernel to debug spin locks */
++#if 0
+ #undef spin_lock
+ #undef spin_unlock
+ #undef spin_trylock
+@@ -297,6 +298,23 @@ spin_unlock_bh(x);\
+ } while (0)
+ 
+ #define spin_trylock(x) spin_trylock_bh(x)
++#endif
++
++#define SPIN_LOCK_BH(x) do {\
++    if (irqs_disabled() || in_irq()) {\
++        spin_lock(x);\
++    } else {\
++        spin_lock_bh(x);\
++    }\
++} while (0)
++
++#define SPIN_UNLOCK_BH(x) do {\
++    if (irqs_disabled() || in_irq()) {\
++        spin_unlock(x);\
++    } else {\
++        spin_unlock_bh(x);\
++    }\
++} while (0)
+ 
+ #define OS_SUPPORT_ASYNC_Q 1 /* support for handling asyn function calls */
+ 
+diff --git a/CORE/UTILS/FWLOG/dbglog_host.c b/CORE/UTILS/FWLOG/dbglog_host.c
+index 5ac1dee..fe247a9 100644
+--- a/CORE/UTILS/FWLOG/dbglog_host.c
++++ b/CORE/UTILS/FWLOG/dbglog_host.c
+@@ -4284,13 +4284,13 @@ static ssize_t dbglog_block_read(struct file *file,
+     if (!buf)
+        return -ENOMEM;
+ 
+-    spin_lock_bh(&fwlog->fwlog_queue.lock);
++    SPIN_LOCK_BH(&fwlog->fwlog_queue.lock);
+ 
+     if (skb_queue_len(&fwlog->fwlog_queue) == 0) {
+        /* we must init under queue lock */
+        init_completion(&fwlog->fwlog_completion);
+ 
+-       spin_unlock_bh(&fwlog->fwlog_queue.lock);
++       SPIN_UNLOCK_BH(&fwlog->fwlog_queue.lock);
+ 
+        ret = wait_for_completion_interruptible_timeout(
+                     &fwlog->fwlog_completion,
+@@ -4300,7 +4300,7 @@ static ssize_t dbglog_block_read(struct file *file,
+                return ret;
+        }
+ 
+-       spin_lock_bh(&fwlog->fwlog_queue.lock);
++       SPIN_LOCK_BH(&fwlog->fwlog_queue.lock);
+     }
+ 
+     while ((skb = __skb_dequeue(&fwlog->fwlog_queue))) {
+@@ -4316,7 +4316,7 @@ static ssize_t dbglog_block_read(struct file *file,
+        kfree_skb(skb);
+     }
+ 
+-    spin_unlock_bh(&fwlog->fwlog_queue.lock);
++    SPIN_UNLOCK_BH(&fwlog->fwlog_queue.lock);
+ 
+     /* FIXME: what to do if len == 0? */
+     not_copied = copy_to_user(user_buf, buf, len);
+diff --git a/CORE/UTILS/PKTLOG/linux_ac.c b/CORE/UTILS/PKTLOG/linux_ac.c
+index ed6db17..1dd03b7 100644
+--- a/CORE/UTILS/PKTLOG/linux_ac.c
++++ b/CORE/UTILS/PKTLOG/linux_ac.c
+@@ -136,13 +136,13 @@ int pktlog_alloc_buf(struct ol_softc *scn)
+ 
+ 	page_cnt = (sizeof(*(pl_info->buf)) + pl_info->buf_size) / PAGE_SIZE;
+ 
+-	spin_lock_bh(&pl_info->log_lock);
++	SPIN_LOCK_BH(&pl_info->log_lock);
+ 	if(pl_info->buf != NULL) {
+ 		printk("Buffer is already in use\n");
+-		spin_unlock_bh(&pl_info->log_lock);
++		SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 		return -EINVAL;
+ 	}
+-	spin_unlock_bh(&pl_info->log_lock);
++	SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 
+ 	if ((buffer = vmalloc((page_cnt + 2) * PAGE_SIZE)) == NULL) {
+ 		printk(PKTLOG_TAG
+@@ -167,12 +167,12 @@ int pktlog_alloc_buf(struct ol_softc *scn)
+ 		SetPageReserved(vpg);
+ 	}
+ 
+-	spin_lock_bh(&pl_info->log_lock);
++	SPIN_LOCK_BH(&pl_info->log_lock);
+ 	if(pl_info->buf != NULL)
+ 		pktlog_release_buf(scn);
+ 
+ 	pl_info->buf =  buffer;
+-	spin_unlock_bh(&pl_info->log_lock);
++	SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 	return 0;
+ }
+ 
+@@ -574,10 +574,10 @@ static void pktlog_detach(struct ol_softc *scn)
+ 	remove_proc_entry(WLANDEV_BASENAME, g_pktlog_pde);
+ 	pktlog_sysctl_unregister(pl_dev);
+ 
+-	spin_lock_bh(&pl_info->log_lock);
++	SPIN_LOCK_BH(&pl_info->log_lock);
+ 	if (pl_info->buf)
+ 		pktlog_release_buf(scn);
+-	spin_unlock_bh(&pl_info->log_lock);
++	SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 	pktlog_cleanup(pl_info);
+ 
+ 	if (pl_dev) {
+@@ -630,14 +630,14 @@ pktlog_read_proc_entry(char *buf, size_t nbytes, loff_t *ppos,
+ 	int fold_offset, ppos_data, cur_rd_offset, cur_wr_offset;
+ 	struct ath_pktlog_buf *log_buf;
+ 
+-	spin_lock_bh(&pl_info->log_lock);
++	SPIN_LOCK_BH(&pl_info->log_lock);
+ 	log_buf = pl_info->buf;
+ 
+ 	*read_complete = false;
+ 
+ 	if (log_buf == NULL) {
+ 		*read_complete = true;
+-		spin_unlock_bh(&pl_info->log_lock);
++		SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 		return 0;
+ 	}
+ 
+@@ -754,7 +754,7 @@ rd_done:
+ 			*read_complete = true;
+ 		}
+ 	}
+-	spin_unlock_bh(&pl_info->log_lock);
++	SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 	return ret_val;
+ }
+ 
+@@ -776,11 +776,11 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
+ #endif
+ 	struct ath_pktlog_buf *log_buf;
+ 
+-	spin_lock_bh(&pl_info->log_lock);
++	SPIN_LOCK_BH(&pl_info->log_lock);
+ 	log_buf = pl_info->buf;
+ 
+ 	if (log_buf == NULL) {
+-		spin_unlock_bh(&pl_info->log_lock);
++		SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 		return 0;
+ 	}
+ 
+@@ -797,13 +797,13 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
+ 
+ 	if (*ppos < bufhdr_size) {
+ 		count = MIN((bufhdr_size - *ppos), rem_len);
+-		spin_unlock_bh(&pl_info->log_lock);
++		SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 		if (copy_to_user(buf, ((char *)&log_buf->bufhdr) + *ppos,
+ 				 count))
+ 			return -EFAULT;
+ 		rem_len -= count;
+ 		ret_val += count;
+-		spin_lock_bh(&pl_info->log_lock);
++		SPIN_LOCK_BH(&pl_info->log_lock);
+ 	}
+ 
+ 	start_offset = log_buf->rd_offset;
+@@ -845,25 +845,25 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
+ 			goto rd_done;
+ 
+ 		count = MIN(rem_len, (end_offset - ppos_data + 1));
+-		spin_unlock_bh(&pl_info->log_lock);
++		SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 		if (copy_to_user(buf + ret_val,
+ 				 log_buf->log_data + ppos_data,
+ 				 count))
+ 			return -EFAULT;
+ 		ret_val += count;
+ 		rem_len -= count;
+-		spin_lock_bh(&pl_info->log_lock);
++		SPIN_LOCK_BH(&pl_info->log_lock);
+ 	} else {
+ 		if (ppos_data <= fold_offset) {
+ 			count = MIN(rem_len, (fold_offset - ppos_data + 1));
+-			spin_unlock_bh(&pl_info->log_lock);
++			SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 			if (copy_to_user(buf + ret_val,
+ 					 log_buf->log_data + ppos_data,
+ 					 count))
+ 				return -EFAULT;
+ 			ret_val += count;
+ 			rem_len -= count;
+-			spin_lock_bh(&pl_info->log_lock);
++			SPIN_LOCK_BH(&pl_info->log_lock);
+ 		}
+ 
+ 		if (rem_len == 0)
+@@ -875,14 +875,14 @@ __pktlog_read(struct file *file, char *buf, size_t nbytes, loff_t *ppos)
+ 
+ 		if (ppos_data <= end_offset) {
+ 			count = MIN(rem_len, (end_offset - ppos_data + 1));
+-			spin_unlock_bh(&pl_info->log_lock);
++			SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 			if (copy_to_user(buf + ret_val,
+ 					 log_buf->log_data + ppos_data,
+ 					 count))
+ 				return -EFAULT;
+ 			ret_val += count;
+ 			rem_len -= count;
+-			spin_lock_bh(&pl_info->log_lock);
++			SPIN_LOCK_BH(&pl_info->log_lock);
+ 		}
+ 	}
+ 
+@@ -893,7 +893,7 @@ rd_done:
+ 	}
+ 	*ppos += ret_val;
+ 
+-	spin_unlock_bh(&pl_info->log_lock);
++	SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 	return ret_val;
+ }
+ 
+diff --git a/CORE/UTILS/PKTLOG/pktlog_ac.c b/CORE/UTILS/PKTLOG/pktlog_ac.c
+index 679a78c..63fab8e 100644
+--- a/CORE/UTILS/PKTLOG/pktlog_ac.c
++++ b/CORE/UTILS/PKTLOG/pktlog_ac.c
+@@ -351,7 +351,7 @@ __pktlog_enable(struct ol_softc *scn, int32_t log_state)
+ 			}
+ 		}
+ 
+-		spin_lock_bh(&pl_info->log_lock);
++		SPIN_LOCK_BH(&pl_info->log_lock);
+ 		pl_info->buf->bufhdr.version = CUR_PKTLOG_VER;
+ 		pl_info->buf->bufhdr.magic_num = PKTLOG_MAGIC_NUM;
+ 		pl_info->buf->wr_offset = 0;
+@@ -360,7 +360,7 @@ __pktlog_enable(struct ol_softc *scn, int32_t log_state)
+ 		pl_info->buf->bytes_written = 0;
+ 		pl_info->buf->msg_index = 1;
+ 		pl_info->buf->offset = PKTLOG_READ_OFFSET;
+-		spin_unlock_bh(&pl_info->log_lock);
++		SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 
+ 		pl_info->start_time_thruput = OS_GET_TIMESTAMP();
+ 		pl_info->start_time_per = pl_info->start_time_thruput;
+@@ -449,13 +449,13 @@ __pktlog_setsize(struct ol_softc *scn, int32_t size)
+ 		return -EINVAL;
+ 	}
+ 
+-	spin_lock_bh(&pl_info->log_lock);
++	SPIN_LOCK_BH(&pl_info->log_lock);
+ 	if (pl_info->buf != NULL)
+ 		pktlog_release_buf(scn);
+ 
+ 	if (size != 0)
+ 		pl_info->buf_size = size;
+-	spin_unlock_bh(&pl_info->log_lock);
++	SPIN_UNLOCK_BH(&pl_info->log_lock);
+ 
+ 	return 0;
+ }
+diff --git a/CORE/VOSS/src/vos_packet.c b/CORE/VOSS/src/vos_packet.c
+index db8e10d..e6ed59c 100644
+--- a/CORE/VOSS/src/vos_packet.c
++++ b/CORE/VOSS/src/vos_packet.c
+@@ -342,11 +342,11 @@ void vos_pkt_trace_buf_update
+       return;
+    }
+ 
+-   spin_lock_bh(&trace_buffer_lock);
++   SPIN_LOCK_BH(&trace_buffer_lock);
+    slot = trace_buffer_order % VOS_PKT_TRAC_MAX_TRACE_BUF;
+    trace_buffer[slot].order = trace_buffer_order;
+    trace_buffer_order++;
+-   spin_unlock_bh(&trace_buffer_lock);
++   SPIN_UNLOCK_BH(&trace_buffer_lock);
+    do_gettimeofday(&tv);
+    trace_buffer[slot].event_sec_time = tv.tv_sec;
+    trace_buffer[slot].event_msec_time = tv.tv_usec;
+@@ -462,10 +462,10 @@ void vos_pkt_proto_trace_close
+ {
+    VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR,
+              "%s %d", __func__, __LINE__);
+-   spin_lock_bh(&trace_buffer_lock);
++   SPIN_LOCK_BH(&trace_buffer_lock);
+    vos_mem_free(trace_buffer);
+    trace_buffer = NULL;
+-   spin_unlock_bh(&trace_buffer_lock);
++   SPIN_UNLOCK_BH(&trace_buffer_lock);
+ 
+    return;
+ }
+diff --git a/CORE/VOSS/src/vos_sched.c b/CORE/VOSS/src/vos_sched.c
+index cb5787e..ce09796 100644
+--- a/CORE/VOSS/src/vos_sched.c
++++ b/CORE/VOSS/src/vos_sched.c
+@@ -551,14 +551,14 @@ vos_sched_open
+   spin_lock_init(&pSchedContext->TlshimRxQLock);
+   spin_lock_init(&pSchedContext->VosTlshimPktFreeQLock);
+   INIT_LIST_HEAD(&pSchedContext->tlshimRxQueue);
+-  spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++  SPIN_LOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+   INIT_LIST_HEAD(&pSchedContext->VosTlshimPktFreeQ);
+   if (vos_alloc_tlshim_pkt_freeq(pSchedContext) !=  VOS_STATUS_SUCCESS)
+   {
+-       spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++       SPIN_UNLOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+        return VOS_STATUS_E_FAILURE;
+   }
+-  spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++  SPIN_UNLOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+   register_hotcpu_notifier(&vos_cpu_hotplug_notifier);
+   pSchedContext->cpuHotPlugNotifier = &vos_cpu_hotplug_notifier;
+   vos_lock_init(&pSchedContext->affinity_lock);
+@@ -1289,16 +1289,16 @@ void vos_free_tlshim_pkt_freeq(pVosSchedContext pSchedContext)
+ {
+    struct VosTlshimPkt *pkt;
+ 
+-   spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++   SPIN_LOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+    while (!list_empty(&pSchedContext->VosTlshimPktFreeQ)) {
+        pkt = list_entry((&pSchedContext->VosTlshimPktFreeQ)->next,
+                      typeof(*pkt), list);
+        list_del(&pkt->list);
+-       spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++       SPIN_UNLOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+        vos_mem_free(pkt);
+-       spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++       SPIN_LOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+    }
+-   spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++   SPIN_UNLOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+ 
+ }
+ 
+@@ -1353,9 +1353,9 @@ void vos_free_tlshim_pkt(pVosSchedContext pSchedContext,
+                          struct VosTlshimPkt *pkt)
+ {
+    memset(pkt, 0, sizeof(*pkt));
+-   spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++   SPIN_LOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+    list_add_tail(&pkt->list, &pSchedContext->VosTlshimPktFreeQ);
+-   spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++   SPIN_UNLOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+ }
+ 
+ /*---------------------------------------------------------------------------
+@@ -1371,15 +1371,15 @@ struct VosTlshimPkt *vos_alloc_tlshim_pkt(pVosSchedContext pSchedContext)
+ {
+    struct VosTlshimPkt *pkt;
+ 
+-   spin_lock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++   SPIN_LOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+    if (list_empty(&pSchedContext->VosTlshimPktFreeQ)) {
+-       spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++       SPIN_UNLOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+        return NULL;
+    }
+    pkt = list_first_entry(&pSchedContext->VosTlshimPktFreeQ,
+                           struct VosTlshimPkt, list);
+    list_del(&pkt->list);
+-   spin_unlock_bh(&pSchedContext->VosTlshimPktFreeQLock);
++   SPIN_UNLOCK_BH(&pSchedContext->VosTlshimPktFreeQLock);
+    return pkt;
+ }
+ 
+@@ -1396,9 +1396,9 @@ struct VosTlshimPkt *vos_alloc_tlshim_pkt(pVosSchedContext pSchedContext)
+ void vos_indicate_rxpkt(pVosSchedContext pSchedContext,
+                         struct VosTlshimPkt *pkt)
+ {
+-   spin_lock_bh(&pSchedContext->TlshimRxQLock);
++   SPIN_LOCK_BH(&pSchedContext->TlshimRxQLock);
+    list_add_tail(&pkt->list, &pSchedContext->tlshimRxQueue);
+-   spin_unlock_bh(&pSchedContext->TlshimRxQLock);
++   SPIN_UNLOCK_BH(&pSchedContext->TlshimRxQLock);
+    set_bit(RX_POST_EVENT, &pSchedContext->tlshimRxEvtFlg);
+    wake_up_interruptible(&pSchedContext->tlshimRxWaitQueue);
+ }
+@@ -1420,16 +1420,16 @@ void vos_drop_rxpkt_by_staid(pVosSchedContext pSchedContext, u_int16_t staId)
+    adf_nbuf_t buf, next_buf;
+ 
+    INIT_LIST_HEAD(&local_list);
+-   spin_lock_bh(&pSchedContext->TlshimRxQLock);
++   SPIN_LOCK_BH(&pSchedContext->TlshimRxQLock);
+    if (list_empty(&pSchedContext->tlshimRxQueue)) {
+-       spin_unlock_bh(&pSchedContext->TlshimRxQLock);
++       SPIN_UNLOCK_BH(&pSchedContext->TlshimRxQLock);
+        return;
+    }
+    list_for_each_entry_safe(pkt, tmp, &pSchedContext->tlshimRxQueue, list) {
+        if (pkt->staId == staId || staId == WLAN_MAX_STA_COUNT)
+            list_move_tail(&pkt->list, &local_list);
+    }
+-   spin_unlock_bh(&pSchedContext->TlshimRxQLock);
++   SPIN_UNLOCK_BH(&pSchedContext->TlshimRxQLock);
+ 
+    list_for_each_entry_safe(pkt, tmp, &local_list, list) {
+        list_del(&pkt->list);
+@@ -1457,18 +1457,18 @@ static void vos_rx_from_queue(pVosSchedContext pSchedContext)
+    struct VosTlshimPkt *pkt;
+    u_int16_t sta_id;
+ 
+-   spin_lock_bh(&pSchedContext->TlshimRxQLock);
++   SPIN_LOCK_BH(&pSchedContext->TlshimRxQLock);
+    while (!list_empty(&pSchedContext->tlshimRxQueue)) {
+            pkt = list_first_entry(&pSchedContext->tlshimRxQueue,
+                                   struct VosTlshimPkt, list);
+            list_del(&pkt->list);
+-           spin_unlock_bh(&pSchedContext->TlshimRxQLock);
++           SPIN_UNLOCK_BH(&pSchedContext->TlshimRxQLock);
+            sta_id = pkt->staId;
+            pkt->callback(pkt->context, pkt->Rxpkt, sta_id);
+            vos_free_tlshim_pkt(pSchedContext, pkt);
+-           spin_lock_bh(&pSchedContext->TlshimRxQLock);
++           SPIN_LOCK_BH(&pSchedContext->TlshimRxQLock);
+    }
+-   spin_unlock_bh(&pSchedContext->TlshimRxQLock);
++   SPIN_UNLOCK_BH(&pSchedContext->TlshimRxQLock);
+ }
+ 
+ /*---------------------------------------------------------------------------
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0014-CLD-CORE-add-CONFIG_HDD_WLAN_WAIT_TIME-support-for-u.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0014-CLD-CORE-add-CONFIG_HDD_WLAN_WAIT_TIME-support-for-u.patch
new file mode 100644
index 0000000..0eaf198
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0014-CLD-CORE-add-CONFIG_HDD_WLAN_WAIT_TIME-support-for-u.patch
@@ -0,0 +1,51 @@
+From 67edc9c191c31fc3dc911c6c8b81d584524d91e6 Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Tue, 22 May 2018 16:13:54 +0800
+Subject: [PATCH] CLD: CORE: add CONFIG_HDD_WLAN_WAIT_TIME support for user
+
+User can point the CONFIG_HDD_WLAN_WAIT_TIME for driver firmware loading
+timeout.
+
+In general, it can be set to 10s like:
+	export CONFIG_HDD_WLAN_WAIT_TIME=10000
+
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/HDD/src/wlan_hdd_main.c | 4 ++++
+ Kbuild                       | 4 ++++
+ 2 files changed, 8 insertions(+)
+
+diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
+index 636ba5f..00dca1a 100755
+--- a/CORE/HDD/src/wlan_hdd_main.c
++++ b/CORE/HDD/src/wlan_hdd_main.c
+@@ -17645,7 +17645,11 @@ int hdd_hif_register_driver(void)
+ 		return ret;
+ 	}
+ 
++#ifdef HDD_WLAN_WAIT_TIME
++	timeout = msecs_to_jiffies(HDD_WLAN_WAIT_TIME);
++#else
+ 	timeout = msecs_to_jiffies(HDD_WLAN_START_WAIT_TIME);
++#endif
+ 
+ 	rc = wait_for_completion_timeout(&wlan_comp.wlan_start_comp, timeout);
+ 
+diff --git a/Kbuild b/Kbuild
+index 3c4bd8d..e26a7c9 100644
+--- a/Kbuild
++++ b/Kbuild
+@@ -1062,6 +1062,10 @@ ifeq ($(CONFIG_WLAN_POWER_DEBUGFS), y)
+ CDEFINES += -DWLAN_POWER_DEBUGFS
+ endif
+ 
++ifneq ($(CONFIG_HDD_WLAN_WAIT_TIME),)
++CDEFINES += -DHDD_WLAN_WAIT_TIME=$(CONFIG_HDD_WLAN_WAIT_TIME)
++endif
++
+ ifeq ($(CONFIG_FEATURE_COEX_PTA_CONFIG_ENABLE), y)
+ CDEFINES += -DFEATURE_COEX_PTA_CONFIG_ENABLE
+ endif
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0015-CORE-HIF-enable-pcie-MSI-feature.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0015-CORE-HIF-enable-pcie-MSI-feature.patch
new file mode 100644
index 0000000..cb13bbc
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0015-CORE-HIF-enable-pcie-MSI-feature.patch
@@ -0,0 +1,96 @@
+From 1c3170fe6acfd3ab411199bcf2235964a9036c2c Mon Sep 17 00:00:00 2001
+From: Hangtian Zhu <hangtian at qti.qualcomm.com>
+Date: Tue, 29 May 2018 18:09:49 +0800
+Subject: [PATCH] CORE: HIF: enable pcie MSI feature
+
+Add PCIe MSI interrupt support.
+Currently, it only support 1 MSI interrupt.
+
+Hangtian Zhu <hangtian at qti.qualcomm.com>
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/SERVICES/HIF/PCIe/cepci.h  |  2 +-
+ CORE/SERVICES/HIF/PCIe/if_pci.c | 19 +++++++++++++++++--
+ Kbuild                          |  2 +-
+ 3 files changed, 19 insertions(+), 4 deletions(-)
+
+diff --git a/CORE/SERVICES/HIF/PCIe/cepci.h b/CORE/SERVICES/HIF/PCIe/cepci.h
+index f5ba19b..95db903 100644
+--- a/CORE/SERVICES/HIF/PCIe/cepci.h
++++ b/CORE/SERVICES/HIF/PCIe/cepci.h
+@@ -41,7 +41,7 @@
+  * so for now we abide by this limit and avoid requesting more
+  * than that.
+  */
+-#define MSI_NUM_REQUEST_LOG2  3
++#define MSI_NUM_REQUEST_LOG2  0
+ #define MSI_NUM_REQUEST       (1<<MSI_NUM_REQUEST_LOG2)
+ 
+ /*
+diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.c b/CORE/SERVICES/HIF/PCIe/if_pci.c
+index 374a9b0..840724d 100644
+--- a/CORE/SERVICES/HIF/PCIe/if_pci.c
++++ b/CORE/SERVICES/HIF/PCIe/if_pci.c
+@@ -81,7 +81,7 @@
+ #define RAMDUMP_EVENT_TIMEOUT 2500
+ #define MAX_REG_READ_RETRIES 10
+ 
+-unsigned int msienable = 0;
++unsigned int msienable = 1;
+ module_param(msienable, int, S_IRUSR | S_IRGRP | S_IROTH);
+ 
+ int hif_pci_configure(struct hif_pci_softc *sc, hif_handle_t *hif_hdl);
+@@ -788,6 +788,7 @@ wlan_tasklet(unsigned long data)
+     struct HIF_CE_state *hif_state = (struct HIF_CE_state *)sc->hif_device;
+     volatile int tmp;
+     bool hif_init_done = sc->hif_init_done;
++    A_target_id_t targid = hif_state->targid;
+ 
+     if (hif_init_done == FALSE) {
+          goto irq_handled;
+@@ -809,7 +810,7 @@ wlan_tasklet(unsigned long data)
+          goto irq_handled;
+ 
+     CE_per_engine_service_any(sc->irq_event, sc);
+-    adf_os_atomic_set(&sc->tasklet_from_intr, 0);
++    adf_os_atomic_set(&sc->tasklet_from_intr, 1);
+     if (CE_get_rx_pending(sc)) {
+         if (vos_is_load_unload_in_progress(VOS_MODULE_ID_HIF, NULL)) {
+             pr_err("%s: Load/Unload in Progress\n", __func__);
+@@ -835,6 +836,20 @@ end:
+         adf_os_atomic_set(&sc->ce_suspend, 1);
+         return;
+     }
++
++    if(!LEGACY_INTERRUPTS(sc) && CE_INTERRUPT_SUMMARY(targid)) {
++	if (vos_is_load_unload_in_progress(VOS_MODULE_ID_HIF, NULL))
++		goto msiend;
++
++	if (vos_is_logp_in_progress(VOS_MODULE_ID_HIF, NULL))
++		goto msiend;
++
++	tasklet_schedule(&sc->intr_tq);
++msiend:
++	adf_os_atomic_set(&sc->ce_suspend, 1);
++	return;
++    }
++
+ irq_handled:
+     /* use cached value for hif_init_done to prevent
+      * unlocking an unlocked spinlock if hif init finishes
+diff --git a/Kbuild b/Kbuild
+index e26a7c9..77feef4 100644
+--- a/Kbuild
++++ b/Kbuild
+@@ -1690,7 +1690,7 @@ CDEFINES += -DFEATURE_DPTRACE_ENABLE
+ endif
+ 
+ ifeq ($(CONFIG_HIF_PCI), 1)
+-CDEFINES += -DFORCE_LEGACY_PCI_INTERRUPTS
++#CDEFINES += -DFORCE_LEGACY_PCI_INTERRUPTS
+ endif
+ 
+ ifeq ($(CONFIG_WLAN_THERMAL_SHUTDOWN), 1)
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0016-MLK-18490-CORE-HDD-add-ssid-len-check.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0016-MLK-18490-CORE-HDD-add-ssid-len-check.patch
new file mode 100644
index 0000000..2139cf5
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0016-MLK-18490-CORE-HDD-add-ssid-len-check.patch
@@ -0,0 +1,75 @@
+From 5294a5788854d05ebea6e4f0d103d42fac220f00 Mon Sep 17 00:00:00 2001
+From: Hangtian Zhu <hangtian at qti.qualcomm.com>
+Date: Thu, 7 Jun 2018 13:12:43 +0800
+Subject: [PATCH] MLK-18490 CORE: HDD: add ssid len check
+
+Add ssid len check to avoid the race between iface up and down.
+
+log:
+[ 1579.835577] CPU: 1 PID: 8058 Comm: kworker/u8:0 Tainted:
+[ 1579.846096] Hardware name: FSL i.MX8MM EVK board (DT)
+[ 1579.851154] Workqueue: cfg80211 cfg80211_event_work
+[ 1579.856649] task: ffff800077df0c80 task.stack: ffff80006e668000
+[ 1579.862739] PC is at __cfg80211_connect_result+0x2d0/0x400
+[ 1579.868224] LR is at __cfg80211_connect_result+0x13c/0x400
+[ 1579.873709] pc : [<ffff000008c1f428>] lr : [<ffff000008c1f294>] pstate: 40000145
+
+Signed-off-by: Hangtian Zhu <hangtian at qti.qualcomm.com>
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/HDD/src/wlan_hdd_assoc.c | 25 ++++++++++++++-----------
+ 1 file changed, 14 insertions(+), 11 deletions(-)
+
+diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
+index 889ea95..9818d79 100644
+--- a/CORE/HDD/src/wlan_hdd_assoc.c
++++ b/CORE/HDD/src/wlan_hdd_assoc.c
+@@ -2309,6 +2309,7 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs
+     hdd_ap_ctx_t *hdd_ap_ctx;
+     uint8_t default_sap_channel = 6;
+     tSirResultCodes timeout_reason = 0;
++    struct wireless_dev *wdev = dev->ieee80211_ptr;
+ #ifdef WLAN_FEATURE_ROAM_OFFLOAD
+     if (pRoamInfo && pRoamInfo->roamSynchInProgress) {
+        /* change logging before release */
+@@ -2604,12 +2605,13 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs
+                     hddLog(LOG1, "%s ft_carrier_on is %d, sending connect "
+                                  "indication", __FUNCTION__, ft_carrier_on);
+ 
+-                    hdd_connect_result(dev, pRoamInfo->bssid, pRoamInfo,
+-                                       pFTAssocReq, assocReqlen,
+-                                       pFTAssocRsp, assocRsplen,
+-                                       WLAN_STATUS_SUCCESS,
+-                                       GFP_KERNEL, false,
+-                                       pRoamInfo->statusCode);
++		    if(wdev->ssid_len != 0)
++			    hdd_connect_result(dev, pRoamInfo->bssid, pRoamInfo,
++					       pFTAssocReq, assocReqlen,
++					       pFTAssocRsp, assocRsplen,
++					       WLAN_STATUS_SUCCESS,
++					       GFP_KERNEL, false,
++					       pRoamInfo->statusCode);
+                 }
+             }
+             else
+@@ -2640,11 +2642,12 @@ static eHalStatus hdd_AssociationCompletionHandler( hdd_adapter_t *pAdapter, tCs
+                                roamResult, roamStatus);
+ 
+                         /* inform connect result to nl80211 */
+-                        hdd_connect_result(dev, pRoamInfo->bssid, pRoamInfo,
+-                                reqRsnIe, reqRsnLength,
+-                                rspRsnIe, rspRsnLength,
+-                                WLAN_STATUS_SUCCESS,
+-                                GFP_KERNEL, false, pRoamInfo->statusCode);
++			if(wdev->ssid_len != 0)
++				hdd_connect_result(dev, pRoamInfo->bssid, pRoamInfo,
++					reqRsnIe, reqRsnLength,
++					rspRsnIe, rspRsnLength,
++					WLAN_STATUS_SUCCESS,
++					GFP_KERNEL, false, pRoamInfo->statusCode);
+                     }
+                 }
+             }
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0017-MLK-18491-qcacld-2.0-avoid-overflow-of-bounce-buffer.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0017-MLK-18491-qcacld-2.0-avoid-overflow-of-bounce-buffer.patch
new file mode 100644
index 0000000..ab04221
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0017-MLK-18491-qcacld-2.0-avoid-overflow-of-bounce-buffer.patch
@@ -0,0 +1,29 @@
+From a41baa51cbc517243d55ff24ec7aedc625ab376c Mon Sep 17 00:00:00 2001
+From: Andy Duan <fugang.duan at nxp.com>
+Date: Fri, 8 Jun 2018 13:12:20 +0800
+Subject: [PATCH] MLK-18491 qcacld-2.0: avoid overflow of bounce buffer
+
+Disable pEndpoint->TxCreditFlowEnabled to avoid overflow of bounce buffer.
+
+Signed-off-by: Hangtian Zhu <hangtian at qti.qualcomm.com>
+Signed-off-by: Fugang Duan <fugang.duan at nxp.com>
+---
+ CORE/SERVICES/HTC/htc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/CORE/SERVICES/HTC/htc.c b/CORE/SERVICES/HTC/htc.c
+index 09936a0..1e2450d 100644
+--- a/CORE/SERVICES/HTC/htc.c
++++ b/CORE/SERVICES/HTC/htc.c
+@@ -657,7 +657,7 @@ static void ResetEndpointStates(HTC_TARGET *target)
+         INIT_HTC_PACKET_QUEUE(&pEndpoint->RxBufferHoldQueue);
+         pEndpoint->target = target;
+         //pEndpoint->TxCreditFlowEnabled = (A_BOOL)htc_credit_flow;
+-        pEndpoint->TxCreditFlowEnabled = (A_BOOL)1;
++        pEndpoint->TxCreditFlowEnabled = (A_BOOL)0;
+         adf_os_atomic_init(&pEndpoint->TxProcessCount);
+     }
+ }
+-- 
+1.9.1
+
diff --git a/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0018-MLK-18491-02-qcacld-2.0-fix-the-overflow-of-bounce-b.patch b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0018-MLK-18491-02-qcacld-2.0-fix-the-overflow-of-bounce-b.patch
new file mode 100644
index 0000000..ebd82a2
--- /dev/null
+++ b/recipes-kernel/kernel-modules/kernel-module-qcacld-lea/0018-MLK-18491-02-qcacld-2.0-fix-the-overflow-of-bounce-b.patch
@@ -0,0 +1,90 @@
+From e480b6825d3670f3517c3b7be0c13fd318cbe985 Mon Sep 17 00:00:00 2001
+From: Hangtian Zhu <hangtian at qti.qualcomm.com>
+Date: Thu, 14 Jun 2018 11:10:05 +0800
+Subject: [PATCH] MLK-18491-02 qcacld-2.0: fix the overflow of bounce buffer
+
+Patch a41baa51cbc5("MLK-18491 qcacld-2.0: avoid overflow of bounce buffer")
+is not reasonable to fix overflow of bounce buffer issue.
+
+The patch is released by Qualcomm to fix the issue.
+(Case Number:03515221)
+
+Signed-off-by: Hangtian Zhu <hangtian at qti.qualcomm.com>
+---
+ CORE/SERVICES/HTC/htc.c      |  2 +-
+ CORE/SERVICES/HTC/htc_send.c | 28 ++++++++++++++--------------
+ 2 files changed, 15 insertions(+), 15 deletions(-)
+
+diff --git a/CORE/SERVICES/HTC/htc.c b/CORE/SERVICES/HTC/htc.c
+index 1e2450d..09936a0 100644
+--- a/CORE/SERVICES/HTC/htc.c
++++ b/CORE/SERVICES/HTC/htc.c
+@@ -657,7 +657,7 @@ static void ResetEndpointStates(HTC_TARGET *target)
+         INIT_HTC_PACKET_QUEUE(&pEndpoint->RxBufferHoldQueue);
+         pEndpoint->target = target;
+         //pEndpoint->TxCreditFlowEnabled = (A_BOOL)htc_credit_flow;
+-        pEndpoint->TxCreditFlowEnabled = (A_BOOL)0;
++        pEndpoint->TxCreditFlowEnabled = (A_BOOL)1;
+         adf_os_atomic_init(&pEndpoint->TxProcessCount);
+     }
+ }
+diff --git a/CORE/SERVICES/HTC/htc_send.c b/CORE/SERVICES/HTC/htc_send.c
+index 1a3dd28..19d8065 100644
+--- a/CORE/SERVICES/HTC/htc_send.c
++++ b/CORE/SERVICES/HTC/htc_send.c
+@@ -105,12 +105,12 @@ void HTCGetControlEndpointTxHostCredits(HTC_HANDLE HTCHandle, int *credits)
+ 
+ static INLINE void RestoreTxPacket(HTC_TARGET *target, HTC_PACKET *pPacket)
+ {
++    adf_nbuf_t netbuf = GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket);
+     if (pPacket->PktInfo.AsTx.Flags & HTC_TX_PACKET_FLAG_FIXUP_NETBUF) {
+-        adf_nbuf_t netbuf = GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket);
+         adf_nbuf_unmap(target->osdev, netbuf, ADF_OS_DMA_TO_DEVICE);
+-        adf_nbuf_pull_head(netbuf, sizeof(HTC_FRAME_HDR));
+         pPacket->PktInfo.AsTx.Flags &= ~HTC_TX_PACKET_FLAG_FIXUP_NETBUF;
+     }
++    adf_nbuf_pull_head(netbuf, sizeof(HTC_FRAME_HDR));
+ 
+ }
+ 
+@@ -641,12 +641,11 @@ static A_STATUS HTCIssuePackets(HTC_TARGET       *target,
+              * that is already mapped, or a non-data netbuf that needs to be
+              * mapped.
+              */
+-            if (pPacket->PktInfo.AsTx.Flags & HTC_TX_PACKET_FLAG_FIXUP_NETBUF) {
+-                adf_nbuf_map(
+-                        target->osdev,
+-                        GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket),
+-                        ADF_OS_DMA_TO_DEVICE);
+-            }
++            pPacket->PktInfo.AsTx.Flags |= HTC_TX_PACKET_FLAG_FIXUP_NETBUF;
++            adf_nbuf_map(
++                    target->osdev,
++                    GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket),
++                    ADF_OS_DMA_TO_DEVICE);
+         }
+         LOCK_HTC_TX(target);
+             /* store in look up queue to match completions */
+@@ -1261,12 +1260,13 @@ A_STATUS HTCSendPktsMultiple(HTC_HANDLE HTCHandle, HTC_PACKET_QUEUE *pPktQueue)
+              * mapped.  This only applies to non-data frames, since data frames
+              * were already mapped as they entered into the driver.
+              */
+-            adf_nbuf_map(
+-                    target->osdev,
+-                    GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket),
+-                    ADF_OS_DMA_TO_DEVICE);
+-
+-	pPacket->PktInfo.AsTx.Flags |= HTC_TX_PACKET_FLAG_FIXUP_NETBUF;
++            if(!IS_TX_CREDIT_FLOW_ENABLED(pEndpoint)) {
++	        pPacket->PktInfo.AsTx.Flags |= HTC_TX_PACKET_FLAG_FIXUP_NETBUF;
++                adf_nbuf_map(
++                        target->osdev,
++                        GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket),
++                        ADF_OS_DMA_TO_DEVICE);
++	    }
+     } HTC_PACKET_QUEUE_ITERATE_END;
+ 
+     HTCTrySend(target,pEndpoint,pPktQueue);
+-- 
+1.9.1
+
-- 
2.7.4



More information about the meta-freescale mailing list