Latest NFC stack-drop from Broadcom.

Patches provided by Evan Chu <evanchu@broadcom.com> and
Paul Chaisson <pchaisson@broadcom.com>.

Most important changes:
- Support for BCM20793B4 and BCM20793B5 revisions in the HAL.
- Remove connection handover and SNEP implementations, since
  we already have them in java-land.
- Fix issue where the NFCC is not woken for HCI writes.
- Remove a lot of duplicated code in the HAL.
- Various small fixes.

Change-Id: I00f7457fe7ec23602071532a15bf2be9d7706b37
diff --git a/Android.mk b/Android.mk
index a953849..fa5d6e8 100755
--- a/Android.mk
+++ b/Android.mk
@@ -1,3 +1,4 @@
+# function to find all *.cpp files under a directory
 define all-cpp-files-under
 $(patsubst ./%,%, \
   $(shell cd $(LOCAL_PATH) ; \
@@ -7,70 +8,70 @@
 
 
 LOCAL_PATH:= $(call my-dir)
-NFA:=src/nfa
-NFC:=src/nfc
-UDRV:=src/udrv
+NFA := src/nfa
+NFC := src/nfc
+HAL := src/hal
+UDRV := src/udrv
+HALIMPL := halimpl/bcm2079x
+D_CFLAGS := -DANDROID -DBUILDCFG=1
 
-#gki
-GKI_FILES:=$(call all-c-files-under, src/gki)
 
-#
-# libnfc-nci
-#
-#nfa
-NFA_ADAP_FILES:= \
-    $(call all-c-files-under, src/adaptation) \
-    $(call all-cpp-files-under, src/adaptation)
-
-#nfa
-NFA_FILES:= $(call all-c-files-under, $(NFA))
-NFC_FILES:= $(call all-c-files-under, $(NFC))
-
-COMMON_CFLAGS += -DANDROID -DANDROID_USE_LOGCAT=TRUE
-
-NFA_CFLAGS += -DNFC_CONTROLLER_ID=1
-D_CFLAGS += -DDEBUG -D_DEBUG -O0 -g
-
-ifeq ($(findstring maguro,$(TARGET_PRODUCT)),)
-ifeq ($(findstring crespo,$(TARGET_PRODUCT)),)
-D_CFLAGS += -DGENERIC_TARGET=1
-endif
-endif
-
-D_CFLAGS += -DBUILDCFG=1
-D_CFLAGS += -DNFA_APP_DOWNLOAD_NFC_PATCHRAM=TRUE
-
-#NTAL includes
-NTAL_CFLAGS += -I$(LOCAL_PATH)/src/include
-NTAL_CFLAGS += -I$(LOCAL_PATH)/src/gki/ulinux
-NTAL_CFLAGS += -I$(LOCAL_PATH)/src/gki/common
-
-#NFA NFC includes
-NFA_CFLAGS += -I$(LOCAL_PATH)/src/include
-NFA_CFLAGS += -I$(LOCAL_PATH)/src/gki/ulinux
-NFA_CFLAGS += -I$(LOCAL_PATH)/src/gki/common
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFA)/brcm
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFA)/include
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFA)/int
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFC)/brcm
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFC)/include
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(NFC)/int
-NFA_CFLAGS += -I$(LOCAL_PATH)/$(UDRV)/include
-NFA_CFLAGS += -I$(LOCAL_PATH)/src/hal/include
-
-ifneq ($(NCI_VERSION),)
-NFA_CFLAGS += -DNCI_VERSION=$(NCI_VERSION)
-endif
+######################################
+# Build shared library system/lib/libnfc-nci.so for stack code.
 
 include $(CLEAR_VARS)
 LOCAL_PRELINK_MODULE := false
 LOCAL_ARM_MODE := arm
-LOCAL_MODULE:= libnfc-nci
+LOCAL_MODULE := libnfc-nci
 LOCAL_MODULE_TAGS := optional
 LOCAL_SHARED_LIBRARIES := libhardware_legacy libcutils libdl libstlport libhardware
-LOCAL_CFLAGS := $(COMMON_CFLAGS) $(D_CFLAGS) $(NFA_CFLAGS)
-LOCAL_C_INCLUDES := external/stlport/stlport bionic/ bionic/libstdc++/include
-LOCAL_SRC_FILES := $(NFA_ADAP_FILES) $(GKI_FILES) $(NFA_FILES) $(NFC_FILES) $(LOG_FILES)
+LOCAL_CFLAGS := $(D_CFLAGS)
+LOCAL_C_INCLUDES := external/stlport/stlport bionic/ bionic/libstdc++/include \
+    $(LOCAL_PATH)/src/include \
+    $(LOCAL_PATH)/src/gki/ulinux \
+    $(LOCAL_PATH)/src/gki/common \
+    $(LOCAL_PATH)/$(NFA)/include \
+    $(LOCAL_PATH)/$(NFA)/int \
+    $(LOCAL_PATH)/$(NFC)/include \
+    $(LOCAL_PATH)/$(NFC)/int \
+    $(LOCAL_PATH)/src/hal/include \
+    $(LOCAL_PATH)/src/hal/int
+LOCAL_SRC_FILES := \
+    $(call all-c-files-under, $(NFA)/ce $(NFA)/dm $(NFA)/ee) \
+    $(call all-c-files-under, $(NFA)/hci $(NFA)/int $(NFA)/p2p $(NFA)/rw $(NFA)/sys) \
+    $(call all-c-files-under, $(NFC)/int $(NFC)/llcp $(NFC)/nci $(NFC)/ndef $(NFC)/nfc $(NFC)/tags) \
+    $(call all-c-files-under, src/adaptation) \
+    $(call all-cpp-files-under, src/adaptation) \
+    $(call all-c-files-under, src/gki) \
+    src/nfca_version.c
 include $(BUILD_SHARED_LIBRARY)
 
+
+######################################
+# Build shared library system/lib/hw/nfc_nci.*.so for Hardware Abstraction Layer.
+# Android's generic HAL (libhardware.so) dynamically loads this shared library.
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := nfc_nci.$(TARGET_DEVICE)
+LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
+LOCAL_SRC_FILES := $(call all-c-files-under, $(HALIMPL)) \
+    $(call all-cpp-files-under, $(HALIMPL))
+LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware_legacy libstlport
+LOCAL_MODULE_TAGS := optional
+LOCAL_C_INCLUDES := external/stlport/stlport bionic/ bionic/libstdc++/include \
+    $(LOCAL_PATH)/$(HALIMPL)/include \
+    $(LOCAL_PATH)/$(HALIMPL)/gki/ulinux \
+    $(LOCAL_PATH)/$(HALIMPL)/gki/common \
+    $(LOCAL_PATH)/$(HAL)/include \
+    $(LOCAL_PATH)/$(HAL)/int \
+    $(LOCAL_PATH)/src/include \
+    $(LOCAL_PATH)/$(NFC)/include \
+    $(LOCAL_PATH)/$(NFA)/include \
+    $(LOCAL_PATH)/$(UDRV)/include
+LOCAL_CFLAGS := $(D_CFLAGS) -DNFC_HAL_TARGET=TRUE -DNFC_RW_ONLY=TRUE
+LOCAL_CPPFLAGS := $(LOCAL_CFLAGS)
+include $(BUILD_SHARED_LIBRARY)
+
+
+######################################
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/halimpl/Android.mk b/halimpl/Android.mk
deleted file mode 100644
index cfd03be..0000000
--- a/halimpl/Android.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/halimpl/bcm2079x/Android.mk b/halimpl/bcm2079x/Android.mk
deleted file mode 100644
index 99cf768..0000000
--- a/halimpl/bcm2079x/Android.mk
+++ /dev/null
@@ -1,56 +0,0 @@
-# Copyright (C) 2011 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-
-# function to find all *.cpp files under a directory
-define all-cpp-files-under
-$(patsubst ./%,%, \
-  $(shell cd $(LOCAL_PATH) ; \
-          find $(1) -name "*.cpp" -and -not -name ".*") \
- )
-endef
-
-
-HAL_SUFFIX := $(TARGET_DEVICE)
-ifeq ($(TARGET_DEVICE),crespo)
-	HAL_SUFFIX := herring
-endif
-
-
-######################################
-######################################
-# build shared library system/lib/hw/nfc_nci.*.so
-# which is linked by libhardware.so
-
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-LOCAL_MODULE := nfc_nci.$(HAL_SUFFIX)
-LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw
-LOCAL_SRC_FILES := $(call all-c-files-under, .)  $(call all-cpp-files-under, .)
-LOCAL_SHARED_LIBRARIES := liblog libcutils libhardware_legacy libstlport
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_C_INCLUDES += external/stlport/stlport  bionic/  bionic/libstdc++/include \
-	$(LOCAL_PATH)/include \
-	$(LOCAL_PATH)/gki/ulinux \
- 	$(LOCAL_PATH)/gki/common \
-	$(LOCAL_PATH)/udrv/include \
-	$(LOCAL_PATH)/hal/include \
-	$(LOCAL_PATH)/hal/int
-
-LOCAL_CFLAGS += -DANDROID \
-	-DBUILDCFG=1 -DNFC_HAL_TARGET=TRUE -DNFC_RW_ONLY=TRUE
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/halimpl/bcm2079x/adaptation/HalAdaptation.cpp b/halimpl/bcm2079x/adaptation/HalAdaptation.cpp
index 54b1ae8..3ed508f 100644
--- a/halimpl/bcm2079x/adaptation/HalAdaptation.cpp
+++ b/halimpl/bcm2079x/adaptation/HalAdaptation.cpp
@@ -32,6 +32,12 @@
 #include "nfc_hal_post_reset.h"
 #include <errno.h>
 #include <pthread.h>
+#include "buildcfg.h"
+extern void delete_hal_non_volatile_store ();
+extern "C"
+{
+#include "userial.h"
+}
 
 
 ///////////////////////////////////////
@@ -59,27 +65,94 @@
     int retval = EACCES;
     unsigned long freq = 0;
     unsigned long num = 0;
+    char temp[120];
+    UINT8 logLevel = 0;
 
-    InitializeGlobalAppLogLevel ();
+    logLevel = InitializeGlobalAppLogLevel ();
 
-    //initialize the crystal frequency
-    if (GetNumValue((char*)NAME_XTAL_FREQUENCY, &freq, sizeof(freq)))
-    {
-        ALOGD("%s: setting xtal frequency=%lu", __FUNCTION__, freq);
-        nfc_post_reset_cb.dev_init_config.xtal_freq = (UINT16) freq;
-        nfc_post_reset_cb.dev_init_config.flags |= NFC_HAL_DEV_INIT_FLAGS_SET_XTAL_FREQ;
-    }
+    if ( GetNumValue ( NAME_PRESERVE_STORAGE, (char*)&num, sizeof ( num ) ) &&
+            (num == 1) )
+        ALOGD ("%s: preserve HAL NV store", __FUNCTION__);
+    else
+        delete_hal_non_volatile_store ();
 
     // Initialize protocol logging level
     if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) )
         ScrProtocolTraceFlag = num;
 
-    HAL_NfcInitialize ();
+    tUSERIAL_OPEN_CFG cfg;
+    struct tUART_CONFIG  uart;
 
-    // Initialize appliation logging level
-    if ( GetNumValue ( NAME_APPL_TRACE_LEVEL, &num, sizeof ( num ) ) ) {
-        HAL_NfcSetTraceLevel(num);
+    if ( GetStrValue ( NAME_UART_PARITY, temp, sizeof ( temp ) ) )
+    {
+        if ( strcmp ( temp, "even" ) == 0 )
+            uart.m_iParity = USERIAL_PARITY_EVEN;
+        else if ( strcmp ( temp, "odd" ) == 0 )
+            uart.m_iParity = USERIAL_PARITY_ODD;
+        else if ( strcmp ( temp, "none" ) == 0 )
+            uart.m_iParity = USERIAL_PARITY_NONE;
     }
+    else
+        uart.m_iParity = USERIAL_PARITY_NONE;
+
+    if ( GetStrValue ( NAME_UART_STOPBITS, temp, sizeof ( temp ) ) )
+    {
+        if ( strcmp ( temp, "1" ) == 0 )
+            uart.m_iStopbits = USERIAL_STOPBITS_1;
+        else if ( strcmp ( temp, "2" ) == 0 )
+            uart.m_iStopbits = USERIAL_STOPBITS_2;
+        else if ( strcmp ( temp, "1.5" ) == 0 )
+            uart.m_iStopbits = USERIAL_STOPBITS_1_5;
+    }
+    else if ( GetNumValue ( NAME_UART_STOPBITS, &num, sizeof ( num ) ) )
+    {
+        if ( num == 1 )
+            uart.m_iStopbits = USERIAL_STOPBITS_1;
+        else if ( num == 2 )
+            uart.m_iStopbits = USERIAL_STOPBITS_2;
+    }
+    else
+        uart.m_iStopbits = USERIAL_STOPBITS_1;
+
+    if ( GetNumValue ( NAME_UART_DATABITS, &num, sizeof ( num ) ) )
+    {
+        if ( 5 <= num && num <= 8 )
+            uart.m_iDatabits = ( 1 << ( num + 1 ) );
+    }
+    else
+        uart.m_iDatabits = USERIAL_DATABITS_8;
+
+    if ( GetNumValue ( NAME_UART_BAUD, &num, sizeof ( num ) ) )
+    {
+        if ( num == 300 ) uart.m_iBaudrate = USERIAL_BAUD_300;
+        else if ( num == 600 ) uart.m_iBaudrate = USERIAL_BAUD_600;
+        else if ( num == 1200 ) uart.m_iBaudrate = USERIAL_BAUD_1200;
+        else if ( num == 2400 ) uart.m_iBaudrate = USERIAL_BAUD_2400;
+        else if ( num == 9600 ) uart.m_iBaudrate = USERIAL_BAUD_9600;
+        else if ( num == 19200 ) uart.m_iBaudrate = USERIAL_BAUD_19200;
+        else if ( num == 57600 ) uart.m_iBaudrate = USERIAL_BAUD_57600;
+        else if ( num == 115200 ) uart.m_iBaudrate = USERIAL_BAUD_115200;
+        else if ( num == 230400 ) uart.m_iBaudrate = USERIAL_BAUD_230400;
+        else if ( num == 460800 ) uart.m_iBaudrate = USERIAL_BAUD_460800;
+        else if ( num == 921600 ) uart.m_iBaudrate = USERIAL_BAUD_921600;
+    }
+    else if ( GetStrValue ( NAME_UART_BAUD, temp, sizeof ( temp ) ) )
+    {
+        if ( strcmp ( temp, "auto" ) == 0 )
+            uart.m_iBaudrate = USERIAL_BAUD_AUTO;
+    }
+    else
+        uart.m_iBaudrate = USERIAL_BAUD_115200;
+
+    memset (&cfg, 0, sizeof(tUSERIAL_OPEN_CFG));
+    cfg.fmt = uart.m_iDatabits | uart.m_iParity | uart.m_iStopbits;
+    cfg.baud = uart.m_iBaudrate;
+
+    ALOGD ("%s: uart config=0x%04x, %d\n", __func__, cfg.fmt, cfg.baud);
+    USERIAL_Init(&cfg);
+
+    HAL_NfcInitialize ();
+    HAL_NfcSetTraceLevel (logLevel); // Initialize HAL's logging level
 
     retval = 0;
     ALOGD ("%s: exit %d", __FUNCTION__, retval);
@@ -253,3 +326,4 @@
     ALOGD ("%s: exit %d", __FUNCTION__, retval);
     return retval;
 }
+
diff --git a/halimpl/bcm2079x/adaptation/NonVolatileStore.cpp b/halimpl/bcm2079x/adaptation/NonVolatileStore.cpp
index e007a2e..a8c9a86 100644
--- a/halimpl/bcm2079x/adaptation/NonVolatileStore.cpp
+++ b/halimpl/bcm2079x/adaptation/NonVolatileStore.cpp
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 #include "OverrideLog.h"
+#define LOG_TAG "NfcNciHal"
 #include "gki.h"
 extern "C"
 {
@@ -23,6 +24,7 @@
 }
 #include "nfc_hal_nv_ci.h"
 #include "nfc_hal_int.h"
+#include "config.h"
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -31,8 +33,9 @@
 
 
 //directory of HAL's non-volatile storage
-static const char* bcm_nfc_location = "/data/nfc";
+static const char* default_location = "/data/nfc";
 static const char* filename_prefix = "/halStorage.bin";
+static const std::string get_storage_location ();
 
 
 /*******************************************************************************
@@ -57,7 +60,7 @@
 *******************************************************************************/
 void nfc_hal_nv_co_read (UINT8 *p_buf, UINT16 nbytes, UINT8 block)
 {
-    std::string fn (bcm_nfc_location);
+    std::string fn = get_storage_location();
     char filename[256];
 
     fn.append (filename_prefix);
@@ -70,7 +73,7 @@
 
     ALOGD ("%s: buffer len=%u; file=%s", __FUNCTION__, nbytes, filename);
     int fileStream = open (filename, O_RDONLY);
-    if (fileStream > 0)
+    if (fileStream >= 0)
     {
         size_t actualRead = read (fileStream, p_buf, nbytes);
         if (actualRead > 0)
@@ -113,7 +116,7 @@
 *******************************************************************************/
 void nfc_hal_nv_co_write (const UINT8 *p_buf, UINT16 nbytes, UINT8 block)
 {
-    std::string fn (bcm_nfc_location);
+    std::string fn = get_storage_location();
     char filename[256];
     int fileStream = 0;
 
@@ -127,7 +130,7 @@
     ALOGD ("%s: bytes=%u; file=%s", __FUNCTION__, nbytes, filename);
 
     fileStream = open (filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
-    if (fileStream > 0)
+    if (fileStream >= 0)
     {
         size_t actualWritten = write (fileStream, p_buf, nbytes);
         ALOGD ("%s: %d bytes written", __FUNCTION__, actualWritten);
@@ -147,3 +150,67 @@
         nfc_hal_nv_ci_write (NFC_HAL_NV_CO_FAIL);
     }
 }
+
+
+/*******************************************************************************
+**
+** Function         get_storage_location
+**
+** Description      Get the absolute directory path of the HAL's storage location.
+**
+** Parameters       none
+**
+** Returns          Absolute path.
+**
+*******************************************************************************/
+const std::string get_storage_location ()
+{
+    char buffer [100];
+    memset (buffer, 0, sizeof(buffer));
+    if (!GetStrValue (NAME_NFA_STORAGE, buffer, sizeof(buffer)))
+        return default_location;
+    else
+        return std::string (buffer);
+}
+
+
+/*******************************************************************************
+**
+** Function         delete_hal_non_volatile_store
+**
+** Description      Delete all the content of the HAL's storage location.
+**
+** Parameters       none
+**
+** Returns          none
+**
+*******************************************************************************/
+void delete_hal_non_volatile_store ()
+{
+    static bool firstTime = true;
+    std::string fn = get_storage_location();
+    char filename[256];
+    int stat = 0;
+
+    if (firstTime == false)
+        return;
+    firstTime = false;
+
+    ALOGD ("%s", __FUNCTION__);
+
+    fn.append (filename_prefix);
+    if (fn.length() > 200)
+    {
+        ALOGE ("%s: filename too long", __FUNCTION__);
+        return;
+    }
+
+    sprintf (filename, "%s%u", fn.c_str(), DH_NV_BLOCK);
+    remove (filename);
+    sprintf (filename, "%s%u", fn.c_str(), HC_F3_NV_BLOCK);
+    remove (filename);
+    sprintf (filename, "%s%u", fn.c_str(), HC_F4_NV_BLOCK);
+    remove (filename);
+    sprintf (filename, "%s%u", fn.c_str(), HC_F2_NV_BLOCK);
+    remove (filename);
+}
diff --git a/halimpl/bcm2079x/adaptation/StartupConfig.cpp b/halimpl/bcm2079x/adaptation/StartupConfig.cpp
new file mode 100644
index 0000000..529361b
--- /dev/null
+++ b/halimpl/bcm2079x/adaptation/StartupConfig.cpp
@@ -0,0 +1,177 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 1999-2012 Broadcom Corporation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at:
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ * Construct a buffer that contains multiple Type-Length-Value contents
+ * that is used by the HAL in a CORE_SET_CONFIG NCI command.
+ ******************************************************************************/
+
+#define LOG_TAG "NfcNciHal"
+#include "OverrideLog.h"
+#include "StartupConfig.h"
+
+
+const UINT8 StartupConfig::mMaxLength = 255;
+
+
+/*******************************************************************************
+**
+** Function:        initialize
+**
+** Description:     Initialize all member variables.
+**
+** Returns:         None
+**
+*******************************************************************************/
+StartupConfig::StartupConfig ()
+{
+    //set first byte to 0, which is length of payload
+    mBuffer.append ((uint8_string::size_type) 1, (uint8_string::value_type) 0);
+}
+
+
+/*******************************************************************************
+**
+** Function:        initialize
+**
+** Description:     Reset all member variables.
+**
+** Returns:         None
+**
+*******************************************************************************/
+void StartupConfig::initialize ()
+{
+    mBuffer.clear ();
+    //set first byte to 0, which is length of payload
+    mBuffer.append ((uint8_string::size_type) 1, (uint8_string::value_type) 0);
+}
+
+
+/*******************************************************************************
+**
+** Function:        getInternalBuffer
+**
+** Description:     Get the pointer to buffer that contains multiple
+**                  Type-Length-Value contents.
+**
+** Returns:         Pointer to buffer.
+**
+*******************************************************************************/
+const UINT8* StartupConfig::getInternalBuffer ()
+{
+    return mBuffer.data ();
+}
+
+
+/*******************************************************************************
+**
+** Function:        append
+**
+** Description:     Append new config data to internal buffer.
+**                  newContent: buffer containing new content; newContent[0] is
+**                          payload length; newContent[1..end] is payload.
+**
+** Returns:         True if ok.
+**
+*******************************************************************************/
+bool StartupConfig::append (const UINT8* newContent)
+{
+    static const char fn [] = "StartupConfig::append";
+    if ((newContent[0]+mBuffer.size()) > mMaxLength)
+    {
+        ALOGE ("%s: exceed max length", fn);
+        return false;
+    }
+    ALOGD ("%s: try append %u bytes", fn, (uint8_string::size_type) (newContent[0]));
+    //append new payload into private buffer
+    mBuffer.append (newContent+1, (uint8_string::size_type) (newContent[0]));
+    //increase size counter of payload in private buffer
+    mBuffer[0] = mBuffer[0] + newContent[0];
+    ALOGD ("%s: new size %u bytes", fn, mBuffer[0]);
+    return true;
+};
+
+
+/*******************************************************************************
+**
+** Function:        append
+**
+** Description:     Append new config data to internal buffer.
+**                  newContent: buffer containing new content; newContent[0] is
+**                          payload length; newContent[1..end] is payload.
+**                  newContentLen: total length of newContent.
+**
+** Returns:         True if ok.
+**
+*******************************************************************************/
+bool StartupConfig::append (const UINT8* newContent, UINT8 newContentLen)
+{
+    static const char fn [] = "StartupConfig::append";
+    if ((newContent[0]+1) != newContentLen)
+    {
+        ALOGE ("%s: invalid length at newContent[0]", fn);
+        return false;
+    }
+    return append (newContent);
+};
+
+
+/*******************************************************************************
+**
+** Function:        disableSecureElement
+**
+** Description:     Adjust a TLV to disable secure element(s).  The TLV's type is 0xC2.
+**                  bitmask: 0xC0 = do not detect any secure element.
+**                           0x40 = do not detect secure element in slot 0.
+**                           0x80 = do not detect secure element in slot 1.
+**
+** Returns:         True if ok.
+**
+*******************************************************************************/
+bool StartupConfig::disableSecureElement (UINT8 bitmask)
+{
+    const UINT8 maxLen = mBuffer[0];
+    UINT8 index = 1, tlvType = 0, tlvLen = 0;
+    bool found0xC2 = false;
+
+    while (true)
+    {
+        if (index > maxLen)
+            break;
+        tlvType = mBuffer [index];
+        index++;
+        tlvLen = mBuffer [index];
+        index++;
+        if (tlvType == 0xC2) //this TLV controls secure elements
+        {
+            index++; //index of second byte in TLV's value
+            mBuffer [index] = mBuffer [index] | bitmask; //turn on certain bits
+            found0xC2 = true;
+        }
+        else
+            index += tlvLen;
+    }
+
+    if (found0xC2 == false)
+    {
+        UINT8 tlv [] = {0x04, 0xC2, 0x02, 0x61, 0x00};
+        tlv [4] = tlv [4] | bitmask;
+        found0xC2 = append (tlv);
+    }
+    return found0xC2;
+}
diff --git a/halimpl/bcm2079x/adaptation/config.cpp b/halimpl/bcm2079x/adaptation/config.cpp
index c96fdd2..11ef297 100644
--- a/halimpl/bcm2079x/adaptation/config.cpp
+++ b/halimpl/bcm2079x/adaptation/config.cpp
@@ -24,12 +24,7 @@
 
 #define LOG_TAG "NfcNciHal"
 
-#if GENERIC_TARGET
-const char alternative_config_path[] = "/data/nfc/";
-#else
 const char alternative_config_path[] = "";
-#endif
-
 const char transport_config_path[] = "/etc/";
 
 #define config_name             "libnfc-brcm.conf"
@@ -61,7 +56,7 @@
     static CNfcConfig& GetInstance();
     friend void readOptionalConfig(const char* optional);
 
-    bool    getValue(const char* name, char* pValue, size_t len) const;
+    bool    getValue(const char* name, char* pValue, size_t& len) const;
     bool    getValue(const char* name, unsigned long& rValue) const;
     bool    getValue(const char* name, unsigned short & rValue) const;
     const CNfcParam*    find(const char* p_name) const;
@@ -413,7 +408,7 @@
 **              false if setting does not exist
 **
 *******************************************************************************/
-bool CNfcConfig::getValue(const char* name, char* pValue, size_t len) const
+bool CNfcConfig::getValue(const char* name, char* pValue, size_t& len) const
 {
     const CNfcParam* pParam = find(name);
     if (pParam == NULL)
@@ -422,7 +417,9 @@
     if (pParam->str_len() > 0)
     {
         memset(pValue, 0, len);
-        memcpy(pValue, pParam->str_value(), pParam->str_len());
+        if (len > pParam->str_len())
+            len  = pParam->str_len();
+        memcpy(pValue, pParam->str_value(), len);
         return true;
     }
     return false;
@@ -658,11 +655,13 @@
 ** Returns:     none
 **
 *******************************************************************************/
-extern "C" int GetStrValue(const char* name, char* pValue, unsigned long len)
+extern "C" int GetStrValue(const char* name, char* pValue, unsigned long l)
 {
+    size_t len = l;
     CNfcConfig& rConfig = CNfcConfig::GetInstance();
 
-    return rConfig.getValue(name, pValue, len);
+    bool b = rConfig.getValue(name, pValue, len);
+    return b ? len : 0;
 }
 
 /*******************************************************************************
diff --git a/halimpl/bcm2079x/adaptation/patchram.cpp b/halimpl/bcm2079x/adaptation/patchram.cpp
index 273de90..343eab2 100644
--- a/halimpl/bcm2079x/adaptation/patchram.cpp
+++ b/halimpl/bcm2079x/adaptation/patchram.cpp
@@ -24,18 +24,14 @@
     #include "nfc_hal_post_reset.h"
 }
 #include <string>
+#include <cutils/properties.h>
 #include "spdhelper.h"
+#include "StartupConfig.h"
 
 #define LOG_TAG "NfcNciHal"
 
-/* Location of patchfiles */
-#ifndef NFCA_PATCHFILE_LOCATION
-#define NFCA_PATCHFILE_LOCATION ("/system/vendor/firmware/")
-#endif
-
 #define FW_PRE_PATCH                        "FW_PRE_PATCH"
 #define FW_PATCH                            "FW_PATCH"
-#define NFA_CONFIG_FORMAT                   "NFA_CONFIG_FORMAT"
 #define MAX_RF_DATA_CREDITS                 "MAX_RF_DATA_CREDITS"
 
 #define MAX_BUFFER      (512)
@@ -44,33 +40,64 @@
 static void * sPrmBuf = NULL;
 static void * sI2cFixPrmBuf = NULL;
 
-#define NFA_DM_START_UP_CFG_PARAM_MAX_LEN   100
-static UINT8 nfa_dm_start_up_cfg[NFA_DM_START_UP_CFG_PARAM_MAX_LEN];
-extern UINT8 *p_nfc_hal_dm_start_up_cfg;
-static UINT8 nfa_dm_start_up_vsc_cfg[NFA_DM_START_UP_CFG_PARAM_MAX_LEN];
-extern UINT8 *p_nfc_hal_dm_start_up_vsc_cfg;
-extern UINT8 *p_nfc_hal_dm_lptd_cfg;
-static UINT8 nfa_dm_lptd_cfg[LPTD_PARAM_LEN];
+#define CONFIG_MAX_LEN 256
+static UINT8 sConfig [CONFIG_MAX_LEN];
+static StartupConfig sStartupConfig;
+static StartupConfig sLptdConfig;
+extern UINT8 *p_nfc_hal_dm_start_up_cfg; //defined in the HAL
+static UINT8 nfa_dm_start_up_vsc_cfg[CONFIG_MAX_LEN];
+extern UINT8 *p_nfc_hal_dm_start_up_vsc_cfg; //defined in the HAL
+extern UINT8 *p_nfc_hal_dm_lptd_cfg; //defined in the HAL
 extern tSNOOZE_MODE_CONFIG gSnoozeModeCfg;
-extern BOOLEAN nfc_hal_prm_nvm_required; //true: don't download firmware if controller cannot detect EERPOM
-static void HalNciCallback (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
+extern tNFC_HAL_CFG *p_nfc_hal_cfg;
+static void mayDisableSecureElement (StartupConfig& config);
 
+/* Default patchfile (in NCD format) */
+#ifndef NFA_APP_DEFAULT_PATCHFILE_NAME
+#define NFA_APP_DEFAULT_PATCHFILE_NAME      "\0"
+#endif
+
+/* Default patchfile (in NCD format) */
+#ifndef NFA_APP_DEFAULT_I2C_PATCHFILE_NAME
+#define NFA_APP_DEFAULT_I2C_PATCHFILE_NAME  "\0"
+#endif
+
+#define BRCM_43341B0_ID 0x43341b00
 
 tNFC_POST_RESET_CB nfc_post_reset_cb =
 {
-    "/vendor/firmware/bcm2079x_firmware.ncd",
+    /* Default Patch & Pre-Patch */
+    NFA_APP_DEFAULT_PATCHFILE_NAME,
     NULL,
-    "/vendor/firmware/bcm2079x_pre_firmware.ncd",
+    NFA_APP_DEFAULT_I2C_PATCHFILE_NAME,
     NULL,
+
+    /* Default UART baud rate */
     NFC_HAL_DEFAULT_BAUD,
 
-    {0, 0},                     /* tBRCM_DEV_INIT_CONFIG dev_init_config */
+    /* Default tNFC_HAL_DEV_INIT_CFG (flags, num_xtal_cfg, {brcm_hw_id, xtal-freq, xtal-index} ) */
+    {
+        1, /* number of valid entries */
+        {
+            {BRCM_43341B0_ID, 37400, NFC_HAL_XTAL_INDEX_37400},
+            {0, 0, 0},
+            {0, 0, 0},
+            {0, 0, 0},
+            {0, 0, 0},
+        }
+    },
 
+    /* Default low power mode settings */
     NFC_HAL_LP_SNOOZE_MODE_NONE,    /* Snooze Mode          */
     NFC_HAL_LP_IDLE_THRESHOLD_HOST, /* Idle Threshold Host  */
     NFC_HAL_LP_IDLE_THRESHOLD_HC,   /* Idle Threshold HC    */
     NFC_HAL_LP_ACTIVE_LOW,          /* NFC_WAKE Active Mode */
-    NFC_HAL_LP_ACTIVE_HIGH          /* DH_WAKE Active Mode  */
+    NFC_HAL_LP_ACTIVE_HIGH,         /* DH_WAKE Active Mode  */
+
+    NFA_APP_MAX_NUM_REINIT,         /* max retry to get NVM type */
+    0,                              /* current retry count */
+    TRUE,                           /* debug mode for downloading patchram */
+    FALSE                           /* skip downloading patchram after reinit because of patch download failure */
 };
 
 
@@ -276,21 +303,34 @@
 *******************************************************************************/
 static void getNfaValues()
 {
-    unsigned long num;
+    unsigned long num = 0;
+    int actualLen = 0;
 
-    if ( GetStrValue ( NAME_NFA_DM_START_UP_CFG, (char*)nfa_dm_start_up_cfg, sizeof ( nfa_dm_start_up_cfg ) ) )
+    p_nfc_hal_cfg->nfc_hal_prm_nvm_required = TRUE; //don't download firmware if controller cannot detect EERPOM
+    sStartupConfig.initialize ();
+    sLptdConfig.initialize ();
+
+
+    actualLen = GetStrValue (NAME_NFA_DM_START_UP_CFG, (char*)sConfig, sizeof(sConfig));
+    if (actualLen >= 8)
     {
-        p_nfc_hal_dm_start_up_cfg = &nfa_dm_start_up_cfg[0];
         ALOGD ( "START_UP_CFG[0] = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
-                                                                            nfa_dm_start_up_cfg[0],
-                                                                            nfa_dm_start_up_cfg[1],
-                                                                            nfa_dm_start_up_cfg[2],
-                                                                            nfa_dm_start_up_cfg[3],
-                                                                            nfa_dm_start_up_cfg[4],
-                                                                            nfa_dm_start_up_cfg[5],
-                                                                            nfa_dm_start_up_cfg[6],
-                                                                            nfa_dm_start_up_cfg[7] );
+                sConfig[0],
+                sConfig[1],
+                sConfig[2],
+                sConfig[3],
+                sConfig[4],
+                sConfig[5],
+                sConfig[6],
+                sConfig[7] );
+        sStartupConfig.append (sConfig, actualLen);
     }
+
+    // Set antenna tuning configuration if configured.
+    actualLen = GetStrValue(NAME_PREINIT_DSP_CFG, (char*)sConfig, sizeof(sConfig));
+    if (actualLen)
+        sStartupConfig.append (sConfig, actualLen);
+
     if ( GetStrValue ( NAME_NFA_DM_START_UP_VSC_CFG, (char*)nfa_dm_start_up_vsc_cfg, sizeof (nfa_dm_start_up_vsc_cfg) ) )
     {
         p_nfc_hal_dm_start_up_vsc_cfg = &nfa_dm_start_up_vsc_cfg[0];
@@ -304,8 +344,16 @@
                                                                             nfa_dm_start_up_vsc_cfg[6],
                                                                             nfa_dm_start_up_vsc_cfg[7] );
     }
-    if ( GetStrValue ( NAME_LPTD_CFG, (char*)&nfa_dm_lptd_cfg[0], sizeof( nfa_dm_lptd_cfg ) ) )
-        p_nfc_hal_dm_lptd_cfg = &nfa_dm_lptd_cfg[0];
+
+    actualLen = GetStrValue(NAME_LPTD_CFG, (char*)sConfig, sizeof(sConfig));
+    if (actualLen)
+    {
+        sLptdConfig.append (sConfig, actualLen);
+        p_nfc_hal_dm_lptd_cfg = const_cast<UINT8*> (sLptdConfig.getInternalBuffer ());
+    }
+
+    mayDisableSecureElement (sStartupConfig);
+    p_nfc_hal_dm_start_up_cfg = const_cast<UINT8*> (sStartupConfig.getInternalBuffer ());
 }
 
 /*******************************************************************************
@@ -376,11 +424,7 @@
             if ((fd = fopen(sPatchFn, "rb")) != NULL)
             {
                 UINT32 lenPrmBuffer = getFileLength(fd);
-                tNFC_HAL_PRM_FORMAT patch_format = NFC_HAL_PRM_FORMAT_NCD;
-
-                GetNumValue((char*)NFA_CONFIG_FORMAT, &patch_format, sizeof(patch_format));
-
-                ALOGD("%s Downloading patchfile %s (size: %lu) format=%u", __FUNCTION__, sPatchFn, lenPrmBuffer, patch_format);
+                ALOGD("%s Downloading patchfile %s (size: %lu) format=%u", __FUNCTION__, sPatchFn, lenPrmBuffer, NFC_HAL_PRM_FORMAT_NCD);
                 if ((sPrmBuf = malloc(lenPrmBuffer)) != NULL)
                 {
                     fread(sPrmBuf, lenPrmBuffer, 1, fd);
@@ -388,7 +432,7 @@
                     if (!SpdHelper::isPatchBad((UINT8*)sPrmBuf, lenPrmBuffer))
                     {
                         /* Download patch using static memeory mode */
-                        HAL_NfcPrmDownloadStart(patch_format, 0, (UINT8*)sPrmBuf, lenPrmBuffer, 0, prmCallback);
+                        HAL_NfcPrmDownloadStart(NFC_HAL_PRM_FORMAT_NCD, 0, (UINT8*)sPrmBuf, lenPrmBuffer, 0, prmCallback);
                         bDownloadStarted = true;
                     }
                 }
@@ -430,7 +474,7 @@
 *******************************************************************************/
 void nfc_hal_post_reset_init (UINT32 brcm_hw_id, UINT8 nvm_type)
 {
-    ALOGD("%s: brcm_hw_id=0x%x, nvm_type=%d", __FUNCTION__, brcm_hw_id, nvm_type);
+    ALOGD("%s: brcm_hw_id=0x%lx, nvm_type=%d", __FUNCTION__, brcm_hw_id, nvm_type);
     tHAL_NFC_STATUS stat = HAL_NFC_STATUS_FAILED;
     UINT8 max_credits = 1;
 
@@ -438,7 +482,7 @@
     {
         ALOGD("%s: No NVM detected, FAIL the init stage to force a retry", __FUNCTION__);
         USERIAL_PowerupDevice (0);
-        stat = HAL_NfcReInit (HalNciCallback);
+        stat = HAL_NfcReInit ();
     }
     else
     {
@@ -456,46 +500,27 @@
 
 /*******************************************************************************
 **
-** Function:    HalNciCallback
+** Function:        mayDisableSecureElement
 **
-** Description: Determine whether controller has detected EEPROM.
+** Description:     Optionally adjust a TLV to disable secure element.  This feature
+**                  is enabled by setting the system property
+**                  nfc.disable_secure_element to a bit mask represented by a hex
+**                  octet: C0 = do not detect any secure element.
+**                         40 = do not detect secure element in slot 0.
+**                         80 = do not detect secure element in slot 1.
 **
-** Returns:     none
+**                  config: a sequence of TLV's.
 **
 *******************************************************************************/
-void HalNciCallback (tNFC_HAL_NCI_EVT event, UINT16 dataLen, UINT8* data)
+void mayDisableSecureElement (StartupConfig& config)
 {
-    ALOGD ("%s: enter; event=%X; data len=%u", __FUNCTION__, event, dataLen);
-    if (event == NFC_VS_GET_PATCH_VERSION_EVT)
+    unsigned int bitmask = 0;
+    char valueStr [PROPERTY_VALUE_MAX] = {0};
+    int len = property_get ("nfc.disable_secure_element", valueStr, "");
+    if (len > 0)
     {
-        if (dataLen <= NCI_GET_PATCH_VERSION_NVM_OFFSET)
-        {
-            ALOGE("%s: response too short to detect NVM type", __FUNCTION__);
-            HAL_NfcPreInitDone (HAL_NFC_STATUS_FAILED);
-        }
-        else
-        {
-            UINT8 nvramType = *(data + NCI_GET_PATCH_VERSION_NVM_OFFSET);
-            if (nvramType == NCI_SPD_NVM_TYPE_NONE)
-            {
-                //controller did not find EEPROM, so re-initialize
-                ALOGD("%s: no nvram, try again", __FUNCTION__);
-                USERIAL_PowerupDevice (0);
-                HAL_NfcReInit (HalNciCallback);
-            }
-            else
-            {
-                UINT8 max_credits = 1;
-                ALOGD("%s: found nvram", __FUNCTION__, nvramType);
-                if (GetNumValue(MAX_RF_DATA_CREDITS, &max_credits, sizeof(max_credits)) && (max_credits > 0))
-                {
-                    ALOGD("%s : max_credits=%d", __FUNCTION__, max_credits);
-                    HAL_NfcSetMaxRfDataCredits(max_credits);
-                }
-                HAL_NfcPreInitDone (HAL_NFC_STATUS_OK);
-            }
-        }
+        sscanf (valueStr, "%x", &bitmask); //read system property as a hex octet
+        ALOGD ("%s: disable 0x%02X", __FUNCTION__, (UINT8) bitmask);
+        config.disableSecureElement ((UINT8) (bitmask & 0xC0));
     }
-    ALOGD("%s: exit", __FUNCTION__);
 }
-
diff --git a/halimpl/bcm2079x/adaptation/spdhelper.cpp b/halimpl/bcm2079x/adaptation/spdhelper.cpp
index 00e9567..bf6342f 100644
--- a/halimpl/bcm2079x/adaptation/spdhelper.cpp
+++ b/halimpl/bcm2079x/adaptation/spdhelper.cpp
@@ -1,3 +1,4 @@
+#define LOG_TAG "NfcNciHal"
 #include "OverrideLog.h"
 #include "spdhelper.h"
 #include "config.h"
diff --git a/halimpl/bcm2079x/adaptation/userial_linux.c b/halimpl/bcm2079x/adaptation/userial_linux.c
index ebecf95..9110349 100755
--- a/halimpl/bcm2079x/adaptation/userial_linux.c
+++ b/halimpl/bcm2079x/adaptation/userial_linux.c
@@ -41,6 +41,7 @@
 #define default_transport                   "/dev/bcm2079x"
 
 #define NUM_RESET_ATTEMPTS                  5
+#define NFC_WAKE_ASSERTED_ON_POR            UPIO_OFF
 
 #ifndef BTE_APPL_MAX_USERIAL_DEV_NAME
 #define BTE_APPL_MAX_USERIAL_DEV_NAME           (256)
@@ -158,7 +159,7 @@
 
 void userial_close_thread(UINT32 params);
 
-static UINT8 device_name[20];
+static UINT8 device_name[BTE_APPL_MAX_USERIAL_DEV_NAME+1];
 static int   bSerialPortDevice = FALSE;
 static int _timeout = POLL_TIMEOUT;
 static BOOLEAN is_close_thread_is_waiting = FALSE;
@@ -1011,8 +1012,39 @@
                 }
             }
         }
+        if ( bSerialPortDevice )
+        {
+            tcflush(linux_cb.sock, TCIOFLUSH);
+            tcgetattr(linux_cb.sock, &termios);
 
-        USERIAL_PowerupDevice(port);
+            termios.c_cflag &= ~(CSIZE | PARENB);
+            termios.c_cflag = CLOCAL|CREAD|data_bits|stop_bits|parity;
+            if (!parity)
+                termios.c_cflag |= IGNPAR;
+            // termios.c_cflag &= ~CRTSCTS;
+            termios.c_oflag = 0;
+            termios.c_lflag &= ~(ECHO | ECHONL | ICANON | IEXTEN | ISIG);
+            termios.c_iflag &= ~(BRKINT | ICRNL | INLCR | ISTRIP | IXON | IGNBRK | PARMRK | INPCK);
+            termios.c_lflag = 0;
+            termios.c_iflag = 0;
+            cfsetospeed(&termios, baud);
+            cfsetispeed(&termios, baud);
+
+            termios.c_cc[VTIME] = 0;
+            termios.c_cc[VMIN] = 1;
+            tcsetattr(linux_cb.sock, TCSANOW, &termios);
+
+            tcflush(linux_cb.sock, TCIOFLUSH);
+
+#if (USERIAL_USE_IO_BT_WAKE==TRUE)
+            userial_io_init_bt_wake( linux_cb.sock, &linux_cb.bt_wake_state );
+#endif
+            GKI_delay(gPowerOnDelay);
+        }
+        else
+        {
+            USERIAL_PowerupDevice(port);
+        }
     }
 
     linux_cb.ser_cb     = p_cback;
@@ -1158,24 +1190,38 @@
     int i = 0;
     clock_t t;
 
+    /* Ensure we wake up the chip before writing to it */
+    if (!isWake(UPIO_ON))
+        UPIO_Set(UPIO_GENERAL, NFC_HAL_LP_NFC_WAKE_GPIO, UPIO_OFF);
+
+    ALOGD_IF((appl_trace_level>=BT_TRACE_LEVEL_DEBUG), "USERIAL_Write: (%d bytes)", len);
+    pthread_mutex_lock(&close_thread_mutex);
+
     doWriteDelay();
-    ALOGD_IF((appl_trace_level>=BT_TRACE_LEVEL_DEBUG), "USERIAL_Write: (%d bytes) - \n", len);
     t = clock();
-    while (len != 0)
+    while (len != 0 && linux_cb.sock != -1)
     {
         ret = write(linux_cb.sock, p_data + total, len);
         if (ret < 0)
+        {
+            ALOGE("USERIAL_Write len = %d, ret = %d, errno = %d", len, ret, errno);
             break;
+        }
+        else
+        {
+            ALOGD_IF((appl_trace_level>=BT_TRACE_LEVEL_DEBUG), "USERIAL_Write len = %d, ret = %d", len, ret);
+        }
+
         total += ret;
         len -= ret;
     }
     perf_update(&perf_write, clock() - t, total);
 
-    ALOGD_IF((appl_trace_level>=BT_TRACE_LEVEL_DEBUG), "USERIAL_Write len = %d, ret =  %d, errno = %d\n", len, ret, errno);
-
-    /* register a delay for next write
-     */
+    /* register a delay for next write */
     setWriteDelay(total * nfc_write_delay / 1000);
+
+    pthread_mutex_unlock(&close_thread_mutex);
+
     return ((UINT16)total);
 }
 
@@ -1307,6 +1353,23 @@
     return;
 }
 
+
+/*******************************************************************************
+**
+** Function         USERIAL_SetPowerOffDelays
+**
+** Description      Set power off delays used during USERIAL_Close().  The
+**                  values in the conf. file setting override these if set.
+**
+** Returns          None.
+**
+*******************************************************************************/
+UDRV_API void USERIAL_SetPowerOffDelays(int pre_poweroff_delay, int post_poweroff_delay)
+{
+    gPrePowerOffDelay = pre_poweroff_delay;
+    gPostPowerOffDelay = post_poweroff_delay;
+}
+
 /*******************************************************************************
 **
 ** Function           USERIAL_Close
@@ -1368,7 +1431,7 @@
 
     if (linux_cb.sock <= 0)
     {
-        ALOGD( "%s: already closed (%d)\n", __FUNCTION__, linux_cb.sock);        
+        ALOGD( "%s: already closed (%d)\n", __FUNCTION__, linux_cb.sock);
         pthread_mutex_unlock(&close_thread_mutex);
         return;
     }
@@ -1545,6 +1608,8 @@
     unsigned int resetSuccess = 0;
     unsigned int numTries = 0;
     unsigned char spi_negotiation[64];
+    int delay = gPowerOnDelay;
+    ALOGD("%s: enter", __FUNCTION__);
 
     if ( GetNumValue ( NAME_READ_MULTI_PACKETS, &num, sizeof ( num ) ) )
         bcmi2cnfc_read_multi_packets = num;
@@ -1558,11 +1623,11 @@
         }
         if (linux_cb.sock_power_control > 0)
         {
+            current_nfc_wake_state = NFC_WAKE_ASSERTED_ON_POR;
+            ioctl(linux_cb.sock_power_control, BCMNFC_WAKE_CTL, NFC_WAKE_ASSERTED_ON_POR);
             ioctl(linux_cb.sock_power_control, BCMNFC_POWER_CTL, 0);
             GKI_delay(10);
-            ioctl(linux_cb.sock_power_control, BCMNFC_POWER_CTL, 1);
-            current_nfc_wake_state = wake_state();
-            ret = ioctl(linux_cb.sock_power_control, BCMNFC_WAKE_CTL, current_nfc_wake_state);
+            ret = ioctl(linux_cb.sock_power_control, BCMNFC_POWER_CTL, 1);
         }
 
         ret = GetStrValue ( NAME_SPI_NEGOTIATION, (char*)spi_negotiation, sizeof ( spi_negotiation ) );
@@ -1580,12 +1645,15 @@
             0x07 < bcmi2cnfc_client_addr &&
             bcmi2cnfc_client_addr < 0x78)
         {
+            /* Delay needed after turning on chip */
+            GKI_delay(delay);
             ALOGD( "Change client address to %x\n", bcmi2cnfc_client_addr);
-            GKI_delay(gPowerOnDelay);
             ret = ioctl(linux_cb.sock, BCMNFC_CHANGE_ADDR, bcmi2cnfc_client_addr);
             if (!ret) {
                 resetSuccess = 1;
                 linux_cb.client_device_address = bcmi2cnfc_client_addr;
+                /* Delay long enough for address change */
+                delay = 200;
             }
         } else {
             resetSuccess = 1;
@@ -1595,5 +1663,7 @@
     if (!resetSuccess) {
         ALOGE("BCM2079x: failed to initialize NFC controller");
     }
-    GKI_delay(gPowerOnDelay);
+
+    GKI_delay(delay);
+    ALOGD("%s: exit", __FUNCTION__);
 }
diff --git a/halimpl/bcm2079x/gki/common/gki_buffer.c b/halimpl/bcm2079x/gki/common/gki_buffer.c
index 067c7ba..10a816a 100644
--- a/halimpl/bcm2079x/gki/common/gki_buffer.c
+++ b/halimpl/bcm2079x/gki/common/gki_buffer.c
@@ -29,6 +29,8 @@
 
 #if GKI_BUFFER_DEBUG
 #define LOG_TAG "GKI_DEBUG"
+#include <android/log.h>
+#include <cutils/log.h>
 #define LOGD(format, ...)  LogMsg (TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC, format, ## __VA_ARGS__)
 #endif
 /*******************************************************************************
@@ -100,7 +102,9 @@
 {
     FREE_QUEUE_T  *Q;
     tGKI_COM_CB *p_cb = &gki_cb.com;
-    printf("\ngki_alloc_free_queue in, id:%d \n", id);
+    #if GKI_BUFFER_DEBUG
+        ALOGD("\ngki_alloc_free_queue in, id:%d \n", id);
+    #endif
 
     Q = &p_cb->freeq[p_cb->pool_list[id]];
 
@@ -110,14 +114,20 @@
         if(p_mem)
         {
             //re-initialize the queue with allocated memory
-            printf("\ngki_alloc_free_queue calling  gki_init_free_queue, id:%d  size:%d, totol:%d\n", id, Q->size, Q->total);
+            #if GKI_BUFFER_DEBUG
+                ALOGD("\ngki_alloc_free_queue calling  gki_init_free_queue, id:%d  size:%d, totol:%d\n", id, Q->size, Q->total);
+            #endif
             gki_init_free_queue(id, Q->size, Q->total, p_mem);
-            printf("\ngki_alloc_free_queue ret OK, id:%d  size:%d, totol:%d\n", id, Q->size, Q->total);
+            #if GKI_BUFFER_DEBUG
+                ALOGD("\ngki_alloc_free_queue ret OK, id:%d  size:%d, totol:%d\n", id, Q->size, Q->total);
+            #endif
             return TRUE;
         }
         GKI_exception (GKI_ERROR_BUF_SIZE_TOOBIG, "gki_alloc_free_queue: Not enough memory");
     }
-    printf("\ngki_alloc_free_queue out failed, id:%d\n", id);
+    #if GKI_BUFFER_DEBUG
+        ALOGD("\ngki_alloc_free_queue out failed, id:%d\n", id);
+    #endif
     return FALSE;
 }
 #endif
@@ -400,6 +410,14 @@
                 return NULL;
             }
         #endif
+
+            if(Q->p_first == 0)
+            {
+                /* gki_alloc_free_queue() failed to alloc memory */
+                GKI_TRACE_ERROR_0("GKI_getbuf() fail alloc free queue");
+                return NULL;
+            }
+
             p_hdr = Q->p_first;
             Q->p_first = p_hdr->p_next;
 
@@ -504,6 +522,14 @@
         if(Q->p_first == 0 && gki_alloc_free_queue(pool_id) != TRUE)
             return NULL;
 #endif
+
+        if(Q->p_first == 0)
+        {
+            /* gki_alloc_free_queue() failed to alloc memory */
+            GKI_TRACE_ERROR_0("GKI_getpoolbuf() fail alloc free queue");
+            return NULL;
+        }
+
         p_hdr = Q->p_first;
         Q->p_first = p_hdr->p_next;
 
diff --git a/halimpl/bcm2079x/gki/common/gki_time.c b/halimpl/bcm2079x/gki/common/gki_time.c
index 10377f6..e840a36 100644
--- a/halimpl/bcm2079x/gki/common/gki_time.c
+++ b/halimpl/bcm2079x/gki/common/gki_time.c
@@ -444,6 +444,12 @@
     /* Check for OS Task Timers */
     for (task_id = 0; task_id < GKI_MAX_TASKS; task_id++)
     {
+        if (gki_cb.com.OSRdyTbl[task_id] == TASK_DEAD)
+        {
+            // task is shutdown do not try to service timers
+            continue;
+        }
+
         if (gki_cb.com.OSWaitTmr[task_id] > 0) /* If timer is running */
         {
             gki_cb.com.OSWaitTmr[task_id] -= gki_cb.com.OSNumOrigTicks;
diff --git a/halimpl/bcm2079x/gki/ulinux/data_types.h b/halimpl/bcm2079x/gki/ulinux/data_types.h
index 0768494..27ae561 100644
--- a/halimpl/bcm2079x/gki/ulinux/data_types.h
+++ b/halimpl/bcm2079x/gki/ulinux/data_types.h
@@ -34,7 +34,7 @@
 typedef signed   char   INT8;
 typedef signed   short  INT16;
 typedef unsigned char   BOOLEAN;
-
+typedef UINT32          UINTPTR;
 typedef UINT32          TIME_STAMP;
 
 #ifndef TRUE
diff --git a/halimpl/bcm2079x/gki/ulinux/gki_ulinux.c b/halimpl/bcm2079x/gki/ulinux/gki_ulinux.c
index 39eb3e1..6351dcc 100644
--- a/halimpl/bcm2079x/gki/ulinux/gki_ulinux.c
+++ b/halimpl/bcm2079x/gki/ulinux/gki_ulinux.c
@@ -1254,6 +1254,7 @@
 void GKI_sched_lock(void)
 {
     GKI_TRACE_0("GKI_sched_lock");
+    GKI_disable ();
     return;
 }
 
@@ -1274,6 +1275,7 @@
 void GKI_sched_unlock(void)
 {
     GKI_TRACE_0("GKI_sched_unlock");
+    GKI_enable ();
 }
 
 /*******************************************************************************
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_api.c b/halimpl/bcm2079x/hal/hal/nfc_hal_api.c
index 06c970c..742f542 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_api.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_api.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2012 Broadcom Corporation
+ *  Copyright (C) 2012-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,12 +16,14 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  NFC Hardware Abstraction Layer API: Implementation for Broadcom NFC
  *  controllers
  *
  ******************************************************************************/
+#include <string.h>
 #include "gki.h"
 #include "nfc_hal_target.h"
 #include "nfc_hal_api.h"
@@ -47,16 +49,17 @@
 *******************************************************************************/
 void HAL_NfcInitialize (void)
 {
-    NCI_TRACE_API0 ("HAL_NfcInitialize ()");
-
     /* Initialize HAL control block */
     nfc_hal_main_init ();
 
-    /* Initialize OS */
-    GKI_init ();
+   HAL_TRACE_API1 ("HAL_NfcInitialize (): NFC_HAL_TASK id=%i", NFC_HAL_TASK);
 
-    /* Enable interrupts */
+
+#ifndef NFC_HAL_SHARED_GKI
+    /* Initialize GKI (not needed if using shared NFC/HAL GKI resources) */
+    GKI_init ();
     GKI_enable ();
+#endif
 
     /* Create the NCI transport task */
     GKI_create_task ((TASKPTR)nfc_hal_main_task,
@@ -65,8 +68,10 @@
                      (UINT16 *) ((UINT8 *)nfc_hal_task_stack + NFC_HAL_TASK_STACK_SIZE),
                      sizeof(nfc_hal_task_stack), NULL, NULL);
 
-    /* Start tasks */
+#ifndef NFC_HAL_SHARED_GKI
+    /* Start GKI scheduler (not needed if using shared NFC/HAL GKI resources) */
     GKI_run (0);
+#endif
 }
 
 /*******************************************************************************
@@ -80,7 +85,7 @@
 *******************************************************************************/
 void HAL_NfcTerminate(void)
 {
-    NCI_TRACE_API0 ("HAL_NfcTerminate ()");
+    HAL_TRACE_API0 ("HAL_NfcTerminate ()");
 }
 
 
@@ -98,7 +103,7 @@
 *******************************************************************************/
 void HAL_NfcOpen (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK *p_data_cback)
 {
-    NCI_TRACE_API0 ("HAL_NfcOpen ()");
+    HAL_TRACE_API0 ("HAL_NfcOpen ()");
 
     /* Only handle if HAL is not opened (stack cback is NULL) */
     if (p_hal_cback)
@@ -124,7 +129,7 @@
 *******************************************************************************/
 void HAL_NfcClose (void)
 {
-    NCI_TRACE_API0 ("HAL_NfcClose ()");
+    HAL_TRACE_API0 ("HAL_NfcClose ()");
 
     /* Only handle if HAL is opened (stack cback is not-NULL) */
     if (nfc_hal_cb.p_stack_cback)
@@ -151,7 +156,7 @@
     NFC_HDR *p_msg;
     UINT16  size;
 
-    NCI_TRACE_API0 ("HAL_NfcCoreInitialized ()");
+    HAL_TRACE_API0 ("HAL_NfcCoreInitialized ()");
 
     /* NCI payload len + NCI header size */
     size = p_core_init_rsp_params[2] + NCI_MSG_HDR_SIZE;
@@ -186,11 +191,11 @@
     NFC_HDR *p_msg;
     UINT8 mt;
 
-    NCI_TRACE_API0 ("HAL_NfcWrite ()");
+    HAL_TRACE_API0 ("HAL_NfcWrite ()");
 
     if (data_len > (NCI_MAX_CTRL_SIZE + NCI_MSG_HDR_SIZE))
     {
-        NCI_TRACE_ERROR1 ("HAL_NfcWrite (): too many bytes (%d)", data_len);
+        HAL_TRACE_ERROR1 ("HAL_NfcWrite (): too many bytes (%d)", data_len);
         return;
     }
 
@@ -228,7 +233,7 @@
 {
     BOOLEAN status = FALSE;
 
-    NCI_TRACE_API1 ("HAL_NfcPreDiscover status:%d", status);
+    HAL_TRACE_API1 ("HAL_NfcPreDiscover status:%d", status);
     return status;
 }
 
@@ -252,7 +257,7 @@
 void HAL_NfcControlGranted (void)
 {
     NFC_HDR *p_msg;
-    NCI_TRACE_API0 ("HAL_NfcControlGranted ()");
+    HAL_TRACE_API0 ("HAL_NfcControlGranted ()");
 
     /* Send message to NFC_HAL_TASK */
     if ((p_msg = (NFC_HDR *)GKI_getpoolbuf (NFC_HAL_NCI_POOL_ID)) != NULL)
@@ -275,7 +280,7 @@
 *******************************************************************************/
 void HAL_NfcPowerCycle (void)
 {
-    NCI_TRACE_API0 ("HAL_NfcPowerCycle ()");
+    HAL_TRACE_API0 ("HAL_NfcPowerCycle ()");
 
     /* Only handle if HAL is opened (stack cback is not-NULL) */
     if (nfc_hal_cb.p_stack_cback)
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_brcm.c b/halimpl/bcm2079x/hal/hal/nfc_hal_brcm.c
index d52119a..77fdc25 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_brcm.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_brcm.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains function of the NFC unit to receive/process NFC VS
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_dm.c b/halimpl/bcm2079x/hal/hal/nfc_hal_dm.c
index c4d4a3f..2b4aba6 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_dm.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_dm.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2012 Broadcom Corporation
+ *  Copyright (C) 2012-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,11 +16,13 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  Vendor-specific handler for DM events
  *
  ******************************************************************************/
+#include <string.h>
 #include "nfc_hal_int.h"
 #include "nfc_hal_post_reset.h"
 #include "userial.h"
@@ -53,14 +55,6 @@
 };
 #define NCI_SET_FWFSM_OFFSET_ENABLE      3
 
-const UINT8 nfc_hal_dm_core_reset_cmd[NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_RESET] =
-{
-    NCI_MTS_CMD|NCI_GID_CORE,
-    NCI_MSG_CORE_RESET,
-    NCI_CORE_PARAM_SIZE_RESET,
-    NCI_RESET_TYPE_RESET_CFG
-};
-
 #define NCI_PROP_PARAM_SIZE_XTAL_INDEX      3       /* length of parameters in XTAL_INDEX CMD */
 
 const UINT8 nfc_hal_dm_get_build_info_cmd[NCI_MSG_HDR_SIZE] =
@@ -77,7 +71,19 @@
     NCI_MSG_GET_PATCH_VERSION,
     0x00
 };
-#define NCI_PATCH_INFO_OFFSET_NVMTYPE  35  /* NVM Type offset in patch info RSP */
+#define NCI_PATCH_INFO_VERSION_LEN  16  /* Length of patch version string in PATCH_INFO */
+
+/* Version string for BCM20791B3 */
+const UINT8 NFC_HAL_DM_BCM20791B3_STR[]   = "20791B3";
+#define NFC_HAL_DM_BCM20791B3_STR_LEN     (sizeof (NFC_HAL_DM_BCM20791B3_STR)-1)
+
+/* Version string for BCM20791B4 */
+const UINT8 NFC_HAL_DM_BCM20791B4_STR[]   = "20791B4";
+#define NFC_HAL_DM_BCM20791B4_STR_LEN     (sizeof (NFC_HAL_DM_BCM20791B4_STR)-1)
+
+/* Version string for BCM43341B0 */
+const UINT8 NFC_HAL_DM_BCM43341B0_STR[]   = "43341B0";
+#define NFC_HAL_DM_BCM43341B0_STR_LEN     (sizeof (NFC_HAL_DM_BCM43341B0_STR)-1)
 
 /*****************************************************************************
 ** Extern function prototypes
@@ -86,6 +92,7 @@
 extern UINT8 *p_nfc_hal_dm_pll_325_cfg;
 extern UINT8 *p_nfc_hal_dm_start_up_cfg;
 extern UINT8 *p_nfc_hal_dm_start_up_vsc_cfg;
+extern tNFC_HAL_CFG *p_nfc_hal_cfg;
 
 /*****************************************************************************
 ** Local function prototypes
@@ -159,7 +166,7 @@
         }
         else
         {
-            NCI_TRACE_ERROR0 ("nfc_hal_dm_set_config ():Bad TLV");
+            HAL_TRACE_ERROR0 ("nfc_hal_dm_set_config ():Bad TLV");
         }
 
         GKI_freebuf (p_buff);
@@ -170,38 +177,6 @@
 
 /*******************************************************************************
 **
-** Function         nfc_hal_dm_get_xtal_index
-**
-** Description      Convert xtal frequency to index
-**
-** Returns          xtal index
-**
-*******************************************************************************/
-static tNFC_HAL_XTAL_INDEX nfc_hal_dm_get_xtal_index (UINT16 xtal_freq)
-{
-    tNFC_HAL_XTAL_INDEX xtal_index;
-
-    switch (xtal_freq)
-    {
-    case  9600: xtal_index = NFC_HAL_XTAL_INDEX_9600;  break;
-    case 13000: xtal_index = NFC_HAL_XTAL_INDEX_13000; break;
-    case 16200: xtal_index = NFC_HAL_XTAL_INDEX_16200; break;
-    case 19200: xtal_index = NFC_HAL_XTAL_INDEX_19200; break;
-    case 24000: xtal_index = NFC_HAL_XTAL_INDEX_24000; break;
-    case 26000: xtal_index = NFC_HAL_XTAL_INDEX_26000; break;
-    case 38400: xtal_index = NFC_HAL_XTAL_INDEX_38400; break;
-    case 52000: xtal_index = NFC_HAL_XTAL_INDEX_52000; break;
-    case 37400: xtal_index = NFC_HAL_XTAL_INDEX_37400; break;
-    default :   xtal_index = NFC_HAL_XTAL_INDEX_MAX;
-                NCI_TRACE_DEBUG1 ("nfc_hal_dm_get_xtal_index ():No matched index for %d", xtal_freq);
-                break;
-    }
-
-    return xtal_index;
-}
-
-/*******************************************************************************
-**
 ** Function         nfc_hal_dm_set_fw_fsm
 **
 ** Description      Enable or disable FW FSM
@@ -254,7 +229,7 @@
     UINT8  *p, *p_end;
     UINT16 len;
 
-    NCI_TRACE_DEBUG0 ("nfc_hal_dm_send_startup_vsc ()");
+    HAL_TRACE_DEBUG0 ("nfc_hal_dm_send_startup_vsc ()");
 
     /* VSC must have NCI header at least */
     if (nfc_hal_cb.dev_cb.next_startup_vsc + NCI_MSG_HDR_SIZE - 1 <= *p_nfc_hal_dm_start_up_vsc_cfg)
@@ -277,7 +252,7 @@
         }
     }
 
-    NCI_TRACE_ERROR0 ("nfc_hal_dm_send_startup_vsc (): Bad start-up VSC");
+    HAL_TRACE_ERROR0 ("nfc_hal_dm_send_startup_vsc (): Bad start-up VSC");
 
     NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_IDLE);
     nfc_hal_cb.p_stack_cback (HAL_NFC_POST_INIT_CPLT_EVT, HAL_NFC_STATUS_FAILED);
@@ -294,10 +269,7 @@
 *******************************************************************************/
 void nfc_hal_dm_config_nfcc (void)
 {
-    UINT8   *p;
-    UINT8   xtal_index;
-
-    NCI_TRACE_DEBUG1 ("nfc_hal_dm_config_nfcc (): next_dm_config = %d", nfc_hal_cb.dev_cb.next_dm_config);
+    HAL_TRACE_DEBUG1 ("nfc_hal_dm_config_nfcc (): next_dm_config = %d", nfc_hal_cb.dev_cb.next_dm_config);
 
     if ((p_nfc_hal_dm_lptd_cfg[0]) && (nfc_hal_cb.dev_cb.next_dm_config <= NFC_HAL_DM_CONFIG_LPTD))
     {
@@ -319,23 +291,19 @@
 
     if ((p_nfc_hal_dm_pll_325_cfg) && (nfc_hal_cb.dev_cb.next_dm_config <= NFC_HAL_DM_CONFIG_PLL_325))
     {
-        xtal_index = nfc_hal_dm_get_xtal_index (nfc_post_reset_cb.dev_init_config.xtal_freq);
-        if (xtal_index < NFC_HAL_XTAL_INDEX_MAX)
+        nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_START_UP;
+
+        if (nfc_hal_dm_set_config (NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN,
+                                   p_nfc_hal_dm_pll_325_cfg,
+                                   nfc_hal_dm_config_nfcc_cback) == HAL_NFC_STATUS_OK)
         {
-            nfc_hal_cb.dev_cb.next_dm_config = NFC_HAL_DM_CONFIG_START_UP;
-            p = p_nfc_hal_dm_pll_325_cfg + (xtal_index * NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN);
-            if (nfc_hal_dm_set_config (NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN,
-                                       p,
-                                       nfc_hal_dm_config_nfcc_cback) == HAL_NFC_STATUS_OK)
-            {
-                return;
-            }
-            else
-            {
-                NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_IDLE);
-                nfc_hal_cb.p_stack_cback (HAL_NFC_POST_INIT_CPLT_EVT, HAL_NFC_STATUS_FAILED);
-                return;
-            }
+            return;
+        }
+        else
+        {
+            NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_IDLE);
+            nfc_hal_cb.p_stack_cback (HAL_NFC_POST_INIT_CPLT_EVT, HAL_NFC_STATUS_FAILED);
+            return;
         }
     }
 
@@ -399,6 +367,35 @@
 
 /*******************************************************************************
 **
+** Function:    nfc_hal_dm_get_xtal_index
+**
+** Description: Return Xtal index and frequency
+**
+** Returns:     tNFC_HAL_XTAL_INDEX
+**
+*******************************************************************************/
+tNFC_HAL_XTAL_INDEX nfc_hal_dm_get_xtal_index (UINT32 brcm_hw_id, UINT16 *p_xtal_freq)
+{
+    UINT8 xx;
+
+    HAL_TRACE_DEBUG1("nfc_hal_dm_get_xtal_index() brcm_hw_id:0x%x", brcm_hw_id);
+
+    for (xx = 0; xx < nfc_post_reset_cb.dev_init_config.num_xtal_cfg; xx++)
+    {
+        if (brcm_hw_id == nfc_post_reset_cb.dev_init_config.xtal_cfg[xx].brcm_hw_id)
+        {
+            *p_xtal_freq = nfc_post_reset_cb.dev_init_config.xtal_cfg[xx].xtal_freq;
+            return (nfc_post_reset_cb.dev_init_config.xtal_cfg[xx].xtal_index);
+        }
+    }
+
+    /* if not found */
+    *p_xtal_freq = 0;
+    return (NFC_HAL_XTAL_INDEX_MAX);
+}
+
+/*******************************************************************************
+**
 ** Function         nfc_hal_dm_set_xtal_freq_index
 **
 ** Description      Set crystal frequency index
@@ -411,37 +408,18 @@
     UINT8 nci_brcm_xtal_index_cmd[NCI_MSG_HDR_SIZE + NCI_PROP_PARAM_SIZE_XTAL_INDEX];
     UINT8 *p;
     tNFC_HAL_XTAL_INDEX xtal_index;
+    UINT16              xtal_freq;
 
-    NCI_TRACE_DEBUG1 ("nfc_hal_dm_set_xtal_freq_index (): xtal_freq = %d", nfc_post_reset_cb.dev_init_config.xtal_freq);
+    HAL_TRACE_DEBUG1 ("nfc_hal_dm_set_xtal_freq_index (): brcm_hw_id = 0x%x", nfc_hal_cb.dev_cb.brcm_hw_id);
 
-    xtal_index = nfc_hal_dm_get_xtal_index (nfc_post_reset_cb.dev_init_config.xtal_freq);
-
-    switch (xtal_index)
-    {
-    case NFC_HAL_XTAL_INDEX_9600:
-    case NFC_HAL_XTAL_INDEX_13000:
-    case NFC_HAL_XTAL_INDEX_19200:
-    case NFC_HAL_XTAL_INDEX_26000:
-    case NFC_HAL_XTAL_INDEX_38400:
-    case NFC_HAL_XTAL_INDEX_52000:
-
-        {
-            /* no need to set xtal index for these frequency */
-            NCI_TRACE_DEBUG0 ("nfc_hal_dm_set_xtal_freq_index (): no need to set xtal index");
-
-            nfc_post_reset_cb.dev_init_config.flags &= ~NFC_HAL_DEV_INIT_FLAGS_SET_XTAL_FREQ;
-            nfc_hal_dm_send_reset_cmd ();
-            return;
-        }
-        break;
-    }
+    xtal_index = nfc_hal_dm_get_xtal_index (nfc_hal_cb.dev_cb.brcm_hw_id, &xtal_freq);
 
     p = nci_brcm_xtal_index_cmd;
     UINT8_TO_STREAM  (p, (NCI_MTS_CMD|NCI_GID_PROP));
     UINT8_TO_STREAM  (p, NCI_MSG_GET_XTAL_INDEX_FROM_DH);
     UINT8_TO_STREAM  (p, NCI_PROP_PARAM_SIZE_XTAL_INDEX);
     UINT8_TO_STREAM  (p, xtal_index);
-    UINT16_TO_STREAM (p, nfc_post_reset_cb.dev_init_config.xtal_freq);
+    UINT16_TO_STREAM (p, xtal_freq);
 
     NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_XTAL_SET);
 
@@ -450,19 +428,19 @@
 
 /*******************************************************************************
 **
-** Function         nfc_hal_dm_send_reset_cmd
+** Function         nfc_hal_dm_send_get_build_info_cmd
 **
-** Description      Send CORE RESET CMD
+** Description      Send NCI_MSG_GET_BUILD_INFO CMD
 **
 ** Returns          void
 **
 *******************************************************************************/
-void nfc_hal_dm_send_reset_cmd (void)
+void nfc_hal_dm_send_get_build_info_cmd (void)
 {
-    /* Proceed with start up sequence: send CORE_RESET_CMD */
-    NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_RESET);
+    NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_BUILD_INFO);
 
-    nfc_hal_dm_send_nci_cmd (nfc_hal_dm_core_reset_cmd, NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_RESET, NULL);
+    /* get build information to find out HW */
+    nfc_hal_dm_send_nci_cmd (nfc_hal_dm_get_build_info_cmd, NCI_MSG_HDR_SIZE, NULL);
 }
 
 /*******************************************************************************
@@ -480,9 +458,13 @@
     UINT8 reset_reason, reset_type;
     UINT8 mt, pbf, gid, op_code;
     UINT8 *p_old, old_gid, old_oid, old_mt;
+    UINT8 u8;
     tNFC_HAL_NCI_CBACK *p_cback = NULL;
+    UINT8   chipverlen;
+    UINT8   chipverstr[NCI_SPD_HEADER_CHIPVER_LEN];
+    UINT16  xtal_freq;
 
-    NCI_TRACE_DEBUG1 ("nfc_hal_dm_proc_msg_during_init(): init state:%d", nfc_hal_cb.dev_cb.initializing_state);
+    HAL_TRACE_DEBUG1 ("nfc_hal_dm_proc_msg_during_init(): init state:%d", nfc_hal_cb.dev_cb.initializing_state);
 
     p = (UINT8 *) (p_msg + 1) + p_msg->offset;
 
@@ -513,29 +495,29 @@
     {
         if (op_code == NCI_MSG_CORE_RESET)
         {
-            if (mt == NCI_MT_RSP)
+            if (mt == NCI_MT_NTF)
             {
-                if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_RE_INIT)
+                if (  (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_NFCC_ENABLE)
+                    ||(nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_POST_XTAL_SET)  )
                 {
-                    NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_APP_COMPLETE);
-                    nfc_hal_dm_send_nci_cmd (nfc_hal_dm_get_patch_version_cmd, NCI_MSG_HDR_SIZE, nfc_hal_cb.p_reinit_cback);
+                    /*
+                    ** Core reset ntf in the following cases;
+                    ** 1) after power up (raising REG_PU)
+                    ** 2) after setting xtal index
+                    ** Start pre-initializing NFCC
+                    */
+                    nfc_hal_main_stop_quick_timer (&nfc_hal_cb.timer);
+                    nfc_hal_dm_pre_init_nfcc ();
                 }
                 else
                 {
-                    NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_BUILD_INFO);
-
-                    /* get build information to find out HW */
-                    nfc_hal_dm_send_nci_cmd (nfc_hal_dm_get_build_info_cmd, NCI_MSG_HDR_SIZE, NULL);
+                    /* Core reset ntf after post-patch download, Call reset notification callback */
+                    p++;                                /* Skip over param len */
+                    STREAM_TO_UINT8 (reset_reason, p);
+                    STREAM_TO_UINT8 (reset_type, p);
+                    nfc_hal_prm_spd_reset_ntf (reset_reason, reset_type);
                 }
             }
-            else
-            {
-                /* Call reset notification callback */
-                p++;                                /* Skip over param len */
-                STREAM_TO_UINT8 (reset_reason, p);
-                STREAM_TO_UINT8 (reset_type, p);
-                nfc_hal_prm_spd_reset_ntf (reset_reason, reset_type);
-            }
         }
         else if (p_cback)
         {
@@ -555,11 +537,11 @@
         {
             if (op_code == (NCI_RSP_BIT|NCI_MSG_GET_XTAL_INDEX_FROM_DH))
             {
-                /* wait for crystal setting in NFCC */
-                GKI_delay (100);
+                /* start timer in case that NFCC doesn't send RESET NTF after loading patch from NVM */
+                NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_POST_XTAL_SET);
 
-                /* Crytal frequency configured. Proceed with start up sequence: send CORE_RESET_CMD */
-                nfc_hal_dm_send_reset_cmd ();
+                nfc_hal_main_start_quick_timer (&nfc_hal_cb.timer, NFC_HAL_TTYPE_NFCC_ENABLE,
+                                                ((p_nfc_hal_cfg->nfc_hal_post_xtal_timeout)*QUICK_TIMER_TICKS_PER_SEC)/1000);
             }
         }
         else if (  (op_code == NFC_VS_GET_BUILD_INFO_EVT)
@@ -569,6 +551,41 @@
 
             STREAM_TO_UINT32 (nfc_hal_cb.dev_cb.brcm_hw_id, p);
 
+            STREAM_TO_UINT8 (chipverlen, p);
+            memset (chipverstr, 0, NCI_SPD_HEADER_CHIPVER_LEN);
+
+            STREAM_TO_ARRAY (chipverstr, p, chipverlen);
+
+            if ((chipverlen == NFC_HAL_DM_BCM20791B3_STR_LEN) && (memcmp (NFC_HAL_DM_BCM20791B3_STR, chipverstr, NFC_HAL_DM_BCM20791B3_STR_LEN) == 0))
+            {
+                /* BCM2079B3 FW - eSE restarted for patch download */
+                nfc_hal_cb.hci_cb.hci_fw_workaround         = TRUE;
+                nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd = TRUE;
+            }
+            else if (  ((chipverlen == NFC_HAL_DM_BCM20791B4_STR_LEN) && (memcmp (NFC_HAL_DM_BCM20791B4_STR, chipverstr, NFC_HAL_DM_BCM20791B4_STR_LEN) == 0))
+                     ||((chipverlen == NFC_HAL_DM_BCM43341B0_STR_LEN) && (memcmp (NFC_HAL_DM_BCM43341B0_STR, chipverstr, NFC_HAL_DM_BCM43341B0_STR_LEN) == 0))  )
+            {
+                /* BCM43341B0/BCM2079B4 FW - eSE restarted for patch download */
+                nfc_hal_cb.hci_cb.hci_fw_workaround         = TRUE;
+                nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd = FALSE;
+            }
+            else
+            {
+                /* BCM2079B5 FW - eSE not be restarted for patch download from UICC */
+                nfc_hal_cb.hci_cb.hci_fw_workaround         = FALSE;
+                nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd = FALSE;
+            }
+
+            /* if NFCC needs to set Xtal frequency before getting patch version */
+            if (nfc_hal_dm_get_xtal_index (nfc_hal_cb.dev_cb.brcm_hw_id, &xtal_freq) < NFC_HAL_XTAL_INDEX_MAX)
+            {
+                {
+                    /* set Xtal index before getting patch version */
+                    nfc_hal_dm_set_xtal_freq_index ();
+                    return;
+                }
+            }
+
             NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_PATCH_INFO);
 
             nfc_hal_dm_send_nci_cmd (nfc_hal_dm_get_patch_version_cmd, NCI_MSG_HDR_SIZE, NULL);
@@ -576,12 +593,66 @@
         else if (  (op_code == NFC_VS_GET_PATCH_VERSION_EVT)
                  &&(nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_PATCH_INFO)  )
         {
-            p += NCI_PATCH_INFO_OFFSET_NVMTYPE;
+            /* Store NVM info to control block */
 
-            NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_APP_COMPLETE);
+            /* Skip over rsp len */
+            p++;
+
+            /* Get project id */
+            STREAM_TO_UINT16 (nfc_hal_cb.nvm_cb.project_id, p);
+
+            /* RFU */
+            p++;
+
+            /* Get chip version string */
+            STREAM_TO_UINT8 (u8, p);
+            p += NCI_PATCH_INFO_VERSION_LEN;
+
+            /* Get major/minor version */
+            STREAM_TO_UINT16 (nfc_hal_cb.nvm_cb.ver_major, p);
+            STREAM_TO_UINT16 (nfc_hal_cb.nvm_cb.ver_minor, p);
+
+            /* Skip over max_size and patch_max_size */
+            p += 4;
+
+            /* Get current lpm patch size */
+            STREAM_TO_UINT16 (nfc_hal_cb.nvm_cb.lpm_size, p);
+            STREAM_TO_UINT16 (nfc_hal_cb.nvm_cb.fpm_size, p);
+
+            /* clear all flags which may be set during previous initialization */
+            nfc_hal_cb.nvm_cb.flags = 0;
+
+            /* Set patch present flag */
+            if ((nfc_hal_cb.nvm_cb.fpm_size) || (nfc_hal_cb.nvm_cb.lpm_size))
+                nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_PATCH_PRESENT;
+
+            /* LPMPatchCodeHasBadCRC (if not bad crc, then indicate LPM patch is present in nvm) */
+            STREAM_TO_UINT8 (u8, p);
+            if (u8)
+            {
+                /* LPM patch in NVM fails CRC check */
+                nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_LPM_BAD;
+            }
+
+
+            /* FPMPatchCodeHasBadCRC (if not bad crc, then indicate LPM patch is present in nvm) */
+            STREAM_TO_UINT8 (u8, p);
+            if (u8)
+            {
+                /* FPM patch in NVM fails CRC check */
+                nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_FPM_BAD;
+            }
+
+            /* Check if downloading patch to RAM only (no NVM) */
+            STREAM_TO_UINT8 (nfc_hal_cb.nvm_cb.nvm_type, p);
+            if (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_NONE)
+            {
+                nfc_hal_cb.nvm_cb.flags |= NFC_HAL_NVM_FLAGS_NO_NVM;
+            }
 
             /* let platform update baudrate or download patch */
-            nfc_hal_post_reset_init (nfc_hal_cb.dev_cb.brcm_hw_id, *p);
+            NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_APP_COMPLETE);
+            nfc_hal_post_reset_init (nfc_hal_cb.dev_cb.brcm_hw_id, nfc_hal_cb.nvm_cb.nvm_type);
         }
         else if (p_cback)
         {
@@ -591,7 +662,7 @@
         }
         else if (op_code == NFC_VS_SEC_PATCH_AUTH_EVT)
         {
-            NCI_TRACE_DEBUG0 ("signature!!");
+            HAL_TRACE_DEBUG0 ("signature!!");
             nfc_hal_prm_nci_command_complete_cback ((tNFC_HAL_NCI_EVT) (op_code),
                                                     p_msg->len,
                                                     (UINT8 *) (p_msg + 1) + p_msg->offset);
@@ -613,11 +684,11 @@
     NFC_HDR *p_buf;
     UINT8  *ps;
 
-    NCI_TRACE_DEBUG1 ("nfc_hal_dm_send_nci_cmd (): nci_wait_rsp = 0x%x", nfc_hal_cb.ncit_cb.nci_wait_rsp);
+    HAL_TRACE_DEBUG1 ("nfc_hal_dm_send_nci_cmd (): nci_wait_rsp = 0x%x", nfc_hal_cb.ncit_cb.nci_wait_rsp);
 
     if (nfc_hal_cb.ncit_cb.nci_wait_rsp != NFC_HAL_WAIT_RSP_NONE)
     {
-        NCI_TRACE_ERROR0 ("nfc_hal_dm_send_nci_cmd(): no command window");
+        HAL_TRACE_ERROR0 ("nfc_hal_dm_send_nci_cmd(): no command window");
         return;
     }
 
@@ -714,11 +785,11 @@
 {
     NFC_HDR *p_buf;
 
-    NCI_TRACE_DEBUG1 ("nfc_hal_dm_send_bt_cmd (): nci_wait_rsp = 0x%x", nfc_hal_cb.ncit_cb.nci_wait_rsp);
+    HAL_TRACE_DEBUG1 ("nfc_hal_dm_send_bt_cmd (): nci_wait_rsp = 0x%x", nfc_hal_cb.ncit_cb.nci_wait_rsp);
 
     if (nfc_hal_cb.ncit_cb.nci_wait_rsp != NFC_HAL_WAIT_RSP_NONE)
     {
-        NCI_TRACE_ERROR0 ("nfc_hal_dm_send_bt_cmd(): no command window");
+        HAL_TRACE_ERROR0 ("nfc_hal_dm_send_bt_cmd(): no command window");
         return;
     }
 
@@ -757,7 +828,7 @@
 *******************************************************************************/
 void nfc_hal_dm_set_nfc_wake (UINT8 cmd)
 {
-    NCI_TRACE_DEBUG1 ("nfc_hal_dm_set_nfc_wake () %s",
+    HAL_TRACE_DEBUG1 ("nfc_hal_dm_set_nfc_wake () %s",
                       (cmd == NFC_HAL_ASSERT_NFC_WAKE ? "ASSERT" : "DEASSERT"));
 
     /*
@@ -790,7 +861,7 @@
 {
     BOOLEAN send_to_nfcc = FALSE;
 
-    NCI_TRACE_DEBUG1 ("nfc_hal_dm_power_mode_execute () event = %d", event);
+    HAL_TRACE_DEBUG1 ("nfc_hal_dm_power_mode_execute () event = %d", event);
 
     if (nfc_hal_cb.dev_cb.power_mode == NFC_HAL_POWER_MODE_FULL)
     {
@@ -834,7 +905,7 @@
 *******************************************************************************/
 static void nci_brcm_lp_timeout_cback (void *p_tle)
 {
-    NCI_TRACE_DEBUG0 ("nci_brcm_lp_timeout_cback ()");
+    HAL_TRACE_DEBUG0 ("nci_brcm_lp_timeout_cback ()");
 
     nfc_hal_dm_power_mode_execute (NFC_HAL_LP_TIMEOUT_EVT);
 }
@@ -851,16 +922,22 @@
 *******************************************************************************/
 void nfc_hal_dm_pre_init_nfcc (void)
 {
-    NCI_TRACE_DEBUG0 ("nfc_hal_dm_pre_init_nfcc ()");
+    HAL_TRACE_DEBUG0 ("nfc_hal_dm_pre_init_nfcc ()");
 
-    if (nfc_post_reset_cb.dev_init_config.flags & NFC_HAL_DEV_INIT_FLAGS_SET_XTAL_FREQ)
+    /* if it was waiting for core reset notification after raising REG_PU */
+    if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_NFCC_ENABLE)
     {
-        nfc_hal_dm_set_xtal_freq_index ();
+        nfc_hal_dm_send_get_build_info_cmd ();
     }
-    else
+    /* if it was waiting for core reset notification after setting Xtal */
+    else if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_POST_XTAL_SET)
     {
-        /* Send RESET CMD if application registered callback for device initialization */
-        nfc_hal_dm_send_reset_cmd ();
+        {
+            /* Core reset ntf after xtal setting indicating NFCC loaded patch from NVM */
+            NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_PATCH_INFO);
+
+            nfc_hal_dm_send_nci_cmd (nfc_hal_dm_get_patch_version_cmd, NCI_MSG_HDR_SIZE, NULL);
+        }
     }
 }
 
@@ -876,7 +953,7 @@
 *******************************************************************************/
 void nfc_hal_dm_shutting_down_nfcc (void)
 {
-    NCI_TRACE_DEBUG0 ("nfc_hal_dm_shutting_down_nfcc ()");
+    HAL_TRACE_DEBUG0 ("nfc_hal_dm_shutting_down_nfcc ()");
 
     nfc_hal_cb.dev_cb.initializing_state = NFC_HAL_INIT_STATE_CLOSING;
 
@@ -888,7 +965,7 @@
     }
 
     nfc_hal_cb.ncit_cb.nci_wait_rsp = NFC_HAL_WAIT_RSP_NONE;
-    nfc_hal_cb.hci_cb.b_check_clear_all_pipe_cmd = FALSE;
+    nfc_hal_cb.hci_cb.hcp_conn_id = 0;
 
     nfc_hal_cb.dev_cb.power_mode  = NFC_HAL_POWER_MODE_FULL;
     nfc_hal_cb.dev_cb.snooze_mode = NFC_HAL_LP_SNOOZE_MODE_NONE;
@@ -898,6 +975,7 @@
     nfc_hal_main_stop_quick_timer (&nfc_hal_cb.dev_cb.lp_timer);
     nfc_hal_main_stop_quick_timer (&nfc_hal_cb.prm.timer);
     nfc_hal_main_stop_quick_timer (&nfc_hal_cb.hci_cb.hci_timer);
+    nfc_hal_main_stop_quick_timer (&nfc_hal_cb.timer);
 }
 
 /*******************************************************************************
@@ -912,7 +990,7 @@
 *******************************************************************************/
 void nfc_hal_dm_init (void)
 {
-    NCI_TRACE_DEBUG0 ("nfc_hal_dm_init ()");
+    HAL_TRACE_DEBUG0 ("nfc_hal_dm_init ()");
 
     nfc_hal_cb.dev_cb.lp_timer.p_cback = nci_brcm_lp_timeout_cback;
 
@@ -920,6 +998,9 @@
 
     nfc_hal_cb.hci_cb.hci_timer.p_cback = nfc_hal_hci_timeout_cback;
 
+    nfc_post_reset_cb.spd_nvm_detection_cur_count = 0;
+    nfc_post_reset_cb.spd_skip_on_power_cycle     = FALSE;
+
 }
 
 /*******************************************************************************
@@ -933,7 +1014,7 @@
 *******************************************************************************/
 void HAL_NfcPreInitDone (tHAL_NFC_STATUS status)
 {
-    NCI_TRACE_DEBUG1 ("HAL_NfcPreInitDone () status=%d", status);
+    HAL_TRACE_DEBUG1 ("HAL_NfcPreInitDone () status=%d", status);
 
     if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_APP_COMPLETE)
     {
@@ -947,11 +1028,8 @@
 **
 ** Function         HAL_NfcReInit
 **
-** Description      This function is called to send an RESET and GET_PATCH_VERSION
-**                  command to NFCC.
-**
-**                  p_cback         - The callback function to receive the command
-**                                    status
+** Description      This function is called to restart initialization after REG_PU
+**                  toggled because of failure to detect NVM type or download patchram.
 **
 ** Note             This function should be called only during the HAL init process
 **
@@ -959,17 +1037,22 @@
 **                  HAL_NFC_STATUS_FAILED otherwise
 **
 *******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcReInit (tNFC_HAL_NCI_CBACK *p_cback)
+tHAL_NFC_STATUS HAL_NfcReInit (void)
 {
     tHAL_NFC_STATUS status = HAL_NFC_STATUS_FAILED;
-    NCI_TRACE_DEBUG1 ("HAL_NfcReInit () init st=0x%x", nfc_hal_cb.dev_cb.initializing_state);
+
+    HAL_TRACE_DEBUG1 ("HAL_NfcReInit () init st=0x%x", nfc_hal_cb.dev_cb.initializing_state);
     if (nfc_hal_cb.dev_cb.initializing_state == NFC_HAL_INIT_STATE_W4_APP_COMPLETE)
     {
-        /* Proceed with start up sequence: send CORE_RESET_CMD */
-        NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_RE_INIT);
-        nfc_hal_cb.p_reinit_cback = p_cback;
+        {
+            /* Wait for NFCC to enable - Core reset notification */
+            NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_NFCC_ENABLE);
 
-        nfc_hal_dm_send_nci_cmd (nfc_hal_dm_core_reset_cmd, NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_RESET, NULL);
+            /* NFCC Enable timeout */
+            nfc_hal_main_start_quick_timer (&nfc_hal_cb.timer, NFC_HAL_TTYPE_NFCC_ENABLE,
+                                            ((p_nfc_hal_cfg->nfc_hal_nfcc_enable_timeout)*QUICK_TIMER_TICKS_PER_SEC)/1000);
+        }
+
         status = HAL_NFC_STATUS_OK;
     }
     return status;
@@ -1056,7 +1139,7 @@
     UINT8 cmd[NFC_HAL_BT_HCI_CMD_HDR_SIZE + HCI_BRCM_WRITE_SLEEP_MODE_LENGTH];
     UINT8 *p;
 
-    NCI_TRACE_API1 ("HAL_NfcSetSnoozeMode (): snooze_mode = %d", snooze_mode);
+    HAL_TRACE_API1 ("HAL_NfcSetSnoozeMode (): snooze_mode = %d", snooze_mode);
 
     nfc_hal_cb.dev_cb.new_snooze_mode      = snooze_mode;
     nfc_hal_cb.dev_cb.nfc_wake_active_mode = nfc_wake_active_mode;
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_dm_cfg.c b/halimpl/bcm2079x/hal/hal/nfc_hal_dm_cfg.c
index f16aae7..68ee089 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_dm_cfg.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_dm_cfg.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2011-2012 Broadcom Corporation
+ *  Copyright (C) 2011-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains compile-time configurable constants for BRCM HAL
@@ -28,7 +29,7 @@
 
 /* the SetConfig at start up*/
 UINT8 nfc_hal_start_up_cfg[] = {
-    /* TLV len */   28,
+    /* TLV len */   31,
     /* B0 */        NCI_PARAM_ID_EMVCO_ENABLE,
     /* B1 */        1,
     /* B2 */        1,     /* (1 = enable emvco mode, 0 = disable emvco mode) Default = 0.*/
@@ -41,12 +42,12 @@
     /* B9 */        0x00,
     /* B10*/        0x00,
     /* B11*/        0x00,
-    /* B12*/        0x02,
+    /* B12*/        0x0E,
     /* B13*/        0xE8,
-    /* B14*/        0x03,
-    /* B15*/        0x00,
+    /* B14*/        0xF0,
+    /* B15*/        0x55,
     /* B16*/        0x00,
-    /* B17*/        0x00,
+    /* B17*/        0x0F, /* CE3 SO delay in sec */
     /* B18*/        0x00,
     /* B19*/        0x00,
     /* B20*/        0x00,
@@ -56,7 +57,10 @@
     /* B24*/        0x00,
     /* B25*/        0x00,
     /* B26*/        0x00,
-    /* B27*/        0x00
+    /* B27*/        0x00,
+    /* B28*/        NCI_PARAM_ID_ACT_ORDER, /* polling sequence */
+    /* B29*/        1,
+    /* B30*/        1,     /* (1 = active mode polling before passive, 0 = passive polling first) Default = 0.*/
 };
 
 UINT8 *p_nfc_hal_dm_start_up_cfg = (UINT8 *) nfc_hal_start_up_cfg;
@@ -112,22 +116,25 @@
 
 UINT8 *p_nfc_hal_dm_lptd_cfg = (UINT8 *) &nfc_hal_dm_lptd_cfg[0];
 
-/* This must be configured before setting reader mode for 20791. No need to configure for 43341. */
-const UINT8 nfc_hal_dm_pll_325_cfg[NFC_HAL_XTAL_INDEX_MAX][NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN] =
+/*
+** NFCC has a table which has 9 XTAL frequencies: 9.6, 13, 16.2,  19.2, 24, 26, 38.4, 52 and 37.4 in MHz.
+** For these 9 xtal frequencies, host doesn't need to configure PLL325.
+** For 43341, host doesn't need to configure it at all.
+*/
+UINT8 *p_nfc_hal_dm_pll_325_cfg = NULL;
+
+tNFC_HAL_CFG nfc_hal_cfg =
 {
-    {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0x9A, 0x99, 0x99, 0x99, 0xD7, 0x03, 0x00, 0x87, 0x04, 0x1C, 0x0F, 0x00, 0x0B, FALSE}, /*  9.6 MHz */
-    {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0xEF, 0x90, 0xA8, 0x22, 0xD0, 0x03, 0x00, 0x64, 0x06, 0x26, 0x0F, 0x00, 0x08, FALSE}, /* 13.0 MHz */
-    {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0x5B, 0xB0, 0x05, 0x5B, 0xD8, 0x03, 0x00, 0x50, 0x07, 0x30, 0x0F, 0x00, 0x06, FALSE}, /* 16.2 MHz */
-    {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0xCD, 0xCC, 0xCC, 0xCC, 0xD7, 0x03, 0x00, 0x43, 0x09, 0x39, 0x0F, 0x00, 0x04, FALSE}, /* 19.2 MHz */
-    {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0xD7, 0xA3, 0x70, 0x3D, 0xD0, 0x03, 0x00, 0x36, 0x0B, 0x47, 0x0F, 0x00, 0x03, FALSE}, /* 24.0 MHz */
-    {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0x78, 0x48, 0x54, 0x11, 0xD0, 0x03, 0x00, 0x32, 0x0C, 0x4D, 0x0F, 0x00, 0x02, FALSE}, /* 26.0 MHz */
-    {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0xCD, 0xCC, 0xCC, 0xCC, 0xD7, 0x03, 0x00, 0x43, 0x09, 0x39, 0x0F, 0x00, 0x04, TRUE},  /* 38.4 MHz */
-    {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0x78, 0x48, 0x54, 0x11, 0xD0, 0x03, 0x00, 0x32, 0x0C, 0x4D, 0x0F, 0x00, 0x02, TRUE},  /* 52.0 MHz */
-    {NCI_PARAM_ID_PLL325_CFG_PARAM, NCI_PARAM_LEN_PLL325_CFG_PARAM, 0x29, 0xB4, 0xE2, 0x9C, 0xCF, 0x03, 0x00, 0x45, 0x08, 0x37, 0x0F, 0x00, 0x04, TRUE}   /* 37.4 MHz */
+    FALSE,                                  /* set nfc_hal_prm_nvm_required to TRUE, if the platform wants to abort PRM process without NVM */
+    (UINT16) NFC_HAL_NFCC_ENABLE_TIMEOUT,   /* max time to wait for RESET NTF after setting REG_PU to high
+                                            ** If NFCC doesn't have NVM or cannot load patch from NVM without Xtal setting
+                                            ** then set it to short to optimize bootup time because NFCC cannot send RESET NTF.
+                                            ** Otherwise, it depends on NVM type and size of patchram.
+                                            */
+    (UINT16) NFC_HAL_NFCC_ENABLE_TIMEOUT,   /* max time to wait for RESET NTF after setting Xtal frequency
+                                            ** It depends on NVM type and size of patchram.
+                                            */
+    (HAL_NFC_HCI_UICC0_HOST | HAL_NFC_HCI_UICC1_HOST)  /* Set bit(s) for supported UICC(s) */
 };
 
-UINT8 *p_nfc_hal_dm_pll_325_cfg = (UINT8 *) nfc_hal_dm_pll_325_cfg;
-
-
-/* set nfc_hal_prm_nvm_required to TRUE, if the platform wants to abort PRM process without NVM */
-BOOLEAN nfc_hal_prm_nvm_required = FALSE;
+tNFC_HAL_CFG *p_nfc_hal_cfg= (tNFC_HAL_CFG *) &nfc_hal_cfg;
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_hci.c b/halimpl/bcm2079x/hal/hal/nfc_hal_hci.c
index 3035123..af42d77 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_hci.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_hci.c
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  Vendor-specific handler for HCI events
@@ -38,7 +39,19 @@
 #define NFC_HAL_HCI_NFCC_RSP_TIMEOUT   3000
 #endif
 
+#define NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET    0x0C
+#define NFC_HAL_HCI_NETWK_CMD_TYPE_B_CE_PIPE_INFO_OFFSET    0x32
+#define NFC_HAL_HCI_NETWK_CMD_TYPE_BP_CE_PIPE_INFO_OFFSET   0x7F
+#define NFC_HAL_HCI_NETWK_CMD_TYPE_F_CE_PIPE_INFO_OFFSET    0xB4
+
+#define NFC_HAL_HCI_PIPE_VALID_MASK                         0x80
+
+extern tNFC_HAL_CFG *p_nfc_hal_cfg;
+/****************************************************************************
+** Internal function prototypes
+****************************************************************************/
 static void nfc_hal_hci_set_next_hci_netwk_config (UINT8 block);
+static void nfc_hal_hci_remove_dyn_pipe_to_uicc1 (void);
 static void nfc_hal_hci_handle_nv_read (UINT8 block, tHAL_NFC_STATUS status, UINT16 size);
 static void nfc_hal_hci_init_complete (tHAL_NFC_STATUS status);
 static void nfc_hal_hci_vsc_cback (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
@@ -57,7 +70,16 @@
     switch (p_evt_data->hdr.event)
     {
     case NFC_HAL_HCI_RSP_NV_READ_EVT:
+        if (  (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf && (p_evt_data->nv_read.block == HC_F3_NV_BLOCK || p_evt_data->nv_read.block == HC_F4_NV_BLOCK))
+            ||(nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf && p_evt_data->nv_read.block == HC_F2_NV_BLOCK)  )
+        {
         nfc_hal_hci_handle_nv_read (p_evt_data->nv_read.block, p_evt_data->nv_read.status, p_evt_data->nv_read.size);
+        }
+        else
+        {
+            /* Invalid block or no buffer, Ignore */
+            HAL_TRACE_ERROR1 ("nfc_hal_hci_evt_hdlr: No buffer for handling read NV block: 0x%02x", p_evt_data->nv_read.block);
+        }
         break;
 
     case NFC_HAL_HCI_RSP_NV_WRITE_EVT:
@@ -83,6 +105,13 @@
 
     UINT8 *p_hci_netwk_cmd;
 
+    if (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_NONE)
+    {
+        HAL_TRACE_DEBUG1 ("nfc_hal_hci_enable (): No HCI NETWK CMD to send for NVM Type: 0x%02x", nfc_hal_cb.nvm_cb.nvm_type);
+        nfc_hal_hci_init_complete (HAL_NFC_STATUS_OK);
+        return;
+    }
+
     if (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf)
     {
         p_hci_netwk_cmd = (UINT8 *) (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf - NCI_MSG_HDR_SIZE);
@@ -97,18 +126,36 @@
         nfc_hal_cb.hci_cb.p_hci_netwk_info_buf = NULL;
     }
 
-    if ((p_hci_netwk_cmd = (UINT8 *) GKI_getbuf (NCI_MSG_HDR_SIZE + NFC_HAL_HCI_NETWK_INFO_SIZE)) == NULL)
+    if (  (p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC0_HOST)
+        ||((p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC1_HOST) && ((!nfc_hal_cb.hci_cb.hci_fw_workaround) || (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_EEPROM)))  )
     {
-        NCI_TRACE_ERROR0 ("nfc_hal_hci_enable: unable to allocate buffer for reading hci network info from nvram");
-        nfc_hal_hci_init_complete (HAL_NFC_STATUS_FAILED);
+        if ((p_hci_netwk_cmd = (UINT8 *) GKI_getbuf (NCI_MSG_HDR_SIZE + NFC_HAL_HCI_NETWK_INFO_SIZE)) == NULL)
+        {
+            HAL_TRACE_ERROR0 ("nfc_hal_hci_enable: unable to allocate buffer for reading hci network info from nvram");
+            nfc_hal_hci_init_complete (HAL_NFC_STATUS_FAILED);
+        }
+        else
+        {
+            nfc_hal_cb.hci_cb.p_hci_netwk_info_buf   = (UINT8 *) (p_hci_netwk_cmd + NCI_MSG_HDR_SIZE);
+            nfc_hal_cb.hci_cb.hci_netwk_config_block = 0;
+            if (p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC0_HOST)
+            {
+                memset (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0, NFC_HAL_HCI_NETWK_INFO_SIZE);
+                nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, NFC_HAL_HCI_NETWK_INFO_SIZE, HC_F3_NV_BLOCK);
+                nfc_hal_main_start_quick_timer (&nfc_hal_cb.hci_cb.hci_timer, NFC_HAL_HCI_VSC_TIMEOUT_EVT, NFC_HAL_HCI_NV_READ_TIMEOUT);
+            }
+            else
+            {
+                HAL_TRACE_DEBUG1 ("nfc_hal_hci_enable (): Skip send F3 HCI NETWK CMD for UICC Mask: 0x%02x", p_nfc_hal_cfg->nfc_hal_hci_uicc_support);
+                nfc_hal_hci_set_next_hci_netwk_config (HC_F3_NV_BLOCK);
+            }
+
+        }
     }
     else
     {
-        nfc_hal_cb.hci_cb.p_hci_netwk_info_buf   = (UINT8 *) (p_hci_netwk_cmd + NCI_MSG_HDR_SIZE);
-        nfc_hal_cb.hci_cb.hci_netwk_config_block = 0;
-        memset (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0, NFC_HAL_HCI_NETWK_INFO_SIZE);
-        nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, NFC_HAL_HCI_NETWK_INFO_SIZE, HC_F3_NV_BLOCK);
-        nfc_hal_main_start_quick_timer (&nfc_hal_cb.hci_cb.hci_timer, NFC_HAL_HCI_VSC_TIMEOUT_EVT, NFC_HAL_HCI_NV_READ_TIMEOUT);
+        HAL_TRACE_DEBUG2 ("nfc_hal_hci_enable (): No HCI NETWK CMD to send for UICC Mask: 0x%02x & NVM Type: 0x%02x", p_nfc_hal_cfg->nfc_hal_hci_uicc_support, nfc_hal_cb.nvm_cb.nvm_type);
+        nfc_hal_hci_set_next_hci_netwk_config (HC_F2_NV_BLOCK);
     }
 }
 
@@ -128,7 +175,7 @@
     UINT8  target_handle;
     UINT8   hci_netwk_cmd[1 + NFC_HAL_HCI_SESSION_ID_LEN];
 
-    NCI_TRACE_DEBUG0 ("nfc_hal_hci_handle_hci_netwk_info()");
+    HAL_TRACE_DEBUG0 ("nfc_hal_hci_handle_hci_netwk_info()");
 
     /* skip NCI header byte0 (MT,GID), byte1 (OID) */
     p += 2;
@@ -137,18 +184,22 @@
     target_handle = *(UINT8 *) p;
 
     if (target_handle == NFC_HAL_HCI_DH_TARGET_HANDLE)
-        nfc_hal_nv_co_write (p, data_len,HC_DH_NV_BLOCK);
+        nfc_hal_nv_co_write (p, data_len, HC_F2_NV_BLOCK);
 
     else if (target_handle == NFC_HAL_HCI_UICC0_TARGET_HANDLE)
     {
-        if (p[12] & 0x80)
+        if (  (!nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd)
+            ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+            ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_B_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+            ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_BP_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+            ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_F_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)  )
         {
             /* HCI Network notification received for UICC 0, Update nv data */
             nfc_hal_nv_co_write (p, data_len,HC_F3_NV_BLOCK);
         }
         else
         {
-            NCI_TRACE_DEBUG1 ("nfc_hal_hci_handle_hci_netwk_info(): Type A Card Emulation invalid, Reset nv file: 0x%02x", p[12]);
+            HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_hci_netwk_info(): Type A Card Emulation invalid, Reset nv file: 0x%02x", p[NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET]);
             hci_netwk_cmd[0] = NFC_HAL_HCI_UICC0_TARGET_HANDLE;
             memset (&hci_netwk_cmd[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
             nfc_hal_nv_co_write (hci_netwk_cmd, 1, HC_F3_NV_BLOCK);
@@ -156,14 +207,18 @@
     }
     else if (target_handle == NFC_HAL_HCI_UICC1_TARGET_HANDLE)
     {
-        if (p[12] & 0x80)
+        if (  (!nfc_hal_cb.hci_cb.hci_fw_validate_netwk_cmd)
+            ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+            ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_B_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+            ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_BP_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)
+            ||(p[NFC_HAL_HCI_NETWK_CMD_TYPE_F_CE_PIPE_INFO_OFFSET] & NFC_HAL_HCI_PIPE_VALID_MASK)  )
         {
             /* HCI Network notification received for UICC 1, Update nv data */
             nfc_hal_nv_co_write (p, data_len,HC_F4_NV_BLOCK);
         }
         else
         {
-            NCI_TRACE_DEBUG1 ("nfc_hal_hci_handle_hci_netwk_info(): Type A Card Emulation invalid, Reset nv file: 0x%02x", p[12]);
+            HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_hci_netwk_info(): Type A Card Emulation invalid, Reset nv file: 0x%02x", p[NFC_HAL_HCI_NETWK_CMD_TYPE_A_CE_PIPE_INFO_OFFSET]);
             hci_netwk_cmd[0] = NFC_HAL_HCI_UICC1_TARGET_HANDLE;
             /* Reset Session ID */
             memset (&hci_netwk_cmd[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
@@ -174,14 +229,126 @@
 
 /*******************************************************************************
 **
-** Function         nfc_hal_hci_handle_hcp_pkt
+** Function         nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh
 **
-** Description      Handle HCP Packet
+** Description      Fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd to nfc task
 **
 ** Returns          None
 **
 *******************************************************************************/
-void nfc_hal_hci_handle_hcp_pkt (UINT8 *p_data)
+void nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh (void)
+{
+    NFC_HDR  *p_msg;
+    UINT8 *p, *ps;
+
+    HAL_TRACE_DEBUG1 ("nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh (): Fake ADM_NOTIFY_ALL_PIPE_CLEARED (0x%02x) from HAL", NFC_HAL_HCI_HOST_ID_UICC1);
+
+    /* Start of new message. Allocate a buffer for message */
+    if ((p_msg = (NFC_HDR *) GKI_getpoolbuf (NFC_HAL_NCI_POOL_ID)) != NULL)
+    {
+        /* Initialize NFC_HDR */
+        p_msg->len    = NCI_DATA_HDR_SIZE + 0x03;
+        p_msg->event  = 0;
+        p_msg->offset = 0;
+        p_msg->layer_specific = 0;
+
+        p = (UINT8 *) (p_msg + 1) + p_msg->offset;
+        ps = p;
+        NCI_DATA_BLD_HDR (p, nfc_hal_cb.hci_cb.hcp_conn_id, 0x03);
+        /* HCP header with ADMIN pipe id and chaining bit set */
+        *p++ = ((1 << 0x07) | (NFC_HAL_HCI_ADMIN_PIPE & 0x7F));
+        /* HCP Message header with Command type instruction and ADM_NOTIFY_ALL_PIPE_CLEARED command */
+        *p++ = ((NFC_HAL_HCI_COMMAND_TYPE << 6) | (NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED & 0x3F));
+        /* HCP Data with UICC1 host id */
+        *p = NFC_HAL_HCI_HOST_ID_UICC1;
+
+#ifdef DISP_NCI
+        DISP_NCI (ps, (UINT16) p_msg->len, TRUE);
+#endif
+        nfc_hal_send_nci_msg_to_nfc_task (p_msg);
+
+    }
+    else
+    {
+        HAL_TRACE_ERROR0 ("Unable to allocate buffer for faking ADM_NOTIFY_ALL_PIPE_CLEARED cmd from HAL to stack");
+    }
+}
+
+/*******************************************************************************
+**
+** Function         nfc_hal_hci_handle_hcp_pkt_to_hc
+**
+** Description      Handle HCP Packet from NFC task to Host Controller
+**
+** Returns          FALSE to send the packet to host controller
+**                  TRUE to drop the packet and fake credit ntf for hcp connection
+**
+*******************************************************************************/
+BOOLEAN nfc_hal_hci_handle_hcp_pkt_to_hc (UINT8 *p_data)
+{
+    UINT8   chaining_bit;
+    UINT8   pipe;
+    UINT8   type;
+    UINT8   inst;
+    UINT8   index;
+
+    HAL_TRACE_DEBUG0 ("nfc_hal_hci_handle_hcp_pkt_to_hc ()");
+
+    if (  (!nfc_hal_cb.hci_cb.hci_fw_workaround)
+        ||(nfc_hal_cb.nvm_cb.nvm_type != NCI_SPD_NVM_TYPE_UICC)  )
+    {
+        /* Do nothing, just forward the stack hcp packet to host controller */
+        return FALSE;
+    }
+
+    chaining_bit = ((*p_data) >> 0x07) & 0x01;
+    pipe = (*p_data++) & 0x7F;
+
+    if (  (chaining_bit)
+        &&(pipe == NFC_HAL_HCI_ADMIN_PIPE)  )
+    {
+        type  = ((*p_data) >> 0x06) & 0x03;
+
+        if (type == NFC_HAL_HCI_COMMAND_TYPE)
+        {
+            inst  = (*p_data++ & 0x3F);
+            if (inst == NFC_HAL_HCI_ANY_SET_PARAMETER)
+            {
+                index = *(p_data++);
+                if (index == NFC_HAL_HCI_WHITELIST_INDEX)
+                {
+                    /* Set flag to fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd to nfc task after
+                     * response from host controller to set whitelist cmd
+                     */
+                    nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1 = TRUE;
+                }
+            }
+        }
+        else if (type == NFC_HAL_HCI_RESPONSE_TYPE)
+        {
+            if (nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1)
+            {
+                /* Got response to the fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd sent by HAL to nfc task */
+                nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1 =  FALSE;
+                /* return TRUE to drop this hcp without forwarding to host controller */
+                return TRUE;
+            }
+        }
+    }
+
+    return FALSE;
+}
+
+/*******************************************************************************
+**
+** Function         nfc_hal_hci_handle_hcp_pkt_from_hc
+**
+** Description      Handle HCP Packet from Host controller to Terminal Host
+**
+** Returns          None
+**
+*******************************************************************************/
+void nfc_hal_hci_handle_hcp_pkt_from_hc (UINT8 *p_data)
 {
     UINT8   chaining_bit;
     UINT8   pipe;
@@ -190,6 +357,9 @@
     UINT8   hci_netwk_cmd[1 + NFC_HAL_HCI_SESSION_ID_LEN];
     UINT8   source_host;
 
+    if (!nfc_hal_cb.hci_cb.hci_fw_workaround)
+        return;
+
     chaining_bit = ((*p_data) >> 0x07) & 0x01;
     pipe = (*p_data++) & 0x7F;
 
@@ -207,14 +377,14 @@
 
                 STREAM_TO_UINT8 (source_host, p_data);
 
-                NCI_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt(): Received Clear All pipe command for UICC: 0x%02x", source_host);
+                HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt_from_hc (): Received ADM_NOTIFY_ALL_PIPE_CLEARED command for UICC: 0x%02x", source_host);
                 if (source_host == NFC_HAL_HCI_HOST_ID_UICC0)
                 {
                     hci_netwk_cmd[0] = NFC_HAL_HCI_UICC0_TARGET_HANDLE;
                     /* Reset Session ID */
                     memset (&hci_netwk_cmd[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
                     nfc_hal_nv_co_write (hci_netwk_cmd, 1, HC_F3_NV_BLOCK);
-                    NCI_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt(): Sent command to reset nv file for block: 0x%02x", HC_F3_NV_BLOCK);
+                    HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt_from_hc (): Sent command to reset nv file for block: 0x%02x", HC_F3_NV_BLOCK);
                 }
                 else if (source_host == NFC_HAL_HCI_HOST_ID_UICC1)
                 {
@@ -222,10 +392,21 @@
                     /* Reset Session ID */
                     memset (&hci_netwk_cmd[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
                     nfc_hal_nv_co_write (hci_netwk_cmd, 1, HC_F4_NV_BLOCK);
-                    NCI_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt(): Sent command to reset nv file for block: 0x%02x", HC_F4_NV_BLOCK);
+                    HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_hcp_pkt_from_hc (): Sent command to reset nv file for block: 0x%02x", HC_F4_NV_BLOCK);
                 }
             }
         }
+        else if (type == NFC_HAL_HCI_RESPONSE_TYPE)
+        {
+            if (nfc_hal_cb.hci_cb.clear_all_pipes_to_uicc1)
+            {
+                /* NVM Type is UICC and got response from host controller
+                 * to Set whitelist command. Now fake ADM_NOTIFY_ALL_PIPE_CLEARED cmd to
+                 * NFC Task and then forward the whitelist cmd response
+                 */
+                nfc_hal_hci_fake_adm_notify_all_pipe_cleared_to_dh ();
+            }
+        }
     }
 }
 
@@ -240,7 +421,6 @@
 *******************************************************************************/
 void nfc_hal_hci_handle_nv_read (UINT8 block, tHAL_NFC_STATUS status, UINT16 size)
 {
-    NFC_HDR *p_data = NULL;
     UINT8   *p;
     UINT8   *p_hci_netwk_info = NULL;
 
@@ -252,9 +432,11 @@
     case HC_F3_NV_BLOCK:
     case HC_F4_NV_BLOCK:
         if (  (status != HAL_NFC_STATUS_OK)
-            ||(size > NFC_HAL_HCI_NETWK_INFO_SIZE)  )
+            ||(size > NFC_HAL_HCI_NETWK_INFO_SIZE)
+            ||(size < NFC_HAL_HCI_MIN_NETWK_INFO_SIZE)
+            ||((nfc_hal_cb.hci_cb.hci_fw_workaround) && (block == HC_F4_NV_BLOCK) && (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_UICC))  )
         {
-            NCI_TRACE_DEBUG0 ("nfc_hal_hci_handle_nv_read: Invalid data from nv memory, Set DEFAULT Configuration!");
+            HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_nv_read: Invalid data from nv memory, Set DEFAULT Configuration for block:0x%02x", block);
             memset (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0, NFC_HAL_HCI_NETWK_INFO_SIZE);
             nfc_hal_cb.hci_cb.p_hci_netwk_info_buf[0] = (block == HC_F3_NV_BLOCK) ? NFC_HAL_HCI_UICC0_TARGET_HANDLE : NFC_HAL_HCI_UICC1_TARGET_HANDLE;
             memset (&nfc_hal_cb.hci_cb.p_hci_netwk_info_buf[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
@@ -264,15 +446,31 @@
         p_hci_netwk_info = (UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_info_buf - NCI_MSG_HDR_SIZE;
         break;
 
-    case HC_DH_NV_BLOCK:
-        if (  (status == HAL_NFC_STATUS_OK)
-            &&(size <= NFC_HAL_HCI_DH_NETWK_INFO_SIZE)  )
+    case HC_F2_NV_BLOCK:
+
+        if (  (status != HAL_NFC_STATUS_OK)
+            ||(size > NFC_HAL_HCI_DH_NETWK_INFO_SIZE)
+            ||(size < NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE)  )
         {
-            p_hci_netwk_info = (UINT8 *) (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf - NCI_MSG_HDR_SIZE);
+            HAL_TRACE_DEBUG1 ("nfc_hal_hci_handle_nv_read: Invalid data from nv memory, Set DEFAULT Configuration for block:0x%02x", block);
+            memset (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf, 0, NFC_HAL_HCI_DH_NETWK_INFO_SIZE);
+            nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf[0] = NFC_HAL_HCI_DH_TARGET_HANDLE;
+            memset (&nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf[1], 0xFF, NFC_HAL_HCI_SESSION_ID_LEN);
+            size = NFC_HAL_HCI_DH_NETWK_INFO_SIZE;
+            p_hci_netwk_info = (UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf - NCI_MSG_HDR_SIZE;
         }
         else
         {
-            NCI_TRACE_ERROR0 ("nfc_hal_hci_handle_nv_read: Invalid data from nv memory, Skip DH Configuration!");
+            if ((nfc_hal_cb.hci_cb.hci_fw_workaround) && (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_UICC))
+            {
+                /* if NVM Type is UICC, then UICC1 will find session id mismatch when activated for patch download,
+                 * and will remove pipes connected to DH even before DH is enabled, So DH will update NFCC
+                 * control block by removing all dynamic pipes connected to UICC1 */
+
+                nfc_hal_hci_remove_dyn_pipe_to_uicc1 ();
+                size = NFC_HAL_HCI_DH_NETWK_INFO_SIZE;
+            }
+            p_hci_netwk_info = (UINT8 *) (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf - NCI_MSG_HDR_SIZE);
         }
         break;
 
@@ -280,8 +478,6 @@
         return;
     }
 
-    if (p_hci_netwk_info)
-    {
         p = p_hci_netwk_info;
         /* Send HCI Network ntf command using nv data */
         NCI_MSG_BLD_HDR0 (p, NCI_MT_CMD, NCI_GID_PROP);
@@ -291,12 +487,48 @@
         nfc_hal_dm_send_nci_cmd (p_hci_netwk_info, (UINT16) (NCI_MSG_HDR_SIZE + size), nfc_hal_hci_vsc_cback);
 
         nfc_hal_cb.hci_cb.hci_netwk_config_block = block;
-    }
-    else
+}
+
+/*******************************************************************************
+**
+** Function         nfc_hal_hci_remove_dyn_pipe_to_uicc1
+**
+** Description      Prepare hci network command read from nv file removing
+**                  all pipes connected to UICC1
+**
+** Returns          None
+**
+*******************************************************************************/
+void nfc_hal_hci_remove_dyn_pipe_to_uicc1 (void)
+{
+    UINT8 *p, *np;
+    UINT8 num_dyn_pipes = 0, new_num_dyn_pipes = 0;
+    UINT8 xx;
+    UINT8 source_host, dest_host, pipe_id;
+
+    p  = (UINT8 *) (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf + NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE);
+    np = p;
+    num_dyn_pipes = *(p - 1);
+
+    for (xx = 0; xx < num_dyn_pipes; xx++,p += NFC_HAL_HCI_PIPE_INFO_SIZE)
     {
-        /* Set next HCI Network configuration */
-        nfc_hal_hci_set_next_hci_netwk_config (block);
+        source_host = *(UINT8 *) (p);
+        dest_host   = *(UINT8 *) (p + 1);
+        pipe_id     = *(UINT8 *) (p + 4);
+
+        if ((source_host != NFC_HAL_HCI_HOST_ID_UICC1) && (dest_host != NFC_HAL_HCI_HOST_ID_UICC1))
+        {
+            memcpy (np, p, NFC_HAL_HCI_PIPE_INFO_SIZE);
+            np += NFC_HAL_HCI_PIPE_INFO_SIZE;
+            new_num_dyn_pipes++;
+        }
     }
+
+    memset ((UINT8 *) (np), 0, NFC_HAL_HCI_PIPE_INFO_SIZE * (20 - new_num_dyn_pipes));
+
+    /* Update number of pipes after removing pipes connected to UICC1 */
+    p = (UINT8 *) (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf + NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE);
+    *(p - 1) = new_num_dyn_pipes;
 }
 
 /*******************************************************************************
@@ -327,6 +559,7 @@
     }
 
     NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_IDLE);
+
     nfc_hal_cb.p_stack_cback (HAL_NFC_POST_INIT_CPLT_EVT, HAL_NFC_STATUS_OK);
 }
 
@@ -346,16 +579,21 @@
     switch (block)
     {
     case HC_F3_NV_BLOCK:
-        /* Send command to read nvram data for 0xF4 */
-        memset (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0, NFC_HAL_HCI_NETWK_INFO_SIZE);
-        nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, NFC_HAL_HCI_NETWK_INFO_SIZE, HC_F4_NV_BLOCK);
-        nfc_hal_main_start_quick_timer (&nfc_hal_cb.hci_cb.hci_timer, NFC_HAL_HCI_VSC_TIMEOUT_EVT, NFC_HAL_HCI_NV_READ_TIMEOUT);
-        break;
+        if (  (p_nfc_hal_cfg->nfc_hal_hci_uicc_support & HAL_NFC_HCI_UICC1_HOST)
+            &&((!nfc_hal_cb.hci_cb.hci_fw_workaround) || (nfc_hal_cb.nvm_cb.nvm_type == NCI_SPD_NVM_TYPE_EEPROM))  )
+        {
+            /* Send command to read nvram data for 0xF4 */
+            memset (nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, 0, NFC_HAL_HCI_NETWK_INFO_SIZE);
+            nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_info_buf, NFC_HAL_HCI_NETWK_INFO_SIZE, HC_F4_NV_BLOCK);
+            nfc_hal_main_start_quick_timer (&nfc_hal_cb.hci_cb.hci_timer, NFC_HAL_HCI_VSC_TIMEOUT_EVT, NFC_HAL_HCI_NV_READ_TIMEOUT);
+            break;
+        }
+        HAL_TRACE_DEBUG2 ("nfc_hal_hci_set_next_hci_netwk_config (): Skip send F4 HCI NETWK CMD for UICC Mask: 0x%02x & NVM Type: 0x%02x", p_nfc_hal_cfg->nfc_hal_hci_uicc_support, nfc_hal_cb.nvm_cb.nvm_type);
 
     case HC_F4_NV_BLOCK:
         if ((p_hci_netwk_cmd = (UINT8 *) GKI_getbuf (NCI_MSG_HDR_SIZE + NFC_HAL_HCI_DH_NETWK_INFO_SIZE)) == NULL)
         {
-            NCI_TRACE_ERROR0 ("nfc_hal_hci_set_next_hci_netwk_config: unable to allocate buffer for reading hci network info from nvram");
+            HAL_TRACE_ERROR0 ("nfc_hal_hci_set_next_hci_netwk_config: unable to allocate buffer for reading hci network info from nvram");
             nfc_hal_hci_init_complete (HAL_NFC_STATUS_FAILED);
         }
         else
@@ -363,17 +601,17 @@
             nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf   = (UINT8 *) (p_hci_netwk_cmd + NCI_MSG_HDR_SIZE);
             /* Send command to read nvram data for 0xF2 */
             memset (nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf, 0, NFC_HAL_HCI_DH_NETWK_INFO_SIZE);
-            nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf, NFC_HAL_HCI_DH_NETWK_INFO_SIZE, HC_DH_NV_BLOCK);
+            nfc_hal_nv_co_read ((UINT8 *) nfc_hal_cb.hci_cb.p_hci_netwk_dh_info_buf, NFC_HAL_HCI_DH_NETWK_INFO_SIZE, HC_F2_NV_BLOCK);
             nfc_hal_main_start_quick_timer (&nfc_hal_cb.hci_cb.hci_timer, NFC_HAL_HCI_VSC_TIMEOUT_EVT, NFC_HAL_HCI_NV_READ_TIMEOUT);
         }
         break;
 
-    case HC_DH_NV_BLOCK:
+    case HC_F2_NV_BLOCK:
         nfc_hal_hci_init_complete (HAL_NFC_STATUS_OK);
         break;
 
     default:
-        NCI_TRACE_ERROR1 ("nfc_hal_hci_set_next_hci_netwk_config: unable to allocate buffer to send VSC 0x%02x", block);
+        HAL_TRACE_ERROR1 ("nfc_hal_hci_set_next_hci_netwk_config: unable to allocate buffer to send VSC 0x%02x", block);
         /* Brcm initialization failed */
         nfc_hal_hci_init_complete (HAL_NFC_STATUS_FAILED);
         break;
@@ -407,7 +645,7 @@
     {
     case HC_F3_NV_BLOCK:
     case HC_F4_NV_BLOCK:
-    case HC_DH_NV_BLOCK:
+    case HC_F2_NV_BLOCK:
         nfc_hal_hci_set_next_hci_netwk_config (nfc_hal_cb.hci_cb.hci_netwk_config_block);
         break;
 
@@ -430,11 +668,11 @@
 {
     TIMER_LIST_ENT  *p_tlent = (TIMER_LIST_ENT *)p_tle;
 
-    NCI_TRACE_DEBUG0 ("nfc_hal_hci_timeout_cback ()");
+    HAL_TRACE_DEBUG0 ("nfc_hal_hci_timeout_cback ()");
 
     if (p_tlent->event == NFC_HAL_HCI_VSC_TIMEOUT_EVT)
     {
-        NCI_TRACE_ERROR0 ("nfc_hal_hci_timeout_cback: Timeout - NFC HAL HCI BRCM Initialization Failed!");
+        HAL_TRACE_ERROR0 ("nfc_hal_hci_timeout_cback: Timeout - NFC HAL HCI BRCM Initialization Failed!");
         nfc_hal_hci_init_complete (HAL_NFC_STATUS_FAILED);
     }
 }
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_hci_ci.c b/halimpl/bcm2079x/hal/hal/nfc_hal_hci_ci.c
index d9e999e..6c600bf 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_hci_ci.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_hci_ci.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,12 +16,14 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the call-in functions for NFC HAL HCI
  *
  ******************************************************************************/
 #include <string.h>
+#include "gki.h"
 #include "nfc_hal_api.h"
 #include "nfc_hal_int.h"
 #include "nfc_hal_nv_ci.h"
@@ -29,7 +31,7 @@
 
 /*******************************************************************************
 **
-** Function         nfa_nv_ci_read
+** Function         nfc_hal_nv_ci_read
 **
 ** Description      call-in function for non volatile memory read acess
 **
@@ -63,7 +65,7 @@
 
 /*******************************************************************************
 **
-** Function         nfa_nv_ci_write
+** Function         nfc_hal_nv_ci_write
 **
 ** Description      call-in function for non volatile memory write acess
 **
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_main.c b/halimpl/bcm2079x/hal/hal/nfc_hal_main.c
index 82e696f..a3fb215 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_main.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_main.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  Functions for handling NFC HAL NCI Transport events
@@ -23,6 +24,7 @@
  ******************************************************************************/
 #include <string.h>
 #include "nfc_hal_int.h"
+#include "nfc_hal_post_reset.h"
 #include "userial.h"
 #include "upio.h"
 
@@ -43,11 +45,13 @@
 tNFC_HAL_CB nfc_hal_cb;
 #endif
 
+extern tNFC_HAL_CFG *p_nfc_hal_cfg;
 /****************************************************************************
 ** Internal function prototypes
 ****************************************************************************/
 static void nfc_hal_main_userial_cback (tUSERIAL_PORT port, tUSERIAL_EVT evt, tUSERIAL_EVT_DATA *p_data);
 static void nfc_hal_main_handle_terminate (void);
+static void nfc_hal_main_timeout_cback (void *p_tle);
 
 
 #if (NFC_HAL_DEBUG == TRUE)
@@ -55,14 +59,14 @@
 {
     "IDLE",             /* Initialization is done                */
     "W4_XTAL_SET",      /* Waiting for crystal setting rsp       */
-    "W4_RESET",         /* Waiting for reset rsp                 */
+    "POST_XTAL_SET",    /* Waiting for reset ntf after xtal set  */
+    "W4_NFCC_ENABLE",   /* Waiting for reset ntf atter REG_PU up */
     "W4_BUILD_INFO",    /* Waiting for build info rsp            */
     "W4_PATCH_INFO",    /* Waiting for patch info rsp            */
     "W4_APP_COMPL",     /* Waiting for complete from application */
     "W4_POST_INIT",     /* Waiting for complete of post init     */
     "W4_CONTROL",       /* Waiting for control release           */
     "W4_PREDISC",       /* Waiting for complete of prediscover   */
-    "W4_RE_INIT",       /* Waiting for reset rsp on ReInit       */
     "CLOSING"           /* Shutting down                         */
 };
 #endif
@@ -83,6 +87,7 @@
 
     nfc_hal_cb.ncit_cb.nci_ctrl_size   = NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE;
     nfc_hal_cb.trace_level             = NFC_HAL_INITIAL_TRACE_LEVEL;
+    nfc_hal_cb.timer.p_cback           = nfc_hal_main_timeout_cback;
 }
 
 /*******************************************************************************
@@ -115,8 +120,14 @@
 
     USERIAL_Open (USERIAL_NFC_PORT, &open_cfg, nfc_hal_main_userial_cback);
 
-    /* notify transport openned */
-    nfc_hal_dm_pre_init_nfcc ();
+    {
+        /* Wait for NFCC to enable - Core reset notification */
+        NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_W4_NFCC_ENABLE);
+
+        /* NFCC Enable timeout */
+        nfc_hal_main_start_quick_timer (&nfc_hal_cb.timer, NFC_HAL_TTYPE_NFCC_ENABLE,
+                                        ((p_nfc_hal_cfg->nfc_hal_nfcc_enable_timeout)*QUICK_TIMER_TICKS_PER_SEC)/1000);
+    }
 }
 
 /*******************************************************************************
@@ -157,7 +168,7 @@
     }
     else if (evt == USERIAL_ERR_EVT)
     {
-        NCI_TRACE_ERROR0 ("nfc_hal_main_userial_cback: USERIAL_ERR_EVT. Notifying NFC_TASK of transport error");
+        HAL_TRACE_ERROR0 ("nfc_hal_main_userial_cback: USERIAL_ERR_EVT. Notifying NFC_TASK of transport error");
         if (nfc_hal_cb.ncit_cb.nci_wait_rsp != NFC_HAL_WAIT_RSP_NONE)
         {
             nfc_hal_main_stop_quick_timer (&nfc_hal_cb.ncit_cb.nci_wait_rsp_timer);
@@ -170,11 +181,11 @@
     }
     else if (evt == USERIAL_WAKEUP_EVT)
     {
-        NCI_TRACE_DEBUG1 ("nfc_hal_main_userial_cback: USERIAL_WAKEUP_EVT: %d", p_data->sigs);
+        HAL_TRACE_DEBUG1 ("nfc_hal_main_userial_cback: USERIAL_WAKEUP_EVT: %d", p_data->sigs);
     }
     else
     {
-        NCI_TRACE_DEBUG1 ("nfc_hal_main_userial_cback: unhandled userial evt: %i", evt);
+        HAL_TRACE_DEBUG1 ("nfc_hal_main_userial_cback: unhandled userial evt: %i", evt);
     }
 }
 
@@ -189,7 +200,7 @@
 *******************************************************************************/
 void nfc_hal_main_pre_init_done (tHAL_NFC_STATUS status)
 {
-    NCI_TRACE_DEBUG1 ("nfc_hal_main_pre_init_done () status = %d", status);
+    HAL_TRACE_DEBUG1 ("nfc_hal_main_pre_init_done () status = %d", status);
 
     if (status != HAL_NFC_STATUS_OK)
     {
@@ -216,7 +227,7 @@
 {
     TIMER_LIST_ENT  *p_tlent = (TIMER_LIST_ENT *) p_tle;
 
-    NCI_TRACE_DEBUG0 ("nfc_hal_main_timeout_cback ()");
+    HAL_TRACE_DEBUG0 ("nfc_hal_main_timeout_cback ()");
 
     switch (p_tlent->event)
     {
@@ -224,8 +235,13 @@
         nfc_hal_main_open_transport ();
         break;
 
+    case NFC_HAL_TTYPE_NFCC_ENABLE:
+        /* NFCC should have enabled now, notify transport openned */
+        nfc_hal_dm_pre_init_nfcc ();
+        break;
+
     default:
-        NCI_TRACE_DEBUG1 ("nfc_hal_main_timeout_cback: unhandled timer event (0x%04x)", p_tlent->event);
+        HAL_TRACE_DEBUG1 ("nfc_hal_main_timeout_cback: unhandled timer event (0x%04x)", p_tlent->event);
         break;
     }
 }
@@ -373,6 +389,76 @@
 
 /*******************************************************************************
 **
+** Function         nfc_hal_send_nci_msg_to_nfc_task
+**
+** Description      This function is called to send nci message to nfc task
+**
+** Returns          void
+**
+*******************************************************************************/
+void nfc_hal_send_nci_msg_to_nfc_task (NFC_HDR * p_msg)
+{
+#ifdef NFC_HAL_SHARED_GKI
+    /* Using shared NFC/HAL GKI resources - send message buffer directly to NFC_TASK for processing */
+    p_msg->event = BT_EVT_TO_NFC_NCI;
+    GKI_send_msg (NFC_TASK, NFC_MBOX_ID, p_msg);
+#else
+    /* Send NCI message to the stack */
+    nfc_hal_cb.p_data_cback (p_msg->len, (UINT8 *) ((p_msg + 1)
+                                 + p_msg->offset));
+    GKI_freebuf(p_msg);
+#endif
+}
+
+/*******************************************************************************
+**
+** Function         nfc_hal_send_credit_ntf_for_cid
+**
+** Description      This function is called to send credit ntf
+**                  for the specified connection id to nfc task
+**
+** Returns          void
+**
+*******************************************************************************/
+static void nfc_hal_send_credit_ntf_for_cid (UINT8 cid)
+{
+    NFC_HDR  *p_msg;
+    UINT8    *p, *ps;
+
+    /* Start of new message. Allocate a buffer for message */
+    if ((p_msg = (NFC_HDR *) GKI_getpoolbuf (NFC_HAL_NCI_POOL_ID)) != NULL)
+    {
+        /* Initialize NFC_HDR */
+        p_msg->len    = NCI_DATA_HDR_SIZE + 0x03;
+        p_msg->event  = 0;
+        p_msg->offset = 0;
+        p_msg->layer_specific = 0;
+
+        p = (UINT8 *) (p_msg + 1) + p_msg->offset;
+        ps = p;
+        NCI_MSG_BLD_HDR0(p, NCI_MT_NTF, NCI_GID_CORE);
+        NCI_MSG_BLD_HDR1(p, NCI_MSG_CORE_CONN_CREDITS);
+        UINT8_TO_STREAM (p, 0x03);
+
+        /* Number of credit entries */
+        *p++ = 0x01;
+        /* Connection id of the credit ntf */
+        *p++ = cid;
+        /* Number of credits */
+        *p = 0x01;
+#ifdef DISP_NCI
+        DISP_NCI (ps, (UINT16) p_msg->len, TRUE);
+#endif
+        nfc_hal_send_nci_msg_to_nfc_task (p_msg);
+    }
+    else
+    {
+        HAL_TRACE_ERROR0 ("Unable to allocate buffer for Sending credit ntf to stack");
+    }
+}
+
+/*******************************************************************************
+**
 ** Function         nfc_hal_main_send_message
 **
 ** Description      This function is calledto send an NCI message.
@@ -382,13 +468,14 @@
 *******************************************************************************/
 static void nfc_hal_main_send_message (NFC_HDR *p_msg)
 {
-    UINT8   *ps;
+    UINT8   *ps, *pp, cid, pbf;
     UINT16  len = p_msg->len;
+    UINT16  data_len;
 #ifdef DISP_NCI
     UINT8   delta;
 #endif
 
-    NCI_TRACE_DEBUG1 ("nfc_hal_main_send_message() ls:0x%x", p_msg->layer_specific);
+    HAL_TRACE_DEBUG1 ("nfc_hal_main_send_message() ls:0x%x", p_msg->layer_specific);
     if (  (p_msg->layer_specific == NFC_HAL_WAIT_RSP_CMD)
         ||(p_msg->layer_specific == NFC_HAL_WAIT_RSP_VSC)  )
     {
@@ -404,11 +491,35 @@
 
         /* send this packet to transport */
         ps = (UINT8 *) (p_msg + 1) + p_msg->offset;
+        pp = ps + 1;
 #ifdef DISP_NCI
         delta = p_msg->len - len;
         DISP_NCI (ps + delta, (UINT16) (p_msg->len - delta), FALSE);
 #endif
-        USERIAL_Write (USERIAL_NFC_PORT, ps, p_msg->len);
+        if (nfc_hal_cb.hci_cb.hcp_conn_id)
+        {
+            NCI_DATA_PRS_HDR(pp, pbf, cid, data_len);
+            if (cid == nfc_hal_cb.hci_cb.hcp_conn_id)
+            {
+                if (nfc_hal_hci_handle_hcp_pkt_to_hc (pp))
+                {
+                    HAL_TRACE_DEBUG0 ("nfc_hal_main_send_message() - Drop rsp to Fake cmd, Fake credit ntf");
+                    GKI_freebuf (p_msg);
+                    nfc_hal_send_credit_ntf_for_cid (cid);
+                    return;
+                }
+            }
+
+        }
+        /* check low power mode state */
+        if (nfc_hal_dm_power_mode_execute (NFC_HAL_LP_TX_DATA_EVT))
+        {
+            USERIAL_Write (USERIAL_NFC_PORT, ps, p_msg->len);
+        }
+        else
+        {
+            HAL_TRACE_ERROR0 ("nfc_hal_main_send_message(): drop data in low power mode");
+        }
         GKI_freebuf (p_msg);
     }
 }
@@ -431,7 +542,7 @@
     NFC_HDR  *p_msg;
     BOOLEAN  free_msg;
 
-    NCI_TRACE_DEBUG0 ("NFC_HAL_TASK started");
+    HAL_TRACE_DEBUG0 ("NFC_HAL_TASK started");
 
     /* Main loop */
     while (TRUE)
@@ -441,7 +552,7 @@
         /* Handle NFC_HAL_TASK_EVT_INITIALIZE (for initializing NCI transport) */
         if (event & NFC_HAL_TASK_EVT_INITIALIZE)
         {
-            NCI_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_INITIALIZE signal. Opening NFC transport...");
+            HAL_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_INITIALIZE signal. Opening NFC transport...");
 
             nfc_hal_main_open_transport ();
         }
@@ -449,28 +560,30 @@
         /* Check for terminate event */
         if (event & NFC_HAL_TASK_EVT_TERMINATE)
         {
-            NCI_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_TERMINATE");
+            HAL_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_TERMINATE");
             nfc_hal_main_handle_terminate ();
 
             /* Close uart */
             USERIAL_Close (USERIAL_NFC_PORT);
 
-            nfc_hal_cb.p_stack_cback (HAL_NFC_CLOSE_CPLT_EVT, HAL_NFC_STATUS_OK);
-            nfc_hal_cb.p_stack_cback = NULL;
+            if (nfc_hal_cb.p_stack_cback)
+            {
+                nfc_hal_cb.p_stack_cback (HAL_NFC_CLOSE_CPLT_EVT, HAL_NFC_STATUS_OK);
+                nfc_hal_cb.p_stack_cback = NULL;
+            }
             continue;
         }
 
         /* Check for power cycle event */
         if (event & NFC_HAL_TASK_EVT_POWER_CYCLE)
         {
-            NCI_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_POWER_CYCLE");
+            HAL_TRACE_DEBUG0 ("NFC_HAL_TASK got NFC_HAL_TASK_EVT_POWER_CYCLE");
             nfc_hal_main_handle_terminate ();
 
             /* Close uart */
             USERIAL_Close (USERIAL_NFC_PORT);
 
             /* power cycle timeout */
-            nfc_hal_cb.timer.p_cback = nfc_hal_main_timeout_cback;
             nfc_hal_main_start_quick_timer (&nfc_hal_cb.timer, NFC_HAL_TTYPE_POWER_CYCLE,
                                             (NFC_HAL_POWER_CYCLE_DELAY*QUICK_TIMER_TICKS_PER_SEC)/1000);
             continue;
@@ -549,15 +662,13 @@
                         if (nfc_hal_nci_preproc_rx_nci_msg (nfc_hal_cb.ncit_cb.p_rcv_msg))
                         {
                             /* Send NCI message to the stack */
-                            nfc_hal_cb.p_data_cback(nfc_hal_cb.ncit_cb.p_rcv_msg->len, (UINT8 *)((nfc_hal_cb.ncit_cb.p_rcv_msg + 1)
-                                                             + nfc_hal_cb.ncit_cb.p_rcv_msg->offset));
-
+                            nfc_hal_send_nci_msg_to_nfc_task (nfc_hal_cb.ncit_cb.p_rcv_msg);
                         }
-                    }
-
-                    if (nfc_hal_cb.ncit_cb.p_rcv_msg)
-                    {
-                        GKI_freebuf(nfc_hal_cb.ncit_cb.p_rcv_msg);
+                        else
+                        {
+                            if (nfc_hal_cb.ncit_cb.p_rcv_msg)
+                                GKI_freebuf(nfc_hal_cb.ncit_cb.p_rcv_msg);
+                        }
                         nfc_hal_cb.ncit_cb.p_rcv_msg = NULL;
                     }
                 }
@@ -571,7 +682,7 @@
         }
     }
 
-    NCI_TRACE_DEBUG0 ("nfc_hal_main_task terminated");
+    HAL_TRACE_DEBUG0 ("nfc_hal_main_task terminated");
 
     GKI_exit_task (GKI_get_taskid ());
     return 0;
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_nci.c b/halimpl/bcm2079x/hal/hal/nfc_hal_nci.c
index 977d7a4..87c96ee 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_nci.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_nci.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains function of the NFC unit to receive/process NCI/VS
@@ -91,7 +92,7 @@
         if (nfc_hal_cb.ncit_cb.p_frag_msg->layer_specific != p_msg->layer_specific)
         {
             /* check if these fragments are of the same NCI message */
-            NCI_TRACE_ERROR2 ("nfc_hal_nci_assemble_nci_msg() - different messages 0x%x, 0x%x!!", nfc_hal_cb.ncit_cb.p_frag_msg->layer_specific, p_msg->layer_specific);
+            HAL_TRACE_ERROR2 ("nfc_hal_nci_assemble_nci_msg() - different messages 0x%x, 0x%x!!", nfc_hal_cb.ncit_cb.p_frag_msg->layer_specific, p_msg->layer_specific);
             nfc_hal_cb.ncit_cb.nci_ras  |= NFC_HAL_NCI_RAS_ERROR;
         }
         else if (nfc_hal_cb.ncit_cb.nci_ras == 0)
@@ -116,7 +117,7 @@
             else
             {
                 nfc_hal_cb.ncit_cb.nci_ras  |= NFC_HAL_NCI_RAS_TOO_BIG;
-                NCI_TRACE_ERROR2 ("nfc_hal_nci_assemble_nci_msg() buffer overrun (%d + %d)!!", nfc_hal_cb.ncit_cb.p_frag_msg->len, p_msg->len);
+                HAL_TRACE_ERROR2 ("nfc_hal_nci_assemble_nci_msg() buffer overrun (%d + %d)!!", nfc_hal_cb.ncit_cb.p_frag_msg->len, p_msg->len);
             }
         }
         /* we are done with this new fragment, free it */
@@ -141,7 +142,7 @@
         if (nfc_hal_cb.ncit_cb.nci_ras & NFC_HAL_NCI_RAS_ERROR)
         {
             /* NFCC reported NCI fragments for different NCI messages and this is the last fragment - drop it */
-            NCI_TRACE_ERROR0 ("nfc_hal_nci_assemble_nci_msg() clearing NCI_RAS_ERROR");
+            HAL_TRACE_ERROR0 ("nfc_hal_nci_assemble_nci_msg() clearing NCI_RAS_ERROR");
             GKI_freebuf (p_msg);
             p_msg = NULL;
         }
@@ -200,7 +201,7 @@
         }
         else
         {
-            NCI_TRACE_ERROR0 ("Unable to allocate buffer for incoming NCI message.");
+            HAL_TRACE_ERROR0 ("Unable to allocate buffer for incoming NCI message.");
         }
         p_cb->rcv_len--;
         break;
@@ -296,7 +297,7 @@
         }
         else
         {
-            NCI_TRACE_ERROR0 ("[nfc] Unable to allocate buffer for incoming NCI message.");
+            HAL_TRACE_ERROR0 ("[nfc] Unable to allocate buffer for incoming NCI message.");
         }
         p_cb->rcv_len--;
         break;
@@ -321,7 +322,7 @@
                 GKI_freebuf (p_cb->p_rcv_msg);
                 p_cb->p_rcv_msg     = NULL;
 
-                NCI_TRACE_ERROR0 ("Invalid length for incoming BT HCI message.");
+                HAL_TRACE_ERROR0 ("Invalid length for incoming BT HCI message.");
             }
 
             /* Message length is valid */
@@ -364,13 +365,13 @@
     }
 
     /* If we received entire message */
-    if (msg_received)
+#if (NFC_HAL_TRACE_PROTOCOL == TRUE)
+    if (msg_received && p_cb->p_rcv_msg)
     {
         /* Display protocol trace message */
-#if (NFC_HAL_TRACE_PROTOCOL == TRUE)
         DispHciEvt (p_cb->p_rcv_msg);
-#endif
     }
+#endif
 
     return (msg_received);
 }
@@ -399,8 +400,8 @@
     if (nfc_hal_cb.ncit_cb.p_rcv_msg)
     {
         p_msg   = nfc_hal_cb.ncit_cb.p_rcv_msg;
-        NCI_TRACE_DEBUG1 ("nfc_hal_nci_proc_rx_bt_msg (): GOT an BT msgs init_sta:%d", nfc_hal_cb.dev_cb.initializing_state);
-        NCI_TRACE_DEBUG2 ("event: 0x%x, wait_rsp:0x%x", p_msg->event, nfc_hal_cb.ncit_cb.nci_wait_rsp);
+        HAL_TRACE_DEBUG1 ("nfc_hal_nci_proc_rx_bt_msg (): GOT an BT msgs init_sta:%d", nfc_hal_cb.dev_cb.initializing_state);
+        HAL_TRACE_DEBUG2 ("event: 0x%x, wait_rsp:0x%x", p_msg->event, nfc_hal_cb.ncit_cb.nci_wait_rsp);
         /* increase the cmd window here */
         if (nfc_hal_cb.ncit_cb.nci_wait_rsp == NFC_HAL_WAIT_RSP_PROP)
         {
@@ -491,7 +492,7 @@
         }
         else
         {
-            NCI_TRACE_ERROR1 ("Unknown packet type drop this byte 0x%x", byte);
+            HAL_TRACE_ERROR1 ("Unknown packet type drop this byte 0x%x", byte);
         }
     }
     else if (p_cb->rcv_state <= NFC_HAL_RCV_NCI_PAYLOAD_ST)
@@ -527,7 +528,7 @@
     UINT8 payload_len;
     UINT16 data_len;
 
-    NCI_TRACE_DEBUG0 ("nfc_hal_nci_preproc_rx_nci_msg()");
+    HAL_TRACE_DEBUG0 ("nfc_hal_nci_preproc_rx_nci_msg()");
 
     /* if initializing BRCM NFCC */
     if (nfc_hal_cb.dev_cb.initializing_state != NFC_HAL_INIT_STATE_IDLE)
@@ -546,12 +547,12 @@
 
         if (mt == NCI_MT_DATA)
         {
-            if (nfc_hal_cb.hci_cb.b_check_clear_all_pipe_cmd)
+            if (nfc_hal_cb.hci_cb.hcp_conn_id)
             {
                 NCI_DATA_PRS_HDR(pp, pbf, cid, data_len);
                 if (cid == nfc_hal_cb.hci_cb.hcp_conn_id)
                 {
-                    nfc_hal_hci_handle_hcp_pkt (pp);
+                    nfc_hal_hci_handle_hcp_pkt_from_hc (pp);
                 }
 
             }
@@ -579,7 +580,7 @@
                         p += 5; /* skip RF disc id, interface, protocol, tech&mode, payload size */
                         if (*p > nfc_hal_cb.max_rf_credits)
                         {
-                            NCI_TRACE_DEBUG2 ("RfDataCredits %d->%d", *p, nfc_hal_cb.max_rf_credits);
+                            HAL_TRACE_DEBUG2 ("RfDataCredits %d->%d", *p, nfc_hal_cb.max_rf_credits);
                             *p = nfc_hal_cb.max_rf_credits;
                         }
                     }
@@ -599,7 +600,6 @@
                         p++; /* skip buff size */
                         p++; /* num of buffers */
                         nfc_hal_cb.hci_cb.hcp_conn_id = *p;
-                        nfc_hal_cb.hci_cb.b_check_clear_all_pipe_cmd = TRUE;
                     }
                 }
             }
@@ -630,7 +630,6 @@
 void nfc_hal_nci_add_nfc_pkt_type (NFC_HDR *p_msg)
 {
     UINT8   *p;
-    BOOLEAN send_to_nfcc = TRUE;
     UINT8   hcit;
 
     /* add packet type in front of NCI header */
@@ -644,7 +643,7 @@
     }
     else
     {
-        NCI_TRACE_ERROR0 ("nfc_hal_nci_add_nfc_pkt_type () : No space for packet type");
+        HAL_TRACE_ERROR0 ("nfc_hal_nci_add_nfc_pkt_type () : No space for packet type");
         hcit = HCIT_TYPE_NFC;
         USERIAL_Write (USERIAL_NFC_PORT, &hcit, 1);
     }
@@ -719,7 +718,9 @@
     UINT8   nci_ctrl_size = nfc_hal_cb.ncit_cb.nci_ctrl_size;
     UINT8   delta = 0;
 
-    nci_brcm_check_cmd_create_hcp_connection ((NFC_HDR*) p_buf);
+    if (  (nfc_hal_cb.hci_cb.hcp_conn_id == 0)
+        &&(nfc_hal_cb.nvm_cb.nvm_type != NCI_SPD_NVM_TYPE_NONE)  )
+        nci_brcm_check_cmd_create_hcp_connection ((NFC_HDR*) p_buf);
 
     /* check low power mode state */
     continue_to_process = nfc_hal_dm_power_mode_execute (NFC_HAL_LP_TX_DATA_EVT);
@@ -745,7 +746,7 @@
     memcpy (hdr, ps, NCI_MSG_HDR_SIZE);
     while (buf_len > max_len)
     {
-        NCI_TRACE_DEBUG2 ("buf_len (%d) > max_len (%d)", buf_len, max_len);
+        HAL_TRACE_DEBUG2 ("buf_len (%d) > max_len (%d)", buf_len, max_len);
         /* the NCI command is bigger than the NFCC Max Control Packet Payload Length
          * fragment the command */
 
@@ -772,7 +773,7 @@
         /* adjust the len and offset to reflect that part of the command is already sent */
         buf_len -= nci_ctrl_size;
         offset  += nci_ctrl_size;
-        NCI_TRACE_DEBUG2 ("p_buf->len: %d buf_len (%d)", p_buf->len, buf_len);
+        HAL_TRACE_DEBUG2 ("p_buf->len: %d buf_len (%d)", p_buf->len, buf_len);
         p_buf->len      = buf_len;
         p_buf->offset   = offset;
         pd   = (UINT8 *) (p_buf + 1) + p_buf->offset;
@@ -782,7 +783,7 @@
         *pd  = (UINT8) (p_buf->len - NCI_MSG_HDR_SIZE);
     }
 
-    NCI_TRACE_DEBUG1 ("p_buf->len: %d", p_buf->len);
+    HAL_TRACE_DEBUG1 ("p_buf->len: %d", p_buf->len);
 
     /* add NCI packet type in front of message */
     nfc_hal_nci_add_nfc_pkt_type (p_buf);
@@ -812,7 +813,7 @@
 {
     TIMER_LIST_ENT  *p_tlent = (TIMER_LIST_ENT *)p_tle;
 
-    NCI_TRACE_DEBUG0 ("nfc_hal_nci_cmd_timeout_cback ()");
+    HAL_TRACE_DEBUG0 ("nfc_hal_nci_cmd_timeout_cback ()");
 
     nfc_hal_cb.ncit_cb.nci_wait_rsp = NFC_HAL_WAIT_RSP_NONE;
 
@@ -866,6 +867,6 @@
 *******************************************************************************/
 void HAL_NfcSetMaxRfDataCredits (UINT8 max_credits)
 {
-    NCI_TRACE_DEBUG2 ("HAL_NfcSetMaxRfDataCredits %d->%d", nfc_hal_cb.max_rf_credits, max_credits);
+    HAL_TRACE_DEBUG2 ("HAL_NfcSetMaxRfDataCredits %d->%d", nfc_hal_cb.max_rf_credits, max_credits);
     nfc_hal_cb.max_rf_credits   = max_credits;
 }
diff --git a/halimpl/bcm2079x/hal/hal/nfc_hal_prm.c b/halimpl/bcm2079x/hal/hal/nfc_hal_prm.c
index d928884..862cdec 100644
--- a/halimpl/bcm2079x/hal/hal/nfc_hal_prm.c
+++ b/halimpl/bcm2079x/hal/hal/nfc_hal_prm.c
@@ -15,6 +15,7 @@
  *  limitations under the License.
  *
  ******************************************************************************/
+
 #include <string.h>
 #include "nfc_hal_int.h"
 #include "userial.h"
@@ -28,16 +29,10 @@
 #define NFC_HAL_PRM_FLAGS_RFU               0x02    /* Reserved for future use */
 #define NFC_HAL_PRM_FLAGS_SIGNATURE_SENT    0x04    /* Signature sent to NFCC */
 #define NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED  0x08    /* PreI2C patch required */
-#define NFC_HAL_PRM_FLAGS_NO_NVM            0x10    /* Not NVM available (patch downloaded to SRAM) */
-#define NFC_HAL_PRM_FLAGS_SUPPORT_RESET_NTF 0x20    /* Support RESET_NTF from NFCC after sending signature */
-#define NFC_HAL_PRM_FLAGS_NVM_FPM_CORRUPTED 0x40    /* FPM patch in NVM failed CRC check */
-#define NFC_HAL_PRM_FLAGS_NVM_LPM_CORRUPTED 0x80    /* LPM patch in NVM failed CRC check */
+#define NFC_HAL_PRM_FLAGS_BCM20791B3        0x10    /* B3 Patch (no RESET_NTF after patch download) */
 
 /* Secure patch download definitions */
 #define NFC_HAL_PRM_NCD_PATCHFILE_HDR_LEN  7       /* PRJID + MAJORVER + MINORVER + COUNT */
-#define NFC_HAL_PRM_NCD_PATCH_VERSION_LEN  16
-
-#define NFC_HAL_PRM_SPD_PRE_DOWNLOAD_DELAY (500)   /* Delay before starting to patch download (in ms) */
 
 /* Enumeration of power modes IDs */
 #define NFC_HAL_PRM_SPD_POWER_MODE_LPM     0
@@ -50,16 +45,8 @@
 #define NFC_HAL_PRM_SPD_TOUT                   (6000)  /* timeout for SPD events (in ms)   */
 #define NFC_HAL_PRM_END_DELAY                  (250)   /* delay before sending any new command (ms)*/
 
-/* command to get currently downloaded patch version */
-static UINT8 nfc_hal_prm_get_patch_version_cmd [NCI_MSG_HDR_SIZE] =
-{
-    NCI_MTS_CMD|NCI_GID_PROP,
-    NCI_MSG_GET_PATCH_VERSION,
-    0x00
-};
-
 #if (NFC_HAL_PRM_DEBUG == TRUE)
-#define NFC_HAL_PRM_STATE(str)  NCI_TRACE_DEBUG2 ("%s st: %d", str, nfc_hal_cb.prm.state)
+#define NFC_HAL_PRM_STATE(str)  HAL_TRACE_DEBUG2 ("%s st: %d", str, nfc_hal_cb.prm.state)
 #else
 #define NFC_HAL_PRM_STATE(str)
 #endif
@@ -69,7 +56,7 @@
 /*****************************************************************************
 ** Extern variable from nfc_hal_dm_cfg.c
 *****************************************************************************/
-extern BOOLEAN nfc_hal_prm_nvm_required;
+extern tNFC_HAL_CFG *p_nfc_hal_cfg;
 
 /*******************************************************************************
 **
@@ -110,7 +97,7 @@
     /* Validate that segment is at least big enought to have NCI_MSG_HDR_SIZE + 1 (hcit) */
     if (nfc_hal_cb.prm.cur_patch_len_remaining < patch_hdr_size)
     {
-        NCI_TRACE_ERROR0 ("Unexpected end of patch.");
+        HAL_TRACE_ERROR0 ("Unexpected end of patch.");
         nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
         return;
     }
@@ -146,12 +133,12 @@
         if (memcmp (NFC_HAL_PRM_BCM20791B3_STR, chipverstr, NFC_HAL_PRM_BCM20791B3_STR_LEN) == 0)
         {
             /* Patch is for BCM2079B3 - do not wait for RESET_NTF after patch download */
-            nfc_hal_cb.prm.flags &= ~NFC_HAL_PRM_FLAGS_SUPPORT_RESET_NTF;
+            nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_BCM20791B3;
         }
         else
         {
             /* Patch is for BCM2079B4 or newer - wait for RESET_NTF after patch download */
-            nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_SUPPORT_RESET_NTF;
+            nfc_hal_cb.prm.flags &= ~NFC_HAL_PRM_FLAGS_BCM20791B3;
         }
     }
 
@@ -189,7 +176,7 @@
         else
         {
             /* Do not need to download this patch. Skip to next patch */
-            NCI_TRACE_DEBUG1 ("Skipping patch for power_mode %i.", nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].power_mode);
+            HAL_TRACE_DEBUG1 ("Skipping patch for power_mode %i.", nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].power_mode);
 
             nfc_hal_cb.prm.spd_cur_patch_idx++;
             if (nfc_hal_cb.prm.spd_cur_patch_idx >= nfc_hal_cb.prm.spd_patch_count)
@@ -215,7 +202,7 @@
 
 
     /* Begin downloading patch */
-    NCI_TRACE_DEBUG1 ("Downloading patch for power_mode %i.", nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].power_mode);
+    HAL_TRACE_DEBUG1 ("Downloading patch for power_mode %i.", nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].power_mode);
     nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_DOWNLOADING;
     nfc_hal_prm_spd_send_next_segment ();
 }
@@ -239,7 +226,7 @@
     UINT16 patchfile_patchsize;
     UINT8 u8;
 
-    NCI_TRACE_DEBUG0 ("Downloading I2C fix...");
+    HAL_TRACE_DEBUG0 ("Downloading I2C fix...");
 
     /* Save pointer and offset of patchfile, so we can resume after downloading the i2c fix */
     nfc_hal_cb.prm.spd_patch_offset = nfc_hal_cb.prm.cur_patch_offset;
@@ -269,7 +256,7 @@
         /* Should only be one patch */
         if (u8 > 1)
         {
-            NCI_TRACE_ERROR1 ("Invalid i2c fix: invalid number of patches (%i)", u8);
+            HAL_TRACE_ERROR1 ("Invalid i2c fix: invalid number of patches (%i)", u8);
             nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
             return;
         }
@@ -292,7 +279,7 @@
     else
     {
         /* ERROR: Bad length for patchfile */
-        NCI_TRACE_ERROR0 ("Invalid i2c fix: unexpected end of patch");
+        HAL_TRACE_ERROR0 ("Invalid i2c fix: unexpected end of patch");
         nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
     }
 }
@@ -311,9 +298,9 @@
 {
     UINT8 *p, *p_start, i;
     UINT32 patchfile_patch_present_mask;
-    UINT16 patchfile_project_id;
+    UINT16 patchfile_project_id = 0;
     UINT16 patchfile_ver_major = 0;
-    UINT16 patchfile_ver_minor;
+    UINT16 patchfile_ver_minor = 0;
     UINT16 patchfile_patchsize;
 
     UINT8  return_code = NFC_HAL_PRM_COMPLETE_EVT;
@@ -340,7 +327,7 @@
 
         if (nfc_hal_cb.prm.spd_patch_count > NFC_HAL_PRM_MAX_PATCH_COUNT)
         {
-            NCI_TRACE_ERROR2 ("Unsupported patchfile (number of patches (%i) exceeds maximum (%i)",
+            HAL_TRACE_ERROR2 ("Unsupported patchfile (number of patches (%i) exceeds maximum (%i)",
                                nfc_hal_cb.prm.spd_patch_count, NFC_HAL_PRM_MAX_PATCH_COUNT);
         }
 
@@ -371,7 +358,7 @@
         nfc_hal_cb.prm.cur_patch_len_remaining -= (UINT16) (p - p_start);       /* Adjust size of patchfile                        */
 
 
-        NCI_TRACE_DEBUG6 ("Patchfile info: ProjID=0x%04x,  Ver=%i.%i, Num patches=%i, PatchMask=0x%08x, PatchSize=%i",
+        HAL_TRACE_DEBUG6 ("Patchfile info: ProjID=0x%04x,  Ver=%i.%i, Num patches=%i, PatchMask=0x%08x, PatchSize=%i",
                            patchfile_project_id, patchfile_ver_major, patchfile_ver_minor,
                            nfc_hal_cb.prm.spd_patch_count, patchfile_patch_present_mask, patchfile_patchsize);
 
@@ -381,34 +368,34 @@
 
 #if (!defined (NFC_HAL_PRM_SKIP_VERSION_CHECK) || (NFC_HAL_PRM_SKIP_VERSION_CHECK == FALSE))
         /* Download the patchfile if no patches in NVM */
-        if ((nfc_hal_cb.prm.spd_project_id == 0) || (nfc_hal_cb.prm.spd_nvm_patch_mask == 0))
+        if ((nfc_hal_cb.nvm_cb.project_id == 0) || !(nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_PATCH_PRESENT))
         {
             /* No patch in NVM, need to download all */
             nfc_hal_cb.prm.spd_patch_needed_mask = patchfile_patch_present_mask;
 
-            NCI_TRACE_DEBUG2 ("No previous patch detected. Downloading patch %i.%i",
+            HAL_TRACE_DEBUG2 ("No previous patch detected. Downloading patch %i.%i",
                               patchfile_ver_major, patchfile_ver_minor);
         }
         /* Skip download if project ID of patchfile does not match NVM */
-        else if (nfc_hal_cb.prm.spd_project_id != patchfile_project_id)
+        else if (nfc_hal_cb.nvm_cb.project_id != patchfile_project_id)
         {
             /* Project IDs mismatch */
-            NCI_TRACE_DEBUG2 ("Patch download skipped: Mismatched Project ID (NVM ProjId: 0x%04x, Patchfile ProjId: 0x%04x)",
-                              nfc_hal_cb.prm.spd_project_id, patchfile_project_id);
+            HAL_TRACE_DEBUG2 ("Patch download skipped: Mismatched Project ID (NVM ProjId: 0x%04x, Patchfile ProjId: 0x%04x)",
+                              nfc_hal_cb.nvm_cb.project_id, patchfile_project_id);
 
             return_code = NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT;
         }
         /* Skip download if version of patchfile older or equal to version in NVM */
         /* unless NVM is corrupted (then don't skip download if patchfile has the same major ver)*/
-        else if (  (nfc_hal_cb.prm.spd_ver_major > patchfile_ver_major)
-                 ||(  (nfc_hal_cb.prm.spd_ver_major == patchfile_ver_major) && (nfc_hal_cb.prm.spd_ver_minor == patchfile_ver_minor)
-                    && !((patchfile_patch_present_mask & ( 1 << NFC_HAL_PRM_SPD_POWER_MODE_LPM)) && (nfc_hal_cb.prm.spd_lpm_patch_size == 0))  /* Do not skip download: patchfile has LPM, but NVM does not */
-                    && !((patchfile_patch_present_mask & ( 1 << NFC_HAL_PRM_SPD_POWER_MODE_FPM)) && (nfc_hal_cb.prm.spd_fpm_patch_size == 0))  /* Do not skip download: patchfile has FPM, but NVM does not */
-                    && !(nfc_hal_cb.prm.flags & (NFC_HAL_PRM_FLAGS_NVM_FPM_CORRUPTED |NFC_HAL_PRM_FLAGS_NVM_LPM_CORRUPTED))  )  )
+        else if (  (nfc_hal_cb.nvm_cb.ver_major > patchfile_ver_major)
+                 ||(  (nfc_hal_cb.nvm_cb.ver_major == patchfile_ver_major) && (nfc_hal_cb.nvm_cb.ver_minor == patchfile_ver_minor)
+                    && !((patchfile_patch_present_mask & ( 1 << NFC_HAL_PRM_SPD_POWER_MODE_LPM)) && (nfc_hal_cb.nvm_cb.lpm_size == 0))  /* Do not skip download: patchfile has LPM, but NVM does not */
+                    && !((patchfile_patch_present_mask & ( 1 << NFC_HAL_PRM_SPD_POWER_MODE_FPM)) && (nfc_hal_cb.nvm_cb.fpm_size == 0))  /* Do not skip download: patchfile has FPM, but NVM does not */
+                    && !(nfc_hal_cb.nvm_cb.flags & (NFC_HAL_NVM_FLAGS_FPM_BAD |NFC_HAL_NVM_FLAGS_LPM_BAD))  )  )
         {
             /* NVM version is newer than patchfile */
-            NCI_TRACE_DEBUG2 ("Patch download skipped. NVM patch (version %i.%i) is newer than the patchfile ",
-                              nfc_hal_cb.prm.spd_ver_major, nfc_hal_cb.prm.spd_ver_minor);
+            HAL_TRACE_DEBUG2 ("Patch download skipped. NVM patch (version %i.%i) is newer than the patchfile ",
+                              nfc_hal_cb.nvm_cb.ver_major, nfc_hal_cb.nvm_cb.ver_minor);
 
             return_code = NFC_HAL_PRM_COMPLETE_EVT;
         }
@@ -418,9 +405,9 @@
         {
             nfc_hal_cb.prm.spd_patch_needed_mask = patchfile_patch_present_mask;
 
-            NCI_TRACE_DEBUG4 ("Downloading patch version: %i.%i (previous version in NVM: %i.%i)...",
+            HAL_TRACE_DEBUG4 ("Downloading patch version: %i.%i (previous version in NVM: %i.%i)...",
                               patchfile_ver_major, patchfile_ver_minor,
-                              nfc_hal_cb.prm.spd_ver_major, nfc_hal_cb.prm.spd_ver_minor);
+                              nfc_hal_cb.nvm_cb.ver_major, nfc_hal_cb.nvm_cb.ver_minor);
         }
 #else   /* NFC_HAL_PRM_SKIP_VERSION_CHECK */
         nfc_hal_cb.prm.spd_patch_needed_mask = patchfile_patch_present_mask;
@@ -429,7 +416,7 @@
     else
     {
         /* Invalid patch file header */
-        NCI_TRACE_ERROR0 ("Invalid patch file header.");
+        HAL_TRACE_ERROR0 ("Invalid patch file header.");
 
         return_code = NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT;
     }
@@ -437,22 +424,24 @@
     /* If we need to download anything, get the first patch to download */
     if (nfc_hal_cb.prm.spd_patch_needed_mask)
     {
-        NCI_TRACE_ERROR4 ("Downloading patch version: %i.%i (previous version in NVM: %i.%i)...",
+        HAL_TRACE_ERROR4 ("Downloading patch version: %i.%i (previous version in NVM: %i.%i)...",
                             patchfile_ver_major, patchfile_ver_minor,
-                            nfc_hal_cb.prm.spd_ver_major, nfc_hal_cb.prm.spd_ver_minor);
+                            nfc_hal_cb.nvm_cb.ver_major, nfc_hal_cb.nvm_cb.ver_minor);
 #if (defined (NFC_HAL_PRE_I2C_PATCH_INCLUDED) && (NFC_HAL_PRE_I2C_PATCH_INCLUDED == TRUE))
         /* Check if I2C patch is needed: if                                     */
         /*      - I2C patch file was provided using HAL_NfcPrmSetI2cPatch, and        */
         /*      -   current patch in NVM has ProjectID=0, or                    */
         /*          FPM is not present or corrupted, or                         */
         /*          or patchfile is major-ver 76+                               */
+        /*          or patchfile is not for B3 (always download for B4 onward)  */
         if (  (nfc_hal_cb.prm_i2c.p_patch)
-            &&(  (nfc_hal_cb.prm.spd_project_id == 0)
-               ||(nfc_hal_cb.prm.spd_fpm_patch_size == 0)
-               ||(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_NVM_FPM_CORRUPTED)
-               ||(patchfile_ver_major >= 76)))
+            &&(  (nfc_hal_cb.nvm_cb.project_id == 0)
+               ||(nfc_hal_cb.nvm_cb.fpm_size == 0)
+               ||(nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_FPM_BAD)
+               ||(patchfile_ver_major >= 76)
+               ||(!(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_BCM20791B3)) ))
         {
-            NCI_TRACE_DEBUG0 ("I2C patch fix required.");
+            HAL_TRACE_DEBUG0 ("I2C patch fix required.");
             nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED;
 
             /* Download i2c fix first */
@@ -476,9 +465,10 @@
     else
     {
         static BOOLEAN firstTime = TRUE;
-        if (firstTime) {
-            NCI_TRACE_ERROR2 ("BCM2079x: NVM patch version is %d.%d",
-                    nfc_hal_cb.prm.spd_ver_major, nfc_hal_cb.prm.spd_ver_minor);
+        if (firstTime)
+        {
+            HAL_TRACE_ERROR2 ("NVM patch version is %d.%d",
+                              nfc_hal_cb.nvm_cb.ver_major, nfc_hal_cb.nvm_cb.ver_minor);
             firstTime = FALSE;
         }
         /* Download complete */
@@ -576,82 +566,8 @@
     /* Skip over NCI header */
     p = p_data + NCI_MSG_HDR_SIZE;
 
-    /* Handle GET_PATCH_VERSION Rsp */
-    if (event == NFC_VS_GET_PATCH_VERSION_EVT)
-    {
-        /* Get project id */
-        STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_project_id, p);
-
-        /* RFU */
-        p++;
-
-        /* Get chip version string */
-        STREAM_TO_UINT8 (u8, p);
-        p += NFC_HAL_PRM_NCD_PATCH_VERSION_LEN;
-
-        /* Get major/minor version */
-        STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_ver_major, p);
-        STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_ver_minor, p);
-        STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_nvm_max_size, p);
-        STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_patch_max_size, p);
-        STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_lpm_patch_size, p);
-        STREAM_TO_UINT16 (nfc_hal_cb.prm.spd_fpm_patch_size, p);
-
-        /* LPMPatchCodeHasBadCRC (if not bad crc, then indicate LPM patch is present in nvm) */
-        STREAM_TO_UINT8 (u8, p);
-        if (!u8)
-        {
-            nfc_hal_cb.prm.spd_nvm_patch_mask |= (1 << NFC_HAL_PRM_SPD_POWER_MODE_LPM);
-        }
-        else
-        {
-            /* LPM patch in NVM fails CRC check */
-            nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_NVM_LPM_CORRUPTED;
-        }
-
-
-        /* FPMPatchCodeHasBadCRC (if not bad crc, then indicate LPM patch is present in nvm) */
-        STREAM_TO_UINT8 (u8, p);
-        if (!u8)
-        {
-            nfc_hal_cb.prm.spd_nvm_patch_mask |= (1 << NFC_HAL_PRM_SPD_POWER_MODE_FPM);
-        }
-        else
-        {
-            /* FPM patch in NVM fails CRC check */
-            nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_NVM_FPM_CORRUPTED;
-        }
-
-        /* Check if downloading patch to RAM only (no NVM) */
-        STREAM_TO_UINT8 (u8, p);
-        if (!u8)
-        {
-            if (nfc_hal_prm_nvm_required)
-            {
-                NCI_TRACE_ERROR0 ("This platform requires NVM and the NVM is not available - Abort");
-                nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_NO_NVM_EVT);
-                return;
-            }
-            nfc_hal_cb.prm.flags |= NFC_HAL_PRM_FLAGS_NO_NVM;
-        }
-
-        /* Get patchfile version number */
-        nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_COMPARE_VERSION;
-
-        if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_USE_PATCHRAM_BUF)
-        {
-            /* If patch is in a buffer, get patch version from buffer */
-            nfc_hal_prm_spd_check_version ();
-        }
-        else
-        {
-            /* Notify adaptation layer to send patch version (via HAL_NfcPrmDownloadContinue) */
-            (nfc_hal_cb.prm.p_cback) (NFC_HAL_PRM_SPD_GET_PATCHFILE_HDR_EVT);
-        }
-
-    }
     /* Handle SECURE_PATCH_DOWNLOAD Rsp */
-    else if (event == NFC_VS_SEC_PATCH_DOWNLOAD_EVT)
+    if (event == NFC_VS_SEC_PATCH_DOWNLOAD_EVT)
     {
         /* Status and error code */
         STREAM_TO_UINT8 (status, p);
@@ -660,9 +576,9 @@
         if (status != NCI_STATUS_OK)
         {
 #if (NFC_HAL_TRACE_VERBOSE == TRUE)
-            NCI_TRACE_ERROR2 ("Patch download failed, reason code=0x%X (%s)", status, nfc_hal_prm_spd_status_str (status));
+            HAL_TRACE_ERROR2 ("Patch download failed, reason code=0x%X (%s)", status, nfc_hal_prm_spd_status_str (status));
 #else
-            NCI_TRACE_ERROR1 ("Patch download failed, reason code=0x%X", status);
+            HAL_TRACE_ERROR1 ("Patch download failed, reason code=0x%X", status);
 #endif
 
             /* Notify application */
@@ -673,10 +589,10 @@
         /* If last segment (SIGNATURE) sent */
         if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_SIGNATURE_SENT)
         {
-            /* Wait for authentication complate (SECURE_PATCH_DOWNLOAD NTF) */
+            /* Wait for authentication complete (SECURE_PATCH_DOWNLOAD NTF), including time to commit to NVM (for BCM43341B0) */
             nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_AUTHENTICATING;
             nfc_hal_main_start_quick_timer (&nfc_hal_cb.prm.timer, 0x00,
-                                            (NFC_HAL_PRM_SPD_TOUT * QUICK_TIMER_TICKS_PER_SEC) / 1000);
+                                            (NFC_HAL_PRM_COMMIT_DELAY * QUICK_TIMER_TICKS_PER_SEC) / 1000);
             return;
         }
         /* Download next segment */
@@ -694,7 +610,7 @@
     /* Handle SECURE_PATCH_DOWNLOAD NTF */
     else if (event == NFC_VS_SEC_PATCH_AUTH_EVT)
     {
-        NCI_TRACE_DEBUG1 ("prm flags:0x%x.", nfc_hal_cb.prm.flags);
+        HAL_TRACE_DEBUG1 ("prm flags:0x%x.", nfc_hal_cb.prm.flags);
         /* Status and error code */
         STREAM_TO_UINT8 (status, p);
         STREAM_TO_UINT8 (u8, p);
@@ -704,7 +620,7 @@
         {
             if (status != NCI_STATUS_OK)
             {
-                NCI_TRACE_ERROR0 ("Patch authentication failed");
+                HAL_TRACE_ERROR0 ("Patch authentication failed");
                 nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_BAD_SIGNATURE_EVT);
                 return;
             }
@@ -712,7 +628,7 @@
 #if (defined (NFC_HAL_PRE_I2C_PATCH_INCLUDED) && (NFC_HAL_PRE_I2C_PATCH_INCLUDED == TRUE))
             if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED)
             {
-                NCI_TRACE_DEBUG1 ("PreI2C patch downloaded...waiting %i ms for NFCC to reboot.", nfc_hal_cb.prm_i2c.prei2c_delay);
+                HAL_TRACE_DEBUG1 ("PreI2C patch downloaded...waiting %i ms for NFCC to reboot.", nfc_hal_cb.prm_i2c.prei2c_delay);
 
                 /* Restore pointers to patchfile */
                 nfc_hal_cb.prm.flags &= ~NFC_HAL_PRM_FLAGS_I2C_FIX_REQUIRED;
@@ -733,18 +649,18 @@
 
 
             /* Wait for NFCC to save the patch to NVM */
-            if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_SUPPORT_RESET_NTF)
+            if (!(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_BCM20791B3))
             {
-                /* 20791B4 or newer - wait for RESET_NTF */
-                post_signature_delay = NFC_HAL_PRM_RESET_NTF_DELAY;
-                NCI_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for RESET NTF...", post_signature_delay);
+                /* 20791B4 or newer - wait for RESET_NTF; including time to commit to NVM (for BCM20791B4+) */
+                post_signature_delay = NFC_HAL_PRM_COMMIT_DELAY;
+                HAL_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for RESET NTF...", post_signature_delay);
 
             }
-            else if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_NO_NVM)
+            else if (nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_NO_NVM)
             {
                 /* No NVM. Wait for NFCC to restart */
                 post_signature_delay = NFC_HAL_PRM_END_DELAY;
-                NCI_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for NFCC to restart...", post_signature_delay);
+                HAL_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for NFCC to restart...", post_signature_delay);
             }
             else
             {
@@ -752,7 +668,7 @@
                 post_signature_delay = nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].len;
                 if (post_signature_delay < nfc_hal_cb.prm.patchram_delay)
                     post_signature_delay = nfc_hal_cb.prm.patchram_delay;
-                NCI_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for NVM update to complete...", post_signature_delay);
+                HAL_TRACE_DEBUG1 ("Patch downloaded and authenticated. Waiting %i ms for NVM update to complete...", post_signature_delay);
             }
 
             nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_AUTH_DONE;
@@ -762,14 +678,19 @@
         }
         else
         {
-            NCI_TRACE_ERROR0 ("Got unexpected SECURE_PATCH_DOWNLOAD NTF");
+            HAL_TRACE_ERROR0 ("Got unexpected SECURE_PATCH_DOWNLOAD NTF");
             nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_EVT);
         }
     }
+    /* Handle NCI_MSG_GET_PATCH_VERSION RSP */
+    else if (event == NFC_VS_GET_PATCH_VERSION_EVT)
+    {
+        nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_COMPLETE_EVT);
+    }
     else
     {
         /* Invalid response from NFCC during patch download */
-        NCI_TRACE_ERROR1 ("Invalid response from NFCC during patch download (opcode=0x%02X)", event);
+        HAL_TRACE_ERROR1 ("Invalid response from NFCC during patch download (opcode=0x%02X)", event);
         nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT);
     }
 
@@ -787,6 +708,13 @@
 *******************************************************************************/
 void nfc_hal_prm_nfcc_ready_to_continue (void)
 {
+    UINT8 get_patch_version_cmd [NCI_MSG_HDR_SIZE] =
+    {
+        NCI_MTS_CMD|NCI_GID_PROP,
+        NCI_MSG_GET_PATCH_VERSION,
+        0x00
+    };
+
     /* Clear the bit for the patch we just downloaded */
     nfc_hal_cb.prm.spd_patch_needed_mask &= ~ ((UINT32) 1 << nfc_hal_cb.prm.spd_patch_desc[nfc_hal_cb.prm.spd_cur_patch_idx].power_mode);
 
@@ -812,8 +740,10 @@
     else
     {
         /* Done downloading */
-        NCI_TRACE_DEBUG0 ("Patch downloaded and authenticated.");
-        nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_COMPLETE_EVT);
+        HAL_TRACE_DEBUG0 ("Patch downloaded and authenticated. Get new patch version.");
+        /* add get patch info again to verify the effective FW version */
+        nfc_hal_dm_send_nci_cmd (get_patch_version_cmd, NCI_MSG_HDR_SIZE, nfc_hal_prm_nci_command_complete_cback);
+        nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_W4_GET_VERSION;
     }
 }
 
@@ -832,19 +762,27 @@
     /* Check if we were expecting a RESET NTF */
     if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_AUTH_DONE)
     {
-        NCI_TRACE_DEBUG2 ("Received RESET NTF after patch download (reset_reason=%i, reset_type=%i)", reset_reason, reset_type);
+        HAL_TRACE_DEBUG2 ("Received RESET NTF after patch download (reset_reason=%i, reset_type=%i)", reset_reason, reset_type);
 
         /* Stop waiting for RESET NTF */
         nfc_hal_main_stop_quick_timer (&nfc_hal_cb.prm.timer);
 
         {
-        /* Continue with patch download */
-        nfc_hal_prm_nfcc_ready_to_continue ();
+            /* Continue with patch download */
+            nfc_hal_prm_nfcc_ready_to_continue ();
+        }
     }
+    else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER)
+    {
+        HAL_TRACE_DEBUG0 ("Received RESET NTF after pre-I2C patch download. Proceeding with patch download...");
+
+        /* Stop waiting for RESET NTF */
+        nfc_hal_main_stop_quick_timer (&nfc_hal_cb.prm.timer);
+        nfc_hal_prm_spd_handle_next_patch_start ();
     }
     else
     {
-        NCI_TRACE_ERROR2 ("Received unexpected RESET NTF (reset_reason=%i, reset_type=%i)", reset_reason, reset_type);
+        HAL_TRACE_ERROR2 ("Received unexpected RESET NTF (reset_reason=%i, reset_type=%i)", reset_reason, reset_type);
     }
 }
 
@@ -881,19 +819,12 @@
 {
     NFC_HAL_PRM_STATE ("nfc_hal_prm_process_timeout");
 
-    if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_IDLE)
+    if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_AUTH_DONE)
     {
-        nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_GET_VERSION;
-
-        /* Get currently downloaded patch version */
-        nfc_hal_dm_send_nci_cmd (nfc_hal_prm_get_patch_version_cmd, NCI_MSG_HDR_SIZE, nfc_hal_prm_nci_command_complete_cback);
-    }
-    else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_AUTH_DONE)
-    {
-        if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_SUPPORT_RESET_NTF)
+        if (!(nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_BCM20791B3))
         {
             /* Timeout waiting for RESET NTF after signature sent */
-            NCI_TRACE_ERROR0 ("Timeout waiting for RESET NTF after patch download");
+            HAL_TRACE_ERROR0 ("Timeout waiting for RESET NTF after patch download");
             nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_EVT);
         }
         else
@@ -903,12 +834,17 @@
     }
     else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER)
     {
-        NCI_TRACE_DEBUG0 ("Delay after PreI2C patch download...proceeding to download firmware patch");
+        HAL_TRACE_DEBUG0 ("Delay after PreI2C patch download...proceeding to download firmware patch");
         nfc_hal_prm_spd_handle_next_patch_start ();
     }
+    else if (nfc_hal_cb.prm.state == NFC_HAL_PRM_ST_W4_GET_VERSION)
+    {
+        HAL_TRACE_DEBUG0 ("get patch version timeout???");
+        nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_COMPLETE_EVT);
+    }
     else
     {
-        NCI_TRACE_ERROR1 ("Patch download: command timeout (state=%i)", nfc_hal_cb.prm.state);
+        HAL_TRACE_ERROR1 ("Patch download: command timeout (state=%i)", nfc_hal_cb.prm.state);
 
         nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_EVT);
     }
@@ -955,7 +891,7 @@
                                  UINT32              patchram_delay,
                                  tNFC_HAL_PRM_CBACK  *p_cback)
 {
-    NCI_TRACE_API0 ("HAL_NfcPrmDownloadStart ()");
+    HAL_TRACE_API0 ("HAL_NfcPrmDownloadStart ()");
 
     memset (&nfc_hal_cb.prm, 0, sizeof (tNFC_HAL_PRM_CB));
 
@@ -984,13 +920,30 @@
         nfc_hal_cb.prm.spd_patch_len_remaining = (UINT16)patchram_len;
         nfc_hal_cb.prm.spd_patch_offset        = 0;
 
-        /* Need delay for controller to finish resetting */
-        nfc_hal_main_start_quick_timer (&nfc_hal_cb.prm.timer, 0x00,
-                                        (NFC_HAL_PRM_SPD_PRE_DOWNLOAD_DELAY * QUICK_TIMER_TICKS_PER_SEC) / 1000);
+        /* If patch download is required, but no NVM is available, then abort */
+        if ((p_nfc_hal_cfg->nfc_hal_prm_nvm_required) && (nfc_hal_cb.nvm_cb.flags & NFC_HAL_NVM_FLAGS_NO_NVM))
+        {
+            HAL_TRACE_ERROR0 ("This platform requires NVM and the NVM is not available - Abort");
+            nfc_hal_prm_spd_handle_download_complete (NFC_HAL_PRM_ABORT_NO_NVM_EVT);
+            return FALSE;
+        }
+
+        /* Compare patch version in NVM with version in patchfile */
+        nfc_hal_cb.prm.state = NFC_HAL_PRM_ST_SPD_COMPARE_VERSION;
+        if (nfc_hal_cb.prm.flags & NFC_HAL_PRM_FLAGS_USE_PATCHRAM_BUF)
+        {
+            /* If patchfile is in a buffer, get patch version from buffer */
+            nfc_hal_prm_spd_check_version ();
+        }
+        else
+        {
+            /* If patchfile is not in a buffer, then request patchfile header from adaptation layer. */
+            (nfc_hal_cb.prm.p_cback) (NFC_HAL_PRM_SPD_GET_PATCHFILE_HDR_EVT);
+        }
     }
     else
     {
-        NCI_TRACE_ERROR0 ("Unexpected patch format.");
+        HAL_TRACE_ERROR0 ("Unexpected patch format.");
         return FALSE;
     }
 
@@ -1016,7 +969,7 @@
 BOOLEAN HAL_NfcPrmDownloadContinue (UINT8 *p_patch_data,
                                     UINT16 patch_data_len)
 {
-    NCI_TRACE_API2 ("HAL_NfcPrmDownloadContinue ():state = %d, patch_data_len=%d",
+    HAL_TRACE_API2 ("HAL_NfcPrmDownloadContinue ():state = %d, patch_data_len=%d",
                      nfc_hal_cb.prm.state, patch_data_len);
 
     /* Check if we are in a valid state for this API */
@@ -1047,7 +1000,7 @@
     }
     else
     {
-        NCI_TRACE_ERROR1 ("Unexpected patch state:%d.", nfc_hal_cb.prm.state);
+        HAL_TRACE_ERROR1 ("Unexpected patch state:%d.", nfc_hal_cb.prm.state);
     }
 
     return TRUE;
@@ -1073,7 +1026,7 @@
 void HAL_NfcPrmSetI2cPatch (UINT8 *p_i2c_patchfile_buf, UINT16 i2c_patchfile_len, UINT32 prei2c_delay)
 {
 #if (defined (NFC_HAL_PRE_I2C_PATCH_INCLUDED) && (NFC_HAL_PRE_I2C_PATCH_INCLUDED == TRUE))
-    NCI_TRACE_API0 ("HAL_NfcPrmSetI2cPatch ()");
+    HAL_TRACE_API0 ("HAL_NfcPrmSetI2cPatch ()");
 
     nfc_hal_cb.prm_i2c.prei2c_delay    = NFC_HAL_PRM_POST_I2C_FIX_DELAY;
     if (prei2c_delay)
@@ -1108,12 +1061,12 @@
     /* Validate: minimum size is NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE */
     if (max_payload_size < NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE)
     {
-        NCI_TRACE_ERROR2 ("HAL_NfcPrmSetSpdNciCmdPayloadSize: invalid size (%i). Must be between %i and 255", max_payload_size, NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE);
+        HAL_TRACE_ERROR2 ("HAL_NfcPrmSetSpdNciCmdPayloadSize: invalid size (%i). Must be between %i and 255", max_payload_size, NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE);
         return (HAL_NFC_STATUS_FAILED);
     }
     else
     {
-        NCI_TRACE_API1 ("HAL_NfcPrmSetSpdNciCmdPayloadSize: new message size during download: %i", max_payload_size);
+        HAL_TRACE_API1 ("HAL_NfcPrmSetSpdNciCmdPayloadSize: new message size during download: %i", max_payload_size);
         nfc_hal_cb.ncit_cb.nci_ctrl_size = max_payload_size;
         return (HAL_NFC_STATUS_OK);
     }
diff --git a/halimpl/bcm2079x/hal/include/gki_hal_target.h b/halimpl/bcm2079x/hal/include/gki_hal_target.h
deleted file mode 100644
index 9a9aec9..0000000
--- a/halimpl/bcm2079x/hal/include/gki_hal_target.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef GKI_HAL_TARGET_H
-#define GKI_HAL_TARGET_H
-
-#ifdef BUILDCFG
-#include "buildcfg_hal.h"
-#endif
-
-#include "data_types.h"
-
-/* Define export prefixes for modules exported by HAL */
-#ifndef GKI_API
-#define GKI_API
-#endif
-
-#ifndef UDRV_API
-#define UDRV_API
-#endif
-
-#ifndef EXPORT_API
-#define EXPORT_API
-#endif
-
-
-/******************************************************************************
-**
-** Task configuration
-**
-******************************************************************************/
-
-/* Definitions of task IDs for inter-task messaging */
-#ifndef NFC_HAL_TASK
-#define NFC_HAL_TASK                0
-#endif
-
-/* The number of GKI tasks in the software system. */
-#ifndef GKI_MAX_TASKS
-#define GKI_MAX_TASKS               1
-#endif
-
-/******************************************************************************
-**
-** Timer configuration
-**
-******************************************************************************/
-
-/* The number of GKI timers in the software system. */
-#ifndef GKI_NUM_TIMERS
-#define GKI_NUM_TIMERS              2
-#endif
-
-/* A conversion value for translating ticks to calculate GKI timer.  */
-#ifndef TICKS_PER_SEC
-#define TICKS_PER_SEC               100
-#endif
-
-/************************************************************************
-**  Utility macros converting ticks to time with user define OS ticks per sec
-**/
-#ifndef GKI_MS_TO_TICKS
-#define GKI_MS_TO_TICKS(x)   ((x) / (1000 / TICKS_PER_SEC))
-#endif
-
-#ifndef GKI_SECS_TO_TICKS
-#define GKI_SECS_TO_TICKS(x)   ((x) * (TICKS_PER_SEC))
-#endif
-
-#ifndef GKI_TICKS_TO_MS
-#define GKI_TICKS_TO_MS(x)   ((x) * 1000 / TICKS_PER_SEC)
-#endif
-
-#ifndef GKI_TICKS_TO_SECS
-#define GKI_TICKS_TO_SECS(x)   ((x) / TICKS_PER_SEC)
-#endif
-
-
-
-/* TICK per second from OS (OS dependent change this macro accordingly to various OS) */
-#ifndef OS_TICKS_PER_SEC
-#define OS_TICKS_PER_SEC               1000
-#endif
-
-/************************************************************************
-**  Utility macros converting ticks to time with user define OS ticks per sec
-**/
-
-#ifndef GKI_OS_TICKS_TO_MS
-#define GKI_OS_TICKS_TO_MS(x)   ((x) * 1000 / OS_TICKS_PER_SEC)
-#endif
-
-
-#ifndef GKI_OS_TICKS_TO_SECS
-#define GKI_OS_TICKS_TO_SECS(x)   ((x) / OS_TICKS_PER_SEC))
-#endif
-
-
-/* delay in ticks before stopping system tick. */
-#ifndef GKI_DELAY_STOP_SYS_TICK
-#define GKI_DELAY_STOP_SYS_TICK     10
-#endif
-
-/* Option to guarantee no preemption during timer expiration (most system don't need this) */
-#ifndef GKI_TIMER_LIST_NOPREEMPT
-#define GKI_TIMER_LIST_NOPREEMPT    FALSE
-#endif
-
-/******************************************************************************
-**
-** Buffer configuration
-**
-******************************************************************************/
-
-/* TRUE if GKI uses dynamic buffers. */
-#ifndef GKI_USE_DYNAMIC_BUFFERS
-#define GKI_USE_DYNAMIC_BUFFERS     FALSE
-#endif
-
-/* The size of the buffers in pool 0. */
-#ifndef GKI_BUF0_SIZE
-#define GKI_BUF0_SIZE               64
-#endif
-
-/* The number of buffers in buffer pool 0. */
-#ifndef GKI_BUF0_MAX
-#define GKI_BUF0_MAX                8
-#endif
-
-/* The ID of buffer pool 0. */
-#ifndef GKI_POOL_ID_0
-#define GKI_POOL_ID_0               0
-#endif
-
-/* The size of the buffers in pool 1. */
-#ifndef GKI_BUF1_SIZE
-#define GKI_BUF1_SIZE               288
-#endif
-
-/* The number of buffers in buffer pool 1. */
-#ifndef GKI_BUF1_MAX
-#define GKI_BUF1_MAX                8
-#endif
-
-/* The ID of buffer pool 1. */
-#ifndef GKI_POOL_ID_1
-#define GKI_POOL_ID_1               1
-#endif
-
-/* The size of the largest PUBLIC fixed buffer in system. */
-#ifndef GKI_MAX_BUF_SIZE
-#define GKI_MAX_BUF_SIZE            GKI_BUF1_SIZE
-#endif
-
-/* The pool ID of the largest PUBLIC fixed buffer in system. */
-#ifndef GKI_MAX_BUF_SIZE_POOL_ID
-#define GKI_MAX_BUF_SIZE_POOL_ID    GKI_POOL_ID_1
-#endif
-
-/* buffer size for USERIAL, it must large enough to hold NFC_HDR and max packet size */
-#ifndef USERIAL_POOL_BUF_SIZE
-#define USERIAL_POOL_BUF_SIZE       GKI_BUF1_SIZE
-#endif
-
-/* buffer pool ID for USERIAL */
-#ifndef USERIAL_POOL_ID
-#define USERIAL_POOL_ID             GKI_POOL_ID_1
-#endif
-
-#ifndef GKI_NUM_FIXED_BUF_POOLS
-#define GKI_NUM_FIXED_BUF_POOLS     2
-#endif
-
-/* The number of fixed and dynamic buffer pools */
-#ifndef GKI_NUM_TOTAL_BUF_POOLS
-#define GKI_NUM_TOTAL_BUF_POOLS     2
-#endif
-
-/* The buffer pool usage mask. */
-#ifndef GKI_DEF_BUFPOOL_PERM_MASK
-#define GKI_DEF_BUFPOOL_PERM_MASK   0xfff0
-#endif
-
-/* The buffer corruption check flag. */
-#ifndef GKI_ENABLE_BUF_CORRUPTION_CHECK
-#define GKI_ENABLE_BUF_CORRUPTION_CHECK TRUE
-#endif
-
-/* The GKI severe error macro. */
-#ifndef GKI_SEVERE
-#define GKI_SEVERE(code)
-#endif
-
-/* TRUE if GKI includes debug functionality. */
-#ifndef GKI_DEBUG
-#define GKI_DEBUG                   FALSE
-#endif
-
-/* Maximum number of exceptions logged. */
-#ifndef GKI_MAX_EXCEPTION
-#define GKI_MAX_EXCEPTION           8
-#endif
-
-/* Maximum number of chars stored for each exception message. */
-#ifndef GKI_MAX_EXCEPTION_MSGLEN
-#define GKI_MAX_EXCEPTION_MSGLEN    64
-#endif
-
-#ifndef GKI_SEND_MSG_FROM_ISR
-#define GKI_SEND_MSG_FROM_ISR    FALSE
-#endif
-
-
-#define GKI_TRACE_0(m)
-#define GKI_TRACE_1(m,p1)
-#define GKI_TRACE_2(m,p1,p2)
-#define GKI_TRACE_3(m,p1,p2,p3)
-#define GKI_TRACE_4(m,p1,p2,p3,p4)
-#define GKI_TRACE_5(m,p1,p2,p3,p4,p5)
-#define GKI_TRACE_6(m,p1,p2,p3,p4,p5,p6)
-
-#define GKI_TRACE_ERROR_0(m)                    LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m)
-#define GKI_TRACE_ERROR_1(m,p1)                 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1)
-#define GKI_TRACE_ERROR_2(m,p1,p2)              LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2)
-#define GKI_TRACE_ERROR_3(m,p1,p2,p3)           LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3)
-#define GKI_TRACE_ERROR_4(m,p1,p2,p3,p4)        LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3,p4)
-#define GKI_TRACE_ERROR_5(m,p1,p2,p3,p4,p5)     LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5)
-#define GKI_TRACE_ERROR_6(m,p1,p2,p3,p4,p5,p6)  LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5,p6)
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-extern void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* GKI_TARGET_H */
diff --git a/halimpl/bcm2079x/hal/include/nci_defs.h b/halimpl/bcm2079x/hal/include/nci_defs.h
deleted file mode 100644
index befffd9..0000000
--- a/halimpl/bcm2079x/hal/include/nci_defs.h
+++ /dev/null
@@ -1,851 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This file contains the definition from NCI specification
- *
- ******************************************************************************/
-
-#ifndef NFC_NCI_DEFS_H
-#define NFC_NCI_DEFS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define NCI_BRCM_CO_ID              0x2E
-
-/* Define the message header size for all NCI Commands and Notifications.
-*/
-#define NCI_MSG_HDR_SIZE        3   /* per NCI spec */
-#define NCI_DATA_HDR_SIZE       3   /* per NCI spec */
-#define NCI_MAX_PAYLOAD_SIZE    0xFE
-#define NCI_MAX_CTRL_SIZE       0xFF/* max control message size */
-#define NCI_CTRL_INIT_SIZE      32  /* initial NFCC control payload size */
-#define NCI_MAX_VSC_SIZE        0xFF
-#define NCI_VSC_MSG_HDR_SIZE    12  /* NCI header (3) + callback function pointer(8; use 8 to be safe) + HCIT (1 byte) */
-#define NCI_TL_SIZE             2
-
-#define NCI_ISO_DEP_MAX_INFO      253   /* Max frame size (256) - Prologue (1) - Epilogue (2) in ISO-DEP, CID and NAD are not used*/
-#define NCI_NFC_DEP_MAX_DATA      251   /* Max payload (254) - Protocol Header (3) in NFC-DEP, DID and NAD are not used */
-
-/* NCI Command and Notification Format:
- * 3 byte message header:
- * byte 0: MT PBF GID
- * byte 1: OID
- * byte 2: Message Length */
-/* MT: Message Type (byte 0) */
-#define NCI_MT_MASK         0xE0
-#define NCI_MT_SHIFT        5
-#define NCI_MT_DATA         0x00
-#define NCI_MT_CMD          1   /* (NCI_MT_CMD << NCI_MT_SHIFT) = 0x20 */
-#define NCI_MT_RSP          2   /* (NCI_MT_RSP << NCI_MT_SHIFT) = 0x40 */
-#define NCI_MT_NTF          3   /* (NCI_MT_NTF << NCI_MT_SHIFT) = 0x60 */
-#define NCI_MT_CFG          4   /* (NCI_MT_CFG << NCI_MT_SHIFT) = 0x80 */
-
-#define NCI_MTS_CMD         0x20
-#define NCI_MTS_RSP         0x40
-#define NCI_MTS_NTF         0x60
-#define NCI_MTS_CFG         0x80
-
-#define NCI_NTF_BIT         0x80     /* the tNFC_VS_EVT is a notification */
-#define NCI_RSP_BIT         0x40     /* the tNFC_VS_EVT is a response     */
-
-/* for internal use only; not from specification */
-/* the following 2 flags are used in layer_specific for fragmentation/reassembly of data packets */
-#define NCI_LS_DATA         0x00
-#define NCI_LS_DATA_PBF     0x01
-
-/* PBF: Packet Boundary Flag (byte 0) */
-#define NCI_PBF_MASK        0x10
-#define NCI_PBF_SHIFT       4
-#define NCI_PBF_NO_OR_LAST  0x00    /* not fragmented or last fragment */
-#define NCI_PBF_ST_CONT     0x10    /* start or continuing fragment */
-
-/* GID: Group Identifier (byte 0) */
-#define NCI_GID_MASK        0x0F
-#define NCI_GID_SHIFT       0
-#define NCI_GID_CORE        0x00    /* 0000b NCI Core group */
-#define NCI_GID_RF_MANAGE   0x01    /* 0001b RF Management group */
-#define NCI_GID_EE_MANAGE   0x02    /* 0010b NFCEE Management group */
-#define NCI_GID_PROP        0x0F    /* 1111b Proprietary */
-/* 0111b - 1110b RFU */
-
-/* OID: Opcode Identifier (byte 1) */
-#define NCI_OID_MASK        0x3F
-#define NCI_OID_SHIFT       0
-
-/* For routing */
-#define NCI_DH_ID               0   /* for DH */
-/* To identify the loopback test */
-#define NCI_TEST_ID             0xFE/* for loopback test */
-
-/* Destination Type */
-#define NCI_DEST_TYPE_NFCC      1   /* NFCC - loopback */
-#define NCI_DEST_TYPE_REMOTE    2   /* Remote NFC Endpoint */
-#define NCI_DEST_TYPE_NFCEE     3   /* NFCEE */
-
-/* builds byte0 of NCI Command and Notification packet */
-#define NCI_MSG_BLD_HDR0(p, mt, gid) \
-    *(p)++ = (UINT8) (((mt) << NCI_MT_SHIFT) | (gid));
-
-#define NCI_MSG_PBLD_HDR0(p, mt, pbf, gid) \
-    *(p)++ = (UINT8) (((mt) << NCI_MT_SHIFT) | ((pbf) << NCI_PBF_SHIFT) | (gid));
-
-/* builds byte1 of NCI Command and Notification packet */
-#define NCI_MSG_BLD_HDR1(p, oid) \
-    *(p)++ = (UINT8) (((oid) << NCI_OID_SHIFT));
-
-/* parse byte0 of NCI packet */
-#define NCI_MSG_PRS_HDR0(p, mt, pbf, gid) \
-    mt = (*(p) & NCI_MT_MASK) >> NCI_MT_SHIFT; \
-    pbf = (*(p) & NCI_PBF_MASK) >> NCI_PBF_SHIFT; \
-    gid = *(p)++ & NCI_GID_MASK;
-
-/* parse MT and PBF bits of NCI packet */
-#define NCI_MSG_PRS_MT_PBF(p, mt, pbf) \
-    mt = (*(p) & NCI_MT_MASK) >> NCI_MT_SHIFT; \
-    pbf = (*(p) & NCI_PBF_MASK) >> NCI_PBF_SHIFT;
-
-/* parse byte1 of NCI Cmd/Ntf */
-#define NCI_MSG_PRS_HDR1(p, oid) \
-    oid = (*(p) & NCI_OID_MASK); (p)++;
-
-/* NCI Data Format:
- * byte 0: MT(0) PBF CID
- * byte 1: RFU
- * byte 2: Data Length */
-/* CID: Connection Identifier (byte 0) 1-0xF Dynamically assigned (by NFCC), 0 is predefined  */
-#define NCI_CID_MASK        0x0F
-
-/* builds 3-byte message header of NCI Data packet */
-#define NCI_DATA_BLD_HDR(p, cid, len) \
-    *(p)++ = (UINT8) (cid); *(p)++ = 0; *(p)++ = (UINT8) (len);
-
-#define NCI_DATA_PBLD_HDR(p, pbf, cid, len) \
-    *(p)++ = (UINT8) (((pbf) << NCI_PBF_SHIFT) | (cid)); *(p)++=0; *(p)++ = (len);
-
-#define NCI_DATA_PRS_HDR(p, pbf, cid, len) \
-    (pbf) = (*(p) & NCI_PBF_MASK) >> NCI_PBF_SHIFT; (cid) = (*(p) & NCI_CID_MASK); p++; p++; (len) = *(p)++;
-
-
-/* Logical target ID 0x01-0xFE */
-
-
-
-/* Status Codes */
-#define NCI_STATUS_OK                   0x00
-#define NCI_STATUS_REJECTED             0x01
-#define NCI_STATUS_MESSAGE_CORRUPTED    0x02
-#define NCI_STATUS_BUFFER_FULL          0xE0
-#define NCI_STATUS_FAILED               0x03
-#define NCI_STATUS_NOT_INITIALIZED      0x04
-#define NCI_STATUS_SYNTAX_ERROR         0x05
-#define NCI_STATUS_SEMANTIC_ERROR       0x06
-#define NCI_STATUS_UNKNOWN_GID          0x07
-#define NCI_STATUS_UNKNOWN_OID          0x08
-#define NCI_STATUS_INVALID_PARAM        0x09
-#define NCI_STATUS_MSG_SIZE_TOO_BIG     0x0A
-/* discovery */
-#define NCI_STATUS_ALREADY_STARTED      0xA0
-#define NCI_STATUS_ACTIVATION_FAILED    0xA1
-#define NCI_STATUS_TEAR_DOWN            0xA2
-/* RF Interface */
-#define NCI_STATUS_RF_TRANSMISSION_ERR  0xB0
-#define NCI_STATUS_RF_PROTOCOL_ERR      0xB1
-#define NCI_STATUS_TIMEOUT              0xB2
-/* NFCEE Interface */
-#define NCI_STATUS_EE_INTF_ACTIVE_FAIL  0xC0
-#define NCI_STATUS_EE_TRANSMISSION_ERR  0xC1
-#define NCI_STATUS_EE_PROTOCOL_ERR      0xC2
-#define NCI_STATUS_EE_TIMEOUT           0xC3
-
-
-typedef UINT8 tNCI_STATUS;
-
-/* RF Technologies */
-#define NCI_RF_TECHNOLOGY_A             0x00
-#define NCI_RF_TECHNOLOGY_B             0x01
-#define NCI_RF_TECHNOLOGY_F             0x02
-#define NCI_RF_TECHNOLOGY_15693         0x03
-
-/* Bit Rates */
-#define NCI_BIT_RATE_106                0x00/* 106 kbit/s */
-#define NCI_BIT_RATE_212                0x01/* 212 kbit/s */
-#define NCI_BIT_RATE_424                0x02/* 424 kbit/s */
-#define NCI_BIT_RATE_848                0x03/* 848 Kbit/s */
-#define NCI_BIT_RATE_1696               0x04/* 1696 Kbit/s*/
-#define NCI_BIT_RATE_3392               0x05/* 3392 Kbit/s*/
-#define NCI_BIT_RATE_6784               0x06/* 6784 Kbit/s*/
-
-/**********************************************
- * NCI Core Group Opcode        - 0
- **********************************************/
-#define NCI_MSG_CORE_RESET              0
-#define NCI_MSG_CORE_INIT               1
-#define NCI_MSG_CORE_SET_CONFIG         2
-#define NCI_MSG_CORE_GET_CONFIG         3
-#define NCI_MSG_CORE_CONN_CREATE        4
-#define NCI_MSG_CORE_CONN_CLOSE         5
-#define NCI_MSG_CORE_CONN_CREDITS       6
-#define NCI_MSG_CORE_GEN_ERR_STATUS     7
-#define NCI_MSG_CORE_INTF_ERR_STATUS    8
-
-/**********************************************
- * RF MANAGEMENT Group Opcode    - 1
- **********************************************/
-#define NCI_MSG_RF_DISCOVER_MAP         0
-#define NCI_MSG_RF_SET_ROUTING          1
-#define NCI_MSG_RF_GET_ROUTING          2
-#define NCI_MSG_RF_DISCOVER             3
-#define NCI_MSG_RF_DISCOVER_SELECT      4
-#define NCI_MSG_RF_INTF_ACTIVATED       5
-#define NCI_MSG_RF_DEACTIVATE           6
-#define NCI_MSG_RF_FIELD                7
-#define NCI_MSG_RF_T3T_POLLING          8
-#define NCI_MSG_RF_EE_ACTION            9
-#define NCI_MSG_RF_EE_DISCOVERY_REQ     10
-#define NCI_MSG_RF_PARAMETER_UPDATE     11
-
-/**********************************************
- * NFCEE MANAGEMENT Group Opcode - 2
- **********************************************/
-#define NCI_MSG_NFCEE_DISCOVER          0
-#define NCI_MSG_NFCEE_MODE_SET          1
-
-/**********************************************
- * NCI Proprietary  Group       - F
- **********************************************/
-
-/**********************************************
- * NCI Core Group Params
- **********************************************/
-#define NCI_CORE_PARAM_SIZE_RESET       0x01
-#define NCI_CORE_PARAM_SIZE_RESET_RSP   0x03
-#define NCI_CORE_PARAM_SIZE_RESET_NTF   0x02
-
-#define NCI_CORE_PARAM_SIZE_INIT        0x00 /* no payload */
-#define NCI_CORE_PARAM_SIZE_INIT_RSP    0x11
-#define NCI_CORE_INIT_RSP_OFFSET_NUM_INTF   0x05
-
-#define NCI_CORE_PARAM_SIZE_SET_CONFIG_RSP   0x02    /* Status (1 octet) and number of params */
-
-
-/* octet 0 */
-#define NCI_FEAT_DISCOVERY_FREG     0x00000001
-#define NCI_FEAT_DISCOVERY_CFGM     0x00000006
-/* octet 1 */
-#define NCI_FEAT_TECHNOLOGY_ROUTING 0x00000200
-#define NCI_FEAT_PROTOCOL_ROUTING   0x00000400
-#define NCI_FEAT_AID_ROUTING        0x00000800
-/* octet 2 */
-#define NCI_FEAT_BATTERY_OFF_MD     0x00010000
-#define NCI_FEAT_SWITCH_OFF_MD      0x00020000
-
-
-/* supported Interfaces */
-#define NCI_SUP_INTF_FRAME           0x0001
-#define NCI_SUP_INTF_ISO_DEP         0x0002
-#define NCI_SUP_INTF_NFC_DEP         0x0004
-
-
-
-#define NCI_CORE_PARAM_SIZE_CON_CREATE      0x02 /* handle, num_tlv, (tlv) */
-#define NCI_CORE_PARAM_SIZE_CON_CREATE_RSP  0x04 /* status, size, credits, conn_id */
-#define NCI_CON_CREATE_TAG_EE_INTF          0x00 /* old */
-#define NCI_CON_CREATE_TAG_RF_DISC_ID       0x00
-#define NCI_CON_CREATE_TAG_NFCEE_VAL        0x01
-
-#define NCI_CORE_PARAM_SIZE_CON_CLOSE       0x01 /* Conn ID (1 octet) */
-#define NCI_CORE_PARAM_SIZE_CON_CLOSE_RSP   0x01 /* Status (1 octet) */
-
-#define NCI_CORE_PARAM_SIZE_RF_FIELD_NTF            0x01 /* RF Field Status (1 octet) */
-
-#define NCI_RESET_TYPE_KEEP_CFG         0x00  /* Keep the NCI configuration (if possible) and perform NCI initialization. */
-#define NCI_RESET_TYPE_RESET_CFG        0x01  /* Reset the NCI configuration, and perform NCI initialization. */
-
-#define NCI_RESET_STATUS_KEPT_CFG       0x00  /* NCI Configuration has been kept  */
-#define NCI_RESET_STATUS_RESET_CFG      0x01  /* NCI Configuration has been reset */
-
-#define NCI_RF_STS_NO_REMOTE    0x00 /* No operating field generated by remote device  */
-#define NCI_RF_STS_REMOTE       0x01 /* Operating field generated by remote device  */
-
-
-#define NCI_PARAM_SIZE_DISCOVER_NFCEE      0x01 /* Discovery Action (1 octet) */
-#define NCI_PARAM_SIZE_DISCOVER_NFCEE_RSP  0x02 /* Status (1 octet)Number of NFCEEs (1 octet) */
-
-#define NCI_DISCOVER_ACTION_DISABLE     0
-#define NCI_DISCOVER_ACTION_ENABLE      1
-
-#define NCI_EE_DISCOVER_REQ_TYPE_LISTEN     0x01
-#define NCI_EE_DISCOVER_REQ_TYPE_POLL       0x02
-
-#define NCI_RF_PARAM_ID_TECH_N_MODE     0x00  /* RF Technology and Mode   */
-#define NCI_RF_PARAM_ID_TX_BIT_RATE     0x01  /* Transmit Bit Rate        */
-#define NCI_RF_PARAM_ID_RX_BIT_RATE     0x02  /* Receive Bit Rate         */
-#define NCI_RF_PARAM_ID_B_DATA_EX_PARAM 0x03  /* B Data Exchange config param */
-
-
-#define NCI_NFCEE_INTERFACE_APDU         0x00
-#define NCI_NFCEE_INTERFACE_HCI_ACCESS   0x01
-#define NCI_NFCEE_INTERFACE_T3T          0x02
-#define NCI_NFCEE_INTERFACE_TRANSPARENT  0x03
-#define NCI_NFCEE_INTERFACE_PROPRIETARY  0x80
-
-#define NCI_NFCEE_STS_CONN_ACTIVE       0x00
-#define NCI_NFCEE_STS_CONN_INACTIVE     0x01
-#define NCI_NFCEE_STS_REMOVED           0x02
-#define NCI_NUM_NFCEE_STS               3
-
-#define NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET      0x02 /* Logical Target ID (1 octet)NFCEE Mode (1 octet) */
-#define NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET_RSP  0x01 /* Status (1 octet) */
-
-#define NCI_NFCEE_MD_DEACTIVATE         0x00    /* Deactivate the connected NFCEE */
-#define NCI_NFCEE_MD_ACTIVATE           0x01    /* Activate the connected NFCEE */
-#define NCI_NUM_NFCEE_MODE              2
-
-/**********************************************
- * NCI Deactivation Type
- **********************************************/
-#define NCI_DEACTIVATE_TYPE_IDLE        0   /* Idle Mode     */
-#define NCI_DEACTIVATE_TYPE_SLEEP       1   /* Sleep Mode    */
-#define NCI_DEACTIVATE_TYPE_SLEEP_AF    2   /* Sleep_AF Mode */
-#define NCI_DEACTIVATE_TYPE_DISCOVERY   3   /* Discovery     */
-
-/**********************************************
- * NCI Deactivation Reasons
- **********************************************/
-#define NCI_DEACTIVATE_REASON_DH_REQ        0   /* DH Request       */
-#define NCI_DEACTIVATE_REASON_ENDPOINT_REQ  1   /* Endpoint Request */
-#define NCI_DEACTIVATE_REASON_RF_LINK_LOSS  2   /* RF Link Loss     */
-#define NCI_DEACTIVATE_REASON_NFCB_BAD_AFI  3   /* NFC-B Bad AFI    */
-
- /**********************************************
- * NCI Interface Mode
- **********************************************/
-#define NCI_INTERFACE_MODE_POLL             1
-#define NCI_INTERFACE_MODE_LISTEN           2
-#define NCI_INTERFACE_MODE_POLL_N_LISTEN    3
-
-/**********************************************
- * NCI Interface Types
- **********************************************/
-#define NCI_INTERFACE_EE_DIRECT_RF      0
-#define NCI_INTERFACE_FRAME             1
-#define NCI_INTERFACE_ISO_DEP           2
-#define NCI_INTERFACE_NFC_DEP           3
-#define NCI_INTERFACE_MAX               NCI_INTERFACE_NFC_DEP
-#define NCI_INTERFACE_FIRST_VS          0x80
-typedef UINT8 tNCI_INTF_TYPE;
-
-/**********************************************
- * NCI RF Management / DISCOVERY Group Params
- **********************************************/
-#define NCI_DISCOVER_PARAM_SIZE_RSP     0x01
-
-#define NCI_DISCOVER_PARAM_SIZE_SELECT      0x03 /* ID, protocol, interface */
-#define NCI_DISCOVER_PARAM_SIZE_SELECT_RSP  0x01 /* Status (1 octet) */
-#define NCI_DISCOVER_PARAM_SIZE_STOP        0x00 /*  */
-#define NCI_DISCOVER_PARAM_SIZE_STOP_RSP    0x01 /* Status (1 octet) */
-#define NCI_DISCOVER_PARAM_SIZE_DEACT       0x01 /* type */
-#define NCI_DISCOVER_PARAM_SIZE_DEACT_RSP   0x01 /* Status (1 octet) */
-#define NCI_DISCOVER_PARAM_SIZE_DEACT_NTF   0x01 /* type */
-
-/**********************************************
- * Supported Protocols
- **********************************************/
-#define NCI_PROTOCOL_UNKNOWN            0x00
-#define NCI_PROTOCOL_T1T                0x01
-#define NCI_PROTOCOL_T2T                0x02
-#define NCI_PROTOCOL_T3T                0x03
-#define NCI_PROTOCOL_ISO_DEP            0x04
-#define NCI_PROTOCOL_NFC_DEP            0x05
-/**********************************************
- * Proprietary Protocols
- **********************************************/
-#ifndef NCI_PROTOCOL_18092_ACTIVE
-#define NCI_PROTOCOL_18092_ACTIVE       0x80
-#endif
-#ifndef NCI_PROTOCOL_B_PRIME
-#define NCI_PROTOCOL_B_PRIME            0x81
-#endif
-#ifndef NCI_PROTOCOL_DUAL
-#define NCI_PROTOCOL_DUAL               0x82
-#endif
-#ifndef NCI_PROTOCOL_15693
-#define NCI_PROTOCOL_15693              0x83
-#endif
-#ifndef NCI_PROTOCOL_KOVIO
-#define NCI_PROTOCOL_KOVIO              0x8a
-#endif
-
-
-/* Discovery Types/Detected Technology and Mode */
-#define NCI_DISCOVERY_TYPE_POLL_A               0x00
-#define NCI_DISCOVERY_TYPE_POLL_B               0x01
-#define NCI_DISCOVERY_TYPE_POLL_F               0x02
-#define NCI_DISCOVERY_TYPE_POLL_A_ACTIVE        0x03
-#define NCI_DISCOVERY_TYPE_POLL_F_ACTIVE        0x05
-#define NCI_DISCOVERY_TYPE_POLL_B_PRIME         0x74
-#define NCI_DISCOVERY_TYPE_POLL_KOVIO           0x77
-#define NCI_DISCOVERY_TYPE_LISTEN_A             0x80
-#define NCI_DISCOVERY_TYPE_LISTEN_B             0x81
-#define NCI_DISCOVERY_TYPE_LISTEN_F             0x82
-#define NCI_DISCOVERY_TYPE_LISTEN_A_ACTIVE      0x83
-#define NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE      0x85
-#define NCI_DISCOVERY_TYPE_LISTEN_B_PRIME       0xF4
-#define NCI_DISCOVERY_TYPE_POLL_ISO15693        0x06
-#define NCI_DISCOVERY_TYPE_LISTEN_ISO15693      0x86
-#define NCI_DISCOVERY_TYPE_MAX  NCI_DISCOVERY_TYPE_LISTEN_ISO15693
-
-typedef UINT8 tNCI_DISCOVERY_TYPE;
-
-#define NCI_EE_TRIG_7816_SELECT         0x00
-#define NCI_EE_TRIG_RF_PROTOCOL         0x01
-#define NCI_EE_TRIG_RF_TECHNOLOGY       0x02
-#define NCI_EE_TRIG_APP_INIT            0x10
-
-#define NCI_EE_ACT_TAG_AID              0xC0        /* AID                 */
-#define NCI_EE_ACT_TAG_PROTO            0xC1        /* RF protocol         */
-#define NCI_EE_ACT_TAG_TECH             0xC2        /* RF technology       */
-#define NCI_EE_ACT_TAG_DATA             0xC3        /* hex data for app    */
-#define NCI_EE_ACT_TAG_DEBUG            0xC4        /* debug trace         */
-
-#define NCI_ROUTE_TAG_TECH              0x00        /* Technology based routing  */
-#define NCI_ROUTE_TAG_PROTO             0x01        /* Protocol based routing  */
-#define NCI_ROUTE_TAG_AID               0x02        /* AID routing */
-
-#define NCI_ROUTE_PWR_STATE_ON          0x01        /* The device is on */
-#define NCI_ROUTE_PWR_STATE_SWITCH_OFF  0x02        /* The device is switched off */
-#define NCI_ROUTE_PWR_STATE_BATT_OFF    0x04        /* The device's battery is removed */
-
-#define NCI_NFCEE_TAG_HW_ID             0x00       /* Hardware / Registration Identification  */
-#define NCI_NFCEE_TAG_ATR_BYTES         0x01       /* ATR Bytes  */
-#define NCI_NFCEE_TAG_T3T_INFO          0x02       /* T3T Command Set Interface Supplementary Info */
-#define NCI_NFCEE_TAG_HCI_HOST_ID       0xA0       /* HCI host ID */
-
-#define NCI_DISCOVER_NTF_LAST           0x00
-#define NCI_DISCOVER_NTF_LAST_ABORT     0x01
-#define NCI_DISCOVER_NTF_MORE           0x02
-
-
-/* NCI RF Management Group Params */
-#define NCI_RF_PARAM_SIZE_T3T_POLLING   0x04        /* System Code, RC, TSN */
-
-/**********************************************
- * NCI Parameter IDs
- **********************************************/
-
-#define NCI_PARAM_ID_TOTAL_DURATION     0x00
-#define NCI_PARAM_ID_CON_DEVICES_LIMIT  0x01
-#define NCI_PARAM_ID_PA_BAILOUT         0x08
-#define NCI_PARAM_ID_PB_AFI             0x10
-#define NCI_PARAM_ID_PB_BAILOUT         0x11
-#define NCI_PARAM_ID_PB_ATTRIB_PARAM1   0x12
-#define NCI_PARAM_ID_PF_BIT_RATE        0x18
-#define NCI_PARAM_ID_PB_H_INFO          0x20
-#define NCI_PARAM_ID_PI_BIT_RATE        0x21
-
-#define NCI_PARAM_ID_BITR_NFC_DEP       0x28
-#define NCI_PARAM_ID_ATR_REQ_GEN_BYTES  0x29
-#define NCI_PARAM_ID_ATR_REQ_CONFIG     0x2A
-
-#define NCI_PARAM_ID_LA_BIT_FRAME_SDD   0x30
-#define NCI_PARAM_ID_LA_PLATFORM_CONFIG 0x31
-#define NCI_PARAM_ID_LA_SEL_INFO        0x32
-#define NCI_PARAM_ID_LA_NFCID1          0x33
-#define NCI_PARAM_ID_LB_SENSB_INFO      0x38
-#define NCI_PARAM_ID_LB_NFCID0          0x39
-#define NCI_PARAM_ID_LB_APPDATA         0x3A
-#define NCI_PARAM_ID_LB_SFGI            0x3B
-#define NCI_PARAM_ID_LB_ADC_FO          0x3C
-#define NCI_PARAM_ID_LB_PROTOCOL        NCI_PARAM_ID_LB_SENSB_INFO
-
-#define NCI_PARAM_ID_LF_T3T_ID1         0x40
-#define NCI_PARAM_ID_LF_T3T_ID2         0x41
-#define NCI_PARAM_ID_LF_T3T_ID3         0x42
-#define NCI_PARAM_ID_LF_T3T_ID4         0x43
-#define NCI_PARAM_ID_LF_T3T_ID5         0x44
-#define NCI_PARAM_ID_LF_T3T_ID6         0x45
-#define NCI_PARAM_ID_LF_T3T_ID7         0x46
-#define NCI_PARAM_ID_LF_T3T_ID8         0x47
-#define NCI_PARAM_ID_LF_T3T_ID9         0x48
-#define NCI_PARAM_ID_LF_T3T_ID10        0x49
-#define NCI_PARAM_ID_LF_T3T_ID11        0x4A
-#define NCI_PARAM_ID_LF_T3T_ID12        0x4B
-#define NCI_PARAM_ID_LF_T3T_ID13        0x4C
-#define NCI_PARAM_ID_LF_T3T_ID14        0x4D
-#define NCI_PARAM_ID_LF_T3T_ID15        0x4E
-#define NCI_PARAM_ID_LF_T3T_ID16        0x4F
-#define NCI_PARAM_ID_LF_PROTOCOL        0x50
-#define NCI_PARAM_ID_LF_T3T_PMM         0x51
-#define NCI_PARAM_ID_LF_T3T_MAX         0x52    /* max num of LF_T3T_ID supported by NFCC (1 for now) */
-#define NCI_PARAM_ID_LF_T3T_FLAGS2      0x53
-#define NCI_PARAM_ID_LF_CON_BITR_F      0x54
-#define NCI_PARAM_ID_FWI                0x58
-#define NCI_PARAM_ID_LA_HIST_BY         0x59
-#define NCI_PARAM_ID_LB_H_INFO_RSP      0x5A
-#define NCI_PARAM_ID_LI_BIT_RATE        0x5B
-
-#define NCI_PARAM_ID_WT                 0x60
-#define NCI_PARAM_ID_ATR_RES_GEN_BYTES  0x61
-#define NCI_PARAM_ID_ATR_RSP_CONFIG     0x62
-
-#define NCI_PARAM_ID_RF_FIELD_INFO      0x80
-#define NCI_PARAM_ID_RF_NFCEE_ACTION    0x81
-#define NCI_PARAM_ID_NFC_DEP_OP         0x82
-
-
-
-/* NCI_PARAM_ID_HOST_LISTEN_MASK (byte1 for DH, byte2 for UICC) */
-#define NCI_LISTEN_MASK_A               0x01 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_A_PASSIVE & 0x0F)) */
-#define NCI_LISTEN_MASK_B               0x02 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_B_PASSIVE & 0x0F)) */
-#define NCI_LISTEN_MASK_F               0x04 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_F_PASSIVE & 0x0F)) */
-#define NCI_LISTEN_MASK_A_ACTIVE        0x08 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_A_ACTIVE & 0x0F))  */
-#define NCI_LISTEN_MASK_B_PRIME         0x10 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_B_PRIME & 0x0F))   */
-#define NCI_LISTEN_MASK_F_ACTIVE        0x20 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_F_ACTIVE & 0x0F))  */
-#define NCI_LISTEN_MASK_ISO15693        0x40 /* (0x01 << (NCI_DISCOVERY_TYPE_LISTEN_ISO15693 & 0x0F))  */
-
-/* Type A Parameters */
-#define NCI_PARAM_PLATFORM_T1T      0x0C
-#define NCI_PARAM_SEL_INFO_ISODEP   0x20
-#define NCI_PARAM_SEL_INFO_NFCDEP   0x40
-/**********************************************
- * NCI Parameter ID Lens
- **********************************************/
-#define NCI_PARAM_LEN_TOTAL_DURATION        2
-
-#define NCI_PARAM_LEN_PA_FSDI               1
-
-#define NCI_PARAM_LEN_LA_BIT_FRAME_SDD      1
-#define NCI_PARAM_LEN_LA_PLATFORM_CONFIG    1
-#define NCI_PARAM_LEN_LA_SEL_INFO           1
-
-#define NCI_PARAM_LEN_LB_SENSB_INFO         1
-#define NCI_PARAM_LEN_LB_NFCID0             4
-#define NCI_PARAM_LEN_LB_APPDATA            4
-#define NCI_PARAM_LEN_LB_ADC_FO             1
-
-#define NCI_PARAM_LEN_LF_PROTOCOL           1
-#define NCI_PARAM_LEN_LF_T3T_FLAGS2         2
-#define NCI_PARAM_LEN_LF_T3T_PMM            8
-#define NCI_PARAM_LEN_LF_T3T_ID            10
-
-#define NCI_PARAM_LEN_FWI                   1
-#define NCI_PARAM_LEN_WT                    1
-/* GEN_BYTES - variable */
-
-/* Listen protocol bits - NCI_PARAM_ID_LF_PROTOCOL and NCI_PARAM_ID_LB_SENSB_INFO */
-#define NCI_LISTEN_PROTOCOL_ISO_DEP     0x01
-#define NCI_LISTEN_PROTOCOL_NFC_DEP     0x02
-
-#define NCI_DISCOVER_PARAM_SIZE_TEST_RF       0x06
-
-
-/* LF_T3T_FLAGS2 listen bits all-disabled definition */
-#define NCI_LF_T3T_FLAGS2_ALL_DISABLED  0x0000
-#define NCI_LF_T3T_FLAGS2_ID1_ENABLED   0x0001
-
-typedef struct
-{
-    UINT16              addr;
-    UINT8               len;
-    UINT8               *data;
-} NCIP_T1T_SETMEM_CMD_t;
-
-typedef struct
-{
-    UINT8               status;
-} NCIP_T1T_SETMEM_RSP_t;
-
-typedef struct
-{
-    UINT16              addr;
-} NCIP_T1T_GETMEM_CMD_t;
-
-typedef struct
-{
-    UINT8               status;
-    UINT8               *data;
-} NCIP_T1T_GETMEM_RSP_t;
-
-typedef struct
-{
-    UINT8               hr0;
-    UINT8               hr1;
-} NCIP_T1T_SETHR_CMD_t;
-
-typedef struct
-{
-    UINT8               status;
-} NCIP_T1T_SETHR_RSP_t;
-
-
-#ifndef NCI_GET_CMD_BUF
-#if (!defined (HCI_USE_VARIABLE_SIZE_CMD_BUF) || (HCI_USE_VARIABLE_SIZE_CMD_BUF == FALSE))
-/* Allocate fixed-size buffer from HCI_CMD_POOL (default case) */
-#define NCI_GET_CMD_BUF(paramlen)    ((BT_HDR *) GKI_getpoolbuf (NFC_NCI_POOL_ID))
-#else
-/* Allocate smallest possible buffer (for platforms with limited RAM) */
-#define NCI_GET_CMD_BUF(paramlen)    ((BT_HDR *) GKI_getbuf ((UINT16) (BT_HDR_SIZE + NCI_MSG_HDR_SIZE + NCI_MSG_OFFSET_SIZE + (paramlen))))
-#endif
-#endif  /* NCI_GET_CMD_BUF */
-
-
-#define NCI_MAX_AID_LEN     16
-
-
-typedef struct
-{
-    UINT8   type;
-    UINT8   frequency;
-} tNCI_DISCOVER_PARAMS;
-
-typedef struct
-{
-    UINT8   protocol;
-    UINT8   mode;
-    UINT8   intf_type;
-} tNCI_DISCOVER_MAPS;
-
-#define NCI_NFCID1_MAX_LEN    10
-typedef struct
-{
-    UINT8       sens_res[2];/* SENS_RES Response (ATQA). Available after Technology Detection */
-    UINT8       nfcid1_len;    /* 4, 7 or 10 */
-    UINT8       nfcid1[NCI_NFCID1_MAX_LEN]; /* AKA NFCID1 */
-    UINT8       sel_rsp;    /* SEL_RSP (SAK) Available after Collision Resolution */
-} tNCI_RF_PA_PARAMS;
-
-
-#define NCI_MAX_SENSB_RES_LEN       12
-typedef struct
-{
-    UINT8       sensb_res_len;/* Length of SENSB_RES Response (Byte 2 - Byte 12 or 13) Available after Technology Detection */
-    UINT8       sensb_res[NCI_MAX_SENSB_RES_LEN]; /* SENSB_RES Response (ATQ) */
-} tNCI_RF_PB_PARAMS;
-
-#define NCI_MAX_SENSF_RES_LEN       18
-#define NCI_SENSF_RES_OFFSET_PAD0   8
-#define NCI_SENSF_RES_OFFSET_RD     16
-#define NCI_NFCID2_LEN              8
-#define NCI_T3T_PMM_LEN             8
-#define NCI_SYSTEMCODE_LEN          2
-#define NCI_RF_F_UID_LEN            NCI_NFCID2_LEN
-#define NCI_MRTI_CHECK_INDEX        13
-#define NCI_MRTI_UPDATE_INDEX       14
-typedef struct
-{
-    UINT8       bit_rate;/* NFC_BIT_RATE_212 or NFC_BIT_RATE_424 */
-    UINT8       sensf_res_len;/* Length of SENSF_RES Response (Byte 2 - Byte 17 or 19) Available after Technology Detection */
-    UINT8       sensf_res[NCI_MAX_SENSF_RES_LEN]; /* SENSB_RES Response */
-} tNCI_RF_PF_PARAMS;
-
-typedef struct
-{
-    UINT8       nfcid2[NCI_NFCID2_LEN];  /* NFCID2 generated by the Local NFCC for NFC-DEP Protocol.Available for Frame Interface  */
-} tNCI_RF_LF_PARAMS;
-
-typedef struct
-{
-    tNCI_DISCOVERY_TYPE     mode;
-    union
-    {
-        tNCI_RF_PA_PARAMS   pa;
-        tNCI_RF_PB_PARAMS   pb;
-        tNCI_RF_PF_PARAMS   pf;
-        tNCI_RF_LF_PARAMS   lf;
-    } param; /* Discovery Type specific parameters */
-} tNCI_RF_TECH_PARAMS;
-
-
-#ifndef NCI_MAX_ATS_LEN
-#define NCI_MAX_ATS_LEN             60
-#endif
-#ifndef NCI_MAX_HIS_BYTES_LEN
-#define NCI_MAX_HIS_BYTES_LEN       50
-#endif
-#ifndef NCI_MAX_GEN_BYTES_LEN
-#define NCI_MAX_GEN_BYTES_LEN       48
-#endif
-
-#define NCI_ATS_T0_INDEX            0
-#define NCI_ATS_TC_MASK             0x40
-#define NCI_ATS_TB_MASK             0x20
-#define NCI_ATS_TA_MASK             0x10
-#define NCI_ATS_FSCI_MASK           0x0F
-typedef struct
-{
-    UINT8       ats_res_len;  /* Length of ATS RES */
-    UINT8       ats_res[NCI_MAX_ATS_LEN];  /* ATS RES defined in [DIGPROT] */
-} tNCI_INTF_PA_ISO_DEP;
-
-typedef struct
-{
-    UINT8       rats;  /* RATS */
-} tNCI_INTF_LA_ISO_DEP;
-
-#define NCI_P_GEN_BYTE_INDEX    15
-#define NCI_L_GEN_BYTE_INDEX    14
-#define NCI_L_NFC_DEP_TO_INDEX  13
-typedef struct
-{
-    UINT8       atr_res_len;  /* Length of ATR_RES */
-    UINT8       atr_res[NCI_MAX_ATS_LEN];  /* ATR_RES (Byte 3 - Byte 17+n) as defined in [DIGPROT] */
-} tNCI_INTF_PA_NFC_DEP;
-
-/* Note: keep tNCI_INTF_PA_NFC_DEP data member in the same order as tNCI_INTF_LA_NFC_DEP */
-typedef struct
-{
-    UINT8       atr_req_len;  /* Length of ATR_REQ */
-    UINT8       atr_req[NCI_MAX_ATS_LEN];  /* ATR_REQ (Byte 3 - Byte 18+n) as defined in [DIGPROT] */
-} tNCI_INTF_LA_NFC_DEP;
-typedef tNCI_INTF_LA_NFC_DEP tNCI_INTF_LF_NFC_DEP;
-typedef tNCI_INTF_PA_NFC_DEP tNCI_INTF_PF_NFC_DEP;
-
-#define NCI_MAX_ATTRIB_LEN   (10 + NCI_MAX_GEN_BYTES_LEN)
-
-typedef struct
-{
-    UINT8       attrib_res_len;  /* Length of ATTRIB RES */
-    UINT8       attrib_res[NCI_MAX_ATTRIB_LEN];  /* ATTRIB RES  as defined in [DIGPROT] */
-} tNCI_INTF_PB_ISO_DEP;
-
-typedef struct
-{
-    UINT8       attrib_req_len;  /* Length of ATTRIB REQ */
-    UINT8       attrib_req[NCI_MAX_ATTRIB_LEN];  /* ATTRIB REQ (Byte 2 - Byte 10+k) as defined in [DIGPROT] */
-} tNCI_INTF_LB_ISO_DEP;
-
-typedef struct
-{
-    tNCI_INTF_TYPE      type;  /* Interface Type  1 Byte  See Table 67 */
-    union
-    {
-        tNCI_INTF_LA_ISO_DEP    la_iso;
-        tNCI_INTF_PA_ISO_DEP    pa_iso;
-        tNCI_INTF_LB_ISO_DEP    lb_iso;
-        tNCI_INTF_PB_ISO_DEP    pb_iso;
-        tNCI_INTF_LA_NFC_DEP    la_nfc;
-        tNCI_INTF_PA_NFC_DEP    pa_nfc;
-        tNCI_INTF_LF_NFC_DEP    lf_nfc;
-        tNCI_INTF_PF_NFC_DEP    pf_nfc;
-    } intf_param;       /* Activation Parameters   0 - n Bytes */
-} tNCI_INTF_PARAMS;
-
-/*
-** HCI Network CMD/NTF structure
-*/
-typedef struct
-{
-    UINT8   pipe_id;        /* if MSB is set then valid, 7 bits for Pipe ID             */
-    UINT8   mode;           /* Type A card emulation enabled indicator, 0x02:enabled    */
-    UINT8   sak;
-    UINT8   uid_reg_len;
-    UINT8   uid_reg[10];
-    UINT8   atqa[2];        /* ATQA response code */
-    UINT8   app_data_len;
-    UINT8   app_data[15];   /* 15 bytes optional storage for historic data, use 2 slots */
-    UINT8   fwi_sfgi;       /* FRAME WAITING TIME, START-UP FRAME GUARD TIME            */
-    UINT8   cid_support;
-    UINT8   datarate_max[3];
-    UINT8   clt_support;
-} tNCI_HCI_CE_RF_A;
-
-typedef struct
-{
-    UINT8   pipe_id;        /* if MSB is set then valid, 7 bits for Pipe ID             */
-    UINT8   mode;           /* Type B card emulation enabled indicator, 0x02:enabled    */
-    UINT8   pupi_len;
-    UINT8   pupi_reg[4];
-    UINT8   afi;
-    UINT8   atqb[4];        /* 4 bytes ATQB application data                            */
-    UINT8   higherlayer_resp[61]; /* 0~ 61 bytes ATRB_INF use 1~4 personality slots     */
-    UINT8   datarate_max[3];
-    UINT8   natrb;
-} tNCI_HCI_CE_RF_B;
-
-typedef struct
-{
-    UINT8   pipe_id;        /* if MSB is set then valid, 7 bits for Pipe ID             */
-    UINT8   mode;           /* Type B prime card emulation enabled indicator, 0x02:enabled */
-    UINT8   pat_in_len;
-    UINT8   pat_in[8];
-    UINT8   dat_out_len;
-    UINT8   dat_out[40];    /* ISO7816-3 <=64 byte, and other fields are 9 bytes        */
-    UINT8   natr;
-} tNCI_HCI_CE_RF_BP;
-
-typedef struct
-{
-    UINT8   pipe_id;        /* if MSB is set then valid, 7 bits for Pipe ID             */
-    UINT8   mode;           /* Type F card emulation enabled indicator, 0x02:enabled    */
-    UINT8   speed_cap;
-    UINT8   clt_support;
-} tNCI_HCI_CE_RF_F;
-
-typedef struct
-{
-    UINT8   pipe_id;        /* if MSB is set then valid, 7 bits for Pipe ID             */
-    UINT8   datarate_max;
-} tNCI_HCI_RD_RF_A;
-
-typedef struct
-{
-    UINT8   pipe_id;        /* if MSB is set then valid, 7 bits for Pipe ID             */
-    UINT8   afi;
-    UINT8   hldata_len;
-    UINT8   high_layer_data[61];  /* INF field in ATTRIB command                        */
-} tNCI_HCI_RD_RF_B;
-
-typedef struct
-{
-    UINT8   source_host;
-    UINT8   dest_host;
-    UINT8   source_gate;
-    UINT8   dest_gate;
-    UINT8   pipe_id;        /* if MSB is set then valid, 7 bits for Pipe ID             */
-} tNCI_HCI_DYN_PIPE_INFO;
-
-typedef struct
-{
-    UINT8                target_handle;
-    UINT8                session_id[8];
-    UINT8                sync_id[2];
-    UINT8                static_pipe_info;
-    tNCI_HCI_CE_RF_A     ce_rf_a;
-    tNCI_HCI_CE_RF_B     ce_rf_b;
-    tNCI_HCI_CE_RF_BP    ce_rf_bp;
-    tNCI_HCI_CE_RF_F     ce_rf_f;
-} tNCI_HCI_NETWK;
-
-typedef struct
-{
-    UINT8                   target_handle;
-    UINT8                   session_id[8];
-    UINT8                   static_pipe_info;
-    UINT8                   num_dyn_pipes;
-    tNCI_HCI_DYN_PIPE_INFO  dyn_pipe_info[20];
-} tNCI_HCI_NETWK_DH;
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* NFC_NCI_DEFS_H */
diff --git a/halimpl/bcm2079x/hal/include/nfc_hal_api.h b/halimpl/bcm2079x/hal/include/nfc_hal_api.h
deleted file mode 100644
index d147527..0000000
--- a/halimpl/bcm2079x/hal/include/nfc_hal_api.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  NFC Hardware Abstraction Layer API
- *
- ******************************************************************************/
-#ifndef NFC_HAL_API_H
-#define NFC_HAL_API_H
-#include <hardware/nfc.h>
-#include "data_types.h"
-
-/****************************************************************************
-** NFC_HDR header definition for NFC messages
-*****************************************************************************/
-typedef struct
-{
-    UINT16          event;
-    UINT16          len;
-    UINT16          offset;
-    UINT16          layer_specific;
-} NFC_HDR;
-#define NFC_HDR_SIZE (sizeof (NFC_HDR))
-
-typedef UINT8 tHAL_NFC_STATUS;
-
-typedef void (tHAL_NFC_STATUS_CBACK) (tHAL_NFC_STATUS status);
-typedef void (tHAL_NFC_CBACK) (UINT8 event, tHAL_NFC_STATUS status);
-typedef void (tHAL_NFC_DATA_CBACK) (UINT16 data_len, UINT8   *p_data);
-
-/*******************************************************************************
-** tHAL_NFC_ENTRY HAL entry-point lookup table
-*******************************************************************************/
-
-typedef void (tHAL_API_INITIALIZE) (void);
-typedef void (tHAL_API_TERMINATE) (void);
-typedef void (tHAL_API_OPEN) (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK *p_data_cback);
-typedef void (tHAL_API_CLOSE) (void);
-typedef void (tHAL_API_CORE_INITIALIZED) (UINT8 *p_core_init_rsp_params);
-typedef void (tHAL_API_WRITE) (UINT16 data_len, UINT8 *p_data);
-typedef BOOLEAN (tHAL_API_PREDISCOVER) (void);
-typedef void (tHAL_API_CONTROL_GRANTED) (void);
-typedef void (tHAL_API_POWER_CYCLE) (void);
-
-
-typedef struct
-{
-    tHAL_API_INITIALIZE *initialize;
-    tHAL_API_TERMINATE *terminate;
-    tHAL_API_OPEN *open;
-    tHAL_API_CLOSE *close;
-    tHAL_API_CORE_INITIALIZED *core_initialized;
-    tHAL_API_WRITE *write;
-    tHAL_API_PREDISCOVER *prediscover;
-    tHAL_API_CONTROL_GRANTED *control_granted;
-    tHAL_API_POWER_CYCLE *power_cycle;
-
-
-} tHAL_NFC_ENTRY;
-
-
-/*******************************************************************************
-** HAL API Function Prototypes
-*******************************************************************************/
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/* Toolset-specific macro for exporting API funcitons */
-#if (defined(NFC_HAL_TARGET) && (NFC_HAL_TARGET == TRUE)) && (defined(_WINDLL))
-#define EXPORT_HAL_API  __declspec(dllexport)
-#else
-#define EXPORT_HAL_API
-#endif
-
-/*******************************************************************************
-**
-** Function         HAL_NfcInitialize
-**
-** Description      Called when HAL library is loaded.
-**
-**                  Initialize GKI and start the HCIT task
-**
-** Returns          void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcInitialize(void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcTerminate
-**
-** Description      Called to terminate NFC HAL
-**
-** Returns          void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcTerminate(void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcOpen
-**
-** Description      Open transport and intialize the NFCC, and
-**                  Register callback for HAL event notifications,
-**
-**                  HAL_OPEN_CPLT_EVT will notify when operation is complete.
-**
-** Returns          void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcOpen (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK *p_data_cback);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcClose
-**
-** Description      Prepare for shutdown. A HAL_CLOSE_CPLT_EVT will be
-**                  reported when complete.
-**
-** Returns          void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcClose (void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcCoreInitialized
-**
-** Description      Called after the CORE_INIT_RSP is received from the NFCC.
-**                  At this time, the HAL can do any chip-specific configuration,
-**                  and when finished signal the libnfc-nci with event
-**                  HAL_POST_INIT_CPLT_EVT.
-**
-** Returns          void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcCoreInitialized (UINT8 *p_core_init_rsp_params);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcWrite
-**
-** Description      Send an NCI control message or data packet to the
-**                  transport. If an NCI command message exceeds the transport
-**                  size, HAL is responsible for fragmenting it, Data packets
-**                  must be of the correct size.
-**
-** Returns          void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcWrite (UINT16 data_len, UINT8 *p_data);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPreDiscover
-**
-** Description      Perform any vendor-specific pre-discovery actions (if needed)
-**                  If any actions were performed TRUE will be returned, and
-**                  HAL_PRE_DISCOVER_CPLT_EVT will notify when actions are
-**                  completed.
-**
-** Returns          TRUE if vendor-specific pre-discovery actions initialized
-**                  FALSE if no vendor-specific pre-discovery actions are needed.
-**
-*******************************************************************************/
-EXPORT_HAL_API BOOLEAN HAL_NfcPreDiscover (void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcControlGranted
-**
-** Description      Grant control to HAL control for sending NCI commands.
-**
-**                  Call in response to HAL_REQUEST_CONTROL_EVT.
-**
-**                  Must only be called when there are no NCI commands pending.
-**
-**                  HAL_RELEASE_CONTROL_EVT will notify when HAL no longer
-**                  needs control of NCI.
-**
-**
-** Returns          void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcControlGranted (void);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPowerCycle
-**
-** Description      Restart NFCC by power cyle
-**
-**                  HAL_OPEN_CPLT_EVT will notify when operation is complete.
-**
-** Returns          void
-**
-*******************************************************************************/
-EXPORT_HAL_API void HAL_NfcPowerCycle (void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_API_H  */
diff --git a/halimpl/bcm2079x/hal/include/nfc_hal_target.h b/halimpl/bcm2079x/hal/include/nfc_hal_target.h
deleted file mode 100644
index b6eedc9..0000000
--- a/halimpl/bcm2079x/hal/include/nfc_hal_target.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef NFC_HAL_TARGET_H
-#define NFC_HAL_TARGET_H
-
-#include "data_types.h"
-
-#ifdef BUILDCFG
-#include "buildcfg_hal.h"
-#endif
-
-/****************************************************************************
-** NCI related configuration
-****************************************************************************/
-
-/* GKI pool for NCI messages */
-#ifndef NFC_HAL_NCI_POOL_ID
-#define NFC_HAL_NCI_POOL_ID                     GKI_POOL_ID_1
-#endif
-
-#ifndef NFC_HAL_NCI_POOL_BUF_SIZE
-#define NFC_HAL_NCI_POOL_BUF_SIZE               GKI_BUF1_SIZE
-#endif
-
-/* Initial Max Control Packet Payload Size (until receiving payload size in INIT_CORE_RSP) */
-#ifndef NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE
-#define NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE      0xFF
-#endif
-
-/* Number of bytes to reserve in front of NCI messages (e.g. for transport header) */
-#ifndef NFC_HAL_NCI_MSG_OFFSET_SIZE
-#define NFC_HAL_NCI_MSG_OFFSET_SIZE             1
-#endif
-
-/* NFC-WAKE */
-#ifndef NFC_HAL_LP_NFC_WAKE_GPIO
-#define NFC_HAL_LP_NFC_WAKE_GPIO                UPIO_GENERAL3
-#endif
-
-/* NFCC snooze mode idle timeout before deassert NFC_WAKE in ms */
-#ifndef NFC_HAL_LP_IDLE_TIMEOUT
-#define NFC_HAL_LP_IDLE_TIMEOUT                 100
-#endif
-
-/* NFC snooze mode */
-#ifndef NFC_HAL_LP_SNOOZE_MODE
-#define NFC_HAL_LP_SNOOZE_MODE                  NFC_HAL_LP_SNOOZE_MODE_UART
-#endif
-
-/* Idle Threshold Host in 100ms unit */
-#ifndef NFC_HAL_LP_IDLE_THRESHOLD_HOST
-#define NFC_HAL_LP_IDLE_THRESHOLD_HOST          0
-#endif
-
-/* Idle Threshold HC in 100ms unit */
-#ifndef NFC_HAL_LP_IDLE_THRESHOLD_HC
-#define NFC_HAL_LP_IDLE_THRESHOLD_HC            0
-#endif
-
-
-/* Default NFCC power-up baud rate */
-#ifndef NFC_HAL_DEFAULT_BAUD
-#define NFC_HAL_DEFAULT_BAUD                    USERIAL_BAUD_115200
-#endif
-
-/* time (in ms) between power off and on NFCC */
-#ifndef NFC_HAL_POWER_CYCLE_DELAY
-#define NFC_HAL_POWER_CYCLE_DELAY               100
-#endif
-
-#ifndef NFC_HAL_PRM_DEBUG
-#define NFC_HAL_PRM_DEBUG                       TRUE
-#endif
-
-/* max patch data length (Can be overridden by platform for ACL HCI command size) */
-#ifndef NFC_HAL_PRM_HCD_CMD_MAXLEN
-#define NFC_HAL_PRM_HCD_CMD_MAXLEN              250
-#endif
-
-/* Require PreI2C patch by default */
-#ifndef NFC_HAL_PRE_I2C_PATCH_INCLUDED
-#define NFC_HAL_PRE_I2C_PATCH_INCLUDED          TRUE
-#endif
-
-/* Set to TRUE to always download patch regardless of version */
-#ifndef NFC_HAL_PRM_SKIP_VERSION_CHECK
-#define NFC_HAL_PRM_SKIP_VERSION_CHECK          FALSE
-#endif
-
-/* Mininum payload size for SPD NCI commands (used to validate HAL_NfcPrmSetSpdNciCmdPayloadSize) */
-/* Default is 32, as required by the NCI specifications; however this value may be          */
-/* over-riden for platforms that have transport packet limitations                          */
-#ifndef NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE
-#define NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE    (32)
-#endif
-
-/* amount of time to wait for RESET NTF after patch download */
-#ifndef NFC_HAL_PRM_RESET_NTF_DELAY
-#define NFC_HAL_PRM_RESET_NTF_DELAY             (10000)
-#endif
-
-/* amount of time to wait after downloading preI2C patch before downloading LPM/FPM patch */
-#ifndef NFC_HAL_PRM_POST_I2C_FIX_DELAY
-#define NFC_HAL_PRM_POST_I2C_FIX_DELAY          (200)
-#endif
-
-/* NFCC will respond to more than one technology during listen discovery  */
-#ifndef NFC_HAL_DM_MULTI_TECH_RESP
-#define NFC_HAL_DM_MULTI_TECH_RESP              TRUE
-#endif
-
-/* Data rate for 15693 command/response, it must be same as RW_I93_FLAG_DATA_RATE in nfc_target.h */
-#define NFC_HAL_I93_FLAG_DATA_RATE_LOW          0x00
-#define NFC_HAL_I93_FLAG_DATA_RATE_HIGH         0x02
-
-#ifndef NFC_HAL_I93_FLAG_DATA_RATE
-#define NFC_HAL_I93_FLAG_DATA_RATE              NFC_HAL_I93_FLAG_DATA_RATE_HIGH
-#endif
-
-/* Quick Timer */
-#ifndef QUICK_TIMER_TICKS_PER_SEC
-#define QUICK_TIMER_TICKS_PER_SEC               100       /* 10ms timer */
-#endif
-
-#ifndef NFC_HAL_SHARED_TRANSPORT_ENABLED
-#define NFC_HAL_SHARED_TRANSPORT_ENABLED        FALSE
-#endif
-
-/* Enable verbose tracing by default */
-#ifndef NFC_HAL_TRACE_VERBOSE
-#define NFC_HAL_TRACE_VERBOSE                   TRUE
-#endif
-
-#ifndef NFC_HAL_INITIAL_TRACE_LEVEL
-#define NFC_HAL_INITIAL_TRACE_LEVEL             5
-#endif
-
-/* Map NFC serial port to USERIAL_PORT_6 by default */
-#ifndef USERIAL_NFC_PORT
-#define USERIAL_NFC_PORT                        (USERIAL_PORT_6)
-#endif
-
-/* Restore NFCC baud rate to default on shutdown if baud rate was updated */
-#ifndef NFC_HAL_RESTORE_BAUD_ON_SHUTDOWN
-#define NFC_HAL_RESTORE_BAUD_ON_SHUTDOWN        TRUE
-#endif
-
-/* Enable protocol tracing by default */
-#ifndef NFC_HAL_TRACE_PROTOCOL
-#define NFC_HAL_TRACE_PROTOCOL                  TRUE
-#endif
-#define BT_TRACE_PROTOCOL                       (NFC_HAL_TRACE_PROTOCOL)
-
-#define LogMsg_0 LogMsg
-#define LogMsg_1 LogMsg
-#define LogMsg_2 LogMsg
-#define LogMsg_3 LogMsg
-#define LogMsg_4 LogMsg
-#define LogMsg_5 LogMsg
-#define LogMsg_6 LogMsg
-
-/* Trace macros */
-#define BT_TRACE_0(l,t,m)                           LogMsg_0((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)),(m))
-#define BT_TRACE_1(l,t,m,p1)                        LogMsg_1(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1))
-#define BT_TRACE_2(l,t,m,p1,p2)                     LogMsg_2(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2))
-#define BT_TRACE_3(l,t,m,p1,p2,p3)                  LogMsg_3(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3))
-#define BT_TRACE_4(l,t,m,p1,p2,p3,p4)               LogMsg_4(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3),(UINT32)(p4))
-#define BT_TRACE_5(l,t,m,p1,p2,p3,p4,p5)            LogMsg_5(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
-                                                        (UINT32)(p5))
-#define BT_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6)         LogMsg_6(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
-                                                        (UINT32)(p5),(UINT32)(p6))
-
-#define NCI_TRACE_ERROR0(m)                     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m);}
-#define NCI_TRACE_ERROR1(m,p1)                  {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1);}
-#define NCI_TRACE_ERROR2(m,p1,p2)               {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NCI_TRACE_ERROR3(m,p1,p2,p3)            {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NCI_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_WARNING0(m)                   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m);}
-#define NCI_TRACE_WARNING1(m,p1)                {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1);}
-#define NCI_TRACE_WARNING2(m,p1,p2)             {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NCI_TRACE_WARNING3(m,p1,p2,p3)          {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NCI_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_API0(m)                       {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_API, m);}
-#define NCI_TRACE_API1(m,p1)                    {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1);}
-#define NCI_TRACE_API2(m,p1,p2)                 {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2);}
-#define NCI_TRACE_API3(m,p1,p2,p3)              {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NCI_TRACE_API4(m,p1,p2,p3,p4)           {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NCI_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_EVENT0(m)                     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m);}
-#define NCI_TRACE_EVENT1(m,p1)                  {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1);}
-#define NCI_TRACE_EVENT2(m,p1,p2)               {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NCI_TRACE_EVENT3(m,p1,p2,p3)            {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NCI_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_DEBUG0(m)                     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m);}
-#define NCI_TRACE_DEBUG1(m,p1)                  {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1);}
-#define NCI_TRACE_DEBUG2(m,p1,p2)               {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NCI_TRACE_DEBUG3(m,p1,p2,p3)            {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NCI_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-extern void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* GKI_TARGET_H */
diff --git a/halimpl/bcm2079x/hal/include/nfc_types.h b/halimpl/bcm2079x/hal/include/nfc_types.h
deleted file mode 100644
index c4a963f..0000000
--- a/halimpl/bcm2079x/hal/include/nfc_types.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef NFC_TYPES_H
-#define NFC_TYPES_H
-
-/* Mask for NFC_HDR event field */
-#define NFC_EVT_MASK                    0xFF00
-#define NFC_SUB_EVT_MASK                0x00FF
-
-/****************************************************************************
-** NFC_HAL_TASK  definitions
-*****************************************************************************/
-
-/* NFC_HAL_TASK event messages */
-#define NFC_HAL_EVT_TO_NFC_NCI             0x0100   /* NCI message for sending to NFCC          */
-#define NFC_HAL_EVT_POST_CORE_RESET        0x0200   /* Request to start NCIT quick timer        */
-#define NFC_HAL_EVT_TO_START_QUICK_TIMER   0x0300   /* Request to start chip-specific config    */
-#define NFC_HAL_EVT_HCI                    0x0400   /* NCI message for hci persistency data     */
-#define NFC_HAL_EVT_PRE_DISCOVER           0x0500   /* NCI message to issue prediscover config  */
-#define NFC_HAL_EVT_CONTROL_GRANTED        0x0600   /* permission to send commands queued in HAL*/
-
-/* NFC_HAL_TASK sub event messages */
-#define NFC_HAL_HCI_RSP_NV_READ_EVT        (0x01 | NFC_HAL_EVT_HCI)
-#define NFC_HAL_HCI_RSP_NV_WRITE_EVT       (0x02 | NFC_HAL_EVT_HCI)
-#define NFC_HAL_HCI_VSC_TIMEOUT_EVT        (0x03 | NFC_HAL_EVT_HCI)
-
-
-/* Event masks for NFC_TASK messages */
-#define NFC_EVT_TO_NFC_NCI              0x4000      /* NCI message for sending to host stack    */
-#define NFC_EVT_TO_NFC_ERR              0x4100      /* Error notification to NFC Task           */
-#define NFC_EVT_TO_NFC_MSGS             0x4200      /* Messages between NFC and NCI task        */
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a stream (Little Endian format).
-*****************************************************************************/
-
-#define UINT32_TO_STREAM(p, u32) {*(p)++ = (UINT8)(u32); *(p)++ = (UINT8)((u32) >> 8); *(p)++ = (UINT8)((u32) >> 16); *(p)++ = (UINT8)((u32) >> 24);}
-#define UINT24_TO_STREAM(p, u24) {*(p)++ = (UINT8)(u24); *(p)++ = (UINT8)((u24) >> 8); *(p)++ = (UINT8)((u24) >> 16);}
-#define UINT16_TO_STREAM(p, u16) {*(p)++ = (UINT8)(u16); *(p)++ = (UINT8)((u16) >> 8);}
-#define UINT8_TO_STREAM(p, u8)   {*(p)++ = (UINT8)(u8);}
-#define INT8_TO_STREAM(p, u8)    {*(p)++ = (INT8)(u8);}
-#define ARRAY32_TO_STREAM(p, a)  {register int ijk; for (ijk = 0; ijk < 32;           ijk++) *(p)++ = (UINT8) a[31 - ijk];}
-#define ARRAY16_TO_STREAM(p, a)  {register int ijk; for (ijk = 0; ijk < 16;           ijk++) *(p)++ = (UINT8) a[15 - ijk];}
-#define ARRAY8_TO_STREAM(p, a)   {register int ijk; for (ijk = 0; ijk < 8;            ijk++) *(p)++ = (UINT8) a[7 - ijk];}
-#define BDADDR_TO_STREAM(p, a)   {register int ijk; for (ijk = 0; ijk < BD_ADDR_LEN;  ijk++) *(p)++ = (UINT8) a[BD_ADDR_LEN - 1 - ijk];}
-#define LAP_TO_STREAM(p, a)      {register int ijk; for (ijk = 0; ijk < LAP_LEN;      ijk++) *(p)++ = (UINT8) a[LAP_LEN - 1 - ijk];}
-#define DEVCLASS_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < DEV_CLASS_LEN;ijk++) *(p)++ = (UINT8) a[DEV_CLASS_LEN - 1 - ijk];}
-#define ARRAY_TO_STREAM(p, a, len) {register int ijk; for (ijk = 0; ijk < len;        ijk++) *(p)++ = (UINT8) a[ijk];}
-#define REVERSE_ARRAY_TO_STREAM(p, a, len)  {register int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[len - 1 - ijk];}
-
-#define STREAM_TO_UINT8(u8, p)   {u8 = (UINT8)(*(p)); (p) += 1;}
-#define STREAM_TO_UINT16(u16, p) {u16 = ((UINT16)(*(p)) + (((UINT16)(*((p) + 1))) << 8)); (p) += 2;}
-#define STREAM_TO_UINT24(u32, p) {u32 = (((UINT32)(*(p))) + ((((UINT32)(*((p) + 1)))) << 8) + ((((UINT32)(*((p) + 2)))) << 16) ); (p) += 3;}
-#define STREAM_TO_UINT32(u32, p) {u32 = (((UINT32)(*(p))) + ((((UINT32)(*((p) + 1)))) << 8) + ((((UINT32)(*((p) + 2)))) << 16) + ((((UINT32)(*((p) + 3)))) << 24)); (p) += 4;}
-#define STREAM_TO_BDADDR(a, p)   {register int ijk; register UINT8 *pbda = (UINT8 *)a + BD_ADDR_LEN - 1; for (ijk = 0; ijk < BD_ADDR_LEN; ijk++) *pbda-- = *p++;}
-#define STREAM_TO_ARRAY32(a, p)  {register int ijk; register UINT8 *_pa = (UINT8 *)a + 31; for (ijk = 0; ijk < 32; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_ARRAY16(a, p)  {register int ijk; register UINT8 *_pa = (UINT8 *)a + 15; for (ijk = 0; ijk < 16; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_ARRAY8(a, p)   {register int ijk; register UINT8 *_pa = (UINT8 *)a + 7; for (ijk = 0; ijk < 8; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_DEVCLASS(a, p) {register int ijk; register UINT8 *_pa = (UINT8 *)a + DEV_CLASS_LEN - 1; for (ijk = 0; ijk < DEV_CLASS_LEN; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_LAP(a, p)      {register int ijk; register UINT8 *plap = (UINT8 *)a + LAP_LEN - 1; for (ijk = 0; ijk < LAP_LEN; ijk++) *plap-- = *p++;}
-#define STREAM_TO_ARRAY(a, p, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) ((UINT8 *) a)[ijk] = *p++;}
-#define REVERSE_STREAM_TO_ARRAY(a, p, len) {register int ijk; register UINT8 *_pa = (UINT8 *)a + len - 1; for (ijk = 0; ijk < len; ijk++) *_pa-- = *p++;}
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a field (Little Endian format).
-** These are the same as to stream, except the pointer is not incremented.
-*****************************************************************************/
-
-#define UINT32_TO_FIELD(p, u32) {*(UINT8 *)(p) = (UINT8)(u32); *((UINT8 *)(p)+1) = (UINT8)((u32) >> 8); *((UINT8 *)(p)+2) = (UINT8)((u32) >> 16); *((UINT8 *)(p)+3) = (UINT8)((u32) >> 24);}
-#define UINT24_TO_FIELD(p, u24) {*(UINT8 *)(p) = (UINT8)(u24); *((UINT8 *)(p)+1) = (UINT8)((u24) >> 8); *((UINT8 *)(p)+2) = (UINT8)((u24) >> 16);}
-#define UINT16_TO_FIELD(p, u16) {*(UINT8 *)(p) = (UINT8)(u16); *((UINT8 *)(p)+1) = (UINT8)((u16) >> 8);}
-#define UINT8_TO_FIELD(p, u8)   {*(UINT8 *)(p) = (UINT8)(u8);}
-
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a stream (Big Endian format)
-*****************************************************************************/
-
-#define UINT32_TO_BE_STREAM(p, u32) {*(p)++ = (UINT8)((u32) >> 24);  *(p)++ = (UINT8)((u32) >> 16); *(p)++ = (UINT8)((u32) >> 8); *(p)++ = (UINT8)(u32); }
-#define UINT24_TO_BE_STREAM(p, u24) {*(p)++ = (UINT8)((u24) >> 16); *(p)++ = (UINT8)((u24) >> 8); *(p)++ = (UINT8)(u24);}
-#define UINT16_TO_BE_STREAM(p, u16) {*(p)++ = (UINT8)((u16) >> 8); *(p)++ = (UINT8)(u16);}
-#define UINT8_TO_BE_STREAM(p, u8)   {*(p)++ = (UINT8)(u8);}
-#define ARRAY_TO_BE_STREAM(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[ijk];}
-
-#define BE_STREAM_TO_UINT8(u8, p)   {u8 = (UINT8)(*(p)); (p) += 1;}
-#define BE_STREAM_TO_UINT16(u16, p) {u16 = (UINT16)(((UINT16)(*(p)) << 8) + (UINT16)(*((p) + 1))); (p) += 2;}
-#define BE_STREAM_TO_UINT24(u32, p) {u32 = (((UINT32)(*((p) + 2))) + ((UINT32)(*((p) + 1)) << 8) + ((UINT32)(*(p)) << 16)); (p) += 3;}
-#define BE_STREAM_TO_UINT32(u32, p) {u32 = ((UINT32)(*((p) + 3)) + ((UINT32)(*((p) + 2)) << 8) + ((UINT32)(*((p) + 1)) << 16) + ((UINT32)(*(p)) << 24)); (p) += 4;}
-#define BE_STREAM_TO_ARRAY(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) ((UINT8 *) a)[ijk] = *p++;}
-
-
-/*****************************************************************************
-** Macros to get and put bytes to and from a field (Big Endian format).
-** These are the same as to stream, except the pointer is not incremented.
-*****************************************************************************/
-
-#define UINT32_TO_BE_FIELD(p, u32) {*(UINT8 *)(p) = (UINT8)((u32) >> 24);  *((UINT8 *)(p)+1) = (UINT8)((u32) >> 16); *((UINT8 *)(p)+2) = (UINT8)((u32) >> 8); *((UINT8 *)(p)+3) = (UINT8)(u32); }
-#define UINT24_TO_BE_FIELD(p, u24) {*(UINT8 *)(p) = (UINT8)((u24) >> 16); *((UINT8 *)(p)+1) = (UINT8)((u24) >> 8); *((UINT8 *)(p)+2) = (UINT8)(u24);}
-#define UINT16_TO_BE_FIELD(p, u16) {*(UINT8 *)(p) = (UINT8)((u16) >> 8); *((UINT8 *)(p)+1) = (UINT8)(u16);}
-#define UINT8_TO_BE_FIELD(p, u8)   {*(UINT8 *)(p) = (UINT8)(u8);}
-
-/*****************************************************************************
-** Define trace levels
-*****************************************************************************/
-
-#define BT_TRACE_LEVEL_NONE    0          /* No trace messages to be generated    */
-#define BT_TRACE_LEVEL_ERROR   1          /* Error condition trace messages       */
-#define BT_TRACE_LEVEL_WARNING 2          /* Warning condition trace messages     */
-#define BT_TRACE_LEVEL_API     3          /* API traces                           */
-#define BT_TRACE_LEVEL_EVENT   4          /* Debug messages for events            */
-#define BT_TRACE_LEVEL_DEBUG   5          /* Full debug messages                  */
-
-
-#define TRACE_CTRL_GENERAL          0x00000000
-#define TRACE_LAYER_NCI             0x00280000
-#define TRACE_LAYER_GKI             0x001a0000
-#define TRACE_ORG_STACK             0x00000000
-#define TRACE_ORG_GKI               0x00000400
-
-#define TRACE_TYPE_ERROR            0x00000000
-#define TRACE_TYPE_WARNING          0x00000001
-#define TRACE_TYPE_API              0x00000002
-#define TRACE_TYPE_EVENT            0x00000003
-#define TRACE_TYPE_DEBUG            0x00000004
-
-
-/* Define a function for logging */
-typedef void (BT_LOG_FUNC) (int trace_type, const char *fmt_str, ...);
-
-#endif /* NFC_TYPES_H */
-
diff --git a/halimpl/bcm2079x/hal/int/nfc_brcm_defs.h b/halimpl/bcm2079x/hal/int/nfc_brcm_defs.h
deleted file mode 100644
index 9ce68e3..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_brcm_defs.h
+++ /dev/null
@@ -1,239 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This file contains the Broadcom-specific defintions that are shared
- *  between HAL, nfc stack, adaptation layer and applications.
- *
- ******************************************************************************/
-
-#ifndef NFC_BRCM_DEFS_H
-#define NFC_BRCM_DEFS_H
-
-/*****************************************************************************
-** Broadcom-specific NCI definitions
-*****************************************************************************/
-
-/**********************************************
- * NCI Message Proprietary  Group       - F
- **********************************************/
-#define NCI_MSG_TAG_SET_MEM             0x00
-#define NCI_MSG_TAG_GET_MEM             0x01
-#define NCI_MSG_T1T_SET_HR              0x02
-#define NCI_MSG_SET_CLF_REGISTERS       0x03
-#define NCI_MSG_GET_BUILD_INFO          0x04
-#define NCI_MSG_HCI_NETWK               0x05
-#define NCI_MSG_SET_FWFSM               0x06
-#define NCI_MSG_SET_UICCRDRF            0x07
-#define NCI_MSG_POWER_LEVEL             0x08
-#define NCI_MSG_FRAME_LOG               0x09
-#define NCI_MSG_UICC_READER_ACTION      0x0A
-#define NCI_MSG_SET_PPSE_RESPONSE       0x0B
-#define NCI_MSG_PRBS_SET                0x0C
-#define NCI_MSG_RESET_ALL_UICC_CFG      0x0D    /* reset HCI network/close all pipes (S,D) register */
-#define NCI_MSG_GET_NFCEE_INFO          0x0E
-#define NCI_MSG_DISABLE_INIT_CHECK      0x0F
-#define NCI_MSG_ANTENNA_SELF_TEST       0x10
-#define NCI_MSG_SET_MAX_PKT_SIZE        0x11
-#define NCI_MSG_NCIP_CLK_REQ_OR_CAR_DET 0x12
-#define NCI_MSG_NCIP_CONFIG_DBUART      0x13
-#define NCI_MSG_NCIP_ENABLE_DVT_DRIVER  0x14
-#define NCI_MSG_SET_ASWP                0x15
-#define NCI_MSG_ENCAPSULATE_NCI         0x16
-#define NCI_MSG_CONFIGURE_ARM_JTAG      0x17
-#define NCI_MSG_STATISTICS              0x18
-#define NCI_MSG_SET_DSP_TABLE           0x19
-#define NCI_MSG_GET_DSP_TABLE           0x1a
-#define NCI_MSG_READY_RX_CMD            0x1b
-#define NCI_MSG_GET_VBAT                0x1c
-#define NCI_MSG_GET_XTAL_INDEX_FROM_DH  0x1d
-#define NCI_MSG_SWP_LOG                 0x1e
-#define NCI_MSG_GET_PWRLEVEL            0x1f
-#define NCI_MSG_SET_VBAT_MONITOR        0x20
-#define NCI_MSG_SET_TINT_MODE           0x21
-#define NCI_MSG_ACCESS_APP              0x22
-#define NCI_MSG_SET_SECURE_MODE         0x23
-#define NCI_MSG_GET_NV_DEVICE           0x24
-#define NCI_MSG_LPTD                    0x25
-#define NCI_MSG_SET_CE4_AS_SNOOZE       0x26
-#define NCI_MSG_NFCC_SEND_HCI           0x27
-#define NCI_MSG_CE4_PATCH_DOWNLOAD_DONE 0x28
-#define NCI_MSG_EEPROM_RW               0x29
-#define NCI_MSG_GET_CLF_REGISTERS       0x2A
-#define NCI_MSG_RF_TEST                 0x2B
-#define NCI_MSG_DEBUG_PRINT             0x2C
-#define NCI_MSG_GET_PATCH_VERSION       0x2D
-#define NCI_MSG_SECURE_PATCH_DOWNLOAD   0x2E
-#define NCI_MSG_SPD_FORMAT_NVM          0x2F
-#define NCI_MSG_SPD_READ_NVM            0x30
-
-/**********************************************
- * Proprietary  NCI status codes
- **********************************************/
-#define NCI_STATUS_SPD_ERROR_ORDER          0xE0
-#define NCI_STATUS_SPD_ERROR_DEST           0xE1
-#define NCI_STATUS_SPD_ERROR_PROJECTID      0xE2
-#define NCI_STATUS_SPD_ERROR_CHIPVER        0xE3
-#define NCI_STATUS_SPD_ERROR_MAJORVER       0xE4
-#define NCI_STATUS_SPD_ERROR_INVALID_PARAM  0xE5
-#define NCI_STATUS_SPD_ERROR_INVALID_SIG    0xE6
-#define NCI_STATUS_SPD_ERROR_NVM_CORRUPTED  0xE7
-#define NCI_STATUS_SPD_ERROR_PWR_MODE       0xE8
-#define NCI_STATUS_SPD_ERROR_MSG_LEN        0xE9
-#define NCI_STATUS_SPD_ERROR_PATCHSIZE      0xEA
-
-
-
-#define NCI_NV_DEVICE_NONE              0x00
-#define NCI_NV_DEVICE_EEPROM            0x08
-#define NCI_NV_DEVICE_UICC1             0x10
-
-/* The events reported on tNFC_VS_CBACK */
-/* The event is (NCI_NTF_BIT|oid) or (NCI_RSP_BIT|oid) */
-#define NFC_VS_HCI_NETWK_EVT            (NCI_NTF_BIT|NCI_MSG_HCI_NETWK)
-#define NFC_VS_HCI_NETWK_RSP            (NCI_RSP_BIT|NCI_MSG_HCI_NETWK)
-#define NFC_VS_UICC_READER_ACTION_EVT   (NCI_NTF_BIT|NCI_MSG_UICC_READER_ACTION)
-#define NFC_VS_POWER_LEVEL_RSP          (NCI_RSP_BIT|NCI_MSG_POWER_LEVEL)
-#define NFC_VS_GET_NV_DEVICE_EVT        (NCI_RSP_BIT|NCI_MSG_GET_NV_DEVICE)
-#define NFC_VS_LPTD_EVT                 (NCI_NTF_BIT|NCI_MSG_LPTD)
-#define NFC_VS_GET_BUILD_INFO_EVT       (NCI_RSP_BIT|NCI_MSG_GET_BUILD_INFO)
-#define NFC_VS_GET_PATCH_VERSION_EVT    (NCI_RSP_BIT|NCI_MSG_GET_PATCH_VERSION)
-#define NFC_VS_SEC_PATCH_DOWNLOAD_EVT   (NCI_RSP_BIT|NCI_MSG_SECURE_PATCH_DOWNLOAD)
-#define NFC_VS_SEC_PATCH_AUTH_EVT       (NCI_NTF_BIT|NCI_MSG_SECURE_PATCH_DOWNLOAD)
-
-#define NCI_GET_PATCH_VERSION_NVM_OFFSET    37
-
-
-#define NCI_NFCC_PIPE_INFO_NV_SIZE      24  /* Static and dynamic pipe id and status for each pipe to uicc0 and uicc1. */
-#define NCI_PERSONALITY_SLOT_SIZE       19
-#define NCI_DYNAMIC_PIPE_SIZE           8
-
-#define NCI_SWP_INTERFACE_TYPE          0xFF    /* Type of TLV in NCI_MSG_HCI_NETWK */
-#define NCI_HCI_GATE_TYPE               0xFE    /* Type of TLV in NCI_MSG_HCI_NETWK */
-
-/* Secure Patch Download definitions (patch type definitions) */
-#define NCI_SPD_TYPE_HEADER             0x00
-#define NCI_SPD_TYPE_SRAM               0x01
-#define NCI_SPD_TYPE_AON                0x02
-#define NCI_SPD_TYPE_PATCH_TABLE        0x03
-#define NCI_SPD_TYPE_SECURE_CONFIG      0x04
-#define NCI_SPD_TYPE_CONTROLLED_CONFIG  0x05
-#define NCI_SPD_TYPE_SIGNATURE          0x06
-#define NCI_SPD_TYPE_SIGCHEK            0x07
-
-/* Secure Patch Download definitions (NCI_SPD_TYPE_HEADER definitions) */
-#define NCI_SPD_HEADER_OFFSET_CHIPVERLEN    0x18
-#define NCI_SPD_HEADER_CHIPVER_LEN          16
-
-/* NVM Type (in GET_PATCH_VERSION RSP) */
-#define NCI_SPD_NVM_TYPE_NONE           0x00
-#define NCI_SPD_NVM_TYPE_EEPROM         0x01
-#define NCI_SPD_NVM_TYPE_UICC           0x02
-
-/**********************************************
- * NCI NFCC proprietary features in octet 3
- **********************************************/
-#define NCI_FEAT_SIGNED_PATCH           0x01000000
-
-/**********************************************
- * NCI Interface Types
- **********************************************/
-#define NCI_INTERFACE_VS_CALYPSO_CE     0x81
-#define NCI_INTERFACE_VS_T2T_CE         0x82    /* for Card Emulation side */
-#define NCI_INTERFACE_VS_15693          0x83    /* for both Reader/Writer and Card Emulation side */
-#define NCI_INTERFACE_VS_T1T_CE         0x84    /* for Card Emulation side */
-
-/**********************************************
- * NCI Proprietary Parameter IDs
- **********************************************/
-#define NCI_PARAM_ID_LA_FSDI            0xA0
-#define NCI_PARAM_ID_LB_FSDI            0xA1
-#define NCI_PARAM_ID_HOST_LISTEN_MASK   0xA2
-#define NCI_PARAM_ID_CHIP_TYPE          0xA3 /* NFCDEP */
-#define NCI_PARAM_ID_PA_ANTICOLL        0xA4
-#define NCI_PARAM_ID_CONTINUE_MODE      0xA5
-#define NCI_PARAM_ID_LBP                0xA6
-#define NCI_PARAM_ID_T1T_RDR_ONLY       0xA7
-#define NCI_PARAM_ID_LA_SENS_RES        0xA8
-#define NCI_PARAM_ID_PWR_SETTING_BITMAP 0xA9
-#define NCI_PARAM_ID_WI_NTF_ENABLE      0xAA
-#define NCI_PARAM_ID_LN_BITRATE         0xAB /* NFCDEP Listen Bitrate */
-#define NCI_PARAM_ID_LF_BITRATE         0xAC /* FeliCa */
-#define NCI_PARAM_ID_SWP_BITRATE_MASK   0xAD
-#define NCI_PARAM_ID_KOVIO              0xAE
-#define NCI_PARAM_ID_UICC_NTF_TO        0xAF
-#define NCI_PARAM_ID_NFCDEP             0xB0
-#define NCI_PARAM_ID_CLF_REGS_CFG       0xB1
-#define NCI_PARAM_ID_NFCDEP_TRANS_TIME  0xB2
-#define NCI_PARAM_ID_CREDIT_TIMER       0xB3
-#define NCI_PARAM_ID_CORRUPT_RX         0xB4
-#define NCI_PARAM_ID_ISODEP             0xB5
-#define NCI_PARAM_ID_LF_CONFIG          0xB6
-#define NCI_PARAM_ID_I93_DATARATE       0xB7
-#define NCI_PARAM_ID_CREDITS_THRESHOLD  0xB8
-#define NCI_PARAM_ID_TAGSNIFF_CFG       0xB9
-#define NCI_PARAM_ID_PA_FSDI            0xBA /* ISODEP */
-#define NCI_PARAM_ID_PB_FSDI            0xBB /* ISODEP */
-#define NCI_PARAM_ID_FRAME_INTF_RETXN   0xBC
-
-#define NCI_PARAM_ID_UICC_RDR_PRIORITY  0xBD
-#define NCI_PARAM_ID_GUARD_TIME         0xBE
-#define NCI_PARAM_ID_STDCONFIG          0xBF /* dont not use this config item */
-#define NCI_PARAM_ID_PROPCFG            0xC0 /* dont not use this config item  */
-#define NCI_PARAM_ID_MAXTRY2ACTIVATE    0xC1
-#define NCI_PARAM_ID_SWPCFG             0xC2
-#define NCI_PARAM_ID_CLF_LPM_CFG        0xC3
-#define NCI_PARAM_ID_DCLB               0xC4
-#define NCI_PARAM_ID_ACT_ORDER          0xC5
-#define NCI_PARAM_ID_DEP_DELAY_ACT      0xC6
-#define NCI_PARAM_ID_DH_PARITY_CRC_CTL  0xC7
-#define NCI_PARAM_ID_PREINIT_DSP_CFG    0xC8
-#define NCI_PARAM_ID_FW_WORKAROUND      0xC9
-#define NCI_PARAM_ID_RFU_CONFIG         0xCA
-#define NCI_PARAM_ID_EMVCO_ENABLE       0xCB
-#define NCI_PARAM_ID_ANTDRIVER_PARAM    0xCC
-#define NCI_PARAM_ID_PLL325_CFG_PARAM   0xCD
-#define NCI_PARAM_ID_OPNLP_ADPLL_ENABLE 0xCE
-#define NCI_PARAM_ID_CONFORMANCE_MODE   0xCF
-
-#define NCI_PARAM_ID_LPO_ON_OFF_ENABLE  0xD0
-#define NCI_PARAM_ID_FORCE_VANT         0xD1
-#define NCI_PARAM_ID_COEX_CONFIG        0xD2
-#define NCI_PARAM_ID_INTEL_MODE         0xD3
-
-#define NCI_PARAM_ID_AID                0xFF
-
-/**********************************************
- * NCI Parameter ID Lens
- **********************************************/
-#define NCI_PARAM_LEN_PWR_SETTING_BITMAP    3
-#define NCI_PARAM_LEN_HOST_LISTEN_MASK      2
-#define NCI_PARAM_LEN_PLL325_CFG_PARAM      14
-
-/**********************************************
- * Snooze Mode
- **********************************************/
-#define NFC_SNOOZE_MODE_NONE      0x00    /* Snooze mode disabled    */
-#define NFC_SNOOZE_MODE_UART      0x01    /* Snooze mode for UART    */
-#define NFC_SNOOZE_MODE_SPI_I2C   0x08    /* Snooze mode for SPI/I2C */
-
-#define NFC_SNOOZE_ACTIVE_LOW     0x00    /* high to low voltage is asserting */
-#define NFC_SNOOZE_ACTIVE_HIGH    0x01    /* low to high voltage is asserting */
-
-#endif  /* NFC_BRCM_DEFS_H */
diff --git a/halimpl/bcm2079x/hal/int/nfc_hal_int.h b/halimpl/bcm2079x/hal/int/nfc_hal_int.h
deleted file mode 100644
index ca8dc20..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_hal_int.h
+++ /dev/null
@@ -1,473 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2009-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  this file contains the NCI transport internal definitions and functions.
- *
- ******************************************************************************/
-
-#ifndef NFC_HAL_INT_H
-#define NFC_HAL_INT_H
-
-#include "nfc_hal_target.h"
-#include "gki.h"
-#include "nci_defs.h"
-#include "nfc_brcm_defs.h"
-#include "nfc_hal_api.h"
-#include "nfc_hal_int_api.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/****************************************************************************
-** NFC HAL TASK transport definitions
-****************************************************************************/
-/* NFC HAL Task event masks */
-#define NFC_HAL_TASK_EVT_DATA_RDY               EVENT_MASK (APPL_EVT_0)
-#define NFC_HAL_TASK_EVT_INITIALIZE             EVENT_MASK (APPL_EVT_5)
-#define NFC_HAL_TASK_EVT_TERMINATE              EVENT_MASK (APPL_EVT_6)
-#define NFC_HAL_TASK_EVT_POWER_CYCLE            EVENT_MASK (APPL_EVT_7)
-
-#define NFC_HAL_TASK_EVT_MBOX                   (TASK_MBOX_0_EVT_MASK)
-
-/* NFC HAL Task mailbox definitions */
-#define NFC_HAL_TASK_MBOX                       (TASK_MBOX_0)
-
-/* NFC HAL Task Timer events */
-#ifndef NFC_HAL_QUICK_TIMER_EVT_MASK
-#define NFC_HAL_QUICK_TIMER_EVT_MASK            (TIMER_0_EVT_MASK)
-#endif
-
-#ifndef NFC_HAL_QUICK_TIMER_ID
-#define NFC_HAL_QUICK_TIMER_ID                  (TIMER_0)
-#endif
-
-/* NFC HAL Task Timer types */
-#define NFC_HAL_TTYPE_NCI_WAIT_RSP              0
-#define NFC_HAL_TTYPE_POWER_CYCLE               1
-
-/* NFC HAL Task Wait Response flag */
-#define NFC_HAL_WAIT_RSP_CMD                    0x10    /* wait response on an NCI command                  */
-#define NFC_HAL_WAIT_RSP_VSC                    0x20    /* wait response on an NCI vendor specific command  */
-#define NFC_HAL_WAIT_RSP_PROP                   0x40    /* wait response on a proprietary command           */
-#define NFC_HAL_WAIT_RSP_NONE                   0x00    /* not waiting for anything                         */
-
-typedef UINT8 tNFC_HAL_WAIT_RSP;
-
-typedef UINT16 tNFC_HAL_HCI_EVT;
-
-
-#define NFC_HAL_HCI_DH_TARGET_HANDLE            0xF2
-#define NFC_HAL_HCI_UICC0_TARGET_HANDLE         0xF3
-#define NFC_HAL_HCI_UICC1_TARGET_HANDLE         0xF4
-
-#define NFC_HAL_HCI_SESSION_ID_LEN              0x08
-#define NFC_HAL_HCI_NETWK_INFO_SIZE             184
-#define NFC_HAL_HCI_DH_NETWK_INFO_SIZE          111
-
-#define NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED 0x15
-#define NFC_HAL_HCI_ADMIN_PIPE                  0x01
-#define NFC_HAL_HCI_HOST_ID_UICC0               0x02        /* Host ID for UICC 0 */
-#define NFC_HAL_HCI_HOST_ID_UICC1               0x03        /* Host ID for UICC 1 */
-#define NFC_HAL_HCI_COMMAND_TYPE                0x00
-
-/* NFC HAL transport configuration */
-typedef struct
-{
-    BOOLEAN         shared_transport;           /* TRUE if using shared HCI/NCI transport */
-    UINT8           userial_baud;
-    UINT8           userial_fc;
-} tNFC_HAL_TRANS_CFG;
-
-#ifdef TESTER
-#define NFC_HAL_TRANS_CFG_QUALIFIER               /* For Insight, ncit_cfg is runtime-configurable */
-#else
-#define NFC_HAL_TRANS_CFG_QUALIFIER   const       /* For all other platforms, ncit_cfg is constant */
-#endif
-extern NFC_HAL_TRANS_CFG_QUALIFIER tNFC_HAL_TRANS_CFG nfc_hal_trans_cfg;
-
-/*****************************************************************************
-* BT HCI definitions
-*****************************************************************************/
-#define BT_HDR      NFC_HDR
-
-/* Tranport message type */
-#define HCIT_TYPE_COMMAND   0x01
-#define HCIT_TYPE_EVENT     0x04
-#define HCIT_TYPE_NFC       0x10
-
-/* Vendor-Specific BT HCI definitions */
-#define HCI_SUCCESS                         0x00
-#define HCI_GRP_VENDOR_SPECIFIC             (0x3F << 10)            /* 0xFC00 */
-#define HCI_BRCM_WRITE_SLEEP_MODE           (0x0027 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_GRP_HOST_CONT_BASEBAND_CMDS     (0x03 << 10)            /* 0x0C00 */
-#define HCI_RESET                           (0x0003 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_COMMAND_COMPLETE_EVT            0x0E
-#define HCI_BRCM_WRITE_SLEEP_MODE_LENGTH    12
-#define HCI_BRCM_UPDATE_BAUD_RATE_UNENCODED_LENGTH      0x06
-#define HCIE_PREAMBLE_SIZE                  2
-
-/****************************************************************************
-** Internal constants and definitions
-****************************************************************************/
-
-/* NFC HAL receiving states */
-enum
-{
-    NFC_HAL_RCV_IDLE_ST,            /* waiting for packet type byte             */
-    NFC_HAL_RCV_NCI_MSG_ST,         /* waiting for the first byte of NCI header */
-    NFC_HAL_RCV_NCI_HDR_ST,         /* reading NCI header                       */
-    NFC_HAL_RCV_NCI_PAYLOAD_ST,     /* reading NCI payload                      */
-    NFC_HAL_RCV_BT_MSG_ST,          /* waiting for the first byte of BT header  */
-    NFC_HAL_RCV_BT_HDR_ST,          /* reading BT HCI header                    */
-    NFC_HAL_RCV_BT_PAYLOAD_ST       /* reading BT HCI payload                   */
-};
-
-/* errors during NCI packet reassembly process */
-#define NFC_HAL_NCI_RAS_TOO_BIG             0x01
-#define NFC_HAL_NCI_RAS_ERROR               0x02
-typedef UINT8 tNFC_HAL_NCI_RAS;
-
-/* NFC HAL power mode */
-enum
-{
-    NFC_HAL_POWER_MODE_FULL,            /* NFCC is full power mode      */
-    NFC_HAL_POWER_MODE_LAST
-};
-typedef UINT8 tNFC_HAL_POWER_MODE;
-
-
-/* NFC HAL event for low power mode */
-enum
-{
-    NFC_HAL_LP_TX_DATA_EVT,                 /* DH is sending data to NFCC   */
-    NFC_HAL_LP_RX_DATA_EVT,                 /* DH received data from NFCC   */
-    NFC_HAL_LP_TIMEOUT_EVT,                 /* Timeout                      */
-    NFC_HAL_LP_LAST_EVT
-};
-typedef UINT8 tNFC_HAL_LP_EVT;
-
-#define NFC_HAL_ASSERT_NFC_WAKE      0x00   /* assert NFC_WAKE      */
-#define NFC_HAL_DEASSERT_NFC_WAKE    0x01   /* deassert NFC_WAKE    */
-
-#define NFC_HAL_BT_HCI_CMD_HDR_SIZE     3   /* opcode (2) +  length (1)    */
-#define NFC_HAL_CMD_TOUT            (2000)  /* timeout for NCI CMD (in ms) */
-
-#define NFC_HAL_SAVED_HDR_SIZE          (2)
-#define NFC_HAL_SAVED_CMD_SIZE          (2)
-
-#ifndef NFC_HAL_DEBUG
-#define NFC_HAL_DEBUG  TRUE
-#endif
-
-#if (NFC_HAL_DEBUG == TRUE)
-extern const char * const nfc_hal_init_state_str[];
-#define NFC_HAL_SET_INIT_STATE(state)  NCI_TRACE_DEBUG3 ("init state: %d->%d(%s)", nfc_hal_cb.dev_cb.initializing_state, state, nfc_hal_init_state_str[state]); nfc_hal_cb.dev_cb.initializing_state = state;
-#else
-#define NFC_HAL_SET_INIT_STATE(state)  nfc_hal_cb.dev_cb.initializing_state = state;
-#endif
-
-
-/* NFC HAL - NFCC initializing state */
-enum
-{
-    NFC_HAL_INIT_STATE_IDLE,               /* Initialization is done                */
-    NFC_HAL_INIT_STATE_W4_XTAL_SET,        /* Waiting for crystal setting rsp       */
-    NFC_HAL_INIT_STATE_W4_RESET,           /* Waiting for reset rsp                 */
-    NFC_HAL_INIT_STATE_W4_BUILD_INFO,      /* Waiting for build info rsp            */
-    NFC_HAL_INIT_STATE_W4_PATCH_INFO,      /* Waiting for patch info rsp            */
-    NFC_HAL_INIT_STATE_W4_APP_COMPLETE,    /* Waiting for complete from application */
-    NFC_HAL_INIT_STATE_W4_POST_INIT_DONE,  /* Waiting for complete of post init     */
-    NFC_HAL_INIT_STATE_W4_CONTROL_DONE,    /* Waiting for control release           */
-    NFC_HAL_INIT_STATE_W4_PREDISCOVER_DONE,/* Waiting for complete of prediscover   */
-    NFC_HAL_INIT_STATE_W4_RE_INIT,         /* Waiting for reset rsp on ReInit       */
-    NFC_HAL_INIT_STATE_CLOSING             /* Shutting down                         */
-};
-typedef UINT8 tNFC_HAL_INIT_STATE;
-
-/* NFC HAL - NFCC config items during post initialization */
-enum
-{
-    NFC_HAL_DM_CONFIG_LPTD,
-    NFC_HAL_DM_CONFIG_PLL_325,
-    NFC_HAL_DM_CONFIG_START_UP,
-    NFC_HAL_DM_CONFIG_I93_DATA_RATE,
-    NFC_HAL_DM_CONFIG_FW_FSM,
-    NFC_HAL_DM_CONFIG_START_UP_VSC,
-    NFC_HAL_DM_CONFIG_NONE
-};
-typedef UINT8 tNFC_HAL_DM_CONFIG;
-
-/* callback function prototype */
-typedef struct
-{
-    UINT16  opcode;
-    UINT16  param_len;
-    UINT8   *p_param_buf;
-} tNFC_HAL_BTVSC_CPLT;
-
-typedef void (tNFC_HAL_BTVSC_CPLT_CBACK) (tNFC_HAL_BTVSC_CPLT *p1);
-
-
-/* data type for NFC_HAL_HCI_RSP_NV_READ_EVT */
-typedef struct
-{
-    NFC_HDR           hdr;
-    UINT8             block;
-    UINT16            size;
-    tHAL_NFC_STATUS   status;
-} tNFC_HAL_HCI_RSP_NV_READ_EVT;
-
-/* data type for NFC_HAL_HCI_RSP_NV_WRITE_EVT */
-typedef struct
-{
-    NFC_HDR           hdr;
-    tHAL_NFC_STATUS   status;
-} tNFC_HAL_HCI_RSP_NV_WRITE_EVT;
-
-
-/* union of all event data types */
-typedef union
-{
-    NFC_HDR                         hdr;
-    /* Internal events */
-    tNFC_HAL_HCI_RSP_NV_READ_EVT    nv_read;
-    tNFC_HAL_HCI_RSP_NV_WRITE_EVT   nv_write;
-} tNFC_HAL_HCI_EVENT_DATA;
-
-/*****************************************************************************
-** Control block for NFC HAL
-*****************************************************************************/
-
-/* Patch RAM Download Control block */
-
-/* PRM states */
-enum
-{
-    NFC_HAL_PRM_ST_IDLE,
-
-    /* Secure patch download stated */
-    NFC_HAL_PRM_ST_SPD_GET_VERSION,
-    NFC_HAL_PRM_ST_SPD_COMPARE_VERSION,
-    NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER,
-    NFC_HAL_PRM_ST_SPD_DOWNLOADING,
-    NFC_HAL_PRM_ST_SPD_AUTHENTICATING,
-    NFC_HAL_PRM_ST_SPD_AUTH_DONE
-};
-typedef UINT8 tNFC_HAL_PRM_STATE;
-
-/* Maximum number of patches (currently 2: LPM and FPM) */
-#define NFC_HAL_PRM_MAX_PATCH_COUNT    2
-#define NFC_HAL_PRM_PATCH_MASK_ALL     0xFFFFFFFF
-
-/* Structures for PRM Control Block */
-typedef struct
-{
-    UINT8               power_mode;
-    UINT16              len;
-} tNFC_HAL_PRM_PATCHDESC;
-
-typedef struct
-{
-    tNFC_HAL_PRM_STATE  state;                  /* download state */
-    UINT32              flags;                  /* internal flags */
-    UINT16              cur_patch_len_remaining;/* bytes remaining in patchfile to process     */
-    const UINT8*        p_cur_patch_data;       /* pointer to patch currently being downloaded */
-    UINT16              cur_patch_offset;       /* offset of next byte to process              */
-    UINT32              dest_ram;
-    TIMER_LIST_ENT      timer;                  /* Timer for patch download                    */
-
-    /* Secure Patch Download */
-    UINT32              spd_patch_needed_mask;  /* Mask of patches that need to be downloaded */
-    UINT32              spd_nvm_patch_mask;     /* Mask of patches currently in NVM */
-    UINT16              spd_project_id;         /* Current project_id of patch in nvm */
-    UINT16              spd_nvm_max_size;
-    UINT16              spd_patch_max_size;
-    UINT16              spd_fpm_patch_size;
-    UINT16              spd_lpm_patch_size;
-
-    UINT8               spd_patch_count;        /* Number of patches left to download */
-    UINT8               spd_cur_patch_idx;      /* Current patch being downloaded */
-    UINT16              spd_ver_major;          /* Current major version of patch in nvm */
-    UINT16              spd_ver_minor;          /* Current minor version of patch in nvm */
-    tNFC_HAL_PRM_PATCHDESC spd_patch_desc[NFC_HAL_PRM_MAX_PATCH_COUNT];
-
-    /* I2C-patch */
-    UINT8               *p_spd_patch;           /* pointer to spd patch             */
-    UINT16              spd_patch_len_remaining;/* patch length                     */
-    UINT16              spd_patch_offset;       /* offset of next byte to process   */
-
-    tNFC_HAL_PRM_FORMAT format;                 /* format of patch ram              */
-    tNFC_HAL_PRM_CBACK  *p_cback;               /* Callback for download status notifications */
-    UINT32              patchram_delay;         /* the dealy after patch */
-} tNFC_HAL_PRM_CB;
-
-/* Patch for I2C fix */
-typedef struct
-{
-    UINT8               *p_patch;               /* patch for i2c fix                */
-    UINT32              prei2c_delay;           /* the dealy after preI2C patch */
-    UINT16              len;                    /* i2c patch length                 */
-} tNFC_HAL_PRM_I2C_FIX_CB;
-
-/* Control block for NCI transport */
-typedef struct
-{
-    UINT8               nci_ctrl_size;      /* Max size for NCI messages                              */
-    UINT8               rcv_state;          /* current rx state                                       */
-    UINT16              rcv_len;            /* bytes remaining to be received in current rx state     */
-    NFC_HDR             *p_rcv_msg;         /* buffer to receive NCI message                          */
-    NFC_HDR             *p_frag_msg;        /* fragmented NCI message; waiting for last fragment      */
-    NFC_HDR             *p_pend_cmd;        /* pending NCI message; waiting for NFCC state to be free */
-    tNFC_HAL_NCI_RAS    nci_ras;            /* nci reassembly error status                            */
-    TIMER_LIST_ENT      nci_wait_rsp_timer; /* Timer for waiting for nci command response             */
-    tNFC_HAL_WAIT_RSP   nci_wait_rsp;       /* nci wait response flag                                 */
-    UINT8               last_hdr[NFC_HAL_SAVED_HDR_SIZE];/* part of last NCI command header           */
-    UINT8               last_cmd[NFC_HAL_SAVED_CMD_SIZE];/* part of last NCI command payload          */
-    void                *p_vsc_cback;       /* the callback function for last VSC command             */
-} tNFC_HAL_NCIT_CB;
-
-/* Control block for device initialization */
-typedef struct
-{
-    tNFC_HAL_INIT_STATE     initializing_state;     /* state of initializing NFCC               */
-
-    UINT32                  brcm_hw_id;             /* BRCM NFCC HW ID                          */
-    tNFC_HAL_DM_CONFIG      next_dm_config;         /* next config in post initialization       */
-    UINT8                   next_startup_vsc;       /* next start-up VSC offset in post init    */
-
-    tNFC_HAL_POWER_MODE     power_mode;             /* NFCC power mode                          */
-    UINT8                   snooze_mode;            /* current snooze mode                      */
-    UINT8                   new_snooze_mode;        /* next snooze mode after receiving cmpl    */
-    UINT8                   nfc_wake_active_mode;   /* NFC_HAL_LP_ACTIVE_LOW/HIGH               */
-    TIMER_LIST_ENT          lp_timer;               /* timer for low power mode                 */
-
-
-    tHAL_NFC_STATUS_CBACK   *p_prop_cback;          /* callback to notify complete of proprietary update */
-} tNFC_HAL_DEV_CB;
-
-/* data members for NFC_HAL-HCI */
-typedef struct
-{
-    TIMER_LIST_ENT          hci_timer;                /* Timer to avoid indefinitely waiting for response */
-    UINT8                   *p_hci_netwk_info_buf;    /* Buffer for reading HCI Network information */
-    UINT8                   *p_hci_netwk_dh_info_buf; /* Buffer for reading HCI Network DH information */
-    UINT8                   hci_netwk_config_block;   /* Rsp awaiting for hci network configuration block */
-    BOOLEAN                 b_wait_hcp_conn_create_rsp; /* Waiting for hcp connection create response */
-    BOOLEAN                 b_check_clear_all_pipe_cmd;
-    UINT8                   hcp_conn_id;
-} tNFC_HAL_HCI_CB;
-
-typedef struct
-{
-    tHAL_NFC_CBACK          *p_stack_cback;     /* Callback for HAL event notification  */
-    tHAL_NFC_DATA_CBACK     *p_data_cback;      /* Callback for data event notification  */
-
-    TIMER_LIST_Q            quick_timer_queue;  /* timer list queue                 */
-    TIMER_LIST_ENT          timer;              /* timer for NCI transport task     */
-
-    tNFC_HAL_NCIT_CB        ncit_cb;            /* NCI transport */
-    tNFC_HAL_DEV_CB         dev_cb;             /* device initialization */
-
-    /* Patchram control block */
-    tNFC_HAL_PRM_CB         prm;
-    tNFC_HAL_PRM_I2C_FIX_CB prm_i2c;
-
-    /* data members for NFC_HAL-HCI */
-    tNFC_HAL_HCI_CB         hci_cb;
-
-
-    tNFC_HAL_NCI_CBACK      *p_reinit_cback;
-    UINT8                   max_rf_credits;     /* NFC Max RF data credits */
-    UINT8                   trace_level;        /* NFC HAL trace level */
-} tNFC_HAL_CB;
-
-/* Global NCI data */
-#if NFC_DYNAMIC_MEMORY == FALSE
-extern tNFC_HAL_CB   nfc_hal_cb;
-#else
-#define nfc_hal_cb (*nfc_hal_cb_ptr)
-extern tNFC_HAL_CB *nfc_hal_cb_ptr;
-#endif
-
-/****************************************************************************
-** Internal nfc functions
-****************************************************************************/
-
-/* From nfc_hal_main.c */
-UINT32 nfc_hal_main_task (UINT32 param);
-void   nfc_hal_main_init (void);
-void   nfc_hal_main_pre_init_done (tHAL_NFC_STATUS);
-void   nfc_hal_main_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
-void   nfc_hal_main_stop_quick_timer (TIMER_LIST_ENT *p_tle);
-void   nfc_hal_main_send_error (tHAL_NFC_STATUS status);
-
-/* nfc_hal_nci.c */
-BOOLEAN nfc_hal_nci_receive_msg (UINT8 byte);
-BOOLEAN nfc_hal_nci_preproc_rx_nci_msg (NFC_HDR *p_msg);
-void    nfc_hal_nci_assemble_nci_msg (void);
-void    nfc_hal_nci_add_nfc_pkt_type (NFC_HDR *p_msg);
-void    nfc_hal_nci_send_cmd (NFC_HDR *p_buf);
-void    nfc_hal_nci_cmd_timeout_cback (void *p_tle);
-
-/* nfc_hal_dm.c */
-void nfc_hal_dm_init (void);
-void nfc_hal_dm_set_xtal_freq_index (void);
-void nfc_hal_dm_send_reset_cmd (void);
-void nfc_hal_dm_proc_msg_during_init (NFC_HDR *p_msg);
-void nfc_hal_dm_config_nfcc (void);
-void nfc_hal_dm_send_nci_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_NCI_CBACK *p_cback);
-void nfc_hal_dm_send_bt_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_BTVSC_CPLT_CBACK *p_cback);
-void nfc_hal_dm_set_nfc_wake (UINT8 cmd);
-void nfc_hal_dm_pre_init_nfcc (void);
-void nfc_hal_dm_shutting_down_nfcc (void);
-BOOLEAN nfc_hal_dm_power_mode_execute (tNFC_HAL_LP_EVT event);
-void nfc_hal_dm_send_pend_cmd (void);
-
-/* nfc_hal_prm.c */
-void nfc_hal_prm_spd_reset_ntf (UINT8 reset_reason, UINT8 reset_type);
-void nfc_hal_prm_nci_command_complete_cback (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
-void nfc_hal_prm_process_timeout (void *p_tle);
-
-/* nfc_hal_hci.c */
-void nfc_hal_hci_enable (void);
-void nfc_hal_hci_evt_hdlr (tNFC_HAL_HCI_EVENT_DATA *p_evt_data);
-void nfc_hal_hci_handle_hci_netwk_info (UINT8 *p_data);
-void nfc_hal_hci_handle_hcp_pkt (UINT8 *p_data);
-void nfc_hal_hci_timeout_cback (void *p_tle);
-
-
-/* Define default NCI protocol trace function (if protocol tracing is enabled) */
-#if (defined(NFC_HAL_TRACE_PROTOCOL) && (NFC_HAL_TRACE_PROTOCOL == TRUE))
-#if !defined (DISP_NCI)
-#define DISP_NCI    (DispNci)
-void DispNci (UINT8 *p, UINT16 len, BOOLEAN is_recv);
-#endif  /* DISP_NCI */
-
-/* For displaying vendor-specific HCI commands */
-void DispHciCmd (BT_HDR *p_buf);
-void DispHciEvt (BT_HDR *p_buf);
-#endif /* NFC_HAL_TRACE_PROTOCOL */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_INT_H */
diff --git a/halimpl/bcm2079x/hal/int/nfc_hal_int_api.h b/halimpl/bcm2079x/hal/int/nfc_hal_int_api.h
deleted file mode 100644
index 5385bb4..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_hal_int_api.h
+++ /dev/null
@@ -1,293 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2009-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Internal NFC HAL API functions.
- *
- ******************************************************************************/
-#ifndef NFC_HAL_INT_API_H
-#define NFC_HAL_INT_API_H
-
-/****************************************************************************
-** Device Configuration definitions
-****************************************************************************/
-
-#define NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN     (2 + NCI_PARAM_LEN_PLL325_CFG_PARAM)
-
-/* Crystal Frequency Index (in 1 KHz) */
-enum
-{
-    NFC_HAL_XTAL_INDEX_9600,
-    NFC_HAL_XTAL_INDEX_13000,
-    NFC_HAL_XTAL_INDEX_16200,
-    NFC_HAL_XTAL_INDEX_19200,
-    NFC_HAL_XTAL_INDEX_24000,
-    NFC_HAL_XTAL_INDEX_26000,
-    NFC_HAL_XTAL_INDEX_38400,
-    NFC_HAL_XTAL_INDEX_52000,
-    NFC_HAL_XTAL_INDEX_37400,
-    NFC_HAL_XTAL_INDEX_MAX
-};
-typedef UINT8 tNFC_HAL_XTAL_INDEX;
-
-/* Broadcom specific device initialization before sending NCI reset */
-#define NFC_HAL_DEV_INIT_FLAGS_SET_XTAL_FREQ  0x02    /* set crystal frequency    */
-typedef UINT8 tNFC_HAL_DEV_INIT_FLAGS;
-
-typedef struct
-{
-    tNFC_HAL_DEV_INIT_FLAGS flags;
-    UINT16                  xtal_freq;
-} tNFC_HAL_DEV_INIT_CFG;
-
-/*****************************************************************************
-**  Low Power Mode definitions
-*****************************************************************************/
-
-#define NFC_HAL_LP_SNOOZE_MODE_NONE      NFC_SNOOZE_MODE_NONE       /* Snooze mode disabled    */
-#define NFC_HAL_LP_SNOOZE_MODE_UART      NFC_SNOOZE_MODE_UART       /* Snooze mode for UART    */
-#define NFC_HAL_LP_SNOOZE_MODE_SPI_I2C   NFC_SNOOZE_MODE_SPI_I2C    /* Snooze mode for SPI/I2C */
-
-#define NFC_HAL_LP_ACTIVE_LOW            NFC_SNOOZE_ACTIVE_LOW      /* high to low voltage is asserting */
-#define NFC_HAL_LP_ACTIVE_HIGH           NFC_SNOOZE_ACTIVE_HIGH     /* low to high voltage is asserting */
-
-/*****************************************************************************
-**  Patch RAM Constants
-*****************************************************************************/
-
-/* patch format type */
-#define NFC_HAL_PRM_FORMAT_BIN  0x00
-#define NFC_HAL_PRM_FORMAT_HCD  0x01
-#define NFC_HAL_PRM_FORMAT_NCD  0x02
-typedef UINT8 tNFC_HAL_PRM_FORMAT;
-
-/*****************************************************************************
-**  Patch RAM Callback for event notificaton
-*****************************************************************************/
-/* Events for tNFC_HAL_PRM_CBACK */
-enum
-{
-    NFC_HAL_PRM_CONTINUE_EVT,
-    NFC_HAL_PRM_COMPLETE_EVT,
-    NFC_HAL_PRM_ABORT_EVT,
-    NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT,       /* Patch is invalid (bad version, project id, or chip)  */
-    NFC_HAL_PRM_ABORT_BAD_SIGNATURE_EVT,       /* Patch has invalid signature                          */
-    NFC_HAL_PRM_SPD_GET_PATCHFILE_HDR_EVT,     /* Secure Patch Download: request for patchfile header  */
-    NFC_HAL_PRM_SPD_GET_NEXT_PATCH,            /* Get first command of next patch in patchfile         */
-    NFC_HAL_PRM_ABORT_NO_NVM_EVT               /* nfc_hal_prm_nvm_required is TRUE and NVM is unavail  */
-};
-
-typedef void (tNFC_HAL_PRM_CBACK) (UINT8 event);
-
-typedef UINT8 tNFC_HAL_NCI_EVT;     /* MT + Opcode */
-typedef void (tNFC_HAL_NCI_CBACK) (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPreInitDone
-**
-** Description      Notify that pre-initialization of NFCC is complete
-**
-** Returns          void
-**
-*******************************************************************************/
-void HAL_NfcPreInitDone (tHAL_NFC_STATUS status);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcReInit
-**
-** Description      This function is called to send an RESET and GET_PATCH_VERSION
-**                  command to NFCC.
-**
-**                  p_cback         - The callback function to receive the command
-**                                    status
-**
-** Note             This function should be called only during the HAL init process
-**
-** Returns          HAL_NFC_STATUS_OK if successfully initiated
-**                  HAL_NFC_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcReInit (tNFC_HAL_NCI_CBACK *p_cback);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcSetSnoozeMode
-**
-** Description      Set snooze mode
-**                  snooze_mode
-**                      NFC_HAL_LP_SNOOZE_MODE_NONE - Snooze mode disabled
-**                      NFC_HAL_LP_SNOOZE_MODE_UART - Snooze mode for UART
-**                      NFC_HAL_LP_SNOOZE_MODE_SPI_I2C - Snooze mode for SPI/I2C
-**
-**                  idle_threshold_dh/idle_threshold_nfcc
-**                      Idle Threshold Host in 100ms unit
-**
-**                  nfc_wake_active_mode/dh_wake_active_mode
-**                      NFC_HAL_LP_ACTIVE_LOW - high to low voltage is asserting
-**                      NFC_HAL_LP_ACTIVE_HIGH - low to high voltage is asserting
-**
-**                  p_snooze_cback
-**                      Notify status of operation
-**
-** Returns          tHAL_NFC_STATUS
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcSetSnoozeMode (UINT8 snooze_mode,
-                                      UINT8 idle_threshold_dh,
-                                      UINT8 idle_threshold_nfcc,
-                                      UINT8 nfc_wake_active_mode,
-                                      UINT8 dh_wake_active_mode,
-                                      tHAL_NFC_STATUS_CBACK *p_snooze_cback);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmDownloadStart
-**
-** Description      Initiate patch download
-**
-** Input Params
-**                  format_type     patch format type
-**                                  (NFC_HAL_PRM_FORMAT_BIN, NFC_HAL_PRM_FORMAT_HCD, or
-**                                   NFC_HAL_PRM_FORMAT_NCD)
-**
-**                  dest_address    destination adderess (needed for BIN format only)
-**
-**                  p_patchram_buf  pointer to patchram buffer. If NULL,
-**                                  then app must call HAL_NfcPrmDownloadContinue when
-**                                  NFC_HAL_PRM_CONTINUE_EVT is received, to send the next
-**                                  segment of patchram
-**
-**                  patchram_len    size of p_patchram_buf (if non-NULL)
-**
-**                  patchram_delay  The delay after each patch.
-**                                  If the given value is less than the size of the patchram,
-**                                  the size of patchram is used instead.
-**
-**                  p_cback         callback for download status
-**
-**
-** Returns          TRUE if successful, otherwise FALSE
-**
-**
-*******************************************************************************/
-BOOLEAN HAL_NfcPrmDownloadStart (tNFC_HAL_PRM_FORMAT format_type,
-                                 UINT32              dest_address,
-                                 UINT8               *p_patchram_buf,
-                                 UINT32              patchram_len,
-                                 UINT32              patchram_delay,
-                                 tNFC_HAL_PRM_CBACK  *p_cback);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmDownloadContinue
-**
-** Description      Send next segment of patchram to controller. Called when
-**                  NFC_HAL_PRM_CONTINUE_EVT is received.
-**
-**                  Only needed if HAL_NfcPrmDownloadStart was called with
-**                  p_patchram_buf=NULL
-**
-** Input Params     p_patch_data    pointer to patch data
-**                  patch_data_len  patch data len
-**
-** Returns          TRUE if successful, otherwise FALSE
-**
-*******************************************************************************/
-BOOLEAN HAL_NfcPrmDownloadContinue (UINT8 *p_patch_data,
-                                    UINT16 patch_data_len);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmSetI2cPatch
-**
-** Description      Specify patchfile for BCM20791B3 I2C fix. This fix
-**                  must be downloaded prior to initial patch download for I2C
-**                  transport
-**
-** Input Params     p_i2c_patchfile_buf: pointer to patch for i2c fix
-**                  i2c_patchfile_len: length of patch
-**                  prei2c_delay: the delay before downloading main patch
-**                                if 0 is given, NFC_HAL_PRM_POST_I2C_FIX_DELAY is used instead.
-**
-** Returns          Nothing
-**
-**
-*******************************************************************************/
-void HAL_NfcPrmSetI2cPatch (UINT8 *p_i2c_patchfile_buf,
-                      UINT16 i2c_patchfile_len, UINT32 prei2c_delay);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcPrmSetSpdNciCmdPayloadSize
-**
-** Description      Set Host-to-NFCC NCI message size for secure patch download
-**
-**                  This API must be called before calling HAL_NfcPrmDownloadStart.
-**                  If the API is not called, then PRM will use the default
-**                  message size.
-**
-**                  Typically, this API is only called for platforms that have
-**                  message-size limitations in the transport/driver.
-**
-**                  Valid message size range: NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE to 255.
-**
-** Returns          HAL_NFC_STATUS_OK if successful
-**                  HAL_NFC_STATUS_FAILED otherwise
-**
-**
-*******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcPrmSetSpdNciCmdPayloadSize (UINT8 max_payload_size);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcSetMaxRfDataCredits
-**
-** Description      This function sets the maximum RF data credit for HAL.
-**                  If 0, use the value reported from NFCC.
-**
-** Returns          none
-**
-*******************************************************************************/
-void HAL_NfcSetMaxRfDataCredits (UINT8 max_credits);
-
-/*******************************************************************************
-**
-** Function         HAL_NfcSetTraceLevel
-**
-** Description      This function sets the trace level for HAL.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-UINT8 HAL_NfcSetTraceLevel (UINT8 new_level);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_INT_API_H */
-
diff --git a/halimpl/bcm2079x/hal/int/nfc_hal_nv_ci.h b/halimpl/bcm2079x/hal/int/nfc_hal_nv_ci.h
deleted file mode 100644
index a77c207..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_hal_nv_ci.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2003-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This is the interface file for non valtile memory call-in functions.
- *
- ******************************************************************************/
-#ifndef NFC_HAL_NV_CI_H
-#define NFC_HAL_NV_CI_H
-
-#include "nfc_hal_nv_co.h"
-
-
-/*****************************************************************************
-**  Function Declarations
-*****************************************************************************/
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_ci_write
-**
-** Description      This function sends an event to NFAA indicating the phone
-**                  has written the number of bytes specified in the call-out
-**                  function, nfa_nv_co_write (), and is ready for more data.
-**                  This function is used to control the TX data flow.
-**                  Note: The data buffer is released by the stack aioer
-**                        calling this function.
-**
-** Parameters       status - NFA_NV_CO_OK, NFA_NV_CO_NOSPACE, or NFA_NV_CO_FAIL
-**                  evt - Used Internally by NFA -> MUST be same value passed
-**                       in call-out function.
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_nv_ci_write (tNFC_HAL_NV_CO_STATUS status);
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_ci_read
-**
-** Description      This function sends an event to NCIT indicating the phone has
-**                  read in the requested amount of data specified in the
-**                  nfa_nv_co_read () call-out function.  It should only be called
-**                  when the requested number of bytes has been read.
-**
-** Parameters       num_bytes_read - number of bytes read into the buffer
-**                      specified in the read callout-function.
-**                  status - NFC_HAL_NV_CO_OK if full buffer of data,
-**                           NFC_HAL_NV_CO_EOF if the end of file has been reached,
-**                           NFC_HAL_NV_CO_FAIL if an error has occurred.
-**                  evt - Used Internally by NFA -> MUST be same value passed
-**                       in call-out function.
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfc_hal_nv_ci_read (UINT16                  num_bytes_read,
-                         tNFC_HAL_NV_CO_STATUS   status,
-                         UINT8                   block);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFC_HAL_NV_CI_H */
-
diff --git a/halimpl/bcm2079x/hal/int/nfc_hal_nv_co.h b/halimpl/bcm2079x/hal/int/nfc_hal_nv_co.h
deleted file mode 100644
index 2264cfe..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_hal_nv_co.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2003-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This is the interface file for storing nv data
- *
- ******************************************************************************/
-#ifndef NFC_HAL_NV_CO_H
-#define NFC_HAL_NV_CO_H
-
-#include <time.h>
-
-
-/*****************************************************************************
-**  Constants and Data Types
-*****************************************************************************/
-
-
-/**************************
-**  Common Definitions
-***************************/
-
-/* Status codes returned by call-out functions, or in call-in functions as status */
-#define NFC_HAL_NV_CO_OK            0x00
-#define NFC_HAL_NV_CO_FAIL          0x01 /* Used to pass all other errors */
-#define NFC_HAL_NV_CO_EACCES        0x02
-#define NFC_HAL_NV_CO_ENOTEMPTY     0x03
-#define NFC_HAL_NV_CO_EOF           0x04
-#define NFC_HAL_NV_CO_EODIR         0x05
-#define NFC_HAL_NV_CO_ENOSPACE      0x06 /* Returned in nfa_nv_ci_open if no room */
-#define NFC_HAL_NV_CO_EIS_DIR       0x07
-#define NFC_HAL_NV_CO_RESUME        0x08 /* used in nfa_nv_ci_open, on resume */
-#define NFC_HAL_NV_CO_NONE          0x09 /* used in nfa_nv_ci_open, on resume (no file to resume) */
-
-typedef UINT8 tNFC_HAL_NV_CO_STATUS;
-
-#define  DH_NV_BLOCK            0x01
-#define  HC_F3_NV_BLOCK         0x02
-#define  HC_F4_NV_BLOCK         0x03
-#define  HC_DH_NV_BLOCK         0x04
-
-/*****************************************************************************
-**  Function Declarations
-*****************************************************************************/
-/**************************
-**  Common Functions
-***************************/
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_co_read
-**
-** Description      This function is called by NFA to read in data from the
-**                  previously opened file.
-**
-** Parameters       p_buf   - buffer to read the data into.
-**                  nbytes  - number of bytes to read into the buffer.
-**
-** Returns          void
-**
-**                  Note: Upon completion of the request, nfa_nv_ci_read () is
-**                        called with the buffer of data, along with the number
-**                        of bytes read into the buffer, and a status.  The
-**                        call-in function should only be called when ALL requested
-**                        bytes have been read, the end of file has been detected,
-**                        or an error has occurred.
-**
-*******************************************************************************/
-void nfc_hal_nv_co_read (UINT8 *p_buf, UINT16 nbytes, UINT8 block);
-
-/*******************************************************************************
-**
-** Function         nfc_hal_nv_co_write
-**
-** Description      This function is called by io to send file data to the
-**                  phone.
-**
-** Parameters       p_buf   - buffer to read the data from.
-**                  nbytes  - number of bytes to write out to the file.
-**
-** Returns          void
-**
-**                  Note: Upon completion of the request, nfa_nv_ci_write () is
-**                        called with the file descriptor and the status.  The
-**                        call-in function should only be called when ALL requested
-**                        bytes have been written, or an error has been detected,
-**
-*******************************************************************************/
-void nfc_hal_nv_co_write (const UINT8 *p_buf, UINT16 nbytes, UINT8 block);
-
-
-#endif /* NFC_HAL_NV_CO_H */
diff --git a/halimpl/bcm2079x/hal/int/nfc_hal_post_reset.h b/halimpl/bcm2079x/hal/int/nfc_hal_post_reset.h
deleted file mode 100644
index 95da455..0000000
--- a/halimpl/bcm2079x/hal/int/nfc_hal_post_reset.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2009-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Post NCI reset routines
- *
- ******************************************************************************/
-#ifndef NFC_HAL_POST_RESET_H
-#define NFC_HAL_POST_RESET_H
-
-
-/*****************************************************************************
-** Application control block definitions
-******************************************************************************/
-#define NFA_APP_PATCHFILE_MAX_PATH          255
-
-typedef struct
-{
-    UINT8 prm_file[NFA_APP_PATCHFILE_MAX_PATH+1];   /* Filename of patchram */
-    UINT8 *p_prm_buf;                               /* Pointer to buffer for holding patchram data */
-
-    /* Patchfile for I2C fix */
-    UINT8 prm_i2c_patchfile[NFA_APP_PATCHFILE_MAX_PATH+1];
-    UINT8 *p_prm_i2c_buf;
-
-    UINT8 userial_baud;
-
-    tNFC_HAL_DEV_INIT_CFG dev_init_config;
-
-    /* snooze mode setting */
-    UINT8 snooze_mode;
-    UINT8 idle_threshold_dh;
-    UINT8 idle_threshold_nfcc;
-    UINT8 nfc_wake_active_mode;
-    UINT8 dh_wake_active_mode;
-
-} tNFC_POST_RESET_CB;
-extern tNFC_POST_RESET_CB nfc_post_reset_cb;
-
-/*
-** Post NCI reset handler
-**
-** This function is called to start device pre-initialization after NCI CORE-RESET.
-** When pre-initialization is completed,
-** HAL_NfcPreInitDone() must be called to proceed with stack start up.
-*/
-void nfc_hal_post_reset_init (UINT32 brcm_hw_id, UINT8 nvm_type);
-
-
-#endif  /* NFC_HAL_POST_RESET_H */
diff --git a/halimpl/bcm2079x/include/StartupConfig.h b/halimpl/bcm2079x/include/StartupConfig.h
new file mode 100644
index 0000000..137371c
--- /dev/null
+++ b/halimpl/bcm2079x/include/StartupConfig.h
@@ -0,0 +1,107 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 1999-2012 Broadcom Corporation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at:
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ ******************************************************************************/
+
+/******************************************************************************
+ * Construct a buffer that contains multiple Type-Length-Value contents
+ * that is used by the HAL in a CORE_SET_CONFIG NCI command.
+ ******************************************************************************/
+
+#pragma once
+#include "bt_types.h"
+#include <string>
+
+
+class StartupConfig
+{
+public:
+    typedef std::basic_string<UINT8> uint8_string;
+    StartupConfig ();
+
+
+    /*******************************************************************************
+    **
+    ** Function:        initialize
+    **
+    ** Description:     Reset all member variables.
+    **
+    ** Returns:         None
+    **
+    *******************************************************************************/
+    void initialize ();
+
+
+    /*******************************************************************************
+    **
+    ** Function:        getInternalBuffer
+    **
+    ** Description:     Get the pointer to buffer that contains multiple
+    **                  Type-Length-Value contents.
+    **
+    ** Returns:         Pointer to buffer.
+    **
+    *******************************************************************************/
+    const UINT8* getInternalBuffer ();
+
+
+    /*******************************************************************************
+    **
+    ** Function:        append
+    **
+    ** Description:     Append new config data to internal buffer.
+    **                  newContent: buffer containing new content; newContent[0] is
+    **                          payload length; newContent[1..end] is payload.
+    **
+    ** Returns:         True if ok.
+    **
+    *******************************************************************************/
+    bool append (const UINT8* newContent);
+
+
+    /*******************************************************************************
+    **
+    ** Function:        append
+    **
+    ** Description:     Append new config data to internal buffer.
+    **                  newContent: buffer containing new content; newContent[0] is
+    **                          payload length; newContent[1..end] is payload.
+    **                  newContentLen: total length of newContent.
+    **
+    ** Returns:         True if ok.
+    **
+    *******************************************************************************/
+    bool append (const UINT8* newContent, UINT8 newContentLen);
+
+
+    /*******************************************************************************
+    **
+    ** Function:        disableSecureElement
+    **
+    ** Description:     Adjust a TLV to disable secure element(s).  The TLV's type is 0xC2.
+    **                  bitmask: 0xC0 = do not detect any secure element.
+    **                           0x40 = do not detect secure element in slot 0.
+    **                           0x80 = do not detect secure element in slot 1.
+    **
+    ** Returns:         True if ok.
+    **
+    *******************************************************************************/
+    bool disableSecureElement (UINT8 bitmask);
+
+private:
+    static const UINT8 mMaxLength;
+    uint8_string mBuffer;
+};
diff --git a/halimpl/bcm2079x/include/bt_trace.h b/halimpl/bcm2079x/include/bt_trace.h
deleted file mode 100644
index d9c58dd..0000000
--- a/halimpl/bcm2079x/include/bt_trace.h
+++ /dev/null
@@ -1,4837 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef BT_TRACE_H
-#define BT_TRACE_H
-
-#ifndef BTTRC_INCLUDED
-#define BTTRC_INCLUDED  FALSE
-#endif
-#ifndef BTTRC_PARSER_INCLUDED
-#define BTTRC_PARSER_INCLUDED FALSE
-#endif
-#ifndef MAX_TRACE_RAM_SIZE
-#define MAX_TRACE_RAM_SIZE 10000
-#endif
-
-/* BTE tracing IDs for debug purposes */
-/* LayerIDs for stack */
-#define BTTRC_ID_STK_GKI                   1
-#define BTTRC_ID_STK_BTU                   2
-#define BTTRC_ID_STK_HCI                   3
-#define BTTRC_ID_STK_L2CAP                 4
-#define BTTRC_ID_STK_RFCM_MX               5
-#define BTTRC_ID_STK_RFCM_PRT              6
-#define BTTRC_ID_STK_OBEX_C                7
-#define BTTRC_ID_STK_OBEX_S                8
-#define BTTRC_ID_STK_AVCT                  9
-#define BTTRC_ID_STK_AVDT                  10
-#define BTTRC_ID_STK_AVRC                  11
-#define BTTRC_ID_STK_BIC                   12
-#define BTTRC_ID_STK_BIS                   13
-#define BTTRC_ID_STK_BNEP                  14
-#define BTTRC_ID_STK_BPP                   15
-#define BTTRC_ID_STK_BTM_ACL               16
-#define BTTRC_ID_STK_BTM_PM                17
-#define BTTRC_ID_STK_BTM_DEV_CTRL          18
-#define BTTRC_ID_STK_BTM_SVC_DSC           19
-#define BTTRC_ID_STK_BTM_INQ               20
-#define BTTRC_ID_STK_BTM_SCO               21
-#define BTTRC_ID_STK_BTM_SEC               22
-#define BTTRC_ID_STK_DUN                   23
-#define BTTRC_ID_STK_HID                   24
-#define BTTRC_ID_STK_HSP2                  25
-#define BTTRC_ID_STK_CTP                   26
-#define BTTRC_ID_STK_FTC                   27
-#define BTTRC_ID_STK_FTS                   28
-#define BTTRC_ID_STK_GAP                   29
-#define BTTRC_ID_STK_GOEP                  30
-#define BTTRC_ID_STK_HCRP                  31
-#define BTTRC_ID_STK_ICP                   32
-#define BTTRC_ID_STK_OPC                   33
-#define BTTRC_ID_STK_OPS                   34
-#define BTTRC_ID_STK_PAN                   35
-#define BTTRC_ID_STK_SAP                   36
-#define BTTRC_ID_STK_SDP                   37
-#define BTTRC_ID_STK_SLIP                  38
-#define BTTRC_ID_STK_SPP                   39
-#define BTTRC_ID_STK_TCS                   40
-#define BTTRC_ID_STK_VDP                   41
-#define BTTRC_ID_STK_AMP                   42
-#define BTTRC_ID_STK_MCAP                  43
-#define BTTRC_ID_STK_GATT                  44
-#define BTTRC_ID_STK_SMP                   45
-#define BTTRC_ID_STK_NFC                   46
-#define BTTRC_ID_STK_NCI                   47
-#define BTTRC_ID_STK_IDEP                  48
-#define BTTRC_ID_STK_NDEP                  49
-#define BTTRC_ID_STK_LLCP                  50
-#define BTTRC_ID_STK_RW                    51
-#define BTTRC_ID_STK_CE                    52
-#define BTTRC_ID_STK_SNEP                  53
-#define BTTRC_ID_STK_NDEF                  54
-
-
-/* LayerIDs for BTA */
-#define BTTRC_ID_BTA_ACC                   55         /* Advanced Camera Client */
-#define BTTRC_ID_BTA_AG                    56         /* audio gateway */
-#define BTTRC_ID_BTA_AV                    57         /* Advanced audio */
-#define BTTRC_ID_BTA_BIC                   58         /* Basic Imaging Client */
-#define BTTRC_ID_BTA_BIS                   59         /* Basic Imaging Server */
-#define BTTRC_ID_BTA_BP                    60         /* Basic Printing Client */
-#define BTTRC_ID_BTA_CG                    61
-#define BTTRC_ID_BTA_CT                    62         /* cordless telephony terminal */
-#define BTTRC_ID_BTA_DG                    63         /* data gateway */
-#define BTTRC_ID_BTA_DM                    64         /* device manager */
-#define BTTRC_ID_BTA_DM_SRCH               65         /* device manager search */
-#define BTTRC_ID_BTA_DM_SEC                66         /* device manager security */
-#define BTTRC_ID_BTA_FM                    67
-#define BTTRC_ID_BTA_FTC                   68         /* file transfer client */
-#define BTTRC_ID_BTA_FTS                   69         /* file transfer server */
-#define BTTRC_ID_BTA_HIDH                  70
-#define BTTRC_ID_BTA_HIDD                  71
-#define BTTRC_ID_BTA_JV                    72
-#define BTTRC_ID_BTA_OPC                   73         /* object push client */
-#define BTTRC_ID_BTA_OPS                   74         /* object push server */
-#define BTTRC_ID_BTA_PAN                   75         /* Personal Area Networking */
-#define BTTRC_ID_BTA_PR                    76         /* Printer client */
-#define BTTRC_ID_BTA_SC                    77         /* SIM Card Access server */
-#define BTTRC_ID_BTA_SS                    78         /* synchronization server */
-#define BTTRC_ID_BTA_SYS                   79         /* system manager */
-#define BTTRC_ID_AVDT_SCB                  80         /* avdt scb */
-#define BTTRC_ID_AVDT_CCB                  81         /* avdt ccb */
-
-/* LayerIDs for BT APP */
-#define BTTRC_ID_BTAPP                     82
-#define BTTRC_ID_MAX_ID                    BTTRC_ID_BTAPP
-#define BTTRC_ID_ALL_LAYERS                0xFF       /* all trace layers */
-typedef UINT8 tBTTRC_LAYER_ID;
-
-/* Trace type definitions. Note that these are mutually exclusive in a trace. This
-means that any trace can be either error,warning,api,event or dbg */
-#if (BTU_STACK_LITE_ENABLED == TRUE)
-#define BTTRC_TYPE_ERROR                   0x81
-#define BTTRC_TYPE_WARNING                 0x82
-#define BTTRC_TYPE_API                     0x84
-#define BTTRC_TYPE_EVENT                   0x88
-#define BTTRC_TYPE_ACTION                  0x90
-#define BTTRC_TYPE_DBG                     0xA0
-#else
-#define BTTRC_TYPE_ERROR                   0x01       /* Traces for error situation */
-#define BTTRC_TYPE_WARNING	               0x02       /* Traces for warning situation */
-#define BTTRC_TYPE_API                     0x04       /* Traces for API */
-#define BTTRC_TYPE_EVENT                   0x08       /* Traces for EVENT */
-#define BTTRC_TYPE_ACTION                  0x10       /* Traces for Action functions */
-#define BTTRC_TYPE_DBG                     0x20       /* Traces for debugging purpose */
-#endif
-typedef UINT8 tBTTRC_TYPE;
-
-/* Masks to identify the stack that originated the trace */
-#define BTTRC_TRACE_LITE                   0x80       /* MM Lite stack */
-#define BTTRC_TRACE_EMBD                   0x40       /* Embedded host stack */
-
-/* Parameter datatypes used in Trace APIs */
-#define BTTRC_PARAM_UINT8                  1
-#define BTTRC_PARAM_UINT16                 2
-#define BTTRC_PARAM_UINT32                 3
-typedef UINT8 tBTTRC_PARAM_TYPE;
-
-/* Special token definitions */
-#define BTTRC_TOKEN_SM_STATE               0xFFFF     /* Token indicating the State of a State m/c */
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* External declaration for appl_trace_level here to avoid to add the declaration in all the files using APPL_TRACExxx macros */
-extern UINT8 appl_trace_level ;
-
-/* Prototype for message logging function. */
-EXPORT_API extern void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...);
-extern void LogMsg_0 (UINT32 trace_set_mask, const char *p_str);
-extern void LogMsg_1 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1);
-extern void LogMsg_2 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1, UINT32 p2);
-extern void LogMsg_3 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1, UINT32 p2,
-                      UINT32 p3);
-extern void LogMsg_4 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1, UINT32 p2,
-                      UINT32 p3, UINT32 p4);
-extern void LogMsg_5 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1, UINT32 p2,
-                      UINT32 p3, UINT32 p4, UINT32 p5);
-extern void LogMsg_6 (UINT32 trace_set_mask, const char *fmt_str, UINT32 p1, UINT32 p2,
-                      UINT32 p3, UINT32 p4, UINT32 p5, UINT32 p6);
-
-/* Prototype for stack tracing function. */
-EXPORT_API extern void BTTRC_StackTrace0(tBTTRC_LAYER_ID layer_id,
-                                   tBTTRC_TYPE type,
-                                   UINT16 token);
-EXPORT_API extern void BTTRC_StackTrace1(tBTTRC_LAYER_ID layer_id,
-                                   tBTTRC_TYPE type,
-                                   UINT16 token,
-                                   tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val);
-EXPORT_API extern void BTTRC_StackTrace2(tBTTRC_LAYER_ID layer_id,
-                                   tBTTRC_TYPE type,
-                                   UINT16 token,
-                                   tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val,
-                                   tBTTRC_PARAM_TYPE p2_type, UINT32 p2_val);
-EXPORT_API extern void BTTRC_StackTrace3(tBTTRC_LAYER_ID layer_id,
-                                   tBTTRC_TYPE type,
-                                   UINT16 token,
-                                   tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val,
-                                   tBTTRC_PARAM_TYPE p2_type, UINT32 p2_val,
-                                   tBTTRC_PARAM_TYPE p3_type, UINT32 p3_val);
-EXPORT_API extern void BTTRC_StackTrace4(tBTTRC_LAYER_ID layer_id,
-                                   tBTTRC_TYPE type,
-                                   UINT16 token,
-                                   tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val,
-                                   tBTTRC_PARAM_TYPE p2_type, UINT32 p2_val,
-                                   tBTTRC_PARAM_TYPE p3_type, UINT32 p3_val,
-                                   tBTTRC_PARAM_TYPE p4_type, UINT32 p4_val);
-EXPORT_API extern void BTTRC_StackTrace5(tBTTRC_LAYER_ID layer_id,
-                                   tBTTRC_TYPE type,
-                                   UINT16 token,
-                                   tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val,
-                                   tBTTRC_PARAM_TYPE p2_type, UINT32 p2_val,
-                                   tBTTRC_PARAM_TYPE p3_type, UINT32 p3_val,
-                                   tBTTRC_PARAM_TYPE p4_type, UINT32 p4_val,
-                                   tBTTRC_PARAM_TYPE p5_type, UINT32 p5_val);
-EXPORT_API extern void BTTRC_StackTrace6(tBTTRC_LAYER_ID layer_id,
-                                   tBTTRC_TYPE type,
-                                   UINT16 token,
-                                   tBTTRC_PARAM_TYPE p1_type, UINT32 p1_val,
-                                   tBTTRC_PARAM_TYPE p2_type, UINT32 p2_val,
-                                   tBTTRC_PARAM_TYPE p3_type, UINT32 p3_val,
-                                   tBTTRC_PARAM_TYPE p4_type, UINT32 p4_val,
-                                   tBTTRC_PARAM_TYPE p5_type, UINT32 p5_val,
-                                   tBTTRC_PARAM_TYPE p6_type, UINT32 p6_val);
-
-#ifdef __cplusplus
-}
-#endif
-
-/******************************************************************************
-**
-** Trace configurable parameters
-**
-******************************************************************************/
-
-/* Enables or disables verbose trace information. */
-#ifndef BT_TRACE_VERBOSE
-#define BT_TRACE_VERBOSE    FALSE
-#endif
-
-/* Enables or disables all trace messages. */
-#ifndef BT_USE_TRACES
-#define BT_USE_TRACES       TRUE
-#endif
-
-/* Enables or disables protocol trace information. */
-#ifndef BT_TRACE_PROTOCOL
-#define BT_TRACE_PROTOCOL   TRUE  /* Android requires TRUE */
-#endif
-
-/******************************************************************************
-**
-** Trace Levels
-**
-** The following values may be used for different levels:
-**      BT_TRACE_LEVEL_NONE    0        * No trace messages to be generated
-**      BT_TRACE_LEVEL_ERROR   1        * Error condition trace messages
-**      BT_TRACE_LEVEL_WARNING 2        * Warning condition trace messages
-**      BT_TRACE_LEVEL_API     3        * API traces
-**      BT_TRACE_LEVEL_EVENT   4        * Debug messages for events
-**      BT_TRACE_LEVEL_DEBUG   5        * Debug messages (general)
-******************************************************************************/
-
-/* Core Stack default trace levels */
-#ifndef HCI_INITIAL_TRACE_LEVEL
-#define HCI_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef BTM_INITIAL_TRACE_LEVEL
-#define BTM_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef L2CAP_INITIAL_TRACE_LEVEL
-#define L2CAP_INITIAL_TRACE_LEVEL           BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef LLCP_INITIAL_TRACE_LEVEL
-#define LLCP_INITIAL_TRACE_LEVEL            BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef AMP_INITIAL_TRACE_LEVEL
-#define AMP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef RFCOMM_INITIAL_TRACE_LEVEL
-#define RFCOMM_INITIAL_TRACE_LEVEL          BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef OBX_INITIAL_TRACE_LEVEL
-#define OBX_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef SDP_INITIAL_TRACE_LEVEL
-#define SDP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef TCS_INITIAL_TRACE_LEVEL
-#define TCS_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-/* Profile default trace levels */
-#ifndef DUN_INITIAL_TRACE_LEVEL
-#define DUN_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef GAP_INITIAL_TRACE_LEVEL
-#define GAP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef GOEP_INITIAL_TRACE_LEVEL
-#define GOEP_INITIAL_TRACE_LEVEL            BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef HSP2_INITIAL_TRACE_LEVEL
-#define HSP2_INITIAL_TRACE_LEVEL            BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef SPP_INITIAL_TRACE_LEVEL
-#define SPP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef ICP_INITIAL_TRACE_LEVEL
-#define ICP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef CTP_INITIAL_TRACE_LEVEL
-#define CTP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef HCRP_INITIAL_TRACE_LEVEL
-#define HCRP_INITIAL_TRACE_LEVEL            BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef HCRPM_INITIAL_TRACE_LEVEL
-#define HCRPM_INITIAL_TRACE_LEVEL           BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef BPP_INITIAL_TRACE_LEVEL
-#define BPP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef BIP_INITIAL_TRACE_LEVEL
-#define BIP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef BNEP_INITIAL_TRACE_LEVEL
-#define BNEP_INITIAL_TRACE_LEVEL            BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef PAN_INITIAL_TRACE_LEVEL
-#define PAN_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef SAP_INITIAL_TRACE_LEVEL
-#define SAP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef FTP_INITIAL_TRACE_LEVEL
-#define FTP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef OPP_INITIAL_TRACE_LEVEL
-#define OPP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef HFP_INITIAL_TRACE_LEVEL
-#define HFP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef A2D_INITIAL_TRACE_LEVEL
-#define A2D_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef VDP_INITIAL_TRACE_LEVEL
-#define VDP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef AVDT_INITIAL_TRACE_LEVEL
-#define AVDT_INITIAL_TRACE_LEVEL            BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef AVCT_INITIAL_TRACE_LEVEL
-#define AVCT_INITIAL_TRACE_LEVEL            BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef AVRC_INITIAL_TRACE_LEVEL
-#define AVRC_INITIAL_TRACE_LEVEL            BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef MCA_INITIAL_TRACE_LEVEL
-#define MCA_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef HID_INITIAL_TRACE_LEVEL
-#define HID_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-/* Application and other default trace levels */
-#ifndef RPC_INITIAL_TRACE_LEVEL
-#define RPC_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef APPL_INITIAL_TRACE_LEVEL
-#define APPL_INITIAL_TRACE_LEVEL            BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef BT_TRACE_APPL
-#define BT_TRACE_APPL   BT_USE_TRACES
-#endif
-
-#ifndef NFC_INITIAL_TRACE_LEVEL
-#define NFC_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef GATT_INITIAL_TRACE_LEVEL
-#define GATT_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-#ifndef SMP_INITIAL_TRACE_LEVEL
-#define SMP_INITIAL_TRACE_LEVEL             BT_TRACE_LEVEL_DEBUG
-#endif
-
-
-#if (BTTRC_INCLUDED == TRUE)
-/***************************************************************************************/
-/* BTTRC MACROS */
-
-#define BTTRC_EVENT(lid, event, state)   \
-            {BTTRC_StackTrace1(lid, BTTRC_TYPE_EVENT, event, BTTRC_PARAM_UINT8, state);}
-#define BTTRC_ACTION(lid, action)  \
-            {BTTRC_StackTrace0(lid, BTTRC_TYPE_ACTION, action);}
-#define BTTRC_STATE(lid, state)   \
-            {BTTRC_StackTrace1(lid, BTTRC_TYPE_EVENT, BTTRC_TOKEN_SM_STATE, BTTRC_PARAM_UINT8, state);}
-
-#define BTTRC_API0(lid, api)  \
-            {BTTRC_StackTrace0(lid, BTTRC_TYPE_API, api);}
-#define BTTRC_API1(lid, api, p1_t,p1_v)  \
-            {BTTRC_StackTrace1(lid, BTTRC_TYPE_API, api, p1_t,p1_v);}
-#define BTTRC_API2(lid, api, p1_t,p1_v,p2_t,p2_v)  \
-            {BTTRC_StackTrace2(lid, BTTRC_TYPE_API, api, p1_t,p1_v,p2_t,p2_v);}
-#define BTTRC_API3(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)  \
-            {BTTRC_StackTrace3(lid, BTTRC_TYPE_API, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v);}
-#define BTTRC_API4(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)  \
-            {BTTRC_StackTrace4(lid, BTTRC_TYPE_API, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v);}
-#define BTTRC_API5(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)  \
-            {BTTRC_StackTrace5(lid, BTTRC_TYPE_API, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v);}
-#define BTTRC_API6(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)  \
-            {BTTRC_StackTrace6(lid, BTTRC_TYPE_API, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v);}
-
-
-#define BTTRC_DBG0(lid, dbg)  \
-            {BTTRC_StackTrace0(lid, BTTRC_TYPE_DBG, dbg);}
-#define BTTRC_DBG1(lid, dbg, p1_t,p1_v)  \
-            {BTTRC_StackTrace1(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v);}
-#define BTTRC_DBG2(lid, dbg, p1_t,p1_v,p2_t,p2_v)  \
-            {BTTRC_StackTrace2(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v,p2_t,p2_v);}
-#define BTTRC_DBG3(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)  \
-            {BTTRC_StackTrace3(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v);}
-#define BTTRC_DBG4(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)  \
-            {BTTRC_StackTrace4(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v);}
-#define BTTRC_DBG5(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)  \
-            {BTTRC_StackTrace5(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v);}
-#define BTTRC_DBG6(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)  \
-            {BTTRC_StackTrace6(lid, BTTRC_TYPE_DBG, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v);}
-
-/***************************************************************************************/
-/*AVDT MACROS */
-
-#define BTTRC_AVDT_API0(api)   \
-        BTTRC_API0(BTTRC_ID_STK_AVDT, api)
-#define BTTRC_AVDT_API1(api, p1_t, p1_v) \
-        BTTRC_API1(BTTRC_ID_STK_AVDT, api, p1_t, p1_v)
-#define BTTRC_AVDT_API2(api, p1_t, p1_v, p2_t, p2_v) \
-        BTTRC_API2(BTTRC_ID_STK_AVDT, api, p1_t, p1_v, p2_t, p2_v)
-/***************************************************************************************/
-/*AVDT_SCB MACROS */
-
-#define BTTRC_AVDT_SCB_EVENT(event, state)   \
-            BTTRC_EVENT(BTTRC_ID_AVDT_SCB, event, state)
-#define BTTRC_AVDT_SCB_ACTION(action)  \
-            BTTRC_ACTION(BTTRC_ID_AVDT_SCB, action)
-#define BTTRC_AVDT_SCB_STATE(next_state)   \
-            BTTRC_STATE(BTTRC_ID_AVDT_SCB, next_state)
-
-#define BTTRC_AVDT_SCB_DBG0(dbg)  \
-            BTTRC_DBG0(BTTRC_ID_AVDT_SCB, dbg)
-#define BTTRC_AVDT_SCB_DBG1(dbg, p1_t,p1_v)  \
-            BTTRC_DBG1(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v)
-#define BTTRC_AVDT_SCB_DBG2(dbg, p1_t,p1_v,p2_t,p2_v)  \
-            BTTRC_DBG2(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v,p2_t,p2_v)
-#define BTTRC_AVDT_SCB_DBG3(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)  \
-            BTTRC_DBG3(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_AVDT_SCB_DBG4(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)  \
-            BTTRC_DBG4(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_AVDT_SCB_DBG5(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)  \
-            BTTRC_DBG5(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_AVDT_SCB_DBG6(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)  \
-            BTTRC_DBG6(BTTRC_ID_AVDT_SCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-/***************************************************************************************/
-/*AVDT_CCB MACROS */
-
-#define BTTRC_AVDT_CCB_EVENT(event, state)   \
-            BTTRC_EVENT(BTTRC_ID_AVDT_CCB, event, state)
-#define BTTRC_AVDT_CCB_ACTION(action)  \
-            BTTRC_ACTION(BTTRC_ID_AVDT_CCB, action)
-#define BTTRC_AVDT_CCB_STATE(next_state)   \
-            BTTRC_STATE(BTTRC_ID_AVDT_CCB, next_state)
-
-#define BTTRC_AVDT_CCB_DBG0(dbg)  \
-            BTTRC_DBG0(BTTRC_ID_AVDT_CCB, dbg)
-#define BTTRC_AVDT_CCB_DBG1(dbg, p1_t,p1_v)  \
-            BTTRC_DBG1(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v)
-#define BTTRC_AVDT_CCB_DBG2(dbg, p1_t,p1_v,p2_t,p2_v)  \
-            BTTRC_DBG2(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v,p2_t,p2_v)
-#define BTTRC_AVDT_CCB_DBG3(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)  \
-            BTTRC_DBG3(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_AVDT_CCB_DBG4(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)  \
-            BTTRC_DBG4(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_AVDT_CCB_DBG5(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)  \
-            BTTRC_DBG5(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_AVDT_CCB_DBG6(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)  \
-            BTTRC_DBG6(BTTRC_ID_AVDT_CCB, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-/***************************************************************************************/
-
-#else /*BTTRC_INCLUDED*/
-
-/***************************************************************************************/
-/* BTTRC MACROS */
-
-#define BTTRC_EVENT(lid, event, state)
-#define BTTRC_ACTION(lid, action)
-#define BTTRC_STATE(lid, state)
-
-#define BTTRC_API0(lid, api)
-#define BTTRC_API1(lid, api, p1_t, p1_v)
-#define BTTRC_API2(lid, api, p1_t, p1_v, p2_t, p2_v)
-#define BTTRC_API3(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_API4(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_API5(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_API6(lid, api, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-
-
-#define BTTRC_DBG0(lid, dbg)
-#define BTTRC_DBG1(lid, dbg, p1_t,p1_v)
-#define BTTRC_DBG2(lid, dbg, p1_t,p1_v,p2_t,p2_v)
-#define BTTRC_DBG3(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_DBG4(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_DBG5(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_DBG6(lid, dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-
-/***************************************************************************************/
-/*AVDT MACROS */
-#define BTTRC_AVDT_API0(api)
-#define BTTRC_AVDT_API1(api, p1_t,p1_v)
-#define BTTRC_AVDT_API2(api, p1_t,p1_v,p2_t,p2_v)
-/***************************************************************************************/
-/*AVDT_SCB MACROS */
-
-#define BTTRC_AVDT_SCB_EVENT(event, state)
-#define BTTRC_AVDT_SCB_ACTION(action)
-#define BTTRC_AVDT_SCB_STATE(next_state)
-
-#define BTTRC_AVDT_SCB_DBG0(dbg)
-#define BTTRC_AVDT_SCB_DBG1(dbg, p1_t,p1_v)
-#define BTTRC_AVDT_SCB_DBG2(dbg, p1_t,p1_v,p2_t,p2_v)
-#define BTTRC_AVDT_SCB_DBG3(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_AVDT_SCB_DBG4(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_AVDT_SCB_DBG5(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_AVDT_SCB_DBG6(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-
-/***************************************************************************************/
-/*AVDT_CCB MACROS */
-
-#define BTTRC_AVDT_CCB_EVENT(event, state)
-#define BTTRC_AVDT_CCB_ACTION(action)
-#define BTTRC_AVDT_CCB_STATE(next_state)
-
-#define BTTRC_AVDT_CCB_DBG0(dbg)
-#define BTTRC_AVDT_CCB_DBG1(dbg, p1_t,p1_v)
-#define BTTRC_AVDT_CCB_DBG2(dbg, p1_t,p1_v,p2_t,p2_v)
-#define BTTRC_AVDT_CCB_DBG3(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v)
-#define BTTRC_AVDT_CCB_DBG4(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v)
-#define BTTRC_AVDT_CCB_DBG5(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v)
-#define BTTRC_AVDT_CCB_DBG6(dbg, p1_t,p1_v,p2_t,p2_v,p3_t,p3_v,p4_t,p4_v,p5_t,p5_v,p6_t,p6_v)
-
-/***************************************************************************************/
-
-#endif /*BTTRC_INCLUDED*/
-
-
-#if (BT_USE_TRACES == TRUE)
-
-#define BT_TRACE_0(l,t,m)                           LogMsg_0((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)),(m))
-#define BT_TRACE_1(l,t,m,p1)                        LogMsg_1(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1))
-#define BT_TRACE_2(l,t,m,p1,p2)                     LogMsg_2(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2))
-#define BT_TRACE_3(l,t,m,p1,p2,p3)                  LogMsg_3(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3))
-#define BT_TRACE_4(l,t,m,p1,p2,p3,p4)               LogMsg_4(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3),(UINT32)(p4))
-#define BT_TRACE_5(l,t,m,p1,p2,p3,p4,p5)            LogMsg_5(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
-                                                        (UINT32)(p5))
-#define BT_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6)         LogMsg_6(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
-                                                        (UINT32)(p5),(UINT32)(p6))
-
-#define BT_ERROR_TRACE_0(l,m)                     LogMsg_0(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR,(m))
-#define BT_ERROR_TRACE_1(l,m,p1)                  LogMsg_1(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR,(m),(UINT32)(p1))
-#define BT_ERROR_TRACE_2(l,m,p1,p2)               LogMsg_2(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR,(m),(UINT32)(p1),(UINT32)(p2))
-#define BT_ERROR_TRACE_3(l,m,p1,p2,p3)            LogMsg_3(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | TRACE_TYPE_ERROR,(m),(UINT32)(p1),(UINT32)(p2),(UINT32)(p3))
-
-/* Define tracing for the HCI unit
-*/
-#define HCI_TRACE_ERROR0(m)                     {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m);}
-#define HCI_TRACE_ERROR1(m,p1)                  {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1);}
-#define HCI_TRACE_ERROR2(m,p1,p2)               {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HCI_TRACE_ERROR3(m,p1,p2,p3)            {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HCI_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (btu_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCI_TRACE_WARNING0(m)                   {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m);}
-#define HCI_TRACE_WARNING1(m,p1)                {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1);}
-#define HCI_TRACE_WARNING2(m,p1,p2)             {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HCI_TRACE_WARNING3(m,p1,p2,p3)          {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HCI_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (btu_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCI_TRACE_EVENT0(m)                     {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m);}
-#define HCI_TRACE_EVENT1(m,p1)                  {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m, p1);}
-#define HCI_TRACE_EVENT2(m,p1,p2)               {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HCI_TRACE_EVENT3(m,p1,p2,p3)            {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HCI_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (btu_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCI_TRACE_DEBUG0(m)                     {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m);}
-#define HCI_TRACE_DEBUG1(m,p1)                  {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1);}
-#define HCI_TRACE_DEBUG2(m,p1,p2)               {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HCI_TRACE_DEBUG3(m,p1,p2,p3)            {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HCI_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (btu_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-
-/* Define tracing for BTM
-*/
-#define BTM_TRACE_ERROR0(m)                     {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m);}
-#define BTM_TRACE_ERROR1(m,p1)                  {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1);}
-#define BTM_TRACE_ERROR2(m,p1,p2)               {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1,p2);}
-#define BTM_TRACE_ERROR3(m,p1,p2,p3)            {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define BTM_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define BTM_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define BTM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (btm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_BTM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define BTM_TRACE_WARNING0(m)                   {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m);}
-#define BTM_TRACE_WARNING1(m,p1)                {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1);}
-#define BTM_TRACE_WARNING2(m,p1,p2)             {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1,p2);}
-#define BTM_TRACE_WARNING3(m,p1,p2,p3)          {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define BTM_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define BTM_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define BTM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (btm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_BTM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define BTM_TRACE_API0(m)                       {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_BTM, TRACE_TYPE_API, m);}
-#define BTM_TRACE_API1(m,p1)                    {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_BTM, TRACE_TYPE_API, m, p1);}
-#define BTM_TRACE_API2(m,p1,p2)                 {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_BTM, TRACE_TYPE_API, m,p1,p2);}
-#define BTM_TRACE_API3(m,p1,p2,p3)              {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_BTM, TRACE_TYPE_API, m,p1,p2,p3);}
-#define BTM_TRACE_API4(m,p1,p2,p3,p4)           {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_BTM, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define BTM_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_BTM, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define BTM_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (btm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_BTM, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define BTM_TRACE_EVENT0(m)                     {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m);}
-#define BTM_TRACE_EVENT1(m,p1)                  {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m, p1);}
-#define BTM_TRACE_EVENT2(m,p1,p2)               {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m,p1,p2);}
-#define BTM_TRACE_EVENT3(m,p1,p2,p3)            {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define BTM_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define BTM_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define BTM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (btm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_BTM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define BTM_TRACE_DEBUG0(m)                     {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m);}
-#define BTM_TRACE_DEBUG1(m,p1)                  {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1);}
-#define BTM_TRACE_DEBUG2(m,p1,p2)               {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define BTM_TRACE_DEBUG3(m,p1,p2,p3)            {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define BTM_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define BTM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define BTM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (btm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_BTM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-
-/* Define tracing for the L2CAP unit
-*/
-#define L2CAP_TRACE_ERROR0(m)                     {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m);}
-#define L2CAP_TRACE_ERROR1(m,p1)                  {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1);}
-#define L2CAP_TRACE_ERROR2(m,p1,p2)               {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define L2CAP_TRACE_ERROR3(m,p1,p2,p3)            {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define L2CAP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define L2CAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define L2CAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_L2CAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define L2CAP_TRACE_WARNING0(m)                   {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m);}
-#define L2CAP_TRACE_WARNING1(m,p1)                {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1);}
-#define L2CAP_TRACE_WARNING2(m,p1,p2)             {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define L2CAP_TRACE_WARNING3(m,p1,p2,p3)          {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define L2CAP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define L2CAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define L2CAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_L2CAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define L2CAP_TRACE_API0(m)                       {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m);}
-#define L2CAP_TRACE_API1(m,p1)                    {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1);}
-#define L2CAP_TRACE_API2(m,p1,p2)                 {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1,p2);}
-#define L2CAP_TRACE_API3(m,p1,p2,p3)              {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define L2CAP_TRACE_API4(m,p1,p2,p3,p4)           {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define L2CAP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define L2CAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_L2CAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define L2CAP_TRACE_EVENT0(m)                     {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m);}
-#define L2CAP_TRACE_EVENT1(m,p1)                  {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m, p1);}
-#define L2CAP_TRACE_EVENT2(m,p1,p2)               {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define L2CAP_TRACE_EVENT3(m,p1,p2,p3)            {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define L2CAP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define L2CAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define L2CAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_L2CAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define L2CAP_TRACE_DEBUG0(m)                     {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m);}
-#define L2CAP_TRACE_DEBUG1(m,p1)                  {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1);}
-#define L2CAP_TRACE_DEBUG2(m,p1,p2)               {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define L2CAP_TRACE_DEBUG3(m,p1,p2,p3)            {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define L2CAP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define L2CAP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define L2CAP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (l2cb.l2cap_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_L2CAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the LLCP unit
-*/
-#define LLCP_TRACE_ERROR0(m)                     {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m);}
-#define LLCP_TRACE_ERROR1(m,p1)                  {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1);}
-#define LLCP_TRACE_ERROR2(m,p1,p2)               {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define LLCP_TRACE_ERROR3(m,p1,p2,p3)            {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define LLCP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define LLCP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define LLCP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define LLCP_TRACE_WARNING0(m)                   {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m);}
-#define LLCP_TRACE_WARNING1(m,p1)                {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1);}
-#define LLCP_TRACE_WARNING2(m,p1,p2)             {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define LLCP_TRACE_WARNING3(m,p1,p2,p3)          {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define LLCP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define LLCP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define LLCP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define LLCP_TRACE_API0(m)                       {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_API, m);}
-#define LLCP_TRACE_API1(m,p1)                    {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1);}
-#define LLCP_TRACE_API2(m,p1,p2)                 {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1,p2);}
-#define LLCP_TRACE_API3(m,p1,p2,p3)              {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define LLCP_TRACE_API4(m,p1,p2,p3,p4)           {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define LLCP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define LLCP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define LLCP_TRACE_EVENT0(m)                     {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m);}
-#define LLCP_TRACE_EVENT1(m,p1)                  {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m, p1);}
-#define LLCP_TRACE_EVENT2(m,p1,p2)               {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define LLCP_TRACE_EVENT3(m,p1,p2,p3)            {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define LLCP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define LLCP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define LLCP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define LLCP_TRACE_DEBUG0(m)                     {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m);}
-#define LLCP_TRACE_DEBUG1(m,p1)                  {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1);}
-#define LLCP_TRACE_DEBUG2(m,p1,p2)               {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define LLCP_TRACE_DEBUG3(m,p1,p2,p3)            {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define LLCP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define LLCP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define LLCP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (llcp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_LLCP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the SDP unit
-*/
-#define SDP_TRACE_ERROR0(m)                     {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m);}
-#define SDP_TRACE_ERROR1(m,p1)                  {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1);}
-#define SDP_TRACE_ERROR2(m,p1,p2)               {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define SDP_TRACE_ERROR3(m,p1,p2,p3)            {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define SDP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define SDP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define SDP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_SDP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define SDP_TRACE_WARNING0(m)                   {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m);}
-#define SDP_TRACE_WARNING1(m,p1)                {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1);}
-#define SDP_TRACE_WARNING2(m,p1,p2)             {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define SDP_TRACE_WARNING3(m,p1,p2,p3)          {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define SDP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define SDP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define SDP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_SDP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define SDP_TRACE_API0(m)                       {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_SDP, TRACE_TYPE_API, m);}
-#define SDP_TRACE_API1(m,p1)                    {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1);}
-#define SDP_TRACE_API2(m,p1,p2)                 {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1,p2);}
-#define SDP_TRACE_API3(m,p1,p2,p3)              {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define SDP_TRACE_API4(m,p1,p2,p3,p4)           {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define SDP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define SDP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_SDP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define SDP_TRACE_EVENT0(m)                     {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m);}
-#define SDP_TRACE_EVENT1(m,p1)                  {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m, p1);}
-#define SDP_TRACE_EVENT2(m,p1,p2)               {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define SDP_TRACE_EVENT3(m,p1,p2,p3)            {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define SDP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define SDP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define SDP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_SDP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define SDP_TRACE_DEBUG0(m)                     {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m);}
-#define SDP_TRACE_DEBUG1(m,p1)                  {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1);}
-#define SDP_TRACE_DEBUG2(m,p1,p2)               {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define SDP_TRACE_DEBUG3(m,p1,p2,p3)            {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define SDP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define SDP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define SDP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (sdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_SDP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the RFCOMM unit
-*/
-#define RFCOMM_TRACE_ERROR0(m)                     {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m);}
-#define RFCOMM_TRACE_ERROR1(m,p1)                  {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1);}
-#define RFCOMM_TRACE_ERROR2(m,p1,p2)               {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1,p2);}
-#define RFCOMM_TRACE_ERROR3(m,p1,p2,p3)            {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define RFCOMM_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define RFCOMM_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define RFCOMM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_RFCOMM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define RFCOMM_TRACE_WARNING0(m)                   {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m);}
-#define RFCOMM_TRACE_WARNING1(m,p1)                {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1);}
-#define RFCOMM_TRACE_WARNING2(m,p1,p2)             {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1,p2);}
-#define RFCOMM_TRACE_WARNING3(m,p1,p2,p3)          {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define RFCOMM_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define RFCOMM_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define RFCOMM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_RFCOMM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define RFCOMM_TRACE_API0(m)                       {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m);}
-#define RFCOMM_TRACE_API1(m,p1)                    {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1);}
-#define RFCOMM_TRACE_API2(m,p1,p2)                 {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1,p2);}
-#define RFCOMM_TRACE_API3(m,p1,p2,p3)              {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1,p2,p3);}
-#define RFCOMM_TRACE_API4(m,p1,p2,p3,p4)           {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define RFCOMM_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define RFCOMM_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_RFCOMM, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define RFCOMM_TRACE_EVENT0(m)                     {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m);}
-#define RFCOMM_TRACE_EVENT1(m,p1)                  {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m, p1);}
-#define RFCOMM_TRACE_EVENT2(m,p1,p2)               {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m,p1,p2);}
-#define RFCOMM_TRACE_EVENT3(m,p1,p2,p3)            {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define RFCOMM_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define RFCOMM_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define RFCOMM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_RFCOMM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define RFCOMM_TRACE_DEBUG0(m)                     {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m);}
-#define RFCOMM_TRACE_DEBUG1(m,p1)                  {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1);}
-#define RFCOMM_TRACE_DEBUG2(m,p1,p2)               {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define RFCOMM_TRACE_DEBUG3(m,p1,p2,p3)            {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define RFCOMM_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define RFCOMM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define RFCOMM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (rfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_RFCOMM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for Serial Port Profile
-*/
-#define SPP_TRACE_ERROR0(m)                     {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m);}
-#define SPP_TRACE_ERROR1(m,p1)                  {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1);}
-#define SPP_TRACE_ERROR2(m,p1,p2)               {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define SPP_TRACE_ERROR3(m,p1,p2,p3)            {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define SPP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define SPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define SPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (spp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_SPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define SPP_TRACE_WARNING0(m)                   {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m);}
-#define SPP_TRACE_WARNING1(m,p1)                {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1);}
-#define SPP_TRACE_WARNING2(m,p1,p2)             {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define SPP_TRACE_WARNING3(m,p1,p2,p3)          {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define SPP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define SPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define SPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (spp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_SPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define SPP_TRACE_EVENT0(m)                     {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m);}
-#define SPP_TRACE_EVENT1(m,p1)                  {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m, p1);}
-#define SPP_TRACE_EVENT2(m,p1,p2)               {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define SPP_TRACE_EVENT3(m,p1,p2,p3)            {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define SPP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define SPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define SPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (spp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_SPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define SPP_TRACE_API0(m)                       {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_SPP, TRACE_TYPE_API, m);}
-#define SPP_TRACE_API1(m,p1)                    {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_SPP, TRACE_TYPE_API, m, p1);}
-#define SPP_TRACE_API2(m,p1,p2)                 {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_SPP, TRACE_TYPE_API, m,p1,p2);}
-#define SPP_TRACE_API3(m,p1,p2,p3)              {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_SPP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define SPP_TRACE_API4(m,p1,p2,p3,p4)           {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_SPP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define SPP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_SPP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define SPP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (spp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_SPP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define SPP_TRACE_DEBUG0(m)                     {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m);}
-#define SPP_TRACE_DEBUG1(m,p1)                  {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1);}
-#define SPP_TRACE_DEBUG2(m,p1,p2)               {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define SPP_TRACE_DEBUG3(m,p1,p2,p3)            {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define SPP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define SPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define SPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (spp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_SPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Generic Access Profile traces */
-#define GAP_TRACE_ERROR0(m)                     {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m);}
-#define GAP_TRACE_ERROR1(m,p1)                  {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m, p1);}
-#define GAP_TRACE_ERROR2(m,p1,p2)               {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define GAP_TRACE_ERROR3(m,p1,p2,p3)            {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define GAP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define GAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define GAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (gap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_GAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define GAP_TRACE_EVENT0(m)                     {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m);}
-#define GAP_TRACE_EVENT1(m,p1)                  {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m, p1);}
-#define GAP_TRACE_EVENT2(m,p1,p2)               {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define GAP_TRACE_EVENT3(m,p1,p2,p3)            {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define GAP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define GAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define GAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (gap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_GAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define GAP_TRACE_API0(m)                       {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_GAP, TRACE_TYPE_API, m);}
-#define GAP_TRACE_API1(m,p1)                    {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_GAP, TRACE_TYPE_API, m, p1);}
-#define GAP_TRACE_API2(m,p1,p2)                 {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_GAP, TRACE_TYPE_API, m,p1,p2);}
-#define GAP_TRACE_API3(m,p1,p2,p3)              {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_GAP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define GAP_TRACE_API4(m,p1,p2,p3,p4)           {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_GAP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define GAP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_GAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define GAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (gap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_GAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define GAP_TRACE_WARNING0(m)                   {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m);}
-#define GAP_TRACE_WARNING1(m,p1)                {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m, p1);}
-#define GAP_TRACE_WARNING2(m,p1,p2)             {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define GAP_TRACE_WARNING3(m,p1,p2,p3)          {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define GAP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define GAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define GAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (gap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_GAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-
-/* Define tracing for OBX
-*/
-#define OBX_TRACE_ERROR0(m)                      {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m);}
-#define OBX_TRACE_ERROR1(m,p1)                   {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1);}
-#define OBX_TRACE_ERROR2(m,p1,p2)                {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1,p2);}
-#define OBX_TRACE_ERROR3(m,p1,p2,p3)             {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define OBX_TRACE_ERROR4(m,p1,p2,p3,p4)          {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define OBX_TRACE_ERROR5(m,p1,p2,p3,p4,p5)       {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define OBX_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)    {if (obx_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_OBEX, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define OBX_TRACE_WARNING0(m)                    {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m);}
-#define OBX_TRACE_WARNING1(m,p1)                 {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1);}
-#define OBX_TRACE_WARNING2(m,p1,p2)              {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1,p2);}
-#define OBX_TRACE_WARNING3(m,p1,p2,p3)           {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define OBX_TRACE_WARNING4(m,p1,p2,p3,p4)        {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define OBX_TRACE_WARNING5(m,p1,p2,p3,p4,p5)     {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define OBX_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)  {if (obx_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_OBEX, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define OBX_TRACE_EVENT0(m)                      {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m);}
-#define OBX_TRACE_EVENT1(m,p1)                   {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m, p1);}
-#define OBX_TRACE_EVENT2(m,p1,p2)                {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m,p1,p2);}
-#define OBX_TRACE_EVENT3(m,p1,p2,p3)             {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define OBX_TRACE_EVENT4(m,p1,p2,p3,p4)          {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define OBX_TRACE_EVENT5(m,p1,p2,p3,p4,p5)       {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define OBX_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)    {if (obx_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_OBEX, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define OBX_TRACE_DEBUG0(m)                      {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m);}
-#define OBX_TRACE_DEBUG1(m,p1)                   {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1);}
-#define OBX_TRACE_DEBUG2(m,p1,p2)                {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define OBX_TRACE_DEBUG3(m,p1,p2,p3)             {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define OBX_TRACE_DEBUG4(m,p1,p2,p3,p4)          {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define OBX_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)       {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define OBX_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)    {if (obx_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_OBEX, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define OBX_TRACE_API0(m)                        {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_OBEX, TRACE_TYPE_API, m);}
-#define OBX_TRACE_API1(m,p1)                     {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_OBEX, TRACE_TYPE_API, m, p1);}
-#define OBX_TRACE_API2(m,p1,p2)                  {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_OBEX, TRACE_TYPE_API, m,p1,p2);}
-#define OBX_TRACE_API3(m,p1,p2,p3)               {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_OBEX, TRACE_TYPE_API, m,p1,p2,p3);}
-#define OBX_TRACE_API4(m,p1,p2,p3,p4)            {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_OBEX, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define OBX_TRACE_API5(m,p1,p2,p3,p4,p5)         {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_OBEX, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define OBX_TRACE_API6(m,p1,p2,p3,p4,p5,p6)      {if (obx_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_OBEX, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for OBEX application profiles
-*/
-#define GOEP_TRACE_ERROR0(m)                     {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m);}
-#define GOEP_TRACE_ERROR1(m,p1)                  {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1);}
-#define GOEP_TRACE_ERROR2(m,p1,p2)               {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define GOEP_TRACE_ERROR3(m,p1,p2,p3)            {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define GOEP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define GOEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define GOEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (goep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_GOEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define GOEP_TRACE_WARNING0(m)                   {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m);}
-#define GOEP_TRACE_WARNING1(m,p1)                {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1);}
-#define GOEP_TRACE_WARNING2(m,p1,p2)             {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define GOEP_TRACE_WARNING3(m,p1,p2,p3)          {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define GOEP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define GOEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define GOEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (goep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_GOEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define GOEP_TRACE_EVENT0(m)                     {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m);}
-#define GOEP_TRACE_EVENT1(m,p1)                  {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m, p1);}
-#define GOEP_TRACE_EVENT2(m,p1,p2)               {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define GOEP_TRACE_EVENT3(m,p1,p2,p3)            {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define GOEP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define GOEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define GOEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (goep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_GOEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define GOEP_TRACE_DEBUG0(m)                     {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m);}
-#define GOEP_TRACE_DEBUG1(m,p1)                  {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1);}
-#define GOEP_TRACE_DEBUG2(m,p1,p2)               {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define GOEP_TRACE_DEBUG3(m,p1,p2,p3)            {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define GOEP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define GOEP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define GOEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (goep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_GOEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define GOEP_TRACE_API0(m)                       {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_GOEP, TRACE_TYPE_API, m);}
-#define GOEP_TRACE_API1(m,p1)                    {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_GOEP, TRACE_TYPE_API, m, p1);}
-#define GOEP_TRACE_API2(m,p1,p2)                 {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_GOEP, TRACE_TYPE_API, m,p1,p2);}
-#define GOEP_TRACE_API3(m,p1,p2,p3)              {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_GOEP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define GOEP_TRACE_API4(m,p1,p2,p3,p4)           {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_GOEP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define GOEP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_GOEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define GOEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (goep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_GOEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the BPP profile
-*/
-#define BPP_TRACE_ERROR0(m)                      {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m);}
-#define BPP_TRACE_ERROR1(m,p1)                   {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1);}
-#define BPP_TRACE_ERROR2(m,p1,p2)                {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define BPP_TRACE_ERROR3(m,p1,p2,p3)             {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define BPP_TRACE_ERROR4(m,p1,p2,p3,p4)          {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define BPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)       {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define BPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)    {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_BPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define BPP_TRACE_WARNING0(m)                    {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m);}
-#define BPP_TRACE_WARNING1(m,p1)                 {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1);}
-#define BPP_TRACE_WARNING2(m,p1,p2)              {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define BPP_TRACE_WARNING3(m,p1,p2,p3)           {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define BPP_TRACE_WARNING4(m,p1,p2,p3,p4)        {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define BPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)     {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define BPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)  {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_BPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define BPP_TRACE_EVENT0(m)                      {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m);}
-#define BPP_TRACE_EVENT1(m,p1)                   {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m, p1);}
-#define BPP_TRACE_EVENT2(m,p1,p2)                {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define BPP_TRACE_EVENT3(m,p1,p2,p3)             {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define BPP_TRACE_EVENT4(m,p1,p2,p3,p4)          {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define BPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)       {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define BPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)    {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_BPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define BPP_TRACE_DEBUG0(m)                      {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m);}
-#define BPP_TRACE_DEBUG1(m,p1)                   {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1);}
-#define BPP_TRACE_DEBUG2(m,p1,p2)                {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define BPP_TRACE_DEBUG3(m,p1,p2,p3)             {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define BPP_TRACE_DEBUG4(m,p1,p2,p3,p4)          {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define BPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)       {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define BPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)    {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_BPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define BPP_TRACE_API0(m)                        {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_BPP, TRACE_TYPE_API, m);}
-#define BPP_TRACE_API1(m,p1)                     {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_BPP, TRACE_TYPE_API, m, p1);}
-#define BPP_TRACE_API2(m,p1,p2)                  {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_BPP, TRACE_TYPE_API, m,p1,p2);}
-#define BPP_TRACE_API3(m,p1,p2,p3)               {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_BPP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define BPP_TRACE_API4(m,p1,p2,p3,p4)            {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_BPP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define BPP_TRACE_API5(m,p1,p2,p3,p4,p5)         {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_BPP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define BPP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)      {if (bpp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_BPP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the BIP profile
-*/
-#define BIP_TRACE_ERROR0(m)                      {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m);}
-#define BIP_TRACE_ERROR1(m,p1)                   {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1);}
-#define BIP_TRACE_ERROR2(m,p1,p2)                {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define BIP_TRACE_ERROR3(m,p1,p2,p3)             {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define BIP_TRACE_ERROR4(m,p1,p2,p3,p4)          {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define BIP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)       {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define BIP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)    {if (bip_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_BIP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define BIP_TRACE_WARNING0(m)                    {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m);}
-#define BIP_TRACE_WARNING1(m,p1)                 {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1);}
-#define BIP_TRACE_WARNING2(m,p1,p2)              {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define BIP_TRACE_WARNING3(m,p1,p2,p3)           {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define BIP_TRACE_WARNING4(m,p1,p2,p3,p4)        {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define BIP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)     {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define BIP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)  {if (bip_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_BIP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define BIP_TRACE_EVENT0(m)                      {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m);}
-#define BIP_TRACE_EVENT1(m,p1)                   {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m, p1);}
-#define BIP_TRACE_EVENT2(m,p1,p2)                {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define BIP_TRACE_EVENT3(m,p1,p2,p3)             {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define BIP_TRACE_EVENT4(m,p1,p2,p3,p4)          {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define BIP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)       {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define BIP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)    {if (bip_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_BIP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define BIP_TRACE_DEBUG0(m)                      {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m);}
-#define BIP_TRACE_DEBUG1(m,p1)                   {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1);}
-#define BIP_TRACE_DEBUG2(m,p1,p2)                {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define BIP_TRACE_DEBUG3(m,p1,p2,p3)             {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define BIP_TRACE_DEBUG4(m,p1,p2,p3,p4)          {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define BIP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)       {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define BIP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)    {if (bip_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_BIP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define BIP_TRACE_API0(m)                        {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_BIP, TRACE_TYPE_API, m);}
-#define BIP_TRACE_API1(m,p1)                     {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_BIP, TRACE_TYPE_API, m, p1);}
-#define BIP_TRACE_API2(m,p1,p2)                  {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_BIP, TRACE_TYPE_API, m,p1,p2);}
-#define BIP_TRACE_API3(m,p1,p2,p3)               {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_BIP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define BIP_TRACE_API4(m,p1,p2,p3,p4)            {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_BIP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define BIP_TRACE_API5(m,p1,p2,p3,p4,p5)         {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_BIP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define BIP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)      {if (bip_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_BIP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for TCS
-*/
-#define TCS_TRACE_ERROR0(m)                     {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m);}
-#define TCS_TRACE_ERROR1(m,p1)                  {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1);}
-#define TCS_TRACE_ERROR2(m,p1,p2)               {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1,p2);}
-#define TCS_TRACE_ERROR3(m,p1,p2,p3)            {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define TCS_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define TCS_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define TCS_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_TCS, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define TCS_TRACE_WARNING0(m)                   {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m);}
-#define TCS_TRACE_WARNING1(m,p1)                {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1);}
-#define TCS_TRACE_WARNING2(m,p1,p2)             {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1,p2);}
-#define TCS_TRACE_WARNING3(m,p1,p2,p3)          {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define TCS_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define TCS_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define TCS_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_TCS, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define TCS_TRACE_EVENT0(m)                     {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m);}
-#define TCS_TRACE_EVENT1(m,p1)                  {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m, p1);}
-#define TCS_TRACE_EVENT2(m,p1,p2)               {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m,p1,p2);}
-#define TCS_TRACE_EVENT3(m,p1,p2,p3)            {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define TCS_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define TCS_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define TCS_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_TCS, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define TCS_TRACE_DEBUG0(m)                     {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m);}
-#define TCS_TRACE_DEBUG1(m,p1)                  {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1);}
-#define TCS_TRACE_DEBUG2(m,p1,p2)               {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define TCS_TRACE_DEBUG3(m,p1,p2,p3)            {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define TCS_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define TCS_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define TCS_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_TCS, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define TCS_TRACE_API0(m)                       {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_TCS, TRACE_TYPE_API, m);}
-#define TCS_TRACE_API1(m,p1)                    {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_TCS, TRACE_TYPE_API, m, p1);}
-#define TCS_TRACE_API2(m,p1,p2)                 {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_TCS, TRACE_TYPE_API, m,p1,p2);}
-#define TCS_TRACE_API3(m,p1,p2,p3)              {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_TCS, TRACE_TYPE_API, m,p1,p2,p3);}
-#define TCS_TRACE_API4(m,p1,p2,p3,p4)           {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_TCS, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define TCS_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_TCS, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define TCS_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (tcs_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_TCS, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for ICP
-*/
-#define ICP_TRACE_ERROR0(m)                     {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m);}
-#define ICP_TRACE_ERROR1(m,p1)                  {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1);}
-#define ICP_TRACE_ERROR2(m,p1,p2)               {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define ICP_TRACE_ERROR3(m,p1,p2,p3)            {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define ICP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define ICP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define ICP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (icp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_ICP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define ICP_TRACE_WARNING0(m)                   {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m);}
-#define ICP_TRACE_WARNING1(m,p1)                {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1);}
-#define ICP_TRACE_WARNING2(m,p1,p2)             {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define ICP_TRACE_WARNING3(m,p1,p2,p3)          {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define ICP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define ICP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define ICP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (icp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_ICP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define ICP_TRACE_EVENT0(m)                     {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m);}
-#define ICP_TRACE_EVENT1(m,p1)                  {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m, p1);}
-#define ICP_TRACE_EVENT2(m,p1,p2)               {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define ICP_TRACE_EVENT3(m,p1,p2,p3)            {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define ICP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define ICP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define ICP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (icp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_ICP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define ICP_TRACE_DEBUG0(m)                     {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m);}
-#define ICP_TRACE_DEBUG1(m,p1)                  {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1);}
-#define ICP_TRACE_DEBUG2(m,p1,p2)               {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define ICP_TRACE_DEBUG3(m,p1,p2,p3)            {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define ICP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define ICP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define ICP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (icp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_ICP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define ICP_TRACE_API0(m)                       {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_ICP, TRACE_TYPE_API, m);}
-#define ICP_TRACE_API1(m,p1)                    {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_ICP, TRACE_TYPE_API, m, p1);}
-#define ICP_TRACE_API2(m,p1,p2)                 {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_ICP, TRACE_TYPE_API, m,p1,p2);}
-#define ICP_TRACE_API3(m,p1,p2,p3)              {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_ICP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define ICP_TRACE_API4(m,p1,p2,p3,p4)           {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_ICP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define ICP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_ICP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define ICP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (icp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_ICP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* CTP */
-#define CTP_TRACE_ERROR0(m)                     {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m);}
-#define CTP_TRACE_ERROR1(m,p1)                  {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1);}
-#define CTP_TRACE_ERROR2(m,p1,p2)               {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define CTP_TRACE_ERROR3(m,p1,p2,p3)            {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define CTP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define CTP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define CTP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_CTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define CTP_TRACE_WARNING0(m)                   {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m);}
-#define CTP_TRACE_WARNING1(m,p1)                {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1);}
-#define CTP_TRACE_WARNING2(m,p1,p2)             {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define CTP_TRACE_WARNING3(m,p1,p2,p3)          {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define CTP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define CTP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define CTP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_CTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define CTP_TRACE_EVENT0(m)                     {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m);}
-#define CTP_TRACE_EVENT1(m,p1)                  {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m, p1);}
-#define CTP_TRACE_EVENT2(m,p1,p2)               {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define CTP_TRACE_EVENT3(m,p1,p2,p3)            {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define CTP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define CTP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define CTP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_CTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define CTP_TRACE_DEBUG0(m)                     {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m);}
-#define CTP_TRACE_DEBUG1(m,p1)                  {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1);}
-#define CTP_TRACE_DEBUG2(m,p1,p2)               {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define CTP_TRACE_DEBUG3(m,p1,p2,p3)            {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define CTP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define CTP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define CTP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (ctp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_CTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-
-/* define traces for HID Host */
-#define HIDH_TRACE_ERROR0(m)                     {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m);}
-#define HIDH_TRACE_ERROR1(m,p1)                  {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m, p1);}
-#define HIDH_TRACE_ERROR2(m,p1,p2)               {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HIDH_TRACE_ERROR3(m,p1,p2,p3)            {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HIDH_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HIDH_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HIDH_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (hh_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDH_TRACE_WARNING0(m)                   {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m);}
-#define HIDH_TRACE_WARNING1(m,p1)                {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1);}
-#define HIDH_TRACE_WARNING2(m,p1,p2)             {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HIDH_TRACE_WARNING3(m,p1,p2,p3)          {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HIDH_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HIDH_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HIDH_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (hh_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDH_TRACE_API0(m)                       {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_API, m);}
-#define HIDH_TRACE_API1(m,p1)                    {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_API, m, p1);}
-#define HIDH_TRACE_API2(m,p1,p2)                 {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2);}
-#define HIDH_TRACE_API3(m,p1,p2,p3)              {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3);}
-#define HIDH_TRACE_API4(m,p1,p2,p3,p4)           {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define HIDH_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define HIDH_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (hh_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDH_TRACE_EVENT0(m)                     {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m);}
-#define HIDH_TRACE_EVENT1(m,p1)                  {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m, p1);}
-#define HIDH_TRACE_EVENT2(m,p1,p2)               {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HIDH_TRACE_EVENT3(m,p1,p2,p3)            {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HIDH_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HIDH_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HIDH_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (hh_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDH_TRACE_DEBUG0(m)                     {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m);}
-#define HIDH_TRACE_DEBUG1(m,p1)                  {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1);}
-#define HIDH_TRACE_DEBUG2(m,p1,p2)               {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HIDH_TRACE_DEBUG3(m,p1,p2,p3)            {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HIDH_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HIDH_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HIDH_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (hh_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for HID Device */
-#define HIDD_TRACE_ERROR0(m)                     {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m);}
-#define HIDD_TRACE_ERROR1(m,p1)                  {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m, p1);}
-#define HIDD_TRACE_ERROR2(m,p1,p2)               {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HIDD_TRACE_ERROR3(m,p1,p2,p3)            {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HIDD_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HIDD_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HIDD_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (hd_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDD_TRACE_WARNING0(m)                   {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m);}
-#define HIDD_TRACE_WARNING1(m,p1)                {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1);}
-#define HIDD_TRACE_WARNING2(m,p1,p2)             {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HIDD_TRACE_WARNING3(m,p1,p2,p3)          {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HIDD_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HIDD_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HIDD_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (hd_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDD_TRACE_API0(m)                       {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_API, m);}
-#define HIDD_TRACE_API1(m,p1)                    {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_API, m, p1);}
-#define HIDD_TRACE_API2(m,p1,p2)                 {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2);}
-#define HIDD_TRACE_API3(m,p1,p2,p3)              {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3);}
-#define HIDD_TRACE_API4(m,p1,p2,p3,p4)           {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define HIDD_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define HIDD_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (hd_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDD_TRACE_EVENT0(m)                     {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m);}
-#define HIDD_TRACE_EVENT1(m,p1)                  {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m, p1);}
-#define HIDD_TRACE_EVENT2(m,p1,p2)               {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HIDD_TRACE_EVENT3(m,p1,p2,p3)            {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HIDD_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HIDD_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HIDD_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (hd_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HIDD_TRACE_DEBUG0(m)                     {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m);}
-#define HIDD_TRACE_DEBUG1(m,p1)                  {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1);}
-#define HIDD_TRACE_DEBUG2(m,p1,p2)               {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HIDD_TRACE_DEBUG3(m,p1,p2,p3)            {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HIDD_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HIDD_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HIDD_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (hd_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for headset profile */
-#define HSP2_TRACE_ERROR0(pcb,m)                     {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m);}
-#define HSP2_TRACE_ERROR1(pcb,m,p1)                  {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m, p1);}
-#define HSP2_TRACE_ERROR2(pcb,m,p1,p2)               {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HSP2_TRACE_ERROR3(pcb,m,p1,p2,p3)            {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HSP2_TRACE_ERROR4(pcb,m,p1,p2,p3,p4)         {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HSP2_TRACE_ERROR5(pcb,m,p1,p2,p3,p4,p5)      {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HSP2_TRACE_ERROR6(pcb,m,p1,p2,p3,p4,p5,p6)   {if (pcb->trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HSP2, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HSP2_TRACE_WARNING0(pcb,m)                   {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m);}
-#define HSP2_TRACE_WARNING1(pcb,m,p1)                {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1);}
-#define HSP2_TRACE_WARNING2(pcb,m,p1,p2)             {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HSP2_TRACE_WARNING3(pcb,m,p1,p2,p3)          {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HSP2_TRACE_WARNING4(pcb,m,p1,p2,p3,p4)       {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HSP2_TRACE_WARNING5(pcb,m,p1,p2,p3,p4,p5)    {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HSP2_TRACE_WARNING6(pcb,m,p1,p2,p3,p4,p5,p6) {if (pcb->trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HSP2, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HSP2_TRACE_API0(pcb,m)                       {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_HSP2, TRACE_TYPE_API, m);}
-#define HSP2_TRACE_API1(pcb,m,p1)                    {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_HSP2, TRACE_TYPE_API, m, p1);}
-#define HSP2_TRACE_API2(pcb,m,p1,p2)                 {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_HSP2, TRACE_TYPE_API, m,p1,p2);}
-#define HSP2_TRACE_API3(pcb,m,p1,p2,p3)              {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_HSP2, TRACE_TYPE_API, m,p1,p2,p3);}
-#define HSP2_TRACE_API4(pcb,m,p1,p2,p3,p4)           {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_HSP2, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define HSP2_TRACE_API5(pcb,m,p1,p2,p3,p4,p5)        {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_HSP2, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define HSP2_TRACE_API6(pcb,m,p1,p2,p3,p4,p5,p6)     {if (pcb->trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_HSP2, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define HSP2_TRACE_EVENT0(pcb,m)                     {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m);}
-#define HSP2_TRACE_EVENT1(pcb,m,p1)                  {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m, p1);}
-#define HSP2_TRACE_EVENT2(pcb,m,p1,p2)               {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HSP2_TRACE_EVENT3(pcb,m,p1,p2,p3)            {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HSP2_TRACE_EVENT4(pcb,m,p1,p2,p3,p4)         {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HSP2_TRACE_EVENT5(pcb,m,p1,p2,p3,p4,p5)      {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HSP2_TRACE_EVENT6(pcb,m,p1,p2,p3,p4,p5,p6)   {if (pcb->trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HSP2, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HSP2_TRACE_DEBUG0(pcb,m)                     {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m);}
-#define HSP2_TRACE_DEBUG1(pcb,m,p1)                  {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1);}
-#define HSP2_TRACE_DEBUG2(pcb,m,p1,p2)               {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HSP2_TRACE_DEBUG3(pcb,m,p1,p2,p3)            {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HSP2_TRACE_DEBUG4(pcb,m,p1,p2,p3,p4)         {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HSP2_TRACE_DEBUG5(pcb,m,p1,p2,p3,p4,p5)      {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HSP2_TRACE_DEBUG6(pcb,m,p1,p2,p3,p4,p5,p6)   {if (pcb->trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HSP2, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the NFC unit
-*/
-#define NFC_TRACE_ERROR0(m)                     {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m);}
-#define NFC_TRACE_ERROR1(m,p1)                  {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1);}
-#define NFC_TRACE_ERROR2(m,p1,p2)               {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NFC_TRACE_ERROR3(m,p1,p2,p3)            {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NFC_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NFC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NFC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFC_TRACE_WARNING0(m)                   {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m);}
-#define NFC_TRACE_WARNING1(m,p1)                {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1);}
-#define NFC_TRACE_WARNING2(m,p1,p2)             {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NFC_TRACE_WARNING3(m,p1,p2,p3)          {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NFC_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NFC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NFC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFC_TRACE_API0(m)                       {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_API, m);}
-#define NFC_TRACE_API1(m,p1)                    {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1);}
-#define NFC_TRACE_API2(m,p1,p2)                 {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1,p2);}
-#define NFC_TRACE_API3(m,p1,p2,p3)              {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NFC_TRACE_API4(m,p1,p2,p3,p4)           {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NFC_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NFC_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFC_TRACE_EVENT0(m)                     {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m);}
-#define NFC_TRACE_EVENT1(m,p1)                  {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m, p1);}
-#define NFC_TRACE_EVENT2(m,p1,p2)               {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NFC_TRACE_EVENT3(m,p1,p2,p3)            {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NFC_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NFC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NFC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFC_TRACE_DEBUG0(m)                     {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m);}
-#define NFC_TRACE_DEBUG1(m,p1)                  {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1);}
-#define NFC_TRACE_DEBUG2(m,p1,p2)               {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NFC_TRACE_DEBUG3(m,p1,p2,p3)            {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NFC_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NFC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NFC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NFC, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_ERROR0(m)                     {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m);}
-#define NCI_TRACE_ERROR1(m,p1)                  {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1);}
-#define NCI_TRACE_ERROR2(m,p1,p2)               {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NCI_TRACE_ERROR3(m,p1,p2,p3)            {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NCI_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_WARNING0(m)                   {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m);}
-#define NCI_TRACE_WARNING1(m,p1)                {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1);}
-#define NCI_TRACE_WARNING2(m,p1,p2)             {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NCI_TRACE_WARNING3(m,p1,p2,p3)          {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NCI_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_API0(m)                       {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_API, m);}
-#define NCI_TRACE_API1(m,p1)                    {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1);}
-#define NCI_TRACE_API2(m,p1,p2)                 {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2);}
-#define NCI_TRACE_API3(m,p1,p2,p3)              {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NCI_TRACE_API4(m,p1,p2,p3,p4)           {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NCI_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_EVENT0(m)                     {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m);}
-#define NCI_TRACE_EVENT1(m,p1)                  {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1);}
-#define NCI_TRACE_EVENT2(m,p1,p2)               {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NCI_TRACE_EVENT3(m,p1,p2,p3)            {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NCI_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_DEBUG0(m)                     {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m);}
-#define NCI_TRACE_DEBUG1(m,p1)                  {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1);}
-#define NCI_TRACE_DEBUG2(m,p1,p2)               {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NCI_TRACE_DEBUG3(m,p1,p2,p3)            {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NCI_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (ncit_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define RW_TRACE_ERROR0(m)                     {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m);}
-#define RW_TRACE_ERROR1(m,p1)                  {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1);}
-#define RW_TRACE_ERROR2(m,p1,p2)               {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1,p2);}
-#define RW_TRACE_ERROR3(m,p1,p2,p3)            {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define RW_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define RW_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define RW_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (rw_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define RW_TRACE_WARNING0(m)                   {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m);}
-#define RW_TRACE_WARNING1(m,p1)                {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1);}
-#define RW_TRACE_WARNING2(m,p1,p2)             {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1,p2);}
-#define RW_TRACE_WARNING3(m,p1,p2,p3)          {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define RW_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define RW_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define RW_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (rw_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define RW_TRACE_API0(m)                       {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_API, m);}
-#define RW_TRACE_API1(m,p1)                    {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1);}
-#define RW_TRACE_API2(m,p1,p2)                 {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1,p2);}
-#define RW_TRACE_API3(m,p1,p2,p3)              {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1,p2,p3);}
-#define RW_TRACE_API4(m,p1,p2,p3,p4)           {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define RW_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define RW_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (rw_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define RW_TRACE_EVENT0(m)                     {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m);}
-#define RW_TRACE_EVENT1(m,p1)                  {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m, p1);}
-#define RW_TRACE_EVENT2(m,p1,p2)               {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m,p1,p2);}
-#define RW_TRACE_EVENT3(m,p1,p2,p3)            {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define RW_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define RW_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define RW_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (rw_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define RW_TRACE_DEBUG0(m)                     {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m);}
-#define RW_TRACE_DEBUG1(m,p1)                  {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1);}
-#define RW_TRACE_DEBUG2(m,p1,p2)               {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define RW_TRACE_DEBUG3(m,p1,p2,p3)            {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define RW_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define RW_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define RW_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (rw_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_RW, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define CE_TRACE_ERROR0(m)                     {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m);}
-#define CE_TRACE_ERROR1(m,p1)                  {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1);}
-#define CE_TRACE_ERROR2(m,p1,p2)               {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1,p2);}
-#define CE_TRACE_ERROR3(m,p1,p2,p3)            {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define CE_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define CE_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define CE_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (ce_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define CE_TRACE_WARNING0(m)                   {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m);}
-#define CE_TRACE_WARNING1(m,p1)                {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1);}
-#define CE_TRACE_WARNING2(m,p1,p2)             {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1,p2);}
-#define CE_TRACE_WARNING3(m,p1,p2,p3)          {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define CE_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define CE_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define CE_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (ce_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define CE_TRACE_API0(m)                       {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_API, m);}
-#define CE_TRACE_API1(m,p1)                    {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1);}
-#define CE_TRACE_API2(m,p1,p2)                 {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1,p2);}
-#define CE_TRACE_API3(m,p1,p2,p3)              {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1,p2,p3);}
-#define CE_TRACE_API4(m,p1,p2,p3,p4)           {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define CE_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define CE_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (ce_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define CE_TRACE_EVENT0(m)                     {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m);}
-#define CE_TRACE_EVENT1(m,p1)                  {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m, p1);}
-#define CE_TRACE_EVENT2(m,p1,p2)               {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m,p1,p2);}
-#define CE_TRACE_EVENT3(m,p1,p2,p3)            {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define CE_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define CE_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define CE_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (ce_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define CE_TRACE_DEBUG0(m)                     {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m);}
-#define CE_TRACE_DEBUG1(m,p1)                  {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1);}
-#define CE_TRACE_DEBUG2(m,p1,p2)               {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define CE_TRACE_DEBUG3(m,p1,p2,p3)            {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define CE_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define CE_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define CE_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (ce_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_CE, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define NDEF_TRACE_ERROR0(m)                     {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m);}
-#define NDEF_TRACE_ERROR1(m,p1)                  {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1);}
-#define NDEF_TRACE_ERROR2(m,p1,p2)               {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NDEF_TRACE_ERROR3(m,p1,p2,p3)            {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NDEF_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NDEF_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NDEF_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NDEF_TRACE_WARNING0(m)                   {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m);}
-#define NDEF_TRACE_WARNING1(m,p1)                {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1);}
-#define NDEF_TRACE_WARNING2(m,p1,p2)             {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NDEF_TRACE_WARNING3(m,p1,p2,p3)          {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NDEF_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NDEF_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NDEF_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NDEF_TRACE_API0(m)                       {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_API, m);}
-#define NDEF_TRACE_API1(m,p1)                    {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1);}
-#define NDEF_TRACE_API2(m,p1,p2)                 {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1,p2);}
-#define NDEF_TRACE_API3(m,p1,p2,p3)              {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NDEF_TRACE_API4(m,p1,p2,p3,p4)           {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NDEF_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NDEF_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NDEF_TRACE_EVENT0(m)                     {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m);}
-#define NDEF_TRACE_EVENT1(m,p1)                  {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m, p1);}
-#define NDEF_TRACE_EVENT2(m,p1,p2)               {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NDEF_TRACE_EVENT3(m,p1,p2,p3)            {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NDEF_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NDEF_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NDEF_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NDEF_TRACE_DEBUG0(m)                     {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m);}
-#define NDEF_TRACE_DEBUG1(m,p1)                  {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1);}
-#define NDEF_TRACE_DEBUG2(m,p1,p2)               {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NDEF_TRACE_DEBUG3(m,p1,p2,p3)            {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NDEF_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NDEF_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NDEF_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (ndef_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NDEF, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the NFA unit
-*/
-#define NFA_TRACE_ERROR0(m)                     {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m);}
-#define NFA_TRACE_ERROR1(m,p1)                  {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1);}
-#define NFA_TRACE_ERROR2(m,p1,p2)               {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NFA_TRACE_ERROR3(m,p1,p2,p3)            {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NFA_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NFA_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NFA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFA_TRACE_WARNING0(m)                   {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m);}
-#define NFA_TRACE_WARNING1(m,p1)                {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1);}
-#define NFA_TRACE_WARNING2(m,p1,p2)             {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NFA_TRACE_WARNING3(m,p1,p2,p3)          {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NFA_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NFA_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NFA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFA_TRACE_API0(m)                       {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_API, m);}
-#define NFA_TRACE_API1(m,p1)                    {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1);}
-#define NFA_TRACE_API2(m,p1,p2)                 {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1,p2);}
-#define NFA_TRACE_API3(m,p1,p2,p3)              {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NFA_TRACE_API4(m,p1,p2,p3,p4)           {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NFA_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NFA_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFA_TRACE_EVENT0(m)                     {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m);}
-#define NFA_TRACE_EVENT1(m,p1)                  {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m, p1);}
-#define NFA_TRACE_EVENT2(m,p1,p2)               {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NFA_TRACE_EVENT3(m,p1,p2,p3)            {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NFA_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NFA_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NFA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NFA_TRACE_DEBUG0(m)                     {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m);}
-#define NFA_TRACE_DEBUG1(m,p1)                  {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1);}
-#define NFA_TRACE_DEBUG2(m,p1,p2)               {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NFA_TRACE_DEBUG3(m,p1,p2,p3)            {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NFA_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NFA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NFA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_sys_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NFA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the NFA P2P unit
-*/
-#define P2P_TRACE_ERROR0(m)                     {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m);}
-#define P2P_TRACE_ERROR1(m,p1)                  {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1);}
-#define P2P_TRACE_ERROR2(m,p1,p2)               {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1,p2);}
-#define P2P_TRACE_ERROR3(m,p1,p2,p3)            {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define P2P_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define P2P_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define P2P_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define P2P_TRACE_WARNING0(m)                   {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m);}
-#define P2P_TRACE_WARNING1(m,p1)                {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1);}
-#define P2P_TRACE_WARNING2(m,p1,p2)             {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1,p2);}
-#define P2P_TRACE_WARNING3(m,p1,p2,p3)          {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define P2P_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define P2P_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define P2P_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define P2P_TRACE_API0(m)                       {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_API, m);}
-#define P2P_TRACE_API1(m,p1)                    {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1);}
-#define P2P_TRACE_API2(m,p1,p2)                 {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1,p2);}
-#define P2P_TRACE_API3(m,p1,p2,p3)              {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1,p2,p3);}
-#define P2P_TRACE_API4(m,p1,p2,p3,p4)           {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define P2P_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define P2P_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define P2P_TRACE_EVENT0(m)                     {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m);}
-#define P2P_TRACE_EVENT1(m,p1)                  {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m, p1);}
-#define P2P_TRACE_EVENT2(m,p1,p2)               {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m,p1,p2);}
-#define P2P_TRACE_EVENT3(m,p1,p2,p3)            {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define P2P_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define P2P_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define P2P_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define P2P_TRACE_DEBUG0(m)                     {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m);}
-#define P2P_TRACE_DEBUG1(m,p1)                  {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1);}
-#define P2P_TRACE_DEBUG2(m,p1,p2)               {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define P2P_TRACE_DEBUG3(m,p1,p2,p3)            {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define P2P_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define P2P_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define P2P_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_p2p_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_P2P, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the NFA CHO unit
-*/
-#define CHO_TRACE_ERROR0(m)                     {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m);}
-#define CHO_TRACE_ERROR1(m,p1)                  {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1);}
-#define CHO_TRACE_ERROR2(m,p1,p2)               {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1,p2);}
-#define CHO_TRACE_ERROR3(m,p1,p2,p3)            {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define CHO_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define CHO_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define CHO_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_CHO, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define CHO_TRACE_WARNING0(m)                   {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m);}
-#define CHO_TRACE_WARNING1(m,p1)                {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1);}
-#define CHO_TRACE_WARNING2(m,p1,p2)             {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1,p2);}
-#define CHO_TRACE_WARNING3(m,p1,p2,p3)          {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define CHO_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define CHO_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define CHO_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_CHO, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define CHO_TRACE_API0(m)                       {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_CHO, TRACE_TYPE_API, m);}
-#define CHO_TRACE_API1(m,p1)                    {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1);}
-#define CHO_TRACE_API2(m,p1,p2)                 {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1,p2);}
-#define CHO_TRACE_API3(m,p1,p2,p3)              {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1,p2,p3);}
-#define CHO_TRACE_API4(m,p1,p2,p3,p4)           {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define CHO_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define CHO_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_CHO, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define CHO_TRACE_EVENT0(m)                     {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m);}
-#define CHO_TRACE_EVENT1(m,p1)                  {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m, p1);}
-#define CHO_TRACE_EVENT2(m,p1,p2)               {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m,p1,p2);}
-#define CHO_TRACE_EVENT3(m,p1,p2,p3)            {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define CHO_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define CHO_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define CHO_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_CHO, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define CHO_TRACE_DEBUG0(m)                     {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m);}
-#define CHO_TRACE_DEBUG1(m,p1)                  {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1);}
-#define CHO_TRACE_DEBUG2(m,p1,p2)               {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define CHO_TRACE_DEBUG3(m,p1,p2,p3)            {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define CHO_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define CHO_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define CHO_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_cho_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_CHO, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the NFA SNEP unit
-*/
-#define SNEP_TRACE_ERROR0(m)                     {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m);}
-#define SNEP_TRACE_ERROR1(m,p1)                  {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1);}
-#define SNEP_TRACE_ERROR2(m,p1,p2)               {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define SNEP_TRACE_ERROR3(m,p1,p2,p3)            {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define SNEP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define SNEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define SNEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_SNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define SNEP_TRACE_WARNING0(m)                   {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m);}
-#define SNEP_TRACE_WARNING1(m,p1)                {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1);}
-#define SNEP_TRACE_WARNING2(m,p1,p2)             {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define SNEP_TRACE_WARNING3(m,p1,p2,p3)          {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define SNEP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define SNEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define SNEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_SNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define SNEP_TRACE_API0(m)                       {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_SNEP, TRACE_TYPE_API, m);}
-#define SNEP_TRACE_API1(m,p1)                    {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1);}
-#define SNEP_TRACE_API2(m,p1,p2)                 {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1,p2);}
-#define SNEP_TRACE_API3(m,p1,p2,p3)              {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define SNEP_TRACE_API4(m,p1,p2,p3,p4)           {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define SNEP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define SNEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_SNEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define SNEP_TRACE_EVENT0(m)                     {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m);}
-#define SNEP_TRACE_EVENT1(m,p1)                  {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m, p1);}
-#define SNEP_TRACE_EVENT2(m,p1,p2)               {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define SNEP_TRACE_EVENT3(m,p1,p2,p3)            {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define SNEP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define SNEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define SNEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_SNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define SNEP_TRACE_DEBUG0(m)                     {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m);}
-#define SNEP_TRACE_DEBUG1(m,p1)                  {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1);}
-#define SNEP_TRACE_DEBUG2(m,p1,p2)               {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define SNEP_TRACE_DEBUG3(m,p1,p2,p3)            {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define SNEP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define SNEP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define SNEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (nfa_snep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_SNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define MMI_TRACE_0(m)
-#define MMI_TRACE_1(m,p1)
-#define MMI_TRACE_2(m,p1,p2)
-#define MMI_TRACE_3(m,p1,p2,p3)
-#define MMI_TRACE_4(m,p1,p2,p3,p4)
-#define MMI_TRACE_5(m,p1,p2,p3,p4,p5)
-#define MMI_TRACE_6(m,p1,p2,p3,p4,p5,p6)
-
-#define MMI_DEBUG_0(m)                           BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m)
-#define MMI_DEBUG_1(m,p1)                        BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1)
-#define MMI_DEBUG_2(m,p1,p2)                     BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2)
-#define MMI_DEBUG_3(m,p1,p2,p3)                  BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3)
-#define MMI_DEBUG_4(m,p1,p2,p3,p4)               BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4)
-#define MMI_DEBUG_5(m,p1,p2,p3,p4,p5)            BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5)
-#define MMI_DEBUG_6(m,p1,p2,p3,p4,p5,p6)         BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6)
-
-#define MMI_WARNING_0(m)                         BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m)
-#define MMI_WARNING_1(m,p1)                      BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1)
-#define MMI_WARNING_2(m,p1,p2)                   BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2)
-#define MMI_WARNING_3(m,p1,p2,p3)                BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3)
-#define MMI_WARNING_4(m,p1,p2,p3,p4)             BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4)
-#define MMI_WARNING_5(m,p1,p2,p3,p4,p5)          BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5)
-#define MMI_WARNING_6(m,p1,p2,p3,p4,p5,p6)       BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6)
-
-#define MMI_ERROR_0(m)                           BT_TRACE_0(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m)
-#define MMI_ERROR_1(m,p1)                        BT_TRACE_1(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1)
-#define MMI_ERROR_2(m,p1,p2)                     BT_TRACE_2(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2)
-#define MMI_ERROR_3(m,p1,p2,p3)                  BT_TRACE_3(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3)
-#define MMI_ERROR_4(m,p1,p2,p3,p4)               BT_TRACE_4(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4)
-#define MMI_ERROR_5(m,p1,p2,p3,p4,p5)            BT_TRACE_5(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5)
-#define MMI_ERROR_6(m,p1,p2,p3,p4,p5,p6)         BT_TRACE_6(TRACE_LAYER_HID, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6)
-
-#define TAK_TRACE_0(m)                            MMI_Echo(m)
-
-/* hid mouse module traces */
-
-#define MSKB_TRACE_0(m)                         MMI_Echo(m)
-#define MSKB_TRACE_1(m,p1)                      MMI_Echo(m,p1)
-#define MSKB_TRACE_2(m,p1,p2)                   MMI_Echo(m,p1,p2)
-#define MSKB_TRACE_3(m,p1,p2,p3)                MMI_Echo(m,p1,p2,p3)
-#define MSKB_TRACE_4(m,p1,p2,p3,p4)             MMI_Echo(m,p1,p2,p3,p4)
-#define MSKB_TRACE_5(m,p1,p2,p3,p4,p5)          MMI_Echo(m,p1,p2,p3,p4,p5)
-#define MSKB_TRACE_6(m,p1,p2,p3,p4,p5,p6)       MMI_Echo(m,p1,p2,p3,p4,p5,p6)
-
-#define MSKB_DEBUG_0(m)                         MMI_Echo(m)
-#define MSKB_DEBUG_1(m,p1)                      MMI_Echo(m,p1)
-#define MSKB_DEBUG_2(m,p1,p2)                   MMI_Echo(m,p1,p2)
-#define MSKB_DEBUG_3(m,p1,p2,p3)                MMI_Echo(m,p1,p2,p3)
-#define MSKB_DEBUG_4(m,p1,p2,p3,p4)             MMI_Echo(m,p1,p2,p3,p4)
-#define MSKB_DEBUG_5(m,p1,p2,p3,p4,p5)          MMI_Echo(m,p1,p2,p3,p4,p5)
-#define MSKB_DEBUG_6(m,p1,p2,p3,p4,p5,p6)       MMI_Echo(m,p1,p2,p3,p4,p5,p6)
-
-#define MSKB_ERROR_0(m)                         MMI_Echo(m)
-#define MSKB_ERROR_1(m,p1)                      MMI_Echo(m,p1)
-#define MSKB_ERROR_2(m,p1,p2)                   MMI_Echo(m,p1,p2)
-#define MSKB_ERROR_3(m,p1,p2,p3)                MMI_Echo(m,p1,p2,p3)
-#define MSKB_ERROR_4(m,p1,p2,p3,p4)             MMI_Echo(m,p1,p2,p3,p4)
-#define MSKB_ERROR_5(m,p1,p2,p3,p4,p5)          MMI_Echo(m,p1,p2,p3,p4,p5)
-#define MSKB_ERROR_6(m,p1,p2,p3,p4,p5,p6)       MMI_Echo(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for DUN */
-
-#define DUN_TRACE_ERROR0(m)                     {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m);}
-#define DUN_TRACE_ERROR1(m,p1)                  {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m, p1);}
-#define DUN_TRACE_ERROR2(m,p1,p2)               {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m,p1,p2);}
-#define DUN_TRACE_ERROR3(m,p1,p2,p3)            {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define DUN_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define DUN_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define DUN_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (dun_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_DUN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define DUN_TRACE_WARNING0(m)                   {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m);}
-#define DUN_TRACE_WARNING1(m,p1)                {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1);}
-#define DUN_TRACE_WARNING2(m,p1,p2)             {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1,p2);}
-#define DUN_TRACE_WARNING3(m,p1,p2,p3)          {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define DUN_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define DUN_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define DUN_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (dun_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_DUN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define DUN_TRACE_API0(m)                       {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_DUN, TRACE_TYPE_API, m);}
-#define DUN_TRACE_API1(m,p1)                    {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_DUN, TRACE_TYPE_API, m, p1);}
-#define DUN_TRACE_API2(m,p1,p2)                 {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_DUN, TRACE_TYPE_API, m,p1,p2);}
-#define DUN_TRACE_API3(m,p1,p2,p3)              {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_DUN, TRACE_TYPE_API, m,p1,p2,p3);}
-#define DUN_TRACE_API4(m,p1,p2,p3,p4)           {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_DUN, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define DUN_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_DUN, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define DUN_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (dun_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_DUN, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define DUN_TRACE_EVENT0(m)                     {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m);}
-#define DUN_TRACE_EVENT1(m,p1)                  {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m, p1);}
-#define DUN_TRACE_EVENT2(m,p1,p2)               {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m,p1,p2);}
-#define DUN_TRACE_EVENT3(m,p1,p2,p3)            {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define DUN_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define DUN_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define DUN_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (dun_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_DUN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define DUN_TRACE_DEBUG0(m)                     {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m);}
-#define DUN_TRACE_DEBUG1(m,p1)                  {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1);}
-#define DUN_TRACE_DEBUG2(m,p1,p2)               {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define DUN_TRACE_DEBUG3(m,p1,p2,p3)            {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define DUN_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define DUN_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define DUN_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (dun_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_DUN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for hardcopy cable replacement profile */
-
-#define HCRP_TRACE_ERROR0(m)                     {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m);}
-#define HCRP_TRACE_ERROR1(m,p1)                  {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m, p1);}
-#define HCRP_TRACE_ERROR2(m,p1,p2)               {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HCRP_TRACE_ERROR3(m,p1,p2,p3)            {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HCRP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HCRP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HCRP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRP_TRACE_WARNING0(m)                   {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m);}
-#define HCRP_TRACE_WARNING1(m,p1)                {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1);}
-#define HCRP_TRACE_WARNING2(m,p1,p2)             {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HCRP_TRACE_WARNING3(m,p1,p2,p3)          {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HCRP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HCRP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HCRP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRP_TRACE_API0(m)                       {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_API, m);}
-#define HCRP_TRACE_API1(m,p1)                    {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_API, m, p1);}
-#define HCRP_TRACE_API2(m,p1,p2)                 {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2);}
-#define HCRP_TRACE_API3(m,p1,p2,p3)              {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define HCRP_TRACE_API4(m,p1,p2,p3,p4)           {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define HCRP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define HCRP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRP_TRACE_EVENT0(m)                     {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m);}
-#define HCRP_TRACE_EVENT1(m,p1)                  {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m, p1);}
-#define HCRP_TRACE_EVENT2(m,p1,p2)               {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HCRP_TRACE_EVENT3(m,p1,p2,p3)            {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HCRP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HCRP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HCRP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRP_TRACE_DEBUG0(m)                     {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m);}
-#define HCRP_TRACE_DEBUG1(m,p1)                  {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1);}
-#define HCRP_TRACE_DEBUG2(m,p1,p2)               {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HCRP_TRACE_DEBUG3(m,p1,p2,p3)            {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HCRP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HCRP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HCRP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (hcrp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for multi-client server hardcopy cable replacement profile */
-
-#define HCRPM_TRACE_ERROR0(m)                     {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m);}
-#define HCRPM_TRACE_ERROR1(m,p1)                  {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m, p1);}
-#define HCRPM_TRACE_ERROR2(m,p1,p2)               {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define HCRPM_TRACE_ERROR3(m,p1,p2,p3)            {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define HCRPM_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define HCRPM_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define HCRPM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRPM_TRACE_WARNING0(m)                   {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m);}
-#define HCRPM_TRACE_WARNING1(m,p1)                {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1);}
-#define HCRPM_TRACE_WARNING2(m,p1,p2)             {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define HCRPM_TRACE_WARNING3(m,p1,p2,p3)          {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define HCRPM_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define HCRPM_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define HCRPM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRPM_TRACE_API0(m)                       {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_API, m);}
-#define HCRPM_TRACE_API1(m,p1)                    {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_API, m, p1);}
-#define HCRPM_TRACE_API2(m,p1,p2)                 {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2);}
-#define HCRPM_TRACE_API3(m,p1,p2,p3)              {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define HCRPM_TRACE_API4(m,p1,p2,p3,p4)           {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define HCRPM_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define HCRPM_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRPM_TRACE_EVENT0(m)                     {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m);}
-#define HCRPM_TRACE_EVENT1(m,p1)                  {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m, p1);}
-#define HCRPM_TRACE_EVENT2(m,p1,p2)               {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define HCRPM_TRACE_EVENT3(m,p1,p2,p3)            {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define HCRPM_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define HCRPM_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define HCRPM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define HCRPM_TRACE_DEBUG0(m)                     {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m);}
-#define HCRPM_TRACE_DEBUG1(m,p1)                  {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1);}
-#define HCRPM_TRACE_DEBUG2(m,p1,p2)               {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define HCRPM_TRACE_DEBUG3(m,p1,p2,p3)            {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define HCRPM_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define HCRPM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define HCRPM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (hcrpm_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_HCRP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for RPC */
-
-#define RPC_TRACE_ERROR0(m)                      {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, (m));}
-#define RPC_TRACE_ERROR1(m,p1)                   {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1));}
-#define RPC_TRACE_ERROR2(m,p1,p2)                {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2));}
-#define RPC_TRACE_ERROR3(m,p1,p2,p3)             {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define RPC_TRACE_ERROR4(m,p1,p2,p3,p4)          {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define RPC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)       {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define RPC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)    {if (rpc_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define RPC_TRACE_WARNING0(m)                    {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, (m));}
-#define RPC_TRACE_WARNING1(m,p1)                 {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1));}
-#define RPC_TRACE_WARNING2(m,p1,p2)              {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2));}
-#define RPC_TRACE_WARNING3(m,p1,p2,p3)           {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define RPC_TRACE_WARNING4(m,p1,p2,p3,p4)        {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define RPC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)     {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define RPC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)  {if (rpc_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define RPC_TRACE_API0(m)                        {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, (m));}
-#define RPC_TRACE_API1(m,p1)                     {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1));}
-#define RPC_TRACE_API2(m,p1,p2)                  {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2));}
-#define RPC_TRACE_API3(m,p1,p2,p3)               {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define RPC_TRACE_API4(m,p1,p2,p3,p4)            {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define RPC_TRACE_API5(m,p1,p2,p3,p4,p5)         {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define RPC_TRACE_API6(m,p1,p2,p3,p4,p5,p6)      {if (rpc_trace_level >= BT_TRACE_LEVEL_API) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define RPC_TRACE_EVENT0(m)                      {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, (m));}
-#define RPC_TRACE_EVENT1(m,p1)                   {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1));}
-#define RPC_TRACE_EVENT2(m,p1,p2)                {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2));}
-#define RPC_TRACE_EVENT3(m,p1,p2,p3)             {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define RPC_TRACE_EVENT4(m,p1,p2,p3,p4)          {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define RPC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)       {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define RPC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)    {if (rpc_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define RPC_TRACE_DEBUG0(m)                      {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, (m));}
-#define RPC_TRACE_DEBUG1(m,p1)                   {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1));}
-#define RPC_TRACE_DEBUG2(m,p1,p2)                {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2));}
-#define RPC_TRACE_DEBUG3(m,p1,p2,p3)             {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define RPC_TRACE_DEBUG4(m,p1,p2,p3,p4)          {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define RPC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)       {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define RPC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)    {if (rpc_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_RPC | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-/* define traces for BNEP */
-
-#define BNEP_TRACE_ERROR0(m)                     {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m);}
-#define BNEP_TRACE_ERROR1(m,p1)                  {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m, p1);}
-#define BNEP_TRACE_ERROR2(m,p1,p2)               {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define BNEP_TRACE_ERROR3(m,p1,p2,p3)            {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define BNEP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define BNEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define BNEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_BNEP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define BNEP_TRACE_WARNING0(m)                   {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m);}
-#define BNEP_TRACE_WARNING1(m,p1)                {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1);}
-#define BNEP_TRACE_WARNING2(m,p1,p2)             {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define BNEP_TRACE_WARNING3(m,p1,p2,p3)          {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define BNEP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define BNEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define BNEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_BNEP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define BNEP_TRACE_API0(m)                       {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_BNEP, TRACE_TYPE_API, m);}
-#define BNEP_TRACE_API1(m,p1)                    {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_BNEP, TRACE_TYPE_API, m, p1);}
-#define BNEP_TRACE_API2(m,p1,p2)                 {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_BNEP, TRACE_TYPE_API, m,p1,p2);}
-#define BNEP_TRACE_API3(m,p1,p2,p3)              {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_BNEP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define BNEP_TRACE_API4(m,p1,p2,p3,p4)           {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_BNEP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define BNEP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_BNEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define BNEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_BNEP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define BNEP_TRACE_EVENT0(m)                     {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m);}
-#define BNEP_TRACE_EVENT1(m,p1)                  {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m, p1);}
-#define BNEP_TRACE_EVENT2(m,p1,p2)               {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define BNEP_TRACE_EVENT3(m,p1,p2,p3)            {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define BNEP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define BNEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define BNEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_BNEP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define BNEP_TRACE_DEBUG0(m)                     {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m);}
-#define BNEP_TRACE_DEBUG1(m,p1)                  {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1);}
-#define BNEP_TRACE_DEBUG2(m,p1,p2)               {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define BNEP_TRACE_DEBUG3(m,p1,p2,p3)            {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define BNEP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define BNEP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define BNEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (bnep_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_BNEP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for PAN */
-
-#define PAN_TRACE_ERROR0(m)                     {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m);}
-#define PAN_TRACE_ERROR1(m,p1)                  {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m, p1);}
-#define PAN_TRACE_ERROR2(m,p1,p2)               {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m,p1,p2);}
-#define PAN_TRACE_ERROR3(m,p1,p2,p3)            {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define PAN_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define PAN_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define PAN_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (pan_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_PAN, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define PAN_TRACE_WARNING0(m)                   {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m);}
-#define PAN_TRACE_WARNING1(m,p1)                {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1);}
-#define PAN_TRACE_WARNING2(m,p1,p2)             {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1,p2);}
-#define PAN_TRACE_WARNING3(m,p1,p2,p3)          {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define PAN_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define PAN_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define PAN_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (pan_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_PAN, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define PAN_TRACE_API0(m)                       {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_PAN, TRACE_TYPE_API, m);}
-#define PAN_TRACE_API1(m,p1)                    {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_PAN, TRACE_TYPE_API, m, p1);}
-#define PAN_TRACE_API2(m,p1,p2)                 {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_PAN, TRACE_TYPE_API, m,p1,p2);}
-#define PAN_TRACE_API3(m,p1,p2,p3)              {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_PAN, TRACE_TYPE_API, m,p1,p2,p3);}
-#define PAN_TRACE_API4(m,p1,p2,p3,p4)           {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_PAN, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define PAN_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_PAN, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define PAN_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (pan_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_PAN, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define PAN_TRACE_EVENT0(m)                     {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m);}
-#define PAN_TRACE_EVENT1(m,p1)                  {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m, p1);}
-#define PAN_TRACE_EVENT2(m,p1,p2)               {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m,p1,p2);}
-#define PAN_TRACE_EVENT3(m,p1,p2,p3)            {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define PAN_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define PAN_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define PAN_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (pan_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_PAN, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define PAN_TRACE_DEBUG0(m)                     {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m);}
-#define PAN_TRACE_DEBUG1(m,p1)                  {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1);}
-#define PAN_TRACE_DEBUG2(m,p1,p2)               {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define PAN_TRACE_DEBUG3(m,p1,p2,p3)            {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define PAN_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define PAN_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define PAN_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (pan_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_PAN, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* define traces for SIM */
-
-#define SAP_TRACE_ERROR0(m)                     {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m);}
-#define SAP_TRACE_ERROR1(m,p1)                  {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m, p1);}
-#define SAP_TRACE_ERROR2(m,p1,p2)               {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define SAP_TRACE_ERROR3(m,p1,p2,p3)            {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define SAP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define SAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define SAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (sap_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_SAP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define SAP_TRACE_WARNING0(m)                   {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m);}
-#define SAP_TRACE_WARNING1(m,p1)                {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1);}
-#define SAP_TRACE_WARNING2(m,p1,p2)             {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define SAP_TRACE_WARNING3(m,p1,p2,p3)          {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define SAP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define SAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define SAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (sap_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_SAP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define SAP_TRACE_API0(m)                       {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_SAP, TRACE_TYPE_API, m);}
-#define SAP_TRACE_API1(m,p1)                    {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_SAP, TRACE_TYPE_API, m, p1);}
-#define SAP_TRACE_API2(m,p1,p2)                 {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_SAP, TRACE_TYPE_API, m,p1,p2);}
-#define SAP_TRACE_API3(m,p1,p2,p3)              {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_SAP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define SAP_TRACE_API4(m,p1,p2,p3,p4)           {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_SAP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define SAP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_SAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define SAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (sap_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_SAP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define SAP_TRACE_EVENT0(m)                     {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m);}
-#define SAP_TRACE_EVENT1(m,p1)                  {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m, p1);}
-#define SAP_TRACE_EVENT2(m,p1,p2)               {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define SAP_TRACE_EVENT3(m,p1,p2,p3)            {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define SAP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define SAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define SAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (sap_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_SAP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define SAP_TRACE_DEBUG0(m)                     {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m);}
-#define SAP_TRACE_DEBUG1(m,p1)                  {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1);}
-#define SAP_TRACE_DEBUG2(m,p1,p2)               {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define SAP_TRACE_DEBUG3(m,p1,p2,p3)            {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define SAP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define SAP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define SAP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (sap_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_SAP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for OPP profile
-*/
-#define OPP_TRACE_ERROR0(m)                      {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m);}
-#define OPP_TRACE_ERROR1(m,p1)                   {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1);}
-#define OPP_TRACE_ERROR2(m,p1,p2)                {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define OPP_TRACE_ERROR3(m,p1,p2,p3)             {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define OPP_TRACE_ERROR4(m,p1,p2,p3,p4)          {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define OPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)       {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define OPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)    {if (opp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_OPP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define OPP_TRACE_WARNING0(m)                    {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m);}
-#define OPP_TRACE_WARNING1(m,p1)                 {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1);}
-#define OPP_TRACE_WARNING2(m,p1,p2)              {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define OPP_TRACE_WARNING3(m,p1,p2,p3)           {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define OPP_TRACE_WARNING4(m,p1,p2,p3,p4)        {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define OPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)     {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define OPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)  {if (opp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_OPP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define OPP_TRACE_EVENT0(m)                      {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m);}
-#define OPP_TRACE_EVENT1(m,p1)                   {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m, p1);}
-#define OPP_TRACE_EVENT2(m,p1,p2)                {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define OPP_TRACE_EVENT3(m,p1,p2,p3)             {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define OPP_TRACE_EVENT4(m,p1,p2,p3,p4)          {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define OPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)       {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define OPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)    {if (opp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_OPP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define OPP_TRACE_DEBUG0(m)                      {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m);}
-#define OPP_TRACE_DEBUG1(m,p1)                   {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1);}
-#define OPP_TRACE_DEBUG2(m,p1,p2)                {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define OPP_TRACE_DEBUG3(m,p1,p2,p3)             {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define OPP_TRACE_DEBUG4(m,p1,p2,p3,p4)          {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define OPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)       {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define OPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)    {if (opp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_OPP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for FTP profile
-*/
-#define FTP_TRACE_ERROR0(m)                      {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m);}
-#define FTP_TRACE_ERROR1(m,p1)                   {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1);}
-#define FTP_TRACE_ERROR2(m,p1,p2)                {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define FTP_TRACE_ERROR3(m,p1,p2,p3)             {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define FTP_TRACE_ERROR4(m,p1,p2,p3,p4)          {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define FTP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)       {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define FTP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)    {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_FTP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define FTP_TRACE_WARNING0(m)                    {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m);}
-#define FTP_TRACE_WARNING1(m,p1)                 {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1);}
-#define FTP_TRACE_WARNING2(m,p1,p2)              {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define FTP_TRACE_WARNING3(m,p1,p2,p3)           {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define FTP_TRACE_WARNING4(m,p1,p2,p3,p4)        {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define FTP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)     {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define FTP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)  {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_FTP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define FTP_TRACE_EVENT0(m)                      {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m);}
-#define FTP_TRACE_EVENT1(m,p1)                   {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m, p1);}
-#define FTP_TRACE_EVENT2(m,p1,p2)                {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define FTP_TRACE_EVENT3(m,p1,p2,p3)             {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define FTP_TRACE_EVENT4(m,p1,p2,p3,p4)          {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define FTP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)       {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define FTP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)    {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_FTP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define FTP_TRACE_DEBUG0(m)                      {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m);}
-#define FTP_TRACE_DEBUG1(m,p1)                   {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1);}
-#define FTP_TRACE_DEBUG2(m,p1,p2)                {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define FTP_TRACE_DEBUG3(m,p1,p2,p3)             {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define FTP_TRACE_DEBUG4(m,p1,p2,p3,p4)          {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define FTP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)       {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define FTP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)    {if (ftp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_FTP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the A2DP profile
-*/
-#define A2D_TRACE_ERROR0(m)                      {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m);}
-#define A2D_TRACE_ERROR1(m,p1)                   {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1);}
-#define A2D_TRACE_ERROR2(m,p1,p2)                {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1,p2);}
-#define A2D_TRACE_ERROR3(m,p1,p2,p3)             {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1,p2,p3);}
-#define A2D_TRACE_ERROR4(m,p1,p2,p3,p4)          {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1,p2,p3,p4);}
-#define A2D_TRACE_ERROR5(m,p1,p2,p3,p4,p5)       {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5);}
-#define A2D_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)    {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_A2D, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5,p6);}
-
-#define A2D_TRACE_WARNING0(m)                    {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m);}
-#define A2D_TRACE_WARNING1(m,p1)                 {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1);}
-#define A2D_TRACE_WARNING2(m,p1,p2)              {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1,p2);}
-#define A2D_TRACE_WARNING3(m,p1,p2,p3)           {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1,p2,p3);}
-#define A2D_TRACE_WARNING4(m,p1,p2,p3,p4)        {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1,p2,p3,p4);}
-#define A2D_TRACE_WARNING5(m,p1,p2,p3,p4,p5)     {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5);}
-#define A2D_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)  {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_A2D, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5,p6);}
-
-#define A2D_TRACE_EVENT0(m)                      {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m);}
-#define A2D_TRACE_EVENT1(m,p1)                   {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m, p1);}
-#define A2D_TRACE_EVENT2(m,p1,p2)                {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m,p1,p2);}
-#define A2D_TRACE_EVENT3(m,p1,p2,p3)             {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m,p1,p2,p3);}
-#define A2D_TRACE_EVENT4(m,p1,p2,p3,p4)          {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m,p1,p2,p3,p4);}
-#define A2D_TRACE_EVENT5(m,p1,p2,p3,p4,p5)       {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5);}
-#define A2D_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)    {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_A2D, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5,p6);}
-
-#define A2D_TRACE_DEBUG0(m)                      {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m);}
-#define A2D_TRACE_DEBUG1(m,p1)                   {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1);}
-#define A2D_TRACE_DEBUG2(m,p1,p2)                {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1,p2);}
-#define A2D_TRACE_DEBUG3(m,p1,p2,p3)             {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1,p2,p3);}
-#define A2D_TRACE_DEBUG4(m,p1,p2,p3,p4)          {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4);}
-#define A2D_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)       {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5);}
-#define A2D_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)    {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_A2D, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5,p6);}
-
-#define A2D_TRACE_API0(m)                        {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_A2D, TRACE_TYPE_API,m);}
-#define A2D_TRACE_API1(m,p1)                     {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_A2D, TRACE_TYPE_API,m, p1);}
-#define A2D_TRACE_API2(m,p1,p2)                  {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_A2D, TRACE_TYPE_API,m,p1,p2);}
-#define A2D_TRACE_API3(m,p1,p2,p3)               {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_A2D, TRACE_TYPE_API,m,p1,p2,p3);}
-#define A2D_TRACE_API4(m,p1,p2,p3,p4)            {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_A2D, TRACE_TYPE_API,m,p1,p2,p3,p4);}
-#define A2D_TRACE_API5(m,p1,p2,p3,p4,p5)         {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_A2D, TRACE_TYPE_API,m,p1,p2,p3,p4,p5);}
-#define A2D_TRACE_API6(m,p1,p2,p3,p4,p5,p6)      {if (a2d_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_A2D, TRACE_TYPE_API,m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the VDP profile
-*/
-#define VDP_TRACE_ERROR0(m)                      {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m);}
-#define VDP_TRACE_ERROR1(m,p1)                   {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1);}
-#define VDP_TRACE_ERROR2(m,p1,p2)                {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2);}
-#define VDP_TRACE_ERROR3(m,p1,p2,p3)             {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3);}
-#define VDP_TRACE_ERROR4(m,p1,p2,p3,p4)          {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4);}
-#define VDP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)       {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5);}
-#define VDP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)    {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5,p6);}
-
-#define VDP_TRACE_WARNING0(m)                    {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m);}
-#define VDP_TRACE_WARNING1(m,p1)                 {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1);}
-#define VDP_TRACE_WARNING2(m,p1,p2)              {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2);}
-#define VDP_TRACE_WARNING3(m,p1,p2,p3)           {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3);}
-#define VDP_TRACE_WARNING4(m,p1,p2,p3,p4)        {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4);}
-#define VDP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)     {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5);}
-#define VDP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)  {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5,p6);}
-
-#define VDP_TRACE_EVENT0(m)                      {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m);}
-#define VDP_TRACE_EVENT1(m,p1)                   {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m, p1);}
-#define VDP_TRACE_EVENT2(m,p1,p2)                {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2);}
-#define VDP_TRACE_EVENT3(m,p1,p2,p3)             {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3);}
-#define VDP_TRACE_EVENT4(m,p1,p2,p3,p4)          {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4);}
-#define VDP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)       {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5);}
-#define VDP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)    {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5,p6);}
-
-#define VDP_TRACE_DEBUG0(m)                      {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m);}
-#define VDP_TRACE_DEBUG1(m,p1)                   {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1);}
-#define VDP_TRACE_DEBUG2(m,p1,p2)                {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2);}
-#define VDP_TRACE_DEBUG3(m,p1,p2,p3)             {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3);}
-#define VDP_TRACE_DEBUG4(m,p1,p2,p3,p4)          {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4);}
-#define VDP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)       {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5);}
-#define VDP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)    {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5,p6);}
-
-#define VDP_TRACE_API0(m)                        {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_API,m);}
-#define VDP_TRACE_API1(m,p1)                     {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_API,m, p1);}
-#define VDP_TRACE_API2(m,p1,p2)                  {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2);}
-#define VDP_TRACE_API3(m,p1,p2,p3)               {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3);}
-#define VDP_TRACE_API4(m,p1,p2,p3,p4)            {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4);}
-#define VDP_TRACE_API5(m,p1,p2,p3,p4,p5)         {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4,p5);}
-#define VDP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)      {if (vdp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4,p5,p6);}
-
-
-/* Define tracing for the LM unit
-*/
-#define LMP_TRACE_ERROR0(m)                     {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m);}
-#define LMP_TRACE_ERROR1(m,p1)                  {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1);}
-#define LMP_TRACE_ERROR2(m,p1,p2)               {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1,p2);}
-#define LMP_TRACE_ERROR3(m,p1,p2,p3)            {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define LMP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define LMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define LMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (lmp_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_LM, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define LMP_TRACE_WARNING0(m)                   {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m);}
-#define LMP_TRACE_WARNING1(m,p1)                {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1);}
-#define LMP_TRACE_WARNING2(m,p1,p2)             {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1,p2);}
-#define LMP_TRACE_WARNING3(m,p1,p2,p3)          {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define LMP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define LMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define LMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (lmp_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_LM, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define LMP_TRACE_EVENT0(m)                     {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m);}
-#define LMP_TRACE_EVENT1(m,p1)                  {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m, p1);}
-#define LMP_TRACE_EVENT2(m,p1,p2)               {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m,p1,p2);}
-#define LMP_TRACE_EVENT3(m,p1,p2,p3)            {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define LMP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define LMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define LMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (lmp_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_LM, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define LMP_TRACE_DEBUG0(m)                     {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m);}
-#define LMP_TRACE_DEBUG1(m,p1)                  {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1);}
-#define LMP_TRACE_DEBUG2(m,p1,p2)               {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define LMP_TRACE_DEBUG3(m,p1,p2,p3)            {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define LMP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define LMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define LMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (lmp_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_LM, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the LC unit
-*/
-#define LC_TRACE_ERROR0(m)                     {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_0(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m);}
-#define LC_TRACE_ERROR1(m,p1)                  {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_1(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1);}
-#define LC_TRACE_ERROR2(m,p1,p2)               {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_2(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1,p2);}
-#define LC_TRACE_ERROR3(m,p1,p2,p3)            {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_3(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define LC_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_4(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define LC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_5(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define LC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_ERROR]) BT_TRACE_6(TRACE_LAYER_LC, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define LC_TRACE_WARNING0(m)                   {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_0(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m);}
-#define LC_TRACE_WARNING1(m,p1)                {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_1(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1);}
-#define LC_TRACE_WARNING2(m,p1,p2)             {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_2(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1,p2);}
-#define LC_TRACE_WARNING3(m,p1,p2,p3)          {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_3(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define LC_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_4(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define LC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_5(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define LC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_WARNING]) BT_TRACE_6(TRACE_LAYER_LC, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define LC_TRACE_EVENT0(m)                     {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_0(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m);}
-#define LC_TRACE_EVENT1(m,p1)                  {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_1(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m, p1);}
-#define LC_TRACE_EVENT2(m,p1,p2)               {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_2(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m,p1,p2);}
-#define LC_TRACE_EVENT3(m,p1,p2,p3)            {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_3(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define LC_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_4(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define LC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_5(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define LC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_EVENT]) BT_TRACE_6(TRACE_LAYER_LC, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define LC_TRACE_DEBUG0(m)                     {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_0(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m);}
-#define LC_TRACE_DEBUG1(m,p1)                  {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_1(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m,p1);}
-#define LC_TRACE_DEBUG2(m,p1,p2)               {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_2(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define LC_TRACE_DEBUG3(m,p1,p2,p3)            {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_3(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define LC_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_5(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define LC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (lc_trace_level & trace_map[BT_TRACE_LEVEL_DEBUG]) BT_TRACE_6(TRACE_LAYER_LC, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the Serial Dongle Application SDA
-*/
-#define SDA_TRACE_ERROR0(m)                     {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(m);}
-#define SDA_TRACE_ERROR1(m,p1)                  {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(m,p1);}
-#define SDA_TRACE_ERROR2(m,p1,p2)               {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(m,p1,p2);}
-#define SDA_TRACE_ERROR3(m,p1,p2,p3)            {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(m,p1,p2,p3);}
-#define SDA_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(m,p1,p2,p3,p4);}
-#define SDA_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(m,p1,p2,p3,p4,p5);}
-#define SDA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(m,p1,p2,p3,p4,p5,p6);}
-
-#define SDA_TRACE_WARNING0(m)                   {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(m);}
-#define SDA_TRACE_WARNING1(m,p1)                {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(m,p1);}
-#define SDA_TRACE_WARNING2(m,p1,p2)             {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(m,p1,p2);}
-#define SDA_TRACE_WARNING3(m,p1,p2,p3)          {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(m,p1,p2,p3);}
-#define SDA_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(m,p1,p2,p3,p4);}
-#define SDA_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(m,p1,p2,p3,p4,p5);}
-#define SDA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(m,p1,p2,p3,p4,p5,p6);}
-
-#define SDA_TRACE_EVENT0(m)                     {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(m);}
-#define SDA_TRACE_EVENT1(m,p1)                  {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(m, p1);}
-#define SDA_TRACE_EVENT2(m,p1,p2)               {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(m,p1,p2);}
-#define SDA_TRACE_EVENT3(m,p1,p2,p3)            {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(m,p1,p2,p3);}
-#define SDA_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(m,p1,p2,p3,p4);}
-#define SDA_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(m,p1,p2,p3,p4,p5);}
-#define SDA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(m,p1,p2,p3,p4,p5,p6);}
-
-#define SDA_TRACE_DEBUG0(m)                     {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(m);}
-#define SDA_TRACE_DEBUG1(m,p1)                  {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(m,p1);}
-#define SDA_TRACE_DEBUG2(m,p1,p2)               {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(m,p1,p2);}
-#define SDA_TRACE_DEBUG3(m,p1,p2,p3)            {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(m,p1,p2,p3);}
-#define SDA_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(m,p1,p2,p3,p4);}
-#define SDA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(m,p1,p2,p3,p4,p5);}
-#define SDA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (sda_config_cb.sda_trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(m,p1,p2,p3,p4,p5,p6);}
-
-/* AVDTP
-*/
-#define AVDT_TRACE_ERROR0(m)                     {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m);}
-#define AVDT_TRACE_ERROR1(m,p1)                  {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1);}
-#define AVDT_TRACE_ERROR2(m,p1,p2)               {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define AVDT_TRACE_ERROR3(m,p1,p2,p3)            {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define AVDT_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define AVDT_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define AVDT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVDT_TRACE_WARNING0(m)                   {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m);}
-#define AVDT_TRACE_WARNING1(m,p1)                {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1);}
-#define AVDT_TRACE_WARNING2(m,p1,p2)             {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define AVDT_TRACE_WARNING3(m,p1,p2,p3)          {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define AVDT_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define AVDT_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define AVDT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVDT_TRACE_EVENT0(m)                     {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m);}
-#define AVDT_TRACE_EVENT1(m,p1)                  {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m, p1);}
-#define AVDT_TRACE_EVENT2(m,p1,p2)               {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define AVDT_TRACE_EVENT3(m,p1,p2,p3)            {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define AVDT_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define AVDT_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define AVDT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVDT_TRACE_DEBUG0(m)                     {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m);}
-#define AVDT_TRACE_DEBUG1(m,p1)                  {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1);}
-#define AVDT_TRACE_DEBUG2(m,p1,p2)               {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define AVDT_TRACE_DEBUG3(m,p1,p2,p3)            {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define AVDT_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define AVDT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define AVDT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVDT_TRACE_API0(m)                     {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_API, m);}
-#define AVDT_TRACE_API1(m,p1)                  {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1);}
-#define AVDT_TRACE_API2(m,p1,p2)               {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2);}
-#define AVDT_TRACE_API3(m,p1,p2,p3)            {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define AVDT_TRACE_API4(m,p1,p2,p3,p4)         {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define AVDT_TRACE_API5(m,p1,p2,p3,p4,p5)      {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define AVDT_TRACE_API6(m,p1,p2,p3,p4,p5,p6)   {if (avdt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the AVCTP protocol
-*/
-#define AVCT_TRACE_ERROR0(m)                     {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m);}
-#define AVCT_TRACE_ERROR1(m,p1)                  {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1);}
-#define AVCT_TRACE_ERROR2(m,p1,p2)               {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define AVCT_TRACE_ERROR3(m,p1,p2,p3)            {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define AVCT_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define AVCT_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define AVCT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (avct_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVCT_TRACE_WARNING0(m)                   {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m);}
-#define AVCT_TRACE_WARNING1(m,p1)                {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1);}
-#define AVCT_TRACE_WARNING2(m,p1,p2)             {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define AVCT_TRACE_WARNING3(m,p1,p2,p3)          {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define AVCT_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define AVCT_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define AVCT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (avct_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVCT_TRACE_EVENT0(m)                     {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m);}
-#define AVCT_TRACE_EVENT1(m,p1)                  {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m, p1);}
-#define AVCT_TRACE_EVENT2(m,p1,p2)               {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define AVCT_TRACE_EVENT3(m,p1,p2,p3)            {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define AVCT_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define AVCT_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define AVCT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (avct_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVCT_TRACE_DEBUG0(m)                     {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m);}
-#define AVCT_TRACE_DEBUG1(m,p1)                  {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1);}
-#define AVCT_TRACE_DEBUG2(m,p1,p2)               {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define AVCT_TRACE_DEBUG3(m,p1,p2,p3)            {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define AVCT_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define AVCT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define AVCT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (avct_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define AVCT_TRACE_API0(m)                     {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_API, m);}
-#define AVCT_TRACE_API1(m,p1)                  {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1);}
-#define AVCT_TRACE_API2(m,p1,p2)               {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2);}
-#define AVCT_TRACE_API3(m,p1,p2,p3)            {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define AVCT_TRACE_API4(m,p1,p2,p3,p4)         {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define AVCT_TRACE_API5(m,p1,p2,p3,p4,p5)      {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define AVCT_TRACE_API6(m,p1,p2,p3,p4,p5,p6)   {if (avct_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-
-/* Define tracing for the AVRCP profile
-*/
-#define AVRC_TRACE_ERROR0(m)                      {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m);}
-#define AVRC_TRACE_ERROR1(m,p1)                   {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1);}
-#define AVRC_TRACE_ERROR2(m,p1,p2)                {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2);}
-#define AVRC_TRACE_ERROR3(m,p1,p2,p3)             {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3);}
-#define AVRC_TRACE_ERROR4(m,p1,p2,p3,p4)          {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4);}
-#define AVRC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)       {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5);}
-#define AVRC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)    {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_ERROR,m,p1,p2,p3,p4,p5,p6);}
-
-#define AVRC_TRACE_WARNING0(m)                    {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m);}
-#define AVRC_TRACE_WARNING1(m,p1)                 {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1);}
-#define AVRC_TRACE_WARNING2(m,p1,p2)              {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2);}
-#define AVRC_TRACE_WARNING3(m,p1,p2,p3)           {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3);}
-#define AVRC_TRACE_WARNING4(m,p1,p2,p3,p4)        {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4);}
-#define AVRC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)     {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5);}
-#define AVRC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)  {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_WARNING,m,p1,p2,p3,p4,p5,p6);}
-
-#define AVRC_TRACE_EVENT0(m)                      {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m);}
-#define AVRC_TRACE_EVENT1(m,p1)                   {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m, p1);}
-#define AVRC_TRACE_EVENT2(m,p1,p2)                {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2);}
-#define AVRC_TRACE_EVENT3(m,p1,p2,p3)             {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3);}
-#define AVRC_TRACE_EVENT4(m,p1,p2,p3,p4)          {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4);}
-#define AVRC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)       {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5);}
-#define AVRC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)    {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_EVENT,m,p1,p2,p3,p4,p5,p6);}
-
-#define AVRC_TRACE_DEBUG0(m)                      {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m);}
-#define AVRC_TRACE_DEBUG1(m,p1)                   {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1);}
-#define AVRC_TRACE_DEBUG2(m,p1,p2)                {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2);}
-#define AVRC_TRACE_DEBUG3(m,p1,p2,p3)             {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3);}
-#define AVRC_TRACE_DEBUG4(m,p1,p2,p3,p4)          {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4);}
-#define AVRC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)       {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5);}
-#define AVRC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)    {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_DEBUG,m,p1,p2,p3,p4,p5,p6);}
-
-#define AVRC_TRACE_API0(m)                        {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_AVP, TRACE_TYPE_API,m);}
-#define AVRC_TRACE_API1(m,p1)                     {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_AVP, TRACE_TYPE_API,m, p1);}
-#define AVRC_TRACE_API2(m,p1,p2)                  {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2);}
-#define AVRC_TRACE_API3(m,p1,p2,p3)               {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3);}
-#define AVRC_TRACE_API4(m,p1,p2,p3,p4)            {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4);}
-#define AVRC_TRACE_API5(m,p1,p2,p3,p4,p5)         {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4,p5);}
-#define AVRC_TRACE_API6(m,p1,p2,p3,p4,p5,p6)      {if (avrc_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_AVP, TRACE_TYPE_API,m,p1,p2,p3,p4,p5,p6);}
-
-/* MCAP
-*/
-#define MCA_TRACE_ERROR0(m)                     {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m);}
-#define MCA_TRACE_ERROR1(m,p1)                  {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1);}
-#define MCA_TRACE_ERROR2(m,p1,p2)               {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1,p2);}
-#define MCA_TRACE_ERROR3(m,p1,p2,p3)            {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define MCA_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define MCA_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define MCA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (mca_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_MCA, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define MCA_TRACE_WARNING0(m)                   {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m);}
-#define MCA_TRACE_WARNING1(m,p1)                {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1);}
-#define MCA_TRACE_WARNING2(m,p1,p2)             {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1,p2);}
-#define MCA_TRACE_WARNING3(m,p1,p2,p3)          {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define MCA_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define MCA_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define MCA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (mca_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_MCA, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define MCA_TRACE_EVENT0(m)                     {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m);}
-#define MCA_TRACE_EVENT1(m,p1)                  {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m, p1);}
-#define MCA_TRACE_EVENT2(m,p1,p2)               {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m,p1,p2);}
-#define MCA_TRACE_EVENT3(m,p1,p2,p3)            {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define MCA_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define MCA_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define MCA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (mca_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_MCA, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define MCA_TRACE_DEBUG0(m)                     {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m);}
-#define MCA_TRACE_DEBUG1(m,p1)                  {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1);}
-#define MCA_TRACE_DEBUG2(m,p1,p2)               {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define MCA_TRACE_DEBUG3(m,p1,p2,p3)            {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define MCA_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define MCA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define MCA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (mca_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_MCA, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#define MCA_TRACE_API0(m)                     {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_MCA, TRACE_TYPE_API, m);}
-#define MCA_TRACE_API1(m,p1)                  {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1);}
-#define MCA_TRACE_API2(m,p1,p2)               {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1,p2);}
-#define MCA_TRACE_API3(m,p1,p2,p3)            {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1,p2,p3);}
-#define MCA_TRACE_API4(m,p1,p2,p3,p4)         {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define MCA_TRACE_API5(m,p1,p2,p3,p4,p5)      {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define MCA_TRACE_API6(m,p1,p2,p3,p4,p5,p6)   {if (mca_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_MCA, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the AMP unit
-*/
-#define AMP_TRACE_ERROR0(m)                     {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m);}
-#define AMP_TRACE_ERROR1(m,p1)                  {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1);}
-#define AMP_TRACE_ERROR2(m,p1,p2)               {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define AMP_TRACE_ERROR3(m,p1,p2,p3)            {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define AMP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define AMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define AMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (amp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_AMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define AMP_TRACE_WARNING0(m)                   {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m);}
-#define AMP_TRACE_WARNING1(m,p1)                {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1);}
-#define AMP_TRACE_WARNING2(m,p1,p2)             {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define AMP_TRACE_WARNING3(m,p1,p2,p3)          {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define AMP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define AMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define AMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (amp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_AMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define AMP_TRACE_API0(m)                       {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_AMP, TRACE_TYPE_API, m);}
-#define AMP_TRACE_API1(m,p1)                    {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1);}
-#define AMP_TRACE_API2(m,p1,p2)                 {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1,p2);}
-#define AMP_TRACE_API3(m,p1,p2,p3)              {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define AMP_TRACE_API4(m,p1,p2,p3,p4)           {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define AMP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define AMP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (amp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_AMP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define AMP_TRACE_EVENT0(m)                     {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m);}
-#define AMP_TRACE_EVENT1(m,p1)                  {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m, p1);}
-#define AMP_TRACE_EVENT2(m,p1,p2)               {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define AMP_TRACE_EVENT3(m,p1,p2,p3)            {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define AMP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define AMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define AMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (amp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_AMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define AMP_TRACE_DEBUG0(m)                     {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m);}
-#define AMP_TRACE_DEBUG1(m,p1)                  {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1);}
-#define AMP_TRACE_DEBUG2(m,p1,p2)               {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define AMP_TRACE_DEBUG3(m,p1,p2,p3)            {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define AMP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define AMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define AMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (amp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_AMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the ATT/GATT unit
-*/
-#define GATT_TRACE_ERROR0(m)                     {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m);}
-#define GATT_TRACE_ERROR1(m,p1)                  {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1);}
-#define GATT_TRACE_ERROR2(m,p1,p2)               {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1,p2);}
-#define GATT_TRACE_ERROR3(m,p1,p2,p3)            {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define GATT_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define GATT_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define GATT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_ATT, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define GATT_TRACE_WARNING0(m)                   {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m);}
-#define GATT_TRACE_WARNING1(m,p1)                {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1);}
-#define GATT_TRACE_WARNING2(m,p1,p2)             {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1,p2);}
-#define GATT_TRACE_WARNING3(m,p1,p2,p3)          {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define GATT_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define GATT_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define GATT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_ATT, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define GATT_TRACE_API0(m)                       {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_ATT, TRACE_TYPE_API, m);}
-#define GATT_TRACE_API1(m,p1)                    {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1);}
-#define GATT_TRACE_API2(m,p1,p2)                 {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1,p2);}
-#define GATT_TRACE_API3(m,p1,p2,p3)              {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1,p2,p3);}
-#define GATT_TRACE_API4(m,p1,p2,p3,p4)           {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define GATT_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define GATT_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_ATT, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define GATT_TRACE_EVENT0(m)                     {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m);}
-#define GATT_TRACE_EVENT1(m,p1)                  {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m, p1);}
-#define GATT_TRACE_EVENT2(m,p1,p2)               {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m,p1,p2);}
-#define GATT_TRACE_EVENT3(m,p1,p2,p3)            {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define GATT_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define GATT_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define GATT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_ATT, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define GATT_TRACE_DEBUG0(m)                     {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m);}
-#define GATT_TRACE_DEBUG1(m,p1)                  {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1);}
-#define GATT_TRACE_DEBUG2(m,p1,p2)               {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define GATT_TRACE_DEBUG3(m,p1,p2,p3)            {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define GATT_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define GATT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define GATT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (gatt_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_ATT, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* Define tracing for the SMP unit
-*/
-#define SMP_TRACE_ERROR0(m)                     {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m);}
-#define SMP_TRACE_ERROR1(m,p1)                  {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1);}
-#define SMP_TRACE_ERROR2(m,p1,p2)               {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1,p2);}
-#define SMP_TRACE_ERROR3(m,p1,p2,p3)            {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define SMP_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define SMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define SMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (smp_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_SMP, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define SMP_TRACE_WARNING0(m)                   {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m);}
-#define SMP_TRACE_WARNING1(m,p1)                {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1);}
-#define SMP_TRACE_WARNING2(m,p1,p2)             {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1,p2);}
-#define SMP_TRACE_WARNING3(m,p1,p2,p3)          {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define SMP_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define SMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define SMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (smp_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_SMP, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define SMP_TRACE_API0(m)                       {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_SMP, TRACE_TYPE_API, m);}
-#define SMP_TRACE_API1(m,p1)                    {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1);}
-#define SMP_TRACE_API2(m,p1,p2)                 {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1,p2);}
-#define SMP_TRACE_API3(m,p1,p2,p3)              {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1,p2,p3);}
-#define SMP_TRACE_API4(m,p1,p2,p3,p4)           {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define SMP_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define SMP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (smp_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_SMP, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define SMP_TRACE_EVENT0(m)                     {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m);}
-#define SMP_TRACE_EVENT1(m,p1)                  {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m, p1);}
-#define SMP_TRACE_EVENT2(m,p1,p2)               {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m,p1,p2);}
-#define SMP_TRACE_EVENT3(m,p1,p2,p3)            {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define SMP_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define SMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define SMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (smp_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_SMP, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define SMP_TRACE_DEBUG0(m)                     {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m);}
-#define SMP_TRACE_DEBUG1(m,p1)                  {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1);}
-#define SMP_TRACE_DEBUG2(m,p1,p2)               {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define SMP_TRACE_DEBUG3(m,p1,p2,p3)            {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define SMP_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define SMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define SMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (smp_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_SMP, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-/* END OF USE TRACES */
-#else
-
-#define BT_TRACE_0(l,t,m)
-#define BT_TRACE_1(l,t,m,p1)
-#define BT_TRACE_2(l,t,m,p1,p2)
-#define BT_TRACE_3(l,t,m,p1,p2,p3)
-#define BT_TRACE_4(l,t,m,p1,p2,p3,p4)
-#define BT_TRACE_5(l,t,m,p1,p2,p3,p4,p5)
-#define BT_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6)
-
-#define BT_ERROR_TRACE_0(l,m)
-#define BT_ERROR_TRACE_1(l,m,p1)
-#define BT_ERROR_TRACE_2(l,m,p1,p2)
-#define BT_ERROR_TRACE_3(l,m,p1,p2,p3)
-
-/* Define tracing for the HCI unit
-*/
-#define HCI_TRACE_ERROR0(m)
-#define HCI_TRACE_ERROR1(m,p1)
-#define HCI_TRACE_ERROR2(m,p1,p2)
-#define HCI_TRACE_ERROR3(m,p1,p2,p3)
-#define HCI_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define HCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define HCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCI_TRACE_WARNING0(m)
-#define HCI_TRACE_WARNING1(m,p1)
-#define HCI_TRACE_WARNING2(m,p1,p2)
-#define HCI_TRACE_WARNING3(m,p1,p2,p3)
-#define HCI_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define HCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define HCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCI_TRACE_EVENT0(m)
-#define HCI_TRACE_EVENT1(m,p1)
-#define HCI_TRACE_EVENT2(m,p1,p2)
-#define HCI_TRACE_EVENT3(m,p1,p2,p3)
-#define HCI_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define HCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define HCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCI_TRACE_DEBUG0(m)
-#define HCI_TRACE_DEBUG1(m,p1)
-#define HCI_TRACE_DEBUG2(m,p1,p2)
-#define HCI_TRACE_DEBUG3(m,p1,p2,p3)
-#define HCI_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define HCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define HCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for BTM
-*/
-#define BTM_TRACE_ERROR0(m)
-#define BTM_TRACE_ERROR1(m,p1)
-#define BTM_TRACE_ERROR2(m,p1,p2)
-#define BTM_TRACE_ERROR3(m,p1,p2,p3)
-#define BTM_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define BTM_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define BTM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define BTM_TRACE_WARNING0(m)
-#define BTM_TRACE_WARNING1(m,p1)
-#define BTM_TRACE_WARNING2(m,p1,p2)
-#define BTM_TRACE_WARNING3(m,p1,p2,p3)
-#define BTM_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define BTM_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define BTM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define BTM_TRACE_API0(m)
-#define BTM_TRACE_API1(m,p1)
-#define BTM_TRACE_API2(m,p1,p2)
-#define BTM_TRACE_API3(m,p1,p2,p3)
-#define BTM_TRACE_API4(m,p1,p2,p3,p4)
-#define BTM_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define BTM_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define BTM_TRACE_EVENT0(m)
-#define BTM_TRACE_EVENT1(m,p1)
-#define BTM_TRACE_EVENT2(m,p1,p2)
-#define BTM_TRACE_EVENT3(m,p1,p2,p3)
-#define BTM_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define BTM_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define BTM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define BTM_TRACE_DEBUG0(m)
-#define BTM_TRACE_DEBUG1(m,p1)
-#define BTM_TRACE_DEBUG2(m,p1,p2)
-#define BTM_TRACE_DEBUG3(m,p1,p2,p3)
-#define BTM_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define BTM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define BTM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for the L2CAP unit
-*/
-#define L2CAP_TRACE_ERROR0(m)
-#define L2CAP_TRACE_ERROR1(m,p1)
-#define L2CAP_TRACE_ERROR2(m,p1,p2)
-#define L2CAP_TRACE_ERROR3(m,p1,p2,p3)
-#define L2CAP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define L2CAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define L2CAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define L2CAP_TRACE_WARNING0(m)
-#define L2CAP_TRACE_WARNING1(m,p1)
-#define L2CAP_TRACE_WARNING2(m,p1,p2)
-#define L2CAP_TRACE_WARNING3(m,p1,p2,p3)
-#define L2CAP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define L2CAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define L2CAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define L2CAP_TRACE_API0(m)
-#define L2CAP_TRACE_API1(m,p1)
-#define L2CAP_TRACE_API2(m,p1,p2)
-#define L2CAP_TRACE_API3(m,p1,p2,p3)
-#define L2CAP_TRACE_API4(m,p1,p2,p3,p4)
-#define L2CAP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define L2CAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define L2CAP_TRACE_EVENT0(m)
-#define L2CAP_TRACE_EVENT1(m,p1)
-#define L2CAP_TRACE_EVENT2(m,p1,p2)
-#define L2CAP_TRACE_EVENT3(m,p1,p2,p3)
-#define L2CAP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define L2CAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define L2CAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define L2CAP_TRACE_DEBUG0(m)
-#define L2CAP_TRACE_DEBUG1(m,p1)
-#define L2CAP_TRACE_DEBUG2(m,p1,p2)
-#define L2CAP_TRACE_DEBUG3(m,p1,p2,p3)
-#define L2CAP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define L2CAP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define L2CAP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the LLCP unit
-*/
-#define LLCP_TRACE_ERROR0(m)
-#define LLCP_TRACE_ERROR1(m,p1)
-#define LLCP_TRACE_ERROR2(m,p1,p2)
-#define LLCP_TRACE_ERROR3(m,p1,p2,p3)
-#define LLCP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define LLCP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define LLCP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define LLCP_TRACE_WARNING0(m)
-#define LLCP_TRACE_WARNING1(m,p1)
-#define LLCP_TRACE_WARNING2(m,p1,p2)
-#define LLCP_TRACE_WARNING3(m,p1,p2,p3)
-#define LLCP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define LLCP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define LLCP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define LLCP_TRACE_API0(m)
-#define LLCP_TRACE_API1(m,p1)
-#define LLCP_TRACE_API2(m,p1,p2)
-#define LLCP_TRACE_API3(m,p1,p2,p3)
-#define LLCP_TRACE_API4(m,p1,p2,p3,p4)
-#define LLCP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define LLCP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define LLCP_TRACE_EVENT0(m)
-#define LLCP_TRACE_EVENT1(m,p1)
-#define LLCP_TRACE_EVENT2(m,p1,p2)
-#define LLCP_TRACE_EVENT3(m,p1,p2,p3)
-#define LLCP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define LLCP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define LLCP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define LLCP_TRACE_DEBUG0(m)
-#define LLCP_TRACE_DEBUG1(m,p1)
-#define LLCP_TRACE_DEBUG2(m,p1,p2)
-#define LLCP_TRACE_DEBUG3(m,p1,p2,p3)
-#define LLCP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define LLCP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define LLCP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the SDP unit
-*/
-#define SDP_TRACE_ERROR0(m)
-#define SDP_TRACE_ERROR1(m,p1)
-#define SDP_TRACE_ERROR2(m,p1,p2)
-#define SDP_TRACE_ERROR3(m,p1,p2,p3)
-#define SDP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SDP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SDP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDP_TRACE_WARNING0(m)
-#define SDP_TRACE_WARNING1(m,p1)
-#define SDP_TRACE_WARNING2(m,p1,p2)
-#define SDP_TRACE_WARNING3(m,p1,p2,p3)
-#define SDP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SDP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SDP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDP_TRACE_API0(m)
-#define SDP_TRACE_API1(m,p1)
-#define SDP_TRACE_API2(m,p1,p2)
-#define SDP_TRACE_API3(m,p1,p2,p3)
-#define SDP_TRACE_API4(m,p1,p2,p3,p4)
-#define SDP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define SDP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDP_TRACE_EVENT0(m)
-#define SDP_TRACE_EVENT1(m,p1)
-#define SDP_TRACE_EVENT2(m,p1,p2)
-#define SDP_TRACE_EVENT3(m,p1,p2,p3)
-#define SDP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SDP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SDP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDP_TRACE_DEBUG0(m)
-#define SDP_TRACE_DEBUG1(m,p1)
-#define SDP_TRACE_DEBUG2(m,p1,p2)
-#define SDP_TRACE_DEBUG3(m,p1,p2,p3)
-#define SDP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SDP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SDP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the RFCOMM unit
-*/
-#define RFCOMM_TRACE_ERROR0(m)
-#define RFCOMM_TRACE_ERROR1(m,p1)
-#define RFCOMM_TRACE_ERROR2(m,p1,p2)
-#define RFCOMM_TRACE_ERROR3(m,p1,p2,p3)
-#define RFCOMM_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define RFCOMM_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define RFCOMM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define RFCOMM_TRACE_WARNING0(m)
-#define RFCOMM_TRACE_WARNING1(m,p1)
-#define RFCOMM_TRACE_WARNING2(m,p1,p2)
-#define RFCOMM_TRACE_WARNING3(m,p1,p2,p3)
-#define RFCOMM_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define RFCOMM_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define RFCOMM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define RFCOMM_TRACE_API0(m)
-#define RFCOMM_TRACE_API1(m,p1)
-#define RFCOMM_TRACE_API2(m,p1,p2)
-#define RFCOMM_TRACE_API3(m,p1,p2,p3)
-#define RFCOMM_TRACE_API4(m,p1,p2,p3,p4)
-#define RFCOMM_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define RFCOMM_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define RFCOMM_TRACE_EVENT0(m)
-#define RFCOMM_TRACE_EVENT1(m,p1)
-#define RFCOMM_TRACE_EVENT2(m,p1,p2)
-#define RFCOMM_TRACE_EVENT3(m,p1,p2,p3)
-#define RFCOMM_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define RFCOMM_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define RFCOMM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define RFCOMM_TRACE_DEBUG0(m)
-#define RFCOMM_TRACE_DEBUG1(m,p1)
-#define RFCOMM_TRACE_DEBUG2(m,p1,p2)
-#define RFCOMM_TRACE_DEBUG3(m,p1,p2,p3)
-#define RFCOMM_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define RFCOMM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define RFCOMM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for Serial Port Profile
-*/
-#define SPP_TRACE_ERROR0(m)
-#define SPP_TRACE_ERROR1(m,p1)
-#define SPP_TRACE_ERROR2(m,p1,p2)
-#define SPP_TRACE_ERROR3(m,p1,p2,p3)
-#define SPP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SPP_TRACE_WARNING0(m)
-#define SPP_TRACE_WARNING1(m,p1)
-#define SPP_TRACE_WARNING2(m,p1,p2)
-#define SPP_TRACE_WARNING3(m,p1,p2,p3)
-#define SPP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SPP_TRACE_EVENT0(m)
-#define SPP_TRACE_EVENT1(m,p1)
-#define SPP_TRACE_EVENT2(m,p1,p2)
-#define SPP_TRACE_EVENT3(m,p1,p2,p3)
-#define SPP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SPP_TRACE_API0(m)
-#define SPP_TRACE_API1(m,p1)
-#define SPP_TRACE_API2(m,p1,p2)
-#define SPP_TRACE_API3(m,p1,p2,p3)
-#define SPP_TRACE_API4(m,p1,p2,p3,p4)
-#define SPP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define SPP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define SPP_TRACE_DEBUG0(m)
-#define SPP_TRACE_DEBUG1(m,p1)
-#define SPP_TRACE_DEBUG2(m,p1,p2)
-#define SPP_TRACE_DEBUG3(m,p1,p2,p3)
-#define SPP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Generic Access Profile traces */
-#define GAP_TRACE_ERROR0(m)
-#define GAP_TRACE_ERROR1(m,p1)
-#define GAP_TRACE_ERROR2(m,p1,p2)
-#define GAP_TRACE_ERROR3(m,p1,p2,p3)
-#define GAP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define GAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define GAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define GAP_TRACE_EVENT0(m)
-#define GAP_TRACE_EVENT1(m,p1)
-#define GAP_TRACE_EVENT2(m,p1,p2)
-#define GAP_TRACE_EVENT3(m,p1,p2,p3)
-#define GAP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define GAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define GAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define GAP_TRACE_API0(m)
-#define GAP_TRACE_API1(m,p1)
-#define GAP_TRACE_API2(m,p1,p2)
-#define GAP_TRACE_API3(m,p1,p2,p3)
-#define GAP_TRACE_API4(m,p1,p2,p3,p4)
-#define GAP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define GAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define GAP_TRACE_WARNING0(m)
-#define GAP_TRACE_WARNING1(m,p1)
-#define GAP_TRACE_WARNING2(m,p1,p2)
-#define GAP_TRACE_WARNING3(m,p1,p2,p3)
-#define GAP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define GAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define GAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for OBX
-*/
-#define OBX_TRACE_ERROR0(m)
-#define OBX_TRACE_ERROR1(m,p1)
-#define OBX_TRACE_ERROR2(m,p1,p2)
-#define OBX_TRACE_ERROR3(m,p1,p2,p3)
-#define OBX_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define OBX_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define OBX_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define OBX_TRACE_WARNING0(m)
-#define OBX_TRACE_WARNING1(m,p1)
-#define OBX_TRACE_WARNING2(m,p1,p2)
-#define OBX_TRACE_WARNING3(m,p1,p2,p3)
-#define OBX_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define OBX_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define OBX_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define OBX_TRACE_EVENT0(m)
-#define OBX_TRACE_EVENT1(m,p1)
-#define OBX_TRACE_EVENT2(m,p1,p2)
-#define OBX_TRACE_EVENT3(m,p1,p2,p3)
-#define OBX_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define OBX_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define OBX_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define OBX_TRACE_DEBUG0(m)
-#define OBX_TRACE_DEBUG1(m,p1)
-#define OBX_TRACE_DEBUG2(m,p1,p2)
-#define OBX_TRACE_DEBUG3(m,p1,p2,p3)
-#define OBX_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define OBX_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define OBX_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define OBX_TRACE_API0(m)
-#define OBX_TRACE_API1(m,p1)
-#define OBX_TRACE_API2(m,p1,p2)
-#define OBX_TRACE_API3(m,p1,p2,p3)
-#define OBX_TRACE_API4(m,p1,p2,p3,p4)
-#define OBX_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define OBX_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for GOEP application profiles
-*/
-#define GOEP_TRACE_ERROR0(m)
-#define GOEP_TRACE_ERROR1(m,p1)
-#define GOEP_TRACE_ERROR2(m,p1,p2)
-#define GOEP_TRACE_ERROR3(m,p1,p2,p3)
-#define GOEP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define GOEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define GOEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define GOEP_TRACE_WARNING0(m)
-#define GOEP_TRACE_WARNING1(m,p1)
-#define GOEP_TRACE_WARNING2(m,p1,p2)
-#define GOEP_TRACE_WARNING3(m,p1,p2,p3)
-#define GOEP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define GOEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define GOEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define GOEP_TRACE_EVENT0(m)
-#define GOEP_TRACE_EVENT1(m,p1)
-#define GOEP_TRACE_EVENT2(m,p1,p2)
-#define GOEP_TRACE_EVENT3(m,p1,p2,p3)
-#define GOEP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define GOEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define GOEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define GOEP_TRACE_DEBUG0(m)
-#define GOEP_TRACE_DEBUG1(m,p1)
-#define GOEP_TRACE_DEBUG2(m,p1,p2)
-#define GOEP_TRACE_DEBUG3(m,p1,p2,p3)
-#define GOEP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define GOEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define GOEP_TRACE_API0(m)
-#define GOEP_TRACE_API1(m,p1)
-#define GOEP_TRACE_API2(m,p1,p2)
-#define GOEP_TRACE_API3(m,p1,p2,p3)
-#define GOEP_TRACE_API4(m,p1,p2,p3,p4)
-#define GOEP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define GOEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the BPP profile
-*/
-#define BPP_TRACE_ERROR0(m)
-#define BPP_TRACE_ERROR1(m,p1)
-#define BPP_TRACE_ERROR2(m,p1,p2)
-#define BPP_TRACE_ERROR3(m,p1,p2,p3)
-#define BPP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define BPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define BPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define BPP_TRACE_WARNING0(m)
-#define BPP_TRACE_WARNING1(m,p1)
-#define BPP_TRACE_WARNING2(m,p1,p2)
-#define BPP_TRACE_WARNING3(m,p1,p2,p3)
-#define BPP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define BPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define BPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define BPP_TRACE_EVENT0(m)
-#define BPP_TRACE_EVENT1(m,p1)
-#define BPP_TRACE_EVENT2(m,p1,p2)
-#define BPP_TRACE_EVENT3(m,p1,p2,p3)
-#define BPP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define BPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define BPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define BPP_TRACE_DEBUG0(m)
-#define BPP_TRACE_DEBUG1(m,p1)
-#define BPP_TRACE_DEBUG2(m,p1,p2)
-#define BPP_TRACE_DEBUG3(m,p1,p2,p3)
-#define BPP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define BPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define BPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define BPP_TRACE_API0(m)
-#define BPP_TRACE_API1(m,p1)
-#define BPP_TRACE_API2(m,p1,p2)
-#define BPP_TRACE_API3(m,p1,p2,p3)
-#define BPP_TRACE_API4(m,p1,p2,p3,p4)
-#define BPP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define BPP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the BIP profile
-*/
-#define BIP_TRACE_ERROR0(m)
-#define BIP_TRACE_ERROR1(m,p1)
-#define BIP_TRACE_ERROR2(m,p1,p2)
-#define BIP_TRACE_ERROR3(m,p1,p2,p3)
-#define BIP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define BIP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define BIP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define BIP_TRACE_WARNING0(m)
-#define BIP_TRACE_WARNING1(m,p1)
-#define BIP_TRACE_WARNING2(m,p1,p2)
-#define BIP_TRACE_WARNING3(m,p1,p2,p3)
-#define BIP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define BIP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define BIP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define BIP_TRACE_EVENT0(m)
-#define BIP_TRACE_EVENT1(m,p1)
-#define BIP_TRACE_EVENT2(m,p1,p2)
-#define BIP_TRACE_EVENT3(m,p1,p2,p3)
-#define BIP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define BIP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define BIP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define BIP_TRACE_DEBUG0(m)
-#define BIP_TRACE_DEBUG1(m,p1)
-#define BIP_TRACE_DEBUG2(m,p1,p2)
-#define BIP_TRACE_DEBUG3(m,p1,p2,p3)
-#define BIP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define BIP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define BIP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define BIP_TRACE_API0(m)
-#define BIP_TRACE_API1(m,p1)
-#define BIP_TRACE_API2(m,p1,p2)
-#define BIP_TRACE_API3(m,p1,p2,p3)
-#define BIP_TRACE_API4(m,p1,p2,p3,p4)
-#define BIP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define BIP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for TCS
-*/
-#define TCS_TRACE_ERROR0(m)
-#define TCS_TRACE_ERROR1(m,p1)
-#define TCS_TRACE_ERROR2(m,p1,p2)
-#define TCS_TRACE_ERROR3(m,p1,p2,p3)
-#define TCS_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define TCS_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define TCS_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define TCS_TRACE_WARNING0(m)
-#define TCS_TRACE_WARNING1(m,p1)
-#define TCS_TRACE_WARNING2(m,p1,p2)
-#define TCS_TRACE_WARNING3(m,p1,p2,p3)
-#define TCS_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define TCS_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define TCS_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define TCS_TRACE_EVENT0(m)
-#define TCS_TRACE_EVENT1(m,p1)
-#define TCS_TRACE_EVENT2(m,p1,p2)
-#define TCS_TRACE_EVENT3(m,p1,p2,p3)
-#define TCS_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define TCS_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define TCS_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define TCS_TRACE_DEBUG0(m)
-#define TCS_TRACE_DEBUG1(m,p1)
-#define TCS_TRACE_DEBUG2(m,p1,p2)
-#define TCS_TRACE_DEBUG3(m,p1,p2,p3)
-#define TCS_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define TCS_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define TCS_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define TCS_TRACE_API0(m)
-#define TCS_TRACE_API1(m,p1)
-#define TCS_TRACE_API2(m,p1,p2)
-#define TCS_TRACE_API3(m,p1,p2,p3)
-#define TCS_TRACE_API4(m,p1,p2,p3,p4)
-#define TCS_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define TCS_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for ICP
-*/
-#define ICP_TRACE_ERROR0(m)
-#define ICP_TRACE_ERROR1(m,p1)
-#define ICP_TRACE_ERROR2(m,p1,p2)
-#define ICP_TRACE_ERROR3(m,p1,p2,p3)
-#define ICP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define ICP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define ICP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define ICP_TRACE_WARNING0(m)
-#define ICP_TRACE_WARNING1(m,p1)
-#define ICP_TRACE_WARNING2(m,p1,p2)
-#define ICP_TRACE_WARNING3(m,p1,p2,p3)
-#define ICP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define ICP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define ICP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define ICP_TRACE_EVENT0(m)
-#define ICP_TRACE_EVENT1(m,p1)
-#define ICP_TRACE_EVENT2(m,p1,p2)
-#define ICP_TRACE_EVENT3(m,p1,p2,p3)
-#define ICP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define ICP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define ICP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define ICP_TRACE_DEBUG0(m)
-#define ICP_TRACE_DEBUG1(m,p1)
-#define ICP_TRACE_DEBUG2(m,p1,p2)
-#define ICP_TRACE_DEBUG3(m,p1,p2,p3)
-#define ICP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define ICP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define ICP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define ICP_TRACE_API0(m)
-#define ICP_TRACE_API1(m,p1)
-#define ICP_TRACE_API2(m,p1,p2)
-#define ICP_TRACE_API3(m,p1,p2,p3)
-#define ICP_TRACE_API4(m,p1,p2,p3,p4)
-#define ICP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define ICP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for CTP
-*/
-#define CTP_TRACE_ERROR0(m)
-#define CTP_TRACE_ERROR1(m,p1)
-#define CTP_TRACE_ERROR2(m,p1,p2)
-#define CTP_TRACE_ERROR3(m,p1,p2,p3)
-#define CTP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define CTP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define CTP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define CTP_TRACE_WARNING0(m)
-#define CTP_TRACE_WARNING1(m,p1)
-#define CTP_TRACE_WARNING2(m,p1,p2)
-#define CTP_TRACE_WARNING3(m,p1,p2,p3)
-#define CTP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define CTP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define CTP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define CTP_TRACE_EVENT0(m)
-#define CTP_TRACE_EVENT1(m,p1)
-#define CTP_TRACE_EVENT2(m,p1,p2)
-#define CTP_TRACE_EVENT3(m,p1,p2,p3)
-#define CTP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define CTP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define CTP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define CTP_TRACE_DEBUG0(m)
-#define CTP_TRACE_DEBUG1(m,p1)
-#define CTP_TRACE_DEBUG2(m,p1,p2)
-#define CTP_TRACE_DEBUG3(m,p1,p2,p3)
-#define CTP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define CTP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define CTP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define CTP_TRACE_API0(m)
-#define CTP_TRACE_API1(m,p1)
-#define CTP_TRACE_API2(m,p1,p2)
-#define CTP_TRACE_API3(m,p1,p2,p3)
-#define CTP_TRACE_API4(m,p1,p2,p3,p4)
-#define CTP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define CTP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for headset profile */
-
-#define HSP2_TRACE_ERROR0(pcb,m)
-#define HSP2_TRACE_ERROR1(pcb,m,p1)
-#define HSP2_TRACE_ERROR2(pcb,m,p1,p2)
-#define HSP2_TRACE_ERROR3(pcb,m,p1,p2,p3)
-#define HSP2_TRACE_ERROR4(pcb,m,p1,p2,p3,p4)
-#define HSP2_TRACE_ERROR5(pcb,m,p1,p2,p3,p4,p5)
-#define HSP2_TRACE_ERROR6(pcb,m,p1,p2,p3,p4,p5,p6)
-
-#define HSP2_TRACE_WARNING0(pcb,m)
-#define HSP2_TRACE_WARNING1(pcb,m,p1)
-#define HSP2_TRACE_WARNING2(pcb,m,p1,p2)
-#define HSP2_TRACE_WARNING3(pcb,m,p1,p2,p3)
-#define HSP2_TRACE_WARNING4(pcb,m,p1,p2,p3,p4)
-#define HSP2_TRACE_WARNING5(pcb,m,p1,p2,p3,p4,p5)
-#define HSP2_TRACE_WARNING6(pcb,m,p1,p2,p3,p4,p5,p6)
-
-#define HSP2_TRACE_API0(pcb,m)
-#define HSP2_TRACE_API1(pcb,m,p1)
-#define HSP2_TRACE_API2(pcb,m,p1,p2)
-#define HSP2_TRACE_API3(pcb,m,p1,p2,p3)
-#define HSP2_TRACE_API4(pcb,m,p1,p2,p3,p4)
-#define HSP2_TRACE_API5(pcb,m,p1,p2,p3,p4,p5)
-#define HSP2_TRACE_API6(pcb,m,p1,p2,p3,p4,p5,p6)
-
-#define HSP2_TRACE_EVENT0(pcb,m)
-#define HSP2_TRACE_EVENT1(pcb,m,p1)
-#define HSP2_TRACE_EVENT2(pcb,m,p1,p2)
-#define HSP2_TRACE_EVENT3(pcb,m,p1,p2,p3)
-#define HSP2_TRACE_EVENT4(pcb,m,p1,p2,p3,p4)
-#define HSP2_TRACE_EVENT5(pcb,m,p1,p2,p3,p4,p5)
-#define HSP2_TRACE_EVENT6(pcb,m,p1,p2,p3,p4,p5,p6)
-
-#define HSP2_TRACE_DEBUG0(pcb,m)
-#define HSP2_TRACE_DEBUG1(pcb,m,p1)
-#define HSP2_TRACE_DEBUG2(pcb,m,p1,p2)
-#define HSP2_TRACE_DEBUG3(pcb,m,p1,p2,p3)
-#define HSP2_TRACE_DEBUG4(pcb,m,p1,p2,p3,p4)
-#define HSP2_TRACE_DEBUG5(pcb,m,p1,p2,p3,p4,p5)
-#define HSP2_TRACE_DEBUG6(pcb,m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the NFC unit
-*/
-#define NFC_TRACE_ERROR0(m)
-#define NFC_TRACE_ERROR1(m,p1)
-#define NFC_TRACE_ERROR2(m,p1,p2)
-#define NFC_TRACE_ERROR3(m,p1,p2,p3)
-#define NFC_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define NFC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define NFC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFC_TRACE_WARNING0(m)
-#define NFC_TRACE_WARNING1(m,p1)
-#define NFC_TRACE_WARNING2(m,p1,p2)
-#define NFC_TRACE_WARNING3(m,p1,p2,p3)
-#define NFC_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define NFC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define NFC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFC_TRACE_API0(m)
-#define NFC_TRACE_API1(m,p1)
-#define NFC_TRACE_API2(m,p1,p2)
-#define NFC_TRACE_API3(m,p1,p2,p3)
-#define NFC_TRACE_API4(m,p1,p2,p3,p4)
-#define NFC_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define NFC_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFC_TRACE_EVENT0(m)
-#define NFC_TRACE_EVENT1(m,p1)
-#define NFC_TRACE_EVENT2(m,p1,p2)
-#define NFC_TRACE_EVENT3(m,p1,p2,p3)
-#define NFC_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define NFC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define NFC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFC_TRACE_DEBUG0(m)
-#define NFC_TRACE_DEBUG1(m,p1)
-#define NFC_TRACE_DEBUG2(m,p1,p2)
-#define NFC_TRACE_DEBUG3(m,p1,p2,p3)
-#define NFC_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define NFC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define NFC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define NCI_TRACE_ERROR0(m)
-#define NCI_TRACE_ERROR1(m,p1)
-#define NCI_TRACE_ERROR2(m,p1,p2)
-#define NCI_TRACE_ERROR3(m,p1,p2,p3)
-#define NCI_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define NCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define NCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define NCI_TRACE_WARNING0(m)
-#define NCI_TRACE_WARNING1(m,p1)
-#define NCI_TRACE_WARNING2(m,p1,p2)
-#define NCI_TRACE_WARNING3(m,p1,p2,p3)
-#define NCI_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define NCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define NCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define NCI_TRACE_API0(m)
-#define NCI_TRACE_API1(m,p1)
-#define NCI_TRACE_API2(m,p1,p2)
-#define NCI_TRACE_API3(m,p1,p2,p3)
-#define NCI_TRACE_API4(m,p1,p2,p3,p4)
-#define NCI_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define NCI_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define NCI_TRACE_EVENT0(m)
-#define NCI_TRACE_EVENT1(m,p1)
-#define NCI_TRACE_EVENT2(m,p1,p2)
-#define NCI_TRACE_EVENT3(m,p1,p2,p3)
-#define NCI_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define NCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define NCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define NCI_TRACE_DEBUG0(m)
-#define NCI_TRACE_DEBUG1(m,p1)
-#define NCI_TRACE_DEBUG2(m,p1,p2)
-#define NCI_TRACE_DEBUG3(m,p1,p2,p3)
-#define NCI_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define NCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define NCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define RW_TRACE_ERROR0(m)
-#define RW_TRACE_ERROR1(m,p1)
-#define RW_TRACE_ERROR2(m,p1,p2)
-#define RW_TRACE_ERROR3(m,p1,p2,p3)
-#define RW_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define RW_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define RW_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define RW_TRACE_WARNING0(m)
-#define RW_TRACE_WARNING1(m,p1)
-#define RW_TRACE_WARNING2(m,p1,p2)
-#define RW_TRACE_WARNING3(m,p1,p2,p3)
-#define RW_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define RW_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define RW_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) }
-
-#define RW_TRACE_API0(m)
-#define RW_TRACE_API1(m,p1)
-#define RW_TRACE_API2(m,p1,p2)
-#define RW_TRACE_API3(m,p1,p2,p3)
-#define RW_TRACE_API4(m,p1,p2,p3,p4)
-#define RW_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define RW_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define RW_TRACE_EVENT0(m)
-#define RW_TRACE_EVENT1(m,p1)
-#define RW_TRACE_EVENT2(m,p1,p2)
-#define RW_TRACE_EVENT3(m,p1,p2,p3)
-#define RW_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define RW_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define RW_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define RW_TRACE_DEBUG0(m)
-#define RW_TRACE_DEBUG1(m,p1)
-#define RW_TRACE_DEBUG2(m,p1,p2)
-#define RW_TRACE_DEBUG3(m,p1,p2,p3)
-#define RW_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define RW_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define RW_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define CE_TRACE_ERROR0(m)
-#define CE_TRACE_ERROR1(m,p1)
-#define CE_TRACE_ERROR2(m,p1,p2)
-#define CE_TRACE_ERROR3(m,p1,p2,p3)
-#define CE_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define CE_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define CE_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define CE_TRACE_WARNING0(m)
-#define CE_TRACE_WARNING1(m,p1)
-#define CE_TRACE_WARNING2(m,p1,p2)
-#define CE_TRACE_WARNING3(m,p1,p2,p3)
-#define CE_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define CE_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define CE_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define CE_TRACE_API0(m)
-#define CE_TRACE_API1(m,p1)
-#define CE_TRACE_API2(m,p1,p2)
-#define CE_TRACE_API3(m,p1,p2,p3)
-#define CE_TRACE_API4(m,p1,p2,p3,p4)
-#define CE_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define CE_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define CE_TRACE_EVENT0(m)
-#define CE_TRACE_EVENT1(m,p1)
-#define CE_TRACE_EVENT2(m,p1,p2)
-#define CE_TRACE_EVENT3(m,p1,p2,p3)
-#define CE_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define CE_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define CE_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define CE_TRACE_DEBUG0(m)
-#define CE_TRACE_DEBUG1(m,p1)
-#define CE_TRACE_DEBUG2(m,p1,p2)
-#define CE_TRACE_DEBUG3(m,p1,p2,p3)
-#define CE_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define CE_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define CE_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define NDEF_TRACE_ERROR0(m)
-#define NDEF_TRACE_ERROR1(m,p1)
-#define NDEF_TRACE_ERROR2(m,p1,p2)
-#define NDEF_TRACE_ERROR3(m,p1,p2,p3)
-#define NDEF_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define NDEF_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define NDEF_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define NDEF_TRACE_WARNING0(m)
-#define NDEF_TRACE_WARNING1(m,p1)
-#define NDEF_TRACE_WARNING2(m,p1,p2)
-#define NDEF_TRACE_WARNING3(m,p1,p2,p3)
-#define NDEF_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define NDEF_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define NDEF_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define NDEF_TRACE_API0(m)
-#define NDEF_TRACE_API1(m,p1)
-#define NDEF_TRACE_API2(m,p1,p2)
-#define NDEF_TRACE_API3(m,p1,p2,p3)
-#define NDEF_TRACE_API4(m,p1,p2,p3,p4)
-#define NDEF_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define NDEF_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define NDEF_TRACE_EVENT0(m)
-#define NDEF_TRACE_EVENT1(m,p1)
-#define NDEF_TRACE_EVENT2(m,p1,p2)
-#define NDEF_TRACE_EVENT3(m,p1,p2,p3)
-#define NDEF_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define NDEF_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define NDEF_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define NDEF_TRACE_DEBUG0(m)
-#define NDEF_TRACE_DEBUG1(m,p1)
-#define NDEF_TRACE_DEBUG2(m,p1,p2)
-#define NDEF_TRACE_DEBUG3(m,p1,p2,p3)
-#define NDEF_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define NDEF_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define NDEF_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the NFA unit
-*/
-#define NFA_TRACE_ERROR0(m)
-#define NFA_TRACE_ERROR1(m,p1)
-#define NFA_TRACE_ERROR2(m,p1,p2)
-#define NFA_TRACE_ERROR3(m,p1,p2,p3)
-#define NFA_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define NFA_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define NFA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFA_TRACE_WARNING0(m)
-#define NFA_TRACE_WARNING1(m,p1)
-#define NFA_TRACE_WARNING2(m,p1,p2)
-#define NFA_TRACE_WARNING3(m,p1,p2,p3)
-#define NFA_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define NFA_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define NFA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFA_TRACE_API0(m)
-#define NFA_TRACE_API1(m,p1)
-#define NFA_TRACE_API2(m,p1,p2)
-#define NFA_TRACE_API3(m,p1,p2,p3)
-#define NFA_TRACE_API4(m,p1,p2,p3,p4)
-#define NFA_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define NFA_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFA_TRACE_EVENT0(m)
-#define NFA_TRACE_EVENT1(m,p1)
-#define NFA_TRACE_EVENT2(m,p1,p2)
-#define NFA_TRACE_EVENT3(m,p1,p2,p3)
-#define NFA_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define NFA_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define NFA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define NFA_TRACE_DEBUG0(m)
-#define NFA_TRACE_DEBUG1(m,p1)
-#define NFA_TRACE_DEBUG2(m,p1,p2)
-#define NFA_TRACE_DEBUG3(m,p1,p2,p3)
-#define NFA_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define NFA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define NFA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the NFA P2P unit
-*/
-#define P2P_TRACE_ERROR0(m)
-#define P2P_TRACE_ERROR1(m,p1)
-#define P2P_TRACE_ERROR2(m,p1,p2)
-#define P2P_TRACE_ERROR3(m,p1,p2,p3)
-#define P2P_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define P2P_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define P2P_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define P2P_TRACE_WARNING0(m)
-#define P2P_TRACE_WARNING1(m,p1)
-#define P2P_TRACE_WARNING2(m,p1,p2)
-#define P2P_TRACE_WARNING3(m,p1,p2,p3)
-#define P2P_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define P2P_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define P2P_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define P2P_TRACE_API0(m)
-#define P2P_TRACE_API1(m,p1)
-#define P2P_TRACE_API2(m,p1,p2)
-#define P2P_TRACE_API3(m,p1,p2,p3)
-#define P2P_TRACE_API4(m,p1,p2,p3,p4)
-#define P2P_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define P2P_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define P2P_TRACE_EVENT0(m)
-#define P2P_TRACE_EVENT1(m,p1)
-#define P2P_TRACE_EVENT2(m,p1,p2)
-#define P2P_TRACE_EVENT3(m,p1,p2,p3)
-#define P2P_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define P2P_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define P2P_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define P2P_TRACE_DEBUG0(m)
-#define P2P_TRACE_DEBUG1(m,p1)
-#define P2P_TRACE_DEBUG2(m,p1,p2)
-#define P2P_TRACE_DEBUG3(m,p1,p2,p3)
-#define P2P_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define P2P_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define P2P_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the NFA CHO unit
-*/
-#define CHO_TRACE_ERROR0(m)
-#define CHO_TRACE_ERROR1(m,p1)
-#define CHO_TRACE_ERROR2(m,p1,p2)
-#define CHO_TRACE_ERROR3(m,p1,p2,p3)
-#define CHO_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define CHO_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define CHO_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define CHO_TRACE_WARNING0(m)
-#define CHO_TRACE_WARNING1(m,p1)
-#define CHO_TRACE_WARNING2(m,p1,p2)
-#define CHO_TRACE_WARNING3(m,p1,p2,p3)
-#define CHO_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define CHO_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define CHO_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define CHO_TRACE_API0(m)
-#define CHO_TRACE_API1(m,p1)
-#define CHO_TRACE_API2(m,p1,p2)
-#define CHO_TRACE_API3(m,p1,p2,p3)
-#define CHO_TRACE_API4(m,p1,p2,p3,p4)
-#define CHO_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define CHO_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define CHO_TRACE_EVENT0(m)
-#define CHO_TRACE_EVENT1(m,p1)
-#define CHO_TRACE_EVENT2(m,p1,p2)
-#define CHO_TRACE_EVENT3(m,p1,p2,p3)
-#define CHO_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define CHO_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define CHO_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define CHO_TRACE_DEBUG0(m)
-#define CHO_TRACE_DEBUG1(m,p1)
-#define CHO_TRACE_DEBUG2(m,p1,p2)
-#define CHO_TRACE_DEBUG3(m,p1,p2,p3)
-#define CHO_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define CHO_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define CHO_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the NFA SNEP unit
-*/
-#define SNEP_TRACE_ERROR0(m)
-#define SNEP_TRACE_ERROR1(m,p1)
-#define SNEP_TRACE_ERROR2(m,p1,p2)
-#define SNEP_TRACE_ERROR3(m,p1,p2,p3)
-#define SNEP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SNEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SNEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SNEP_TRACE_WARNING0(m)
-#define SNEP_TRACE_WARNING1(m,p1)
-#define SNEP_TRACE_WARNING2(m,p1,p2)
-#define SNEP_TRACE_WARNING3(m,p1,p2,p3)
-#define SNEP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SNEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SNEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SNEP_TRACE_API0(m)
-#define SNEP_TRACE_API1(m,p1)
-#define SNEP_TRACE_API2(m,p1,p2)
-#define SNEP_TRACE_API3(m,p1,p2,p3)
-#define SNEP_TRACE_API4(m,p1,p2,p3,p4)
-#define SNEP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define SNEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define SNEP_TRACE_EVENT0(m)
-#define SNEP_TRACE_EVENT1(m,p1)
-#define SNEP_TRACE_EVENT2(m,p1,p2)
-#define SNEP_TRACE_EVENT3(m,p1,p2,p3)
-#define SNEP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SNEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SNEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SNEP_TRACE_DEBUG0(m)
-#define SNEP_TRACE_DEBUG1(m,p1)
-#define SNEP_TRACE_DEBUG2(m,p1,p2)
-#define SNEP_TRACE_DEBUG3(m,p1,p2,p3)
-#define SNEP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SNEP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SNEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* define traces for HID Host */
-#define HIDH_TRACE_ERROR0(m)
-#define HIDH_TRACE_ERROR1(m,p1)
-#define HIDH_TRACE_ERROR2(m,p1,p2)
-#define HIDH_TRACE_ERROR3(m,p1,p2,p3)
-#define HIDH_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define HIDH_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define HIDH_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDH_TRACE_WARNING0(m)
-#define HIDH_TRACE_WARNING1(m,p1)
-#define HIDH_TRACE_WARNING2(m,p1,p2)
-#define HIDH_TRACE_WARNING3(m,p1,p2,p3)
-#define HIDH_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define HIDH_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define HIDH_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDH_TRACE_API0(m)
-#define HIDH_TRACE_API1(m,p1)
-#define HIDH_TRACE_API2(m,p1,p2)
-#define HIDH_TRACE_API3(m,p1,p2,p3)
-#define HIDH_TRACE_API4(m,p1,p2,p3,p4)
-#define HIDH_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define HIDH_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDH_TRACE_EVENT0(m)
-#define HIDH_TRACE_EVENT1(m,p1)
-#define HIDH_TRACE_EVENT2(m,p1,p2)
-#define HIDH_TRACE_EVENT3(m,p1,p2,p3)
-#define HIDH_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define HIDH_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define HIDH_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDH_TRACE_DEBUG0(m)
-#define HIDH_TRACE_DEBUG1(m,p1)
-#define HIDH_TRACE_DEBUG2(m,p1,p2)
-#define HIDH_TRACE_DEBUG3(m,p1,p2,p3)
-#define HIDH_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define HIDH_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define HIDH_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for HID Device */
-#define HIDD_TRACE_ERROR0(m)
-#define HIDD_TRACE_ERROR1(m,p1)
-#define HIDD_TRACE_ERROR2(m,p1,p2)
-#define HIDD_TRACE_ERROR3(m,p1,p2,p3)
-#define HIDD_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define HIDD_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define HIDD_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDD_TRACE_WARNING0(m)
-#define HIDD_TRACE_WARNING1(m,p1)
-#define HIDD_TRACE_WARNING2(m,p1,p2)
-#define HIDD_TRACE_WARNING3(m,p1,p2,p3)
-#define HIDD_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define HIDD_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define HIDD_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDD_TRACE_API0(m)
-#define HIDD_TRACE_API1(m,p1)
-#define HIDD_TRACE_API2(m,p1,p2)
-#define HIDD_TRACE_API3(m,p1,p2,p3)
-#define HIDD_TRACE_API4(m,p1,p2,p3,p4)
-#define HIDD_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define HIDD_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDD_TRACE_EVENT0(m)
-#define HIDD_TRACE_EVENT1(m,p1)
-#define HIDD_TRACE_EVENT2(m,p1,p2)
-#define HIDD_TRACE_EVENT3(m,p1,p2,p3)
-#define HIDD_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define HIDD_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define HIDD_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define HIDD_TRACE_DEBUG0(m)
-#define HIDD_TRACE_DEBUG1(m,p1)
-#define HIDD_TRACE_DEBUG2(m,p1,p2)
-#define HIDD_TRACE_DEBUG3(m,p1,p2,p3)
-#define HIDD_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define HIDD_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define HIDD_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for DUN */
-
-#define DUN_TRACE_ERROR0(m)
-#define DUN_TRACE_ERROR1(m,p1)
-#define DUN_TRACE_ERROR2(m,p1,p2)
-#define DUN_TRACE_ERROR3(m,p1,p2,p3)
-#define DUN_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define DUN_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define DUN_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define DUN_TRACE_WARNING0(m)
-#define DUN_TRACE_WARNING1(m,p1)
-#define DUN_TRACE_WARNING2(m,p1,p2)
-#define DUN_TRACE_WARNING3(m,p1,p2,p3)
-#define DUN_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define DUN_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define DUN_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define DUN_TRACE_API0(m)
-#define DUN_TRACE_API1(m,p1)
-#define DUN_TRACE_API2(m,p1,p2)
-#define DUN_TRACE_API3(m,p1,p2,p3)
-#define DUN_TRACE_API4(m,p1,p2,p3,p4)
-#define DUN_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define DUN_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define DUN_TRACE_EVENT0(m)
-#define DUN_TRACE_EVENT1(m,p1)
-#define DUN_TRACE_EVENT2(m,p1,p2)
-#define DUN_TRACE_EVENT3(m,p1,p2,p3)
-#define DUN_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define DUN_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define DUN_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define DUN_TRACE_DEBUG0(m)
-#define DUN_TRACE_DEBUG1(m,p1)
-#define DUN_TRACE_DEBUG2(m,p1,p2)
-#define DUN_TRACE_DEBUG3(m,p1,p2,p3)
-#define DUN_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define DUN_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define DUN_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for HCRP */
-
-#define HCRP_TRACE_ERROR0(m)
-#define HCRP_TRACE_ERROR1(m,p1)
-#define HCRP_TRACE_ERROR2(m,p1,p2)
-#define HCRP_TRACE_ERROR3(m,p1,p2,p3)
-#define HCRP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define HCRP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define HCRP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRP_TRACE_WARNING0(m)
-#define HCRP_TRACE_WARNING1(m,p1)
-#define HCRP_TRACE_WARNING2(m,p1,p2)
-#define HCRP_TRACE_WARNING3(m,p1,p2,p3)
-#define HCRP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define HCRP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define HCRP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRP_TRACE_API0(m)
-#define HCRP_TRACE_API1(m,p1)
-#define HCRP_TRACE_API2(m,p1,p2)
-#define HCRP_TRACE_API3(m,p1,p2,p3)
-#define HCRP_TRACE_API4(m,p1,p2,p3,p4)
-#define HCRP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define HCRP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRP_TRACE_EVENT0(m)
-#define HCRP_TRACE_EVENT1(m,p1)
-#define HCRP_TRACE_EVENT2(m,p1,p2)
-#define HCRP_TRACE_EVENT3(m,p1,p2,p3)
-#define HCRP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define HCRP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define HCRP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRP_TRACE_DEBUG0(m)
-#define HCRP_TRACE_DEBUG1(m,p1)
-#define HCRP_TRACE_DEBUG2(m,p1,p2)
-#define HCRP_TRACE_DEBUG3(m,p1,p2,p3)
-#define HCRP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define HCRP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define HCRP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* define traces for HCRP */
-
-#define HCRPM_TRACE_ERROR0(m)
-#define HCRPM_TRACE_ERROR1(m,p1)
-#define HCRPM_TRACE_ERROR2(m,p1,p2)
-#define HCRPM_TRACE_ERROR3(m,p1,p2,p3)
-#define HCRPM_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define HCRPM_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define HCRPM_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRPM_TRACE_WARNING0(m)
-#define HCRPM_TRACE_WARNING1(m,p1)
-#define HCRPM_TRACE_WARNING2(m,p1,p2)
-#define HCRPM_TRACE_WARNING3(m,p1,p2,p3)
-#define HCRPM_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define HCRPM_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define HCRPM_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRPM_TRACE_API0(m)
-#define HCRPM_TRACE_API1(m,p1)
-#define HCRPM_TRACE_API2(m,p1,p2)
-#define HCRPM_TRACE_API3(m,p1,p2,p3)
-#define HCRPM_TRACE_API4(m,p1,p2,p3,p4)
-#define HCRPM_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define HCRPM_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRPM_TRACE_EVENT0(m)
-#define HCRPM_TRACE_EVENT1(m,p1)
-#define HCRPM_TRACE_EVENT2(m,p1,p2)
-#define HCRPM_TRACE_EVENT3(m,p1,p2,p3)
-#define HCRPM_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define HCRPM_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define HCRPM_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define HCRPM_TRACE_DEBUG0(m)
-#define HCRPM_TRACE_DEBUG1(m,p1)
-#define HCRPM_TRACE_DEBUG2(m,p1,p2)
-#define HCRPM_TRACE_DEBUG3(m,p1,p2,p3)
-#define HCRPM_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define HCRPM_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define HCRPM_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for RPC */
-
-#define RPC_TRACE_ERROR0(m)
-#define RPC_TRACE_ERROR1(m,p1)
-#define RPC_TRACE_ERROR2(m,p1,p2)
-#define RPC_TRACE_ERROR3(m,p1,p2,p3)
-#define RPC_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define RPC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define RPC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define RPC_TRACE_WARNING0(m)
-#define RPC_TRACE_WARNING1(m,p1)
-#define RPC_TRACE_WARNING2(m,p1,p2)
-#define RPC_TRACE_WARNING3(m,p1,p2,p3)
-#define RPC_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define RPC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define RPC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define RPC_TRACE_API0(m)
-#define RPC_TRACE_API1(m,p1)
-#define RPC_TRACE_API2(m,p1,p2)
-#define RPC_TRACE_API3(m,p1,p2,p3)
-#define RPC_TRACE_API4(m,p1,p2,p3,p4)
-#define RPC_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define RPC_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define RPC_TRACE_EVENT0(m)
-#define RPC_TRACE_EVENT1(m,p1)
-#define RPC_TRACE_EVENT2(m,p1,p2)
-#define RPC_TRACE_EVENT3(m,p1,p2,p3)
-#define RPC_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define RPC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define RPC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define RPC_TRACE_DEBUG0(m)
-#define RPC_TRACE_DEBUG1(m,p1)
-#define RPC_TRACE_DEBUG2(m,p1,p2)
-#define RPC_TRACE_DEBUG3(m,p1,p2,p3)
-#define RPC_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define RPC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define RPC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for BNEP */
-
-#define BNEP_TRACE_ERROR0(m)
-#define BNEP_TRACE_ERROR1(m,p1)
-#define BNEP_TRACE_ERROR2(m,p1,p2)
-#define BNEP_TRACE_ERROR3(m,p1,p2,p3)
-#define BNEP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define BNEP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define BNEP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define BNEP_TRACE_WARNING0(m)
-#define BNEP_TRACE_WARNING1(m,p1)
-#define BNEP_TRACE_WARNING2(m,p1,p2)
-#define BNEP_TRACE_WARNING3(m,p1,p2,p3)
-#define BNEP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define BNEP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define BNEP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define BNEP_TRACE_API0(m)
-#define BNEP_TRACE_API1(m,p1)
-#define BNEP_TRACE_API2(m,p1,p2)
-#define BNEP_TRACE_API3(m,p1,p2,p3)
-#define BNEP_TRACE_API4(m,p1,p2,p3,p4)
-#define BNEP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define BNEP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define BNEP_TRACE_EVENT0(m)
-#define BNEP_TRACE_EVENT1(m,p1)
-#define BNEP_TRACE_EVENT2(m,p1,p2)
-#define BNEP_TRACE_EVENT3(m,p1,p2,p3)
-#define BNEP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define BNEP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define BNEP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define BNEP_TRACE_DEBUG0(m)
-#define BNEP_TRACE_DEBUG1(m,p1)
-#define BNEP_TRACE_DEBUG2(m,p1,p2)
-#define BNEP_TRACE_DEBUG3(m,p1,p2,p3)
-#define BNEP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define BNEP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define BNEP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* hid module traces */
-
-#define MSKB_TRACE_0(m)
-#define MSKB_TRACE_1(m,p1)
-#define MSKB_TRACE_2(m,p1,p2)
-#define MSKB_TRACE_3(m,p1,p2,p3)
-#define MSKB_TRACE_4(m,p1,p2,p3,p4)
-#define MSKB_TRACE_5(m,p1,p2,p3,p4,p5)
-#define MSKB_TRACE_6(m,p1,p2,p3,p4,p5,p6)
-
-#define MSKB_DEBUG_0(m)
-#define MSKB_DEBUG_1(m,p1)
-#define MSKB_DEBUG_2(m,p1,p2)
-#define MSKB_DEBUG_3(m,p1,p2,p3)
-#define MSKB_DEBUG_4(m,p1,p2,p3,p4)
-#define MSKB_DEBUG_5(m,p1,p2,p3,p4,p5)
-#define MSKB_DEBUG_6(m,p1,p2,p3,p4,p5,p6)
-
-#define MSKB_ERROR_0(m)
-#define MSKB_ERROR_1(m,p1)
-#define MSKB_ERROR_2(m,p1,p2)
-#define MSKB_ERROR_3(m,p1,p2,p3)
-#define MSKB_ERROR_4(m,p1,p2,p3,p4)
-#define MSKB_ERROR_5(m,p1,p2,p3,p4,p5)
-#define MSKB_ERROR_6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for PAN */
-
-#define PAN_TRACE_ERROR0(m)
-#define PAN_TRACE_ERROR1(m,p1)
-#define PAN_TRACE_ERROR2(m,p1,p2)
-#define PAN_TRACE_ERROR3(m,p1,p2,p3)
-#define PAN_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define PAN_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define PAN_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define PAN_TRACE_WARNING0(m)
-#define PAN_TRACE_WARNING1(m,p1)
-#define PAN_TRACE_WARNING2(m,p1,p2)
-#define PAN_TRACE_WARNING3(m,p1,p2,p3)
-#define PAN_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define PAN_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define PAN_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define PAN_TRACE_API0(m)
-#define PAN_TRACE_API1(m,p1)
-#define PAN_TRACE_API2(m,p1,p2)
-#define PAN_TRACE_API3(m,p1,p2,p3)
-#define PAN_TRACE_API4(m,p1,p2,p3,p4)
-#define PAN_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define PAN_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define PAN_TRACE_EVENT0(m)
-#define PAN_TRACE_EVENT1(m,p1)
-#define PAN_TRACE_EVENT2(m,p1,p2)
-#define PAN_TRACE_EVENT3(m,p1,p2,p3)
-#define PAN_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define PAN_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define PAN_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define PAN_TRACE_DEBUG0(m)
-#define PAN_TRACE_DEBUG1(m,p1)
-#define PAN_TRACE_DEBUG2(m,p1,p2)
-#define PAN_TRACE_DEBUG3(m,p1,p2,p3)
-#define PAN_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define PAN_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define PAN_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* define traces for SIM */
-
-#define SAP_TRACE_ERROR0(m)
-#define SAP_TRACE_ERROR1(m,p1)
-#define SAP_TRACE_ERROR2(m,p1,p2)
-#define SAP_TRACE_ERROR3(m,p1,p2,p3)
-#define SAP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SAP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SAP_TRACE_WARNING0(m)
-#define SAP_TRACE_WARNING1(m,p1)
-#define SAP_TRACE_WARNING2(m,p1,p2)
-#define SAP_TRACE_WARNING3(m,p1,p2,p3)
-#define SAP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SAP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SAP_TRACE_API0(m)
-#define SAP_TRACE_API1(m,p1)
-#define SAP_TRACE_API2(m,p1,p2)
-#define SAP_TRACE_API3(m,p1,p2,p3)
-#define SAP_TRACE_API4(m,p1,p2,p3,p4)
-#define SAP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define SAP_TRACE_EVENT0(m)
-#define SAP_TRACE_EVENT1(m,p1)
-#define SAP_TRACE_EVENT2(m,p1,p2)
-#define SAP_TRACE_EVENT3(m,p1,p2,p3)
-#define SAP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SAP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SAP_TRACE_DEBUG0(m)
-#define SAP_TRACE_DEBUG1(m,p1)
-#define SAP_TRACE_DEBUG2(m,p1,p2)
-#define SAP_TRACE_DEBUG3(m,p1,p2,p3)
-#define SAP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SAP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the OPP profile
-*/
-#define OPP_TRACE_ERROR0(m)
-#define OPP_TRACE_ERROR1(m,p1)
-#define OPP_TRACE_ERROR2(m,p1,p2)
-#define OPP_TRACE_ERROR3(m,p1,p2,p3)
-#define OPP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define OPP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define OPP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define OPP_TRACE_WARNING0(m)
-#define OPP_TRACE_WARNING1(m,p1)
-#define OPP_TRACE_WARNING2(m,p1,p2)
-#define OPP_TRACE_WARNING3(m,p1,p2,p3)
-#define OPP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define OPP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define OPP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define OPP_TRACE_EVENT0(m)
-#define OPP_TRACE_EVENT1(m,p1)
-#define OPP_TRACE_EVENT2(m,p1,p2)
-#define OPP_TRACE_EVENT3(m,p1,p2,p3)
-#define OPP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define OPP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define OPP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define OPP_TRACE_DEBUG0(m)
-#define OPP_TRACE_DEBUG1(m,p1)
-#define OPP_TRACE_DEBUG2(m,p1,p2)
-#define OPP_TRACE_DEBUG3(m,p1,p2,p3)
-#define OPP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define OPP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define OPP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define OPP_TRACE_API0(m)
-#define OPP_TRACE_API1(m,p1)
-#define OPP_TRACE_API2(m,p1,p2)
-#define OPP_TRACE_API3(m,p1,p2,p3)
-#define OPP_TRACE_API4(m,p1,p2,p3,p4)
-#define OPP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define OPP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the FTP profile
-*/
-#define FTP_TRACE_ERROR0(m)
-#define FTP_TRACE_ERROR1(m,p1)
-#define FTP_TRACE_ERROR2(m,p1,p2)
-#define FTP_TRACE_ERROR3(m,p1,p2,p3)
-#define FTP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define FTP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define FTP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define FTP_TRACE_WARNING0(m)
-#define FTP_TRACE_WARNING1(m,p1)
-#define FTP_TRACE_WARNING2(m,p1,p2)
-#define FTP_TRACE_WARNING3(m,p1,p2,p3)
-#define FTP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define FTP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define FTP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define FTP_TRACE_EVENT0(m)
-#define FTP_TRACE_EVENT1(m,p1)
-#define FTP_TRACE_EVENT2(m,p1,p2)
-#define FTP_TRACE_EVENT3(m,p1,p2,p3)
-#define FTP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define FTP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define FTP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define FTP_TRACE_DEBUG0(m)
-#define FTP_TRACE_DEBUG1(m,p1)
-#define FTP_TRACE_DEBUG2(m,p1,p2)
-#define FTP_TRACE_DEBUG3(m,p1,p2,p3)
-#define FTP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define FTP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define FTP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define FTP_TRACE_API0(m)
-#define FTP_TRACE_API1(m,p1)
-#define FTP_TRACE_API2(m,p1,p2)
-#define FTP_TRACE_API3(m,p1,p2,p3)
-#define FTP_TRACE_API4(m,p1,p2,p3,p4)
-#define FTP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define FTP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for the A2DP profile
-*/
-#define A2D_TRACE_ERROR0(m)
-#define A2D_TRACE_ERROR1(m,p1)
-#define A2D_TRACE_ERROR2(m,p1,p2)
-#define A2D_TRACE_ERROR3(m,p1,p2,p3)
-#define A2D_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define A2D_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define A2D_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define A2D_TRACE_WARNING0(m)
-#define A2D_TRACE_WARNING1(m,p1)
-#define A2D_TRACE_WARNING2(m,p1,p2)
-#define A2D_TRACE_WARNING3(m,p1,p2,p3)
-#define A2D_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define A2D_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define A2D_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define A2D_TRACE_EVENT0(m)
-#define A2D_TRACE_EVENT1(m,p1)
-#define A2D_TRACE_EVENT2(m,p1,p2)
-#define A2D_TRACE_EVENT3(m,p1,p2,p3)
-#define A2D_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define A2D_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define A2D_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define A2D_TRACE_DEBUG0(m)
-#define A2D_TRACE_DEBUG1(m,p1)
-#define A2D_TRACE_DEBUG2(m,p1,p2)
-#define A2D_TRACE_DEBUG3(m,p1,p2,p3)
-#define A2D_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define A2D_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define A2D_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define A2D_TRACE_API0(m)
-#define A2D_TRACE_API1(m,p1)
-#define A2D_TRACE_API2(m,p1,p2)
-#define A2D_TRACE_API3(m,p1,p2,p3)
-#define A2D_TRACE_API4(m,p1,p2,p3,p4)
-#define A2D_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define A2D_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the VDP profile
-*/
-#define VDP_TRACE_ERROR0(m)
-#define VDP_TRACE_ERROR1(m,p1)
-#define VDP_TRACE_ERROR2(m,p1,p2)
-#define VDP_TRACE_ERROR3(m,p1,p2,p3)
-#define VDP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define VDP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define VDP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define VDP_TRACE_WARNING0(m)
-#define VDP_TRACE_WARNING1(m,p1)
-#define VDP_TRACE_WARNING2(m,p1,p2)
-#define VDP_TRACE_WARNING3(m,p1,p2,p3)
-#define VDP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define VDP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define VDP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define VDP_TRACE_EVENT0(m)
-#define VDP_TRACE_EVENT1(m,p1)
-#define VDP_TRACE_EVENT2(m,p1,p2)
-#define VDP_TRACE_EVENT3(m,p1,p2,p3)
-#define VDP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define VDP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define VDP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define VDP_TRACE_DEBUG0(m)
-#define VDP_TRACE_DEBUG1(m,p1)
-#define VDP_TRACE_DEBUG2(m,p1,p2)
-#define VDP_TRACE_DEBUG3(m,p1,p2,p3)
-#define VDP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define VDP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define VDP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define VDP_TRACE_API0(m)
-#define VDP_TRACE_API1(m,p1)
-#define VDP_TRACE_API2(m,p1,p2)
-#define VDP_TRACE_API3(m,p1,p2,p3)
-#define VDP_TRACE_API4(m,p1,p2,p3,p4)
-#define VDP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define VDP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for the LM unit
-*/
-#define LMP_TRACE_ERROR0(m)
-#define LMP_TRACE_ERROR1(m,p1)
-#define LMP_TRACE_ERROR2(m,p1,p2)
-#define LMP_TRACE_ERROR3(m,p1,p2,p3)
-#define LMP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define LMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define LMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define LMP_TRACE_WARNING0(m)
-#define LMP_TRACE_WARNING1(m,p1)
-#define LMP_TRACE_WARNING2(m,p1,p2)
-#define LMP_TRACE_WARNING3(m,p1,p2,p3)
-#define LMP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define LMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define LMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define LMP_TRACE_EVENT0(m)
-#define LMP_TRACE_EVENT1(m,p1)
-#define LMP_TRACE_EVENT2(m,p1,p2)
-#define LMP_TRACE_EVENT3(m,p1,p2,p3)
-#define LMP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define LMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define LMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define LMP_TRACE_DEBUG0(m)
-#define LMP_TRACE_DEBUG1(m,p1)
-#define LMP_TRACE_DEBUG2(m,p1,p2)
-#define LMP_TRACE_DEBUG3(m,p1,p2,p3)
-#define LMP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define LMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define LMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the LC unit
-*/
-#define LC_TRACE_ERROR0(m)
-#define LC_TRACE_ERROR1(m,p1)
-#define LC_TRACE_ERROR2(m,p1,p2)
-#define LC_TRACE_ERROR3(m,p1,p2,p3)
-#define LC_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define LC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define LC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define LC_TRACE_WARNING0(m)
-#define LC_TRACE_WARNING1(m,p1)
-#define LC_TRACE_WARNING2(m,p1,p2)
-#define LC_TRACE_WARNING3(m,p1,p2,p3)
-#define LC_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define LC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define LC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define LC_TRACE_EVENT0(m)
-#define LC_TRACE_EVENT1(m,p1)
-#define LC_TRACE_EVENT2(m,p1,p2)
-#define LC_TRACE_EVENT3(m,p1,p2,p3)
-#define LC_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define LC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define LC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define LC_TRACE_DEBUG0(m)
-#define LC_TRACE_DEBUG1(m,p1)
-#define LC_TRACE_DEBUG2(m,p1,p2)
-#define LC_TRACE_DEBUG3(m,p1,p2,p3)
-#define LC_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define LC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define LC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDA_TRACE_ERROR0(m)
-#define SDA_TRACE_ERROR1(m,p1)
-#define SDA_TRACE_ERROR2(m,p1,p2)
-#define SDA_TRACE_ERROR3(m,p1,p2,p3)
-#define SDA_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SDA_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SDA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDA_TRACE_WARNING0(m)
-#define SDA_TRACE_WARNING1(m,p1)
-#define SDA_TRACE_WARNING2(m,p1,p2)
-#define SDA_TRACE_WARNING3(m,p1,p2,p3)
-#define SDA_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SDA_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SDA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDA_TRACE_EVENT0(m)
-#define SDA_TRACE_EVENT1(m,p1)
-#define SDA_TRACE_EVENT2(m,p1,p2)
-#define SDA_TRACE_EVENT3(m,p1,p2,p3)
-#define SDA_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SDA_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SDA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SDA_TRACE_DEBUG0(m)
-#define SDA_TRACE_DEBUG1(m,p1)
-#define SDA_TRACE_DEBUG2(m,p1,p2)
-#define SDA_TRACE_DEBUG3(m,p1,p2,p3)
-#define SDA_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SDA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SDA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* AVDTP
-*/
-#define AVDT_TRACE_ERROR0(m)
-#define AVDT_TRACE_ERROR1(m,p1)
-#define AVDT_TRACE_ERROR2(m,p1,p2)
-#define AVDT_TRACE_ERROR3(m,p1,p2,p3)
-#define AVDT_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define AVDT_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define AVDT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVDT_TRACE_WARNING0(m)
-#define AVDT_TRACE_WARNING1(m,p1)
-#define AVDT_TRACE_WARNING2(m,p1,p2)
-#define AVDT_TRACE_WARNING3(m,p1,p2,p3)
-#define AVDT_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define AVDT_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define AVDT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVDT_TRACE_EVENT0(m)
-#define AVDT_TRACE_EVENT1(m,p1)
-#define AVDT_TRACE_EVENT2(m,p1,p2)
-#define AVDT_TRACE_EVENT3(m,p1,p2,p3)
-#define AVDT_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define AVDT_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define AVDT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVDT_TRACE_DEBUG0(m)
-#define AVDT_TRACE_DEBUG1(m,p1)
-#define AVDT_TRACE_DEBUG2(m,p1,p2)
-#define AVDT_TRACE_DEBUG3(m,p1,p2,p3)
-#define AVDT_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define AVDT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define AVDT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVDT_TRACE_API0(m)
-#define AVDT_TRACE_API1(m,p1)
-#define AVDT_TRACE_API2(m,p1,p2)
-#define AVDT_TRACE_API3(m,p1,p2,p3)
-#define AVDT_TRACE_API4(m,p1,p2,p3,p4)
-#define AVDT_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define AVDT_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the AVCTP protocol
-*/
-#define AVCT_TRACE_ERROR0(m)
-#define AVCT_TRACE_ERROR1(m,p1)
-#define AVCT_TRACE_ERROR2(m,p1,p2)
-#define AVCT_TRACE_ERROR3(m,p1,p2,p3)
-#define AVCT_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define AVCT_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define AVCT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVCT_TRACE_WARNING0(m)
-#define AVCT_TRACE_WARNING1(m,p1)
-#define AVCT_TRACE_WARNING2(m,p1,p2)
-#define AVCT_TRACE_WARNING3(m,p1,p2,p3)
-#define AVCT_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define AVCT_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define AVCT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVCT_TRACE_EVENT0(m)
-#define AVCT_TRACE_EVENT1(m,p1)
-#define AVCT_TRACE_EVENT2(m,p1,p2)
-#define AVCT_TRACE_EVENT3(m,p1,p2,p3)
-#define AVCT_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define AVCT_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define AVCT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVCT_TRACE_DEBUG0(m)
-#define AVCT_TRACE_DEBUG1(m,p1)
-#define AVCT_TRACE_DEBUG2(m,p1,p2)
-#define AVCT_TRACE_DEBUG3(m,p1,p2,p3)
-#define AVCT_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define AVCT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define AVCT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVCT_TRACE_API0(m)
-#define AVCT_TRACE_API1(m,p1)
-#define AVCT_TRACE_API2(m,p1,p2)
-#define AVCT_TRACE_API3(m,p1,p2,p3)
-#define AVCT_TRACE_API4(m,p1,p2,p3,p4)
-#define AVCT_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define AVCT_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-
-/* Define tracing for the AVRCP profile
-*/
-#define AVRC_TRACE_ERROR0(m)
-#define AVRC_TRACE_ERROR1(m,p1)
-#define AVRC_TRACE_ERROR2(m,p1,p2)
-#define AVRC_TRACE_ERROR3(m,p1,p2,p3)
-#define AVRC_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define AVRC_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define AVRC_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVRC_TRACE_WARNING0(m)
-#define AVRC_TRACE_WARNING1(m,p1)
-#define AVRC_TRACE_WARNING2(m,p1,p2)
-#define AVRC_TRACE_WARNING3(m,p1,p2,p3)
-#define AVRC_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define AVRC_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define AVRC_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVRC_TRACE_EVENT0(m)
-#define AVRC_TRACE_EVENT1(m,p1)
-#define AVRC_TRACE_EVENT2(m,p1,p2)
-#define AVRC_TRACE_EVENT3(m,p1,p2,p3)
-#define AVRC_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define AVRC_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define AVRC_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVRC_TRACE_DEBUG0(m)
-#define AVRC_TRACE_DEBUG1(m,p1)
-#define AVRC_TRACE_DEBUG2(m,p1,p2)
-#define AVRC_TRACE_DEBUG3(m,p1,p2,p3)
-#define AVRC_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define AVRC_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define AVRC_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define AVRC_TRACE_API0(m)
-#define AVRC_TRACE_API1(m,p1)
-#define AVRC_TRACE_API2(m,p1,p2)
-#define AVRC_TRACE_API3(m,p1,p2,p3)
-#define AVRC_TRACE_API4(m,p1,p2,p3,p4)
-#define AVRC_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define AVRC_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* MCAP
-*/
-#define MCA_TRACE_ERROR0(m)
-#define MCA_TRACE_ERROR1(m,p1)
-#define MCA_TRACE_ERROR2(m,p1,p2)
-#define MCA_TRACE_ERROR3(m,p1,p2,p3)
-#define MCA_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define MCA_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define MCA_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define MCA_TRACE_WARNING0(m)
-#define MCA_TRACE_WARNING1(m,p1)
-#define MCA_TRACE_WARNING2(m,p1,p2)
-#define MCA_TRACE_WARNING3(m,p1,p2,p3)
-#define MCA_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define MCA_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define MCA_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define MCA_TRACE_EVENT0(m)
-#define MCA_TRACE_EVENT1(m,p1)
-#define MCA_TRACE_EVENT2(m,p1,p2)
-#define MCA_TRACE_EVENT3(m,p1,p2,p3)
-#define MCA_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define MCA_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define MCA_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define MCA_TRACE_DEBUG0(m)
-#define MCA_TRACE_DEBUG1(m,p1)
-#define MCA_TRACE_DEBUG2(m,p1,p2)
-#define MCA_TRACE_DEBUG3(m,p1,p2,p3)
-#define MCA_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define MCA_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define MCA_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#define MCA_TRACE_API0(m)
-#define MCA_TRACE_API1(m,p1)
-#define MCA_TRACE_API2(m,p1,p2)
-#define MCA_TRACE_API3(m,p1,p2,p3)
-#define MCA_TRACE_API4(m,p1,p2,p3,p4)
-#define MCA_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define MCA_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the AMP unit
-*/
-#define AMP_TRACE_ERROR0(m)
-#define AMP_TRACE_ERROR1(m,p1)
-#define AMP_TRACE_ERROR2(m,p1,p2)
-#define AMP_TRACE_ERROR3(m,p1,p2,p3)
-#define AMP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define AMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define AMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define AMP_TRACE_WARNING0(m)
-#define AMP_TRACE_WARNING1(m,p1)
-#define AMP_TRACE_WARNING2(m,p1,p2)
-#define AMP_TRACE_WARNING3(m,p1,p2,p3)
-#define AMP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define AMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define AMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define AMP_TRACE_API0(m)
-#define AMP_TRACE_API1(m,p1)
-#define AMP_TRACE_API2(m,p1,p2)
-#define AMP_TRACE_API3(m,p1,p2,p3)
-#define AMP_TRACE_API4(m,p1,p2,p3,p4)
-#define AMP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define AMP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define AMP_TRACE_EVENT0(m)
-#define AMP_TRACE_EVENT1(m,p1)
-#define AMP_TRACE_EVENT2(m,p1,p2)
-#define AMP_TRACE_EVENT3(m,p1,p2,p3)
-#define AMP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define AMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define AMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define AMP_TRACE_DEBUG0(m)
-#define AMP_TRACE_DEBUG1(m,p1)
-#define AMP_TRACE_DEBUG2(m,p1,p2)
-#define AMP_TRACE_DEBUG3(m,p1,p2,p3)
-#define AMP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define AMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define AMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the GATT
-*/
-#define GATT_TRACE_ERROR0(m)
-#define GATT_TRACE_ERROR1(m,p1)
-#define GATT_TRACE_ERROR2(m,p1,p2)
-#define GATT_TRACE_ERROR3(m,p1,p2,p3)
-#define GATT_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define GATT_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define GATT_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define GATT_TRACE_WARNING0(m)
-#define GATT_TRACE_WARNING1(m,p1)
-#define GATT_TRACE_WARNING2(m,p1,p2)
-#define GATT_TRACE_WARNING3(m,p1,p2,p3)
-#define GATT_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define GATT_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define GATT_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define GATT_TRACE_API0(m)
-#define GATT_TRACE_API1(m,p1)
-#define GATT_TRACE_API2(m,p1,p2)
-#define GATT_TRACE_API3(m,p1,p2,p3)
-#define GATT_TRACE_API4(m,p1,p2,p3,p4)
-#define GATT_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define GATT_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define GATT_TRACE_EVENT0(m)
-#define GATT_TRACE_EVENT1(m,p1)
-#define GATT_TRACE_EVENT2(m,p1,p2)
-#define GATT_TRACE_EVENT3(m,p1,p2,p3)
-#define GATT_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define GATT_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define GATT_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define GATT_TRACE_DEBUG0(m)
-#define GATT_TRACE_DEBUG1(m,p1)
-#define GATT_TRACE_DEBUG2(m,p1,p2)
-#define GATT_TRACE_DEBUG3(m,p1,p2,p3)
-#define GATT_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define GATT_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define GATT_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-/* Define tracing for the SMP unit
-*/
-#define SMP_TRACE_ERROR0(m)
-#define SMP_TRACE_ERROR1(m,p1)
-#define SMP_TRACE_ERROR2(m,p1,p2)
-#define SMP_TRACE_ERROR3(m,p1,p2,p3)
-#define SMP_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define SMP_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define SMP_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define SMP_TRACE_WARNING0(m)
-#define SMP_TRACE_WARNING1(m,p1)
-#define SMP_TRACE_WARNING2(m,p1,p2)
-#define SMP_TRACE_WARNING3(m,p1,p2,p3)
-#define SMP_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define SMP_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define SMP_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define SMP_TRACE_API0(m)
-#define SMP_TRACE_API1(m,p1)
-#define SMP_TRACE_API2(m,p1,p2)
-#define SMP_TRACE_API3(m,p1,p2,p3)
-#define SMP_TRACE_API4(m,p1,p2,p3,p4)
-#define SMP_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define SMP_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define SMP_TRACE_EVENT0(m)
-#define SMP_TRACE_EVENT1(m,p1)
-#define SMP_TRACE_EVENT2(m,p1,p2)
-#define SMP_TRACE_EVENT3(m,p1,p2,p3)
-#define SMP_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define SMP_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define SMP_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define SMP_TRACE_DEBUG0(m)
-#define SMP_TRACE_DEBUG1(m,p1)
-#define SMP_TRACE_DEBUG2(m,p1,p2)
-#define SMP_TRACE_DEBUG3(m,p1,p2,p3)
-#define SMP_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define SMP_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define SMP_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#endif
-
-#if (BT_USE_TRACES == TRUE || BT_TRACE_APPL == TRUE)
-
-/* define traces for application */
-#define APPL_TRACE_ERROR0(m)                    {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, (m));}
-#define APPL_TRACE_ERROR1(m,p1)                 {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1));}
-#define APPL_TRACE_ERROR2(m,p1,p2)              {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2));}
-#define APPL_TRACE_ERROR3(m,p1,p2,p3)           {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define APPL_TRACE_ERROR4(m,p1,p2,p3,p4)        {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define APPL_TRACE_ERROR5(m,p1,p2,p3,p4,p5)     {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define APPL_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)  {if (appl_trace_level >= BT_TRACE_LEVEL_ERROR) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_ERROR, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define APPL_TRACE_WARNING0(m)                  {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, (m));}
-#define APPL_TRACE_WARNING1(m,p1)               {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1));}
-#define APPL_TRACE_WARNING2(m,p1,p2)            {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2));}
-#define APPL_TRACE_WARNING3(m,p1,p2,p3)         {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define APPL_TRACE_WARNING4(m,p1,p2,p3,p4)      {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define APPL_TRACE_WARNING5(m,p1,p2,p3,p4,p5)   {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define APPL_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (appl_trace_level >= BT_TRACE_LEVEL_WARNING) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_WARNING, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define APPL_TRACE_API0(m)                      {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, (m));}
-#define APPL_TRACE_API1(m,p1)                   {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1));}
-#define APPL_TRACE_API2(m,p1,p2)                {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2));}
-#define APPL_TRACE_API3(m,p1,p2,p3)             {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define APPL_TRACE_API4(m,p1,p2,p3,p4)          {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define APPL_TRACE_API5(m,p1,p2,p3,p4,p5)       {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define APPL_TRACE_API6(m,p1,p2,p3,p4,p5,p6)    {if (appl_trace_level >= BT_TRACE_LEVEL_API) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_API, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define APPL_TRACE_EVENT0(m)                    {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, (m));}
-#define APPL_TRACE_EVENT1(m,p1)                 {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1));}
-#define APPL_TRACE_EVENT2(m,p1,p2)              {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2));}
-#define APPL_TRACE_EVENT3(m,p1,p2,p3)           {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define APPL_TRACE_EVENT4(m,p1,p2,p3,p4)        {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define APPL_TRACE_EVENT5(m,p1,p2,p3,p4,p5)     {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define APPL_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)  {if (appl_trace_level >= BT_TRACE_LEVEL_EVENT) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_EVENT, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-
-#define APPL_TRACE_DEBUG0(m)                    {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_0(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, (m));}
-#define APPL_TRACE_DEBUG1(m,p1)                 {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_1(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1));}
-#define APPL_TRACE_DEBUG2(m,p1,p2)              {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_2(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2));}
-#define APPL_TRACE_DEBUG3(m,p1,p2,p3)           {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_3(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3));}
-#define APPL_TRACE_DEBUG4(m,p1,p2,p3,p4)        {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_4(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4));}
-#define APPL_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)     {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_5(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5));}
-#define APPL_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)  {if (appl_trace_level >= BT_TRACE_LEVEL_DEBUG) LogMsg_6(TRACE_CTRL_GENERAL | TRACE_LAYER_NONE | TRACE_ORG_APPL | TRACE_TYPE_DEBUG, \
-                                                        (m), (UINT32)(p1), (UINT32)(p2), (UINT32)(p3), (UINT32)(p4), (UINT32)(p5), (UINT32)(p6));}
-#else
-/* define traces for Application */
-
-#define APPL_TRACE_ERROR0(m)
-#define APPL_TRACE_ERROR1(m,p1)
-#define APPL_TRACE_ERROR2(m,p1,p2)
-#define APPL_TRACE_ERROR3(m,p1,p2,p3)
-#define APPL_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define APPL_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define APPL_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-#define APPL_TRACE_WARNING0(m)
-#define APPL_TRACE_WARNING1(m,p1)
-#define APPL_TRACE_WARNING2(m,p1,p2)
-#define APPL_TRACE_WARNING3(m,p1,p2,p3)
-#define APPL_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define APPL_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define APPL_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-
-#define APPL_TRACE_API0(m)
-#define APPL_TRACE_API1(m,p1)
-#define APPL_TRACE_API2(m,p1,p2)
-#define APPL_TRACE_API3(m,p1,p2,p3)
-#define APPL_TRACE_API4(m,p1,p2,p3,p4)
-#define APPL_TRACE_API5(m,p1,p2,p3,p4,p5)
-#define APPL_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
-
-#define APPL_TRACE_EVENT0(m)
-#define APPL_TRACE_EVENT1(m,p1)
-#define APPL_TRACE_EVENT2(m,p1,p2)
-#define APPL_TRACE_EVENT3(m,p1,p2,p3)
-#define APPL_TRACE_EVENT4(m,p1,p2,p3,p4)
-#define APPL_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
-#define APPL_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
-
-#define APPL_TRACE_DEBUG0(m)
-#define APPL_TRACE_DEBUG1(m,p1)
-#define APPL_TRACE_DEBUG2(m,p1,p2)
-#define APPL_TRACE_DEBUG3(m,p1,p2,p3)
-#define APPL_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define APPL_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define APPL_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-#endif
-
-#if ((MMI_INCLUDED == TRUE) && (!defined(HID_MSKB_INCLUDED) || (HID_MSKB_INCLUDED == FALSE)))
-/* UI for sample applications */
-#define SAP_TRACE_0(m)                            MMI_Echo(m)
-#define SAP_TRACE_1(m,p1)                         MMI_Echo(m,p1)
-#define SAP_TRACE_2(m,p1,p2)                      MMI_Echo(m,p1,p2)
-#define SAP_TRACE_3(m,p1,p2,p3)                   MMI_Echo(m,p1,p2,p3)
-#define SAP_TRACE_4(m,p1,p2,p3,p4)                MMI_Echo(m,p1,p2,p3,p4)
-#define SAP_TRACE_5(m,p1,p2,p3,p4,p5)             MMI_Echo(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_6(m,p1,p2,p3,p4,p5,p6)          MMI_Echo(m,p1,p2,p3,p4,p5,p6)
-#else
-#define SAP_TRACE_0(m)
-#define SAP_TRACE_1(m,p1)
-#define SAP_TRACE_2(m,p1,p2)
-#define SAP_TRACE_3(m,p1,p2,p3)
-#define SAP_TRACE_4(m,p1,p2,p3,p4)
-#define SAP_TRACE_5(m,p1,p2,p3,p4,p5)
-#define SAP_TRACE_6(m,p1,p2,p3,p4,p5,p6)
-
-#endif  /* End of MMI_INCLUDED */
-#if defined(DRV_DEBUG_MSG) && (DRV_DEBUG_MSG == TRUE)
-/* Driver Trace macros
-*/
-#define DRV_TRACE_WARNING0(m)                      APPL_TRACE_WARNING0(m)
-#define DRV_TRACE_WARNING1(m,p1)                   APPL_TRACE_WARNING1(m,p1)
-#define DRV_TRACE_WARNING2(m,p1,p2)                APPL_TRACE_WARNING2(m,p1,p2)
-#define DRV_TRACE_WARNING3(m,p1,p2,p3)             APPL_TRACE_WARNING3(m,p1,p2,p3)
-#define DRV_TRACE_WARNING4(m,p1,p2,p3,p4)          APPL_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define DRV_TRACE_WARNING5(m,p1,p2,p3,p4,p5)       APPL_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define DRV_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)    APPL_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-#else
-/* Driver Trace macros
-*/
-#define DRV_TRACE_WARNING0(m)
-#define DRV_TRACE_WARNING1(m,p1)
-#define DRV_TRACE_WARNING2(m,p1,p2)
-#define DRV_TRACE_WARNING3(m,p1,p2,p3)
-#define DRV_TRACE_WARNING4(m,p1,p2,p3,p4)
-#define DRV_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
-#define DRV_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
-#endif
-
-#define DRV_TRACE_ERROR0(m)                      APPL_TRACE_ERROR0(m)
-#define DRV_TRACE_ERROR1(m,p1)                   APPL_TRACE_ERROR1(m,p1)
-#define DRV_TRACE_ERROR2(m,p1,p2)                APPL_TRACE_ERROR2(m,p1,p2)
-#define DRV_TRACE_ERROR3(m,p1,p2,p3)             APPL_TRACE_ERROR3(m,p1,p2,p3)
-#define DRV_TRACE_ERROR4(m,p1,p2,p3,p4)          APPL_TRACE_ERROR4(m,p1,p2,p3,p4)
-#define DRV_TRACE_ERROR5(m,p1,p2,p3,p4,p5)       APPL_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
-#define DRV_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)    APPL_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
-
-/* Driver Trace macros
-*/
-#define DRV_TRACE_DEBUG0(m)                    APPL_TRACE_DEBUG0(m)
-#define DRV_TRACE_DEBUG1(m,p1)                 APPL_TRACE_DEBUG1(m,p1)
-#define DRV_TRACE_DEBUG2(m,p1,p2)              APPL_TRACE_DEBUG2(m,p1,p2)
-#define DRV_TRACE_DEBUG3(m,p1,p2,p3)           APPL_TRACE_DEBUG3(m,p1,p2,p3)
-#define DRV_TRACE_DEBUG4(m,p1,p2,p3,p4)        APPL_TRACE_DEBUG4(m,p1,p2,p3,p4)
-#define DRV_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)     APPL_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
-#define DRV_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)  APPL_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
-
-
-#endif /* BT_TRACE_H */
-
-
diff --git a/halimpl/bcm2079x/include/bt_types.h b/halimpl/bcm2079x/include/bt_types.h
deleted file mode 100644
index 2b0e809..0000000
--- a/halimpl/bcm2079x/include/bt_types.h
+++ /dev/null
@@ -1,702 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef BT_TYPES_H
-#define BT_TYPES_H
-
-#include "data_types.h"
-
-#ifdef _WIN32
-#ifdef BLUESTACK_TESTER
-    #include "bte_stack_entry.h"
-#endif
-#endif
-
-/* READ WELL !!
-**
-** This section defines global events. These are events that cross layers.
-** Any event that passes between layers MUST be one of these events. Tasks
-** can use their own events internally, but a FUNDAMENTAL design issue is
-** that global events MUST be one of these events defined below.
-**
-** The convention used is the the event name contains the layer that the
-** event is going to.
-*/
-#define BT_EVT_MASK                 0xFF00
-#define BT_SUB_EVT_MASK             0x00FF
-                                                /* To Bluetooth Upper Layers        */
-                                                /************************************/
-#define BT_EVT_TO_BTU_L2C_EVT       0x0900      /* L2CAP event */
-#define BT_EVT_TO_BTU_HCI_EVT       0x1000      /* HCI Event                        */
-#define BT_EVT_TO_BTU_HCI_BR_EDR_EVT (0x0000 | BT_EVT_TO_BTU_HCI_EVT)      /* event from BR/EDR controller */
-#define BT_EVT_TO_BTU_HCI_AMP1_EVT   (0x0001 | BT_EVT_TO_BTU_HCI_EVT)      /* event from local AMP 1 controller */
-#define BT_EVT_TO_BTU_HCI_AMP2_EVT   (0x0002 | BT_EVT_TO_BTU_HCI_EVT)      /* event from local AMP 2 controller */
-#define BT_EVT_TO_BTU_HCI_AMP3_EVT   (0x0003 | BT_EVT_TO_BTU_HCI_EVT)      /* event from local AMP 3 controller */
-
-#define BT_EVT_TO_BTU_HCI_ACL       0x1100      /* ACL Data from HCI                */
-#define BT_EVT_TO_BTU_HCI_SCO       0x1200      /* SCO Data from HCI                */
-#define BT_EVT_TO_BTU_HCIT_ERR      0x1300      /* HCI Transport Error              */
-
-#define BT_EVT_TO_BTU_SP_EVT        0x1400      /* Serial Port Event                */
-#define BT_EVT_TO_BTU_SP_DATA       0x1500      /* Serial Port Data                 */
-
-#define BT_EVT_TO_BTU_HCI_CMD       0x1600      /* HCI command from upper layer     */
-
-
-#define BT_EVT_TO_BTU_L2C_SEG_XMIT  0x1900      /* L2CAP segment(s) transmitted     */
-
-#define BT_EVT_PROXY_INCOMING_MSG   0x1A00      /* BlueStackTester event: incoming message from target */
-
-#define BT_EVT_BTSIM                0x1B00      /* Insight BTSIM event */
-#define BT_EVT_BTISE                0x1C00      /* Insight Script Engine event */
-
-                                                /* To LM                            */
-                                                /************************************/
-#define BT_EVT_TO_LM_HCI_CMD        0x2000      /* HCI Command                      */
-#define BT_EVT_TO_LM_HCI_ACL        0x2100      /* HCI ACL Data                     */
-#define BT_EVT_TO_LM_HCI_SCO        0x2200      /* HCI SCO Data                     */
-#define BT_EVT_TO_LM_HCIT_ERR       0x2300      /* HCI Transport Error              */
-#define BT_EVT_TO_LM_LC_EVT         0x2400      /* LC event                         */
-#define BT_EVT_TO_LM_LC_LMP         0x2500      /* LC Received LMP command frame    */
-#define BT_EVT_TO_LM_LC_ACL         0x2600      /* LC Received ACL data             */
-#define BT_EVT_TO_LM_LC_SCO         0x2700      /* LC Received SCO data  (not used) */
-#define BT_EVT_TO_LM_LC_ACL_TX      0x2800      /* LMP data transmit complete       */
-#define BT_EVT_TO_LM_LC_LMPC_TX     0x2900      /* LMP Command transmit complete    */
-#define BT_EVT_TO_LM_LOCAL_ACL_LB   0x2a00      /* Data to be locally loopbacked    */
-#define BT_EVT_TO_LM_HCI_ACL_ACK    0x2b00      /* HCI ACL Data ack      (not used) */
-#define BT_EVT_TO_LM_DIAG           0x2c00      /* LM Diagnostics commands          */
-
-
-#define BT_EVT_TO_BTM_CMDS          0x2f00
-#define BT_EVT_TO_BTM_PM_MDCHG_EVT (0x0001 | BT_EVT_TO_BTM_CMDS)
-
-#define BT_EVT_TO_TCS_CMDS          0x3000
-
-#define BT_EVT_TO_OBX_CL_MSG        0x3100
-#define BT_EVT_TO_OBX_SR_MSG        0x3200
-
-#define BT_EVT_TO_CTP_CMDS          0x3300
-
-/* Obex Over L2CAP */
-#define BT_EVT_TO_OBX_CL_L2C_MSG    0x3400
-#define BT_EVT_TO_OBX_SR_L2C_MSG    0x3500
-
-/* ftp events */
-#define BT_EVT_TO_FTP_SRVR_CMDS     0x3600
-#define BT_EVT_TO_FTP_CLNT_CMDS     0x3700
-
-#define BT_EVT_TO_BTU_SAP           0x3800       /* SIM Access Profile events */
-
-/* opp events */
-#define BT_EVT_TO_OPP_SRVR_CMDS     0x3900
-#define BT_EVT_TO_OPP_CLNT_CMDS     0x3a00
-
-/* gap events */
-#define BT_EVT_TO_GAP_MSG           0x3b00
-
-/* start timer */
-#define BT_EVT_TO_START_TIMER       0x3c00
-
-/* stop timer */
-#define BT_EVT_TO_STOP_TIMER        0x3d00
-
-/* start quick timer */
-#define BT_EVT_TO_START_QUICK_TIMER 0x3e00
-
-
-/* for NFC                          */
-                                                /************************************/
-#define BT_EVT_TO_NFC_NCI           0x4000      /* NCI Command, Notification or Data*/
-#define BT_EVT_TO_NFC_NCI_VS        0x4200      /* Vendor specific message */
-#define BT_EVT_TO_NFC_MSGS          0x4300      /* messages between NFC and NCI task */
-
-#define BT_EVT_TO_NFCCSIM_NCI       0x4a00      /* events to NFCC simulation (NCI packets) */
-
-/* HCISU Events */
-
-#define BT_EVT_HCISU                0x5000
-
-#define BT_EVT_TO_HCISU_LP_APP_SLEEPING_EVT     (0x0005 | BT_EVT_HCISU)
-#define BT_EVT_TO_HCISU_LP_ALLOW_BT_SLEEP_EVT   (0x0006 | BT_EVT_HCISU)
-#define BT_EVT_TO_HCISU_LP_WAKEUP_HOST_EVT      (0x0007 | BT_EVT_HCISU)
-#define BT_EVT_TO_HCISU_LP_RCV_H4IBSS_EVT       (0x0008 | BT_EVT_HCISU)
-#define BT_EVT_TO_HCISU_H5_RESET_EVT            (0x0009 | BT_EVT_HCISU)
-#define BT_EVT_HCISU_START_QUICK_TIMER          (0x000a | BT_EVT_HCISU)
-
-#define BT_EVT_DATA_TO_AMP_1        0x5100
-#define BT_EVT_DATA_TO_AMP_15       0x5f00
-
-/* HSP Events */
-
-#define BT_EVT_BTU_HSP2             0x6000
-
-#define BT_EVT_TO_BTU_HSP2_EVT     (0x0001 | BT_EVT_BTU_HSP2)
-
-/* BPP Events */
-#define BT_EVT_TO_BPP_PR_CMDS       0x6100      /* Printer Events */
-#define BT_EVT_TO_BPP_SND_CMDS      0x6200      /* BPP Sender Events */
-
-/* BIP Events */
-#define BT_EVT_TO_BIP_CMDS          0x6300
-
-/* HCRP Events */
-
-#define BT_EVT_BTU_HCRP             0x7000
-
-#define BT_EVT_TO_BTU_HCRP_EVT     (0x0001 | BT_EVT_BTU_HCRP)
-#define BT_EVT_TO_BTU_HCRPM_EVT    (0x0002 | BT_EVT_BTU_HCRP)
-
-
-#define BT_EVT_BTU_HFP              0x8000
-#define BT_EVT_TO_BTU_HFP_EVT      (0x0001 | BT_EVT_BTU_HFP)
-
-#define BT_EVT_BTU_IPC_EVT          0x9000
-#define BT_EVT_BTU_IPC_LOGMSG_EVT  (0x0000 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_ACL_EVT     (0x0001 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_BTU_EVT     (0x0002 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_L2C_EVT     (0x0003 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_L2C_MSG_EVT (0x0004 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_BTM_EVT     (0x0005 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_AVDT_EVT    (0x0006 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_SLIP_EVT    (0x0007 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_MGMT_EVT    (0x0008 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_BTTRC_EVT   (0x0009 | BT_EVT_BTU_IPC_EVT)
-#define BT_EVT_BTU_IPC_BURST_EVT   (0x000A | BT_EVT_BTU_IPC_EVT)
-
-/* Define the header of each buffer used in the Bluetooth stack.
-*/
-typedef struct
-{
-    UINT16          event;
-    UINT16          len;
-    UINT16          offset;
-    UINT16          layer_specific;
-} BT_HDR;
-
-#define BT_HDR_SIZE (sizeof (BT_HDR))
-
-#define BT_PSM_SDP                      0x0001
-#define BT_PSM_RFCOMM                   0x0003
-#define BT_PSM_TCS                      0x0005
-#define BT_PSM_CTP                      0x0007
-#define BT_PSM_BNEP                     0x000F
-#define BT_PSM_HIDC                     0x0011
-#define BT_PSM_HIDI                     0x0013
-#define BT_PSM_UPNP                     0x0015
-#define BT_PSM_AVCTP                    0x0017
-#define BT_PSM_AVDTP                    0x0019
-#define BT_PSM_AVCTP_13                 0x001B /* Advanced Control - Browsing */
-#define BT_PSM_UDI_CP                   0x001D /* Unrestricted Digital Information Profile C-Plane  */
-#define BT_PSM_ATT                      0x001F /* Attribute Protocol  */
-
-
-/* These macros extract the HCI opcodes from a buffer
-*/
-#define HCI_GET_CMD_HDR_OPCODE(p)    (UINT16)((*((UINT8 *)((p) + 1) + p->offset) + \
-                                              (*((UINT8 *)((p) + 1) + p->offset + 1) << 8)))
-#define HCI_GET_CMD_HDR_PARAM_LEN(p) (UINT8)  (*((UINT8 *)((p) + 1) + p->offset + 2))
-
-#define HCI_GET_EVT_HDR_OPCODE(p)    (UINT8)(*((UINT8 *)((p) + 1) + p->offset))
-#define HCI_GET_EVT_HDR_PARAM_LEN(p) (UINT8)  (*((UINT8 *)((p) + 1) + p->offset + 1))
-
-
-/********************************************************************************
-** Macros to get and put bytes to and from a stream (Little Endian format).
-*/
-#define UINT32_TO_STREAM(p, u32) {*(p)++ = (UINT8)(u32); *(p)++ = (UINT8)((u32) >> 8); *(p)++ = (UINT8)((u32) >> 16); *(p)++ = (UINT8)((u32) >> 24);}
-#define UINT24_TO_STREAM(p, u24) {*(p)++ = (UINT8)(u24); *(p)++ = (UINT8)((u24) >> 8); *(p)++ = (UINT8)((u24) >> 16);}
-#define UINT16_TO_STREAM(p, u16) {*(p)++ = (UINT8)(u16); *(p)++ = (UINT8)((u16) >> 8);}
-#define UINT8_TO_STREAM(p, u8)   {*(p)++ = (UINT8)(u8);}
-#define INT8_TO_STREAM(p, u8)    {*(p)++ = (INT8)(u8);}
-#define ARRAY32_TO_STREAM(p, a)  {register int ijk; for (ijk = 0; ijk < 32;           ijk++) *(p)++ = (UINT8) a[31 - ijk];}
-#define ARRAY16_TO_STREAM(p, a)  {register int ijk; for (ijk = 0; ijk < 16;           ijk++) *(p)++ = (UINT8) a[15 - ijk];}
-#define ARRAY8_TO_STREAM(p, a)   {register int ijk; for (ijk = 0; ijk < 8;            ijk++) *(p)++ = (UINT8) a[7 - ijk];}
-#define BDADDR_TO_STREAM(p, a)   {register int ijk; for (ijk = 0; ijk < BD_ADDR_LEN;  ijk++) *(p)++ = (UINT8) a[BD_ADDR_LEN - 1 - ijk];}
-#define LAP_TO_STREAM(p, a)      {register int ijk; for (ijk = 0; ijk < LAP_LEN;      ijk++) *(p)++ = (UINT8) a[LAP_LEN - 1 - ijk];}
-#define DEVCLASS_TO_STREAM(p, a) {register int ijk; for (ijk = 0; ijk < DEV_CLASS_LEN;ijk++) *(p)++ = (UINT8) a[DEV_CLASS_LEN - 1 - ijk];}
-#define ARRAY_TO_STREAM(p, a, len) {register int ijk; for (ijk = 0; ijk < len;        ijk++) *(p)++ = (UINT8) a[ijk];}
-#define REVERSE_ARRAY_TO_STREAM(p, a, len)  {register int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[len - 1 - ijk];}
-
-#define STREAM_TO_UINT8(u8, p)   {u8 = (UINT8)(*(p)); (p) += 1;}
-#define STREAM_TO_UINT16(u16, p) {u16 = ((UINT16)(*(p)) + (((UINT16)(*((p) + 1))) << 8)); (p) += 2;}
-#define STREAM_TO_UINT24(u32, p) {u32 = (((UINT32)(*(p))) + ((((UINT32)(*((p) + 1)))) << 8) + ((((UINT32)(*((p) + 2)))) << 16) ); (p) += 3;}
-#define STREAM_TO_UINT32(u32, p) {u32 = (((UINT32)(*(p))) + ((((UINT32)(*((p) + 1)))) << 8) + ((((UINT32)(*((p) + 2)))) << 16) + ((((UINT32)(*((p) + 3)))) << 24)); (p) += 4;}
-#define STREAM_TO_BDADDR(a, p)   {register int ijk; register UINT8 *pbda = (UINT8 *)a + BD_ADDR_LEN - 1; for (ijk = 0; ijk < BD_ADDR_LEN; ijk++) *pbda-- = *p++;}
-#define STREAM_TO_ARRAY32(a, p)  {register int ijk; register UINT8 *_pa = (UINT8 *)a + 31; for (ijk = 0; ijk < 32; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_ARRAY16(a, p)  {register int ijk; register UINT8 *_pa = (UINT8 *)a + 15; for (ijk = 0; ijk < 16; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_ARRAY8(a, p)   {register int ijk; register UINT8 *_pa = (UINT8 *)a + 7; for (ijk = 0; ijk < 8; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_DEVCLASS(a, p) {register int ijk; register UINT8 *_pa = (UINT8 *)a + DEV_CLASS_LEN - 1; for (ijk = 0; ijk < DEV_CLASS_LEN; ijk++) *_pa-- = *p++;}
-#define STREAM_TO_LAP(a, p)      {register int ijk; register UINT8 *plap = (UINT8 *)a + LAP_LEN - 1; for (ijk = 0; ijk < LAP_LEN; ijk++) *plap-- = *p++;}
-#define STREAM_TO_ARRAY(a, p, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) ((UINT8 *) a)[ijk] = *p++;}
-#define REVERSE_STREAM_TO_ARRAY(a, p, len) {register int ijk; register UINT8 *_pa = (UINT8 *)a + len - 1; for (ijk = 0; ijk < len; ijk++) *_pa-- = *p++;}
-
-/********************************************************************************
-** Macros to get and put bytes to and from a field (Little Endian format).
-** These are the same as to stream, except the pointer is not incremented.
-*/
-#define UINT32_TO_FIELD(p, u32) {*(UINT8 *)(p) = (UINT8)(u32); *((UINT8 *)(p)+1) = (UINT8)((u32) >> 8); *((UINT8 *)(p)+2) = (UINT8)((u32) >> 16); *((UINT8 *)(p)+3) = (UINT8)((u32) >> 24);}
-#define UINT24_TO_FIELD(p, u24) {*(UINT8 *)(p) = (UINT8)(u24); *((UINT8 *)(p)+1) = (UINT8)((u24) >> 8); *((UINT8 *)(p)+2) = (UINT8)((u24) >> 16);}
-#define UINT16_TO_FIELD(p, u16) {*(UINT8 *)(p) = (UINT8)(u16); *((UINT8 *)(p)+1) = (UINT8)((u16) >> 8);}
-#define UINT8_TO_FIELD(p, u8)   {*(UINT8 *)(p) = (UINT8)(u8);}
-
-
-/********************************************************************************
-** Macros to get and put bytes to and from a stream (Big Endian format)
-*/
-#define UINT32_TO_BE_STREAM(p, u32) {*(p)++ = (UINT8)((u32) >> 24);  *(p)++ = (UINT8)((u32) >> 16); *(p)++ = (UINT8)((u32) >> 8); *(p)++ = (UINT8)(u32); }
-#define UINT24_TO_BE_STREAM(p, u24) {*(p)++ = (UINT8)((u24) >> 16); *(p)++ = (UINT8)((u24) >> 8); *(p)++ = (UINT8)(u24);}
-#define UINT16_TO_BE_STREAM(p, u16) {*(p)++ = (UINT8)((u16) >> 8); *(p)++ = (UINT8)(u16);}
-#define UINT8_TO_BE_STREAM(p, u8)   {*(p)++ = (UINT8)(u8);}
-#define ARRAY_TO_BE_STREAM(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) *(p)++ = (UINT8) a[ijk];}
-
-#define BE_STREAM_TO_UINT8(u8, p)   {u8 = (UINT8)(*(p)); (p) += 1;}
-#define BE_STREAM_TO_UINT16(u16, p) {u16 = (UINT16)(((UINT16)(*(p)) << 8) + (UINT16)(*((p) + 1))); (p) += 2;}
-#define BE_STREAM_TO_UINT24(u32, p) {u32 = (((UINT32)(*((p) + 2))) + ((UINT32)(*((p) + 1)) << 8) + ((UINT32)(*(p)) << 16)); (p) += 3;}
-#define BE_STREAM_TO_UINT32(u32, p) {u32 = ((UINT32)(*((p) + 3)) + ((UINT32)(*((p) + 2)) << 8) + ((UINT32)(*((p) + 1)) << 16) + ((UINT32)(*(p)) << 24)); (p) += 4;}
-#define BE_STREAM_TO_ARRAY(p, a, len) {register int ijk; for (ijk = 0; ijk < len; ijk++) ((UINT8 *) a)[ijk] = *p++;}
-
-
-/********************************************************************************
-** Macros to get and put bytes to and from a field (Big Endian format).
-** These are the same as to stream, except the pointer is not incremented.
-*/
-#define UINT32_TO_BE_FIELD(p, u32) {*(UINT8 *)(p) = (UINT8)((u32) >> 24);  *((UINT8 *)(p)+1) = (UINT8)((u32) >> 16); *((UINT8 *)(p)+2) = (UINT8)((u32) >> 8); *((UINT8 *)(p)+3) = (UINT8)(u32); }
-#define UINT24_TO_BE_FIELD(p, u24) {*(UINT8 *)(p) = (UINT8)((u24) >> 16); *((UINT8 *)(p)+1) = (UINT8)((u24) >> 8); *((UINT8 *)(p)+2) = (UINT8)(u24);}
-#define UINT16_TO_BE_FIELD(p, u16) {*(UINT8 *)(p) = (UINT8)((u16) >> 8); *((UINT8 *)(p)+1) = (UINT8)(u16);}
-#define UINT8_TO_BE_FIELD(p, u8)   {*(UINT8 *)(p) = (UINT8)(u8);}
-
-
-/* Common Bluetooth field definitions */
-#define BD_ADDR_LEN     6                   /* Device address length */
-typedef UINT8 BD_ADDR[BD_ADDR_LEN];         /* Device address */
-typedef UINT8 *BD_ADDR_PTR;                 /* Pointer to Device Address */
-
-#define AMP_KEY_TYPE_GAMP       0
-#define AMP_KEY_TYPE_WIFI       1
-#define AMP_KEY_TYPE_UWB        2
-typedef UINT8 tAMP_KEY_TYPE;
-
-#define BT_OCTET8_LEN    8
-typedef UINT8 BT_OCTET8[BT_OCTET8_LEN];   /* octet array: size 16 */
-
-#define LINK_KEY_LEN    16
-typedef UINT8 LINK_KEY[LINK_KEY_LEN];       /* Link Key */
-
-#define AMP_LINK_KEY_LEN        32
-typedef UINT8 AMP_LINK_KEY[AMP_LINK_KEY_LEN];   /* Dedicated AMP and GAMP Link Keys */
-
-#define BT_OCTET16_LEN    16
-typedef UINT8 BT_OCTET16[BT_OCTET16_LEN];   /* octet array: size 16 */
-
-#define PIN_CODE_LEN    16
-typedef UINT8 PIN_CODE[PIN_CODE_LEN];       /* Pin Code (upto 128 bits) MSB is 0 */
-typedef UINT8 *PIN_CODE_PTR;                /* Pointer to Pin Code */
-
-#define DEV_CLASS_LEN   3
-typedef UINT8 DEV_CLASS[DEV_CLASS_LEN];     /* Device class */
-typedef UINT8 *DEV_CLASS_PTR;               /* Pointer to Device class */
-
-#define EXT_INQ_RESP_LEN   3
-typedef UINT8 EXT_INQ_RESP[EXT_INQ_RESP_LEN];/* Extended Inquiry Response */
-typedef UINT8 *EXT_INQ_RESP_PTR;             /* Pointer to Extended Inquiry Response */
-
-#define BD_NAME_LEN     248
-typedef UINT8 BD_NAME[BD_NAME_LEN + 1];         /* Device name */
-typedef UINT8 *BD_NAME_PTR;                 /* Pointer to Device name */
-
-#define BD_FEATURES_LEN 8
-typedef UINT8 BD_FEATURES[BD_FEATURES_LEN]; /* LMP features supported by device */
-
-#define BT_EVENT_MASK_LEN  8
-typedef UINT8 BT_EVENT_MASK[BT_EVENT_MASK_LEN];   /* Event Mask */
-
-#define LAP_LEN         3
-typedef UINT8 LAP[LAP_LEN];                 /* IAC as passed to Inquiry (LAP) */
-typedef UINT8 INQ_LAP[LAP_LEN];             /* IAC as passed to Inquiry (LAP) */
-
-#define RAND_NUM_LEN    16
-typedef UINT8 RAND_NUM[RAND_NUM_LEN];
-
-#define ACO_LEN         12
-typedef UINT8 ACO[ACO_LEN];                 /* Authenticated ciphering offset */
-
-#define COF_LEN         12
-typedef UINT8 COF[COF_LEN];                 /* ciphering offset number */
-
-typedef struct {
-    UINT8               qos_flags;          /* TBD */
-    UINT8               service_type;       /* see below */
-    UINT32              token_rate;         /* bytes/second */
-    UINT32              token_bucket_size;  /* bytes */
-    UINT32              peak_bandwidth;     /* bytes/second */
-    UINT32              latency;            /* microseconds */
-    UINT32              delay_variation;    /* microseconds */
-} FLOW_SPEC;
-
-/* Values for service_type */
-#define NO_TRAFFIC      0
-#define BEST_EFFORT     1
-#define GUARANTEED      2
-
-/* Service class of the CoD */
-#define SERV_CLASS_NETWORKING               (1 << 1)
-#define SERV_CLASS_RENDERING                (1 << 2)
-#define SERV_CLASS_CAPTURING                (1 << 3)
-#define SERV_CLASS_OBJECT_TRANSFER          (1 << 4)
-#define SERV_CLASS_OBJECT_AUDIO             (1 << 5)
-#define SERV_CLASS_OBJECT_TELEPHONY         (1 << 6)
-#define SERV_CLASS_OBJECT_INFORMATION       (1 << 7)
-
-/* Second byte */
-#define SERV_CLASS_LIMITED_DISC_MODE        (0x20)
-
-/* Field size definitions. Note that byte lengths are rounded up. */
-#define ACCESS_CODE_BIT_LEN             72
-#define ACCESS_CODE_BYTE_LEN            9
-#define SHORTENED_ACCESS_CODE_BIT_LEN   68
-
-typedef UINT8 ACCESS_CODE[ACCESS_CODE_BYTE_LEN];
-
-#define SYNTH_TX                1           /* want synth code to TRANSMIT at this freq */
-#define SYNTH_RX                2           /* want synth code to RECEIVE at this freq */
-
-#define SYNC_REPS 1             /* repeats of sync word transmitted to start of burst */
-
-/* Bluetooth CLK27 */
-#define BT_CLK27            (2 << 26)
-
-/* Bluetooth CLK12 is 1.28 sec */
-#define BT_CLK12_TO_MS(x)    ((x) * 1280)
-#define BT_MS_TO_CLK12(x)    ((x) / 1280)
-#define BT_CLK12_TO_SLOTS(x) ((x) << 11)
-
-/* Bluetooth CLK is 0.625 msec */
-#define BT_CLK_TO_MS(x)      (((x) * 5 + 3) / 8)
-#define BT_MS_TO_CLK(x)      (((x) * 8 + 2) / 5)
-
-#define BT_CLK_TO_MICROSECS(x)  (((x) * 5000 + 3) / 8)
-#define BT_MICROSECS_TO_CLK(x)  (((x) * 8 + 2499) / 5000)
-
-/* Maximum UUID size - 16 bytes, and structure to hold any type of UUID. */
-#define MAX_UUID_SIZE              16
-typedef struct
-{
-#define LEN_UUID_16     2
-#define LEN_UUID_32     4
-#define LEN_UUID_128    16
-
-    UINT16          len;
-
-    union
-    {
-        UINT16      uuid16;
-        UINT32      uuid32;
-        UINT8       uuid128[MAX_UUID_SIZE];
-    } uu;
-
-} tBT_UUID;
-
-#define BT_EIR_FLAGS_TYPE                   0x01
-#define BT_EIR_MORE_16BITS_UUID_TYPE        0x02
-#define BT_EIR_COMPLETE_16BITS_UUID_TYPE    0x03
-#define BT_EIR_MORE_32BITS_UUID_TYPE        0x04
-#define BT_EIR_COMPLETE_32BITS_UUID_TYPE    0x05
-#define BT_EIR_MORE_128BITS_UUID_TYPE       0x06
-#define BT_EIR_COMPLETE_128BITS_UUID_TYPE   0x07
-#define BT_EIR_SHORTENED_LOCAL_NAME_TYPE    0x08
-#define BT_EIR_COMPLETE_LOCAL_NAME_TYPE     0x09
-#define BT_EIR_TX_POWER_LEVEL_TYPE          0x0A
-#define BT_EIR_OOB_BD_ADDR_TYPE             0x0C
-#define BT_EIR_OOB_COD_TYPE                 0x0D
-#define BT_EIR_OOB_SSP_HASH_C_TYPE          0x0E
-#define BT_EIR_OOB_SSP_RAND_R_TYPE          0x0F
-#define BT_EIR_MANUFACTURER_SPECIFIC_TYPE   0xFF
-
-#define BT_OOB_COD_SIZE            3
-#define BT_OOB_HASH_C_SIZE         16
-#define BT_OOB_RAND_R_SIZE         16
-
-/* Broadcom proprietary UUIDs and reserved PSMs
-**
-** The lowest 4 bytes byte of the UUID or GUID depends on the feature. Typically,
-** the value of those bytes will be the PSM or SCN, but it is up to the features.
-*/
-#define BRCM_PROPRIETARY_UUID_BASE  0xDA, 0x23, 0x41, 0x02, 0xA3, 0xBB, 0xC1, 0x71, 0xBA, 0x09, 0x6f, 0x21
-#define BRCM_PROPRIETARY_GUID_BASE  0xda23, 0x4102, 0xa3, 0xbb, 0xc1, 0x71, 0xba, 0x09, 0x6f, 0x21
-
-/* We will not allocate a PSM in the reserved range to 3rd party apps
-*/
-#define BRCM_RESERVED_PSM_START	    0x5AE1
-#define BRCM_RESERVED_PSM_END	    0x5AFF
-
-#define BRCM_UTILITY_SERVICE_PSM    0x5AE1
-#define BRCM_MATCHER_PSM            0x5AE3
-
-/* Connection statistics
-*/
-
-/* Structure to hold connection stats */
-#ifndef BT_CONN_STATS_DEFINED
-#define BT_CONN_STATS_DEFINED
-
-/* These bits are used in the bIsConnected field */
-#define BT_CONNECTED_USING_BREDR   1
-#define BT_CONNECTED_USING_AMP     2
-
-typedef struct
-{
-    UINT32   is_connected;
-    INT32    rssi;
-    UINT32   bytes_sent;
-    UINT32   bytes_rcvd;
-    UINT32   duration;
-} tBT_CONN_STATS;
-
-#endif
-
-/* AMP transport selection criteria definitions.
-** NOTE: if underlying L2CAP connection uses basic mode than it can use only BR/EDR.
-**       For such L2CAP connections AMP connection the criteria provided by application
-**       is reset by AMP manager to AMP_USE_AMP_NEVER.
-*/
-#define AMP_USE_AMP_NEVER                      0   /* Connection only via BR/EDR controller, no AMP allowed        */
-#define AMP_USE_AMP_IF_PEER_TRIES_IT           1   /* Allow AMP to be used if the peer tries to use it             */
-#define AMP_USE_AMP_IF_PHY_CONN_EXISTS         2   /* Use AMP if there is already a physical connection (default)  */
-#define AMP_USE_AMP_IF_LC_POWER_ON             3   /* Only try to use AMP if the Local Controller is powered on    */
-#define AMP_USE_AMP_IF_LC_AND_PEER_POWER_ON    4   /* Only try to use AMP if both LC and peer are powered on       */
-#define AMP_USE_AMP_IF_POSSIBLE                5   /* Try to use AMP if at all possible                            */
-#define AMP_USE_AMP_ONLY                       6   /* Only use AMP, never use BR/EDR                               */
-#define AMP_USE_AMP_MAX_DEF            AMP_USE_AMP_ONLY /* Maximum enum defined for AMP Criteria                        */
-
-#define	AMP_AUTOSWITCH_ALLOWED 		           0x80000000  /* flag to indicate that this connection is auto-switch ready */
-#define AMP_USE_CURRENT_CRITERIA               0xFFFFFFFF  /* Flag if previous criteria was to be still used        */
-
-typedef UINT32 tAMP_CRITERIA;
-
-
-/*****************************************************************************
-**                          Low Energy definitions
-**
-** Address types
-*/
-#define BLE_ADDR_PUBLIC         0x00
-#define BLE_ADDR_RANDOM         0x01
-#define BLE_ADDR_TYPE_MASK      (BLE_ADDR_RANDOM | BLE_ADDR_PUBLIC)
-typedef UINT8 tBLE_ADDR_TYPE;
-
-#define BLE_ADDR_IS_STATIC(x)   ((x[0] & 0xC0) == 0xC0)
-
-typedef struct
-{
-    tBLE_ADDR_TYPE      type;
-    BD_ADDR             bda;
-} tBLE_BD_ADDR;
-
-/* Device Types
-*/
-#define BT_DEVICE_TYPE_BREDR   0x01
-#define BT_DEVICE_TYPE_BLE     0x02
-#define BT_DEVICE_TYPE_DUMO    0x03
-typedef UINT8 tBT_DEVICE_TYPE;
-/*****************************************************************************/
-
-
-/* Define trace levels */
-#define BT_TRACE_LEVEL_NONE    0          /* No trace messages to be generated    */
-#define BT_TRACE_LEVEL_ERROR   1          /* Error condition trace messages       */
-#define BT_TRACE_LEVEL_WARNING 2          /* Warning condition trace messages     */
-#define BT_TRACE_LEVEL_API     3          /* API traces                           */
-#define BT_TRACE_LEVEL_EVENT   4          /* Debug messages for events            */
-#define BT_TRACE_LEVEL_DEBUG   5          /* Full debug messages                  */
-
-#define MAX_TRACE_LEVEL        5
-
-
-/* Define New Trace Type Definition */
-/* TRACE_CTRL_TYPE                  0x^^000000*/
-#define TRACE_CTRL_MASK             0xff000000
-#define TRACE_GET_CTRL(x)           ((((UINT32)(x)) & TRACE_CTRL_MASK) >> 24)
-
-#define TRACE_CTRL_GENERAL          0x00000000
-#define TRACE_CTRL_STR_RESOURCE     0x01000000
-#define TRACE_CTRL_SEQ_FLOW         0x02000000
-#define TRACE_CTRL_MAX_NUM          3
-
-/* LAYER SPECIFIC                   0x00^^0000*/
-#define TRACE_LAYER_MASK            0x00ff0000
-#define TRACE_GET_LAYER(x)          ((((UINT32)(x)) & TRACE_LAYER_MASK) >> 16)
-
-#define TRACE_LAYER_NONE            0x00000000
-#define TRACE_LAYER_USB             0x00010000
-#define TRACE_LAYER_SERIAL          0x00020000
-#define TRACE_LAYER_SOCKET          0x00030000
-#define TRACE_LAYER_RS232           0x00040000
-#define TRACE_LAYER_TRANS_MAX_NUM   5
-#define TRACE_LAYER_TRANS_ALL       0x007f0000
-#define TRACE_LAYER_LC              0x00050000
-#define TRACE_LAYER_LM              0x00060000
-#define TRACE_LAYER_HCI             0x00070000
-#define TRACE_LAYER_L2CAP           0x00080000
-#define TRACE_LAYER_RFCOMM          0x00090000
-#define TRACE_LAYER_SDP             0x000a0000
-#define TRACE_LAYER_TCS             0x000b0000
-#define TRACE_LAYER_OBEX            0x000c0000
-#define TRACE_LAYER_BTM             0x000d0000
-#define TRACE_LAYER_GAP             0x000e0000
-#define TRACE_LAYER_DUN             0x000f0000
-#define TRACE_LAYER_GOEP            0x00100000
-#define TRACE_LAYER_ICP             0x00110000
-#define TRACE_LAYER_HSP2            0x00120000
-#define TRACE_LAYER_SPP             0x00130000
-#define TRACE_LAYER_CTP             0x00140000
-#define TRACE_LAYER_BPP             0x00150000
-#define TRACE_LAYER_HCRP            0x00160000
-#define TRACE_LAYER_FTP             0x00170000
-#define TRACE_LAYER_OPP             0x00180000
-#define TRACE_LAYER_BTU             0x00190000
-#define TRACE_LAYER_GKI             0x001a0000
-#define TRACE_LAYER_BNEP            0x001b0000
-#define TRACE_LAYER_PAN             0x001c0000
-#define TRACE_LAYER_HFP             0x001d0000
-#define TRACE_LAYER_HID             0x001e0000
-#define TRACE_LAYER_BIP             0x001f0000
-#define TRACE_LAYER_AVP             0x00200000
-#define TRACE_LAYER_A2D             0x00210000
-#define TRACE_LAYER_SAP             0x00220000
-#define TRACE_LAYER_AMP             0x00230000
-#define TRACE_LAYER_MCA             0x00240000
-#define TRACE_LAYER_ATT             0x00250000
-#define TRACE_LAYER_SMP             0x00260000
-#define TRACE_LAYER_NFC             0x00270000
-#define TRACE_LAYER_NCI             0x00280000
-#define TRACE_LAYER_LLCP            0x00290000
-#define TRACE_LAYER_NDEF            0x002a0000
-#define TRACE_LAYER_RW              0x002b0000
-#define TRACE_LAYER_CE              0x002c0000
-#define TRACE_LAYER_P2P             0x002d0000
-#define TRACE_LAYER_SNEP            0x002e0000
-#define TRACE_LAYER_CHO             0x002f0000
-#define TRACE_LAYER_NFA             0x00300000
-
-#define TRACE_LAYER_MAX_NUM         0x0031
-
-
-/* TRACE_ORIGINATOR                 0x0000^^00*/
-#define TRACE_ORG_MASK              0x0000ff00
-#define TRACE_GET_ORG(x)            ((((UINT32)(x)) & TRACE_ORG_MASK) >> 8)
-
-#define TRACE_ORG_STACK             0x00000000
-#define TRACE_ORG_HCI_TRANS         0x00000100
-#define TRACE_ORG_PROTO_DISP        0x00000200
-#define TRACE_ORG_RPC               0x00000300
-#define TRACE_ORG_GKI               0x00000400
-#define TRACE_ORG_APPL              0x00000500
-#define TRACE_ORG_SCR_WRAPPER       0x00000600
-#define TRACE_ORG_SCR_ENGINE        0x00000700
-#define TRACE_ORG_USER_SCR          0x00000800
-#define TRACE_ORG_TESTER            0x00000900
-#define TRACE_ORG_MAX_NUM           10          /* 32-bit mask; must be < 32 */
-#define TRACE_LITE_ORG_MAX_NUM		6
-#define TRACE_ORG_ALL               0x03ff
-#define TRACE_ORG_RPC_TRANS         0x04
-
-#define TRACE_ORG_REG               0x00000909
-#define TRACE_ORG_REG_SUCCESS       0x0000090a
-
-/* TRACE_TYPE                       0x000000^^*/
-#define TRACE_TYPE_MASK             0x000000ff
-#define TRACE_GET_TYPE(x)           (((UINT32)(x)) & TRACE_TYPE_MASK)
-
-#define TRACE_TYPE_ERROR            0x00000000
-#define TRACE_TYPE_WARNING          0x00000001
-#define TRACE_TYPE_API              0x00000002
-#define TRACE_TYPE_EVENT            0x00000003
-#define TRACE_TYPE_DEBUG            0x00000004
-#define TRACE_TYPE_STACK_ONLY_MAX   TRACE_TYPE_DEBUG
-#define TRACE_TYPE_TX               0x00000005
-#define TRACE_TYPE_RX               0x00000006
-#define TRACE_TYPE_DEBUG_ASSERT     0x00000007
-#define TRACE_TYPE_GENERIC          0x00000008
-#define TRACE_TYPE_REG              0x00000009
-#define TRACE_TYPE_REG_SUCCESS      0x0000000a
-#define TRACE_TYPE_CMD_TX           0x0000000b
-#define TRACE_TYPE_EVT_TX           0x0000000c
-#define TRACE_TYPE_ACL_TX           0x0000000d
-#define TRACE_TYPE_CMD_RX           0x0000000e
-#define TRACE_TYPE_EVT_RX           0x0000000f
-#define TRACE_TYPE_ACL_RX           0x00000010
-#define TRACE_TYPE_TARGET_TRACE     0x00000011
-#define TRACE_TYPE_SCO_TX           0x00000012
-#define TRACE_TYPE_SCO_RX           0x00000013
-
-
-#define TRACE_TYPE_MAX_NUM          20
-#define TRACE_TYPE_ALL              0xffff
-
-/* Define color for script type */
-#define SCR_COLOR_DEFAULT       0
-#define SCR_COLOR_TYPE_COMMENT  1
-#define SCR_COLOR_TYPE_COMMAND  2
-#define SCR_COLOR_TYPE_EVENT    3
-#define SCR_COLOR_TYPE_SELECT   4
-
-/* Define protocol trace flag values */
-#define SCR_PROTO_TRACE_HCI_SUMMARY 0x00000001
-#define SCR_PROTO_TRACE_HCI_DATA    0x00000002
-#define SCR_PROTO_TRACE_L2CAP       0x00000004
-#define SCR_PROTO_TRACE_RFCOMM      0x00000008
-#define SCR_PROTO_TRACE_SDP         0x00000010
-#define SCR_PROTO_TRACE_TCS         0x00000020
-#define SCR_PROTO_TRACE_OBEX        0x00000040
-#define SCR_PROTO_TRACE_OAPP        0x00000080 /* OBEX Application Profile */
-#define SCR_PROTO_TRACE_AMP         0x00000100
-#define SCR_PROTO_TRACE_BNEP        0x00000200
-#define SCR_PROTO_TRACE_AVP         0x00000400
-#define SCR_PROTO_TRACE_MCA         0x00000800
-#define SCR_PROTO_TRACE_ATT         0x00001000
-#define SCR_PROTO_TRACE_SMP         0x00002000
-#define SCR_PROTO_TRACE_NCI         0x00004000
-#define SCR_PROTO_TRACE_LLCP        0x00008000
-#define SCR_PROTO_TRACE_NDEF        0x00010000
-#define SCR_PROTO_TRACE_RW          0x00020000
-#define SCR_PROTO_TRACE_CE          0x00040000
-#define SCR_PROTO_TRACE_SNEP        0x00080000
-#define SCR_PROTO_TRACE_CHO         0x00100000
-#define SCR_PROTO_TRACE_ALL         0x001fffff
-#define SCR_PROTO_TRACE_HCI_LOGGING_VSE 0x0800 /* Brcm vs event for logmsg and protocol traces */
-
-#define MAX_SCRIPT_TYPE             5
-
-#define TCS_PSM_INTERCOM        5
-#define TCS_PSM_CORDLESS        7
-#define BT_PSM_BNEP             0x000F
-/* Define PSMs HID uses */
-#define HID_PSM_CONTROL         0x0011
-#define HID_PSM_INTERRUPT       0x0013
-
-#if defined(UCD_HID_INCLUDED) && (UCD_HID_INCLUDED == TRUE)
-#define UCD_PSM_MIN     0x8003
-#define UCD_PSM_MAX     0x8003
-#define UCD_PSM_HID     0x8003
-#endif
-
-/* Define a function for logging */
-typedef void (BT_LOG_FUNC) (int trace_type, const char *fmt_str, ...);
-
-#endif
-
diff --git a/halimpl/bcm2079x/include/btdisp_lock.h b/halimpl/bcm2079x/include/btdisp_lock.h
deleted file mode 100644
index 97f2cfe..0000000
--- a/halimpl/bcm2079x/include/btdisp_lock.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2001-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Critical section definitions for btdisp functions.
- *
- ******************************************************************************/
-
-#ifndef BTDISP_LOCK
-#define BTDISP_LOCK
-
-
-#ifdef TESTER
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// External function declaration
-extern void btdisp_lock();
-extern void btdisp_unlock();
-extern void btdisp_init();
-extern void btdisp_uninit();
-
-#ifdef __cplusplus
-}
-#endif
-
-// Lock Macros
-#define BTDISP_LOCK_LOG()           btdisp_lock();
-#define BTDISP_UNLOCK_LOG()         btdisp_unlock();
-#define BTDISP_INIT_LOCK()          btdisp_init();
-#define BTDISP_UNINIT_LOCK()        btdisp_uninit();
-
-#else
-
-#define BTDISP_LOCK_LOG()
-#define BTDISP_UNLOCK_LOG()
-#define BTDISP_INIT_LOCK()
-#define BTDISP_UNINIT_LOCK()
-
-#endif
-
-
-
-#endif // BTDISP_LOCK
diff --git a/halimpl/bcm2079x/include/buildcfg.h b/halimpl/bcm2079x/include/buildcfg.h
index d3829cc..c49bb60 100644
--- a/halimpl/bcm2079x/include/buildcfg.h
+++ b/halimpl/bcm2079x/include/buildcfg.h
@@ -20,7 +20,6 @@
 #include <memory.h>
 #include <stdio.h>
 #include "data_types.h"
-#include "btdisp_lock.h"
 
 
 #define BTE_APPL_MAX_USERIAL_DEV_NAME           (256)
@@ -31,9 +30,10 @@
 
 
 extern UINT8 *scru_dump_hex (UINT8 *p, char *p_title, UINT32 len, UINT32 trace_layer, UINT32 trace_type);
+void DispNci (UINT8 *p, UINT16 len, BOOLEAN is_recv);
+#define DISP_NCI	(DispNci)
 
 
 #ifdef	__cplusplus
 };
 #endif
-
diff --git a/halimpl/bcm2079x/include/buildcfg_hal.h b/halimpl/bcm2079x/include/buildcfg_hal.h
index e987434..590438b 100644
--- a/halimpl/bcm2079x/include/buildcfg_hal.h
+++ b/halimpl/bcm2079x/include/buildcfg_hal.h
@@ -17,6 +17,8 @@
  ******************************************************************************/
 //override any HAL-specific macros
 #pragma once
+
+
 #include "bt_types.h"
 
 //NFC_HAL_TASK=0 is already defined in gki_hal_target.h; it executes the Broadcom HAL
diff --git a/halimpl/bcm2079x/include/config.h b/halimpl/bcm2079x/include/config.h
deleted file mode 100644
index 12f54a4..0000000
--- a/halimpl/bcm2079x/include/config.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-int GetStrValue(const char* name, char* p_value, unsigned long len);
-int GetNumValue(const char* name, void* p_value, unsigned long len);
-
-#ifdef __cplusplus
-};
-#endif
-
-#define NAME_USE_NXP_P2P_RC_WORKAROUND  "USE_NXP_P2P_RC_WORKAROUND"
-#define NAME_NFA_DM_ENABLE_SLEEP        "NFA_DM_ENABLE_SLEEP"
-#define NAME_ENABLE_BRCM_EXTRAS_API     "ENABLE_BRCM_EXTRAS_API"
-#define NAME_POLLING_TECH_MASK          "POLLING_TECH_MASK"
-#define NAME_REGISTER_VIRTUAL_SE        "REGISTER_VIRTUAL_SE"
-#define NAME_APPL_TRACE_LEVEL           "APPL_TRACE_LEVEL"
-#define NAME_LPTD_CFG                   "LPTD_CFG"
-#define NAME_SCREEN_OFF_POWER_STATE     "SCREEN_OFF_POWER_STATE"
-#define NAME_UICC_IDLE_TIMEOUT          "UICC_IDLE_TIMEOUT"
-#define NAME_PREINIT_DSP_CFG            "PREINIT_DSP_CFG"
-#define NAME_DTA_START_CFG              "DTA_START_CFG"
-#define NAME_TRANSPORT_DRIVER           "TRANSPORT_DRIVER"
-#define NAME_POWER_CONTROL_DRIVER       "POWER_CONTROL_DRIVER"
-#define NAME_PROTOCOL_TRACE_LEVEL       "PROTOCOL_TRACE_LEVEL"
-#define NAME_UART_PORT                  "UART_PORT"
-#define NAME_UART_BAUD                  "UART_BAUD"
-#define NAME_UART_PARITY                "UART_PARITY"
-#define NAME_UART_STOPBITS              "UART_STOPBITS"
-#define NAME_UART_DATABITS              "UART_DATABITS"
-#define NAME_CLIENT_ADDRESS             "BCMI2CNFC_ADDRESS"
-#define NAME_NFA_DM_START_UP_CFG        "NFA_DM_START_UP_CFG"
-#define NAME_NFA_DM_CFG                 "NFA_DM_CFG"
-#define NAME_NFA_DM_LP_CFG              "NFA_DM_LP_CFG"
-#define NAME_LOW_SPEED_TRANSPORT        "LOW_SPEED_TRANSPORT"
-#define NAME_NFC_WAKE_DELAY             "NFC_WAKE_DELAY"
-#define NAME_NFC_WRITE_DELAY            "NFC_WRITE_DELAY"
-#define NAME_PERF_MEASURE_FREQ          "REPORT_PERFORMANCE_MEASURE"
-#define NAME_READ_MULTI_PACKETS         "READ_MULTIPLE_PACKETS"
-#define NAME_POWER_ON_DELAY             "POWER_ON_DELAY"
-#define NAME_PRE_POWER_OFF_DELAY        "PRE_POWER_OFF_DELAY"
-#define NAME_POST_POWER_OFF_DELAY       "POST_POWER_OFF_DELAY"
-#define NAME_NFA_STORAGE                "NFA_STORAGE"
-#define NAME_NFA_DM_START_UP_VSC_CFG    "NFA_DM_START_UP_VSC_CFG"
-#define NAME_UICC_LISTEN_TECH_MASK      "UICC_LISTEN_TECH_MASK"
-#define NAME_SNOOZE_MODE_CFG            "SNOOZE_MODE_CFG"
-#define NAME_XTAL_FREQUENCY             "XTAL_FREQUENCY"
-#define NAME_SPD_DEBUG                  "SPD_DEBUG"
-#define NAME_SPD_MAXRETRYCOUNT          "SPD_MAX_RETRY_COUNT"
-#define NAME_SPI_NEGOTIATION            "SPI_NEGOTIATION"
-
-#define                     LPTD_PARAM_LEN (40)
-
-// default configuration
-#define default_transport       "/dev/bcm2079x"
-#define default_storage_location "/data/nfc"
-
-struct tUART_CONFIG {
-    int     m_iBaudrate;            // 115200
-    int     m_iDatabits;            // 8
-    int     m_iParity;              // 0 - none, 1 = odd, 2 = even
-    int     m_iStopbits;
-};
-
-extern struct tUART_CONFIG  uartConfig;
-#define MAX_CHIPID_LEN  (16)
-void    readOptionalConfig(const char* option);
-
-/* Snooze mode configuration structure */
-typedef struct
-{
-    unsigned char   snooze_mode;            /* Snooze Mode */
-    unsigned char   idle_threshold_dh;      /* Idle Threshold Host */
-    unsigned char   idle_threshold_nfcc;    /* Idle Threshold NFCC   */
-    unsigned char   nfc_wake_active_mode;   /* NFC_LP_ACTIVE_LOW or NFC_LP_ACTIVE_HIGH */
-    unsigned char   dh_wake_active_mode;    /* NFC_LP_ACTIVE_LOW or NFC_LP_ACTIVE_HIGH */
-} tSNOOZE_MODE_CONFIG;
-#endif
diff --git a/halimpl/bcm2079x/include/dyn_mem.h b/halimpl/bcm2079x/include/dyn_mem.h
deleted file mode 100644
index 2ee0169..0000000
--- a/halimpl/bcm2079x/include/dyn_mem.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef DYN_MEM_H
-#define DYN_MEM_H
-
-/****************************************************************************
-** Define memory usage for GKI (if not defined in buildcfg.h)
-**  The default for GKI is to use static memory allocation for its control
-**  block.
-*/
-#ifndef GKI_DYNAMIC_MEMORY
-#define GKI_DYNAMIC_MEMORY  FALSE
-#endif
-
-/****************************************************************************
-** Define memory usage for each CORE component (if not defined in buildcfg.h)
-**  The default for each component is to use static memory allocations.
-*/
-#ifndef BTU_DYNAMIC_MEMORY
-#define BTU_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef BTM_DYNAMIC_MEMORY
-#define BTM_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef SDP_DYNAMIC_MEMORY
-#define SDP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef L2C_DYNAMIC_MEMORY
-#define L2C_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef A2MP_DYNAMIC_MEMORY
-#define A2MP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef RFC_DYNAMIC_MEMORY
-#define RFC_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef TCS_DYNAMIC_MEMORY
-#define TCS_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef OBX_DYNAMIC_MEMORY
-#define OBX_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef BNEP_DYNAMIC_MEMORY
-#define BNEP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef AVDT_DYNAMIC_MEMORY
-#define AVDT_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef AVCT_DYNAMIC_MEMORY
-#define AVCT_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef MCA_DYNAMIC_MEMORY
-#define MCA_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef GATT_DYNAMIC_MEMORY
-#define GATT_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef SMP_DYNAMIC_MEMORY
-#define SMP_DYNAMIC_MEMORY  FALSE
-#endif
-
-/****************************************************************************
-** Define memory usage for each PROFILE component (if not defined in buildcfg.h)
-**  The default for each component is to use static memory allocations.
-*/
-#ifndef A2D_DYNAMIC_MEMORY
-#define A2D_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef VDP_DYNAMIC_MEMORY
-#define VDP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef AVRC_DYNAMIC_MEMORY
-#define AVRC_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef BIP_DYNAMIC_MEMORY
-#define BIP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef BPP_DYNAMIC_MEMORY
-#define BPP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef CTP_DYNAMIC_MEMORY
-#define CTP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef DUN_DYNAMIC_MEMORY
-#define DUN_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef FTP_DYNAMIC_MEMORY
-#define FTP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef GAP_DYNAMIC_MEMORY
-#define GAP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef GOEP_DYNAMIC_MEMORY
-#define GOEP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef HCRP_DYNAMIC_MEMORY
-#define HCRP_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef HFP_DYNAMIC_MEMORY
-#define HFP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef HID_DYNAMIC_MEMORY
-#define HID_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef HSP2_DYNAMIC_MEMORY
-#define HSP2_DYNAMIC_MEMORY FALSE
-#endif
-
-#ifndef ICP_DYNAMIC_MEMORY
-#define ICP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef OPP_DYNAMIC_MEMORY
-#define OPP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef PAN_DYNAMIC_MEMORY
-#define PAN_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef SPP_DYNAMIC_MEMORY
-#define SPP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef SLIP_DYNAMIC_MEMORY
-#define SLIP_DYNAMIC_MEMORY  FALSE
-#endif
-
-#ifndef LLCP_DYNAMIC_MEMORY
-#define LLCP_DYNAMIC_MEMORY  FALSE
-#endif
-
-/****************************************************************************
-** Define memory usage for BTA (if not defined in buildcfg.h)
-**  The default for each component is to use static memory allocations.
-*/
-#ifndef BTA_DYNAMIC_MEMORY
-#define BTA_DYNAMIC_MEMORY FALSE
-#endif
-
-/****************************************************************************
-** Define memory usage for BT Trace (if not defined in buildcfg.h)
-**  The default is to use static memory allocations.
-*/
-#ifndef BTTRC_DYNAMIC_MEMORY
-#define BTTRC_DYNAMIC_MEMORY FALSE
-#endif
-
-#endif  /* #ifdef DYN_MEM_H */
-
diff --git a/halimpl/bcm2079x/include/hcidefs.h b/halimpl/bcm2079x/include/hcidefs.h
deleted file mode 100644
index cc3b09f..0000000
--- a/halimpl/bcm2079x/include/hcidefs.h
+++ /dev/null
@@ -1,2377 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef HCIDEFS_H
-#define HCIDEFS_H
-
-#define HCI_PROTO_VERSION     0x01      /* Version for BT spec 1.1          */
-#define HCI_PROTO_VERSION_1_2 0x02      /* Version for BT spec 1.2          */
-#define HCI_PROTO_VERSION_2_0 0x03      /* Version for BT spec 2.0          */
-#define HCI_PROTO_VERSION_2_1 0x04      /* Version for BT spec 2.1 [Lisbon] */
-#define HCI_PROTO_VERSION_3_0 0x05      /* Version for BT spec 3.0          */
-#define HCI_PROTO_REVISION    0x000C    /* Current implementation version   */
-/*
-**  Definitions for HCI groups
-*/
-#define HCI_GRP_LINK_CONTROL_CMDS       (0x01 << 10)            /* 0x0400 */
-#define HCI_GRP_LINK_POLICY_CMDS        (0x02 << 10)            /* 0x0800 */
-#define HCI_GRP_HOST_CONT_BASEBAND_CMDS (0x03 << 10)            /* 0x0C00 */
-#define HCI_GRP_INFORMATIONAL_PARAMS    (0x04 << 10)            /* 0x1000 */
-#define HCI_GRP_STATUS_PARAMS           (0x05 << 10)            /* 0x1400 */
-#define HCI_GRP_TESTING_CMDS            (0x06 << 10)            /* 0x1800 */
-
-#define HCI_GRP_VENDOR_SPECIFIC         (0x3F << 10)            /* 0xFC00 */
-
-/* Group occupies high 6 bits of the HCI command rest is opcode itself */
-#define HCI_OGF(p)  (UINT8)((0xFC00 & (p)) >> 10)
-#define HCI_OCF(p)  ( 0x3FF & (p))
-
-/*
-**  Defentions for Link Control Commands
-*/
-/* Following opcode is used only in command complete event for flow control */
-#define HCI_COMMAND_NONE                0x0000
-
-/* Commands of HCI_GRP_LINK_CONTROL_CMDS group */
-#define HCI_INQUIRY                     (0x0001 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_INQUIRY_CANCEL              (0x0002 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_PERIODIC_INQUIRY_MODE       (0x0003 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_EXIT_PERIODIC_INQUIRY_MODE  (0x0004 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_CREATE_CONNECTION           (0x0005 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_DISCONNECT                  (0x0006 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_ADD_SCO_CONNECTION          (0x0007 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_CREATE_CONNECTION_CANCEL    (0x0008 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_ACCEPT_CONNECTION_REQUEST   (0x0009 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_REJECT_CONNECTION_REQUEST   (0x000A | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_LINK_KEY_REQUEST_REPLY      (0x000B | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_LINK_KEY_REQUEST_NEG_REPLY  (0x000C | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_PIN_CODE_REQUEST_REPLY      (0x000D | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_PIN_CODE_REQUEST_NEG_REPLY  (0x000E | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_CHANGE_CONN_PACKET_TYPE     (0x000F | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_AUTHENTICATION_REQUESTED    (0x0011 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_SET_CONN_ENCRYPTION         (0x0013 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_CHANGE_CONN_LINK_KEY        (0x0015 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_MASTER_LINK_KEY             (0x0017 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_RMT_NAME_REQUEST            (0x0019 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_RMT_NAME_REQUEST_CANCEL     (0x001A | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_READ_RMT_FEATURES           (0x001B | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_READ_RMT_EXT_FEATURES       (0x001C | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_READ_RMT_VERSION_INFO       (0x001D | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_READ_RMT_CLOCK_OFFSET       (0x001F | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_READ_LMP_HANDLE             (0x0020 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_SETUP_ESCO_CONNECTION       (0x0028 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_ACCEPT_ESCO_CONNECTION      (0x0029 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_REJECT_ESCO_CONNECTION      (0x002A | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_IO_CAPABILITY_RESPONSE      (0x002B | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_USER_CONF_REQUEST_REPLY     (0x002C | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_USER_CONF_VALUE_NEG_REPLY   (0x002D | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_USER_PASSKEY_REQ_REPLY      (0x002E | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_USER_PASSKEY_REQ_NEG_REPLY  (0x002F | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_REM_OOB_DATA_REQ_REPLY      (0x0030 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_REM_OOB_DATA_REQ_NEG_REPLY  (0x0033 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_IO_CAP_REQ_NEG_REPLY        (0x0034 | HCI_GRP_LINK_CONTROL_CMDS)
-
-/* AMP HCI */
-#define HCI_CREATE_PHYSICAL_LINK        (0x0035 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_ACCEPT_PHYSICAL_LINK        (0x0036 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_DISCONNECT_PHYSICAL_LINK    (0x0037 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_CREATE_LOGICAL_LINK         (0x0038 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_ACCEPT_LOGICAL_LINK         (0x0039 | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_DISCONNECT_LOGICAL_LINK     (0x003A | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_LOGICAL_LINK_CANCEL         (0x003B | HCI_GRP_LINK_CONTROL_CMDS)
-#define HCI_FLOW_SPEC_MODIFY            (0x003C | HCI_GRP_LINK_CONTROL_CMDS)
-
-#define HCI_LINK_CTRL_CMDS_FIRST        HCI_INQUIRY
-#define HCI_LINK_CTRL_CMDS_LAST         HCI_FLOW_SPEC_MODIFY
-
-/* Commands of HCI_GRP_LINK_POLICY_CMDS */
-#define HCI_HOLD_MODE                   (0x0001 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_SNIFF_MODE                  (0x0003 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_EXIT_SNIFF_MODE             (0x0004 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_PARK_MODE                   (0x0005 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_EXIT_PARK_MODE              (0x0006 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_QOS_SETUP                   (0x0007 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_ROLE_DISCOVERY              (0x0009 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_SWITCH_ROLE                 (0x000B | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_READ_POLICY_SETTINGS        (0x000C | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_WRITE_POLICY_SETTINGS       (0x000D | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_READ_DEF_POLICY_SETTINGS    (0x000E | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_WRITE_DEF_POLICY_SETTINGS   (0x000F | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_FLOW_SPECIFICATION          (0x0010 | HCI_GRP_LINK_POLICY_CMDS)
-#define HCI_SNIFF_SUB_RATE              (0x0011 | HCI_GRP_LINK_POLICY_CMDS)
-
-#define HCI_LINK_POLICY_CMDS_FIRST      HCI_HOLD_MODE
-#define HCI_LINK_POLICY_CMDS_LAST       HCI_SNIFF_SUB_RATE
-
-
-/* Commands of HCI_GRP_HOST_CONT_BASEBAND_CMDS */
-#define HCI_SET_EVENT_MASK              (0x0001 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_RESET                       (0x0003 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SET_EVENT_FILTER            (0x0005 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_FLUSH                       (0x0008 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PIN_TYPE               (0x0009 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PIN_TYPE              (0x000A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_CREATE_NEW_UNIT_KEY         (0x000B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_STORED_LINK_KEY        (0x000D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_STORED_LINK_KEY       (0x0011 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_DELETE_STORED_LINK_KEY      (0x0012 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_CHANGE_LOCAL_NAME           (0x0013 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_LOCAL_NAME             (0x0014 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_CONN_ACCEPT_TOUT       (0x0015 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_CONN_ACCEPT_TOUT      (0x0016 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PAGE_TOUT              (0x0017 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PAGE_TOUT             (0x0018 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_SCAN_ENABLE            (0x0019 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_SCAN_ENABLE           (0x001A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PAGESCAN_CFG           (0x001B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PAGESCAN_CFG          (0x001C | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_INQUIRYSCAN_CFG        (0x001D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_INQUIRYSCAN_CFG       (0x001E | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_AUTHENTICATION_ENABLE  (0x001F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_AUTHENTICATION_ENABLE (0x0020 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_ENCRYPTION_MODE        (0x0021 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_ENCRYPTION_MODE       (0x0022 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_CLASS_OF_DEVICE        (0x0023 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_CLASS_OF_DEVICE       (0x0024 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_VOICE_SETTINGS         (0x0025 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_VOICE_SETTINGS        (0x0026 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_AUTO_FLUSH_TOUT        (0x0027 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_AUTO_FLUSH_TOUT       (0x0028 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_NUM_BCAST_REXMITS      (0x0029 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_NUM_BCAST_REXMITS     (0x002A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_HOLD_MODE_ACTIVITY     (0x002B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_HOLD_MODE_ACTIVITY    (0x002C | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_TRANSMIT_POWER_LEVEL   (0x002D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_SCO_FLOW_CTRL_ENABLE   (0x002E | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_SCO_FLOW_CTRL_ENABLE  (0x002F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SET_HC_TO_HOST_FLOW_CTRL    (0x0031 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_HOST_BUFFER_SIZE            (0x0033 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_HOST_NUM_PACKETS_DONE       (0x0035 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_LINK_SUPER_TOUT        (0x0036 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_LINK_SUPER_TOUT       (0x0037 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_NUM_SUPPORTED_IAC      (0x0038 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_CURRENT_IAC_LAP        (0x0039 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_CURRENT_IAC_LAP       (0x003A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PAGESCAN_PERIOD_MODE   (0x003B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PAGESCAN_PERIOD_MODE  (0x003C | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PAGESCAN_MODE          (0x003D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PAGESCAN_MODE         (0x003E | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SET_AFH_CHANNELS            (0x003F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-
-#define HCI_READ_INQSCAN_TYPE           (0x0042 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_INQSCAN_TYPE          (0x0043 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_INQUIRY_MODE           (0x0044 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_INQUIRY_MODE          (0x0045 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_PAGESCAN_TYPE          (0x0046 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_PAGESCAN_TYPE         (0x0047 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_AFH_ASSESSMENT_MODE    (0x0048 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_AFH_ASSESSMENT_MODE   (0x0049 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_EXT_INQ_RESPONSE       (0x0051 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_EXT_INQ_RESPONSE      (0x0052 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_REFRESH_ENCRYPTION_KEY      (0x0053 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_SIMPLE_PAIRING_MODE    (0x0055 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_SIMPLE_PAIRING_MODE   (0x0056 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_LOCAL_OOB_DATA         (0x0057 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_INQ_TX_POWER_LEVEL     (0x0058 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_INQ_TX_POWER_LEVEL    (0x0059 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_ERRONEOUS_DATA_RPT     (0x005A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_ERRONEOUS_DATA_RPT    (0x005B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_ENHANCED_FLUSH              (0x005F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SEND_KEYPRESS_NOTIF         (0x0060 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-
-
-/* AMP HCI */
-#define HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT  (0x0061 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT (0x0062 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SET_EVENT_MASK_PAGE_2             (0x0063 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_LOCATION_DATA                (0x0064 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_LOCATION_DATA               (0x0065 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_FLOW_CONTROL_MODE            (0x0066 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_FLOW_CONTROL_MODE           (0x0067 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_BE_FLUSH_TOUT                (0x0069 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_BE_FLUSH_TOUT               (0x006A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SHORT_RANGE_MODE                  (0x006B | HCI_GRP_HOST_CONT_BASEBAND_CMDS) /* 802.11 only */
-
-#define HCI_CONT_BASEBAND_CMDS_FIRST    HCI_SET_EVENT_MASK
-#define HCI_CONT_BASEBAND_CMDS_LAST     HCI_SHORT_RANGE_MODE
-
-
-/* Commands of HCI_GRP_INFORMATIONAL_PARAMS group */
-#define HCI_READ_LOCAL_VERSION_INFO     (0x0001 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_LOCAL_SUPPORTED_CMDS   (0x0002 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_LOCAL_FEATURES         (0x0003 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_LOCAL_EXT_FEATURES     (0x0004 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_BUFFER_SIZE            (0x0005 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_COUNTRY_CODE           (0x0007 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_BD_ADDR                (0x0009 | HCI_GRP_INFORMATIONAL_PARAMS)
-#define HCI_READ_DATA_BLOCK_SIZE        (0x000A | HCI_GRP_INFORMATIONAL_PARAMS)
-
-#define HCI_INFORMATIONAL_CMDS_FIRST    HCI_READ_LOCAL_VERSION_INFO
-#define HCI_INFORMATIONAL_CMDS_LAST     HCI_READ_BD_ADDR
-
-
-/* Commands of HCI_GRP_STATUS_PARAMS group */
-#define HCI_READ_FAILED_CONTACT_COUNT   (0x0001 | HCI_GRP_STATUS_PARAMS)
-#define HCI_RESET_FAILED_CONTACT_COUNT  (0x0002 | HCI_GRP_STATUS_PARAMS)
-#define HCI_GET_LINK_QUALITY            (0x0003 | HCI_GRP_STATUS_PARAMS)
-#define HCI_READ_RSSI                   (0x0005 | HCI_GRP_STATUS_PARAMS)
-#define HCI_READ_AFH_CH_MAP             (0x0006 | HCI_GRP_STATUS_PARAMS)
-#define HCI_READ_CLOCK                  (0x0007 | HCI_GRP_STATUS_PARAMS)
-#define HCI_READ_ENCR_KEY_SIZE          (0x0008 | HCI_GRP_STATUS_PARAMS)
-
-/* AMP HCI */
-#define HCI_READ_LOCAL_AMP_INFO         (0x0009 | HCI_GRP_STATUS_PARAMS)
-#define HCI_READ_LOCAL_AMP_ASSOC        (0x000A | HCI_GRP_STATUS_PARAMS)
-#define HCI_WRITE_REMOTE_AMP_ASSOC      (0x000B | HCI_GRP_STATUS_PARAMS)
-
-#define HCI_STATUS_PARAMS_CMDS_FIRST    HCI_READ_FAILED_CONTACT_COUNT
-#define HCI_STATUS_PARAMS_CMDS_LAST     HCI_WRITE_REMOTE_AMP_ASSOC
-
-/* Commands of HCI_GRP_TESTING_CMDS group */
-#define HCI_READ_LOOPBACK_MODE          (0x0001 | HCI_GRP_TESTING_CMDS)
-#define HCI_WRITE_LOOPBACK_MODE         (0x0002 | HCI_GRP_TESTING_CMDS)
-#define HCI_ENABLE_DEV_UNDER_TEST_MODE  (0x0003 | HCI_GRP_TESTING_CMDS)
-#define HCI_WRITE_SIMP_PAIR_DEBUG_MODE  (0x0004 | HCI_GRP_TESTING_CMDS)
-
-/* AMP HCI */
-#define HCI_ENABLE_AMP_RCVR_REPORTS     (0x0007 | HCI_GRP_TESTING_CMDS)
-#define HCI_AMP_TEST_END                (0x0008 | HCI_GRP_TESTING_CMDS)
-#define HCI_AMP_TEST                    (0x0009 | HCI_GRP_TESTING_CMDS)
-
-#define HCI_TESTING_CMDS_FIRST          HCI_READ_LOOPBACK_MODE
-#define HCI_TESTING_CMDS_LAST           HCI_AMP_TEST
-
-#define HCI_VENDOR_CMDS_FIRST           0x0001
-#define HCI_VENDOR_CMDS_LAST            0xFFFF
-#define HCI_VSC_MULTI_AV_HANDLE         0x0AAA
-#define HCI_VSC_BURST_MODE_HANDLE       0x0BBB
-
-/* BLE HCI */
-#define HCI_GRP_BLE_CMDS                (0x08 << 10)
-/* Commands of BLE Controller setup and configuration */
-#define HCI_BLE_SET_EVENT_MASK          (0x0001 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_BUFFER_SIZE        (0x0002 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_LOCAL_SPT_FEAT     (0x0003 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_LOCAL_SPT_FEAT    (0x0004 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_RANDOM_ADDR       (0x0005 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_ADV_PARAMS        (0x0006 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_ADV_CHNL_TX_POWER  (0x0007 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_ADV_DATA          (0x0008 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_SCAN_RSP_DATA     (0x0009 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_ADV_ENABLE        (0x000A | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_SCAN_PARAMS       (0x000B | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_WRITE_SCAN_ENABLE       (0x000C | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_CREATE_LL_CONN          (0x000D | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_CREATE_CONN_CANCEL      (0x000E | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_WHITE_LIST_SIZE    (0x000F | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_CLEAR_WHITE_LIST        (0x0010 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_ADD_WHITE_LIST          (0x0011 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_REMOVE_WHITE_LIST       (0x0012 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_UPD_LL_CONN_PARAMS      (0x0013 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_SET_HOST_CHNL_CLASS     (0x0014 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_CHNL_MAP           (0x0015 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_REMOTE_FEAT        (0x0016 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_ENCRYPT                 (0x0017 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_RAND                    (0x0018 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_START_ENC               (0x0019 | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_LTK_REQ_REPLY           (0x001A | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_LTK_REQ_NEG_REPLY       (0x001B | HCI_GRP_BLE_CMDS)
-#define HCI_BLE_READ_SUPPORTED_STATES   (0x001C | HCI_GRP_BLE_CMDS)
-
-#define HCI_BLE_RESET                   (0x0020 | HCI_GRP_BLE_CMDS)
-
-/* LE supported states definition */
-#define HCI_LE_ADV_STATE          0x00000001
-#define HCI_LE_SCAN_STATE         0x00000002
-#define HCI_LE_INIT_STATE         0x00000004
-#define HCI_LE_CONN_SL_STATE      0x00000008
-#define HCI_LE_ADV_SCAN_STATE     0x00000010
-#define HCI_LE_ADV_INIT_STATE     0x00000020
-#define HCI_LE_ADV_MA_STATE       0x00000040
-#define HCI_LE_ADV_SL_STATE       0x00000080
-#define HCI_LE_SCAN_INIT_STATE    0x00000100
-#define HCI_LE_SCAN_MA_STATE      0x00000200
-#define HCI_LE_SCAN_SL_STATE      0x00000400
-#define HCI_LE_INIT_MA_STATE      0x00000800
-
-/* Vendor specific commands for BRCM chipset */
-#define HCI_BRCM_UPDATE_BAUD_RATE_ENCODED_LENGTH        0x02
-#define HCI_BRCM_UPDATE_BAUD_RATE_UNENCODED_LENGTH      0x06
-#define HCI_BRCM_WRITE_SLEEP_MODE_LENGTH                12
-#define HCI_BRCM_ENABLE_H4IBSS_LENGTH                   7
-#define HCI_BRCM_CUSTOMER_EXT               (0x0000 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FM_OPCODE                  (0x0015 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FMTX_OPCODE                (0x0082 | HCI_GRP_VENDOR_SPECIFIC)  /* FMTX VSC opcode */
-#define HCI_BRCM_UPDATE_BAUDRATE_CMD        (0x0018 | HCI_GRP_VENDOR_SPECIFIC)    /* set baudrate of BCM2035 */
-#define HCI_BRCM_WRITE_SCO_PCM_INT_PARAM    (0x001C | HCI_GRP_VENDOR_SPECIFIC)    /* set SCO interface param */
-#define HCI_BRCM_READ_SCO_PCM_INT_PARAM     (0x001D | HCI_GRP_VENDOR_SPECIFIC)    /* read SCO interface param */
-#define HCI_BRCM_WRITE_SLEEP_MODE           (0x0027 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_SLEEP_MODE            (0x0028 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_H4IBSS_CMD                 (0x0029 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_DOWNLOAD_MINI_DRV          (0x002E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_USER_DEFINED_NVRAM    (0x0033 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_RADIO               (0x0034 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_DIAGNOSTIC_VALUE      (0x0035 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_GET_HID_DEVICE_LIST        (0x0036 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ADD_HID_DEVICE             (0x0037 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_WRITE_HID_DEVICE_NVRAM     (0x0038 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_DELETE_HID_DEVICE          (0x0039 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_USB_HID_EMULATION   (0x003B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_WRITE_RAM                  (0x004C | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_LAUNCH_RAM                 (0x004E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_BTW_STARTUP                (0x0053 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_SET_ACL_PRIORITY           (0x0057 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_SET_SEC_MODE               (0x0096 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_H4IBSS              (0x00D4 | HCI_GRP_VENDOR_SPECIFIC)
-
-#define HCI_BRCM_SUPER_PEEK_POKE            (0x000A | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_ARM_MEM_PEEK                    0x04
-#define HCI_ARM_MEM_POKE                    0x05
-#define HCI_BRCM_SUPER_PEEK_POKE_LENGTH     9
-
-#define HCI_BRCM_WRITE_I2SPCM_INTF_PARAM    (0x006D | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_CONTROLLER_FEATURES   (0x006E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FEATURE_NFC_MASK           0x10
-#define HCI_BRCM_FEATURE_NFC_OFF            0
-
-#define HCI_BRCM_READ_VERBOSE_CFG_VER_INFO  (0x0079 | HCI_GRP_VENDOR_SPECIFIC)
-
-/* Dual Stack */
-#define HCI_BRCM_PAUSE_TRANSPORT            (0x007A | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_TRANSPORT_RESUME           (0x007B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_TRANSPORT_ERROR_EVT        0x0C
-
-#define HCI_BRCM_TX_POWER_OPCODE            (0x007D | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_WBS                 (0x007E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_UIPC_OVER_HCI              (0x008B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_AUDIO_ROUTE_INFO      (0x00A2 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_UIPC_OVER_HCI_EVT          0x1A
-#define HCI_BRCM_ENCAPSULATED_HCI           (0x00A3 | HCI_GRP_VENDOR_SPECIFIC)
-/* VSE subcode - VSE format FF [len] [subcode] [vse params...] */
-#define HCI_BRCM_ENCAPSULATED_HCI_EVT       0x1E
-
-/* PCM2 Setup */
-#define HCI_BRCM_PCM2_SETUP                 (0x00AE | HCI_GRP_VENDOR_SPECIFIC)
-
-/* BRR */
-#define HCI_BRCM_SET_BRR                    (0x00AA | HCI_GRP_VENDOR_SPECIFIC)
-
-/* 3DTV */
-#define HCI_BRCM_3D_CTRL                    (0x00B7 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_3D_OFFSET_DELAY            (0x00D6 | HCI_GRP_VENDOR_SPECIFIC)
-
-/* GPS */
-#define HCI_BRCM_GPS_DATA                   (0x0089 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_GPS_SENSOR_OPCODE          (0x008F | HCI_GRP_VENDOR_SPECIFIC)  /* GPS sensor VSC opcode */
-
-/* MIP: Multicast Individual Polling */
-#define HCI_BRCM_INIT_MIP                   (0x00DC | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_OPEN_CMD               (0x00DD | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_CLOSE_CMD              (0x00DE | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_ENC_KEY_CMD            (0x00DF | HCI_GRP_VENDOR_SPECIFIC)
-
-/* MIP-related definitions */
-#define BRCM_MIP_ROLE_MASTER                0x00
-#define BRCM_MIP_ROLE_SLAVE                 0x01
-
-#define BRCM_MIP_MODE_A2DP                  0x00
-#define BRCM_MIP_MODE_3DG                   0x01
-#define BRCM_MIP_MODE_CMBO                  0x02    /* A2DP + 3DG */
-
-/* Parameter information for HCI_BRCM_SET_ACL_PRIORITY */
-#define HCI_BRCM_ACL_PRIORITY_PARAM_SIZE    3
-#define HCI_BRCM_ACL_PRIORITY_LOW           0x00
-#define HCI_BRCM_ACL_PRIORITY_HIGH          0xFF
-
-#define HCI_BRCM_PAUSE_TRANSPORT_LENGTH     6
-
-/* Parameter information for HCI_BRCM_SCO_PCM_INT_PARAM */
-#define HCI_BRCM_SCO_PCM_PARAM_SIZE         5
-#define HCI_BRCM_SCO_ROUTE_PCM              0
-#define HCI_BRCM_SCO_ROUTE_HCI              1
-
-/* Parameter information for HCI_BRCM_WRITE_I2SPCM_INTF_PARAM */
-#define HCI_BRCM_I2SPCM_PARAM_SIZE          4
-#define HCI_BRCM_I2SPCM_I2S_DISABLE         0
-#define HCI_BRCM_I2SPCM_I2S_ENABLE          1
-#define HCI_BRCM_I2SPCM_IS_SLAVE            0
-#define HCI_BRCM_I2SPCM_IS_MASTER           1
-#define HCI_BRCM_I2SPCM_IS_DEFAULT_ROLE     2
-#define HCI_BRCM_I2SPCM_SAMPLE_8K           0
-#define HCI_BRCM_I2SPCM_SAMPLE_16K          1
-#define HCI_BRCM_I2SPCM_SAMPLE_4K           2
-#define HCI_BRCM_I2SPCM_SAMPLE_DEFAULT      3
-#define HCI_BRCM_I2SPCM_CLOCK_128K          0
-#define HCI_BRCM_I2SPCM_CLOCK_256K          1
-#define HCI_BRCM_I2SPCM_CLOCK_512K          2
-#define HCI_BRCM_I2SPCM_CLOCK_1024K         3
-#define HCI_BRCM_I2SPCM_CLOCK_2048K         4
-#define HCI_BRCM_I2SPCM_CLOCK_DEFAULT       5
-
-/*
-**  Definitions for HCI Events
-*/
-#define HCI_INQUIRY_COMP_EVT                0x01
-#define HCI_INQUIRY_RESULT_EVT              0x02
-#define HCI_CONNECTION_COMP_EVT             0x03
-#define HCI_CONNECTION_REQUEST_EVT          0x04
-#define HCI_DISCONNECTION_COMP_EVT          0x05
-#define HCI_AUTHENTICATION_COMP_EVT         0x06
-#define HCI_RMT_NAME_REQUEST_COMP_EVT       0x07
-#define HCI_ENCRYPTION_CHANGE_EVT           0x08
-#define HCI_CHANGE_CONN_LINK_KEY_EVT        0x09
-#define HCI_MASTER_LINK_KEY_COMP_EVT        0x0A
-#define HCI_READ_RMT_FEATURES_COMP_EVT      0x0B
-#define HCI_READ_RMT_VERSION_COMP_EVT       0x0C
-#define HCI_QOS_SETUP_COMP_EVT              0x0D
-#define HCI_COMMAND_COMPLETE_EVT            0x0E
-#define HCI_COMMAND_STATUS_EVT              0x0F
-#define HCI_HARDWARE_ERROR_EVT              0x10
-#define HCI_FLUSH_OCCURED_EVT               0x11
-#define HCI_ROLE_CHANGE_EVT                 0x12
-#define HCI_NUM_COMPL_DATA_PKTS_EVT         0x13
-#define HCI_MODE_CHANGE_EVT                 0x14
-#define HCI_RETURN_LINK_KEYS_EVT            0x15
-#define HCI_PIN_CODE_REQUEST_EVT            0x16
-#define HCI_LINK_KEY_REQUEST_EVT            0x17
-#define HCI_LINK_KEY_NOTIFICATION_EVT       0x18
-#define HCI_LOOPBACK_COMMAND_EVT            0x19
-#define HCI_DATA_BUF_OVERFLOW_EVT           0x1A
-#define HCI_MAX_SLOTS_CHANGED_EVT           0x1B
-#define HCI_READ_CLOCK_OFF_COMP_EVT         0x1C
-#define HCI_CONN_PKT_TYPE_CHANGE_EVT        0x1D
-#define HCI_QOS_VIOLATION_EVT               0x1E
-#define HCI_PAGE_SCAN_MODE_CHANGE_EVT       0x1F
-#define HCI_PAGE_SCAN_REP_MODE_CHNG_EVT     0x20
-#define HCI_FLOW_SPECIFICATION_COMP_EVT     0x21
-#define HCI_INQUIRY_RSSI_RESULT_EVT         0x22
-#define HCI_READ_RMT_EXT_FEATURES_COMP_EVT  0x23
-#define HCI_ESCO_CONNECTION_COMP_EVT        0x2C
-#define HCI_ESCO_CONNECTION_CHANGED_EVT     0x2D
-#define HCI_SNIFF_SUB_RATE_EVT              0x2E
-#define HCI_EXTENDED_INQUIRY_RESULT_EVT     0x2F
-#define HCI_ENCRYPTION_KEY_REFRESH_COMP_EVT 0x30
-#define HCI_IO_CAPABILITY_REQUEST_EVT       0x31
-#define HCI_IO_CAPABILITY_RESPONSE_EVT      0x32
-#define HCI_USER_CONFIRMATION_REQUEST_EVT   0x33
-#define HCI_USER_PASSKEY_REQUEST_EVT        0x34
-#define HCI_REMOTE_OOB_DATA_REQUEST_EVT     0x35
-#define HCI_SIMPLE_PAIRING_COMPLETE_EVT     0x36
-#define HCI_LINK_SUPER_TOUT_CHANGED_EVT     0x38
-#define HCI_ENHANCED_FLUSH_COMPLETE_EVT     0x39
-#define HCI_USER_PASSKEY_NOTIFY_EVT         0x3B
-#define HCI_KEYPRESS_NOTIFY_EVT             0x3C
-#define HCI_RMT_HOST_SUP_FEAT_NOTIFY_EVT    0x3D
-
-/*#define HCI_GENERIC_AMP_LINK_KEY_NOTIF_EVT  0x3E Removed from spec */
-#define HCI_PHYSICAL_LINK_COMP_EVT          0x40
-#define HCI_CHANNEL_SELECTED_EVT            0x41
-#define HCI_DISC_PHYSICAL_LINK_COMP_EVT     0x42
-#define HCI_PHY_LINK_LOSS_EARLY_WARNING_EVT 0x43
-#define HCI_PHY_LINK_RECOVERY_EVT           0x44
-#define HCI_LOGICAL_LINK_COMP_EVT           0x45
-#define HCI_DISC_LOGICAL_LINK_COMP_EVT      0x46
-#define HCI_FLOW_SPEC_MODIFY_COMP_EVT       0x47
-#define HCI_NUM_COMPL_DATA_BLOCKS_EVT       0x48
-#define HCI_SHORT_RANGE_MODE_COMPLETE_EVT   0x4C
-#define HCI_AMP_STATUS_CHANGE_EVT           0x4D
-
-/* ULP HCI Event */
-#define HCI_BLE_EVENT                   0x03E
-/* ULP Event sub code */
-#define HCI_BLE_CONN_COMPLETE_EVT           0x01
-#define HCI_BLE_ADV_PKT_RPT_EVT             0x02
-#define HCI_BLE_LL_CONN_PARAM_UPD_EVT       0x03
-#define HCI_BLE_READ_REMOTE_FEAT_CMPL_EVT   0x04
-#define HCI_BLE_LTK_REQ_EVT                 0x05
-
-#define HCI_EVENT_RSP_FIRST             HCI_INQUIRY_COMP_EVT
-#define HCI_EVENT_RSP_LAST              HCI_AMP_STATUS_CHANGE_EVT
-
-#define HCI_BRCM_H4IBSS_EVT             0xEF  /* Vendor specific events for H4IBSS */
-#define HCI_VENDOR_SPECIFIC_EVT         0xFF  /* Vendor specific events */
-#define HCI_NAP_TRACE_EVT               0xFF  /* was define 0xFE, 0xFD, change to 0xFF
-                                                 because conflict w/ TCI_EVT and per
-                                                 specification compliant */
-
-
-
-/*
-**  Defentions for HCI Error Codes that are past in the events
-*/
-#define HCI_SUCCESS                                     0x00
-#define HCI_PENDING                                     0x00
-#define HCI_ERR_ILLEGAL_COMMAND                         0x01
-#define HCI_ERR_NO_CONNECTION                           0x02
-#define HCI_ERR_HW_FAILURE                              0x03
-#define HCI_ERR_PAGE_TIMEOUT                            0x04
-#define HCI_ERR_AUTH_FAILURE                            0x05
-#define HCI_ERR_KEY_MISSING                             0x06
-#define HCI_ERR_MEMORY_FULL                             0x07
-#define HCI_ERR_CONNECTION_TOUT                         0x08
-#define HCI_ERR_MAX_NUM_OF_CONNECTIONS                  0x09
-#define HCI_ERR_MAX_NUM_OF_SCOS                         0x0A
-#define HCI_ERR_CONNECTION_EXISTS                       0x0B
-#define HCI_ERR_COMMAND_DISALLOWED                      0x0C
-#define HCI_ERR_HOST_REJECT_RESOURCES                   0x0D
-#define HCI_ERR_HOST_REJECT_SECURITY                    0x0E
-#define HCI_ERR_HOST_REJECT_DEVICE                      0x0F
-#define HCI_ERR_HOST_TIMEOUT                            0x10
-#define HCI_ERR_UNSUPPORTED_VALUE                       0x11
-#define HCI_ERR_ILLEGAL_PARAMETER_FMT                   0x12
-#define HCI_ERR_PEER_USER                               0x13
-#define HCI_ERR_PEER_LOW_RESOURCES                      0x14
-#define HCI_ERR_PEER_POWER_OFF                          0x15
-#define HCI_ERR_CONN_CAUSE_LOCAL_HOST                   0x16
-#define HCI_ERR_REPEATED_ATTEMPTS                       0x17
-#define HCI_ERR_PAIRING_NOT_ALLOWED                     0x18
-#define HCI_ERR_UNKNOWN_LMP_PDU                         0x19
-#define HCI_ERR_UNSUPPORTED_REM_FEATURE                 0x1A
-#define HCI_ERR_SCO_OFFSET_REJECTED                     0x1B
-#define HCI_ERR_SCO_INTERVAL_REJECTED                   0x1C
-#define HCI_ERR_SCO_AIR_MODE                            0x1D
-#define HCI_ERR_INVALID_LMP_PARAM                       0x1E
-#define HCI_ERR_UNSPECIFIED                             0x1F
-#define HCI_ERR_UNSUPPORTED_LMP_FEATURE                 0x20
-#define HCI_ERR_ROLE_CHANGE_NOT_ALLOWED                 0x21
-#define HCI_ERR_LMP_RESPONSE_TIMEOUT                    0x22
-#define HCI_ERR_LMP_ERR_TRANS_COLLISION                 0x23
-#define HCI_ERR_LMP_PDU_NOT_ALLOWED                     0x24
-#define HCI_ERR_ENCRY_MODE_NOT_ACCEPTABLE               0x25
-#define HCI_ERR_UNIT_KEY_USED                           0x26
-#define HCI_ERR_QOS_NOT_SUPPORTED                       0x27
-#define HCI_ERR_INSTANT_PASSED                          0x28
-#define HCI_ERR_PAIRING_WITH_UNIT_KEY_NOT_SUPPORTED     0x29
-#define HCI_ERR_DIFF_TRANSACTION_COLLISION              0x2A
-#define HCI_ERR_UNDEFINED_0x2B                          0x2B
-#define HCI_ERR_QOS_UNACCEPTABLE_PARAM                  0x2C
-#define HCI_ERR_QOS_REJECTED                            0x2D
-#define HCI_ERR_CHAN_CLASSIF_NOT_SUPPORTED              0x2E
-#define HCI_ERR_INSUFFCIENT_SECURITY                    0x2F
-#define HCI_ERR_PARAM_OUT_OF_RANGE                      0x30
-#define HCI_ERR_UNDEFINED_0x31                          0x31
-#define HCI_ERR_ROLE_SWITCH_PENDING                     0x32
-#define HCI_ERR_UNDEFINED_0x33                          0x33
-#define HCI_ERR_RESERVED_SLOT_VIOLATION                 0x34
-#define HCI_ERR_ROLE_SWITCH_FAILED                      0x35
-#define HCI_ERR_INQ_RSP_DATA_TOO_LARGE                  0x36
-#define HCI_ERR_SIMPLE_PAIRING_NOT_SUPPORTED            0x37
-#define HCI_ERR_HOST_BUSY_PAIRING                       0x38
-#define HCI_ERR_REJ_NO_SUITABLE_CHANNEL                 0x39
-#define HCI_ERR_CONTROLLER_BUSY                         0x3A
-#define HCI_ERR_UNACCEPT_CONN_INTERVAL                  0x3B
-#define HCI_ERR_DIRECTED_ADVERTISING_TIMEOUT            0x3C
-#define HCI_ERR_CONN_TOUT_DUE_TO_MIC_FAILURE            0x3D
-#define HCI_ERR_CONN_FAILED_ESTABLISHMENT               0x3E
-#define HCI_ERR_MAC_CONNECTION_FAILED                   0x3F
-
-#define HCI_ERR_MAX_ERR                                 0x40
-
-#define HCI_HINT_TO_RECREATE_AMP_PHYS_LINK              0xFF
-
-/*
-** Definitions for HCI enable event
-*/
-#define HCI_INQUIRY_COMPLETE_EV(p)          (*((UINT32 *)(p)) & 0x00000001)
-#define HCI_INQUIRY_RESULT_EV(p)            (*((UINT32 *)(p)) & 0x00000002)
-#define HCI_CONNECTION_COMPLETE_EV(p)       (*((UINT32 *)(p)) & 0x00000004)
-#define HCI_CONNECTION_REQUEST_EV(p)        (*((UINT32 *)(p)) & 0x00000008)
-#define HCI_DISCONNECTION_COMPLETE_EV(p)    (*((UINT32 *)(p)) & 0x00000010)
-#define HCI_AUTHENTICATION_COMPLETE_EV(p)   (*((UINT32 *)(p)) & 0x00000020)
-#define HCI_RMT_NAME_REQUEST_COMPL_EV(p)    (*((UINT32 *)(p)) & 0x00000040)
-#define HCI_CHANGE_CONN_ENCRPT_ENABLE_EV(p) (*((UINT32 *)(p)) & 0x00000080)
-#define HCI_CHANGE_CONN_LINK_KEY_EV(p)      (*((UINT32 *)(p)) & 0x00000100)
-#define HCI_MASTER_LINK_KEY_COMPLETE_EV(p)  (*((UINT32 *)(p)) & 0x00000200)
-#define HCI_READ_RMT_FEATURES_COMPL_EV(p)   (*((UINT32 *)(p)) & 0x00000400)
-#define HCI_READ_RMT_VERSION_COMPL_EV(p)    (*((UINT32 *)(p)) & 0x00000800)
-#define HCI_QOS_SETUP_COMPLETE_EV(p)        (*((UINT32 *)(p)) & 0x00001000)
-#define HCI_COMMAND_COMPLETE_EV(p)          (*((UINT32 *)(p)) & 0x00002000)
-#define HCI_COMMAND_STATUS_EV(p)            (*((UINT32 *)(p)) & 0x00004000)
-#define HCI_HARDWARE_ERROR_EV(p)            (*((UINT32 *)(p)) & 0x00008000)
-#define HCI_FLASH_OCCURED_EV(p)             (*((UINT32 *)(p)) & 0x00010000)
-#define HCI_ROLE_CHANGE_EV(p)               (*((UINT32 *)(p)) & 0x00020000)
-#define HCI_NUM_COMPLETED_PKTS_EV(p)        (*((UINT32 *)(p)) & 0x00040000)
-#define HCI_MODE_CHANGE_EV(p)               (*((UINT32 *)(p)) & 0x00080000)
-#define HCI_RETURN_LINK_KEYS_EV(p)          (*((UINT32 *)(p)) & 0x00100000)
-#define HCI_PIN_CODE_REQUEST_EV(p)          (*((UINT32 *)(p)) & 0x00200000)
-#define HCI_LINK_KEY_REQUEST_EV(p)          (*((UINT32 *)(p)) & 0x00400000)
-#define HCI_LINK_KEY_NOTIFICATION_EV(p)     (*((UINT32 *)(p)) & 0x00800000)
-#define HCI_LOOPBACK_COMMAND_EV(p)          (*((UINT32 *)(p)) & 0x01000000)
-#define HCI_DATA_BUF_OVERFLOW_EV(p)         (*((UINT32 *)(p)) & 0x02000000)
-#define HCI_MAX_SLOTS_CHANGE_EV(p)          (*((UINT32 *)(p)) & 0x04000000)
-#define HCI_READ_CLOCK_OFFSET_COMP_EV(p)    (*((UINT32 *)(p)) & 0x08000000)
-#define HCI_CONN_PKT_TYPE_CHANGED_EV(p)     (*((UINT32 *)(p)) & 0x10000000)
-#define HCI_QOS_VIOLATION_EV(p)             (*((UINT32 *)(p)) & 0x20000000)
-#define HCI_PAGE_SCAN_MODE_CHANGED_EV(p)    (*((UINT32 *)(p)) & 0x40000000)
-#define HCI_PAGE_SCAN_REP_MODE_CHNG_EV(p)   (*((UINT32 *)(p)) & 0x80000000)
-
-/* the default event mask for 2.1+EDR (Lisbon) does not include Lisbon events */
-#define HCI_DEFAULT_EVENT_MASK_0            0xFFFFFFFF
-#define HCI_DEFAULT_EVENT_MASK_1            0x00001FFF
-
-/* the event mask for 2.0 + EDR and later (includes Lisbon events) */
-#define HCI_LISBON_EVENT_MASK_0             0xFFFFFFFF
-#define HCI_LISBON_EVENT_MASK_1             0x1DBFFFFF
-#define HCI_LISBON_EVENT_MASK               "\x0D\xBF\xFF\xFF\xFF\xFF\xFF\xFF"
-#define HCI_LISBON_EVENT_MASK_EXT           "\x1D\xBF\xFF\xFF\xFF\xFF\xFF\xFF"
-#define HCI_DUMO_EVENT_MASK_EXT             "\x3D\xBF\xFF\xFF\xFF\xFF\xFF\xFF"
-/*  0x00001FFF FFFFFFFF Default - no Lisbon events
-    0x00000800 00000000 Synchronous Connection Complete Event
-    0x00001000 00000000 Synchronous Connection Changed Event
-    0x00002000 00000000 Sniff Subrate Event
-    0x00004000 00000000 Extended Inquiry Result Event
-    0x00008000 00000000 Encryption Key Refresh Complete Event
-    0x00010000 00000000 IO Capability Request Event
-    0x00020000 00000000 IO Capability Response Event
-    0x00040000 00000000 User Confirmation Request Event
-    0x00080000 00000000 User Passkey Request Event
-    0x00100000 00000000 Remote OOB Data Request Event
-    0x00200000 00000000 Simple Pairing Complete Event
-    0x00400000 00000000 Generic AMP Link Key Notification Event
-    0x00800000 00000000 Link Supervision Timeout Changed Event
-    0x01000000 00000000 Enhanced Flush Complete Event
-    0x04000000 00000000 User Passkey Notification Event
-    0x08000000 00000000 Keypress Notification Event
-    0x10000000 00000000 Remote Host Supported Features Notification Event
-    0x20000000 00000000 LE Meta Event
- */
-
-
-/* the event mask for AMP controllers */
-#define HCI_AMP_EVENT_MASK_3_0               "\x00\x00\x00\x00\x00\x00\x3F\xFF"
-
-/*  0x0000000000000000 No events specified (default)
-    0x0000000000000001 Physical Link Complete Event
-    0x0000000000000002 Channel Selected Event
-    0x0000000000000004 Disconnection Physical Link Event
-    0x0000000000000008 Physical Link Loss Early Warning Event
-    0x0000000000000010 Physical Link Recovery Event
-    0x0000000000000020 Logical Link Complete Event
-    0x0000000000000040 Disconnection Logical Link Complete Event
-    0x0000000000000080 Flow Spec Modify Complete Event
-    0x0000000000000100 Number of Completed Data Blocks Event
-    0x0000000000000200 AMP Start Test Event
-    0x0000000000000400 AMP Test End Event
-    0x0000000000000800 AMP Receiver Report Event
-    0x0000000000001000 Short Range Mode Change Complete Event
-    0x0000000000002000 AMP Status Change Event
-*/
-
-
-/*
-** Definitions for packet type masks (BT1.2 and BT2.0 definitions)
-*/
-#define HCI_PKT_TYPES_MASK_NO_2_DH1         0x0002
-#define HCI_PKT_TYPES_MASK_NO_3_DH1         0x0004
-#define HCI_PKT_TYPES_MASK_DM1              0x0008
-#define HCI_PKT_TYPES_MASK_DH1              0x0010
-#define HCI_PKT_TYPES_MASK_HV1              0x0020
-#define HCI_PKT_TYPES_MASK_HV2              0x0040
-#define HCI_PKT_TYPES_MASK_HV3              0x0080
-#define HCI_PKT_TYPES_MASK_NO_2_DH3         0x0100
-#define HCI_PKT_TYPES_MASK_NO_3_DH3         0x0200
-#define HCI_PKT_TYPES_MASK_DM3              0x0400
-#define HCI_PKT_TYPES_MASK_DH3              0x0800
-#define HCI_PKT_TYPES_MASK_NO_2_DH5         0x1000
-#define HCI_PKT_TYPES_MASK_NO_3_DH5         0x2000
-#define HCI_PKT_TYPES_MASK_DM5              0x4000
-#define HCI_PKT_TYPES_MASK_DH5              0x8000
-
-/* Packet type should be one of valid but at least one should be specified */
-#define HCI_VALID_SCO_PKT_TYPE(t) (((((t) & ~(HCI_PKT_TYPES_MASK_HV1       \
-                                           |  HCI_PKT_TYPES_MASK_HV2       \
-                                           |  HCI_PKT_TYPES_MASK_HV3)) == 0)) \
-                                    && ((t) != 0))
-
-
-
-
-
-/* Packet type should not be invalid and at least one should be specified */
-#define HCI_VALID_ACL_PKT_TYPE(t) (((((t) & ~(HCI_PKT_TYPES_MASK_DM1        \
-                                           |  HCI_PKT_TYPES_MASK_DH1        \
-                                           |  HCI_PKT_TYPES_MASK_DM3        \
-                                           |  HCI_PKT_TYPES_MASK_DH3        \
-                                           |  HCI_PKT_TYPES_MASK_DM5        \
-                                           |  HCI_PKT_TYPES_MASK_DH5        \
-                                           |  HCI_PKT_TYPES_MASK_NO_2_DH1   \
-                                           |  HCI_PKT_TYPES_MASK_NO_3_DH1   \
-                                           |  HCI_PKT_TYPES_MASK_NO_2_DH3   \
-                                           |  HCI_PKT_TYPES_MASK_NO_3_DH3   \
-                                           |  HCI_PKT_TYPES_MASK_NO_2_DH5   \
-                                           |  HCI_PKT_TYPES_MASK_NO_3_DH5  )) == 0)) \
-                                    && (((t) &  (HCI_PKT_TYPES_MASK_DM1        \
-                                              |  HCI_PKT_TYPES_MASK_DH1        \
-                                              |  HCI_PKT_TYPES_MASK_DM3        \
-                                              |  HCI_PKT_TYPES_MASK_DH3        \
-                                              |  HCI_PKT_TYPES_MASK_DM5        \
-                                              |  HCI_PKT_TYPES_MASK_DH5)) != 0))
-
-/*
-** Definitions for eSCO packet type masks (BT1.2 and BT2.0 definitions)
-*/
-#define HCI_ESCO_PKT_TYPES_MASK_HV1         0x0001
-#define HCI_ESCO_PKT_TYPES_MASK_HV2         0x0002
-#define HCI_ESCO_PKT_TYPES_MASK_HV3         0x0004
-#define HCI_ESCO_PKT_TYPES_MASK_EV3         0x0008
-#define HCI_ESCO_PKT_TYPES_MASK_EV4         0x0010
-#define HCI_ESCO_PKT_TYPES_MASK_EV5         0x0020
-#define HCI_ESCO_PKT_TYPES_MASK_NO_2_EV3    0x0040
-#define HCI_ESCO_PKT_TYPES_MASK_NO_3_EV3    0x0080
-#define HCI_ESCO_PKT_TYPES_MASK_NO_2_EV5    0x0100
-#define HCI_ESCO_PKT_TYPES_MASK_NO_3_EV5    0x0200
-
-/* Packet type should be one of valid but at least one should be specified for 1.2 */
-#define HCI_VALID_ESCO_PKT_TYPE(t) (((((t) & ~(HCI_ESCO_PKT_TYPES_MASK_EV3       \
-                                           |   HCI_ESCO_PKT_TYPES_MASK_EV4       \
-                                           |   HCI_ESCO_PKT_TYPES_MASK_EV5)) == 0)) \
-                                    && ((t) != 0))/* Packet type should be one of valid but at least one should be specified */
-
-#define HCI_VALID_ESCO_SCOPKT_TYPE(t) (((((t) & ~(HCI_ESCO_PKT_TYPES_MASK_HV1       \
-                                           |      HCI_ESCO_PKT_TYPES_MASK_HV2       \
-                                           |      HCI_ESCO_PKT_TYPES_MASK_HV3)) == 0)) \
-                                    && ((t) != 0))
-
-#define HCI_VALID_SCO_ALL_PKT_TYPE(t) (((((t) & ~(HCI_ESCO_PKT_TYPES_MASK_HV1       \
-                                           |      HCI_ESCO_PKT_TYPES_MASK_HV2       \
-                                           |      HCI_ESCO_PKT_TYPES_MASK_HV3       \
-                                           |      HCI_ESCO_PKT_TYPES_MASK_EV3       \
-                                           |      HCI_ESCO_PKT_TYPES_MASK_EV4       \
-                                           |      HCI_ESCO_PKT_TYPES_MASK_EV5)) == 0)) \
-                                    && ((t) != 0))
-
-/*
-** Define parameters to allow role switch during create connection
-*/
-#define HCI_CR_CONN_NOT_ALLOW_SWITCH    0x00
-#define HCI_CR_CONN_ALLOW_SWITCH        0x01
-
-/*
-** Hold Mode command destination
-*/
-#define HOLD_MODE_DEST_LOCAL_DEVICE     0x00
-#define HOLD_MODE_DEST_RMT_DEVICE       0x01
-
-/*
-**  Definitions for different HCI parameters
-*/
-#define HCI_PER_INQ_MIN_MAX_PERIOD      0x0003
-#define HCI_PER_INQ_MAX_MAX_PERIOD      0xFFFF
-#define HCI_PER_INQ_MIN_MIN_PERIOD      0x0002
-#define HCI_PER_INQ_MAX_MIN_PERIOD      0xFFFE
-
-#define HCI_MAX_INQUIRY_LENGTH          0x30
-
-#define HCI_MIN_INQ_LAP                 0x9E8B00
-#define HCI_MAX_INQ_LAP                 0x9E8B3F
-
-/* HCI role defenitions */
-#define HCI_ROLE_MASTER                 0x00
-#define HCI_ROLE_SLAVE                  0x01
-#define HCI_ROLE_UNKNOWN                0xff
-
-/* HCI mode defenitions */
-#define HCI_MODE_ACTIVE                 0x00
-#define HCI_MODE_HOLD                   0x01
-#define HCI_MODE_SNIFF                  0x02
-#define HCI_MODE_PARK                   0x03
-
-/* HCI Flow Control Mode defenitions */
-#define HCI_PACKET_BASED_FC_MODE        0x00
-#define HCI_BLOCK_BASED_FC_MODE         0x01
-
-/* Define Packet types as requested by the Host */
-#define HCI_ACL_PKT_TYPE_NONE           0x0000
-#define HCI_ACL_PKT_TYPE_DM1            0x0008
-#define HCI_ACL_PKT_TYPE_DH1            0x0010
-#define HCI_ACL_PKT_TYPE_AUX1           0x0200
-#define HCI_ACL_PKT_TYPE_DM3            0x0400
-#define HCI_ACL_PKT_TYPE_DH3            0x0800
-#define HCI_ACL_PKT_TYPE_DM5            0x4000
-#define HCI_ACL_PKT_TYPE_DH5            0x8000
-
-/* Define key type in the Master Link Key command */
-#define HCI_USE_SEMI_PERMANENT_KEY      0x00
-#define HCI_USE_TEMPORARY_KEY           0x01
-
-/* Page scan period modes */
-#define HCI_PAGE_SCAN_REP_MODE_R0       0x00
-#define HCI_PAGE_SCAN_REP_MODE_R1       0x01
-#define HCI_PAGE_SCAN_REP_MODE_R2       0x02
-
-/* Define limits for page scan repetition modes */
-#define HCI_PAGE_SCAN_R1_LIMIT          0x0800
-#define HCI_PAGE_SCAN_R2_LIMIT          0x1000
-
-/* Page scan period modes */
-#define HCI_PAGE_SCAN_PER_MODE_P0       0x00
-#define HCI_PAGE_SCAN_PER_MODE_P1       0x01
-#define HCI_PAGE_SCAN_PER_MODE_P2       0x02
-
-/* Page scan modes */
-#define HCI_MANDATARY_PAGE_SCAN_MODE    0x00
-#define HCI_OPTIONAL_PAGE_SCAN_MODE1    0x01
-#define HCI_OPTIONAL_PAGE_SCAN_MODE2    0x02
-#define HCI_OPTIONAL_PAGE_SCAN_MODE3    0x03
-
-/* Page and inquiry scan types */
-#define HCI_SCAN_TYPE_STANDARD          0x00
-#define HCI_SCAN_TYPE_INTERLACED        0x01       /* 1.2 devices or later */
-#define HCI_DEF_SCAN_TYPE               HCI_SCAN_TYPE_STANDARD
-
-/* Definitions for quality of service service types */
-#define HCI_SERVICE_NO_TRAFFIC          0x00
-#define HCI_SERVICE_BEST_EFFORT         0x01
-#define HCI_SERVICE_GUARANTEED          0x02
-
-#define HCI_QOS_LATENCY_DO_NOT_CARE     0xFFFFFFFF
-#define HCI_QOS_DELAY_DO_NOT_CARE       0xFFFFFFFF
-
-/* Definitions for Flow Specification */
-#define HCI_FLOW_SPEC_LATENCY_DO_NOT_CARE 0xFFFFFFFF
-
-/* Definitions for AFH Channel Map */
-#define HCI_AFH_CHANNEL_MAP_LEN         10
-
-/* Definitions for Extended Inquiry Response */
-#define HCI_EXT_INQ_RESPONSE_LEN        240
-#define HCI_EIR_FLAGS_TYPE                   BT_EIR_FLAGS_TYPE
-#define HCI_EIR_MORE_16BITS_UUID_TYPE        BT_EIR_MORE_16BITS_UUID_TYPE
-#define HCI_EIR_COMPLETE_16BITS_UUID_TYPE    BT_EIR_COMPLETE_16BITS_UUID_TYPE
-#define HCI_EIR_MORE_32BITS_UUID_TYPE        BT_EIR_MORE_32BITS_UUID_TYPE
-#define HCI_EIR_COMPLETE_32BITS_UUID_TYPE    BT_EIR_COMPLETE_32BITS_UUID_TYPE
-#define HCI_EIR_MORE_128BITS_UUID_TYPE       BT_EIR_MORE_128BITS_UUID_TYPE
-#define HCI_EIR_COMPLETE_128BITS_UUID_TYPE   BT_EIR_COMPLETE_128BITS_UUID_TYPE
-#define HCI_EIR_SHORTENED_LOCAL_NAME_TYPE    BT_EIR_SHORTENED_LOCAL_NAME_TYPE
-#define HCI_EIR_COMPLETE_LOCAL_NAME_TYPE     BT_EIR_COMPLETE_LOCAL_NAME_TYPE
-#define HCI_EIR_TX_POWER_LEVEL_TYPE          BT_EIR_TX_POWER_LEVEL_TYPE
-#define HCI_EIR_MANUFACTURER_SPECIFIC_TYPE   BT_EIR_MANUFACTURER_SPECIFIC_TYPE
-#define HCI_EIR_OOB_BD_ADDR_TYPE             BT_EIR_OOB_BD_ADDR_TYPE
-#define HCI_EIR_OOB_COD_TYPE                 BT_EIR_OOB_COD_TYPE
-#define HCI_EIR_OOB_SSP_HASH_C_TYPE          BT_EIR_OOB_SSP_HASH_C_TYPE
-#define HCI_EIR_OOB_SSP_RAND_R_TYPE          BT_EIR_OOB_SSP_RAND_R_TYPE
-
-/* Definitions for Write Simple Pairing Mode */
-#define HCI_SP_MODE_UNDEFINED           0x00
-#define HCI_SP_MODE_ENABLED             0x01
-
-/* Definitions for Write Simple Pairing Debug Mode */
-#define HCI_SPD_MODE_DISABLED           0x00
-#define HCI_SPD_MODE_ENABLED            0x01
-
-/* Definitions for IO Capability Response/Command */
-#define HCI_IO_CAP_DISPLAY_ONLY         0x00
-#define HCI_IO_CAP_DISPLAY_YESNO        0x01
-#define HCI_IO_CAP_KEYBOARD_ONLY        0x02
-#define HCI_IO_CAP_NO_IO                0x03
-
-#define HCI_OOB_AUTH_DATA_NOT_PRESENT   0x00
-#define HCI_OOB_REM_AUTH_DATA_PRESENT   0x01
-
-#define HCI_MITM_PROTECT_NOT_REQUIRED  0x00
-#define HCI_MITM_PROTECT_REQUIRED      0x01
-
-
-/* Policy settings status */
-#define HCI_DISABLE_ALL_LM_MODES        0x0000
-#define HCI_ENABLE_MASTER_SLAVE_SWITCH  0x0001
-#define HCI_ENABLE_HOLD_MODE            0x0002
-#define HCI_ENABLE_SNIFF_MODE           0x0004
-#define HCI_ENABLE_PARK_MODE            0x0008
-
-/* By default allow switch, because host can not allow that */
-/* that until he created the connection */
-#define HCI_DEFAULT_POLICY_SETTINGS     HCI_DISABLE_ALL_LM_MODES
-
-/* Filters that are sent in set filter command */
-#define HCI_FILTER_TYPE_CLEAR_ALL       0x00
-#define HCI_FILTER_INQUIRY_RESULT       0x01
-#define HCI_FILTER_CONNECTION_SETUP     0x02
-
-#define HCI_FILTER_COND_NEW_DEVICE      0x00
-#define HCI_FILTER_COND_DEVICE_CLASS    0x01
-#define HCI_FILTER_COND_BD_ADDR         0x02
-
-#define HCI_DO_NOT_AUTO_ACCEPT_CONNECT  1
-#define HCI_DO_AUTO_ACCEPT_CONNECT      2   /* role switch disabled */
-#define HCI_DO_AUTO_ACCEPT_CONNECT_RS   3   /* role switch enabled (1.1 errata 1115) */
-
-/* Auto accept flags */
-#define HCI_AUTO_ACCEPT_OFF             0x00
-#define HCI_AUTO_ACCEPT_ACL_CONNECTIONS 0x01
-#define HCI_AUTO_ACCEPT_SCO_CONNECTIONS 0x02
-
-/* PIN type */
-#define HCI_PIN_TYPE_VARIABLE           0
-#define HCI_PIN_TYPE_FIXED              1
-
-/* Loopback Modes */
-#define HCI_LOOPBACK_MODE_DISABLED      0
-#define HCI_LOOPBACK_MODE_LOCAL         1
-#define HCI_LOOPBACK_MODE_REMOTE        2
-
-#define SLOTS_PER_10MS                  16      /* 0.625 ms slots in a 10 ms tick */
-
-/* Maximum connection accept timeout in 0.625msec */
-#define HCI_MAX_CONN_ACCEPT_TOUT        0xB540  /* 29 sec */
-#define HCI_DEF_CONN_ACCEPT_TOUT        0x1F40  /* 5 sec */
-
-/* Page timeout is used in LC only and LC is counting down slots not using OS */
-#define HCI_DEFAULT_PAGE_TOUT           0x2000  /* 5.12 sec (in slots) */
-
-/* Scan enable flags */
-#define HCI_NO_SCAN_ENABLED             0x00
-#define HCI_INQUIRY_SCAN_ENABLED        0x01
-#define HCI_PAGE_SCAN_ENABLED           0x02
-
-/* Pagescan timer definitions in 0.625 ms */
-#define HCI_MIN_PAGESCAN_INTERVAL       0x12    /* 11.25 ms */
-#define HCI_MAX_PAGESCAN_INTERVAL       0x1000  /* 2.56 sec */
-#define HCI_DEF_PAGESCAN_INTERVAL       0x0800  /* 1.28 sec */
-
-/* Parameter for pagescan window is passed to LC and is kept in slots */
-#define HCI_MIN_PAGESCAN_WINDOW         0x11    /* 10.625 ms */
-#define HCI_MAX_PAGESCAN_WINDOW         0x1000  /* 2.56  sec */
-#define HCI_DEF_PAGESCAN_WINDOW         0x12    /* 11.25 ms  */
-
-/* Inquiryscan timer definitions in 0.625 ms */
-#define HCI_MIN_INQUIRYSCAN_INTERVAL    0x12    /* 11.25 ms */
-#define HCI_MAX_INQUIRYSCAN_INTERVAL    0x1000  /* 2.56 sec */
-#define HCI_DEF_INQUIRYSCAN_INTERVAL    0x1000  /* 2.56 sec */
-
-/* Parameter for inquiryscan window is passed to LC and is kept in slots */
-#define HCI_MIN_INQUIRYSCAN_WINDOW      0x11    /* 10.625 ms */
-#define HCI_MAX_INQUIRYSCAN_WINDOW      0x1000  /* 2.56 sec */
-#define HCI_DEF_INQUIRYSCAN_WINDOW      0x12    /* 11.25 ms */
-
-/* Encryption modes */
-#define HCI_ENCRYPT_MODE_DISABLED       0x00
-#define HCI_ENCRYPT_MODE_POINT_TO_POINT 0x01
-#define HCI_ENCRYPT_MODE_ALL            0x02
-
-/* Voice settings */
-#define HCI_INP_CODING_LINEAR           0x0000 /* 0000000000 */
-#define HCI_INP_CODING_U_LAW            0x0100 /* 0100000000 */
-#define HCI_INP_CODING_A_LAW            0x0200 /* 1000000000 */
-#define HCI_INP_CODING_MASK             0x0300 /* 1100000000 */
-
-#define HCI_INP_DATA_FMT_1S_COMPLEMENT  0x0000 /* 0000000000 */
-#define HCI_INP_DATA_FMT_2S_COMPLEMENT  0x0040 /* 0001000000 */
-#define HCI_INP_DATA_FMT_SIGN_MAGNITUDE 0x0080 /* 0010000000 */
-#define HCI_INP_DATA_FMT_UNSIGNED       0x00c0 /* 0011000000 */
-#define HCI_INP_DATA_FMT_MASK           0x00c0 /* 0011000000 */
-
-#define HCI_INP_SAMPLE_SIZE_8BIT        0x0000 /* 0000000000 */
-#define HCI_INP_SAMPLE_SIZE_16BIT       0x0020 /* 0000100000 */
-#define HCI_INP_SAMPLE_SIZE_MASK        0x0020 /* 0000100000 */
-
-#define HCI_INP_LINEAR_PCM_BIT_POS_MASK 0x001c /* 0000011100 */
-#define HCI_INP_LINEAR_PCM_BIT_POS_OFFS 2
-
-#define HCI_AIR_CODING_FORMAT_CVSD      0x0000 /* 0000000000 */
-#define HCI_AIR_CODING_FORMAT_U_LAW     0x0001 /* 0000000001 */
-#define HCI_AIR_CODING_FORMAT_A_LAW     0x0002 /* 0000000010 */
-#define HCI_AIR_CODING_FORMAT_TRANSPNT  0x0003 /* 0000000011 */
-#define HCI_AIR_CODING_FORMAT_MASK      0x0003 /* 0000000011 */
-
-/* default                                        0001100000 */
-#define HCI_DEFAULT_VOICE_SETTINGS    (HCI_INP_CODING_LINEAR \
-                                     | HCI_INP_DATA_FMT_2S_COMPLEMENT \
-                                     | HCI_INP_SAMPLE_SIZE_16BIT \
-                                     | HCI_AIR_CODING_FORMAT_CVSD)
-
-#define HCI_CVSD_SUPPORTED(x)       (((x) & HCI_AIR_CODING_FORMAT_MASK) == HCI_AIR_CODING_FORMAT_CVSD)
-#define HCI_U_LAW_SUPPORTED(x)      (((x) & HCI_AIR_CODING_FORMAT_MASK) == HCI_AIR_CODING_FORMAT_U_LAW)
-#define HCI_A_LAW_SUPPORTED(x)      (((x) & HCI_AIR_CODING_FORMAT_MASK) == HCI_AIR_CODING_FORMAT_A_LAW)
-#define HCI_TRANSPNT_SUPPORTED(x)   (((x) & HCI_AIR_CODING_FORMAT_MASK) == HCI_AIR_CODING_FORMAT_TRANSPNT)
-
-/* Retransmit timer definitions in 0.625 */
-#define HCI_MAX_AUTO_FLUSH_TOUT         0x07FF
-#define HCI_DEFAULT_AUTO_FLUSH_TOUT     0       /* No auto flush */
-
-/* Broadcast retransmitions */
-#define HCI_DEFAULT_NUM_BCAST_RETRAN    1
-
-/* Define broadcast data types as passed in the hci data packet */
-#define HCI_DATA_POINT_TO_POINT         0x00
-#define HCI_DATA_ACTIVE_BCAST           0x01
-#define HCI_DATA_PICONET_BCAST          0x02
-
-/* Hold mode activity */
-#define HCI_MAINTAIN_CUR_POWER_STATE    0x00
-#define HCI_SUSPEND_PAGE_SCAN           0x01
-#define HCI_SUSPEND_INQUIRY_SCAN        0x02
-#define HCI_SUSPEND_PERIODIC_INQUIRIES  0x04
-
-/* Default Link Supervision timeoout */
-#define HCI_DEFAULT_INACT_TOUT          0x7D00  /* BR/EDR (20 seconds) */
-#define HCI_DEFAULT_AMP_INACT_TOUT      0x3E80  /* AMP    (10 seconds) */
-
-/* Read transmit power level parameter */
-#define HCI_READ_CURRENT                0x00
-#define HCI_READ_MAXIMUM                0x01
-
-/* Link types for connection complete event */
-#define HCI_LINK_TYPE_SCO               0x00
-#define HCI_LINK_TYPE_ACL               0x01
-#define HCI_LINK_TYPE_ESCO              0x02
-
-/* Link Key Notification Event (Key Type) definitions */
-#define HCI_LKEY_TYPE_COMBINATION       0x00
-#define HCI_LKEY_TYPE_LOCAL_UNIT        0x01
-#define HCI_LKEY_TYPE_REMOTE_UNIT       0x02
-#define HCI_LKEY_TYPE_DEBUG_COMB        0x03
-#define HCI_LKEY_TYPE_UNAUTH_COMB       0x04
-#define HCI_LKEY_TYPE_AUTH_COMB         0x05
-#define HCI_LKEY_TYPE_CHANGED_COMB      0x06
-
-/* Internal definitions - not used over HCI */
-#define HCI_LKEY_TYPE_AMP_WIFI          0x80
-#define HCI_LKEY_TYPE_AMP_UWB           0x81
-#define HCI_LKEY_TYPE_UNKNOWN           0xff
-
-/* Read Local Version HCI Version return values (Command Complete Event) */
-#define HCI_VERSION_1_0B                0x00
-#define HCI_VERSION_1_1                 0x01
-
-/* Define an invalid value for a handle */
-#define HCI_INVALID_HANDLE              0xFFFF
-
-/* Define max ammount of data in the HCI command */
-#define HCI_COMMAND_SIZE        255
-
-/* Define the preamble length for all HCI Commands.
-** This is 2-bytes for opcode and 1 byte for length
-*/
-#define HCIC_PREAMBLE_SIZE      3
-
-/* Define the preamble length for all HCI Events
-** This is 1-byte for opcode and 1 byte for length
-*/
-#define HCIE_PREAMBLE_SIZE      2
-#define HCI_SCO_PREAMBLE_SIZE   3
-#define HCI_DATA_PREAMBLE_SIZE  4
-
-/* local Bluetooth controller id for AMP HCI */
-#define LOCAL_BR_EDR_CONTROLLER_ID      0
-
-/* controller id types for AMP HCI */
-#define HCI_CONTROLLER_TYPE_BR_EDR      0
-#define HCI_CONTROLLER_TYPE_802_11      1
-#define HCI_CONTROLLER_TYPE_ECMA        2
-#define HCI_MAX_CONTROLLER_TYPES        3
-
-
-
-
-/* AMP Controller Status codes
-*/
-#define HCI_AMP_CTRLR_PHYSICALLY_DOWN   0
-#define HCI_AMP_CTRLR_USABLE_BY_BT      1
-#define HCI_AMP_CTRLR_UNUSABLE_FOR_BT   2
-#define HCI_AMP_CTRLR_LOW_CAP_FOR_BT    3
-#define HCI_AMP_CTRLR_MED_CAP_FOR_BT    4
-#define HCI_AMP_CTRLR_HIGH_CAP_FOR_BT   5
-#define HCI_AMP_CTRLR_FULL_CAP_FOR_BT   6
-
-#define HCI_MAX_AMP_STATUS_TYPES        7
-
-
-/* Define the extended flow specification fields used by AMP */
-typedef struct
-{
-    UINT8       id;
-    UINT8       stype;
-    UINT16      max_sdu_size;
-    UINT32      sdu_inter_time;
-    UINT32      access_latency;
-    UINT32      flush_timeout;
-} tHCI_EXT_FLOW_SPEC;
-
-
-/* HCI message type definitions (for H4 messages) */
-#define HCIT_TYPE_ACL_DATA  2
-#define HCIT_TYPE_SCO_DATA  3
-#define HCIT_TYPE_LM_DIAG   7
-
-#define HCIT_LM_DIAG_LENGTH 63
-
-/* Define values for LMP Test Control parameters
-** Test Scenario, Hopping Mode, Power Control Mode
-*/
-#define LMP_TESTCTL_TESTSC_PAUSE        0
-#define LMP_TESTCTL_TESTSC_TXTEST_0     1
-#define LMP_TESTCTL_TESTSC_TXTEST_1     2
-#define LMP_TESTCTL_TESTSC_TXTEST_1010  3
-#define LMP_TESTCTL_TESTSC_PSRND_BITSEQ 4
-#define LMP_TESTCTL_TESTSC_CLOSEDLB_ACL 5
-#define LMP_TESTCTL_TESTSC_CLOSEDLB_SCO 6
-#define LMP_TESTCTL_TESTSC_ACL_NOWHIT   7
-#define LMP_TESTCTL_TESTSC_SCO_NOWHIT   8
-#define LMP_TESTCTL_TESTSC_TXTEST_11110000  9
-#define LMP_TESTCTL_TESTSC_EXITTESTMODE 255
-
-#define LMP_TESTCTL_HOPMOD_RXTX1FREQ    0
-#define LMP_TESTCTL_HOPMOD_HOP_EURUSA   1
-#define LMP_TESTCTL_HOPMOD_HOP_JAPAN    2
-#define LMP_TESTCTL_HOPMOD_HOP_FRANCE   3
-#define LMP_TESTCTL_HOPMOD_HOP_SPAIN    4
-#define LMP_TESTCTL_HOPMOD_REDUCED_HOP  5
-
-#define LMP_TESTCTL_POWCTL_FIXEDTX_OP   0
-#define LMP_TESTCTL_POWCTL_ADAPTIVE     1
-
-
-/*
-** Define company IDs (from Bluetooth Assigned Numbers v1.1, section 2.2)
-*/
-#define LMP_COMPID_ERICSSON             0
-#define LMP_COMPID_NOKIA                1
-#define LMP_COMPID_INTEL                2
-#define LMP_COMPID_IBM                  3
-#define LMP_COMPID_TOSHIBA              4
-#define LMP_COMPID_3COM                 5
-#define LMP_COMPID_MICROSOFT            6
-#define LMP_COMPID_LUCENT               7
-#define LMP_COMPID_MOTOROLA             8
-#define LMP_COMPID_INFINEON             9
-#define LMP_COMPID_CSR                  10
-#define LMP_COMPID_SILICON_WAVE         11
-#define LMP_COMPID_DIGIANSWER           12
-#define LMP_COMPID_TEXAS_INSTRUMENTS    13
-#define LMP_COMPID_PARTHUS              14
-#define LMP_COMPID_BROADCOM             15
-#define LMP_COMPID_MITEL_SEMI           16
-#define LMP_COMPID_WIDCOMM              17
-#define LMP_COMPID_ZEEVO                18
-#define LMP_COMPID_ATMEL                19
-#define LMP_COMPID_MITSUBISHI           20
-#define LMP_COMPID_RTX_TELECOM          21
-#define LMP_COMPID_KC_TECH              22
-#define LMP_COMPID_NEWLOGIC             23
-#define LMP_COMPID_TRANSILICA           24
-#define LMP_COMPID_ROHDE_SCHWARZ        25
-#define LMP_COMPID_TTPCOM               26
-#define LMP_COMPID_SIGNIA               27
-#define LMP_COMPID_CONEXANT             28
-#define LMP_COMPID_QUALCOMM             29
-#define LMP_COMPID_INVENTEL             30
-#define LMP_COMPID_AVM                  31
-#define LMP_COMPID_BANDSPEED            32
-#define LMP_COMPID_MANSELLA             33
-#define LMP_COMPID_NEC_CORP             34
-#define LMP_COMPID_WAVEPLUS             35
-#define LMP_COMPID_ALCATEL              36
-#define LMP_COMPID_PHILIPS              37
-#define LMP_COMPID_C_TECHNOLOGIES       38
-#define LMP_COMPID_OPEN_INTERFACE       39
-#define LMP_COMPID_RF_MICRO             40
-#define LMP_COMPID_HITACHI              41
-#define LMP_COMPID_SYMBOL_TECH          42
-#define LMP_COMPID_TENOVIS              43
-#define LMP_COMPID_MACRONIX             44
-#define LMP_COMPID_GCT_SEMI             45
-#define LMP_COMPID_NORWOOD_SYSTEMS      46
-#define LMP_COMPID_MEWTEL_TECH          47
-#define LMP_COMPID_STM                  48
-#define LMP_COMPID_SYNOPSYS             49
-#define LMP_COMPID_RED_M_LTD            50
-#define LMP_COMPID_COMMIL_LTD           51
-#define LMP_COMPID_CATC                 52
-#define LMP_COMPID_ECLIPSE              53
-#define LMP_COMPID_RENESAS_TECH         54
-#define LMP_COMPID_MOBILIAN_CORP        55
-#define LMP_COMPID_TERAX                56
-#define LMP_COMPID_ISSC                 57
-#define LMP_COMPID_MATSUSHITA           58
-#define LMP_COMPID_GENNUM_CORP          59
-#define LMP_COMPID_RESEARCH_IN_MOTION   60
-#define LMP_COMPID_IPEXTREME            61
-#define LMP_COMPID_SYSTEMS_AND_CHIPS    62
-#define LMP_COMPID_BLUETOOTH_SIG        63
-#define LMP_COMPID_SEIKO_EPSON_CORP     64
-#define LMP_COMPID_ISS_TAIWAN           65
-#define LMP_COMPID_CONWISE_TECHNOLOGIES 66
-#define LMP_COMPID_PARROT_SA            67
-#define LMP_COMPID_SOCKET_COMM          68
-#define LMP_COMPID_ALTHEROS             69
-#define LMP_COMPID_MEDIATEK             70
-#define LMP_COMPID_BLUEGIGA             71
-#define LMP_COMPID_MARVELL              72
-#define LMP_COMPID_3DSP_CORP            73
-#define LMP_COMPID_ACCEL_SEMICONDUCTOR  74
-#define LMP_COMPID_CONTINENTAL_AUTO     75
-#define LMP_COMPID_APPLE                76
-#define LMP_COMPID_STACCATO             77
-#define LMP_COMPID_AVAGO_TECHNOLOGIES   78
-#define LMP_COMPID_APT_LTD              79
-#define LMP_COMPID_SIRF_TECHNOLOGY      80
-#define LMP_COMPID_TZERO_TECHNOLOGY     81
-#define LMP_COMPID_J_AND_M_CORP         82
-#define LMP_COMPID_FREE_2_MOVE          83
-#define LMP_COMPID_3DIJOY_CORP          84
-#define LMP_COMPID_PLANTRONICS          85
-#define LMP_COMPID_SONY_ERICSSON_MOBILE 86
-#define LMP_COMPID_HARMON_INTL_IND      87
-#define LMP_COMPID_VIZIO                88
-#define LMP_COMPID_NORDIC SEMI          89
-#define LMP_COMPID_EM MICRO             90
-#define LMP_COMPID_RALINK TECH          91
-#define LMP_COMPID_BELKIN INC           92
-#define LMP_COMPID_REALTEK SEMI         93
-#define LMP_COMPID_STONESTREET ONE      94
-#define LMP_COMPID_WICENTRIC            95
-#define LMP_COMPID_RIVIERAWAVES         96
-#define LMP_COMPID_RDA MICRO            97
-#define LMP_COMPID_GIBSON GUITARS       98
-#define LMP_COMPID_MICOMMAND INC        99
-#define LMP_COMPID_BAND XI              100
-#define LMP_COMPID_HP COMPANY           101
-#define LMP_COMPID_9SOLUTIONS OY        102
-#define LMP_COMPID_GN NETCOM            103
-#define LMP_COMPID_GENERAL MOTORS       104
-#define LMP_COMPID_AD ENGINEERING       105
-#define LMP_COMPID_MINDTREE LTD         106
-#define LMP_COMPID_POLAR ELECTRO        107
-#define LMP_COMPID_BEAUTIFUL ENTERPRISE 108
-#define LMP_COMPID_BRIARTEK             109
-#define LMP_COMPID_SUMMIT DATA COMM     110
-#define LMP_COMPID_SOUND ID             111
-#define LMP_COMPID_MONSTER LLC          112
-#define LMP_COMPID_CONNECTBLU           113
-#define LMP_COMPID_MAX_ID               114 /* this is a place holder */
-#define LMP_COMPID_INTERNAL             65535
-
-#define MAX_LMP_COMPID                  (LMP_COMPID_MAX_ID)
-/*
-** Define the packet types in the packet header, and a couple extra
-*/
-#define PKT_TYPE_NULL   0x00
-#define PKT_TYPE_POLL   0x01
-#define PKT_TYPE_FHS    0x02
-#define PKT_TYPE_DM1    0x03
-
-#define PKT_TYPE_DH1    0x04
-#define PKT_TYPE_HV1    0x05
-#define PKT_TYPE_HV2    0x06
-#define PKT_TYPE_HV3    0x07
-#define PKT_TYPE_DV     0x08
-#define PKT_TYPE_AUX1   0x09
-
-#define PKT_TYPE_DM3    0x0a
-#define PKT_TYPE_DH3    0x0b
-
-#define PKT_TYPE_DM5    0x0e
-#define PKT_TYPE_DH5    0x0f
-
-
-#define PKT_TYPE_ID     0x10        /* Internally used packet types */
-#define PKT_TYPE_BAD    0x11
-#define PKT_TYPE_NONE   0x12
-
-/*
-** Define packet size
-*/
-#define HCI_DM1_PACKET_SIZE         17
-#define HCI_DH1_PACKET_SIZE         27
-#define HCI_DM3_PACKET_SIZE         121
-#define HCI_DH3_PACKET_SIZE         183
-#define HCI_DM5_PACKET_SIZE         224
-#define HCI_DH5_PACKET_SIZE         339
-#define HCI_AUX1_PACKET_SIZE        29
-#define HCI_HV1_PACKET_SIZE         10
-#define HCI_HV2_PACKET_SIZE         20
-#define HCI_HV3_PACKET_SIZE         30
-#define HCI_DV_PACKET_SIZE          9
-#define HCI_EDR2_DH1_PACKET_SIZE    54
-#define HCI_EDR2_DH3_PACKET_SIZE    367
-#define HCI_EDR2_DH5_PACKET_SIZE    679
-#define HCI_EDR3_DH1_PACKET_SIZE    83
-#define HCI_EDR3_DH3_PACKET_SIZE    552
-#define HCI_EDR3_DH5_PACKET_SIZE    1021
-
-/*
-**   Features encoding - page 0
-*/
-#define HCI_NUM_FEATURE_BYTES           8
-#define HCI_FEATURES_KNOWN(x) ((x[0] | x[1] | x[2] | x[3] | x[4] | x[5] | x[6] | x[7]) != 0)
-
-#define HCI_FEATURE_3_SLOT_PACKETS_MASK 0x01
-#define HCI_FEATURE_3_SLOT_PACKETS_OFF  0
-#define HCI_3_SLOT_PACKETS_SUPPORTED(x) ((x)[HCI_FEATURE_3_SLOT_PACKETS_OFF] & HCI_FEATURE_3_SLOT_PACKETS_MASK)
-
-#define HCI_FEATURE_5_SLOT_PACKETS_MASK 0x02
-#define HCI_FEATURE_5_SLOT_PACKETS_OFF  0
-#define HCI_5_SLOT_PACKETS_SUPPORTED(x) ((x)[HCI_FEATURE_5_SLOT_PACKETS_OFF] & HCI_FEATURE_5_SLOT_PACKETS_MASK)
-
-#define HCI_FEATURE_ENCRYPTION_MASK     0x04
-#define HCI_FEATURE_ENCRYPTION_OFF      0
-#define HCI_ENCRYPTION_SUPPORTED(x)     ((x)[HCI_FEATURE_ENCRYPTION_OFF] & HCI_FEATURE_ENCRYPTION_MASK)
-
-#define HCI_FEATURE_SLOT_OFFSET_MASK    0x08
-#define HCI_FEATURE_SLOT_OFFSET_OFF     0
-#define HCI_SLOT_OFFSET_SUPPORTED(x)    ((x)[HCI_FEATURE_SLOT_OFFSET_OFF] & HCI_FEATURE_SLOT_OFFSET_MASK)
-
-#define HCI_FEATURE_TIMING_ACC_MASK     0x10
-#define HCI_FEATURE_TIMING_ACC_OFF      0
-#define HCI_TIMING_ACC_SUPPORTED(x)     ((x)[HCI_FEATURE_TIMING_ACC_OFF] & HCI_FEATURE_TIMING_ACC_MASK)
-
-#define HCI_FEATURE_SWITCH_MASK         0x20
-#define HCI_FEATURE_SWITCH_OFF          0
-#define HCI_SWITCH_SUPPORTED(x)         ((x)[HCI_FEATURE_SWITCH_OFF] & HCI_FEATURE_SWITCH_MASK)
-
-#define HCI_FEATURE_HOLD_MODE_MASK      0x40
-#define HCI_FEATURE_HOLD_MODE_OFF       0
-#define HCI_HOLD_MODE_SUPPORTED(x)      ((x)[HCI_FEATURE_HOLD_MODE_OFF] & HCI_FEATURE_HOLD_MODE_MASK)
-
-#define HCI_FEATURE_SNIFF_MODE_MASK     0x80
-#define HCI_FEATURE_SNIFF_MODE_OFF      0
-#define HCI_SNIFF_MODE_SUPPORTED(x)      ((x)[HCI_FEATURE_SNIFF_MODE_OFF] & HCI_FEATURE_SNIFF_MODE_MASK)
-
-#define HCI_FEATURE_PARK_MODE_MASK      0x01
-#define HCI_FEATURE_PARK_MODE_OFF       1
-#define HCI_PARK_MODE_SUPPORTED(x)      ((x)[HCI_FEATURE_PARK_MODE_OFF] & HCI_FEATURE_PARK_MODE_MASK)
-
-#define HCI_FEATURE_RSSI_MASK           0x02
-#define HCI_FEATURE_RSSI_OFF            1
-#define HCI_RSSI_SUPPORTED(x)           ((x)[HCI_FEATURE_RSSI_OFF] & HCI_FEATURE_RSSI_MASK)
-
-#define HCI_FEATURE_CQM_DATA_RATE_MASK  0x04
-#define HCI_FEATURE_CQM_DATA_RATE_OFF   1
-#define HCI_CQM_DATA_RATE_SUPPORTED(x)  ((x)[HCI_FEATURE_CQM_DATA_RATE_OFF] & HCI_FEATURE_CQM_DATA_RATE_MASK)
-
-#define HCI_FEATURE_SCO_LINK_MASK       0x08
-#define HCI_FEATURE_SCO_LINK_OFF        1
-#define HCI_SCO_LINK_SUPPORTED(x)       ((x)[HCI_FEATURE_SCO_LINK_OFF] & HCI_FEATURE_SCO_LINK_MASK)
-
-#define HCI_FEATURE_HV2_PACKETS_MASK    0x10
-#define HCI_FEATURE_HV2_PACKETS_OFF     1
-#define HCI_HV2_PACKETS_SUPPORTED(x)    ((x)[HCI_FEATURE_HV2_PACKETS_OFF] & HCI_FEATURE_HV2_PACKETS_MASK)
-
-#define HCI_FEATURE_HV3_PACKETS_MASK    0x20
-#define HCI_FEATURE_HV3_PACKETS_OFF     1
-#define HCI_HV3_PACKETS_SUPPORTED(x)    ((x)[HCI_FEATURE_HV3_PACKETS_OFF] & HCI_FEATURE_HV3_PACKETS_MASK)
-
-#define HCI_FEATURE_U_LAW_MASK          0x40
-#define HCI_FEATURE_U_LAW_OFF           1
-#define HCI_LMP_U_LAW_SUPPORTED(x)      ((x)[HCI_FEATURE_U_LAW_OFF] & HCI_FEATURE_U_LAW_MASK)
-
-#define HCI_FEATURE_A_LAW_MASK          0x80
-#define HCI_FEATURE_A_LAW_OFF           1
-#define HCI_LMP_A_LAW_SUPPORTED(x)      ((x)[HCI_FEATURE_A_LAW_OFF] & HCI_FEATURE_A_LAW_MASK)
-
-#define HCI_FEATURE_CVSD_MASK           0x01
-#define HCI_FEATURE_CVSD_OFF            2
-#define HCI_LMP_CVSD_SUPPORTED(x)       ((x)[HCI_FEATURE_CVSD_OFF] & HCI_FEATURE_CVSD_MASK)
-
-#define HCI_FEATURE_PAGING_SCHEME_MASK  0x02
-#define HCI_FEATURE_PAGING_SCHEME_OFF   2
-#define HCI_PAGING_SCHEME_SUPPORTED(x) ((x)[HCI_FEATURE_PAGING_SCHEME_OFF] & HCI_FEATURE_PAGING_SCHEME_MASK)
-
-#define HCI_FEATURE_POWER_CTRL_MASK     0x04
-#define HCI_FEATURE_POWER_CTRL_OFF      2
-#define HCI_POWER_CTRL_SUPPORTED(x)     ((x)[HCI_FEATURE_POWER_CTRL_OFF] & HCI_FEATURE_POWER_CTRL_MASK)
-
-#define HCI_FEATURE_TRANSPNT_MASK       0x08
-#define HCI_FEATURE_TRANSPNT_OFF        2
-#define HCI_LMP_TRANSPNT_SUPPORTED(x)   ((x)[HCI_FEATURE_TRANSPNT_OFF] & HCI_FEATURE_TRANSPNT_MASK)
-
-#define HCI_FEATURE_FLOW_CTRL_LAG_MASK  0x70
-#define HCI_FEATURE_FLOW_CTRL_LAG_OFF   2
-#define HCI_FLOW_CTRL_LAG_VALUE(x)      (((x)[HCI_FEATURE_FLOW_CTRL_LAG_OFF] & HCI_FEATURE_FLOW_CTRL_LAG_MASK) >> 4)
-
-#define HCI_FEATURE_BROADCAST_ENC_MASK  0x80
-#define HCI_FEATURE_BROADCAST_ENC_OFF   2
-#define HCI_LMP_BCAST_ENC_SUPPORTED(x)  ((x)[HCI_FEATURE_BROADCAST_ENC_OFF] & HCI_FEATURE_BROADCAST_ENC_MASK)
-
-#define HCI_FEATURE_SCATTER_MODE_MASK   0x01
-#define HCI_FEATURE_SCATTER_MODE_OFF    3
-#define HCI_LMP_SCATTER_MODE_SUPPORTED(x) ((x)[HCI_FEATURE_SCATTER_MODE_OFF] & HCI_FEATURE_SCATTER_MODE_MASK)
-
-#define HCI_FEATURE_EDR_ACL_2MPS_MASK   0x02
-#define HCI_FEATURE_EDR_ACL_2MPS_OFF    3
-#define HCI_EDR_ACL_2MPS_SUPPORTED(x)   ((x)[HCI_FEATURE_EDR_ACL_2MPS_OFF] & HCI_FEATURE_EDR_ACL_2MPS_MASK)
-
-#define HCI_FEATURE_EDR_ACL_3MPS_MASK   0x04
-#define HCI_FEATURE_EDR_ACL_3MPS_OFF    3
-#define HCI_EDR_ACL_3MPS_SUPPORTED(x)   ((x)[HCI_FEATURE_EDR_ACL_3MPS_OFF] & HCI_FEATURE_EDR_ACL_3MPS_MASK)
-
-#define HCI_FEATURE_ENHANCED_INQ_MASK   0x08
-#define HCI_FEATURE_ENHANCED_INQ_OFF    3
-#define HCI_ENHANCED_INQ_SUPPORTED(x)   ((x)[HCI_FEATURE_ENHANCED_INQ_OFF] & HCI_FEATURE_ENHANCED_INQ_MASK)
-
-#define HCI_FEATURE_INTERLACED_INQ_SCAN_MASK   0x10
-#define HCI_FEATURE_INTERLACED_INQ_SCAN_OFF    3
-#define HCI_LMP_INTERLACED_INQ_SCAN_SUPPORTED(x) ((x)[HCI_FEATURE_INTERLACED_INQ_SCAN_OFF] & HCI_FEATURE_INTERLACED_INQ_SCAN_MASK)
-
-#define HCI_FEATURE_INTERLACED_PAGE_SCAN_MASK  0x20
-#define HCI_FEATURE_INTERLACED_PAGE_SCAN_OFF   3
-#define HCI_LMP_INTERLACED_PAGE_SCAN_SUPPORTED(x) ((x)[HCI_FEATURE_INTERLACED_PAGE_SCAN_OFF] & HCI_FEATURE_INTERLACED_PAGE_SCAN_MASK)
-
-#define HCI_FEATURE_INQ_RSSI_MASK       0x40
-#define HCI_FEATURE_INQ_RSSI_OFF        3
-#define HCI_LMP_INQ_RSSI_SUPPORTED(x)   ((x)[HCI_FEATURE_INQ_RSSI_OFF] & HCI_FEATURE_INQ_RSSI_MASK)
-
-#define HCI_FEATURE_ESCO_EV3_MASK       0x80
-#define HCI_FEATURE_ESCO_EV3_OFF        3
-#define HCI_ESCO_EV3_SUPPORTED(x)       ((x)[HCI_FEATURE_ESCO_EV3_OFF] & HCI_FEATURE_ESCO_EV3_MASK)
-
-#define HCI_FEATURE_ESCO_EV4_MASK       0x01
-#define HCI_FEATURE_ESCO_EV4_OFF        4
-#define HCI_ESCO_EV4_SUPPORTED(x)       ((x)[HCI_FEATURE_ESCO_EV4_OFF] & HCI_FEATURE_ESCO_EV4_MASK)
-
-#define HCI_FEATURE_ESCO_EV5_MASK       0x02
-#define HCI_FEATURE_ESCO_EV5_OFF        4
-#define HCI_ESCO_EV5_SUPPORTED(x)       ((x)[HCI_FEATURE_ESCO_EV5_OFF] & HCI_FEATURE_ESCO_EV5_MASK)
-
-#define HCI_FEATURE_ABSENCE_MASKS_MASK  0x04
-#define HCI_FEATURE_ABSENCE_MASKS_OFF   4
-#define HCI_LMP_ABSENCE_MASKS_SUPPORTED(x) ((x)[HCI_FEATURE_ABSENCE_MASKS_OFF] & HCI_FEATURE_ABSENCE_MASKS_MASK)
-
-#define HCI_FEATURE_AFH_CAP_SLAVE_MASK  0x08
-#define HCI_FEATURE_AFH_CAP_SLAVE_OFF   4
-#define HCI_LMP_AFH_CAP_SLAVE_SUPPORTED(x) ((x)[HCI_FEATURE_AFH_CAP_SLAVE_OFF] & HCI_FEATURE_AFH_CAP_SLAVE_MASK)
-
-#define HCI_FEATURE_AFH_CLASS_SLAVE_MASK 0x10
-#define HCI_FEATURE_AFH_CLASS_SLAVE_OFF  4
-#define HCI_LMP_AFH_CLASS_SLAVE_SUPPORTED(x) ((x)[HCI_FEATURE_AFH_CLASS_SLAVE_OFF] & HCI_FEATURE_AFH_CLASS_SLAVE_MASK)
-
-#define HCI_FEATURE_ALIAS_AUTH_MASK     0x20
-#define HCI_FEATURE_ALIAS_AUTH_OFF      4
-#define HCI_LMP_ALIAS_AUTH_SUPPORTED(x) ((x)[HCI_FEATURE_ALIAS_AUTH_OFF] & HCI_FEATURE_ALIAS_AUTH_MASK)
-
-#define HCI_FEATURE_ANON_MODE_MASK      0x40
-#define HCI_FEATURE_ANON_MODE_OFF       4
-#define HCI_LMP_ANON_MODE_SUPPORTED(x)  ((x)[HCI_FEATURE_ANON_MODE_OFF] & HCI_FEATURE_ANON_MODE_MASK)
-
-#define HCI_FEATURE_3_SLOT_EDR_ACL_MASK 0x80
-#define HCI_FEATURE_3_SLOT_EDR_ACL_OFF  4
-#define HCI_3_SLOT_EDR_ACL_SUPPORTED(x) ((x)[HCI_FEATURE_3_SLOT_EDR_ACL_OFF] & HCI_FEATURE_3_SLOT_EDR_ACL_MASK)
-
-#define HCI_FEATURE_5_SLOT_EDR_ACL_MASK 0x01
-#define HCI_FEATURE_5_SLOT_EDR_ACL_OFF  5
-#define HCI_5_SLOT_EDR_ACL_SUPPORTED(x) ((x)[HCI_FEATURE_5_SLOT_EDR_ACL_OFF] & HCI_FEATURE_5_SLOT_EDR_ACL_MASK)
-
-#define HCI_FEATURE_SNIFF_SUB_RATE_MASK 0x02
-#define HCI_FEATURE_SNIFF_SUB_RATE_OFF  5
-#define HCI_SNIFF_SUB_RATE_SUPPORTED(x) ((x)[HCI_FEATURE_SNIFF_SUB_RATE_OFF] & HCI_FEATURE_SNIFF_SUB_RATE_MASK)
-
-#define HCI_FEATURE_ATOMIC_ENCRYPT_MASK 0x04
-#define HCI_FEATURE_ATOMIC_ENCRYPT_OFF  5
-#define HCI_ATOMIC_ENCRYPT_SUPPORTED(x) ((x)[HCI_FEATURE_ATOMIC_ENCRYPT_OFF] & HCI_FEATURE_ATOMIC_ENCRYPT_MASK)
-
-#define HCI_FEATURE_AFH_CAP_MASTR_MASK  0x08
-#define HCI_FEATURE_AFH_CAP_MASTR_OFF   5
-#define HCI_LMP_AFH_CAP_MASTR_SUPPORTED(x) ((x)[HCI_FEATURE_AFH_CAP_MASTR_OFF] & HCI_FEATURE_AFH_CAP_MASTR_MASK)
-
-#define HCI_FEATURE_AFH_CLASS_MASTR_MASK 0x10
-#define HCI_FEATURE_AFH_CLASS_MASTR_OFF  5
-#define HCI_LMP_AFH_CLASS_MASTR_SUPPORTED(x) ((x)[HCI_FEATURE_AFH_CLASS_MASTR_OFF] & HCI_FEATURE_AFH_CLASS_MASTR_MASK)
-
-#define HCI_FEATURE_EDR_ESCO_2MPS_MASK  0x20
-#define HCI_FEATURE_EDR_ESCO_2MPS_OFF   5
-#define HCI_EDR_ESCO_2MPS_SUPPORTED(x)  ((x)[HCI_FEATURE_EDR_ESCO_2MPS_OFF] & HCI_FEATURE_EDR_ESCO_2MPS_MASK)
-
-#define HCI_FEATURE_EDR_ESCO_3MPS_MASK  0x40
-#define HCI_FEATURE_EDR_ESCO_3MPS_OFF   5
-#define HCI_EDR_ESCO_3MPS_SUPPORTED(x)  ((x)[HCI_FEATURE_EDR_ESCO_3MPS_OFF] & HCI_FEATURE_EDR_ESCO_3MPS_MASK)
-
-#define HCI_FEATURE_3_SLOT_EDR_ESCO_MASK 0x80
-#define HCI_FEATURE_3_SLOT_EDR_ESCO_OFF  5
-#define HCI_3_SLOT_EDR_ESCO_SUPPORTED(x) ((x)[HCI_FEATURE_3_SLOT_EDR_ESCO_OFF] & HCI_FEATURE_3_SLOT_EDR_ESCO_MASK)
-
-#define HCI_FEATURE_EXT_INQ_RSP_MASK    0x01
-#define HCI_FEATURE_EXT_INQ_RSP_OFF     6
-#define HCI_EXT_INQ_RSP_SUPPORTED(x)    ((x)[HCI_FEATURE_EXT_INQ_RSP_OFF] & HCI_FEATURE_EXT_INQ_RSP_MASK)
-
-#define HCI_FEATURE_ANUM_PIN_AWARE_MASK 0x02
-#define HCI_FEATURE_ANUM_PIN_AWARE_OFF  6
-#define HCI_ANUM_PIN_AWARE_SUPPORTED(x) ((x)[HCI_FEATURE_ANUM_PIN_AWARE_OFF] & HCI_FEATURE_ANUM_PIN_AWARE_MASK)
-
-#define HCI_FEATURE_ANUM_PIN_CAP_MASK   0x04
-#define HCI_FEATURE_ANUM_PIN_CAP_OFF    6
-#define HCI_ANUM_PIN_CAP_SUPPORTED(x)   ((x)[HCI_FEATURE_ANUM_PIN_CAP_OFF] & HCI_FEATURE_ANUM_PIN_CAP_MASK)
-
-#define HCI_FEATURE_SIMPLE_PAIRING_MASK 0x08
-#define HCI_FEATURE_SIMPLE_PAIRING_OFF  6
-#define HCI_SIMPLE_PAIRING_SUPPORTED(x) ((x)[HCI_FEATURE_SIMPLE_PAIRING_OFF] & HCI_FEATURE_SIMPLE_PAIRING_MASK)
-
-#define HCI_FEATURE_ENCAP_PDU_MASK      0x10
-#define HCI_FEATURE_ENCAP_PDU_OFF       6
-#define HCI_ENCAP_PDU_SUPPORTED(x)      ((x)[HCI_FEATURE_ENCAP_PDU_OFF] & HCI_FEATURE_ENCAP_PDU_MASK)
-
-#define HCI_FEATURE_ERROR_DATA_MASK     0x20
-#define HCI_FEATURE_ERROR_DATA_OFF      6
-#define HCI_ERROR_DATA_SUPPORTED(x)     ((x)[HCI_FEATURE_ERROR_DATA_OFF] & HCI_FEATURE_ERROR_DATA_MASK)
-
-#define HCI_FEATURE_NON_FLUSHABLE_PB_MASK      0x40
-#define HCI_FEATURE_NON_FLUSHABLE_PB_OFF       6
-#define HCI_NON_FLUSHABLE_PB_SUPPORTED(x)      ((x)[HCI_FEATURE_NON_FLUSHABLE_PB_OFF] & HCI_FEATURE_NON_FLUSHABLE_PB_MASK)
-
-#define HCI_FEATURE_LINK_SUP_TO_EVT_MASK 0x01
-#define HCI_FEATURE_LINK_SUP_TO_EVT_OFF  7
-#define HCI_LINK_SUP_TO_EVT_SUPPORTED(x) ((x)[HCI_FEATURE_LINK_SUP_TO_EVT_OFF] & HCI_FEATURE_LINK_SUP_TO_EVT_MASK)
-
-#define HCI_FEATURE_INQ_RESP_TX_MASK     0x02
-#define HCI_FEATURE_INQ_RESP_TX_OFF      7
-#define HCI_INQ_RESP_TX_SUPPORTED(x)     ((x)[HCI_FEATURE_INQ_RESP_TX_OFF] & HCI_FEATURE_INQ_RESP_TX_MASK)
-
-#define HCI_FEATURE_EXTENDED_MASK       0x80
-#define HCI_FEATURE_EXTENDED_OFF        7
-#define HCI_LMP_EXTENDED_SUPPORTED(x)   ((x)[HCI_FEATURE_EXTENDED_OFF] & HCI_FEATURE_EXTENDED_MASK)
-
-/*
-**   Features encoding - page 1
-*/
-#define HCI_EXT_FEATURE_SSP_HOST_MASK 0x01
-#define HCI_EXT_FEATURE_SSP_HOST_OFF  0
-#define HCI_SSP_HOST_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_SSP_HOST_OFF] & HCI_EXT_FEATURE_SSP_HOST_MASK)
-
-/*
-**   Local Supported Commands encoding
-*/
-#define HCI_NUM_SUPP_COMMANDS_BYTES           64
-
-#define HCI_SUPP_COMMANDS_INQUIRY_MASK 0x01
-#define HCI_SUPP_COMMANDS_INQUIRY_OFF  0
-#define HCI_INQUIRY_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_INQUIRY_OFF] & HCI_SUPP_COMMANDS_INQUIRY_MASK)
-
-#define HCI_SUPP_COMMANDS_INQUIRY_CANCEL_MASK 0x02
-#define HCI_SUPP_COMMANDS_INQUIRY_CANCEL_OFF  0
-#define HCI_INQUIRY_CANCEL_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_INQUIRY_CANCEL_OFF] & HCI_SUPP_COMMANDS_INQUIRY_CANCEL_MASK)
-
-#define HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_MASK     0x04
-#define HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_OFF      0
-#define HCI_PERIODIC_INQUIRY_SUPPORTED(x)     ((x)[HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_OFF] & HCI_SUPP_COMMANDS_PERIODIC_INQUIRY_MASK)
-
-#define HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_MASK    0x08
-#define HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_OFF     0
-#define HCI_EXIT_PERIODIC_INQUIRY_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_OFF] & HCI_SUPP_COMMANDS_EXIT_PERIODIC_INQUIRY_MASK)
-
-#define HCI_SUPP_COMMANDS_CREATE_CONN_MASK     0x10
-#define HCI_SUPP_COMMANDS_CREATE_CONN_OFF      0
-#define HCI_CREATE_CONN_SUPPORTED(x)     ((x)[HCI_SUPP_COMMANDS_CREATE_CONN_OFF] & HCI_SUPP_COMMANDS_CREATE_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_DISCONNECT_MASK         0x20
-#define HCI_SUPP_COMMANDS_DISCONNECT_OFF          0
-#define HCI_DISCONNECT_SUPPORTED(x)         ((x)[HCI_SUPP_COMMANDS_DISCONNECT_OFF] & HCI_SUPP_COMMANDS_DISCONNECT_MASK)
-
-#define HCI_SUPP_COMMANDS_ADD_SCO_CONN_MASK      0x40
-#define HCI_SUPP_COMMANDS_ADD_SCO_CONN_OFF       0
-#define HCI_ADD_SCO_CONN_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_ADD_SCO_CONN_OFF] & HCI_SUPP_COMMANDS_ADD_SCO_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_MASK     0x80
-#define HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_OFF      0
-#define HCI_CANCEL_CREATE_CONN_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_OFF] & HCI_SUPP_COMMANDS_CANCEL_CREATE_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_MASK      0x01
-#define HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_OFF       1
-#define HCI_ACCEPT_CONN_REQUEST_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_OFF] & HCI_SUPP_COMMANDS_ACCEPT_CONN_REQUEST_MASK)
-
-#define HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_MASK           0x02
-#define HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_OFF            1
-#define HCI_REJECT_CONN_REQUEST_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_OFF] & HCI_SUPP_COMMANDS_REJECT_CONN_REQUEST_MASK)
-
-#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_MASK  0x04
-#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_OFF   1
-#define HCI_LINK_KEY_REQUEST_REPLY_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_OFF] & HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_MASK       0x08
-#define HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_OFF        1
-#define HCI_LINK_KEY_REQUEST_NEG_REPLY_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_LINK_KEY_REQUEST_NEG_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_MASK    0x10
-#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_OFF     1
-#define HCI_PIN_CODE_REQUEST_REPLY_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_OFF] & HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_MASK    0x20
-#define HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_OFF     1
-#define HCI_PIN_CODE_REQUEST_NEG_REPLY_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_PIN_CODE_REQUEST_NEG_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_MASK          0x40
-#define HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_OFF           1
-#define HCI_CHANGE_CONN_PKT_TYPE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_OFF] & HCI_SUPP_COMMANDS_CHANGE_CONN_PKT_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_AUTH_REQUEST_MASK          0x80
-#define HCI_SUPP_COMMANDS_AUTH_REQUEST_OFF           1
-#define HCI_AUTH_REQUEST_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_AUTH_REQUEST_OFF] & HCI_SUPP_COMMANDS_AUTH_REQUEST_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_MASK      0x01
-#define HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_OFF       2
-#define HCI_SET_CONN_ENCRYPTION_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_OFF] & HCI_SUPP_COMMANDS_SET_CONN_ENCRYPTION_MASK)
-
-#define HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_MASK           0x02
-#define HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_OFF            2
-#define HCI_CHANGE_CONN_LINK_KEY_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_OFF] & HCI_SUPP_COMMANDS_CHANGE_CONN_LINK_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_MASTER_LINK_KEY_MASK  0x04
-#define HCI_SUPP_COMMANDS_MASTER_LINK_KEY_OFF   2
-#define HCI_MASTER_LINK_KEY_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_MASTER_LINK_KEY_OFF] & HCI_SUPP_COMMANDS_MASTER_LINK_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_MASK       0x08
-#define HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_OFF        2
-#define HCI_REMOTE_NAME_REQUEST_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_OFF] & HCI_SUPP_COMMANDS_REMOTE_NAME_REQUEST_MASK)
-
-#define HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_MASK    0x10
-#define HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_OFF     2
-#define HCI_CANCEL_REMOTE_NAME_REQUEST_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_OFF] & HCI_SUPP_COMMANDS_CANCEL_REMOTE_NAME_REQUEST_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_MASK    0x20
-#define HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_OFF     2
-#define HCI_READ_REMOTE_SUPP_FEATURES_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_OFF] & HCI_SUPP_COMMANDS_READ_REMOTE_SUPP_FEATURES_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_MASK          0x40
-#define HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_OFF           2
-#define HCI_READ_REMOTE_EXT_FEATURES_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_OFF] & HCI_SUPP_COMMANDS_READ_REMOTE_EXT_FEATURES_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_MASK          0x80
-#define HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_OFF           2
-#define HCI_READ_REMOTE_VER_INFO_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_OFF] & HCI_SUPP_COMMANDS_READ_REMOTE_VER_INFO_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_MASK           0x01
-#define HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_OFF            3
-#define HCI_READ_CLOCK_OFFSET_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_OFF] & HCI_SUPP_COMMANDS_READ_CLOCK_OFFSET_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LMP_HANDLE_MASK  0x02
-#define HCI_SUPP_COMMANDS_READ_LMP_HANDLE_OFF   3
-#define HCI_READ_LMP_HANDLE_SUPPORTED(x) ((x)[HCI_SUPP_COMMANDS_READ_LMP_HANDLE_OFF] & HCI_SUPP_COMMANDS_READ_LMP_HANDLE_MASK)
-
-#define HCI_SUPP_COMMANDS_HOLD_MODE_CMD_MASK           0x02
-#define HCI_SUPP_COMMANDS_HOLD_MODE_CMD_OFF            4
-#define HCI_HOLD_MODE_CMD_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_HOLD_MODE_CMD_OFF] & HCI_SUPP_COMMANDS_HOLD_MODE_CMD_MASK)
-
-#define HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_MASK  0x04
-#define HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_OFF   4
-#define HCI_SNIFF_MODE_CMD_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_OFF] & HCI_SUPP_COMMANDS_SNIFF_MODE_CMD_MASK)
-
-#define HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_MASK       0x08
-#define HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_OFF        4
-#define HCI_EXIT_SNIFF_MODE_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_OFF] & HCI_SUPP_COMMANDS_EXIT_SNIFF_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_PARK_STATE_MASK    0x10
-#define HCI_SUPP_COMMANDS_PARK_STATE_OFF     4
-#define HCI_PARK_STATE_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_PARK_STATE_OFF] & HCI_SUPP_COMMANDS_PARK_STATE_MASK)
-
-#define HCI_SUPP_COMMANDS_EXIT_PARK_STATE_MASK    0x20
-#define HCI_SUPP_COMMANDS_EXIT_PARK_STATE_OFF     4
-#define HCI_EXIT_PARK_STATE_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_EXIT_PARK_STATE_OFF] & HCI_SUPP_COMMANDS_EXIT_PARK_STATE_MASK)
-
-#define HCI_SUPP_COMMANDS_QOS_SETUP_MASK          0x40
-#define HCI_SUPP_COMMANDS_QOS_SETUP_OFF           4
-#define HCI_QOS_SETUP_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_QOS_SETUP_OFF] & HCI_SUPP_COMMANDS_QOS_SETUP_MASK)
-
-#define HCI_SUPP_COMMANDS_ROLE_DISCOVERY_MASK          0x80
-#define HCI_SUPP_COMMANDS_ROLE_DISCOVERY_OFF           4
-#define HCI_ROLE_DISCOVERY_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_ROLE_DISCOVERY_OFF] & HCI_SUPP_COMMANDS_ROLE_DISCOVERY_MASK)
-
-#define HCI_SUPP_COMMANDS_SWITCH_ROLE_MASK      0x01
-#define HCI_SUPP_COMMANDS_SWITCH_ROLE_OFF       5
-#define HCI_SWITCH_ROLE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_SWITCH_ROLE_OFF] & HCI_SUPP_COMMANDS_SWITCH_ROLE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_MASK           0x02
-#define HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_OFF            5
-#define HCI_READ_LINK_POLICY_SET_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_OFF] & HCI_SUPP_COMMANDS_READ_LINK_POLICY_SET_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_MASK  0x04
-#define HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_OFF   5
-#define HCI_WRITE_LINK_POLICY_SET_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_OFF] & HCI_SUPP_COMMANDS_WRITE_LINK_POLICY_SET_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_MASK       0x08
-#define HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_OFF        5
-#define HCI_READ_DEF_LINK_POLICY_SET_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_OFF] & HCI_SUPP_COMMANDS_READ_DEF_LINK_POLICY_SET_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_MASK    0x10
-#define HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_OFF     5
-#define HCI_WRITE_DEF_LINK_POLICY_SET_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_OFF] & HCI_SUPP_COMMANDS_WRITE_DEF_LINK_POLICY_SET_MASK)
-
-#define HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_MASK    0x20
-#define HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_OFF     5
-#define HCI_FLOW_SPECIFICATION_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_OFF] & HCI_SUPP_COMMANDS_FLOW_SPECIFICATION_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_MASK          0x40
-#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_OFF           5
-#define HCI_SET_EVENT_MASK_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_SET_EVENT_MASK_OFF] & HCI_SUPP_COMMANDS_SET_EVENT_MASK_MASK)
-
-#define HCI_SUPP_COMMANDS_RESET_MASK          0x80
-#define HCI_SUPP_COMMANDS_RESET_OFF           5
-#define HCI_RESET_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_RESET_OFF] & HCI_SUPP_COMMANDS_RESET_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_EVENT_FILTER_MASK      0x01
-#define HCI_SUPP_COMMANDS_SET_EVENT_FILTER_OFF       6
-#define HCI_SET_EVENT_FILTER_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_SET_EVENT_FILTER_OFF] & HCI_SUPP_COMMANDS_SET_EVENT_FILTER_MASK)
-
-#define HCI_SUPP_COMMANDS_FLUSH_MASK           0x02
-#define HCI_SUPP_COMMANDS_FLUSH_OFF            6
-#define HCI_FLUSH_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_FLUSH_OFF] & HCI_SUPP_COMMANDS_FLUSH_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PIN_TYPE_MASK  0x04
-#define HCI_SUPP_COMMANDS_READ_PIN_TYPE_OFF   6
-#define HCI_READ_PIN_TYPE_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_READ_PIN_TYPE_OFF] & HCI_SUPP_COMMANDS_READ_PIN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_MASK       0x08
-#define HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_OFF        6
-#define HCI_WRITE_PIN_TYPE_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_OFF] & HCI_SUPP_COMMANDS_WRITE_PIN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_MASK    0x10
-#define HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_OFF     6
-#define HCI_CREATE_NEW_UNIT_KEY_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_OFF] & HCI_SUPP_COMMANDS_CREATE_NEW_UNIT_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_MASK    0x20
-#define HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_OFF     6
-#define HCI_READ_STORED_LINK_KEY_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_OFF] & HCI_SUPP_COMMANDS_READ_STORED_LINK_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_MASK          0x40
-#define HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_OFF           6
-#define HCI_WRITE_STORED_LINK_KEY_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_OFF] & HCI_SUPP_COMMANDS_WRITE_STORED_LINK_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_MASK          0x80
-#define HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_OFF           6
-#define HCI_DELETE_STORED_LINK_KEY_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_OFF] & HCI_SUPP_COMMANDS_DELETE_STORED_LINK_KEY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_MASK      0x01
-#define HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_OFF       7
-#define HCI_WRITE_LOCAL_NAME_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_OFF] & HCI_SUPP_COMMANDS_WRITE_LOCAL_NAME_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_NAME_MASK           0x02
-#define HCI_SUPP_COMMANDS_READ_LOCAL_NAME_OFF            7
-#define HCI_READ_LOCAL_NAME_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_NAME_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_NAME_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_MASK  0x04
-#define HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_OFF   7
-#define HCI_READ_CONN_ACCEPT_TOUT_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_OFF] & HCI_SUPP_COMMANDS_READ_CONN_ACCEPT_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_MASK       0x08
-#define HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_OFF        7
-#define HCI_WRITE_CONN_ACCEPT_TOUT_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_CONN_ACCEPT_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PAGE_TOUT_MASK    0x10
-#define HCI_SUPP_COMMANDS_READ_PAGE_TOUT_OFF     7
-#define HCI_READ_PAGE_TOUT_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_READ_PAGE_TOUT_OFF] & HCI_SUPP_COMMANDS_READ_PAGE_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_MASK    0x20
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_OFF     7
-#define HCI_WRITE_PAGE_TOUT_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_PAGE_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_MASK          0x40
-#define HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_OFF           7
-#define HCI_READ_SCAN_ENABLE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_OFF] & HCI_SUPP_COMMANDS_READ_SCAN_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_MASK          0x80
-#define HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_OFF           7
-#define HCI_WRITE_SCAN_ENABLE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_OFF] & HCI_SUPP_COMMANDS_WRITE_SCAN_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_MASK      0x01
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_OFF       8
-#define HCI_READ_PAGE_SCAN_ACTIVITY_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_READ_PAGE_SCAN_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_MASK           0x02
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_OFF            8
-#define HCI_WRITE_PAGE_SCAN_ACTIVITY_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_MASK  0x04
-#define HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_OFF   8
-#define HCI_READ_INQURIY_SCAN_ACTIVITY_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_READ_INQURIY_SCAN_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_MASK       0x08
-#define HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_OFF        8
-#define HCI_WRITE_INQURIY_SCAN_ACTIVITY_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_WRITE_INQURIY_SCAN_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_MASK    0x10
-#define HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_OFF     8
-#define HCI_READ_AUTH_ENABLE_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_OFF] & HCI_SUPP_COMMANDS_READ_AUTH_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_MASK    0x20
-#define HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_OFF     8
-#define HCI_WRITE_AUTH_ENABLE_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_OFF] & HCI_SUPP_COMMANDS_WRITE_AUTH_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_MASK          0x40
-#define HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_OFF           8
-#define HCI_READ_ENCRYPT_ENABLE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_OFF] & HCI_SUPP_COMMANDS_READ_ENCRYPT_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_MASK          0x80
-#define HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_OFF           8
-#define HCI_WRITE_ENCRYPT_ENABLE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_OFF] & HCI_SUPP_COMMANDS_WRITE_ENCRYPT_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_MASK      0x01
-#define HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_OFF       9
-#define HCI_READ_CLASS_DEVICE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_OFF] & HCI_SUPP_COMMANDS_READ_CLASS_DEVICE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_MASK           0x02
-#define HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_OFF            9
-#define HCI_WRITE_CLASS_DEVICE_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_OFF] & HCI_SUPP_COMMANDS_WRITE_CLASS_DEVICE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_VOICE_SETTING_MASK  0x04
-#define HCI_SUPP_COMMANDS_READ_VOICE_SETTING_OFF   9
-#define HCI_READ_VOICE_SETTING_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_READ_VOICE_SETTING_OFF] & HCI_SUPP_COMMANDS_READ_VOICE_SETTING_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_MASK       0x08
-#define HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_OFF        9
-#define HCI_WRITE_VOICE_SETTING_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_OFF] & HCI_SUPP_COMMANDS_WRITE_VOICE_SETTING_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_MASK    0x10
-#define HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_OFF     9
-#define HCI_READ_AUTO_FLUSH_TOUT_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_OFF] & HCI_SUPP_COMMANDS_READ_AUTO_FLUSH_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_MASK    0x20
-#define HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_OFF     9
-#define HCI_WRITE_AUTO_FLUSH_TOUT_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_AUTO_FLUSH_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_MASK          0x40
-#define HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_OFF           9
-#define HCI_READ_NUM_BROAD_RETRANS_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_OFF] & HCI_SUPP_COMMANDS_READ_NUM_BROAD_RETRANS_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_MASK          0x80
-#define HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_OFF           9
-#define HCI_WRITE_NUM_BROAD_RETRANS_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_OFF] & HCI_SUPP_COMMANDS_WRITE_NUM_BROAD_RETRANS_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_MASK      0x01
-#define HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_OFF       10
-#define HCI_READ_HOLD_MODE_ACTIVITY_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_READ_HOLD_MODE_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_MASK           0x02
-#define HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_OFF            10
-#define HCI_WRITE_HOLD_MODE_ACTIVITY_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_OFF] & HCI_SUPP_COMMANDS_WRITE_HOLD_MODE_ACTIVITY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_MASK  0x04
-#define HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_OFF   10
-#define HCI_READ_TRANS_PWR_LEVEL_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_OFF] & HCI_SUPP_COMMANDS_READ_TRANS_PWR_LEVEL_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_MASK       0x08
-#define HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_OFF        10
-#define HCI_READ_SYNCH_FLOW_CTRL_ENABLE_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_OFF] & HCI_SUPP_COMMANDS_READ_SYNCH_FLOW_CTRL_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_MASK    0x10
-#define HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_OFF     10
-#define HCI_WRITE_SYNCH_FLOW_CTRL_ENABLE_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_OFF] & HCI_SUPP_COMMANDS_WRITE_SYNCH_FLOW_CTRL_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_MASK    0x20
-#define HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_OFF     10
-#define HCI_SET_HOST_CTRLR_TO_HOST_FC_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_OFF] & HCI_SUPP_COMMANDS_SET_HOST_CTRLR_TO_HOST_FC_MASK)
-
-#define HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_MASK          0x40
-#define HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_OFF           10
-#define HCI_HOST_BUFFER_SIZE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_OFF] & HCI_SUPP_COMMANDS_HOST_BUFFER_SIZE_MASK)
-
-#define HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_MASK          0x80
-#define HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_OFF           10
-#define HCI_HOST_NUM_COMPLETED_PKTS_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_OFF] & HCI_SUPP_COMMANDS_HOST_NUM_COMPLETED_PKTS_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_MASK      0x01
-#define HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_OFF       11
-#define HCI_READ_LINK_SUP_TOUT_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_OFF] & HCI_SUPP_COMMANDS_READ_LINK_SUP_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_MASK           0x02
-#define HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_OFF            11
-#define HCI_WRITE_LINK_SUP_TOUT_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_LINK_SUP_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_MASK  0x04
-#define HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_OFF   11
-#define HCI_READ_NUM_SUPP_IAC_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_OFF] & HCI_SUPP_COMMANDS_READ_NUM_SUPP_IAC_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_MASK       0x08
-#define HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_OFF        11
-#define HCI_READ_CURRENT_IAC_LAP_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_OFF] & HCI_SUPP_COMMANDS_READ_CURRENT_IAC_LAP_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_MASK    0x10
-#define HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_OFF     11
-#define HCI_WRITE_CURRENT_IAC_LAP_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_OFF] & HCI_SUPP_COMMANDS_WRITE_CURRENT_IAC_LAP_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_MASK    0x20
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_OFF     11
-#define HCI_READ_PAGE_SCAN_PER_MODE_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_OFF] & HCI_SUPP_COMMANDS_READ_PAGE_SCAN_PER_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_MASK          0x40
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_OFF           11
-#define HCI_WRITE_PAGE_SCAN_PER_MODE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_PER_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_MASK          0x80
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_OFF           11
-#define HCI_READ_PAGE_SCAN_MODE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_OFF] & HCI_SUPP_COMMANDS_READ_PAGE_SCAN_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_MASK      0x01
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_OFF       12
-#define HCI_WRITE_PAGE_SCAN_MODE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_MASK           0x02
-#define HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_OFF            12
-#define HCI_SET_AFH_CHNL_CLASS_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_OFF] & HCI_SUPP_COMMANDS_SET_AFH_CHNL_CLASS_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_MASK    0x10
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_OFF     12
-#define HCI_READ_INQUIRY_SCAN_TYPE_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_OFF] & HCI_SUPP_COMMANDS_READ_INQUIRY_SCAN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_MASK    0x20
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_OFF     12
-#define HCI_WRITE_INQUIRY_SCAN_TYPE_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_OFF] & HCI_SUPP_COMMANDS_WRITE_INQUIRY_SCAN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_MASK          0x40
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_OFF           12
-#define HCI_READ_INQUIRY_MODE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_OFF] & HCI_SUPP_COMMANDS_READ_INQUIRY_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_MASK          0x80
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_OFF           12
-#define HCI_WRITE_INQUIRY_MODE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_INQUIRY_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_MASK      0x01
-#define HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_OFF       13
-#define HCI_READ_PAGE_SCAN_TYPE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_OFF] & HCI_SUPP_COMMANDS_READ_PAGE_SCAN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_MASK           0x02
-#define HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_OFF            13
-#define HCI_WRITE_PAGE_SCAN_TYPE_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_OFF] & HCI_SUPP_COMMANDS_WRITE_PAGE_SCAN_TYPE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_MASK  0x04
-#define HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_OFF   13
-#define HCI_READ_AFH_CHNL_ASSESS_MODE_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_OFF] & HCI_SUPP_COMMANDS_READ_AFH_CHNL_ASSESS_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_MASK       0x08
-#define HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_OFF        13
-#define HCI_WRITE_AFH_CHNL_ASSESS_MODE_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_AFH_CHNL_ASSESS_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_MASK       0x08
-#define HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_OFF        14
-#define HCI_READ_LOCAL_VER_INFO_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_VER_INFO_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_MASK       0x10
-#define HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_OFF        14
-#define HCI_READ_LOCAL_SUP_CMDS_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_SUP_CMDS_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_MASK    0x20
-#define HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_OFF     14
-#define HCI_READ_LOCAL_SUPP_FEATURES_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_SUPP_FEATURES_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_MASK          0x40
-#define HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_OFF           14
-#define HCI_READ_LOCAL_EXT_FEATURES_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_EXT_FEATURES_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_MASK          0x80
-#define HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_OFF           14
-#define HCI_READ_BUFFER_SIZE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_OFF] & HCI_SUPP_COMMANDS_READ_BUFFER_SIZE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_MASK      0x01
-#define HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_OFF       15
-#define HCI_READ_COUNTRY_CODE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_OFF] & HCI_SUPP_COMMANDS_READ_COUNTRY_CODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_BD_ADDR_MASK           0x02
-#define HCI_SUPP_COMMANDS_READ_BD_ADDR_OFF            15
-#define HCI_READ_BD_ADDR_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_READ_BD_ADDR_OFF] & HCI_SUPP_COMMANDS_READ_BD_ADDR_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_MASK  0x04
-#define HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_OFF   15
-#define HCI_READ_FAIL_CONTACT_CNTR_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_OFF] & HCI_SUPP_COMMANDS_READ_FAIL_CONTACT_CNTR_MASK)
-
-#define HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_MASK       0x08
-#define HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_OFF        15
-#define HCI_RESET_FAIL_CONTACT_CNTR_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_OFF] & HCI_SUPP_COMMANDS_RESET_FAIL_CONTACT_CNTR_MASK)
-
-#define HCI_SUPP_COMMANDS_GET_LINK_QUALITY_MASK    0x10
-#define HCI_SUPP_COMMANDS_GET_LINK_QUALITY_OFF     15
-#define HCI_GET_LINK_QUALITY_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_GET_LINK_QUALITY_OFF] & HCI_SUPP_COMMANDS_GET_LINK_QUALITY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_RSSI_MASK    0x20
-#define HCI_SUPP_COMMANDS_READ_RSSI_OFF     15
-#define HCI_READ_RSSI_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_READ_RSSI_OFF] & HCI_SUPP_COMMANDS_READ_RSSI_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_MASK          0x40
-#define HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_OFF           15
-#define HCI_READ_AFH_CH_MAP_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_OFF] & HCI_SUPP_COMMANDS_READ_AFH_CH_MAP_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_BD_CLOCK_MASK          0x80
-#define HCI_SUPP_COMMANDS_READ_BD_CLOCK_OFF           15
-#define HCI_READ_BD_CLOCK_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_BD_CLOCK_OFF] & HCI_SUPP_COMMANDS_READ_BD_CLOCK_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_MASK      0x01
-#define HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_OFF       16
-#define HCI_READ_LOOPBACK_MODE_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_OFF] & HCI_SUPP_COMMANDS_READ_LOOPBACK_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_MASK           0x02
-#define HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_OFF            16
-#define HCI_WRITE_LOOPBACK_MODE_SUPPORTED(x)           ((x)[HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_LOOPBACK_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_MASK  0x04
-#define HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_OFF   16
-#define HCI_ENABLE_DEV_UNDER_TEST_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_OFF] & HCI_SUPP_COMMANDS_ENABLE_DEV_UNDER_TEST_MASK)
-
-#define HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_MASK       0x08
-#define HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_OFF        16
-#define HCI_SETUP_SYNCH_CONN_SUPPORTED(x)       ((x)[HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_OFF] & HCI_SUPP_COMMANDS_SETUP_SYNCH_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_MASK    0x10
-#define HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_OFF     16
-#define HCI_ACCEPT_SYNCH_CONN_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_OFF] & HCI_SUPP_COMMANDS_ACCEPT_SYNCH_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_MASK    0x20
-#define HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_OFF     16
-#define HCI_REJECT_SYNCH_CONN_SUPPORTED(x)    ((x)[HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_OFF] & HCI_SUPP_COMMANDS_REJECT_SYNCH_CONN_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_MASK   0x01
-#define HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_OFF    17
-#define HCI_READ_EXT_INQUIRY_RESP_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_OFF] & HCI_SUPP_COMMANDS_READ_EXT_INQUIRY_RESP_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_MASK  0x02
-#define HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_OFF   17
-#define HCI_WRITE_EXT_INQUIRY_RESP_SUPPORTED(x)  ((x)[HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_OFF] & HCI_SUPP_COMMANDS_WRITE_EXT_INQUIRY_RESP_MASK)
-
-#define HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_MASK   0x04
-#define HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_OFF    17
-#define HCI_REFRESH_ENCRYPTION_KEY_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_OFF] & HCI_SUPP_COMMANDS_REFRESH_ENCRYPTION_KEY_MASK)
-
-/* Octet 17, bit 3 is reserved */
-
-#define HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_MASK       0x10
-#define HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_OFF        17
-#define HCI_SNIFF_SUB_RATE_CMD_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_OFF] & HCI_SUPP_COMMANDS_SNIFF_SUB_RATE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_MASK   0x20
-#define HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_OFF    17
-#define HCI_READ_SIMPLE_PAIRING_MODE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_OFF] & HCI_SUPP_COMMANDS_READ_SIMPLE_PAIRING_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_MASK   0x40
-#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_OFF    17
-#define HCI_WRITE_SIMPLE_PAIRING_MODE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_MASK   0x80
-#define HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_OFF    17
-#define HCI_READ_LOCAL_OOB_DATA_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_OOB_DATA_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_MASK   0x01
-#define HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_OFF    18
-#define HCI_READ_INQUIRY_RESPONSE_TX_POWER_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_OFF] & HCI_SUPP_COMMANDS_READ_INQUIRY_RESPONSE_TX_POWER_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_MASK   0x02
-#define HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_OFF    18
-#define HCI_WRITE_INQUIRY_RESPONSE_TX_POWER_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_OFF] & HCI_SUPP_COMMANDS_WRITE_INQUIRY_RESPONSE_TX_POWER_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK   0x04
-#define HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF    18
-#define HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF] & HCI_SUPP_COMMANDS_READ_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK   0x08
-#define HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF    18
-#define HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_OFF] & HCI_SUPP_COMMANDS_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING_MASK)
-
-#define HCI_SUPP_COMMANDS_IO_CAPABILITY_RESPONSE_MASK   0x80
-#define HCI_SUPP_COMMANDS_IO_CAPABILITY_RESPONSE_OFF    18
-#define HCI_IO_CAPABILITY_RESPONSE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_IO_CAPABILITY_RESPONSE_OFF] & HCI_SUPP_COMMANDS_IO_CAPABILITY_RESPONSE_MASK)
-
-#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_MASK   0x01
-#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_OFF    19
-#define HCI_USER_CONFIRMATION_REQUEST_REPLY_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_OFF] & HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_MASK   0x02
-#define HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_OFF    19
-#define HCI_USER_CONFIRMATION_REQUEST_NEG_REPLY_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_USER_CONFIRMATION_REQUEST_NEG_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_MASK   0x04
-#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_OFF    19
-#define HCI_USER_PASSKEY_REQUEST_REPLY_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_OFF] & HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_MASK   0x08
-#define HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_OFF    19
-#define HCI_USER_PASSKEY_REQUEST_NEG_REPLY_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_USER_PASSKEY_REQUEST_NEG_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_MASK   0x10
-#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_OFF    19
-#define HCI_REMOTE_OOB_DATA_REQUEST_REPLY_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_OFF] & HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_MASK       0x20
-#define HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_OFF        19
-#define HCI_WRITE_SIMPLE_PAIRING_DBG_MODE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_SIMPLE_PAIRING_DBG_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_ENHANCED_FLUSH_MASK   0x40
-#define HCI_SUPP_COMMANDS_ENHANCED_FLUSH_OFF    19
-#define HCI_ENHANCED_FLUSH_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_ENHANCED_FLUSH_OFF] & HCI_SUPP_COMMANDS_ENHANCED_FLUSH_MASK)
-
-#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_MASK       0x80
-#define HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_OFF        19
-#define HCI_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_REMOTE_OOB_DATA_REQUEST_NEG_REPLY_MASK)
-
-/* Supported Commands (Byte 20) */
-#define HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_MASK       0x04
-#define HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_OFF        20
-#define HCI_SEND_NOTIF_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_OFF] & HCI_SUPP_COMMANDS_SEND_KEYPRESS_NOTIF_MASK)
-
-#define HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_MASK      0x08
-#define HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_OFF       20
-#define HCI_IO_CAP_REQ_NEG_REPLY_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_OFF] & HCI_SUPP_COMMANDS_IO_CAP_REQ_NEG_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_MASK      0x10
-#define HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_OFF       20
-#define HCI_READ_ENCR_KEY_SIZE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_OFF] & HCI_SUPP_COMMANDS_READ_ENCR_KEY_SIZE_MASK)
-
-/* Supported Commands (Byte 21) */
-#define HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_MASK   0x01
-#define HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_OFF    21
-#define HCI_CREATE_PHYSICAL_LINK_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_OFF] & HCI_SUPP_COMMANDS_CREATE_PHYSICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_MASK   0x02
-#define HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_OFF    21
-#define HCI_ACCEPT_PHYSICAL_LINK_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_OFF] & HCI_SUPP_COMMANDS_ACCEPT_PHYSICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_MASK   0x04
-#define HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_OFF    21
-#define HCI_DISCONNECT_PHYSICAL_LINK_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_OFF] & HCI_SUPP_COMMANDS_DISCONNECT_PHYSICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_MASK   0x08
-#define HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_OFF    21
-#define HCI_CREATE_LOGICAL_LINK_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_OFF] & HCI_SUPP_COMMANDS_CREATE_LOGICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_MASK   0x10
-#define HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_OFF    21
-#define HCI_ACCEPT_LOGICAL_LINK_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_OFF] & HCI_SUPP_COMMANDS_ACCEPT_LOGICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_MASK   0x20
-#define HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_OFF    21
-#define HCI_DISCONNECT_LOGICAL_LINK_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_OFF] & HCI_SUPP_COMMANDS_DISCONNECT_LOGICAL_LINK_MASK)
-
-#define HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_MASK   0x40
-#define HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_OFF    21
-#define HCI_LOGICAL_LINK_CANCEL_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_OFF] & HCI_SUPP_COMMANDS_LOGICAL_LINK_CANCEL_MASK)
-
-#define HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_MASK       0x80
-#define HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_OFF        21
-#define HCI_FLOW_SPEC_MODIFY_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_OFF] & HCI_SUPP_COMMANDS_FLOW_SPEC_MODIFY_MASK)
-
-/* Supported Commands (Byte 22) */
-#define HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK   0x01
-#define HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF    22
-#define HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF] & HCI_SUPP_COMMANDS_READ_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK   0x02
-#define HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF    22
-#define HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_MASK   0x04
-#define HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_OFF    22
-#define HCI_SET_EVENT_MASK_PAGE_2_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_OFF] & HCI_SUPP_COMMANDS_SET_EVENT_MASK_PAGE_2_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCATION_DATA_MASK   0x08
-#define HCI_SUPP_COMMANDS_READ_LOCATION_DATA_OFF    22
-#define HCI_READ_LOCATION_DATA_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_LOCATION_DATA_OFF] & HCI_SUPP_COMMANDS_READ_LOCATION_DATA_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_MASK   0x10
-#define HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_OFF    22
-#define HCI_WRITE_LOCATION_DATA_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_OFF] & HCI_SUPP_COMMANDS_WRITE_LOCATION_DATA_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_MASK   0x20
-#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_OFF    22
-#define HCI_READ_LOCAL_AMP_INFO_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_AMP_INFO_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_MASK   0x40
-#define HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_OFF    22
-#define HCI_READ_LOCAL_AMP_ASSOC_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_AMP_ASSOC_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_MASK   0x80
-#define HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_OFF    22
-#define HCI_WRITE_REMOTE_AMP_ASSOC_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_OFF] & HCI_SUPP_COMMANDS_WRITE_REMOTE_AMP_ASSOC_MASK)
-
-/* Supported Commands (Byte 23) */
-#define HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_MASK   0x01
-#define HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_OFF    23
-#define HCI_READ_FLOW_CONTROL_MODE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_OFF] & HCI_SUPP_COMMANDS_READ_FLOW_CONTROL_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_MASK   0x02
-#define HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_OFF    23
-#define HCI_WRITE_FLOW_CONTROL_MODE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_OFF] & HCI_SUPP_COMMANDS_WRITE_FLOW_CONTROL_MODE_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_MASK   0x04
-#define HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_OFF    23
-#define HCI_READ_DATA_BLOCK_SIZE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_OFF] & HCI_SUPP_COMMANDS_READ_DATA_BLOCK_SIZE_MASK)
-
-#define HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_MASK   0x20
-#define HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_OFF    23
-#define HCI_ENABLE_AMP_RCVR_REPORTS_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_OFF] & HCI_SUPP_COMMANDS_ENABLE_AMP_RCVR_REPORTS_MASK)
-
-#define HCI_SUPP_COMMANDS_AMP_TEST_END_MASK   0x40
-#define HCI_SUPP_COMMANDS_AMP_TEST_END_OFF    23
-#define HCI_AMP_TEST_END_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_AMP_TEST_END_OFF] & HCI_SUPP_COMMANDS_AMP_TEST_END_MASK)
-
-#define HCI_SUPP_COMMANDS_AMP_TEST_MASK   0x80
-#define HCI_SUPP_COMMANDS_AMP_TEST_OFF    23
-#define HCI_AMP_TEST_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_AMP_TEST_OFF] & HCI_SUPP_COMMANDS_AMP_TEST_MASK)
-
-/* Supported Commands (Byte 24) */
-#define HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_MASK   0x01
-#define HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_OFF    24
-#define HCI_READ_TRANSMIT_POWER_LEVEL_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_OFF] & HCI_SUPP_COMMANDS_READ_TRANSMIT_POWER_LEVEL_MASK)
-
-#define HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_MASK   0x04
-#define HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_OFF    24
-#define HCI_READ_BE_FLUSH_TOUT_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_OFF] & HCI_SUPP_COMMANDS_READ_BE_FLUSH_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_MASK   0x08
-#define HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_OFF    24
-#define HCI_WRITE_BE_FLUSH_TOUT_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_OFF] & HCI_SUPP_COMMANDS_WRITE_BE_FLUSH_TOUT_MASK)
-
-#define HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_MASK   0x10
-#define HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_OFF    24
-#define HCI_SHORT_RANGE_MODE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_OFF] & HCI_SUPP_COMMANDS_SHORT_RANGE_MODE_MASK)
-
-/* LE commands TBD
-** Supported Commands (Byte 24 continued)
-** Supported Commands (Byte 25)
-** Supported Commands (Byte 26)
-** Supported Commands (Byte 27)
-** Supported Commands (Byte 28)
-*/
-
-/*
-Commands of HCI_GRP_VENDOR_SPECIFIC group for WIDCOMM SW LM Simulator
-*/
-#ifdef _WIDCOMM
-
-#define HCI_SET_HCI_TRACE               (0x0001 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_SET_LM_TRACE                (0x0002 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_WRITE_COUNTRY_CODE          (0x0004 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_READ_LM_HISTORY             (0x0005 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_WRITE_BD_ADDR               (0x0006 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DISABLE_ENCRYPTION          (0x0007 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DISABLE_AUTHENTICATION      (0x0008 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_GENERIC_LC_CMD              (0x000A | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_INCR_POWER                  (0x000B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DECR_POWER                  (0x000C | HCI_GRP_VENDOR_SPECIFIC)
-
-/* Definitions for the local transactions */
-#define LM_DISCONNECT                  (0x00D0 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_AUTHENTICATION_REQUESTED    (0x00D1 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_SET_CONN_ENCRYPTION         (0x00D2 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_START_ENCRYPT_KEY_SIZE      (0x00D3 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_START_ENCRYPTION            (0x00D4 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_STOP_ENCRYPTION             (0x00D5 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_CHANGE_CONN_PACKET_TYPE     (0x00D6 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_RMT_NAME_REQUEST            (0x00D7 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_READ_RMT_FEATURES           (0x00D8 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_READ_RMT_VERSION_INFO       (0x00D9 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_READ_RMT_TIMING_INFO        (0x00DA | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_READ_RMT_CLOCK_OFFSET       (0x00DB | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HOLD_MODE                   (0x00DC | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_EXIT_PARK_MODE              (0x00DD | HCI_GRP_VENDOR_SPECIFIC)
-
-#define LM_SCO_LINK_REQUEST            (0x00E0 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_SCO_CHANGE                  (0x00E4 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_SCO_REMOVE                  (0x00E8 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_MAX_SLOTS                   (0x00F1 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_MAX_SLOTS_REQUEST           (0x00F2 | HCI_GRP_VENDOR_SPECIFIC)
-
-#ifdef INCLUDE_OPTIONAL_PAGING_SCHEME
-#define LM_OPTIONAL_PAGE_REQUEST       (0x00F3 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_OPTIONAL_PAGESCAN_REQUEST   (0x00F4 | HCI_GRP_VENDOR_SPECIFIC)
-#endif
-
-#define LM_SETUP_COMPLETE              (0x00FF | HCI_GRP_VENDOR_SPECIFIC)
-
-#define LM_HIST_SEND_LMP_FRAME         (0x0100 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_RECV_LMP_FRAME         (0x0101 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_HCIT_ERROR             (0x0102 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_PER_INQ_TOUT           (0x0103 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_INQ_SCAN_TOUT          (0x0104 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_PAGE_SCAN_TOUT         (0x0105 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_RESET_TOUT             (0x0106 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_MANDAT_PSCAN_TOUT      (0x0107 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_START_TRANS        (0x0108 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_HOST_REPLY         (0x0109 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_TIMEOUT            (0x010A | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_TX_COMP            (0x010B | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_HCID_SUSPENDED     (0x010C | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_ACL_FAILED             (0x010D | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_HCI_COMMAND            (0x010E | HCI_GRP_VENDOR_SPECIFIC)
-
-#define LM_HIST_HCI_EVENT              (0x010F | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_HCI_UPDATA             (0x0110 | HCI_GRP_VENDOR_SPECIFIC)
-#define LM_HIST_HCI_DNDATA             (0x0111 | HCI_GRP_VENDOR_SPECIFIC)
-
-#define HCI_ENTER_TEST_MODE            (0x0300 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_LMP_TEST_CNTRL             (0x0301 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DEBUG_LC_CMD_MIN           (0x0300 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DEBUG_LC_CMD_MAX           (0x03FF | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_DEBUG_LC_COMMAND           HCI_DEBUG_LC_CMD_MAX
-
-#endif
-
-
-/* Broadcom Vendor Specific Event sub-codes */
-#define HCI_BRCM_VSE_SUBCODE_AUTOMATIC_PAIRING_REQUEST              0x01
-#define HCI_BRCM_VSE_SUBCODE_RX_COMPLETE                            0x02
-#define HCI_BRCM_VSE_SUBCODE_LINK_QUALITY_REPORT                    0x03
-#define HCI_BRCM_VSE_SUBCODE_IOP_TEST_RX_1_PACKET_REPORT            0x04
-#define HCI_BRCM_VSE_SUBCODE_IOP_TEST_RX_N_PACKETS_REPORT_SUMMARY   0x05
-#define HCI_BRCM_VSE_SUBCODE_MODULE_XRAM_TEST_REPORT_SUMMARY        0x06
-#define HCI_BRCM_VSE_SUBCODE_CONNECTIONLESS_RX_TEST_STATISTICS      0x07
-#define HCI_BRCM_VSE_SUBCODE_FM_INTERRUPT                           0x08
-#define HCI_BRCM_VSE_SUBCODE_TCA_DEBUG_REPORT                       0x0B
-#define HCI_BRCM_VSE_SUBCODE_RAM_ROM_CLOCK_TEST_STATUS              0x0C
-#define HCI_BRCM_VSE_SUBCODE_DEBUG_OUTPUT_STRING                    0x0D
-#define HCI_BRCM_VSE_SUBCODE_PCM_DATA_DUMP                          0x0E
-#define HCI_BRCM_VSE_SUBCODE_PROTOCOL_MESSAGE_DUMP                  0x0F
-#define HCI_BRCM_VSE_SUBCODE_GPS_DATA                               0x10
-#define HCI_BRCM_VSE_SUBCODE_RESERVED_11                            0x11
-#define HCI_BRCM_VSE_SUBCODE_GPS_SENSOR_EVENT                       0x12
-#define HCI_BRCM_VSE_SUBCODE_GPS_SENSOR_SETUP_EVENT                 0x13
-#define HCI_BRCM_VSE_SUBCODE_MEIF_RX_EVENT                          0x14
-#define HCI_BRCM_VSE_SUBCODE_UNDETECTED_CRC_ERROR_EVENT             0x15
-#define HCI_BRCM_VSE_SUBCODE_BFC_DISCONNECT_EVENT                   0x16
-#define HCI_BRCM_VSE_SUBCODE_CUSTOMER_SPECIFIC_CS_ENERGY_DETECTED_EVENTS 0x17
-#define HCI_BRCM_VSE_SUBCODE_BFC_POLLING_INFO_EVENT                 0x18
-#define HCI_BRCM_VSE_SUBCODE_EEPROM_CHIP_ERASE_BY_MINIDRIVER_STATUS_REPORT 0xCE
-
-/* MIP related Vendor Specific Event */
-#define HCI_BRCM_VSE_SUBCODE_MIP_MODE_CHANGE            0x27
-#define HCI_BRCM_VSE_SUBCODE_MIP_DISCONNECT             0x28
-#define HCI_BRCM_VSE_SUBCODE_MIP_EIR_CMPLT              0x29
-#define HCI_BRCM_VSE_SUBCODE_MIP_ENC_KEY                0x2A
-#define HCI_BRCM_VSE_SUBCODE_MIP_DATA_RECEIVED          0x2E
-
-/* AMP VSE events
-*/
-#define AMP_VSE_CHANSPEC_CHAN_MASK      0x00ff
-
-#define AMP_VSE_CHANSPEC_CTL_SB_MASK    0x0300
-#define AMP_VSE_CHANSPEC_CTL_SB_LOWER   0x0100
-#define AMP_VSE_CHANSPEC_CTL_SB_UPPER   0x0200
-#define AMP_VSE_CHANSPEC_CTL_SB_NONE    0x0300
-
-#define AMP_VSE_CHANSPEC_BW_MASK        0x0C00
-#define AMP_VSE_CHANSPEC_BW_10          0x0400
-#define AMP_VSE_CHANSPEC_BW_20          0x0800
-#define AMP_VSE_CHANSPEC_BW_40          0x0C00
-
-#define AMP_VSE_CHANSPEC_BAND_MASK      0xf000
-#define AMP_VSE_CHANSPEC_BAND_5G        0x1000
-#define AMP_VSE_CHANSPEC_BAND_2G        0x2000
-
-/* PCM2 related */
-#define HCI_BRCM_CUSTOMER_EXT_ARC_LEN   4
-#define LOC_AUDIO_ROUTING_CONTROL       0x88
-#define LOC_ARC_CHANNEL_ID              0xF3
-
-#define ARC_INTERFACE_PCMI2S            0x01
-#define ARC_INTERFACE_FM_I2S            0x02
-#define ARC_INTERFACE_SLB               0x03
-
-#define ARC_MODE_NOT_USED               0x00
-#define ARC_MODE_BT_AUDIO               0x01
-#define ARC_MODE_FMRX                   0x02
-#define ARC_MODE_FMTX                   0x03
-#define ARC_MODE_SHARED_BT_FMRX         0x04
-#define ARC_MODE_SHARED_BT_FMTX         0x05
-
-#define BRCM_PCM2_SETUP_READ_SIZE       0x01
-#define BRCM_PCM2_SETUP_WRITE_SIZE      0x1A
-
-#endif
-
diff --git a/halimpl/bcm2079x/include/nfc_target.h b/halimpl/bcm2079x/include/nfc_target.h
index da72074..4f314b9 100644
--- a/halimpl/bcm2079x/include/nfc_target.h
+++ b/halimpl/bcm2079x/include/nfc_target.h
@@ -17,3 +17,40 @@
  ******************************************************************************/
 #pragma once
 #include "nfc_hal_target.h"
+
+/* the maximum number of NFCEE interface supported */
+#ifndef NFC_MAX_EE_INTERFACE
+#define NFC_MAX_EE_INTERFACE        3
+#endif
+
+/* the maximum number of NFCEE information supported. */
+#ifndef NFC_MAX_EE_INFO
+#define NFC_MAX_EE_INFO        8
+#endif
+
+/* the maximum number of NFCEE TLVs supported */
+#ifndef NFC_MAX_EE_TLVS
+#define NFC_MAX_EE_TLVS        1
+#endif
+
+/* the maximum size of NFCEE TLV list supported */
+#ifndef NFC_MAX_EE_TLV_SIZE
+#define NFC_MAX_EE_TLV_SIZE        150
+#endif
+
+/* Number of times reader/writer should attempt to resend a command on failure */
+#ifndef RW_MAX_RETRIES
+#define RW_MAX_RETRIES              5
+#endif
+
+/* Define to TRUE to include not openned Broadcom Vendor Specific implementation */
+
+/* API macros for DLL (needed to export API functions from DLLs) */
+#define NFC_API         EXPORT_API
+#define LLCP_API        EXPORT_API
+
+/* Max length of service name */
+#ifndef LLCP_MAX_SN_LEN
+#define LLCP_MAX_SN_LEN             255     /* max length of service name */
+#endif
+
diff --git a/halimpl/bcm2079x/include/userial.h b/halimpl/bcm2079x/include/userial.h
index 120d1ea..7ca7369 100644
--- a/halimpl/bcm2079x/include/userial.h
+++ b/halimpl/bcm2079x/include/userial.h
@@ -254,6 +254,7 @@
 UDRV_API extern void    USERIAL_Close(tUSERIAL_PORT);
 UDRV_API extern BOOLEAN USERIAL_Feature(tUSERIAL_FEATURE);
 UDRV_API extern BOOLEAN USERIAL_IsClosed();
+UDRV_API extern void    USERIAL_SetPowerOffDelays(int,int);
 UDRV_API extern void    USERIAL_PowerupDevice(tUSERIAL_PORT port);
 
 /*******************************************************************************
diff --git a/halimpl/bcm2079x/libnfc-brcm.conf b/halimpl/bcm2079x/libnfc-brcm.conf
deleted file mode 100644
index 5cf09e7..0000000
--- a/halimpl/bcm2079x/libnfc-brcm.conf
+++ /dev/null
@@ -1,208 +0,0 @@
-## this file is used by Broadcom's Hardware Abstraction Layer at external/libnfc-nci/halimpl/
-
-###############################################################################
-# Application options
-APPL_TRACE_LEVEL=0xFF
-PROTOCOL_TRACE_LEVEL=0xFFFFFFFF
-
-###############################################################################
-# performance measurement
-# Change this setting to control how often USERIAL log the performance (throughput)
-# data on read/write/poll
-# defailt is to log performance dara for every 100 read or write
-#REPORT_PERFORMANCE_MEASURE=100
-
-###############################################################################
-# File used for NFA storage
-NFA_STORAGE="/data/nfc"
-
-###############################################################################
-# Snooze Mode Settings
-#
-#  By default snooze mode is enabled.  Set SNOOZE_MODE_CFG byte[0] to 0
-#  to disable.
-#
-#  If SNOOZE_MODE_CFG is not provided, the default settings are used:
-#  They are as follows:
-#       8             Sleep Mode (0=Disabled 1=UART 8=SPI/I2C)
-#       0             Idle Threshold Host
-#       0             Idle Threshold HC
-#       0             NFC Wake active mode (0=ActiveLow 1=ActiveHigh)
-#       1             Host Wake active mode (0=ActiveLow 1=ActiveHigh)
-#
-#SNOOZE_MODE_CFG={08:00:00:00:01}
-
-###############################################################################
-# Insert a delay in milliseconds after NFC_WAKE and before write to NFCC
-NFC_WAKE_DELAY=20
-
-###############################################################################
-# Various Delay settings (in ms) used in USERIAL
-#  POWER_ON_DELAY
-#    Delay after turning on chip, before writing to transport (default 300)
-#  PRE_POWER_OFF_DELAY
-#    Delay after deasserting NFC-Wake before turn off chip (default 0)
-#  POST_POWER_OFF_DELAY
-#    Delay after turning off chip, before USERIAL_close returns (default 0)
-#
-#POWER_ON_DELAY=300
-#PRE_POWER_OFF_DELAY=0
-#POST_POWER_OFF_DELAY=0
-
-###############################################################################
-# LPTD mode configuration
-#  byte[0] is the length of the remaining bytes in this value
-#     if set to 0, LPTD params will NOT be sent to NFCC (i.e. disabled).
-#  byte[1] is the param id it should be set to B9.
-#  byte[2] is the length of the LPTD parameters
-#  byte[3] indicates if LPTD is enabled
-#     if set to 0, LPTD will be disabled (parameters will still be sent).
-#  byte[4-n] are the LPTD parameters.
-#  By default, LPTD is enabled and default settings are used.
-#  See nfc_hal_dm_cfg.c for defaults
-LPTD_CFG={23:B9:21:01:02:FF:FF:04:A0:0F:40:00:80:02:02:10:00:00:00:31:0C:30:00:00:00:00:00:00:00:00:00:00:00:00:00:00}
-
-###############################################################################
-# Startup Configuration (100 bytes maximum)
-#
-# For the 0xCA parameter, byte[9] (marked by 'AA') is for UICC0, and byte[10] (marked by BB) is
-#    for UICC1.  The values are defined as:
-#   0 : UICCx only supports ISO_DEP in low power mode.
-#   2 : UICCx only supports Mifare in low power mode.
-#   3 : UICCx supports both ISO_DEP and Mifare in low power mode.
-#
-#                                                                          AA BB
-NFA_DM_START_UP_CFG={1F:CB:01:01:A5:01:01:CA:14:00:00:00:00:06:E8:03:00:00:00:00:00:00:00:00:00:00:00:00:00:28:01:01}
-
-###############################################################################
-# Startup Vendor Specific Configuration (100 bytes maximum);
-#  byte[0] TLV total len = 0x5
-#  byte[1] NCI_MTS_CMD|NCI_GID_PROP = 0x2f
-#  byte[2] NCI_MSG_FRAME_LOG = 0x9
-#  byte[3] 2
-#  byte[4] 0=turn off RF frame logging; 1=turn on
-#  byte[5] 0=turn off SWP frame logging; 1=turn on
-#  NFA_DM_START_UP_VSC_CFG={05:2F:09:02:01:01}
-
-###############################################################################
-# Configure crystal frequency when internal LPO can't detect the frequency.
-#XTAL_FREQUENCY=0
-
-###############################################################################
-# Firmware patch file
-#  If the value is not set then patch download is disabled.
-FW_PATCH="/vendor/firmware/bcm2079x_firmware.ncd"
-
-###############################################################################
-# Firmware pre-patch file (sent before the above patch file)
-#  If the value is not set then pre-patch is not used.
-FW_PRE_PATCH="/vendor/firmware/bcm2079x_pre_firmware.ncd"
-
-###############################################################################
-# Firmware patch format
-#   1 = HCD
-#   2 = NCD (default)
-#NFA_CONFIG_FORMAT=2
-
-###############################################################################
-# SPD Debug mode
-#  If set to 1, any failure of downloading a patch will trigger a hard-stop
-#SPD_DEBUG=0
-
-###############################################################################
-# SPD Max Retry Count
-#  The number of attempts to download a patch before giving up (defualt is 3).
-#  Note, this resets after a power-cycle.
-#SPD_MAX_RETRY_COUNT=3
-
-###############################################################################
-# transport driver
-#
-# TRANSPORT_DRIVER=<driver>
-#
-#  where <driver> can be, for example:
-#    "/dev/ttyS"        (UART)
-#    "/dev/bcmi2cnfc"   (I2C)
-#    "hwtun"            (HW Tunnel)
-#    "/dev/bcmspinfc"   (SPI)
-#    "/dev/btusb0"      (BT USB)
-TRANSPORT_DRIVER="/dev/bcm2079x"
-
-###############################################################################
-# power control driver
-# Specify a kernel driver that support ioctl commands to control NFC_EN and
-# NFC_WAKE gpio signals.
-#
-# POWER_CONTRL_DRIVER=<driver>
-#  where <driver> can be, for example:
-#    "/dev/nfcpower"
-#    "/dev/bcmi2cnfc"   (I2C)
-#    "/dev/bcmspinfc"   (SPI)
-#    i2c and spi driver may be used to control NFC_EN and NFC_WAKE signal
-POWER_CONTROL_DRIVER="/dev/bcm2079x"
-
-###############################################################################
-# I2C transport driver options
-#
-BCMI2CNFC_ADDRESS=0
-
-###############################################################################
-# I2C transport driver try to read multiple packets in read() if data is available
-# remove the comment below to enable this feature
-#READ_MULTIPLE_PACKETS=1
-
-###############################################################################
-# SPI transport driver options
-#SPI_NEGOTIATION={0A:F0:00:01:00:00:00:FF:FF:00:00}
-
-###############################################################################
-# UART transport driver options
-#
-# PORT=1,2,3,...
-# BAUD=115200, 19200, 9600, 4800,
-# DATABITS=8, 7, 6, 5
-# PARITY="even" | "odd" | "none"
-# STOPBITS="0" | "1" | "1.5" | "2"
-
-#UART_PORT=2
-#UART_BAUD=115200
-#UART_DATABITS=8
-#UART_PARITY="none"
-#UART_STOPBITS="1"
-
-###############################################################################
-# Insert a delay in microseconds per byte after a write to NFCC.
-# after writing a block of data to the NFCC, delay this an amopunt of time before
-# writing next block of data.  the delay is calculated as below
-#   NFC_WRITE_DELAY * (number of byte written) / 1000 milliseconds
-# e.g. after 259 bytes is written, delay (259 * 20 / 1000) 5 ms before next write
-NFC_WRITE_DELAY=20
-
-###############################################################################
-# Maximum Number of Credits to be allowed by the NFCC
-#   This value overrides what the NFCC specifices allowing the host to have
-#   the control to work-around transport limitations.  If this value does
-#   not exist or is set to 0, the NFCC will provide the number of credits.
-MAX_RF_DATA_CREDITS=1
-
-###############################################################################
-# Allow UICC to be powered off if there is no traffic.
-# Timeout is in ms. If set to 0, then UICC will not be powered off.
-UICC_IDLE_TIMEOUT=30000
-
-
-###############################################################################
-# Antenna Configuration - This data is used when setting 0xC8 config item
-# at startup (before discovery is started).  If not used, no value is sent.
-#
-# The settings for this value are documented here:
-# http://wcgbu.broadcom.com/wpan/PM/Project%20Document%20Library/bcm20791B0/
-#   Design/Doc/PHY%20register%20settings/BCM20791-B2-1027-02_PHY_Recommended_Reg_Settings.xlsx
-# This document is maintained by Paul Forshaw.
-#
-# The values marked as ?? should be tweaked per antenna or customer/app:
-# {20:C8:1E:06:??:00:??:??:??:00:??:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:??:01:00:00:40:04}
-# array[0] = 0x20 is length of the payload from array[1] to the end
-# array[1] = 0xC8 is PREINIT_DSP_CFG
-#PREINIT_DSP_CFG={20:C8:1E:06:1F:00:0F:03:3C:00:04:24:00:1C:00:75:00:77:00:76:00:1C:00:03:00:0A:00:48:01:00:00:40:04}
-
diff --git a/halimpl/bcm2079x/nfc_nci.c b/halimpl/bcm2079x/nfc_nci.c
index 850357a..bbfbb4c 100644
--- a/halimpl/bcm2079x/nfc_nci.c
+++ b/halimpl/bcm2079x/nfc_nci.c
@@ -141,6 +141,7 @@
         dev->nci_device.control_granted = hal_control_granted;
         dev->nci_device.power_cycle = hal_power_cycle;
 
+
         // Copy in
         *device = (hw_device_t*) dev;
 
diff --git a/halimpl/bcm2079x/udrv/include/upio.h b/halimpl/bcm2079x/udrv/include/upio.h
deleted file mode 100644
index 77ee4ba..0000000
--- a/halimpl/bcm2079x/udrv/include/upio.h
+++ /dev/null
@@ -1,366 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2001-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-#ifndef UPIO_H
-#define UPIO_H
-
-/* Enumeration of UPIO features                                         */
-/* Not all features enumerated here are supported by the hardware.      */
-/* Use UPIO_Feature() to determine support of a particular feature.     */
-enum
-{
-    /* LEDs */
-    UPIO_FEAT_LED1,
-    UPIO_FEAT_LED2,
-    UPIO_FEAT_LED3,
-    UPIO_FEAT_LED4,
-    UPIO_FEAT_LED5,
-    UPIO_FEAT_LED6,
-    UPIO_FEAT_LED7,
-    UPIO_FEAT_LED8,
-
-    /* Switches */
-    UPIO_FEAT_SWITCH1,
-    UPIO_FEAT_SWITCH2,
-    UPIO_FEAT_SWITCH3,
-    UPIO_FEAT_SWITCH4,
-    UPIO_FEAT_SWITCH5,
-    UPIO_FEAT_SWITCH6,
-    UPIO_FEAT_SWITCH7,
-    UPIO_FEAT_SWITCH8,
-    UPIO_FEAT_SWITCH9,
-    UPIO_FEAT_SWITCH10,
-    UPIO_FEAT_SWITCH11,
-    UPIO_FEAT_SWITCH12,
-    UPIO_FEAT_SWITCH13,
-    UPIO_FEAT_SWITCH14,
-    UPIO_FEAT_SWITCH15,
-    UPIO_FEAT_SWITCH16,
-
-    /* Jumpers */
-    UPIO_FEAT_JUMPER1,
-    UPIO_FEAT_JUMPER2,
-    UPIO_FEAT_JUMPER3,
-    UPIO_FEAT_JUMPER4,
-    UPIO_FEAT_JUMPER5,
-    UPIO_FEAT_JUMPER6,
-    UPIO_FEAT_JUMPER7,
-    UPIO_FEAT_JUMPER8,
-
-    /* Push buttons */
-    UPIO_FEAT_BUTTON1,
-    UPIO_FEAT_BUTTON2,
-    UPIO_FEAT_BUTTON3,
-    UPIO_FEAT_BUTTON4,
-    UPIO_FEAT_BUTTON5,
-    UPIO_FEAT_BUTTON6,
-    UPIO_FEAT_BUTTON7,
-    UPIO_FEAT_BUTTON8,
-
-    /* General purpose */
-    UPIO_FEAT_GENERAL1,
-    UPIO_FEAT_GENERAL2,
-    UPIO_FEAT_GENERAL3,
-    UPIO_FEAT_GENERAL4,
-    UPIO_FEAT_GENERAL5,
-    UPIO_FEAT_GENERAL6,
-    UPIO_FEAT_GENERAL7,
-    UPIO_FEAT_GENERAL8,
-    UPIO_FEAT_GENERAL9,
-    UPIO_FEAT_GENERAL10,
-    UPIO_FEAT_GENERAL11,
-    UPIO_FEAT_GENERAL12,
-    UPIO_FEAT_GENERAL13,
-    UPIO_FEAT_GENERAL14,
-    UPIO_FEAT_GENERAL15,
-    UPIO_FEAT_GENERAL16,
-    UPIO_FEAT_GENERAL17,
-    UPIO_FEAT_GENERAL18,
-    UPIO_FEAT_GENERAL19,
-    UPIO_FEAT_GENERAL20,
-    UPIO_FEAT_GENERAL21,
-    UPIO_FEAT_GENERAL22,
-    UPIO_FEAT_GENERAL23,
-    UPIO_FEAT_GENERAL24,
-    UPIO_FEAT_GENERAL25,
-    UPIO_FEAT_GENERAL26,
-    UPIO_FEAT_GENERAL27,
-    UPIO_FEAT_GENERAL28,
-    UPIO_FEAT_GENERAL29,
-    UPIO_FEAT_GENERAL30,
-    UPIO_FEAT_GENERAL31,
-    UPIO_FEAT_GENERAL32,
-
-    UPIO_FEAT_IN_HIGH,          /* Support for input with interrupt on high signal level. */
-    UPIO_FEAT_IN_LOW,           /* Support for input with interrupt on low signal level. */
-    UPIO_FEAT_IN_RISE,          /* Support for input with interrupt on rising edge. */
-    UPIO_FEAT_IN_FALL           /* Support for input with interrupt on falling. */
-
-};
-typedef UINT8 tUPIO_FEATURE;
-
-
-/* Enumeration of UPIO configurations */
-enum
-{
-    UPIO_OUT,
-    UPIO_IN,
-    UPIO_IN_EDGE,
-    UPIO_IN_LEVEL,
-    UPIO_NONE
-};
-typedef UINT8 tUPIO_CONFIG;
-
-
-/* Enumeration of UPIO types */
-enum
-{
-    UPIO_LED,                   /* LED */
-    UPIO_SWITCH,                /* Switch */
-    UPIO_JUMPER,                /* Jumper */
-    UPIO_BUTTON,                /* Push-button switch */
-    UPIO_GENERAL,               /* General purpose I/O */
-
-    UPIO_NUMBER_OF_TYPES
-};
-typedef UINT8 tUPIO_TYPE;
-
-
-/* Enumeration of UPIO states */
-enum
-{
-    UPIO_OFF,
-    UPIO_ON,
-    UPIO_TOGGLE
-};
-typedef UINT8 tUPIO_STATE;
-
-
-enum
-{
-    UPIO_SW_BANK2,
-    UPIO_SW_BANK3
-};
-typedef UINT8 tUPIO_SW_BANK;
-
-/* Jumper masks */
-#define UPIO_JUMPER1    0x00000001
-#define UPIO_JUMPER2    0x00000002
-#define UPIO_JUMPER3    0x00000004
-#define UPIO_JUMPER4    0x00000008
-#define UPIO_JUMPER5    0x00000010
-#define UPIO_JUMPER6    0x00000020
-#define UPIO_JUMPER7    0x00000040
-#define UPIO_JUMPER8    0x00000080
-
-/* General purpose i/o masks */
-#define UPIO_GENERAL1   0x00000001
-#define UPIO_GENERAL2   0x00000002
-#define UPIO_GENERAL3   0x00000004
-#define UPIO_GENERAL4   0x00000008
-#define UPIO_GENERAL5   0x00000010
-#define UPIO_GENERAL6   0x00000020
-#define UPIO_GENERAL7   0x00000040
-#define UPIO_GENERAL8   0x00000080
-#define UPIO_GENERAL9   0x00000100
-#define UPIO_GENERAL10  0x00000200
-#define UPIO_GENERAL11  0x00000400
-#define UPIO_GENERAL12  0x00000800
-#define UPIO_GENERAL13  0x00001000
-#define UPIO_GENERAL14  0x00002000
-#define UPIO_GENERAL15  0x00004000
-#define UPIO_GENERAL16  0x00008000
-#define UPIO_GENERAL17  0x00010000
-#define UPIO_GENERAL18  0x00020000
-#define UPIO_GENERAL19  0x00040000
-#define UPIO_GENERAL20  0x00080000
-#define UPIO_GENERAL21  0x00100000
-#define UPIO_GENERAL22  0x00200000
-#define UPIO_GENERAL23  0x00400000
-#define UPIO_GENERAL24  0x00800000
-#define UPIO_GENERAL25  0x01000000
-#define UPIO_GENERAL26  0x02000000
-#define UPIO_GENERAL27  0x04000000
-#define UPIO_GENERAL28  0x08000000
-#define UPIO_GENERAL29  0x10000000
-#define UPIO_GENERAL30  0x20000000
-#define UPIO_GENERAL31  0x40000000
-#define UPIO_GENERAL32  0x80000000
-
-typedef UINT32 tUPIO;
-
-/* LED masks */
-#define UPIO_LED1       0x00000001
-#define UPIO_LED2       0x00000002
-#define UPIO_LED3       0x00000004
-#define UPIO_LED4       0x00000008
-#define UPIO_LED5       0x00000010
-#define UPIO_LED6       0x00000020
-#define UPIO_LED7       0x00000040
-#define UPIO_LED8       0x00000080
-
-#define UPIO_LED_ALL    (UPIO_LED1 | UPIO_LED2 | UPIO_LED3 | UPIO_LED4 | \
-                        UPIO_LED5 | UPIO_LED6 | UPIO_LED7 | UPIO_LED8)
-
-
-/* Switch masks */
-#define UPIO_SWITCH1    0x00000001
-#define UPIO_SWITCH2    0x00000002
-#define UPIO_SWITCH3    0x00000004
-#define UPIO_SWITCH4    0x00000008
-#define UPIO_SWITCH5    0x00000010
-#define UPIO_SWITCH6    0x00000020
-#define UPIO_SWITCH7    0x00000040
-#define UPIO_SWITCH8    0x00000080
-#define UPIO_SWITCH9    0x00000100
-#define UPIO_SWITCH10   0x00000200
-#define UPIO_SWITCH11   0x00000400
-#define UPIO_SWITCH12   0x00000800
-#define UPIO_SWITCH13   0x00001000
-#define UPIO_SWITCH14   0x00002000
-#define UPIO_SWITCH15   0x00004000
-#define UPIO_SWITCH16   0x00008000
-
-/* Push button masks */
-#define UPIO_BUTTON1    0x00000001
-#define UPIO_BUTTON2    0x00000002
-#define UPIO_BUTTON3    0x00000004
-#define UPIO_BUTTON4    0x00000008
-#define UPIO_BUTTON5    0x00000010
-#define UPIO_BUTTON6    0x00000020
-#define UPIO_BUTTON7    0x00000040
-#define UPIO_BUTTON8    0x00000080
-
-typedef void (tUPIO_CBACK)(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE state);
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* API functions for UPIO driver */
-
-/*****************************************************************************
-**
-** Function         UPIO_Init
-**
-** Description
-**      Initialize the GPIO service.
-**      This function is typically called once upon system startup.
-**
-** Returns          nothing
-**
-*****************************************************************************/
-UDRV_API void UPIO_Init(void *p_cfg);
-
-
-/*****************************************************************************
-**
-** Function         UPIO_Set
-**
-** Description
-**      This function sets one or more GPIO devices to the given state.
-**      Multiple GPIOs of the same type can be masked together to set more
-**      than one GPIO. This function can only be used on types UPIO_LED and
-**      UPIO_GENERAL.
-**
-** Input Parameters:
-**      type    The type of device.
-**      pio     Indicates the particular GPIOs.
-**      state   The desired state.
-**
-** Output Parameter:
-**      None.
-**
-** Returns:
-**      None.
-**
-*****************************************************************************/
-UDRV_API void UPIO_Set(tUPIO_TYPE type, tUPIO pio, tUPIO_STATE state);
-
-
-/*****************************************************************************
-**
-** Function         UPIO_Read
-**
-** Description
-**      Read the state of a GPIO. This function can be used for any type of
-**      device. Parameter pio can only indicate a single GPIO; multiple GPIOs
-**      cannot be masked together.
-**
-** Input Parameters:
-**      Type:	The type of device.
-**      pio:    Indicates the particular GUPIO.
-**
-** Output Parameter:
-**      None.
-**
-** Returns:
-**      State of GPIO (UPIO_ON or UPIO_OFF).
-**
-*****************************************************************************/
-UDRV_API tUPIO_STATE UPIO_Read(tUPIO_TYPE type, tUPIO pio);
-
-
-/*****************************************************************************
-**
-** Function         UPIO_Config
-**
-** Description      - Configure GPIOs of type UPIO_GENERAL as inputs or outputs
-**                  - Configure GPIOs to be polled or interrupt driven
-**
-**                  Currently only support polled GPIOs.
-**
-** Input Parameters:
-**      type    The type of device.
-**      pio     Indicates the particular GPIOs.
-**      config
-**      cback
-**
-** Output Parameter:
-**      None.
-**
-** Returns:
-**      None.
-**
-*****************************************************************************/
-UDRV_API void UPIO_Config(tUPIO_TYPE type, tUPIO pio, tUPIO_CONFIG config, tUPIO_CBACK *cback);
-
-
-/*****************************************************************************
-**
-** Function         UPIO_Feature
-**
-** Description
-**      Checks whether a feature of the pio API is supported
-**
-** Input Parameter:
-**      feature     The feature to check
-**
-** Output Parameter:
-**      None.
-**
-** Returns:
-**      TRUE if feature is supported, FALSE if it is not.
-**
-*****************************************************************************/
-UDRV_API BOOLEAN UPIO_Feature(tUPIO_FEATURE feature);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif  /* ifdef UPIO_H */
diff --git a/src/adaptation/NfcAdaptation.cpp b/src/adaptation/NfcAdaptation.cpp
index d2c527d..a589528 100755
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cpp
@@ -29,17 +29,24 @@
 
 extern "C" void GKI_shutdown();
 extern void resetConfig();
+extern "C" void delete_stack_non_volatile_store ();
 
 NfcAdaptation* NfcAdaptation::mpInstance = NULL;
 ThreadMutex NfcAdaptation::sLock;
 nfc_nci_device_t* NfcAdaptation::mHalDeviceContext = NULL;
 tHAL_NFC_CBACK* NfcAdaptation::mHalCallback = NULL;
 tHAL_NFC_DATA_CBACK* NfcAdaptation::mHalDataCallback = NULL;
+ThreadCondVar NfcAdaptation::mHalOpenCompletedEvent;
+ThreadCondVar NfcAdaptation::mHalCloseCompletedEvent;
 
 UINT32 ScrProtocolTraceFlag = SCR_PROTO_TRACE_ALL; //0x017F00;
 UINT8 appl_trace_level = 0xff;
 char bcm_nfc_location[120];
 
+static UINT8 nfa_dm_cfg[sizeof ( tNFA_DM_CFG ) ];
+extern tNFA_DM_CFG *p_nfa_dm_cfg;
+extern UINT8 nfa_ee_max_ee_cfg;
+
 /*******************************************************************************
 **
 ** Function:    NfcAdaptation::NfcAdaptation()
@@ -104,8 +111,24 @@
         strcpy ( bcm_nfc_location, "/data/nfc" );
     if ( GetNumValue ( NAME_PROTOCOL_TRACE_LEVEL, &num, sizeof ( num ) ) )
         ScrProtocolTraceFlag = num;
+
+    if ( GetStrValue ( NAME_NFA_DM_CFG, (char*)nfa_dm_cfg, sizeof ( nfa_dm_cfg ) ) )
+        p_nfa_dm_cfg = ( tNFA_DM_CFG * ) &nfa_dm_cfg[0];
+
+    if ( GetNumValue ( NAME_NFA_MAX_EE_SUPPORTED, &num, sizeof ( num ) ) )
+    {
+        nfa_ee_max_ee_cfg = num;
+        ALOGD("%s: Overriding NFA_EE_MAX_EE_SUPPORTED to use %d", func, nfa_ee_max_ee_cfg);
+    }
+
     initializeGlobalAppLogLevel ();
 
+    if ( GetNumValue ( NAME_PRESERVE_STORAGE, (char*)&num, sizeof ( num ) ) &&
+            (num == 1) )
+        ALOGD ("%s: preserve stack NV store", __FUNCTION__);
+    else
+        delete_stack_non_volatile_store ();
+
     GKI_init ();
     GKI_enable ();
     GKI_create_task ((TASKPTR)NFCA_TASK, BTU_TASK, (INT8*)"NFCA_TASK", 0, 0, (pthread_cond_t*)NULL, NULL);
@@ -194,8 +217,6 @@
 UINT32 NfcAdaptation::Thread (UINT32 arg)
 {
     const char* func = "NfcAdaptation::Thread";
-    unsigned long num;
-    char temp[120];
     ALOGD ("%s: enter", func);
 
     {
@@ -478,6 +499,80 @@
     }
 }
 
+
+/*******************************************************************************
+**
+** Function:    NfcAdaptation::DownloadFirmware
+**
+** Description: Download firmware patch files.
+**
+** Returns:     None.
+**
+*******************************************************************************/
+void NfcAdaptation::DownloadFirmware ()
+{
+    const char* func = "NfcAdaptation::DownloadFirmware";
+    ALOGD ("%s: enter", func);
+    HalInitialize ();
+
+    mHalOpenCompletedEvent.lock ();
+    ALOGD ("%s: try open HAL", func);
+    HalOpen (HalDownloadFirmwareCallback, HalDownloadFirmwareDataCallback);
+    mHalOpenCompletedEvent.wait ();
+
+    mHalCloseCompletedEvent.lock ();
+    ALOGD ("%s: try close HAL", func);
+    HalClose ();
+    mHalCloseCompletedEvent.wait ();
+
+    HalTerminate ();
+    ALOGD ("%s: exit", func);
+}
+
+/*******************************************************************************
+**
+** Function:    NfcAdaptation::HalDownloadFirmwareCallback
+**
+** Description: Receive events from the HAL.
+**
+** Returns:     None.
+**
+*******************************************************************************/
+void NfcAdaptation::HalDownloadFirmwareCallback (nfc_event_t event, nfc_status_t event_status)
+{
+    const char* func = "NfcAdaptation::HalDownloadFirmwareCallback";
+    ALOGD ("%s: event=0x%X", func, event);
+    switch (event)
+    {
+    case HAL_NFC_OPEN_CPLT_EVT:
+        {
+            ALOGD ("%s: HAL_NFC_OPEN_CPLT_EVT", func);
+            mHalOpenCompletedEvent.signal ();
+            break;
+        }
+    case HAL_NFC_CLOSE_CPLT_EVT:
+        {
+            ALOGD ("%s: HAL_NFC_CLOSE_CPLT_EVT", func);
+            mHalCloseCompletedEvent.signal ();
+            break;
+        }
+    }
+}
+
+/*******************************************************************************
+**
+** Function:    NfcAdaptation::HalDownloadFirmwareDataCallback
+**
+** Description: Receive data events from the HAL.
+**
+** Returns:     None.
+**
+*******************************************************************************/
+void NfcAdaptation::HalDownloadFirmwareDataCallback (uint16_t data_len, uint8_t* p_data)
+{
+}
+
+
 /*******************************************************************************
 **
 ** Function:    ThreadMutex::ThreadMutex()
diff --git a/src/adaptation/config.cpp b/src/adaptation/config.cpp
index c7cce1d..1498b5d 100755
--- a/src/adaptation/config.cpp
+++ b/src/adaptation/config.cpp
@@ -24,12 +24,7 @@
 
 #define LOG_TAG "NfcAdaptation"
 
-#if GENERIC_TARGET
-const char alternative_config_path[] = "/data/nfc/";
-#else
 const char alternative_config_path[] = "";
-#endif
-
 const char transport_config_path[] = "/etc/";
 
 #define config_name             "libnfc-brcm.conf"
@@ -61,7 +56,7 @@
     static CNfcConfig& GetInstance();
     friend void readOptionalConfig(const char* optional);
 
-    bool    getValue(const char* name, char* pValue, size_t len) const;
+    bool    getValue(const char* name, char* pValue, size_t& len) const;
     bool    getValue(const char* name, unsigned long& rValue) const;
     bool    getValue(const char* name, unsigned short & rValue) const;
     const CNfcParam*    find(const char* p_name) const;
@@ -166,14 +161,14 @@
         END_LINE
     };
 
-    FILE*   fd;
+    FILE*   fd = NULL;
     string  token;
     string  strValue;
     unsigned long    numValue = 0;
     CNfcParam* pParam = NULL;
-    int     i;
-    int     base;
-    char    c;
+    int     i = 0;
+    int     base = 0;
+    char    c = 0;
 
     state = BEGIN_LINE;
     /* open config file, read it into a buffer */
@@ -413,7 +408,7 @@
 **              false if setting does not exist
 **
 *******************************************************************************/
-bool CNfcConfig::getValue(const char* name, char* pValue, size_t len) const
+bool CNfcConfig::getValue(const char* name, char* pValue, size_t& len) const
 {
     const CNfcParam* pParam = find(name);
     if (pParam == NULL)
@@ -422,7 +417,9 @@
     if (pParam->str_len() > 0)
     {
         memset(pValue, 0, len);
-        memcpy(pValue, pParam->str_value(), pParam->str_len());
+        if (len > pParam->str_len())
+            len  = pParam->str_len();
+        memcpy(pValue, pParam->str_value(), len);
         return true;
     }
     return false;
@@ -499,7 +496,7 @@
             if((*it)->str_len() > 0)
                 ALOGD("%s found %s=%s\n", __func__, p_name, (*it)->str_value());
             else
-                ALOGD("%s found %s=(0x%X)\n", __func__, p_name, (*it)->numValue());
+                ALOGD("%s found %s=(0x%lX)\n", __func__, p_name, (*it)->numValue());
             return *it;
         }
         else
@@ -658,11 +655,13 @@
 ** Returns:     none
 **
 *******************************************************************************/
-extern "C" int GetStrValue(const char* name, char* pValue, unsigned long len)
+extern "C" int GetStrValue(const char* name, char* pValue, unsigned long l)
 {
+    size_t len = l;
     CNfcConfig& rConfig = CNfcConfig::GetInstance();
 
-    return rConfig.getValue(name, pValue, len);
+    bool b = rConfig.getValue(name, pValue, len);
+    return b ? len : 0;
 }
 
 /*******************************************************************************
@@ -688,7 +687,7 @@
     if (v == 0 && pParam->str_len() > 0 && pParam->str_len() < 4)
     {
         const unsigned char* p = (const unsigned char*)pParam->str_value();
-        for (int i = 0 ; i < pParam->str_len(); ++i)
+        for (size_t i = 0 ; i < pParam->str_len(); ++i)
         {
             v *= 256;
             v += *p++;
diff --git a/src/adaptation/libmain.c b/src/adaptation/libmain.c
index ad3f6ec..1a2a6d9 100755
--- a/src/adaptation/libmain.c
+++ b/src/adaptation/libmain.c
@@ -25,6 +25,7 @@
 #include "nfa_nv_co.h"
 #include "nfa_nv_ci.h"
 #include "config.h"
+#include "nfc_hal_nv_co.h"
 
 #define LOG_TAG "BrcmNfcNfa"
 #define PRINT(s) __android_log_write(ANDROID_LOG_DEBUG, "BrcmNci", s)
@@ -35,6 +36,7 @@
 extern UINT32 ScrProtocolTraceFlag;         // = SCR_PROTO_TRACE_ALL; // 0x017F;
 static const char* sTable = "0123456789abcdef";
 extern char bcm_nfc_location[];
+static const char* sNfaStorageBin = "/nfaStorage.bin";
 
 /*******************************************************************************
 **
@@ -92,8 +94,11 @@
 NFC_API extern void nfa_nv_co_read(UINT8 *pBuffer, UINT16 nbytes, UINT8 block)
 {
     char filename[256], filename2[256];
+
+    memset (filename, 0, sizeof(filename));
+    memset (filename2, 0, sizeof(filename2));
     strcpy(filename2, bcm_nfc_location);
-    strcat(filename2, "/nfaStorage.bin");
+    strncat(filename2, sNfaStorageBin, sizeof(filename2)-strlen(filename2)-1);
     if (strlen(filename2) > 200)
     {
         ALOGE ("%s: filename too long", __FUNCTION__);
@@ -103,7 +108,7 @@
 
     ALOGD ("%s: buffer len=%u; file=%s", __FUNCTION__, nbytes, filename);
     int fileStream = open (filename, O_RDONLY);
-    if (fileStream > 0)
+    if (fileStream >= 0)
     {
         size_t actualRead = read (fileStream, pBuffer, nbytes);
         if (actualRead > 0)
@@ -146,8 +151,11 @@
 NFC_API extern void nfa_nv_co_write(const UINT8 *pBuffer, UINT16 nbytes, UINT8 block)
 {
     char filename[256], filename2[256];
+
+    memset (filename, 0, sizeof(filename));
+    memset (filename2, 0, sizeof(filename2));
     strcpy(filename2, bcm_nfc_location);
-    strcat(filename2, "/nfaStorage.bin");
+    strncat(filename2, sNfaStorageBin, sizeof(filename2)-strlen(filename2)-1);
     if (strlen(filename2) > 200)
     {
         ALOGE ("%s: filename too long", __FUNCTION__);
@@ -159,7 +167,7 @@
     int fileStream = 0;
 
     fileStream = open (filename, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
-    if (fileStream > 0)
+    if (fileStream >= 0)
     {
         size_t actualWritten = write (fileStream, pBuffer, nbytes);
         ALOGD ("%s: %d bytes written", __FUNCTION__, actualWritten);
@@ -182,6 +190,47 @@
 
 /*******************************************************************************
 **
+** Function         delete_stack_non_volatile_store
+**
+** Description      Delete all the content of the stack's storage location.
+**
+** Parameters       none
+**
+** Returns          none
+**
+*******************************************************************************/
+void delete_stack_non_volatile_store ()
+{
+    static BOOLEAN firstTime = TRUE;
+    char filename[256], filename2[256];
+
+    if (firstTime == FALSE)
+        return;
+    firstTime = FALSE;
+
+    ALOGD ("%s", __FUNCTION__);
+
+    memset (filename, 0, sizeof(filename));
+    memset (filename2, 0, sizeof(filename2));
+    strcpy(filename2, bcm_nfc_location);
+    strncat(filename2, sNfaStorageBin, sizeof(filename2)-strlen(filename2)-1);
+    if (strlen(filename2) > 200)
+    {
+        ALOGE ("%s: filename too long", __FUNCTION__);
+        return;
+    }
+    sprintf (filename, "%s%u", filename2, DH_NV_BLOCK);
+    remove (filename);
+    sprintf (filename, "%s%u", filename2, HC_F3_NV_BLOCK);
+    remove (filename);
+    sprintf (filename, "%s%u", filename2, HC_F4_NV_BLOCK);
+    remove (filename);
+    sprintf (filename, "%s%u", filename2, HC_F2_NV_BLOCK);
+    remove (filename);
+}
+
+/*******************************************************************************
+**
 ** Function         byte2hex
 **
 ** Description      convert a byte array to hexadecimal string
diff --git a/src/gki/common/gki_buffer.c b/src/gki/common/gki_buffer.c
index 067c7ba..10a816a 100644
--- a/src/gki/common/gki_buffer.c
+++ b/src/gki/common/gki_buffer.c
@@ -29,6 +29,8 @@
 
 #if GKI_BUFFER_DEBUG
 #define LOG_TAG "GKI_DEBUG"
+#include <android/log.h>
+#include <cutils/log.h>
 #define LOGD(format, ...)  LogMsg (TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC, format, ## __VA_ARGS__)
 #endif
 /*******************************************************************************
@@ -100,7 +102,9 @@
 {
     FREE_QUEUE_T  *Q;
     tGKI_COM_CB *p_cb = &gki_cb.com;
-    printf("\ngki_alloc_free_queue in, id:%d \n", id);
+    #if GKI_BUFFER_DEBUG
+        ALOGD("\ngki_alloc_free_queue in, id:%d \n", id);
+    #endif
 
     Q = &p_cb->freeq[p_cb->pool_list[id]];
 
@@ -110,14 +114,20 @@
         if(p_mem)
         {
             //re-initialize the queue with allocated memory
-            printf("\ngki_alloc_free_queue calling  gki_init_free_queue, id:%d  size:%d, totol:%d\n", id, Q->size, Q->total);
+            #if GKI_BUFFER_DEBUG
+                ALOGD("\ngki_alloc_free_queue calling  gki_init_free_queue, id:%d  size:%d, totol:%d\n", id, Q->size, Q->total);
+            #endif
             gki_init_free_queue(id, Q->size, Q->total, p_mem);
-            printf("\ngki_alloc_free_queue ret OK, id:%d  size:%d, totol:%d\n", id, Q->size, Q->total);
+            #if GKI_BUFFER_DEBUG
+                ALOGD("\ngki_alloc_free_queue ret OK, id:%d  size:%d, totol:%d\n", id, Q->size, Q->total);
+            #endif
             return TRUE;
         }
         GKI_exception (GKI_ERROR_BUF_SIZE_TOOBIG, "gki_alloc_free_queue: Not enough memory");
     }
-    printf("\ngki_alloc_free_queue out failed, id:%d\n", id);
+    #if GKI_BUFFER_DEBUG
+        ALOGD("\ngki_alloc_free_queue out failed, id:%d\n", id);
+    #endif
     return FALSE;
 }
 #endif
@@ -400,6 +410,14 @@
                 return NULL;
             }
         #endif
+
+            if(Q->p_first == 0)
+            {
+                /* gki_alloc_free_queue() failed to alloc memory */
+                GKI_TRACE_ERROR_0("GKI_getbuf() fail alloc free queue");
+                return NULL;
+            }
+
             p_hdr = Q->p_first;
             Q->p_first = p_hdr->p_next;
 
@@ -504,6 +522,14 @@
         if(Q->p_first == 0 && gki_alloc_free_queue(pool_id) != TRUE)
             return NULL;
 #endif
+
+        if(Q->p_first == 0)
+        {
+            /* gki_alloc_free_queue() failed to alloc memory */
+            GKI_TRACE_ERROR_0("GKI_getpoolbuf() fail alloc free queue");
+            return NULL;
+        }
+
         p_hdr = Q->p_first;
         Q->p_first = p_hdr->p_next;
 
diff --git a/src/gki/common/gki_time.c b/src/gki/common/gki_time.c
index 10377f6..e840a36 100644
--- a/src/gki/common/gki_time.c
+++ b/src/gki/common/gki_time.c
@@ -444,6 +444,12 @@
     /* Check for OS Task Timers */
     for (task_id = 0; task_id < GKI_MAX_TASKS; task_id++)
     {
+        if (gki_cb.com.OSRdyTbl[task_id] == TASK_DEAD)
+        {
+            // task is shutdown do not try to service timers
+            continue;
+        }
+
         if (gki_cb.com.OSWaitTmr[task_id] > 0) /* If timer is running */
         {
             gki_cb.com.OSWaitTmr[task_id] -= gki_cb.com.OSNumOrigTicks;
diff --git a/src/gki/ulinux/data_types.h b/src/gki/ulinux/data_types.h
index 0768494..27ae561 100644
--- a/src/gki/ulinux/data_types.h
+++ b/src/gki/ulinux/data_types.h
@@ -34,7 +34,7 @@
 typedef signed   char   INT8;
 typedef signed   short  INT16;
 typedef unsigned char   BOOLEAN;
-
+typedef UINT32          UINTPTR;
 typedef UINT32          TIME_STAMP;
 
 #ifndef TRUE
diff --git a/src/gki/ulinux/gki_ulinux.c b/src/gki/ulinux/gki_ulinux.c
index b889469..3427a49 100644
--- a/src/gki/ulinux/gki_ulinux.c
+++ b/src/gki/ulinux/gki_ulinux.c
@@ -532,6 +532,9 @@
                 err = nanosleep(&delay, &delay);
             } while (err < 0 && errno == EINTR);
 
+            if (GKI_TIMER_TICK_RUN_COND != *p_run_cond)
+                break; //GKI has shutdown
+
             /* the unit should be alsways 1 (1 tick). only if you vary for some reason heart beat tick
              * e.g. power saving you may want to provide more ticks
              */
@@ -1229,6 +1232,7 @@
 void GKI_sched_lock(void)
 {
     GKI_TRACE_0("GKI_sched_lock");
+    GKI_disable ();
     return;
 }
 
@@ -1249,6 +1253,7 @@
 void GKI_sched_unlock(void)
 {
     GKI_TRACE_0("GKI_sched_unlock");
+    GKI_enable ();
 }
 
 /*******************************************************************************
diff --git a/src/hal/include/gki_hal_target.h b/src/hal/include/gki_hal_target.h
index 9714348..d0a2276 100644
--- a/src/hal/include/gki_hal_target.h
+++ b/src/hal/include/gki_hal_target.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2012 Broadcom Corporation
+ *  Copyright (C) 2012-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -15,6 +15,7 @@
  *  limitations under the License.
  *
  ******************************************************************************/
+
 #ifndef GKI_HAL_TARGET_H
 #define GKI_HAL_TARGET_H
 
@@ -54,6 +55,23 @@
 #define GKI_MAX_TASKS               1
 #endif
 
+
+/******************************************************************************
+**
+** Buffer pool assignment
+**
+******************************************************************************/
+
+/* GKI pool for NCI messages */
+#ifndef NFC_HAL_NCI_POOL_ID
+#define NFC_HAL_NCI_POOL_ID         GKI_POOL_ID_1
+#endif
+
+#ifndef NFC_HAL_NCI_POOL_BUF_SIZE
+#define NFC_HAL_NCI_POOL_BUF_SIZE   GKI_BUF1_SIZE
+#endif
+
+
 /******************************************************************************
 **
 ** Timer configuration
@@ -225,6 +243,11 @@
 #endif
 
 
+#if defined(GKI_DEBUG) && (GKI_DEBUG == TRUE)
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+#define LOG_TAG "GKI_LINUX"
 /* GKI Trace Macros */
 #define GKI_TRACE_0(m)                          LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m)
 #define GKI_TRACE_1(m,p1)                       LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1)
@@ -233,6 +256,16 @@
 #define GKI_TRACE_4(m,p1,p2,p3,p4)              LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2,p3,p4)
 #define GKI_TRACE_5(m,p1,p2,p3,p4,p5)           LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2,p3,p4,p5)
 #define GKI_TRACE_6(m,p1,p2,p3,p4,p5,p6)        LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_GENERIC,m,p1,p2,p3,p4,p5,p6)
+#else
+#define GKI_TRACE_0(m)
+#define GKI_TRACE_1(m,p1)
+#define GKI_TRACE_2(m,p1,p2)
+#define GKI_TRACE_3(m,p1,p2,p3)
+#define GKI_TRACE_4(m,p1,p2,p3,p4)
+#define GKI_TRACE_5(m,p1,p2,p3,p4,p5)
+#define GKI_TRACE_6(m,p1,p2,p3,p4,p5,p6)
+
+#endif
 
 #define GKI_TRACE_ERROR_0(m)                    LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m)
 #define GKI_TRACE_ERROR_1(m,p1)                 LogMsg(TRACE_CTRL_GENERAL | TRACE_LAYER_GKI | TRACE_ORG_GKI | TRACE_TYPE_ERROR,m,p1)
diff --git a/src/hal/include/nci_defs.h b/src/hal/include/nci_defs.h
index befffd9..1b24829 100644
--- a/src/hal/include/nci_defs.h
+++ b/src/hal/include/nci_defs.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 1999-2012 Broadcom Corporation
+ *  Copyright (C) 1999-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the definition from NCI specification
@@ -625,12 +626,15 @@
 } tNCI_DISCOVER_MAPS;
 
 #define NCI_NFCID1_MAX_LEN    10
+#define NCI_T1T_HR_LEN        2
 typedef struct
 {
     UINT8       sens_res[2];/* SENS_RES Response (ATQA). Available after Technology Detection */
-    UINT8       nfcid1_len;    /* 4, 7 or 10 */
+    UINT8       nfcid1_len;         /* 4, 7 or 10 */
     UINT8       nfcid1[NCI_NFCID1_MAX_LEN]; /* AKA NFCID1 */
     UINT8       sel_rsp;    /* SEL_RSP (SAK) Available after Collision Resolution */
+    UINT8       hr_len;     /* 2, if T1T HR0/HR1 is reported */
+    UINT8       hr[NCI_T1T_HR_LEN]; /* T1T HR0 is in hr[0], HR1 is in hr[1] */
 } tNCI_RF_PA_PARAMS;
 
 
diff --git a/src/hal/include/nfc_hal_api.h b/src/hal/include/nfc_hal_api.h
index d147527..f73873b 100644
--- a/src/hal/include/nfc_hal_api.h
+++ b/src/hal/include/nfc_hal_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2012 Broadcom Corporation
+ *  Copyright (C) 2012-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  NFC Hardware Abstraction Layer API
@@ -23,7 +24,7 @@
  ******************************************************************************/
 #ifndef NFC_HAL_API_H
 #define NFC_HAL_API_H
-#include <hardware/nfc.h>
+#include <hardware/nfc.h> /* Android must include HAL header */
 #include "data_types.h"
 
 /****************************************************************************
@@ -38,8 +39,40 @@
 } NFC_HDR;
 #define NFC_HDR_SIZE (sizeof (NFC_HDR))
 
+/*******************************************************************************
+** tHAL_STATUS Definitions are defined in hardware/libhardware/include/hardware/nfc.h
+** #define HAL_NFC_STATUS_OK               0
+** #define HAL_NFC_STATUS_FAILED           1
+** #define HAL_NFC_STATUS_ERR_TRANSPORT    2
+** #define HAL_NFC_STATUS_ERR_CMD_TIMEOUT  3
+** #define HAL_NFC_STATUS_REFUSED          4
+*******************************************************************************/
+
 typedef UINT8 tHAL_NFC_STATUS;
 
+/*******************************************************************************
+** tHAL_HCI_NETWK_CMD Definitions
+*******************************************************************************/
+#define HAL_NFC_HCI_NO_UICC_HOST    0x00
+#define HAL_NFC_HCI_UICC0_HOST      0x01
+#define HAL_NFC_HCI_UICC1_HOST      0x02
+
+/*******************************************************************************
+** tHAL_NFC_CBACK Definitions
+*******************************************************************************/
+
+/*******************************************************************************
+** tHAL_NFC_CBACK events are defined in hardware/libhardware/include/hardware/nfc.h
+** #define HAL_NFC_OPEN_CPLT_EVT           0x00
+** #define HAL_NFC_CLOSE_CPLT_EVT          0x01
+** #define HAL_NFC_POST_INIT_CPLT_EVT      0x02
+** #define HAL_NFC_PRE_DISCOVER_CPLT_EVT   0x03
+** #define HAL_NFC_REQUEST_CONTROL_EVT     0x04
+** #define HAL_NFC_RELEASE_CONTROL_EVT     0x05
+** #define HAL_NFC_ERROR_EVT               0x06
+*******************************************************************************/
+
+
 typedef void (tHAL_NFC_STATUS_CBACK) (tHAL_NFC_STATUS status);
 typedef void (tHAL_NFC_CBACK) (UINT8 event, tHAL_NFC_STATUS status);
 typedef void (tHAL_NFC_DATA_CBACK) (UINT16 data_len, UINT8   *p_data);
@@ -59,6 +92,15 @@
 typedef void (tHAL_API_POWER_CYCLE) (void);
 
 
+/* data members for NFC_HAL-HCI */
+typedef struct
+{
+    BOOLEAN nfc_hal_prm_nvm_required;       /* set nfc_hal_prm_nvm_required to TRUE, if the platform wants to abort PRM process without NVM */
+    UINT16  nfc_hal_nfcc_enable_timeout;    /* max time to wait for RESET NTF after setting REG_PU to high */
+    UINT16  nfc_hal_post_xtal_timeout;      /* max time to wait for RESET NTF after setting Xtal frequency */
+    UINT8   nfc_hal_hci_uicc_support;       /* set nfc_hal_hci_uicc_support to Zero, if no UICC is supported otherwise set corresponding bit(s) for every supported UICC(s) */
+} tNFC_HAL_CFG;
+
 typedef struct
 {
     tHAL_API_INITIALIZE *initialize;
diff --git a/src/hal/include/nfc_hal_target.h b/src/hal/include/nfc_hal_target.h
index b6eedc9..2e5914a 100644
--- a/src/hal/include/nfc_hal_target.h
+++ b/src/hal/include/nfc_hal_target.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2012 Broadcom Corporation
+ *  Copyright (C) 2012-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -15,28 +15,17 @@
  *  limitations under the License.
  *
  ******************************************************************************/
+
 #ifndef NFC_HAL_TARGET_H
 #define NFC_HAL_TARGET_H
 
+#include "gki.h"
 #include "data_types.h"
 
-#ifdef BUILDCFG
-#include "buildcfg_hal.h"
-#endif
-
 /****************************************************************************
 ** NCI related configuration
 ****************************************************************************/
 
-/* GKI pool for NCI messages */
-#ifndef NFC_HAL_NCI_POOL_ID
-#define NFC_HAL_NCI_POOL_ID                     GKI_POOL_ID_1
-#endif
-
-#ifndef NFC_HAL_NCI_POOL_BUF_SIZE
-#define NFC_HAL_NCI_POOL_BUF_SIZE               GKI_BUF1_SIZE
-#endif
-
 /* Initial Max Control Packet Payload Size (until receiving payload size in INIT_CORE_RSP) */
 #ifndef NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE
 #define NFC_HAL_NCI_INIT_CTRL_PAYLOAD_SIZE      0xFF
@@ -83,6 +72,11 @@
 #define NFC_HAL_POWER_CYCLE_DELAY               100
 #endif
 
+/* time (in ms) between power off and on NFCC */
+#ifndef NFC_HAL_NFCC_ENABLE_TIMEOUT
+#define NFC_HAL_NFCC_ENABLE_TIMEOUT             1000
+#endif
+
 #ifndef NFC_HAL_PRM_DEBUG
 #define NFC_HAL_PRM_DEBUG                       TRUE
 #endif
@@ -109,9 +103,9 @@
 #define NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE    (32)
 #endif
 
-/* amount of time to wait for RESET NTF after patch download */
-#ifndef NFC_HAL_PRM_RESET_NTF_DELAY
-#define NFC_HAL_PRM_RESET_NTF_DELAY             (10000)
+/* amount of time to wait for authenticating/committing patch to NVM */
+#ifndef NFC_HAL_PRM_COMMIT_DELAY
+#define NFC_HAL_PRM_COMMIT_DELAY                (30000)
 #endif
 
 /* amount of time to wait after downloading preI2C patch before downloading LPM/FPM patch */
@@ -164,81 +158,123 @@
 #ifndef NFC_HAL_TRACE_PROTOCOL
 #define NFC_HAL_TRACE_PROTOCOL                  TRUE
 #endif
+
+/* Legacy protocol-trace-enable macro */
+#ifndef BT_TRACE_PROTOCOL
 #define BT_TRACE_PROTOCOL                       (NFC_HAL_TRACE_PROTOCOL)
-
-#define LogMsg_0 LogMsg
-#define LogMsg_1 LogMsg
-#define LogMsg_2 LogMsg
-#define LogMsg_3 LogMsg
-#define LogMsg_4 LogMsg
-#define LogMsg_5 LogMsg
-#define LogMsg_6 LogMsg
-
-/* Trace macros */
-#define BT_TRACE_0(l,t,m)                           LogMsg_0((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)),(m))
-#define BT_TRACE_1(l,t,m,p1)                        LogMsg_1(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1))
-#define BT_TRACE_2(l,t,m,p1,p2)                     LogMsg_2(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2))
-#define BT_TRACE_3(l,t,m,p1,p2,p3)                  LogMsg_3(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3))
-#define BT_TRACE_4(l,t,m,p1,p2,p3,p4)               LogMsg_4(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3),(UINT32)(p4))
-#define BT_TRACE_5(l,t,m,p1,p2,p3,p4,p5)            LogMsg_5(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
-                                                        (UINT32)(p5))
-#define BT_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6)         LogMsg_6(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINT32)(p1),   \
-                                                        (UINT32)(p2),(UINT32)(p3),(UINT32)(p4), \
-                                                        (UINT32)(p5),(UINT32)(p6))
-
-#define NCI_TRACE_ERROR0(m)                     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m);}
-#define NCI_TRACE_ERROR1(m,p1)                  {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1);}
-#define NCI_TRACE_ERROR2(m,p1,p2)               {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2);}
-#define NCI_TRACE_ERROR3(m,p1,p2,p3)            {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3);}
-#define NCI_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
-#define NCI_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_WARNING0(m)                   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m);}
-#define NCI_TRACE_WARNING1(m,p1)                {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1);}
-#define NCI_TRACE_WARNING2(m,p1,p2)             {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2);}
-#define NCI_TRACE_WARNING3(m,p1,p2,p3)          {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3);}
-#define NCI_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
-#define NCI_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_API0(m)                       {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_API, m);}
-#define NCI_TRACE_API1(m,p1)                    {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1);}
-#define NCI_TRACE_API2(m,p1,p2)                 {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2);}
-#define NCI_TRACE_API3(m,p1,p2,p3)              {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3);}
-#define NCI_TRACE_API4(m,p1,p2,p3,p4)           {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4);}
-#define NCI_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_EVENT0(m)                     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m);}
-#define NCI_TRACE_EVENT1(m,p1)                  {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m, p1);}
-#define NCI_TRACE_EVENT2(m,p1,p2)               {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2);}
-#define NCI_TRACE_EVENT3(m,p1,p2,p3)            {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3);}
-#define NCI_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
-#define NCI_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
-
-#define NCI_TRACE_DEBUG0(m)                     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_0(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m);}
-#define NCI_TRACE_DEBUG1(m,p1)                  {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_1(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1);}
-#define NCI_TRACE_DEBUG2(m,p1,p2)               {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_2(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2);}
-#define NCI_TRACE_DEBUG3(m,p1,p2,p3)            {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_3(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
-#define NCI_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_4(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
-#define NCI_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_5(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
-#define NCI_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) BT_TRACE_6(TRACE_LAYER_NCI, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
-
-#ifdef __cplusplus
-extern "C"
-{
 #endif
 
-extern void LogMsg (UINT32 trace_set_mask, const char *fmt_str, ...);
-
-#ifdef __cplusplus
-}
+/* Enable HAL tracing by default */
+#ifndef NFC_HAL_USE_TRACES
+#define NFC_HAL_USE_TRACES                      TRUE
 #endif
 
+/* HAL trace macros */
+#if (NFC_HAL_USE_TRACES == TRUE)
+#define NCI_TRACE_0(l,t,m)                           LogMsg((TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t)),(m))
+#define NCI_TRACE_1(l,t,m,p1)                        LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1))
+#define NCI_TRACE_2(l,t,m,p1,p2)                     LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1),   \
+                                                        (UINTPTR)(p2))
+#define NCI_TRACE_3(l,t,m,p1,p2,p3)                  LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1),   \
+                                                        (UINTPTR)(p2),(UINTPTR)(p3))
+#define NCI_TRACE_4(l,t,m,p1,p2,p3,p4)               LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1),   \
+                                                        (UINTPTR)(p2),(UINTPTR)(p3),(UINTPTR)(p4))
+#define NCI_TRACE_5(l,t,m,p1,p2,p3,p4,p5)            LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1),   \
+                                                        (UINTPTR)(p2),(UINTPTR)(p3),(UINTPTR)(p4), \
+                                                        (UINTPTR)(p5))
+#define NCI_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6)         LogMsg(TRACE_CTRL_GENERAL | (l) | TRACE_ORG_STACK | (t),(m),(UINTPTR)(p1),   \
+                                                        (UINTPTR)(p2),(UINTPTR)(p3),(UINTPTR)(p4), \
+                                                        (UINTPTR)(p5),(UINTPTR)(p6))
+
+#define HAL_TRACE_ERROR0(m)                     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m);}
+#define HAL_TRACE_ERROR1(m,p1)                  {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1);}
+#define HAL_TRACE_ERROR2(m,p1,p2)               {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1,p2);}
+#define HAL_TRACE_ERROR3(m,p1,p2,p3)            {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1,p2,p3);}
+#define HAL_TRACE_ERROR4(m,p1,p2,p3,p4)         {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1,p2,p3,p4);}
+#define HAL_TRACE_ERROR5(m,p1,p2,p3,p4,p5)      {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5);}
+#define HAL_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_ERROR) NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_ERROR, m,p1,p2,p3,p4,p5,p6);}
+
+#define HAL_TRACE_WARNING0(m)                   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m);}
+#define HAL_TRACE_WARNING1(m,p1)                {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1);}
+#define HAL_TRACE_WARNING2(m,p1,p2)             {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1,p2);}
+#define HAL_TRACE_WARNING3(m,p1,p2,p3)          {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1,p2,p3);}
+#define HAL_TRACE_WARNING4(m,p1,p2,p3,p4)       {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1,p2,p3,p4);}
+#define HAL_TRACE_WARNING5(m,p1,p2,p3,p4,p5)    {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5);}
+#define HAL_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6) {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_WARNING) NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_WARNING, m,p1,p2,p3,p4,p5,p6);}
+
+#define HAL_TRACE_API0(m)                       {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_API, m);}
+#define HAL_TRACE_API1(m,p1)                    {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1);}
+#define HAL_TRACE_API2(m,p1,p2)                 {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1,p2);}
+#define HAL_TRACE_API3(m,p1,p2,p3)              {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1,p2,p3);}
+#define HAL_TRACE_API4(m,p1,p2,p3,p4)           {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1,p2,p3,p4);}
+#define HAL_TRACE_API5(m,p1,p2,p3,p4,p5)        {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1,p2,p3,p4,p5);}
+#define HAL_TRACE_API6(m,p1,p2,p3,p4,p5,p6)     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_API) NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_API, m,p1,p2,p3,p4,p5,p6);}
+
+#define HAL_TRACE_EVENT0(m)                     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m);}
+#define HAL_TRACE_EVENT1(m,p1)                  {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m, p1);}
+#define HAL_TRACE_EVENT2(m,p1,p2)               {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m,p1,p2);}
+#define HAL_TRACE_EVENT3(m,p1,p2,p3)            {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m,p1,p2,p3);}
+#define HAL_TRACE_EVENT4(m,p1,p2,p3,p4)         {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m,p1,p2,p3,p4);}
+#define HAL_TRACE_EVENT5(m,p1,p2,p3,p4,p5)      {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5);}
+#define HAL_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_EVENT) NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_EVENT, m,p1,p2,p3,p4,p5,p6);}
+
+#define HAL_TRACE_DEBUG0(m)                     {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_0(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m);}
+#define HAL_TRACE_DEBUG1(m,p1)                  {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_1(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1);}
+#define HAL_TRACE_DEBUG2(m,p1,p2)               {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_2(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1,p2);}
+#define HAL_TRACE_DEBUG3(m,p1,p2,p3)            {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_3(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1,p2,p3);}
+#define HAL_TRACE_DEBUG4(m,p1,p2,p3,p4)         {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_4(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4);}
+#define HAL_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)      {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_5(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5);}
+#define HAL_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)   {if (nfc_hal_cb.trace_level >= BT_TRACE_LEVEL_DEBUG) NCI_TRACE_6(TRACE_LAYER_HAL, TRACE_TYPE_DEBUG, m,p1,p2,p3,p4,p5,p6);}
+
+#else /* Disable HAL tracing */
+
+#define HAL_TRACE_0(l,t,m)
+#define HAL_TRACE_1(l,t,m,p1)
+#define HAL_TRACE_2(l,t,m,p1,p2)
+#define HAL_TRACE_3(l,t,m,p1,p2,p3)
+#define HAL_TRACE_4(l,t,m,p1,p2,p3,p4)
+#define HAL_TRACE_5(l,t,m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_6(l,t,m,p1,p2,p3,p4,p5,p6)
+
+#define HAL_TRACE_ERROR0(m)
+#define HAL_TRACE_ERROR1(m,p1)
+#define HAL_TRACE_ERROR2(m,p1,p2)
+#define HAL_TRACE_ERROR3(m,p1,p2,p3)
+#define HAL_TRACE_ERROR4(m,p1,p2,p3,p4)
+#define HAL_TRACE_ERROR5(m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_ERROR6(m,p1,p2,p3,p4,p5,p6)
+
+#define HAL_TRACE_WARNING0(m)
+#define HAL_TRACE_WARNING1(m,p1)
+#define HAL_TRACE_WARNING2(m,p1,p2)
+#define HAL_TRACE_WARNING3(m,p1,p2,p3)
+#define HAL_TRACE_WARNING4(m,p1,p2,p3,p4)
+#define HAL_TRACE_WARNING5(m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_WARNING6(m,p1,p2,p3,p4,p5,p6)
+
+#define HAL_TRACE_API0(m)
+#define HAL_TRACE_API1(m,p1)
+#define HAL_TRACE_API2(m,p1,p2)
+#define HAL_TRACE_API3(m,p1,p2,p3)
+#define HAL_TRACE_API4(m,p1,p2,p3,p4)
+#define HAL_TRACE_API5(m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_API6(m,p1,p2,p3,p4,p5,p6)
+
+#define HAL_TRACE_EVENT0(m)
+#define HAL_TRACE_EVENT1(m,p1)
+#define HAL_TRACE_EVENT2(m,p1,p2)
+#define HAL_TRACE_EVENT3(m,p1,p2,p3)
+#define HAL_TRACE_EVENT4(m,p1,p2,p3,p4)
+#define HAL_TRACE_EVENT5(m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_EVENT6(m,p1,p2,p3,p4,p5,p6)
+
+#define HAL_TRACE_DEBUG0(m)
+#define HAL_TRACE_DEBUG1(m,p1)
+#define HAL_TRACE_DEBUG2(m,p1,p2)
+#define HAL_TRACE_DEBUG3(m,p1,p2,p3)
+#define HAL_TRACE_DEBUG4(m,p1,p2,p3,p4)
+#define HAL_TRACE_DEBUG5(m,p1,p2,p3,p4,p5)
+#define HAL_TRACE_DEBUG6(m,p1,p2,p3,p4,p5,p6)
+#endif  /* Disable HAL tracing */
+
 #endif  /* GKI_TARGET_H */
diff --git a/src/hal/include/nfc_types.h b/src/hal/include/nfc_types.h
index c4a963f..29af58b 100644
--- a/src/hal/include/nfc_types.h
+++ b/src/hal/include/nfc_types.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2012 Broadcom Corporation
+ *  Copyright (C) 2012-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 #ifndef NFC_TYPES_H
 #define NFC_TYPES_H
 
@@ -129,6 +130,7 @@
 
 #define TRACE_CTRL_GENERAL          0x00000000
 #define TRACE_LAYER_NCI             0x00280000
+#define TRACE_LAYER_HAL             0x00310000
 #define TRACE_LAYER_GKI             0x001a0000
 #define TRACE_ORG_STACK             0x00000000
 #define TRACE_ORG_GKI               0x00000400
@@ -139,9 +141,7 @@
 #define TRACE_TYPE_EVENT            0x00000003
 #define TRACE_TYPE_DEBUG            0x00000004
 
-
-/* Define a function for logging */
-typedef void (BT_LOG_FUNC) (int trace_type, const char *fmt_str, ...);
+#define TRACE_TYPE_GENERIC          0x00000008
 
 #endif /* NFC_TYPES_H */
 
diff --git a/src/hal/int/nfc_brcm_defs.h b/src/hal/int/nfc_brcm_defs.h
index 9ce68e3..35cf5b4 100644
--- a/src/hal/int/nfc_brcm_defs.h
+++ b/src/hal/int/nfc_brcm_defs.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2012 Broadcom Corporation
+ *  Copyright (C) 2012-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the Broadcom-specific defintions that are shared
@@ -82,6 +83,10 @@
 #define NCI_MSG_SECURE_PATCH_DOWNLOAD   0x2E
 #define NCI_MSG_SPD_FORMAT_NVM          0x2F
 #define NCI_MSG_SPD_READ_NVM            0x30
+#define NCI_MSG_SWP_BIST                0x31
+#define NCI_MSG_WLESS_DBG_MODE          0x32
+#define NCI_MSG_I2C_REQ_POLARITY        0x33
+
 
 /**********************************************
  * Proprietary  NCI status codes
diff --git a/src/hal/int/nfc_hal_int.h b/src/hal/int/nfc_hal_int.h
index ca8dc20..96e9095 100644
--- a/src/hal/int/nfc_hal_int.h
+++ b/src/hal/int/nfc_hal_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2009-2012 Broadcom Corporation
+ *  Copyright (C) 2009-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  this file contains the NCI transport internal definitions and functions.
@@ -62,6 +63,7 @@
 /* NFC HAL Task Timer types */
 #define NFC_HAL_TTYPE_NCI_WAIT_RSP              0
 #define NFC_HAL_TTYPE_POWER_CYCLE               1
+#define NFC_HAL_TTYPE_NFCC_ENABLE               2
 
 /* NFC HAL Task Wait Response flag */
 #define NFC_HAL_WAIT_RSP_CMD                    0x10    /* wait response on an NCI command                  */
@@ -81,12 +83,30 @@
 #define NFC_HAL_HCI_SESSION_ID_LEN              0x08
 #define NFC_HAL_HCI_NETWK_INFO_SIZE             184
 #define NFC_HAL_HCI_DH_NETWK_INFO_SIZE          111
+#define NFC_HAL_HCI_MIN_NETWK_INFO_SIZE         12
+#define NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE      11
+#define NFC_HAL_HCI_PIPE_INFO_SIZE              5
 
+#define NFC_HAL_HCI_ANY_SET_PARAMETER           0x01
+#define NFC_HAL_HCI_ANY_GET_PARAMETER           0x02
 #define NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED 0x15
+
+#define NFC_HAL_HCI_WHITELIST_INDEX             0x03
+
 #define NFC_HAL_HCI_ADMIN_PIPE                  0x01
 #define NFC_HAL_HCI_HOST_ID_UICC0               0x02        /* Host ID for UICC 0 */
 #define NFC_HAL_HCI_HOST_ID_UICC1               0x03        /* Host ID for UICC 1 */
 #define NFC_HAL_HCI_COMMAND_TYPE                0x00
+#define NFC_HAL_HCI_RESPONSE_TYPE               0x02
+
+/* NFC HAL HCI responses */
+#define NFC_HAL_HCI_ANY_OK                      0x00
+
+/* Flag defintions for tNFC_HAL_NVM */
+#define NFC_HAL_NVM_FLAGS_NO_NVM                0x01    /* No NVM available                     */
+#define NFC_HAL_NVM_FLAGS_LPM_BAD               0x02    /* FPM patch in NVM failed CRC check    */
+#define NFC_HAL_NVM_FLAGS_FPM_BAD               0x04    /* LPM patch in NVM failed CRC check    */
+#define NFC_HAL_NVM_FLAGS_PATCH_PRESENT         0x08    /* Patch is present in NVM              */
 
 /* NFC HAL transport configuration */
 typedef struct
@@ -179,7 +199,7 @@
 
 #if (NFC_HAL_DEBUG == TRUE)
 extern const char * const nfc_hal_init_state_str[];
-#define NFC_HAL_SET_INIT_STATE(state)  NCI_TRACE_DEBUG3 ("init state: %d->%d(%s)", nfc_hal_cb.dev_cb.initializing_state, state, nfc_hal_init_state_str[state]); nfc_hal_cb.dev_cb.initializing_state = state;
+#define NFC_HAL_SET_INIT_STATE(state)  HAL_TRACE_DEBUG3 ("init state: %d->%d(%s)", nfc_hal_cb.dev_cb.initializing_state, state, nfc_hal_init_state_str[state]); nfc_hal_cb.dev_cb.initializing_state = state;
 #else
 #define NFC_HAL_SET_INIT_STATE(state)  nfc_hal_cb.dev_cb.initializing_state = state;
 #endif
@@ -190,14 +210,14 @@
 {
     NFC_HAL_INIT_STATE_IDLE,               /* Initialization is done                */
     NFC_HAL_INIT_STATE_W4_XTAL_SET,        /* Waiting for crystal setting rsp       */
-    NFC_HAL_INIT_STATE_W4_RESET,           /* Waiting for reset rsp                 */
+    NFC_HAL_INIT_STATE_POST_XTAL_SET,      /* Waiting for reset ntf after xtal set  */
+    NFC_HAL_INIT_STATE_W4_NFCC_ENABLE,     /* Waiting for reset ntf atter REG_PU up */
     NFC_HAL_INIT_STATE_W4_BUILD_INFO,      /* Waiting for build info rsp            */
     NFC_HAL_INIT_STATE_W4_PATCH_INFO,      /* Waiting for patch info rsp            */
     NFC_HAL_INIT_STATE_W4_APP_COMPLETE,    /* Waiting for complete from application */
     NFC_HAL_INIT_STATE_W4_POST_INIT_DONE,  /* Waiting for complete of post init     */
     NFC_HAL_INIT_STATE_W4_CONTROL_DONE,    /* Waiting for control release           */
     NFC_HAL_INIT_STATE_W4_PREDISCOVER_DONE,/* Waiting for complete of prediscover   */
-    NFC_HAL_INIT_STATE_W4_RE_INIT,         /* Waiting for reset rsp on ReInit       */
     NFC_HAL_INIT_STATE_CLOSING             /* Shutting down                         */
 };
 typedef UINT8 tNFC_HAL_INIT_STATE;
@@ -264,12 +284,12 @@
     NFC_HAL_PRM_ST_IDLE,
 
     /* Secure patch download stated */
-    NFC_HAL_PRM_ST_SPD_GET_VERSION,
     NFC_HAL_PRM_ST_SPD_COMPARE_VERSION,
     NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER,
     NFC_HAL_PRM_ST_SPD_DOWNLOADING,
     NFC_HAL_PRM_ST_SPD_AUTHENTICATING,
-    NFC_HAL_PRM_ST_SPD_AUTH_DONE
+    NFC_HAL_PRM_ST_SPD_AUTH_DONE,
+    NFC_HAL_PRM_ST_W4_GET_VERSION
 };
 typedef UINT8 tNFC_HAL_PRM_STATE;
 
@@ -296,17 +316,9 @@
 
     /* Secure Patch Download */
     UINT32              spd_patch_needed_mask;  /* Mask of patches that need to be downloaded */
-    UINT32              spd_nvm_patch_mask;     /* Mask of patches currently in NVM */
-    UINT16              spd_project_id;         /* Current project_id of patch in nvm */
-    UINT16              spd_nvm_max_size;
-    UINT16              spd_patch_max_size;
-    UINT16              spd_fpm_patch_size;
-    UINT16              spd_lpm_patch_size;
-
     UINT8               spd_patch_count;        /* Number of patches left to download */
     UINT8               spd_cur_patch_idx;      /* Current patch being downloaded */
-    UINT16              spd_ver_major;          /* Current major version of patch in nvm */
-    UINT16              spd_ver_minor;          /* Current minor version of patch in nvm */
+
     tNFC_HAL_PRM_PATCHDESC spd_patch_desc[NFC_HAL_PRM_MAX_PATCH_COUNT];
 
     /* I2C-patch */
@@ -319,6 +331,18 @@
     UINT32              patchram_delay;         /* the dealy after patch */
 } tNFC_HAL_PRM_CB;
 
+/* Information about current patch in NVM */
+typedef struct
+{
+    UINT16              project_id;             /* Current project_id of patch in nvm       */
+    UINT16              ver_major;              /* Current major version of patch in nvm    */
+    UINT16              ver_minor;              /* Current minor version of patch in nvm    */
+    UINT16              fpm_size;               /* Current size of FPM patch in nvm         */
+    UINT16              lpm_size;               /* Current size of LPM patch in nvm         */
+    UINT8               flags;                  /* See NFC_HAL_NVM_FLAGS_* flag definitions */
+    UINT8               nvm_type;               /* Current NVM Type - UICC/EEPROM           */
+} tNFC_HAL_NVM;
+
 /* Patch for I2C fix */
 typedef struct
 {
@@ -371,8 +395,10 @@
     UINT8                   *p_hci_netwk_dh_info_buf; /* Buffer for reading HCI Network DH information */
     UINT8                   hci_netwk_config_block;   /* Rsp awaiting for hci network configuration block */
     BOOLEAN                 b_wait_hcp_conn_create_rsp; /* Waiting for hcp connection create response */
-    BOOLEAN                 b_check_clear_all_pipe_cmd;
-    UINT8                   hcp_conn_id;
+    BOOLEAN                 clear_all_pipes_to_uicc1; /* UICC1 was restarted for patch download */
+    BOOLEAN                 hci_fw_workaround;        /* HAL HCI Workaround need */
+    BOOLEAN                 hci_fw_validate_netwk_cmd;/* Flag to indicate if hci network ntf to validate */
+    UINT8                   hcp_conn_id;              /* NCI Connection id for HCP */
 } tNFC_HAL_HCI_CB;
 
 typedef struct
@@ -385,6 +411,7 @@
 
     tNFC_HAL_NCIT_CB        ncit_cb;            /* NCI transport */
     tNFC_HAL_DEV_CB         dev_cb;             /* device initialization */
+    tNFC_HAL_NVM            nvm_cb;             /* Information about current patch in NVM */
 
     /* Patchram control block */
     tNFC_HAL_PRM_CB         prm;
@@ -394,7 +421,6 @@
     tNFC_HAL_HCI_CB         hci_cb;
 
 
-    tNFC_HAL_NCI_CBACK      *p_reinit_cback;
     UINT8                   max_rf_credits;     /* NFC Max RF data credits */
     UINT8                   trace_level;        /* NFC HAL trace level */
 } tNFC_HAL_CB;
@@ -418,10 +444,12 @@
 void   nfc_hal_main_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
 void   nfc_hal_main_stop_quick_timer (TIMER_LIST_ENT *p_tle);
 void   nfc_hal_main_send_error (tHAL_NFC_STATUS status);
+void   nfc_hal_send_nci_msg_to_nfc_task (NFC_HDR * p_msg);
 
 /* nfc_hal_nci.c */
 BOOLEAN nfc_hal_nci_receive_msg (UINT8 byte);
 BOOLEAN nfc_hal_nci_preproc_rx_nci_msg (NFC_HDR *p_msg);
+NFC_HDR* nfc_hal_nci_postproc_rx_nci_msg (void);
 void    nfc_hal_nci_assemble_nci_msg (void);
 void    nfc_hal_nci_add_nfc_pkt_type (NFC_HDR *p_msg);
 void    nfc_hal_nci_send_cmd (NFC_HDR *p_buf);
@@ -430,7 +458,7 @@
 /* nfc_hal_dm.c */
 void nfc_hal_dm_init (void);
 void nfc_hal_dm_set_xtal_freq_index (void);
-void nfc_hal_dm_send_reset_cmd (void);
+void nfc_hal_dm_send_get_build_info_cmd (void);
 void nfc_hal_dm_proc_msg_during_init (NFC_HDR *p_msg);
 void nfc_hal_dm_config_nfcc (void);
 void nfc_hal_dm_send_nci_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_NCI_CBACK *p_cback);
@@ -450,7 +478,9 @@
 void nfc_hal_hci_enable (void);
 void nfc_hal_hci_evt_hdlr (tNFC_HAL_HCI_EVENT_DATA *p_evt_data);
 void nfc_hal_hci_handle_hci_netwk_info (UINT8 *p_data);
-void nfc_hal_hci_handle_hcp_pkt (UINT8 *p_data);
+void nfc_hal_hci_handle_hcp_pkt_from_hc (UINT8 *p_data);
+NFC_HDR* nfc_hal_hci_postproc_hcp (void);
+BOOLEAN nfc_hal_hci_handle_hcp_pkt_to_hc (UINT8 *p_data);
 void nfc_hal_hci_timeout_cback (void *p_tle);
 
 
diff --git a/src/hal/int/nfc_hal_int_api.h b/src/hal/int/nfc_hal_int_api.h
index 5385bb4..0c9c1ba 100644
--- a/src/hal/int/nfc_hal_int_api.h
+++ b/src/hal/int/nfc_hal_int_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2009-2012 Broadcom Corporation
+ *  Copyright (C) 2009-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  Internal NFC HAL API functions.
@@ -47,13 +48,20 @@
 typedef UINT8 tNFC_HAL_XTAL_INDEX;
 
 /* Broadcom specific device initialization before sending NCI reset */
-#define NFC_HAL_DEV_INIT_FLAGS_SET_XTAL_FREQ  0x02    /* set crystal frequency    */
-typedef UINT8 tNFC_HAL_DEV_INIT_FLAGS;
 
 typedef struct
 {
-    tNFC_HAL_DEV_INIT_FLAGS flags;
+    UINT32                  brcm_hw_id;
     UINT16                  xtal_freq;
+    UINT8                   xtal_index;
+} tNFC_HAL_DEV_INIT_XTAL_CFG;
+
+#define NFC_HAL_DEV_INIT_MAX_XTAL_CFG       5
+
+typedef struct
+{
+    UINT8                       num_xtal_cfg;
+    tNFC_HAL_DEV_INIT_XTAL_CFG  xtal_cfg[NFC_HAL_DEV_INIT_MAX_XTAL_CFG];
 } tNFC_HAL_DEV_INIT_CFG;
 
 /*****************************************************************************
@@ -117,11 +125,8 @@
 **
 ** Function         HAL_NfcReInit
 **
-** Description      This function is called to send an RESET and GET_PATCH_VERSION
-**                  command to NFCC.
-**
-**                  p_cback         - The callback function to receive the command
-**                                    status
+** Description      This function is called to restart initialization after REG_PU
+**                  toggled because of failure to detect NVM type or download patchram.
 **
 ** Note             This function should be called only during the HAL init process
 **
@@ -129,7 +134,7 @@
 **                  HAL_NFC_STATUS_FAILED otherwise
 **
 *******************************************************************************/
-tHAL_NFC_STATUS HAL_NfcReInit (tNFC_HAL_NCI_CBACK *p_cback);
+tHAL_NFC_STATUS HAL_NfcReInit (void);
 
 /*******************************************************************************
 **
diff --git a/src/hal/int/nfc_hal_nv_ci.h b/src/hal/int/nfc_hal_nv_ci.h
index a77c207..80e436e 100644
--- a/src/hal/int/nfc_hal_nv_ci.h
+++ b/src/hal/int/nfc_hal_nv_ci.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2003-2012 Broadcom Corporation
+ *  Copyright (C) 2003-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the interface file for non valtile memory call-in functions.
diff --git a/src/hal/int/nfc_hal_nv_co.h b/src/hal/int/nfc_hal_nv_co.h
index 2264cfe..285d96e 100644
--- a/src/hal/int/nfc_hal_nv_co.h
+++ b/src/hal/int/nfc_hal_nv_co.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2003-2012 Broadcom Corporation
+ *  Copyright (C) 2003-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the interface file for storing nv data
@@ -53,7 +54,7 @@
 #define  DH_NV_BLOCK            0x01
 #define  HC_F3_NV_BLOCK         0x02
 #define  HC_F4_NV_BLOCK         0x03
-#define  HC_DH_NV_BLOCK         0x04
+#define  HC_F2_NV_BLOCK         0x04
 
 /*****************************************************************************
 **  Function Declarations
diff --git a/src/hal/int/nfc_hal_post_reset.h b/src/hal/int/nfc_hal_post_reset.h
index 95da455..40729dc 100644
--- a/src/hal/int/nfc_hal_post_reset.h
+++ b/src/hal/int/nfc_hal_post_reset.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2009-2012 Broadcom Corporation
+ *  Copyright (C) 2009-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  Post NCI reset routines
@@ -29,6 +30,7 @@
 ** Application control block definitions
 ******************************************************************************/
 #define NFA_APP_PATCHFILE_MAX_PATH          255
+#define NFA_APP_MAX_NUM_REINIT                5
 
 typedef struct
 {
@@ -50,6 +52,13 @@
     UINT8 nfc_wake_active_mode;
     UINT8 dh_wake_active_mode;
 
+    /* NVM detection retry (some platforms require re-attempts to detect NVM) */
+    UINT8 spd_nvm_detection_max_count;  /* max retry to get NVM type */
+    UINT8 spd_nvm_detection_cur_count;  /* current retry count       */
+
+    /* handling for failure to download patch */
+    BOOLEAN spd_debug_mode;             /* debug mode for downloading patchram, report failure immediately and obviously */
+    BOOLEAN spd_skip_on_power_cycle;    /* skip downloading patchram after power cycle because of patch download failure */
 } tNFC_POST_RESET_CB;
 extern tNFC_POST_RESET_CB nfc_post_reset_cb;
 
@@ -62,5 +71,4 @@
 */
 void nfc_hal_post_reset_init (UINT32 brcm_hw_id, UINT8 nvm_type);
 
-
 #endif  /* NFC_HAL_POST_RESET_H */
diff --git a/src/include/NfcAdaptation.h b/src/include/NfcAdaptation.h
index 6065f1c..960b96e 100644
--- a/src/include/NfcAdaptation.h
+++ b/src/include/NfcAdaptation.h
@@ -20,6 +20,7 @@
 #ifndef UINT32
 typedef unsigned long   UINT32;
 #endif
+#include "nfc_target.h"
 #include "nfc_hal_api.h"
 #include <hardware/nfc.h>
 
@@ -68,6 +69,7 @@
     void    Finalize();
     static  NfcAdaptation& GetInstance();
     tHAL_NFC_ENTRY* GetHalEntryFuncs ();
+    void    DownloadFirmware ();
 
 private:
     NfcAdaptation();
@@ -80,6 +82,8 @@
     static nfc_nci_device_t* mHalDeviceContext;
     static tHAL_NFC_CBACK* mHalCallback;
     static tHAL_NFC_DATA_CBACK* mHalDataCallback;
+    static ThreadCondVar mHalOpenCompletedEvent;
+    static ThreadCondVar mHalCloseCompletedEvent;
 
     static UINT32 NFCA_TASK (UINT32 arg);
     static UINT32 Thread (UINT32 arg);
@@ -96,5 +100,7 @@
     static BOOLEAN HalPrediscover ();
     static void HalControlGranted ();
     static void HalPowerCycle ();
+    static void HalDownloadFirmwareCallback (nfc_event_t event, nfc_status_t event_status);
+    static void HalDownloadFirmwareDataCallback (uint16_t data_len, uint8_t* p_data);
 };
 
diff --git a/src/include/OverrideLog.h b/src/include/OverrideLog.h
index 2a9847f..ffb2994 100644
--- a/src/include/OverrideLog.h
+++ b/src/include/OverrideLog.h
@@ -34,13 +34,13 @@
 #include <cutils/log.h> //define Android logging macros
 #include "bt_types.h" //define various BT_TRACE_LEVEL_*
 
+
 #ifdef __cplusplus
 extern "C" {
 #endif
-    extern unsigned char appl_trace_level; //defined in /external/libnfc-nci/
-#ifdef __cplusplus
-}
-#endif
+
+
+extern unsigned char appl_trace_level; //defined in /external/libnfc-nci/
 
 
 /*******************************************************************************
@@ -61,3 +61,8 @@
 **
 *******************************************************************************/
 unsigned char initializeGlobalAppLogLevel ();
+
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/src/include/bcm2079x.h b/src/include/bcm2079x.h
deleted file mode 100644
index 7bf095d..0000000
--- a/src/include/bcm2079x.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-#ifndef _BCM2079X_H
-#define _BCM2079X_H
-
-#define BCMNFC_MAGIC	0xFA
-
-/*
- * BCMNFC power control via ioctl
- * BCMNFC_POWER_CTL(0): power off
- * BCMNFC_POWER_CTL(1): power on
- * BCMNFC_WAKE_CTL(0): wake off
- * BCMNFC_WAKE_CTL(1): wake on
- */
-#define BCMNFC_POWER_CTL		_IO(BCMNFC_MAGIC, 0x01)
-#define BCMNFC_CHANGE_ADDR		_IO(BCMNFC_MAGIC, 0x02)
-#define BCMNFC_READ_FULL_PACKET		_IO(BCMNFC_MAGIC, 0x03)
-#define BCMNFC_SET_WAKE_ACTIVE_STATE	_IO(BCMNFC_MAGIC, 0x04)
-#define BCMNFC_WAKE_CTL			_IO(BCMNFC_MAGIC, 0x05)
-#define BCMNFC_READ_MULTI_PACKETS	_IO(BCMNFC_MAGIC, 0x06)
-
-struct bcm2079x_platform_data {
-	unsigned int irq_gpio;
-	unsigned int en_gpio;
-	int wake_gpio;
-};
-
-#endif
diff --git a/src/include/bt_trace.h b/src/include/bt_trace.h
index d9c58dd..6191cc3 100644
--- a/src/include/bt_trace.h
+++ b/src/include/bt_trace.h
@@ -241,7 +241,7 @@
 
 /* Enables or disables protocol trace information. */
 #ifndef BT_TRACE_PROTOCOL
-#define BT_TRACE_PROTOCOL   TRUE  /* Android requires TRUE */
+#define BT_TRACE_PROTOCOL   FALSE  /* Android requires FALSE */
 #endif
 
 /******************************************************************************
diff --git a/src/include/bt_types.h b/src/include/bt_types.h
index 2b0e809..0a42c77 100644
--- a/src/include/bt_types.h
+++ b/src/include/bt_types.h
@@ -203,6 +203,7 @@
 #define BT_PSM_AVCTP_13                 0x001B /* Advanced Control - Browsing */
 #define BT_PSM_UDI_CP                   0x001D /* Unrestricted Digital Information Profile C-Plane  */
 #define BT_PSM_ATT                      0x001F /* Attribute Protocol  */
+#define BT_PSM_3DS                      0x0021 /* 3D sync */
 
 
 /* These macros extract the HCI opcodes from a buffer
@@ -425,6 +426,7 @@
 #define BT_EIR_OOB_COD_TYPE                 0x0D
 #define BT_EIR_OOB_SSP_HASH_C_TYPE          0x0E
 #define BT_EIR_OOB_SSP_RAND_R_TYPE          0x0F
+#define BT_EIR_3D_SYNC_TYPE                 0x3D
 #define BT_EIR_MANUFACTURER_SPECIFIC_TYPE   0xFF
 
 #define BT_OOB_COD_SIZE            3
@@ -583,7 +585,7 @@
 #define TRACE_LAYER_ATT             0x00250000
 #define TRACE_LAYER_SMP             0x00260000
 #define TRACE_LAYER_NFC             0x00270000
-#define TRACE_LAYER_NCI             0x00280000
+#define TRACE_LAYER_NCI             0x00280000 /*it's overwritten in nfc_types.h*/
 #define TRACE_LAYER_LLCP            0x00290000
 #define TRACE_LAYER_NDEF            0x002a0000
 #define TRACE_LAYER_RW              0x002b0000
@@ -592,8 +594,8 @@
 #define TRACE_LAYER_SNEP            0x002e0000
 #define TRACE_LAYER_CHO             0x002f0000
 #define TRACE_LAYER_NFA             0x00300000
-
-#define TRACE_LAYER_MAX_NUM         0x0031
+#define TRACE_LAYER_HAL             0x00310000 /*it's overwritten in nfc_types.h*/
+#define TRACE_LAYER_MAX_NUM         0x0032
 
 
 /* TRACE_ORIGINATOR                 0x0000^^00*/
@@ -690,9 +692,15 @@
 #define HID_PSM_INTERRUPT       0x0013
 
 #if defined(UCD_HID_INCLUDED) && (UCD_HID_INCLUDED == TRUE)
-#define UCD_PSM_MIN     0x8003
+#define UCD_PSM_MIN     0x8001
 #define UCD_PSM_MAX     0x8003
-#define UCD_PSM_HID     0x8003
+#define UCD_PSM_HID_CTRL 0x8001
+#define UCD_PSM_HID_INTR 0x8003
+#endif
+
+#if defined(HIDH_UCD_INCLUDED) && (HIDH_UCD_INCLUDED == TRUE)
+#define HID_UCD_PSM_CONTROL 0x8001
+#define HID_UCD_PSM_INTERRUPT 0x8003
 #endif
 
 /* Define a function for logging */
diff --git a/src/include/btdisp_lock.h b/src/include/btdisp_lock.h
deleted file mode 100644
index b220b2d..0000000
--- a/src/include/btdisp_lock.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Critical section definitions for btdisp functions.
- *
- ******************************************************************************/
diff --git a/src/include/buildcfg.h b/src/include/buildcfg.h
index 8f03bd9..24b9ab0 100755
--- a/src/include/buildcfg.h
+++ b/src/include/buildcfg.h
@@ -22,23 +22,12 @@
 #include <stdio.h>
 #include "data_types.h"
 
-#include "btdisp_lock.h"
 #ifndef NFC_CONTORLLER_ID
 #define NFC_CONTORLLER_ID       (1)
 #endif
 
-#ifdef ANDROID_USE_LOGCAT
-#undef ANDROID_USE_LOGCAT
-#endif
-
 #define BTE_APPL_MAX_USERIAL_DEV_NAME           (256)
 
-#define ANDROID_USE_LOGCAT      TRUE
-
-#ifdef BT_TRACE_PROTOCOL
-#undef BT_TRACE_PROTOCOL
-#endif
-
 #ifdef BT_TRACE_VERBOSE
 #undef BT_TRACE_VERBOSE
 #endif
diff --git a/src/include/config.h b/src/include/config.h
index 0660c1b..37fef79 100755
--- a/src/include/config.h
+++ b/src/include/config.h
@@ -30,15 +30,16 @@
 };
 #endif
 
-#define NAME_USE_NXP_P2P_RC_WORKAROUND  "USE_NXP_P2P_RC_WORKAROUND"
 #define NAME_NFA_DM_ENABLE_SLEEP        "NFA_DM_ENABLE_SLEEP"
 #define NAME_ENABLE_BRCM_EXTRAS_API     "ENABLE_BRCM_EXTRAS_API"
 #define NAME_POLLING_TECH_MASK          "POLLING_TECH_MASK"
 #define NAME_REGISTER_VIRTUAL_SE        "REGISTER_VIRTUAL_SE"
 #define NAME_APPL_TRACE_LEVEL           "APPL_TRACE_LEVEL"
+#define NAME_USE_RAW_NCI_TRACE          "USE_RAW_NCI_TRACE"
+#define NAME_LOG_TO_FILE                "LOG_TO_FILE"
+#define NAME_LOGCAT_FILTER              "LOGCAT_FILTER"
 #define NAME_LPTD_CFG                   "LPTD_CFG"
 #define NAME_SCREEN_OFF_POWER_STATE     "SCREEN_OFF_POWER_STATE"
-#define NAME_UICC_IDLE_TIMEOUT          "UICC_IDLE_TIMEOUT"
 #define NAME_PREINIT_DSP_CFG            "PREINIT_DSP_CFG"
 #define NAME_DTA_START_CFG              "DTA_START_CFG"
 #define NAME_TRANSPORT_DRIVER           "TRANSPORT_DRIVER"
@@ -61,13 +62,21 @@
 #define NAME_POWER_ON_DELAY             "POWER_ON_DELAY"
 #define NAME_PRE_POWER_OFF_DELAY        "PRE_POWER_OFF_DELAY"
 #define NAME_POST_POWER_OFF_DELAY       "POST_POWER_OFF_DELAY"
+#define NAME_CE3_PRE_POWER_OFF_DELAY    "CE3_PRE_POWER_OFF_DELAY"
 #define NAME_NFA_STORAGE                "NFA_STORAGE"
 #define NAME_NFA_DM_START_UP_VSC_CFG    "NFA_DM_START_UP_VSC_CFG"
+#define NAME_NFA_DTA_START_UP_VSC_CFG   "NFA_DTA_START_UP_VSC_CFG"
 #define NAME_UICC_LISTEN_TECH_MASK      "UICC_LISTEN_TECH_MASK"
 #define NAME_SNOOZE_MODE_CFG            "SNOOZE_MODE_CFG"
 #define NAME_XTAL_FREQUENCY             "XTAL_FREQUENCY"
 #define NAME_NFA_DM_DISC_DURATION_POLL  "NFA_DM_DISC_DURATION_POLL"
+#define NAME_SPD_DEBUG                  "SPD_DEBUG"
+#define NAME_SPD_MAXRETRYCOUNT          "SPD_MAX_RETRY_COUNT"
+#define NAME_SPI_NEGOTIATION            "SPI_NEGOTIATION"
 #define NAME_AID_FOR_EMPTY_SELECT       "AID_FOR_EMPTY_SELECT"
+#define NAME_SPD_IGNORE_VERSION         "SPD_IGNORE_VERSION"
+#define NAME_PRESERVE_STORAGE           "PRESERVE_STORAGE"
+#define NAME_NFA_MAX_EE_SUPPORTED       "NFA_MAX_EE_SUPPORTED"
 
 #define                     LPTD_PARAM_LEN (40)
 
diff --git a/src/include/dyn_mem.h b/src/include/dyn_mem.h
index 2ee0169..2a478b2 100644
--- a/src/include/dyn_mem.h
+++ b/src/include/dyn_mem.h
@@ -87,6 +87,10 @@
 #define SMP_DYNAMIC_MEMORY  FALSE
 #endif
 
+#ifndef BRCM_DYNAMIC_MEMORY
+#define BRCM_DYNAMIC_MEMORY  FALSE
+#endif
+
 /****************************************************************************
 ** Define memory usage for each PROFILE component (if not defined in buildcfg.h)
 **  The default for each component is to use static memory allocations.
diff --git a/src/include/hcidefs.h b/src/include/hcidefs.h
index 9b9d5a6..ef1f3b9 100644
--- a/src/include/hcidefs.h
+++ b/src/include/hcidefs.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 1999-2012 Broadcom Corporation
+ *  Copyright (C) 1999-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -42,7 +42,7 @@
 #define HCI_OCF(p)  ( 0x3FF & (p))
 
 /*
-**  Defentions for Link Control Commands
+**  Definitions for Link Control Commands
 */
 /* Following opcode is used only in command complete event for flow control */
 #define HCI_COMMAND_NONE                0x0000
@@ -95,9 +95,21 @@
 #define HCI_DISCONNECT_LOGICAL_LINK     (0x003A | HCI_GRP_LINK_CONTROL_CMDS)
 #define HCI_LOGICAL_LINK_CANCEL         (0x003B | HCI_GRP_LINK_CONTROL_CMDS)
 #define HCI_FLOW_SPEC_MODIFY            (0x003C | HCI_GRP_LINK_CONTROL_CMDS)
+/* End of AMP HCI */
+
+#define HCI_ENH_SETUP_ESCO_CONNECTION   (0x003D | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_ENH_ACCEPT_ESCO_CONNECTION  (0x003E | HCI_GRP_LINK_CONTROL_CMDS)
+
+/* ConnectionLess Broadcast */
+#define HCI_TRUNCATED_PAGE              (0x003F | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_TRUNCATED_PAGE_CANCEL       (0x0040 | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_SET_CLB                     (0x0041 | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_RECEIVE_CLB                 (0x0042 | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_START_SYNC_TRAIN            (0x0043 | HCI_GRP_LINK_CONTROL_CMDS)
+#define HCI_RECEIVE_SYNC_TRAIN          (0x0044 | HCI_GRP_LINK_CONTROL_CMDS)
 
 #define HCI_LINK_CTRL_CMDS_FIRST        HCI_INQUIRY
-#define HCI_LINK_CTRL_CMDS_LAST         HCI_FLOW_SPEC_MODIFY
+#define HCI_LINK_CTRL_CMDS_LAST         HCI_RECEIVE_SYNC_TRAIN
 
 /* Commands of HCI_GRP_LINK_POLICY_CMDS */
 #define HCI_HOLD_MODE                   (0x0001 | HCI_GRP_LINK_POLICY_CMDS)
@@ -127,6 +139,7 @@
 #define HCI_READ_PIN_TYPE               (0x0009 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 #define HCI_WRITE_PIN_TYPE              (0x000A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 #define HCI_CREATE_NEW_UNIT_KEY         (0x000B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_GET_MWS_TRANS_LAYER_CFG     (0x000C | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 #define HCI_READ_STORED_LINK_KEY        (0x000D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 #define HCI_WRITE_STORED_LINK_KEY       (0x0011 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 #define HCI_DELETE_STORED_LINK_KEY      (0x0012 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
@@ -194,21 +207,38 @@
 #define HCI_ENHANCED_FLUSH              (0x005F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 #define HCI_SEND_KEYPRESS_NOTIF         (0x0060 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 
+#define HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT    (0x0061 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT   (0x0062 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_EVENT_MASK_PAGE_2               (0x0063 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_READ_LOCATION_DATA                  (0x0064 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_LOCATION_DATA                 (0x0065 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_READ_FLOW_CONTROL_MODE              (0x0066 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_FLOW_CONTROL_MODE             (0x0067 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_READ_BE_FLUSH_TOUT                  (0x0069 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_BE_FLUSH_TOUT                 (0x006A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SHORT_RANGE_MODE                    (0x006B | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_READ_LE_HOST_SUPPORTED              (0x006C | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_LE_HOST_SUPPORTED             (0x006D | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
 
-/* AMP HCI */
-#define HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT  (0x0061 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT (0x0062 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SET_EVENT_MASK_PAGE_2             (0x0063 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_LOCATION_DATA                (0x0064 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_LOCATION_DATA               (0x0065 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_FLOW_CONTROL_MODE            (0x0066 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_FLOW_CONTROL_MODE           (0x0067 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_READ_BE_FLUSH_TOUT                (0x0069 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_WRITE_BE_FLUSH_TOUT               (0x006A | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
-#define HCI_SHORT_RANGE_MODE                  (0x006B | HCI_GRP_HOST_CONT_BASEBAND_CMDS) /* 802.11 only */
+
+/* MWS coexistence */
+#define HCI_SET_MWS_CHANNEL_PARAMETERS          (0x006E | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_EXTERNAL_FRAME_CONFIGURATION    (0x006F | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_MWS_SIGNALING                   (0x0070 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_MWS_TRANSPORT_LAYER             (0x0071 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_MWS_SCAN_FREQUENCY_TABLE        (0x0072 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_SET_MWS_PATTERN_CONFIGURATION       (0x0073 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+
+/* ConnectionLess Broadcast */
+#define HCI_SET_RESERVED_LT_ADDR                (0x0074 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_DELETE_RESERVED_LT_ADDR             (0x0075 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_CLB_DATA                      (0x0076 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_READ_SYNC_TRAIN_PARAM               (0x0077 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+#define HCI_WRITE_SYNC_TRAIN_PARAM              (0x0078 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
+
 
 #define HCI_CONT_BASEBAND_CMDS_FIRST    HCI_SET_EVENT_MASK
-#define HCI_CONT_BASEBAND_CMDS_LAST     HCI_SHORT_RANGE_MODE
+#define HCI_CONT_BASEBAND_CMDS_LAST     HCI_READ_SYNC_TRAIN_PARAM
 
 
 /* Commands of HCI_GRP_INFORMATIONAL_PARAMS group */
@@ -220,9 +250,11 @@
 #define HCI_READ_COUNTRY_CODE           (0x0007 | HCI_GRP_INFORMATIONAL_PARAMS)
 #define HCI_READ_BD_ADDR                (0x0009 | HCI_GRP_INFORMATIONAL_PARAMS)
 #define HCI_READ_DATA_BLOCK_SIZE        (0x000A | HCI_GRP_INFORMATIONAL_PARAMS)
+#define HCI_READ_LOCAL_SUPPORTED_CODECS (0x000B | HCI_GRP_INFORMATIONAL_PARAMS)
+
 
 #define HCI_INFORMATIONAL_CMDS_FIRST    HCI_READ_LOCAL_VERSION_INFO
-#define HCI_INFORMATIONAL_CMDS_LAST     HCI_READ_BD_ADDR
+#define HCI_INFORMATIONAL_CMDS_LAST     HCI_READ_LOCAL_SUPPORTED_CODECS
 
 
 /* Commands of HCI_GRP_STATUS_PARAMS group */
@@ -239,8 +271,11 @@
 #define HCI_READ_LOCAL_AMP_ASSOC        (0x000A | HCI_GRP_STATUS_PARAMS)
 #define HCI_WRITE_REMOTE_AMP_ASSOC      (0x000B | HCI_GRP_STATUS_PARAMS)
 
+/* CSA4 (Trigger Clock) */
+#define HCI_SET_TRIGGERED_CLOCK_CAPTURE (0x000D | HCI_GRP_STATUS_PARAMS)
+
 #define HCI_STATUS_PARAMS_CMDS_FIRST    HCI_READ_FAILED_CONTACT_COUNT
-#define HCI_STATUS_PARAMS_CMDS_LAST     HCI_WRITE_REMOTE_AMP_ASSOC
+#define HCI_STATUS_PARAMS_CMDS_LAST     HCI_SET_TRIGGERED_CLOCK_CAPTURE
 
 /* Commands of HCI_GRP_TESTING_CMDS group */
 #define HCI_READ_LOOPBACK_MODE          (0x0001 | HCI_GRP_TESTING_CMDS)
@@ -309,119 +344,6 @@
 #define HCI_LE_SCAN_SL_STATE      0x00000400
 #define HCI_LE_INIT_MA_STATE      0x00000800
 
-/* Vendor specific commands for BRCM chipset */
-#define HCI_BRCM_UPDATE_BAUD_RATE_ENCODED_LENGTH        0x02
-#define HCI_BRCM_UPDATE_BAUD_RATE_UNENCODED_LENGTH      0x06
-#define HCI_BRCM_WRITE_SLEEP_MODE_LENGTH                12
-#define HCI_BRCM_ENABLE_H4IBSS_LENGTH                   7
-#define HCI_BRCM_CUSTOMER_EXT               (0x0000 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FM_OPCODE                  (0x0015 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FMTX_OPCODE                (0x0082 | HCI_GRP_VENDOR_SPECIFIC)  /* FMTX VSC opcode */
-#define HCI_BRCM_UPDATE_BAUDRATE_CMD        (0x0018 | HCI_GRP_VENDOR_SPECIFIC)    /* set baudrate of BCM2035 */
-#define HCI_BRCM_WRITE_SCO_PCM_INT_PARAM    (0x001C | HCI_GRP_VENDOR_SPECIFIC)    /* set SCO interface param */
-#define HCI_BRCM_READ_SCO_PCM_INT_PARAM     (0x001D | HCI_GRP_VENDOR_SPECIFIC)    /* read SCO interface param */
-#define HCI_BRCM_WRITE_SLEEP_MODE           (0x0027 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_SLEEP_MODE            (0x0028 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_H4IBSS_CMD                 (0x0029 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_DOWNLOAD_MINI_DRV          (0x002E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_USER_DEFINED_NVRAM    (0x0033 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_RADIO               (0x0034 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_DIAGNOSTIC_VALUE      (0x0035 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_GET_HID_DEVICE_LIST        (0x0036 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ADD_HID_DEVICE             (0x0037 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_WRITE_HID_DEVICE_NVRAM     (0x0038 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_DELETE_HID_DEVICE          (0x0039 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_USB_HID_EMULATION   (0x003B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_WRITE_RAM                  (0x004C | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_LAUNCH_RAM                 (0x004E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_BTW_STARTUP                (0x0053 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_SET_ACL_PRIORITY           (0x0057 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_SET_SEC_MODE               (0x0096 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_H4IBSS              (0x00D4 | HCI_GRP_VENDOR_SPECIFIC)
-
-#define HCI_BRCM_SUPER_PEEK_POKE            (0x000A | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_ARM_MEM_PEEK                    0x04
-#define HCI_ARM_MEM_POKE                    0x05
-#define HCI_BRCM_SUPER_PEEK_POKE_LENGTH     9
-
-#define HCI_BRCM_WRITE_I2SPCM_INTF_PARAM    (0x006D | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_CONTROLLER_FEATURES   (0x006E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_FEATURE_NFC_MASK           0x10
-#define HCI_BRCM_FEATURE_NFC_OFF            0
-
-#define HCI_BRCM_READ_VERBOSE_CFG_VER_INFO  (0x0079 | HCI_GRP_VENDOR_SPECIFIC)
-
-/* Dual Stack */
-#define HCI_BRCM_PAUSE_TRANSPORT            (0x007A | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_TRANSPORT_RESUME           (0x007B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_TRANSPORT_ERROR_EVT        0x0C
-
-#define HCI_BRCM_TX_POWER_OPCODE            (0x007D | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_ENABLE_WBS                 (0x007E | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_UIPC_OVER_HCI              (0x008B | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_READ_AUDIO_ROUTE_INFO      (0x00A2 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_UIPC_OVER_HCI_EVT          0x1A
-#define HCI_BRCM_ENCAPSULATED_HCI           (0x00A3 | HCI_GRP_VENDOR_SPECIFIC)
-/* VSE subcode - VSE format FF [len] [subcode] [vse params...] */
-#define HCI_BRCM_ENCAPSULATED_HCI_EVT       0x1E
-
-/* PCM2 Setup */
-#define HCI_BRCM_PCM2_SETUP                 (0x00AE | HCI_GRP_VENDOR_SPECIFIC)
-
-/* BRR */
-#define HCI_BRCM_SET_BRR                    (0x00AA | HCI_GRP_VENDOR_SPECIFIC)
-
-/* 3DTV */
-#define HCI_BRCM_3D_CTRL                    (0x00B7 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_3D_OFFSET_DELAY            (0x00D6 | HCI_GRP_VENDOR_SPECIFIC)
-
-/* GPS */
-#define HCI_BRCM_GPS_DATA                   (0x0089 | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_GPS_SENSOR_OPCODE          (0x008F | HCI_GRP_VENDOR_SPECIFIC)  /* GPS sensor VSC opcode */
-
-/* MIP: Multicast Individual Polling */
-#define HCI_BRCM_INIT_MIP                   (0x00DC | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_OPEN_CMD               (0x00DD | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_CLOSE_CMD              (0x00DE | HCI_GRP_VENDOR_SPECIFIC)
-#define HCI_BRCM_MIP_ENC_KEY_CMD            (0x00DF | HCI_GRP_VENDOR_SPECIFIC)
-
-/* MIP-related definitions */
-#define BRCM_MIP_ROLE_MASTER                0x00
-#define BRCM_MIP_ROLE_SLAVE                 0x01
-
-#define BRCM_MIP_MODE_A2DP                  0x00
-#define BRCM_MIP_MODE_3DG                   0x01
-#define BRCM_MIP_MODE_CMBO                  0x02    /* A2DP + 3DG */
-
-/* Parameter information for HCI_BRCM_SET_ACL_PRIORITY */
-#define HCI_BRCM_ACL_PRIORITY_PARAM_SIZE    3
-#define HCI_BRCM_ACL_PRIORITY_LOW           0x00
-#define HCI_BRCM_ACL_PRIORITY_HIGH          0xFF
-
-#define HCI_BRCM_PAUSE_TRANSPORT_LENGTH     6
-
-/* Parameter information for HCI_BRCM_SCO_PCM_INT_PARAM */
-#define HCI_BRCM_SCO_PCM_PARAM_SIZE         5
-#define HCI_BRCM_SCO_ROUTE_PCM              0
-#define HCI_BRCM_SCO_ROUTE_HCI              1
-
-/* Parameter information for HCI_BRCM_WRITE_I2SPCM_INTF_PARAM */
-#define HCI_BRCM_I2SPCM_PARAM_SIZE          4
-#define HCI_BRCM_I2SPCM_I2S_DISABLE         0
-#define HCI_BRCM_I2SPCM_I2S_ENABLE          1
-#define HCI_BRCM_I2SPCM_IS_SLAVE            0
-#define HCI_BRCM_I2SPCM_IS_MASTER           1
-#define HCI_BRCM_I2SPCM_IS_DEFAULT_ROLE     2
-#define HCI_BRCM_I2SPCM_SAMPLE_8K           0
-#define HCI_BRCM_I2SPCM_SAMPLE_16K          1
-#define HCI_BRCM_I2SPCM_SAMPLE_4K           2
-#define HCI_BRCM_I2SPCM_SAMPLE_DEFAULT      3
-#define HCI_BRCM_I2SPCM_CLOCK_128K          0
-#define HCI_BRCM_I2SPCM_CLOCK_256K          1
-#define HCI_BRCM_I2SPCM_CLOCK_512K          2
-#define HCI_BRCM_I2SPCM_CLOCK_1024K         3
-#define HCI_BRCM_I2SPCM_CLOCK_2048K         4
-#define HCI_BRCM_I2SPCM_CLOCK_DEFAULT       5
 
 /*
 **  Definitions for HCI Events
@@ -490,9 +412,12 @@
 #define HCI_NUM_COMPL_DATA_BLOCKS_EVT       0x48
 #define HCI_SHORT_RANGE_MODE_COMPLETE_EVT   0x4C
 #define HCI_AMP_STATUS_CHANGE_EVT           0x4D
+#define HCI_SET_TRIGGERED_CLOCK_CAPTURE_EVT 0x4E
+
+
 
 /* ULP HCI Event */
-#define HCI_BLE_EVENT                   0x03E
+#define HCI_BLE_EVENT                       0x03E
 /* ULP Event sub code */
 #define HCI_BLE_CONN_COMPLETE_EVT           0x01
 #define HCI_BLE_ADV_PKT_RPT_EVT             0x02
@@ -500,17 +425,24 @@
 #define HCI_BLE_READ_REMOTE_FEAT_CMPL_EVT   0x04
 #define HCI_BLE_LTK_REQ_EVT                 0x05
 
-#define HCI_EVENT_RSP_FIRST             HCI_INQUIRY_COMP_EVT
-#define HCI_EVENT_RSP_LAST              HCI_AMP_STATUS_CHANGE_EVT
+/* ConnectionLess Broadcast events */
+#define HCI_SYNC_TRAIN_COMP_EVT             0x4F
+#define HCI_SYNC_TRAIN_RECEIVED_EVT         0x50
+#define HCI_CLB_RX_DATA_EVT                 0x51
+#define HCI_CLB_RX_TIMEOUT_EVT              0x52
+#define HCI_TRUNCATED_PAGE_COMP_EVT         0x53
+#define HCI_SLAVE_PAGE_RESP_TIMEOUT_EVT     0x54
+#define HCI_CLB_CHANNEL_CHANGE_EVT          0x55
+#define HCI_INQUIRY_RESPONSE_NOTIF          0x56
 
-#define HCI_BRCM_H4IBSS_EVT             0xEF  /* Vendor specific events for H4IBSS */
-#define HCI_VENDOR_SPECIFIC_EVT         0xFF  /* Vendor specific events */
-#define HCI_NAP_TRACE_EVT               0xFF  /* was define 0xFE, 0xFD, change to 0xFF
+#define HCI_EVENT_RSP_FIRST                 HCI_INQUIRY_COMP_EVT
+#define HCI_EVENT_RSP_LAST                  HCI_CLB_CHANNEL_CHANGE_EVT
+
+#define HCI_VENDOR_SPECIFIC_EVT             0xFF  /* Vendor specific events */
+#define HCI_NAP_TRACE_EVT                   0xFF  /* was define 0xFE, 0xFD, change to 0xFF
                                                  because conflict w/ TCI_EVT and per
                                                  specification compliant */
 
-
-
 /*
 **  Defentions for HCI Error Codes that are past in the events
 */
@@ -580,7 +512,13 @@
 #define HCI_ERR_CONN_FAILED_ESTABLISHMENT               0x3E
 #define HCI_ERR_MAC_CONNECTION_FAILED                   0x3F
 
-#define HCI_ERR_MAX_ERR                                 0x40
+/* ConnectionLess Broadcast errors */
+#define HCI_ERR_LT_ADDR_ALREADY_IN_USE                  0x40
+#define HCI_ERR_LT_ADDR_NOT_ALLOCATED                   0x41
+#define HCI_ERR_CLB_NOT_ENABLED                         0x42
+#define HCI_ERR_CLB_DATA_TOO_BIG                        0x43
+
+#define HCI_ERR_MAX_ERR                                 0x43
 
 #define HCI_HINT_TO_RECREATE_AMP_PHYS_LINK              0xFF
 
@@ -672,6 +610,18 @@
     0x0000000000002000 AMP Status Change Event
 */
 
+/* the event mask page 2 (CLB + CSA4) for BR/EDR controller */
+#define HCI_PAGE_2_EVENT_MASK                  "\x00\x00\x00\x00\x00\x7F\xC0\x00"
+/*  0x0000000000004000 Triggered Clock Capture Event
+    0x0000000000008000 Sync Train Complete Event
+    0x0000000000010000 Sync Train Received Event
+    0x0000000000020000 Connectionless Broadcast Receive Event
+    0x0000000000040000 Connectionless Broadcast Timeout Event
+    0x0000000000080000 Truncated Page Complete Event
+    0x0000000000100000 Salve Page Response Timeout Event
+    0x0000000000200000 Connectionless Broadcast Channel Map Change Event
+    0x0000000000400000 Inquiry Response Notification Event
+*/
 
 /*
 ** Definitions for packet type masks (BT1.2 and BT2.0 definitions)
@@ -865,6 +815,7 @@
 #define HCI_EIR_OOB_COD_TYPE                 BT_EIR_OOB_COD_TYPE
 #define HCI_EIR_OOB_SSP_HASH_C_TYPE          BT_EIR_OOB_SSP_HASH_C_TYPE
 #define HCI_EIR_OOB_SSP_RAND_R_TYPE          BT_EIR_OOB_SSP_RAND_R_TYPE
+#define HCI_EIR_3D_SYNC_TYPE                 BT_EIR_3D_SYNC_TYPE
 
 /* Definitions for Write Simple Pairing Mode */
 #define HCI_SP_MODE_UNDEFINED           0x00
@@ -1076,8 +1027,15 @@
 #define HCI_CONTROLLER_TYPE_ECMA        2
 #define HCI_MAX_CONTROLLER_TYPES        3
 
+/*  ConnectionLess Broadcast */
+#define HCI_CLB_DISABLE                 0x00
+#define HCI_CLB_ENABLE                  0x01
 
-
+/* ConnectionLess Broadcast Data fragment */
+#define HCI_CLB_FRAGMENT_CONT           0x00
+#define HCI_CLB_FRAGMENT_START          0x01
+#define HCI_CLB_FRAGMENT_END            0x02
+#define HCI_CLB_FRAGMENT_SINGLE         0x03
 
 /* AMP Controller Status codes
 */
@@ -1233,31 +1191,67 @@
 #define LMP_COMPID_HARMON_INTL_IND      87
 #define LMP_COMPID_VIZIO                88
 #define LMP_COMPID_NORDIC SEMI          89
-#define LMP_COMPID_EM MICRO             90
-#define LMP_COMPID_RALINK TECH          91
-#define LMP_COMPID_BELKIN INC           92
-#define LMP_COMPID_REALTEK SEMI         93
-#define LMP_COMPID_STONESTREET ONE      94
+#define LMP_COMPID_EM_MICRO             90
+#define LMP_COMPID_RALINK_TECH          91
+#define LMP_COMPID_BELKIN_INC           92
+#define LMP_COMPID_REALTEK_SEMI         93
+#define LMP_COMPID_STONESTREET_ONE      94
 #define LMP_COMPID_WICENTRIC            95
 #define LMP_COMPID_RIVIERAWAVES         96
-#define LMP_COMPID_RDA MICRO            97
-#define LMP_COMPID_GIBSON GUITARS       98
-#define LMP_COMPID_MICOMMAND INC        99
-#define LMP_COMPID_BAND XI              100
-#define LMP_COMPID_HP COMPANY           101
-#define LMP_COMPID_9SOLUTIONS OY        102
-#define LMP_COMPID_GN NETCOM            103
-#define LMP_COMPID_GENERAL MOTORS       104
-#define LMP_COMPID_AD ENGINEERING       105
-#define LMP_COMPID_MINDTREE LTD         106
-#define LMP_COMPID_POLAR ELECTRO        107
-#define LMP_COMPID_BEAUTIFUL ENTERPRISE 108
+#define LMP_COMPID_RDA_MICRO            97
+#define LMP_COMPID_GIBSON_GUITARS       98
+#define LMP_COMPID_MICOMMAND_INC        99
+#define LMP_COMPID_BAND_XI              100
+#define LMP_COMPID_HP_COMPANY           101
+#define LMP_COMPID_9SOLUTIONS_OY        102
+#define LMP_COMPID_GN_NETCOM            103
+#define LMP_COMPID_GENERAL_MOTORS       104
+#define LMP_COMPID_AD_ENGINEERING       105
+#define LMP_COMPID_MINDTREE_LTD         106
+#define LMP_COMPID_POLAR_ELECTRO        107
+#define LMP_COMPID_BEAUTIFUL_ENTERPRISE 108
 #define LMP_COMPID_BRIARTEK             109
-#define LMP_COMPID_SUMMIT DATA COMM     110
-#define LMP_COMPID_SOUND ID             111
+#define LMP_COMPID_SUMMIT_DATA_COMM     110
+#define LMP_COMPID_SOUND_ID             111
 #define LMP_COMPID_MONSTER LLC          112
 #define LMP_COMPID_CONNECTBLU           113
-#define LMP_COMPID_MAX_ID               114 /* this is a place holder */
+
+#define LMP_COMPID_SHANGHAI_SSE         114
+#define LMP_COMPID_GROUP_SENSE          115
+#define LMP_COMPID_ZOMM                 116
+#define LMP_COMPID_SAMSUNG              117
+#define LMP_COMPID_CREATIVE_TECH        118
+#define LMP_COMPID_LAIRD_TECH           119
+#define LMP_COMPID_NIKE                 120
+#define LMP_COMPID_LESSWIRE             121
+#define LMP_COMPID_MSTAR_SEMI           122
+#define LMP_COMPID_HANLYNN_TECH         123
+#define LMP_COMPID_AR_CAMBRIDGE         124
+#define LMP_COMPID_SEERS_TECH           125
+#define LMP_COMPID_SPORTS_TRACKING      126
+#define LMP_COMPID_AUTONET_MOBILE       127
+#define LMP_COMPID_DELORME_PUBLISH      128
+#define LMP_COMPID_WUXI_VIMICRO         129
+#define LMP_COMPID_SENNHEISER           130
+#define LMP_COMPID_TIME_KEEPING_SYS     131
+#define LMP_COMPID_LUDUS_HELSINKI       132
+#define LMP_COMPID_BLUE_RADIOS          133
+#define LMP_COMPID_EQUINUX              134
+#define LMP_COMPID_GARMIN_INTL          135
+#define LMP_COMPID_ECOTEST              136
+#define LMP_COMPID_GN_RESOUND           137
+#define LMP_COMPID_JAWBONE              138
+#define LMP_COMPID_TOPCON_POSITIONING   139
+#define LMP_COMPID_QUALCOMM_LABS        140
+#define LMP_COMPID_ZSCAN_SOFTWARE       141
+#define LMP_COMPID_QUINTIC              142
+#define LMP_COMPID_STOLLMAN_EV          143
+#define LMP_COMPID_FUNAI_ELECTRONIC     144
+#define LMP_COMPID_ADV_PANMOBILE        145
+#define LMP_COMPID_THINK_OPTICS         146
+#define LMP_COMPID_UNIVERSAL_ELEC       147
+#define LMP_COMPID_AIROHA_TECH          148
+#define LMP_COMPID_MAX_ID               149 /* this is a place holder */
 #define LMP_COMPID_INTERNAL             65535
 
 #define MAX_LMP_COMPID                  (LMP_COMPID_MAX_ID)
@@ -1308,10 +1302,17 @@
 #define HCI_EDR3_DH3_PACKET_SIZE    552
 #define HCI_EDR3_DH5_PACKET_SIZE    1021
 
+/* Feature Pages */
+#define HCI_EXT_FEATURES_PAGE_0     0       /* Extended Feature Page 0 (regular features) */
+#define HCI_EXT_FEATURES_PAGE_1     1       /* Extended Feature Page 1 */
+#define HCI_EXT_FEATURES_PAGE_2     2       /* Extended Feature Page 2 */
+#define HCI_EXT_FEATURES_PAGE_MAX   HCI_EXT_FEATURES_PAGE_2
+
+#define HCI_FEATURE_BYTES_PER_PAGE      8
+
 /*
 **   Features encoding - page 0
 */
-#define HCI_NUM_FEATURE_BYTES           8
 #define HCI_FEATURES_KNOWN(x) ((x[0] | x[1] | x[2] | x[3] | x[4] | x[5] | x[6] | x[7]) != 0)
 
 #define HCI_FEATURE_3_SLOT_PACKETS_MASK 0x01
@@ -1454,6 +1455,16 @@
 #define HCI_FEATURE_AFH_CLASS_SLAVE_OFF  4
 #define HCI_LMP_AFH_CLASS_SLAVE_SUPPORTED(x) ((x)[HCI_FEATURE_AFH_CLASS_SLAVE_OFF] & HCI_FEATURE_AFH_CLASS_SLAVE_MASK)
 
+#if 1
+#define HCI_FEATURE_BREDR_NOT_SPT_MASK     0x20
+#define HCI_FEATURE_BREDR_NOT_SPT_OFF      4
+#define HCI_BREDR_NOT_SPT_SUPPORTED(x) ((x)[HCI_FEATURE_BREDR_NOT_SPT_OFF] & HCI_FEATURE_BREDR_NOT_SPT_MASK)
+
+#define HCI_FEATURE_LE_SPT_MASK      0x40
+#define HCI_FEATURE_LE_SPT_OFF       4
+#define HCI_LE_SPT_SUPPORTED(x)  ((x)[HCI_FEATURE_LE_SPT_OFF] & HCI_FEATURE_LE_SPT_MASK)
+#else
+
 #define HCI_FEATURE_ALIAS_AUTH_MASK     0x20
 #define HCI_FEATURE_ALIAS_AUTH_OFF      4
 #define HCI_LMP_ALIAS_AUTH_SUPPORTED(x) ((x)[HCI_FEATURE_ALIAS_AUTH_OFF] & HCI_FEATURE_ALIAS_AUTH_MASK)
@@ -1461,6 +1472,7 @@
 #define HCI_FEATURE_ANON_MODE_MASK      0x40
 #define HCI_FEATURE_ANON_MODE_OFF       4
 #define HCI_LMP_ANON_MODE_SUPPORTED(x)  ((x)[HCI_FEATURE_ANON_MODE_OFF] & HCI_FEATURE_ANON_MODE_MASK)
+#endif
 
 #define HCI_FEATURE_3_SLOT_EDR_ACL_MASK 0x80
 #define HCI_FEATURE_3_SLOT_EDR_ACL_OFF  4
@@ -1502,9 +1514,16 @@
 #define HCI_FEATURE_EXT_INQ_RSP_OFF     6
 #define HCI_EXT_INQ_RSP_SUPPORTED(x)    ((x)[HCI_FEATURE_EXT_INQ_RSP_OFF] & HCI_FEATURE_EXT_INQ_RSP_MASK)
 
+#if 1 /* TOKYO spec definition */
+#define HCI_FEATURE_SIMUL_LE_BREDR_MASK 0x02
+#define HCI_FEATURE_SIMUL_LE_BREDR_OFF  6
+#define HCI_SIMUL_LE_BREDR_SUPPORTED(x) ((x)[HCI_FEATURE_SIMUL_LE_BREDR_OFF] & HCI_FEATURE_SIMUL_LE_BREDR_MASK)
+
+#else
 #define HCI_FEATURE_ANUM_PIN_AWARE_MASK 0x02
 #define HCI_FEATURE_ANUM_PIN_AWARE_OFF  6
 #define HCI_ANUM_PIN_AWARE_SUPPORTED(x) ((x)[HCI_FEATURE_ANUM_PIN_AWARE_OFF] & HCI_FEATURE_ANUM_PIN_AWARE_MASK)
+#endif
 
 #define HCI_FEATURE_ANUM_PIN_CAP_MASK   0x04
 #define HCI_FEATURE_ANUM_PIN_CAP_OFF    6
@@ -1534,7 +1553,7 @@
 #define HCI_FEATURE_INQ_RESP_TX_OFF      7
 #define HCI_INQ_RESP_TX_SUPPORTED(x)     ((x)[HCI_FEATURE_INQ_RESP_TX_OFF] & HCI_FEATURE_INQ_RESP_TX_MASK)
 
-#define HCI_FEATURE_EXTENDED_MASK       0x80
+#define HCI_FEATURE_EXTENDED_MASK           0x80
 #define HCI_FEATURE_EXTENDED_OFF        7
 #define HCI_LMP_EXTENDED_SUPPORTED(x)   ((x)[HCI_FEATURE_EXTENDED_OFF] & HCI_FEATURE_EXTENDED_MASK)
 
@@ -1545,6 +1564,38 @@
 #define HCI_EXT_FEATURE_SSP_HOST_OFF  0
 #define HCI_SSP_HOST_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_SSP_HOST_OFF] & HCI_EXT_FEATURE_SSP_HOST_MASK)
 
+#define HCI_EXT_FEATURE_LE_HOST_MASK 0x02
+#define HCI_EXT_FEATURE_LE_HOST_OFF  0
+#define HCI_LE_HOST_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_LE_HOST_OFF] & HCI_EXT_FEATURE_LE_HOST_MASK)
+
+#define HCI_EXT_FEATURE_SIMUL_DUMO_HOST_MASK 0x04
+#define HCI_EXT_FEATURE_SIMUL_DUMO_HOST_OFF  0
+#define HCI_SIMUL_DUMO_HOST_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_SIMUL_DUMO_HOST_OFF] & HCI_EXT_FEATURE_SIMUL_DUMO_HOST_MASK)
+
+/*
+**   Features encoding - page 2
+*/
+#define HCI_EXT_FEATURE_CSB_MASTER_MASK         0x01
+#define HCI_EXT_FEATURE_CSB_MASTER_OFF          0
+#define HCI_CSB_MASTER_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_CSB_MASTER_OFF] & HCI_EXT_FEATURE_CSB_MASTER_MASK)
+
+#define HCI_EXT_FEATURE_CSB_SLAVE_MASK          0x02
+#define HCI_EXT_FEATURE_CSB_SLAVE_OFF           0
+#define HCI_CSB_SLAVE_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_CSB_SLAVE_OFF] & HCI_EXT_FEATURE_CSB_SLAVE_MASK)
+
+#define HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_MASK  0x04
+#define HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_OFF   0
+#define HCI_SYNC_TRAIN_MASTER_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_OFF] & HCI_EXT_FEATURE_SYNC_TRAIN_MASTER_MASK)
+
+#define HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_MASK    0x08
+#define HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_OFF     0
+#define HCI_SYNC_SCAN_SLAVE_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_OFF] & HCI_EXT_FEATURE_SYNC_SCAN_SLAVE_MASK)
+
+#define HCI_EXT_FEATURE_INQ_RESP_NOTIF_MASK     0x10
+#define HCI_EXT_FEATURE_INQ_RESP_NOTIF_OFF      0
+#define HCI_INQ_RESP_NOTIF_SUPPORTED(x) ((x)[HCI_EXT_FEATURE_INQ_RESP_NOTIF_OFF] & HCI_EXT_FEATURE_INQ_RESP_NOTIF_MASK)
+
+
 /*
 **   Local Supported Commands encoding
 */
@@ -2233,6 +2284,103 @@
 ** Supported Commands (Byte 28)
 */
 
+/* Supported Commands (Byte 29) */
+#define HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_MASK     0x08
+#define HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_OFF      29
+#define HCI_READ_ENH_SETUP_SYNCH_CONN_SUPPORTED(x)      ((x)[HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_OFF] & HCI_SUPP_COMMANDS_ENH_SETUP_SYNCH_CONN_MASK)
+
+#define HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_MASK    0x10
+#define HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_OFF     29
+#define HCI_READ_ENH_ACCEPT_SYNCH_CONN_SUPPORTED(x)     ((x)[HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_OFF] & HCI_SUPP_COMMANDS_ENH_ACCEPT_SYNCH_CONN_MASK)
+
+#define HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_MASK        0x20
+#define HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_OFF         29
+#define HCI_READ_LOCAL_CODECS_SUPPORTED(x)              ((x)[HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_OFF] & HCI_SUPP_COMMANDS_READ_LOCAL_CODECS_MASK)
+
+#define HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_MASK      0x40
+#define HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_OFF       29
+#define HCI_SET_MWS_CHANNEL_PARAMETERS_SUPPORTED(x)     ((x)[HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_OFF] & HCI_SUPP_COMMANDS_SET_MWS_CHANN_PARAM_MASK)
+
+#define HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_MASK       0x80
+#define HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_OFF        29
+#define HCI_SET_EXTERNAL_FRAME_CONFIGURATION_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_OFF] & HCI_SUPP_COMMANDS_SET_EXT_FRAME_CONF_MASK)
+
+
+/* Supported Commands (Byte 30) */
+#define HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_MASK     0x01
+#define HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_OFF      30
+#define HCI_SET_MWS_SIGNALING_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_OFF] & HCI_SUPP_COMMANDS_SET_MWS_SIGNALING_MASK)
+
+#define HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_MASK   0x02
+#define HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_OFF    30
+#define HCI_SET_MWS_TRANSPORT_LAYER_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_OFF] & HCI_SUPP_COMMANDS_SET_MWS_TRANS_LAYER_MASK)
+
+#define HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_MASK   0x04
+#define HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_OFF    30
+#define HCI_SET_MWS_SCAN_FREQUENCY_TABLE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_OFF] & HCI_SUPP_COMMANDS_SET_MWS_SCAN_FREQ_TABLE_MASK)
+
+#define HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_MASK      0x08
+#define HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_OFF    30
+#define HCI_GET_MWS_TRANS_LAYER_CFG_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_OFF] & HCI_SUPP_COMMANDS_GET_TRANS_LAYER_CONF_MASK)
+
+#define HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_MASK      0x10
+#define HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_OFF       30
+#define HCI_SET_MWS_PATTERN_CONFIGURATION_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_OFF] & HCI_SUPP_COMMANDS_SET_MWS_PATTERN_CONF_MASK)
+
+/* Supported Commands (Byte 30 bit 5) */
+#define HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_MASK         0x20
+#define HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_OFF          30
+#define HCI_SET_TRIG_CLK_CAP_SUPPORTED(x)               ((x)[HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_OFF] & HCI_SUPP_COMMANDS_SET_TRIG_CLK_CAP_MASK)
+
+
+/* Supported Commands (Byte 30 bit 6-7) */
+#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE             0x06
+#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE_OFF         30
+#define HCI_TRUNCATED_PAGE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_TRUNCATED_PAGE_OFF] & HCI_SUPP_COMMANDS_TRUNCATED_PAGE)
+
+#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL             0x07
+#define HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL_OFF         30
+#define HCI_TRUNCATED_PAGE_CANCEL_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL_OFF] & HCI_SUPP_COMMANDS_TRUNCATED_PAGE_CANCEL)
+
+/* Supported Commands (Byte 31 bit 6-7) */
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST             0x00
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_OFF         31
+#define HCI_SET_CONLESS_SLAVE_BRCST_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_OFF] & HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST)
+
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE             0x01
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE_OFF         31
+#define HCI_SET_CONLESS_SLAVE_BRCST_RECEIVE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE_OFF] & HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_RECEIVE)
+
+#define HCI_SUPP_COMMANDS_START_SYNC_TRAIN             0x02
+#define HCI_SUPP_COMMANDS_START_SYNC_TRAIN_OFF         31
+#define HCI_START_SYNC_TRAIN_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_START_SYNC_TRAIN_OFF] & HCI_SUPP_COMMANDS_START_SYNC_TRAIN)
+
+#define HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN             0x03
+#define HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN_OFF         31
+#define HCI_RECEIVE_SYNC_TRAIN_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN_OFF] & HCI_SUPP_COMMANDS_RECEIVE_SYNC_TRAIN)
+
+#define HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR             0x04
+#define HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR_OFF         31
+#define HCI_SET_RESERVED_LT_ADDR_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR_OFF] & HCI_SUPP_COMMANDS_SET_RESERVED_LT_ADDR)
+
+#define HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR             0x05
+#define HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR_OFF         31
+#define HCI_DELETE_RESERVED_LT_ADDR_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR_OFF] & HCI_SUPP_COMMANDS_DELETE_RESERVED_LT_ADDR)
+
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA             0x06
+#define HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA_OFF         31
+#define HCI_SET_CONLESS_SLAVE_BRCST_DATA_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA_OFF] & HCI_SUPP_COMMANDS_SET_CONLESS_SLAVE_BRCST_DATA)
+
+#define HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM             0x07
+#define HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM_OFF         31
+#define HCI_READ_SYNC_TRAIN_PARAM_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM_OFF] & HCI_SUPP_COMMANDS_READ_SYNC_TRAIN_PARAM)
+
+/* Supported Commands (Byte 32 bit 0) */
+#define HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM             0x00
+#define HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM_OFF         32
+#define HCI_WRITE_SYNC_TRAIN_PARAM_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM_OFF] & HCI_SUPP_COMMANDS_WRITE_SYNC_TRAIN_PARAM)
+
+
 /*
 Commands of HCI_GRP_VENDOR_SPECIFIC group for WIDCOMM SW LM Simulator
 */
@@ -2303,78 +2451,7 @@
 #define HCI_DEBUG_LC_CMD_MIN           (0x0300 | HCI_GRP_VENDOR_SPECIFIC)
 #define HCI_DEBUG_LC_CMD_MAX           (0x03FF | HCI_GRP_VENDOR_SPECIFIC)
 #define HCI_DEBUG_LC_COMMAND           HCI_DEBUG_LC_CMD_MAX
-
 #endif
 
-
-/* Broadcom Vendor Specific Event sub-codes */
-#define HCI_BRCM_VSE_SUBCODE_AUTOMATIC_PAIRING_REQUEST              0x01
-#define HCI_BRCM_VSE_SUBCODE_RX_COMPLETE                            0x02
-#define HCI_BRCM_VSE_SUBCODE_LINK_QUALITY_REPORT                    0x03
-#define HCI_BRCM_VSE_SUBCODE_IOP_TEST_RX_1_PACKET_REPORT            0x04
-#define HCI_BRCM_VSE_SUBCODE_IOP_TEST_RX_N_PACKETS_REPORT_SUMMARY   0x05
-#define HCI_BRCM_VSE_SUBCODE_MODULE_XRAM_TEST_REPORT_SUMMARY        0x06
-#define HCI_BRCM_VSE_SUBCODE_CONNECTIONLESS_RX_TEST_STATISTICS      0x07
-#define HCI_BRCM_VSE_SUBCODE_FM_INTERRUPT                           0x08
-#define HCI_BRCM_VSE_SUBCODE_TCA_DEBUG_REPORT                       0x0B
-#define HCI_BRCM_VSE_SUBCODE_RAM_ROM_CLOCK_TEST_STATUS              0x0C
-#define HCI_BRCM_VSE_SUBCODE_DEBUG_OUTPUT_STRING                    0x0D
-#define HCI_BRCM_VSE_SUBCODE_PCM_DATA_DUMP                          0x0E
-#define HCI_BRCM_VSE_SUBCODE_PROTOCOL_MESSAGE_DUMP                  0x0F
-#define HCI_BRCM_VSE_SUBCODE_GPS_DATA                               0x10
-#define HCI_BRCM_VSE_SUBCODE_RESERVED_11                            0x11
-#define HCI_BRCM_VSE_SUBCODE_GPS_SENSOR_EVENT                       0x12
-#define HCI_BRCM_VSE_SUBCODE_GPS_SENSOR_SETUP_EVENT                 0x13
-#define HCI_BRCM_VSE_SUBCODE_MEIF_RX_EVENT                          0x14
-#define HCI_BRCM_VSE_SUBCODE_UNDETECTED_CRC_ERROR_EVENT             0x15
-#define HCI_BRCM_VSE_SUBCODE_BFC_DISCONNECT_EVENT                   0x16
-#define HCI_BRCM_VSE_SUBCODE_CUSTOMER_SPECIFIC_CS_ENERGY_DETECTED_EVENTS 0x17
-#define HCI_BRCM_VSE_SUBCODE_BFC_POLLING_INFO_EVENT                 0x18
-#define HCI_BRCM_VSE_SUBCODE_EEPROM_CHIP_ERASE_BY_MINIDRIVER_STATUS_REPORT 0xCE
-
-/* MIP related Vendor Specific Event */
-#define HCI_BRCM_VSE_SUBCODE_MIP_MODE_CHANGE            0x27
-#define HCI_BRCM_VSE_SUBCODE_MIP_DISCONNECT             0x28
-#define HCI_BRCM_VSE_SUBCODE_MIP_EIR_CMPLT              0x29
-#define HCI_BRCM_VSE_SUBCODE_MIP_ENC_KEY                0x2A
-#define HCI_BRCM_VSE_SUBCODE_MIP_DATA_RECEIVED          0x2E
-
-/* AMP VSE events
-*/
-#define AMP_VSE_CHANSPEC_CHAN_MASK      0x00ff
-
-#define AMP_VSE_CHANSPEC_CTL_SB_MASK    0x0300
-#define AMP_VSE_CHANSPEC_CTL_SB_LOWER   0x0100
-#define AMP_VSE_CHANSPEC_CTL_SB_UPPER   0x0200
-#define AMP_VSE_CHANSPEC_CTL_SB_NONE    0x0300
-
-#define AMP_VSE_CHANSPEC_BW_MASK        0x0C00
-#define AMP_VSE_CHANSPEC_BW_10          0x0400
-#define AMP_VSE_CHANSPEC_BW_20          0x0800
-#define AMP_VSE_CHANSPEC_BW_40          0x0C00
-
-#define AMP_VSE_CHANSPEC_BAND_MASK      0xf000
-#define AMP_VSE_CHANSPEC_BAND_5G        0x1000
-#define AMP_VSE_CHANSPEC_BAND_2G        0x2000
-
-/* PCM2 related */
-#define HCI_BRCM_CUSTOMER_EXT_ARC_LEN   4
-#define LOC_AUDIO_ROUTING_CONTROL       0x88
-#define LOC_ARC_CHANNEL_ID              0xF3
-
-#define ARC_INTERFACE_PCMI2S            0x01
-#define ARC_INTERFACE_FM_I2S            0x02
-#define ARC_INTERFACE_SLB               0x03
-
-#define ARC_MODE_NOT_USED               0x00
-#define ARC_MODE_BT_AUDIO               0x01
-#define ARC_MODE_FMRX                   0x02
-#define ARC_MODE_FMTX                   0x03
-#define ARC_MODE_SHARED_BT_FMRX         0x04
-#define ARC_MODE_SHARED_BT_FMTX         0x05
-
-#define BRCM_PCM2_SETUP_READ_SIZE       0x01
-#define BRCM_PCM2_SETUP_WRITE_SIZE      0x1A
-
 #endif
 
diff --git a/src/include/nfc_target.h b/src/include/nfc_target.h
index 1ec7e57..bfe0f4e 100755
--- a/src/include/nfc_target.h
+++ b/src/include/nfc_target.h
@@ -129,6 +129,16 @@
 #endif
 
 
+/* NCI msg pool for HAL (for shared NFC/HAL GKI)*/
+#ifndef NFC_HAL_NCI_POOL_ID
+#define NFC_HAL_NCI_POOL_ID         NFC_NCI_POOL_ID
+#endif
+
+#ifndef NFC_HAL_NCI_POOL_BUF_SIZE
+#define NFC_HAL_NCI_POOL_BUF_SIZE   NFC_NCI_POOL_BUF_SIZE
+#endif
+
+
 /******************************************************************************
 **
 ** NCI Transport definitions
@@ -177,9 +187,6 @@
 #endif
 
 /* Define to TRUE to include not openned Broadcom Vendor Specific implementation */
-#ifndef NFC_BRCM_NOT_OPEN_INCLUDED
-#define NFC_BRCM_NOT_OPEN_INCLUDED  FALSE  //Android requires FALSE
-#endif
 
 /* Define to TRUE if compling for NFC Reader/Writer Only mode */
 #ifndef NFC_RW_ONLY
@@ -335,27 +342,6 @@
 #define CE_TEST_INCLUDED            FALSE
 #endif
 
-#if (NFC_BRCM_NOT_OPEN_INCLUDED == TRUE)
-/* Power cycle NFCC to move full power mode from CE low power mode */
-#ifndef NFC_LP_POWER_CYCLE_TO_FULL
-#define NFC_LP_POWER_CYCLE_TO_FULL  TRUE
-#endif
-
-/* Parameter for low power mode command    */
-#ifndef NFC_LP_COMMAND_PARAMS
-#define NFC_LP_COMMAND_PARAMS       5
-#endif
-
-/* Primary Threshold for battery monitor   */
-#ifndef NFC_LP_PRIMARY_THRESHOLD
-#define NFC_LP_PRIMARY_THRESHOLD    0
-#endif
-
-/* Secondary Threshold for battery monitor */
-#ifndef NFC_LP_SECONDARY_THRESHOLD
-#define NFC_LP_SECONDARY_THRESHOLD  8
-#endif
-#endif
 
 /* Quick Timer */
 #ifndef QUICK_TIMER_TICKS_PER_SEC
@@ -527,9 +513,9 @@
 #define NFA_P2P_INCLUDED            TRUE
 #endif
 
-/* Timeout for waiting on other host in HCI Network to initialize */
-#ifndef NFA_HCI_NETWK_INIT_TIMEOUT
-#define NFA_HCI_NETWK_INIT_TIMEOUT  400
+/* Maximum Idle time (no hcp) to wait for EE DISC REQ Ntf(s) */
+#ifndef NFA_HCI_NETWK_INIT_IDLE_TIMEOUT
+#define NFA_HCI_NETWK_INIT_IDLE_TIMEOUT  1000
 #endif
 
 #ifndef NFA_HCI_MAX_HOST_IN_NETWORK
@@ -552,8 +538,8 @@
 #endif
 
 /* Timeout for waiting for the response to HCP Command packet */
-#ifndef NFA_HCI_CMD_RSP_TIMEOUT
-#define NFA_HCI_CMD_RSP_TIMEOUT    1000
+#ifndef NFA_HCI_RESPONSE_TIMEOUT
+#define NFA_HCI_RESPONSE_TIMEOUT    1000
 #endif
 
 /* Default poll duration (may be over-ridden using NFA_SetRfDiscoveryDuration) */
@@ -576,6 +562,11 @@
 #define NFA_DM_AUTO_PRESENCE_CHECK   FALSE  /* Android requires FALSE */
 #endif
 
+/* Default delay to auto presence check after sending raw frame */
+#ifndef NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY
+#define NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY   750
+#endif
+
 /* Time to restart discovery after deactivated */
 #ifndef NFA_DM_DISC_DELAY_DISCOVERY
 #define NFA_DM_DISC_DELAY_DISCOVERY     1000
@@ -593,7 +584,7 @@
 #endif
 
 #ifndef NFA_CHO_INCLUDED
-#define NFA_CHO_INCLUDED            TRUE
+#define NFA_CHO_INCLUDED            FALSE /* Anddroid must use FALSE to exclude CHO */
 #endif
 
 /* MIU for CHO              */
@@ -626,7 +617,7 @@
 #endif
 
 #ifndef NFA_SNEP_INCLUDED
-#define NFA_SNEP_INCLUDED               TRUE
+#define NFA_SNEP_INCLUDED               FALSE /* Android must use FALSE to exclude SNEP */
 #endif
 
 /* Max acceptable length */
@@ -673,6 +664,19 @@
 #define NFA_DTA_INCLUDED            TRUE
 #endif
 
+
+/*****************************************************************************
+**  Define HAL_WRITE depending on whether HAL is using shared GKI resources
+**  as the NFC stack.
+*****************************************************************************/
+#ifndef HAL_WRITE
+#define HAL_WRITE(p)    {nfc_cb.p_hal->write(p->len, (UINT8 *)(p+1) + p->offset); GKI_freebuf(p);}
+
+
+
+#endif /* HAL_WRITE */
+
+
 #endif /* NFC_TARGET_H */
 
 
diff --git a/src/include/nfccext.h b/src/include/nfccext.h
deleted file mode 100644
index 8f5f006..0000000
--- a/src/include/nfccext.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 1999-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-/****************************************************************************/
-/*  NFCC global definitions                                                 */
-/****************************************************************************/
-
-#ifndef NFCC_EXT_H
-#define NFCC_EXT_H
-
-#include "bt_target.h"
-#include "nci_cmsgs.h"
-#include "nci_defs.h"
-
-extern void    nfcc_init (void);
-extern void * nfcc_find_conn_cb_by_conn_id(UINT8 conn_id);
-extern void     nfcc_proc_nfcee_discover(void);
-extern void     nfcc_proc_nfcee_uicc_vse_test(UINT8 ee_handle, UINT8 mode);
-extern void    lm_process_nfc (BT_HDR *p_msg);
-
-/*
-** Definitions for events sent from NFCC to LMP
-*/
-#define NFCC_EVENT_START_DISCOVER       1    /* forward Start Discover cmd to peer NFCC */
-#define NFCC_EVENT_DISCOVER_RESP        2    /* A response to a Discover cmd       */
-#define NFCC_EVENT_DATA                 3    /* A response to a Discover cmd       */
-#define NFCC_EVENT_DISCOVER_SELECT      4    /* forward Start Discover cmd to peer NFCC */
-#define NFCC_EVENT_DEACTIVATE           5    /* forward deactivate cmd to peer NFCC */
-
-
-#define NFCC_MAX_DISCOVER_PARAMS        7
-
-/* this does not work if more than 329 */
-#define NFCC_MAX_PARAM_TLV_LEN          328
-
-/* Discovery Type Masks - not in spec; for convenience/based on NCI_DISCOVERY_TYPE* */
-#define NCI_DISCOVERY_MASK_POLL_A       0x0001
-#define NCI_DISCOVERY_MASK_POLL_B       0x0002
-#define NCI_DISCOVERY_MASK_POLL_F       0x0004
-#define NCI_DISCOVERY_MASK_LISTEN_A     0x0100
-#define NCI_DISCOVERY_MASK_LISTEN_B     0x0200
-#define NCI_DISCOVERY_MASK_LISTEN_F     0x0400
-#define NCI_DISCOVERY_MASK_MAX          0x070F
-
-typedef UINT16 tNCI_DISCOVERY_MASK;
-
-#define NFCC_NUM_NFCEE      3
-/*
-** Define a buffer that is used for data descriptors from HCID to LC
-*/
-typedef struct
-{
-    BT_HDR                  hdr;        /* Standard BT header               */
-    tNCI_DISCOVERY_MASK     mask;       /* sender is looking for anything in this mask */
-    UINT8                   num_params;
-    tNCI_DISCOVER_PARAMS    params[NFCC_MAX_DISCOVER_PARAMS];
-    UINT8                   param_tlv[NFCC_MAX_PARAM_TLV_LEN];
-    UINT16                  param_tlv_len;
-} tNFCC_START_DISCOVER;
-
-typedef struct
-{
-    BT_HDR                  hdr;        /* Standard BT header               */
-    tNCI_DISCOVERY_MASK     mask;       /* sender is looking for anything in this mask */
-    UINT8                   num_params;
-    tNCI_DISCOVER_PARAMS    params[NFCC_MAX_DISCOVER_PARAMS];
-    UINT8                   param_tlv[NFCC_MAX_PARAM_TLV_LEN];
-    UINT16                  param_tlv_len;
-} tNFCC_DISCOVER_RESP;
-
-typedef struct
-{
-    BT_HDR                  hdr;        /* Standard BT header               */
-    UINT8                   target_handle;
-    UINT8                   protocol;
-} tNFCC_DISCOVER_SELECT;
-
-/********************************************************************************
-**
-** Structures used for NFCC Simulation to communicate with peer NFCC Simulation
-*/
-typedef union
-{
-    BT_HDR                  hdr;
-    tNFCC_START_DISCOVER    start_discover;
-    tNFCC_DISCOVER_RESP     discover_resp;
-    tNFCC_DISCOVER_SELECT   discover_select;
-} tNFCC_TO_PEER;
-
-
-#endif
-
diff --git a/src/libnfc.conf b/src/libnfc.conf
deleted file mode 100644
index 907fac6..0000000
--- a/src/libnfc.conf
+++ /dev/null
@@ -1,95 +0,0 @@
-## this file is used by NFC stack (external/libnfc-nci/src)
-## and NFC Service Java Native Interface (packages/apps/Nfc/nci/jni)
-
-###############################################################################
-# Application options
-APPL_TRACE_LEVEL=0xFF
-PROTOCOL_TRACE_LEVEL=0xFFFFFFFF
-
-###############################################################################
-# File used for NFA storage
-NFA_STORAGE="/data/nfc"
-
-###############################################################################
-# Force tag polling for the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B |
-#            NFA_TECHNOLOGY_MASK_F | NFA_TECHNOLOGY_MASK_ISO15693 |
-#            NFA_TECHNOLOGY_MASK_B_PRIME | NFA_TECHNOLOGY_MASK_A_ACTIVE |
-#            NFA_TECHNOLOGY_MASK_F_ACTIVE.
-#
-# Notable bits:
-#   NFA_TECHNOLOGY_MASK_KOVIO       0x20
-#   NFA_TECHNOLOGY_MASK_A_ACTIVE    0x40
-#   NFA_TECHNOLOGY_MASK_F_ACTIVE    0x80
-#POLLING_TECH_MASK=0xDF
-
-###############################################################################
-# Force P2P to only listen for the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_F |
-#            NFA_TECHNOLOGY_MASK_A_ACTIVE | NFA_TECHNOLOGY_MASK_F_ACTIVE
-P2P_LISTEN_TECH_MASK=0x45
-
-###############################################################################
-# This setting allows you to disable registering the T4t Virtual SE that causes
-# the NFCC to send PPSE requests to the DH.
-# The default setting is enabled (i.e. T4t Virtual SE is registered).
-#REGISTER_VIRTUAL_SE=1
-
-###############################################################################
-# Use Nexus S NXP RC work to allow our stack/firmware to work with a retail
-# Nexus S that causes IOP issues.  Note, this will not pass conformance and
-# should be removed for production.
-USE_NXP_P2P_RC_WORKAROUND=1
-
-###############################################################################
-# When screen is turned off, specify the desired power state of the controller.
-# 0: power-off-sleep state; DEFAULT
-# 1: full-power state
-# 2: screen-off card-emulation (CE4/CE3/CE1 modes are used)
-#SCREEN_OFF_POWER_STATE=0
-
-###############################################################################
-# Configure the default Destination Gate used by HCI (the default is 4, which
-# is the ETSI loopback gate.
-#NFA_HCI_DEFAULT_DEST_GATE=4
-
-###############################################################################
-# Configure the single default SE to use.  The default is to use the first
-# SE that is detected by the stack.  This value might be used when the phone
-# supports multiple SE (e.g. 0xF3 and 0xF4) but you want to force it to use
-# one of them (e.g. 0xF4).
-#ACTIVE_SE=0xF3
-
-###############################################################################
-# Configure the NFC Extras to open and use a static pipe.  If the value is
-# not set or set to 0, then the default is use a dynamic pipe based on a
-# destination gate (see NFA_HCI_DEFAULT_DEST_GATE).  Note there is a value
-# for each UICC (where F3="UICC0" and F4="UICC1")
-#NFA_HCI_STATIC_PIPE_ID_F3=0x70
-#NFA_HCI_STATIC_PIPE_ID_F4=0x71
-
-###############################################################################
-# Force UICC to only listen to the following technology(s).
-# The bits are defined as tNFA_TECHNOLOGY_MASK in nfa_api.h.
-# Default is NFA_TECHNOLOGY_MASK_A | NFA_TECHNOLOGY_MASK_B.
-#UICC_LISTEN_TECH_MASK=0x03
-
-###############################################################################
-# When disconnecting from Oberthur secure element, perform a warm-reset of
-# the secure element to deselect the applet.
-# The default hex value of the command is 0x3.  If this variable is undefined, then
-# this feature is not used.
-#OBERTHUR_WARM_RESET_COMMAND=3
-
-###############################################################################
-# Default poll duration (in ms)
-#  The defualt is 500ms if not set (see nfc_target.h)
-NFA_DM_DISC_DURATION_POLL=333
-
-###############################################################################
-# AID for Empty Select command
-# If specified, this AID will be substituted when an Empty SELECT command is
-# detected.  The first byte is the length of the AID.  Maximum length is 16.
-AID_FOR_EMPTY_SELECT={08:A0:00:00:01:51:00:00:00}
diff --git a/src/nfa/ce/nfa_ce_act.c b/src/nfa/ce/nfa_ce_act.c
index f06f9f4..84ee57b 100644
--- a/src/nfa/ce/nfa_ce_act.c
+++ b/src/nfa/ce/nfa_ce_act.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2011-2012 Broadcom Corporation
+ *  Copyright (C) 2011-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the action functions the NFA_CE state machine.
@@ -256,16 +257,13 @@
         break;
 
     case NFA_DM_RF_DISC_DEACTIVATED_EVT:
-        ce_msg.hdr.event = NFA_CE_DEACTIVATE_NTF_EVT;
-        ce_msg.hdr.layer_specific = p_data->deactivate.type;
-        nfa_ce_hdl_event ((BT_HDR *) &ce_msg);
-        break;
-
-    case NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT:
-        /* DH initiated deactivation in NFA_DM_RFST_LISTEN_SLEEP */
-        ce_msg.hdr.event = NFA_CE_DEACTIVATE_NTF_EVT;
-        ce_msg.hdr.layer_specific = NFA_DEACTIVATE_TYPE_IDLE;
-        nfa_ce_hdl_event ((BT_HDR *) &ce_msg);
+        /* DM broadcasts deactivaiton event in listen sleep state, so check before processing */
+        if (nfa_ce_cb.flags & NFA_CE_FLAGS_LISTEN_ACTIVE_SLEEP)
+        {
+            ce_msg.hdr.event = NFA_CE_DEACTIVATE_NTF_EVT;
+            ce_msg.hdr.layer_specific = p_data->deactivate.type;
+            nfa_ce_hdl_event ((BT_HDR *) &ce_msg);
+        }
         break;
 
     default:
diff --git a/src/nfa/ce/nfa_ce_api.c b/src/nfa/ce/nfa_ce_api.c
index 08be523..1d296c9 100644
--- a/src/nfa/ce/nfa_ce_api.c
+++ b/src/nfa/ce/nfa_ce_api.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2011-2012 Broadcom Corporation
+ *  Copyright (C) 2011-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  NFA interface for card emulation
@@ -98,22 +99,17 @@
 **                  The NDEF data provided by p_ndef_data must be persistent
 **                  as long as the local NDEF tag is enabled.
 **
-**                  UID of the tag can be set only for Type 1 and Type 2 tag.
-**                  UID Length should be 4/7 bytes in case of Type 1 tag and
-**                  UID Length should be 4/10 bytes in case of Type 2 tag.
 **
 ** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-**                  should happen before calling this function
+**                  should happen before calling this function. Also, Input parameters p_uid and
+**                  uid_len are reserved for future use.
 **
 ** Returns:
 **                  NFA_STATUS_OK,            if command accepted
 **                  NFA_STATUS_INVALID_PARAM,
 **                      if protocol_maks is not 0 and p_ndef_data is NULL
-**                  (or)if p_uid is NULL and uid_len is not 0
-**                  (or)if protocol mask is set for both Type 1 and Type 2
-**                  (or)if uid_len is not 0 and protocol mask is not set for Type 1/2
-**                  (or)if protocol mask is set for Type 1 and uid_len is not 4/7
-**                  (or)if protocol mask is set for Type 2 and uid_len is not 4/10
+**                  (or)uid_len is not 0
+**                  (or)if protocol mask is set for Type 1 or Type 2
 **
 **                  NFA_STATUS_FAILED:        otherwise
 **
@@ -140,35 +136,17 @@
             return (NFA_STATUS_INVALID_PARAM);
         }
 
-        if ((protocol_mask & NFA_PROTOCOL_MASK_T1T) && (protocol_mask & NFA_PROTOCOL_MASK_T2T))
+        if ((protocol_mask & NFA_PROTOCOL_MASK_T1T) || (protocol_mask & NFA_PROTOCOL_MASK_T2T))
         {
-            NFA_TRACE_ERROR0 ("NFA_CeConfigureLocalTag: Cannot emulate both Type 1 and Type 2 tag simultaneously");
+            NFA_TRACE_ERROR0 ("NFA_CeConfigureLocalTag: Cannot emulate Type 1 / Type 2 tag");
             return (NFA_STATUS_INVALID_PARAM);
         }
 
-        if ((uid_len) && !(protocol_mask & NFA_PROTOCOL_MASK_T1T) && !(protocol_mask & NFA_PROTOCOL_MASK_T2T))
+        if (uid_len)
         {
             NFA_TRACE_ERROR1 ("NFA_CeConfigureLocalTag: Cannot Set UID for Protocol_mask: 0x%x", protocol_mask);
             return (NFA_STATUS_INVALID_PARAM);
         }
-
-        if ((uid_len) && (protocol_mask & NFA_PROTOCOL_MASK_T1T) && (uid_len != NFA_T1T_UID_LEN) && (uid_len != NFA_T1T_CMD_UID_LEN))
-        {
-            NFA_TRACE_ERROR1 ("NFA_CeConfigureLocalTag: Invalid UID Length for Type 1: 0x%x", uid_len);
-            return (NFA_STATUS_INVALID_PARAM);
-        }
-
-        if ((uid_len) && (protocol_mask & NFA_PROTOCOL_MASK_T2T) && (uid_len != NFA_T2T_UID_LEN) && (uid_len != NFA_MAX_UID_LEN))
-        {
-            NFA_TRACE_ERROR1 ("NFA_CeConfigureLocalTag: Invalid UID Length for Type 2: 0x%x", uid_len);
-            return (NFA_STATUS_INVALID_PARAM);
-        }
-
-        if ((uid_len) && (p_uid == NULL))
-        {
-            NFA_TRACE_ERROR0 ("NFA_CeConfigureLocalTag: Invlaid UID Length/NULL uid pointer");
-            return (NFA_STATUS_INVALID_PARAM);
-        }
     }
     if ((p_msg = (tNFA_CE_MSG *) GKI_getbuf ((UINT16) sizeof(tNFA_CE_MSG))) != NULL)
     {
diff --git a/src/nfa/ce/nfa_ce_main.c b/src/nfa/ce/nfa_ce_main.c
index 9ec56d8..282a92c 100644
--- a/src/nfa/ce/nfa_ce_main.c
+++ b/src/nfa/ce/nfa_ce_main.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2011-2012 Broadcom Corporation
+ *  Copyright (C) 2011-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the main implementation file for the NFA_CE
diff --git a/src/nfa/cho/nfa_cho_api.c b/src/nfa/cho/nfa_cho_api.c
deleted file mode 100644
index 13122ce..0000000
--- a/src/nfa/cho/nfa_cho_api.c
+++ /dev/null
@@ -1,457 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  NFA interface for connection handover
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfc_api.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfa_p2p_api.h"
-#include "nfa_cho_api.h"
-#include "nfa_cho_int.h"
-#include "nfa_mem_co.h"
-
-/*****************************************************************************
-**  Constants
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function         NFA_ChoRegister
-**
-** Description      This function is called to register callback function to receive
-**                  connection handover events.
-**
-**                  On this registration, "urn:nfc:sn:handover" server will be
-**                  registered on LLCP if enable_server is TRUE.
-**
-**                  The result of the registration is reported with NFA_CHO_REG_EVT.
-**
-** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-**                  should happen before calling this function
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoRegister (BOOLEAN        enable_server,
-                             tNFA_CHO_CBACK *p_cback)
-{
-    tNFA_CHO_API_REG *p_msg;
-
-    CHO_TRACE_API1 ("NFA_ChoRegister (): enable_server=%d", enable_server);
-
-    if (  (nfa_cho_cb.state != NFA_CHO_ST_DISABLED)
-        ||(nfa_cho_cb.p_cback != NULL)  )
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoRegister (): Already registered or callback is not provided");
-        return (NFA_STATUS_FAILED);
-    }
-
-    if ((p_msg = (tNFA_CHO_API_REG *) GKI_getbuf (sizeof (tNFA_CHO_API_REG))) != NULL)
-    {
-        p_msg->hdr.event = NFA_CHO_API_REG_EVT;
-
-        p_msg->enable_server = enable_server;
-        p_msg->p_cback       = p_cback;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_ChoDeregister
-**
-** Description      This function is called to deregister callback function from NFA
-**                  Connection Handover Application.
-**
-**                  If this is the valid deregistration, NFA Connection Handover
-**                  Application will close the service with "urn:nfc:sn:handover"
-**                  on LLCP and deregister NDEF type handler if any.
-**
-** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-**                  should happen before calling this function
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoDeregister (void)
-{
-    tNFA_CHO_API_DEREG *p_msg;
-
-    CHO_TRACE_API0 ("NFA_ChoDeregister ()");
-
-    if (nfa_cho_cb.state == NFA_CHO_ST_DISABLED)
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoDeregister (): Not registered");
-        return (NFA_STATUS_FAILED);
-    }
-
-    if ((p_msg = (tNFA_CHO_API_DEREG *) GKI_getbuf (sizeof (tNFA_CHO_API_DEREG))) != NULL)
-    {
-        p_msg->event = NFA_CHO_API_DEREG_EVT;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_ChoConnect
-**
-** Description      This function is called to create data link connection to
-**                  Connection Handover server on peer device.
-**
-**                  It must be called after receiving NFA_CHO_ACTIVATED_EVT.
-**                  NFA_CHO_CONNECTED_EVT will be returned if successful.
-**                  Otherwise, NFA_CHO_DISCONNECTED_EVT will be returned.
-**
-**                  If NFA_CHO_ROLE_REQUESTER is returned in NFA_CHO_CONNECTED_EVT,
-**                  Handover Request Message can be sent.
-**                  If NFA_CHO_ROLE_SELECTOR is returned in NFA_CHO_CONNECTED_EVT
-**                  because of collision, application must wait for Handover
-**                  Request Message.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoConnect (void)
-{
-    tNFA_CHO_API_CONNECT *p_msg;
-
-    CHO_TRACE_API0 ("NFA_ChoConnect ()");
-
-    if (nfa_cho_cb.state == NFA_CHO_ST_DISABLED)
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoConnect (): Not registered");
-        return (NFA_STATUS_FAILED);
-    }
-    else if (nfa_cho_cb.state == NFA_CHO_ST_CONNECTED)
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoConnect (): Already connected");
-        return (NFA_STATUS_FAILED);
-    }
-
-    if ((p_msg = (tNFA_CHO_API_CONNECT *) GKI_getbuf (sizeof (tNFA_CHO_API_CONNECT))) != NULL)
-    {
-        p_msg->event = NFA_CHO_API_CONNECT_EVT;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_ChoDisconnect
-**
-** Description      This function is called to disconnect data link connection with
-**                  Connection Handover server on peer device.
-**
-**                  NFA_CHO_DISCONNECTED_EVT will be returned.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoDisconnect (void)
-{
-    tNFA_CHO_API_DISCONNECT *p_msg;
-
-    CHO_TRACE_API0 ("NFA_ChoDisconnect ()");
-
-    if (nfa_cho_cb.state == NFA_CHO_ST_DISABLED)
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoDisconnect (): Not registered");
-        return (NFA_STATUS_FAILED);
-    }
-
-    if ((p_msg = (tNFA_CHO_API_DISCONNECT *) GKI_getbuf (sizeof (tNFA_CHO_API_DISCONNECT))) != NULL)
-    {
-        p_msg->event = NFA_CHO_API_DISCONNECT_EVT;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_ChoSendHr
-**
-** Description      This function is called to send Handover Request Message with
-**                  Handover Carrier records or Alternative Carrier records.
-**
-**                  It must be called after receiving NFA_CHO_CONNECTED_EVT.
-**
-**                  NDEF may include one or more Handover Carrier records or Alternative
-**                  Carrier records with auxiliary data.
-**                  The records in NDEF must be matched with tNFA_CHO_AC_INFO in order.
-**                  Payload ID must be unique and Payload ID length must be less than
-**                  or equal to NFA_CHO_MAX_REF_NAME_LEN.
-**
-**                  The alternative carrier information of Handover Select record
-**                  will be sent to application by NFA_CHO_SELECT_EVT. Application
-**                  may receive NFA_CHO_REQUEST_EVT because of handover collision.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoSendHr (UINT8             num_ac_info,
-                           tNFA_CHO_AC_INFO *p_ac_info,
-                           UINT8            *p_ndef,
-                           UINT32            ndef_len)
-{
-    tNFA_CHO_API_SEND_HR *p_msg;
-    UINT16               msg_size;
-    UINT8                *p_ndef_buf;
-
-    CHO_TRACE_API2 ("NFA_ChoSendHr (): num_ac_info=%d, ndef_len=%d", num_ac_info, ndef_len);
-
-    if (nfa_cho_cb.state != NFA_CHO_ST_CONNECTED)
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoSendHr (): Not connected");
-        return (NFA_STATUS_FAILED);
-    }
-
-    if (num_ac_info > NFA_CHO_MAX_AC_INFO)
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoSendHr (): Too many AC information");
-        return (NFA_STATUS_FAILED);
-    }
-
-    p_ndef_buf = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-
-    if (!p_ndef_buf)
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoSendHr (): Failed to allocate buffer for NDEF");
-        return NFA_STATUS_FAILED;
-    }
-    else if (ndef_len > LLCP_POOL_BUF_SIZE)
-    {
-        CHO_TRACE_ERROR1 ("NFA_ChoSendHr (): Failed to allocate buffer for %d bytes", ndef_len);
-        GKI_freebuf (p_ndef_buf);
-        return NFA_STATUS_FAILED;
-    }
-
-    msg_size = sizeof (tNFA_CHO_API_SEND_HR) + num_ac_info * sizeof (tNFA_CHO_AC_INFO);
-
-    if ((p_msg = (tNFA_CHO_API_SEND_HR *) GKI_getbuf (msg_size)) != NULL)
-    {
-        p_msg->hdr.event = NFA_CHO_API_SEND_HR_EVT;
-
-        memcpy (p_ndef_buf, p_ndef, ndef_len);
-        p_msg->p_ndef        = p_ndef_buf;
-        p_msg->max_ndef_size = LLCP_POOL_BUF_SIZE;
-        p_msg->cur_ndef_size = ndef_len;
-
-        p_msg->num_ac_info   = num_ac_info;
-        p_msg->p_ac_info     = (tNFA_CHO_AC_INFO *) (p_msg + 1);
-        memcpy (p_msg->p_ac_info, p_ac_info, num_ac_info * sizeof (tNFA_CHO_AC_INFO));
-
-        nfa_sys_sendmsg (p_msg);
-        return (NFA_STATUS_OK);
-    }
-    else
-    {
-        GKI_freebuf (p_ndef_buf);
-        return (NFA_STATUS_FAILED);
-    }
-}
-
-/*******************************************************************************
-**
-** Function         NFA_ChoSendHs
-**
-** Description      This function is called to send Handover Select message with
-**                  Alternative Carrier records as response to Handover Request
-**                  message.
-**
-**                  NDEF may include one or more Alternative Carrier records with
-**                  auxiliary data.
-**                  The records in NDEF must be matched with tNFA_CHO_AC_INFO in order.
-**                  Payload ID must be unique and Payload ID length must be less than
-**                  or equal to NFA_CHO_MAX_REF_NAME_LEN.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoSendHs (UINT8             num_ac_info,
-                           tNFA_CHO_AC_INFO *p_ac_info,
-                           UINT8            *p_ndef,
-                           UINT32            ndef_len)
-{
-    tNFA_CHO_API_SEND_HS *p_msg;
-    UINT16               msg_size;
-    UINT8                *p_ndef_buf;
-
-    CHO_TRACE_API2 ("NFA_ChoSendHs(): num_ac_info=%d, ndef_len=%d",
-                    num_ac_info, ndef_len);
-
-    if (nfa_cho_cb.state != NFA_CHO_ST_CONNECTED)
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoSendHs (): Not connected");
-        return (NFA_STATUS_FAILED);
-    }
-
-    if (num_ac_info > NFA_CHO_MAX_AC_INFO)
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoSendHs (): Too many AC information");
-        return (NFA_STATUS_FAILED);
-    }
-
-    p_ndef_buf = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-    if (!p_ndef_buf)
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoSendHs (): Failed to allocate buffer for NDEF");
-        return NFA_STATUS_FAILED;
-    }
-    else if (ndef_len > LLCP_POOL_BUF_SIZE)
-    {
-        CHO_TRACE_ERROR1 ("NFA_ChoSendHs (): Failed to allocate buffer for %d bytes", ndef_len);
-        GKI_freebuf (p_ndef_buf);
-        return NFA_STATUS_FAILED;
-    }
-
-    msg_size = sizeof (tNFA_CHO_API_SEND_HS) + num_ac_info * sizeof (tNFA_CHO_AC_INFO);
-
-    if ((p_msg = (tNFA_CHO_API_SEND_HS *) GKI_getbuf (msg_size)) != NULL)
-    {
-        p_msg->hdr.event = NFA_CHO_API_SEND_HS_EVT;
-
-        memcpy (p_ndef_buf, p_ndef, ndef_len);
-        p_msg->p_ndef        = p_ndef_buf;
-        p_msg->max_ndef_size = LLCP_POOL_BUF_SIZE;
-        p_msg->cur_ndef_size = ndef_len;
-
-        p_msg->num_ac_info   = num_ac_info;
-        p_msg->p_ac_info     = (tNFA_CHO_AC_INFO *) (p_msg + 1);
-        memcpy (p_msg->p_ac_info, p_ac_info, num_ac_info * sizeof (tNFA_CHO_AC_INFO));
-
-        nfa_sys_sendmsg (p_msg);
-        return (NFA_STATUS_OK);
-    }
-    else
-    {
-        GKI_freebuf (p_ndef_buf);
-        return (NFA_STATUS_FAILED);
-    }
-}
-
-/*******************************************************************************
-**
-** Function         NFA_ChoSendSelectError
-**
-** Description      This function is called to send Error record to indicate failure
-**                  to process the most recently received Handover Request message.
-**
-**                  error_reason : NFA_CHO_ERROR_TEMP_MEM
-**                                 NFA_CHO_ERROR_PERM_MEM
-**                                 NFA_CHO_ERROR_CARRIER
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_ChoSendSelectError (UINT8  error_reason,
-                                    UINT32 error_data)
-{
-    tNFA_CHO_API_SEL_ERR *p_msg;
-
-    CHO_TRACE_API2 ("NFA_ChoSendSelectError (): error_reason=0x%x, error_data=0x%x",
-                     error_reason, error_data);
-
-    if (nfa_cho_cb.state == NFA_CHO_ST_DISABLED)
-    {
-        CHO_TRACE_ERROR0 ("NFA_ChoSendSelectError (): Not registered");
-        return (NFA_STATUS_FAILED);
-    }
-
-    if ((p_msg = (tNFA_CHO_API_SEL_ERR *) GKI_getbuf (sizeof (tNFA_CHO_API_SEL_ERR))) != NULL)
-    {
-        p_msg->hdr.event = NFA_CHO_API_SEL_ERR_EVT;
-
-        p_msg->error_reason = error_reason;
-        p_msg->error_data   = error_data;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_ChoSetTraceLevel
-**
-** Description      This function sets the trace level for CHO.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-UINT8 NFA_ChoSetTraceLevel (UINT8 new_level)
-{
-    if (new_level != 0xFF)
-        nfa_cho_cb.trace_level = new_level;
-
-    return (nfa_cho_cb.trace_level);
-}
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
-/*******************************************************************************
-**
-** Function         NFA_ChoSetTestParam
-**
-** Description      This function is called to set test parameters.
-**
-*******************************************************************************/
-void NFA_ChoSetTestParam (UINT8        test_enable,
-                          UINT8        test_version,
-                          UINT16       test_random_number)
-{
-    nfa_cho_cb.test_enabled         = test_enable;
-    nfa_cho_cb.test_version         = test_version;
-    nfa_cho_cb.test_random_number   = test_random_number;
-}
-#endif
diff --git a/src/nfa/cho/nfa_cho_main.c b/src/nfa/cho/nfa_cho_main.c
deleted file mode 100644
index 373eced..0000000
--- a/src/nfa/cho/nfa_cho_main.c
+++ /dev/null
@@ -1,153 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This is the main implementation file for the NFA Connection Handover.
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfc_api.h"
-#include "nfa_sys.h"
-#include "nfa_cho_api.h"
-#include "nfa_cho_int.h"
-#include "trace_api.h"
-
-/*****************************************************************************
-**  Global Variables
-*****************************************************************************/
-
-/* system manager control block definition */
-#if NFA_DYNAMIC_MEMORY == FALSE
-tNFA_CHO_CB nfa_cho_cb;
-#endif
-
-/*****************************************************************************
-**  Static Functions
-*****************************************************************************/
-
-/* event handler function type */
-static BOOLEAN nfa_cho_evt_hdlr (BT_HDR *p_msg);
-
-/* disable function type */
-static void nfa_cho_sys_disable (void);
-
-/*****************************************************************************
-**  Constants
-*****************************************************************************/
-static const tNFA_SYS_REG nfa_cho_sys_reg =
-{
-    NULL,
-    nfa_cho_evt_hdlr,
-    nfa_cho_sys_disable,
-    NULL
-};
-
-/*******************************************************************************
-**
-** Function         nfa_cho_timer_cback
-**
-** Description      Process timeout event when timer expires
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-static void nfa_cho_timer_cback (void *p_tle)
-{
-    nfa_cho_sm_execute (NFA_CHO_TIMEOUT_EVT, NULL);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_init
-**
-** Description      Initialize NFA Connection Handover
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_cho_init (void)
-{
-    CHO_TRACE_DEBUG0 ("nfa_cho_init ()");
-
-    /* initialize control block */
-    memset (&nfa_cho_cb, 0, sizeof (tNFA_CHO_CB));
-
-    nfa_cho_cb.server_sap = LLCP_INVALID_SAP;
-    nfa_cho_cb.client_sap = LLCP_INVALID_SAP;
-    nfa_cho_cb.remote_sap = LLCP_INVALID_SAP;
-
-    nfa_cho_cb.hs_ndef_type_handle   = NFA_HANDLE_INVALID;
-    nfa_cho_cb.bt_ndef_type_handle   = NFA_HANDLE_INVALID;
-    nfa_cho_cb.wifi_ndef_type_handle = NFA_HANDLE_INVALID;
-
-    nfa_cho_cb.trace_level    = APPL_INITIAL_TRACE_LEVEL;
-
-    /* register message handler on NFA SYS */
-    nfa_sys_register ( NFA_ID_CHO,  &nfa_cho_sys_reg);
-
-    /* initialize timer callback */
-    nfa_cho_cb.timer.p_cback = nfa_cho_timer_cback;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_sys_disable
-**
-** Description      Deregister NFA Connection Handover from NFA SYS/DM
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-static void nfa_cho_sys_disable (void)
-{
-    CHO_TRACE_DEBUG0 ("nfa_cho_sys_disable ()");
-
-    /* clean up if application is still registered */
-    if (nfa_cho_cb.p_cback)
-    {
-        nfa_cho_proc_api_dereg ();
-    }
-
-    /* deregister message handler on NFA SYS */
-    nfa_sys_deregister (NFA_ID_CHO);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_evt_hdlr
-**
-** Description      Processing event for NFA Connection Handover
-**
-**
-** Returns          TRUE if p_msg needs to be deallocated
-**
-*******************************************************************************/
-static BOOLEAN nfa_cho_evt_hdlr (BT_HDR *p_msg)
-{
-    tNFA_CHO_INT_EVENT_DATA *p_data = (tNFA_CHO_INT_EVENT_DATA *) p_msg;
-
-    nfa_cho_sm_execute (p_data->hdr.event, p_data);
-
-    return TRUE;
-}
-
-
diff --git a/src/nfa/cho/nfa_cho_sm.c b/src/nfa/cho/nfa_cho_sm.c
deleted file mode 100644
index d0c8308..0000000
--- a/src/nfa/cho/nfa_cho_sm.c
+++ /dev/null
@@ -1,1022 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This is the state implementation file for the NFA Connection Handover.
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfc_api.h"
-#include "llcp_api.h"
-#include "llcp_defs.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfa_cho_api.h"
-#include "nfa_cho_int.h"
-#include "nfa_mem_co.h"
-
-/*****************************************************************************
-**  Global Variables
-*****************************************************************************/
-
-/*****************************************************************************
-**  Static Functions
-*****************************************************************************/
-static void nfa_cho_sm_disabled (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data);
-static void nfa_cho_sm_idle (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data);
-static void nfa_cho_sm_w4_cc (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data);
-static void nfa_cho_sm_connected (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data);
-static void nfa_cho_proc_rx_handover_msg (void);
-
-/* debug functions type */
-#if (BT_TRACE_VERBOSE == TRUE)
-static char *nfa_cho_state_code (tNFA_CHO_STATE state_code);
-static char *nfa_cho_evt_code (tNFA_CHO_INT_EVT evt_code);
-#endif
-
-/*****************************************************************************
-**  Constants
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function         nfa_cho_sm_llcp_cback
-**
-** Description      Processing event from LLCP
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_cho_sm_llcp_cback (tLLCP_SAP_CBACK_DATA *p_data)
-{
-    tNFA_CHO_RX_NDEF_STATUS rx_status;
-
-    CHO_TRACE_DEBUG2 ("nfa_cho_sm_llcp_cback (): event:0x%02X, local_sap:0x%02X",
-                       p_data->hdr.event, p_data->hdr.local_sap);
-
-    switch (p_data->hdr.event)
-    {
-    case LLCP_SAP_EVT_DATA_IND:
-        /* check if we received complete Handover Message */
-        rx_status = nfa_cho_reassemble_ho_msg (p_data->data_ind.local_sap,
-                                               p_data->data_ind.remote_sap);
-
-        if (rx_status == NFA_CHO_RX_NDEF_COMPLETE)
-        {
-            nfa_cho_sm_execute (NFA_CHO_RX_HANDOVER_MSG_EVT, NULL);
-        }
-        break;
-
-    case LLCP_SAP_EVT_CONNECT_IND:
-        nfa_cho_sm_execute (NFA_CHO_LLCP_CONNECT_IND_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
-        break;
-
-    case LLCP_SAP_EVT_CONNECT_RESP:
-        nfa_cho_sm_execute (NFA_CHO_LLCP_CONNECT_RESP_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
-        break;
-
-    case LLCP_SAP_EVT_DISCONNECT_IND:
-        nfa_cho_sm_execute (NFA_CHO_LLCP_DISCONNECT_IND_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
-        break;
-
-    case LLCP_SAP_EVT_DISCONNECT_RESP:
-        nfa_cho_sm_execute (NFA_CHO_LLCP_DISCONNECT_RESP_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
-        break;
-
-    case LLCP_SAP_EVT_CONGEST:
-        nfa_cho_sm_execute (NFA_CHO_LLCP_CONGEST_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
-        break;
-
-    case LLCP_SAP_EVT_LINK_STATUS:
-        nfa_cho_sm_execute (NFA_CHO_LLCP_LINK_STATUS_EVT, (tNFA_CHO_INT_EVENT_DATA *) p_data);
-        break;
-
-    default:
-        CHO_TRACE_ERROR1 ("Unknown event:0x%02X", p_data->hdr.event);
-        return;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_sm_disabled
-**
-** Description      Process event in disabled state
-**
-** Returns          None
-**
-*******************************************************************************/
-static void nfa_cho_sm_disabled (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data)
-{
-    tNFA_CHO_EVT_DATA evt_data;
-    UINT16            remote_link_miu;
-
-    switch (event)
-    {
-    case NFA_CHO_API_REG_EVT:
-
-        evt_data.status = nfa_cho_proc_api_reg (p_data);
-
-        if (evt_data.status == NFA_STATUS_OK)
-        {
-            nfa_cho_cb.state = NFA_CHO_ST_IDLE;
-        }
-        p_data->api_reg.p_cback (NFA_CHO_REG_EVT, &evt_data);
-
-        if (evt_data.status == NFA_STATUS_OK)
-        {
-            /* check if LLCP is already activated */
-            LLCP_GetLinkMIU (&nfa_cho_cb.local_link_miu, &remote_link_miu);
-
-            if (nfa_cho_cb.local_link_miu > 0)
-            {
-                nfa_cho_cb.flags |= NFA_CHO_FLAGS_LLCP_ACTIVATED;
-
-                /* Notify application LLCP link activated */
-                evt_data.activated.is_initiator = FALSE;
-                nfa_cho_cb.p_cback (NFA_CHO_ACTIVATED_EVT, &evt_data);
-            }
-        }
-        break;
-
-    default:
-        CHO_TRACE_ERROR0 ("Unknown event");
-        break;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_sm_idle
-**
-** Description      Process event in idle state
-**
-** Returns          None
-**
-*******************************************************************************/
-static void nfa_cho_sm_idle (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data)
-{
-    UINT16                  remote_link_miu;
-    tNFA_CHO_EVT_DATA       evt_data;
-    tLLCP_CONNECTION_PARAMS params;
-
-    switch (event)
-    {
-    case NFA_CHO_API_REG_EVT:
-        evt_data.status = NFA_STATUS_FAILED;
-        p_data->api_reg.p_cback (NFA_CHO_REG_EVT, &evt_data);
-        break;
-
-    case NFA_CHO_API_DEREG_EVT:
-        nfa_cho_proc_api_dereg ();
-        nfa_cho_cb.state = NFA_CHO_ST_DISABLED;
-        break;
-
-    case NFA_CHO_API_CONNECT_EVT:
-        /* if LLCP activated then create data link connection */
-        if (nfa_cho_cb.flags & NFA_CHO_FLAGS_LLCP_ACTIVATED)
-        {
-            if (nfa_cho_create_connection () == NFA_STATUS_OK)
-            {
-                /* waiting for connection confirm */
-                nfa_cho_cb.state = NFA_CHO_ST_W4_CC;
-            }
-            else
-            {
-                evt_data.disconnected.reason = NFA_CHO_DISC_REASON_CONNECTION_FAIL;
-                nfa_cho_cb.p_cback (NFA_CHO_DISCONNECTED_EVT, &evt_data);
-            }
-        }
-        else
-        {
-            evt_data.disconnected.reason = NFA_CHO_DISC_REASON_LINK_DEACTIVATED;
-            nfa_cho_cb.p_cback (NFA_CHO_DISCONNECTED_EVT, &evt_data);
-        }
-        break;
-
-    case NFA_CHO_API_DISCONNECT_EVT:
-        /* Nothing to disconnect */
-        nfa_cho_process_disconnection (NFA_CHO_DISC_REASON_API_REQUEST);
-        break;
-
-    case NFA_CHO_LLCP_CONNECT_IND_EVT:
-
-        /* accept connection request */
-        params.miu = (UINT16) (nfa_cho_cb.local_link_miu >= NFA_CHO_MIU ? NFA_CHO_MIU : nfa_cho_cb.local_link_miu);
-        params.rw  = NFA_CHO_RW;
-        params.sn[0] = 0;
-
-        LLCP_ConnectCfm (p_data->llcp_cback_data.connect_ind.local_sap,
-                         p_data->llcp_cback_data.connect_ind.remote_sap,
-                         &params);
-
-        nfa_cho_cb.remote_miu = p_data->llcp_cback_data.connect_ind.miu;
-        nfa_cho_cb.remote_sap = p_data->llcp_cback_data.connect_ind.remote_sap;
-        nfa_cho_cb.local_sap  = p_data->llcp_cback_data.connect_ind.local_sap;
-
-        nfa_cho_cb.substate  = NFA_CHO_SUBSTATE_W4_REMOTE_HR;
-        nfa_cho_cb.state     = NFA_CHO_ST_CONNECTED;
-        nfa_cho_cb.congested = FALSE;
-
-        evt_data.connected.initial_role = NFA_CHO_ROLE_SELECTOR;
-        nfa_cho_cb.p_cback (NFA_CHO_CONNECTED_EVT, &evt_data);
-        break;
-
-    case NFA_CHO_LLCP_LINK_STATUS_EVT:
-        /*
-        **  LLCP sends NFA_CHO_LLCP_DISCONNECT_IND_EVT for all data link connection
-        **  before sending NFA_CHO_LLCP_LINK_STATUS_EVT for deactivation.
-        **  This event can be received only in this state.
-        */
-
-        if (p_data->llcp_cback_data.link_status.is_activated == TRUE)
-        {
-            nfa_cho_cb.flags |= NFA_CHO_FLAGS_LLCP_ACTIVATED;
-
-            /* store local link MIU to decide MIU of data link connection later */
-            LLCP_GetLinkMIU (&nfa_cho_cb.local_link_miu, &remote_link_miu);
-
-            /* Notify application LLCP link activated */
-            evt_data.activated.is_initiator = p_data->llcp_cback_data.link_status.is_initiator;
-            nfa_cho_cb.p_cback (NFA_CHO_ACTIVATED_EVT, &evt_data);
-        }
-        else
-        {
-            /* the other flags had been cleared by NFA_CHO_LLCP_DISCONNECT_IND_EVT */
-            nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_LLCP_ACTIVATED;
-
-            /* Notify application LLCP link deactivated */
-            evt_data.status = NFA_STATUS_OK;
-            nfa_cho_cb.p_cback (NFA_CHO_DEACTIVATED_EVT, &evt_data);
-        }
-        break;
-
-    case NFA_CHO_API_SEND_HR_EVT:
-        GKI_freebuf (p_data->api_send_hr.p_ndef);
-        break;
-
-    case NFA_CHO_API_SEND_HS_EVT:
-        GKI_freebuf (p_data->api_send_hs.p_ndef);
-        break;
-
-    case NFA_CHO_NDEF_TYPE_HANDLER_EVT:
-        nfa_cho_proc_ndef_type_handler_evt (p_data);
-        break;
-
-    default:
-        CHO_TRACE_ERROR0 ("Unknown event");
-        break;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_sm_w4_cc
-**
-** Description      Process event in waiting for connection confirm state
-**
-** Returns          None
-**
-*******************************************************************************/
-static void nfa_cho_sm_w4_cc (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data)
-{
-    tNFA_CHO_EVT_DATA       evt_data;
-    tLLCP_CONNECTION_PARAMS params;
-
-    switch (event)
-    {
-    case NFA_CHO_API_REG_EVT:
-        evt_data.status = NFA_STATUS_FAILED;
-        p_data->api_reg.p_cback (NFA_CHO_REG_EVT, &evt_data);
-        break;
-
-    case NFA_CHO_API_DEREG_EVT:
-        nfa_cho_proc_api_dereg ();
-        nfa_cho_cb.state = NFA_CHO_ST_DISABLED;
-        break;
-
-    case NFA_CHO_API_CONNECT_EVT:
-        evt_data.disconnected.reason = NFA_CHO_DISC_REASON_ALEADY_CONNECTED;
-        nfa_cho_cb.p_cback (NFA_CHO_DISCONNECTED_EVT, &evt_data);
-        break;
-
-    case NFA_CHO_API_DISCONNECT_EVT:
-        /* disconnect collision connection accepted by local device */
-        if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
-        {
-            LLCP_DisconnectReq (nfa_cho_cb.collision_local_sap,
-                                nfa_cho_cb.collision_remote_sap,
-                                FALSE);
-
-            /* clear collision flag */
-            nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
-        }
-
-        nfa_cho_cb.state = NFA_CHO_ST_IDLE;
-
-        /* we cannot send DISC because we don't know remote SAP */
-        nfa_cho_process_disconnection (NFA_CHO_DISC_REASON_API_REQUEST);
-        break;
-
-    case NFA_CHO_LLCP_CONNECT_RESP_EVT:
-        /* peer accepted connection request */
-        nfa_cho_cb.state     = NFA_CHO_ST_CONNECTED;
-        nfa_cho_cb.substate  = NFA_CHO_SUBSTATE_W4_LOCAL_HR;
-        nfa_cho_cb.congested = FALSE;
-
-        /* store data link connection parameters */
-        nfa_cho_cb.remote_miu = p_data->llcp_cback_data.connect_resp.miu;
-        nfa_cho_cb.remote_sap = p_data->llcp_cback_data.connect_resp.remote_sap;
-        nfa_cho_cb.local_sap  = nfa_cho_cb.client_sap;
-
-        evt_data.connected.initial_role = NFA_CHO_ROLE_REQUESTER;
-        nfa_cho_cb.p_cback (NFA_CHO_CONNECTED_EVT, &evt_data);
-        break;
-
-    case NFA_CHO_LLCP_CONNECT_IND_EVT:
-        /* if already collision of connection */
-        if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
-        {
-            LLCP_ConnectReject (p_data->llcp_cback_data.connect_ind.local_sap,
-                                p_data->llcp_cback_data.connect_ind.remote_sap,
-                                LLCP_SAP_DM_REASON_TEMP_REJECT_THIS);
-        }
-        else
-        {
-            /*
-            ** accept connection request and set collision flag
-            ** wait for accepting connection request from peer or Hr message
-            */
-            params.miu = (UINT16) (nfa_cho_cb.local_link_miu >= NFA_CHO_MIU ? NFA_CHO_MIU : nfa_cho_cb.local_link_miu);
-            params.rw  = NFA_CHO_RW;
-            params.sn[0] = 0;
-
-            LLCP_ConnectCfm (p_data->llcp_cback_data.connect_ind.local_sap,
-                             p_data->llcp_cback_data.connect_ind.remote_sap,
-                             &params);
-
-            nfa_cho_cb.flags |= NFA_CHO_FLAGS_CONN_COLLISION;
-
-            nfa_cho_cb.collision_remote_miu = p_data->llcp_cback_data.connect_ind.miu;
-            nfa_cho_cb.collision_remote_sap = p_data->llcp_cback_data.connect_ind.remote_sap;
-            nfa_cho_cb.collision_local_sap  = p_data->llcp_cback_data.connect_ind.local_sap;
-            nfa_cho_cb.collision_congested  = FALSE;
-        }
-        break;
-
-    case NFA_CHO_RX_HANDOVER_MSG_EVT:
-        /* peer device sent handover message before accepting connection */
-        /* clear collision flag */
-        nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
-
-        nfa_cho_cb.remote_miu = nfa_cho_cb.collision_remote_miu;
-        nfa_cho_cb.remote_sap = nfa_cho_cb.collision_remote_sap;
-        nfa_cho_cb.local_sap  = nfa_cho_cb.collision_local_sap;
-        nfa_cho_cb.congested  = nfa_cho_cb.collision_congested;
-
-        nfa_cho_cb.substate  = NFA_CHO_SUBSTATE_W4_REMOTE_HR;
-        nfa_cho_cb.state     = NFA_CHO_ST_CONNECTED;
-
-        evt_data.connected.initial_role = NFA_CHO_ROLE_SELECTOR;
-        nfa_cho_cb.p_cback (NFA_CHO_CONNECTED_EVT, &evt_data);
-
-        /* process handover message in nfa_cho_cb.p_rx_ndef_msg */
-        nfa_cho_proc_rx_handover_msg ();
-        break;
-
-    case NFA_CHO_LLCP_DISCONNECT_RESP_EVT:
-        /*
-        ** if peer rejected our connection request or there is no handover service in peer
-        ** but we already accepted connection from peer
-        */
-        if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
-        {
-            /* clear collision flag */
-            nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
-
-            nfa_cho_cb.remote_miu = nfa_cho_cb.collision_remote_miu;
-            nfa_cho_cb.remote_sap = nfa_cho_cb.collision_remote_sap;
-            nfa_cho_cb.local_sap  = nfa_cho_cb.collision_local_sap;
-            nfa_cho_cb.congested  = nfa_cho_cb.collision_congested;
-
-            nfa_cho_cb.substate  = NFA_CHO_SUBSTATE_W4_REMOTE_HR;
-            nfa_cho_cb.state     = NFA_CHO_ST_CONNECTED;
-
-            evt_data.connected.initial_role = NFA_CHO_ROLE_SELECTOR;
-            nfa_cho_cb.p_cback (NFA_CHO_CONNECTED_EVT, &evt_data);
-        }
-        else
-        {
-            nfa_cho_cb.state = NFA_CHO_ST_IDLE;
-            nfa_cho_process_disconnection (NFA_CHO_DISC_REASON_CONNECTION_FAIL);
-        }
-        break;
-
-    case NFA_CHO_LLCP_DISCONNECT_IND_EVT:
-        /* if peer disconnects collision connection */
-        if (  (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
-            &&(p_data->llcp_cback_data.disconnect_ind.local_sap == nfa_cho_cb.collision_local_sap)
-            &&(p_data->llcp_cback_data.disconnect_ind.remote_sap == nfa_cho_cb.collision_remote_sap)  )
-        {
-            /* clear collision flag */
-            nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
-        }
-        else    /* Link failure before peer accepts or rejects connection request */
-        {
-            nfa_cho_cb.state = NFA_CHO_ST_IDLE;
-            nfa_cho_process_disconnection (NFA_CHO_DISC_REASON_CONNECTION_FAIL);
-        }
-        break;
-
-    case NFA_CHO_LLCP_CONGEST_EVT:
-        /* if collision connection is congested */
-        if (  (p_data->llcp_cback_data.congest.link_type == LLCP_LINK_TYPE_DATA_LINK_CONNECTION)
-            &&(nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION))
-        {
-            nfa_cho_cb.collision_congested = p_data->llcp_cback_data.congest.is_congested;
-        }
-        break;
-
-    case NFA_CHO_API_SEND_HR_EVT:
-        GKI_freebuf (p_data->api_send_hr.p_ndef);
-        break;
-
-    case NFA_CHO_API_SEND_HS_EVT:
-        GKI_freebuf (p_data->api_send_hs.p_ndef);
-        break;
-
-    case NFA_CHO_NDEF_TYPE_HANDLER_EVT:
-        nfa_cho_proc_ndef_type_handler_evt (p_data);
-        break;
-
-    default:
-        CHO_TRACE_ERROR0 ("Unknown event");
-        break;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_sm_connected
-**
-** Description      Process event in connected state
-**
-** Returns          None
-**
-*******************************************************************************/
-static void nfa_cho_sm_connected (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data)
-{
-    tNFA_CHO_EVT_DATA evt_data;
-    tNFA_STATUS       status;
-
-    switch (event)
-    {
-    case NFA_CHO_API_REG_EVT:
-        evt_data.status = NFA_STATUS_FAILED;
-        p_data->api_reg.p_cback (NFA_CHO_REG_EVT, &evt_data);
-        break;
-
-    case NFA_CHO_API_DEREG_EVT:
-        nfa_cho_proc_api_dereg ();
-        nfa_cho_cb.state = NFA_CHO_ST_DISABLED;
-        break;
-
-    case NFA_CHO_API_CONNECT_EVT:
-        /* it could be race condition, let app know outgoing connection failed */
-        evt_data.disconnected.reason = NFA_CHO_DISC_REASON_ALEADY_CONNECTED;
-        nfa_cho_cb.p_cback (NFA_CHO_DISCONNECTED_EVT, &evt_data);
-        break;
-
-    case NFA_CHO_API_DISCONNECT_EVT:
-        /* disconnect collision connection accepted by local device */
-        if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
-        {
-            LLCP_DisconnectReq (nfa_cho_cb.collision_local_sap,
-                                nfa_cho_cb.collision_remote_sap,
-                                FALSE);
-
-            /* clear collision flag */
-            nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
-        }
-
-        LLCP_DisconnectReq (nfa_cho_cb.local_sap,
-                            nfa_cho_cb.remote_sap,
-                            FALSE);
-
-        /* store disconnect reason */
-        nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_API_REQUEST;
-        break;
-
-    case NFA_CHO_API_SEND_HR_EVT:
-        if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_LOCAL_HR)
-        {
-            /* Send Handover Request Message */
-            status = nfa_cho_send_hr (&p_data->api_send_hr);
-
-            if (status == NFA_STATUS_OK)
-            {
-                nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_REMOTE_HS;
-                /* start timer for Handover Select Message */
-                nfa_sys_start_timer (&nfa_cho_cb.timer, 0, NFA_CHO_TIMEOUT_FOR_HS);
-            }
-            else
-            {
-                CHO_TRACE_ERROR0 ("NFA CHO failed to send Hr");
-                nfa_cho_notify_tx_fail_evt (status);
-            }
-        }
-        else
-        {
-            CHO_TRACE_ERROR0 ("NFA CHO got unexpected NFA_CHO_API_SEND_HR_EVT");
-            nfa_cho_notify_tx_fail_evt (NFA_STATUS_SEMANTIC_ERROR);
-        }
-        GKI_freebuf (p_data->api_send_hr.p_ndef);
-        break;
-
-    case NFA_CHO_API_SEND_HS_EVT:
-        if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_LOCAL_HS)
-        {
-            /* send Handover Select Message */
-            status = nfa_cho_send_hs (&p_data->api_send_hs);
-            if (status == NFA_STATUS_OK)
-            {
-                nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_REMOTE_HR;
-            }
-            else
-            {
-                CHO_TRACE_ERROR0 ("NFA CHO failed to send Hs");
-                nfa_cho_notify_tx_fail_evt (status);
-            }
-        }
-        else
-        {
-            CHO_TRACE_ERROR0 ("NFA CHO got unexpected NFA_CHO_API_SEND_HS_EVT");
-            nfa_cho_notify_tx_fail_evt (NFA_STATUS_SEMANTIC_ERROR);
-        }
-        GKI_freebuf (p_data->api_send_hs.p_ndef);
-        break;
-
-    case NFA_CHO_API_SEL_ERR_EVT:
-        /* application detected error */
-        if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_LOCAL_HS)
-        {
-            /* Send Handover Select Error record */
-            status = nfa_cho_send_hs_error (p_data->api_sel_err.error_reason,
-                                            p_data->api_sel_err.error_data);
-            if (status == NFA_STATUS_OK)
-            {
-                nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_REMOTE_HR;
-            }
-            else
-            {
-                CHO_TRACE_ERROR0 ("Failed to send Hs Error record");
-                nfa_cho_notify_tx_fail_evt (status);
-            }
-        }
-        else
-        {
-            CHO_TRACE_ERROR0 ("NFA CHO got unexpected NFA_CHO_API_SEL_ERR_EVT");
-            nfa_cho_notify_tx_fail_evt (NFA_STATUS_SEMANTIC_ERROR);
-        }
-        break;
-
-    case NFA_CHO_LLCP_CONNECT_RESP_EVT:
-        /* peer accepted connection after we accepted and received Hr */
-        /* disconnect data link connection created by local device    */
-        LLCP_DisconnectReq (p_data->llcp_cback_data.connect_resp.local_sap,
-                            p_data->llcp_cback_data.connect_resp.remote_sap,
-                            FALSE);
-        break;
-
-    case NFA_CHO_LLCP_CONNECT_IND_EVT:
-        LLCP_ConnectReject (p_data->llcp_cback_data.connect_ind.local_sap,
-                            p_data->llcp_cback_data.connect_ind.remote_sap,
-                            LLCP_SAP_DM_REASON_TEMP_REJECT_THIS);
-        break;
-
-    case NFA_CHO_RX_HANDOVER_MSG_EVT:
-        /* process handover message in nfa_cho_cb.p_rx_ndef_msg */
-        nfa_cho_proc_rx_handover_msg ();
-        break;
-
-    case NFA_CHO_LLCP_DISCONNECT_IND_EVT:
-        if (  (p_data->llcp_cback_data.disconnect_ind.local_sap  == nfa_cho_cb.local_sap)
-            &&(p_data->llcp_cback_data.disconnect_ind.remote_sap == nfa_cho_cb.remote_sap)  )
-        {
-            nfa_cho_cb.state = NFA_CHO_ST_IDLE;
-            nfa_cho_process_disconnection (NFA_CHO_DISC_REASON_PEER_REQUEST);
-        }
-        else  /* if disconnection of collision conneciton */
-        {
-            nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
-        }
-        break;
-
-    case NFA_CHO_LLCP_DISCONNECT_RESP_EVT:
-        if (  (p_data->llcp_cback_data.disconnect_ind.local_sap  == nfa_cho_cb.local_sap)
-            &&(p_data->llcp_cback_data.disconnect_ind.remote_sap == nfa_cho_cb.remote_sap)  )
-        {
-            nfa_cho_cb.state = NFA_CHO_ST_IDLE;
-            nfa_cho_process_disconnection (nfa_cho_cb.disc_reason);
-        }
-        else  /* if disconnection of collision conneciton */
-        {
-            nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
-        }
-        break;
-
-    case NFA_CHO_LLCP_CONGEST_EVT:
-        /* if data link connection is congested */
-        if ( (p_data->llcp_cback_data.congest.link_type  == LLCP_LINK_TYPE_DATA_LINK_CONNECTION)
-           &&(p_data->llcp_cback_data.congest.local_sap  == nfa_cho_cb.local_sap)
-           &&(p_data->llcp_cback_data.congest.remote_sap == nfa_cho_cb.remote_sap)  )
-        {
-            nfa_cho_cb.congested = p_data->llcp_cback_data.congest.is_congested;
-
-            if (!nfa_cho_cb.congested)
-            {
-                /* send remaining message if any */
-                if (  (nfa_cho_cb.p_tx_ndef_msg)
-                    &&(nfa_cho_cb.tx_ndef_sent_size < nfa_cho_cb.tx_ndef_cur_size)  )
-                {
-                    nfa_cho_send_handover_msg ();
-                }
-            }
-        }
-        break;
-
-    case NFA_CHO_TIMEOUT_EVT:
-        if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HS)
-        {
-            CHO_TRACE_ERROR0 ("Failed to receive Hs message");
-        }
-        else if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
-        {
-            /* we didn't get complete Hr, don't need to notify application */
-            CHO_TRACE_ERROR0 ("Failed to receive Hr message");
-        }
-
-        /* store disconnect reason and disconnect */
-        nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_TIMEOUT;
-        LLCP_DisconnectReq (nfa_cho_cb.local_sap,
-                            nfa_cho_cb.remote_sap,
-                            FALSE);
-        break;
-
-    case NFA_CHO_NDEF_TYPE_HANDLER_EVT:
-        nfa_cho_proc_ndef_type_handler_evt (p_data);
-        break;
-
-    default:
-        CHO_TRACE_ERROR0 ("Unknown event");
-        break;
-    }
-}
-/*******************************************************************************
-**
-** Function         nfa_cho_sm_execute
-**
-** Description      Process event in state machine
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_cho_sm_execute (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_data)
-{
-#if (BT_TRACE_VERBOSE == TRUE)
-    CHO_TRACE_DEBUG2 ("nfa_cho_sm_execute (): State[%s], Event[%s]",
-                       nfa_cho_state_code (nfa_cho_cb.state),
-                       nfa_cho_evt_code (event));
-#else
-    CHO_TRACE_DEBUG2 ("nfa_cho_sm_execute (): State[%d], Event[%d]",
-                       nfa_cho_cb.state, event);
-#endif
-
-
-    switch (nfa_cho_cb.state)
-    {
-    case NFA_CHO_ST_DISABLED:
-        nfa_cho_sm_disabled (event, p_data);
-        break;
-
-    case NFA_CHO_ST_IDLE:
-        nfa_cho_sm_idle (event, p_data);
-        break;
-
-    case NFA_CHO_ST_W4_CC:
-        nfa_cho_sm_w4_cc (event, p_data);
-        break;
-
-    case NFA_CHO_ST_CONNECTED:
-        nfa_cho_sm_connected (event, p_data);
-        break;
-
-    default:
-        CHO_TRACE_ERROR0 ("Unknown state");
-        break;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_resolve_collision
-**
-** Description      Resolve collision by random number in Hr
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_cho_resolve_collision (BOOLEAN *p_free_hr)
-{
-    tNFA_CHO_ROLE_TYPE role;
-    tNFA_STATUS        status;
-
-    /* resolve collistion by random number */
-    role = nfa_cho_get_local_device_role (nfa_cho_cb.rx_ndef_cur_size,
-                                          nfa_cho_cb.p_rx_ndef_msg);
-
-    /* if local device becomes selector */
-    if (role == NFA_CHO_ROLE_SELECTOR)
-    {
-        /* peer device is winner so clean up any collision */
-        if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
-        {
-            /* disconnect data link connection created by local device */
-            LLCP_DisconnectReq (nfa_cho_cb.local_sap,
-                                nfa_cho_cb.remote_sap,
-                                FALSE);
-
-            nfa_cho_cb.remote_miu = nfa_cho_cb.collision_remote_miu;
-            nfa_cho_cb.remote_sap = nfa_cho_cb.collision_remote_sap;
-            nfa_cho_cb.local_sap  = nfa_cho_cb.collision_local_sap;
-            nfa_cho_cb.congested  = nfa_cho_cb.collision_congested;
-        }
-
-        nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_LOCAL_HS;
-
-        nfa_cho_proc_hr (nfa_cho_cb.rx_ndef_cur_size,
-                         nfa_cho_cb.p_rx_ndef_msg);
-
-        *p_free_hr = TRUE;
-    }
-    /* if both random numbers are equal */
-    else if (role == NFA_CHO_ROLE_UNDECIDED)
-    {
-        /* send Hr with new random number */
-        if (nfa_cho_cb.p_tx_ndef_msg)
-        {
-            status = nfa_cho_update_random_number (nfa_cho_cb.p_tx_ndef_msg);
-
-            if (status == NFA_STATUS_OK)
-            {
-                nfa_cho_cb.tx_ndef_sent_size = 0;
-                status = nfa_cho_send_handover_msg ();
-            }
-        }
-        else
-        {
-            status = NFA_STATUS_FAILED;
-        }
-
-        if (status == NFA_STATUS_FAILED)
-        {
-            CHO_TRACE_ERROR0 ("Failed to send Hr record with new random number");
-
-            nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_INTERNAL_ERROR;
-
-            /* disconnect and notify application */
-            LLCP_DisconnectReq (nfa_cho_cb.local_sap,
-                                nfa_cho_cb.remote_sap,
-                                FALSE);
-        }
-        else
-        {
-            /* restart timer */
-            nfa_sys_start_timer (&nfa_cho_cb.timer, 0, NFA_CHO_TIMEOUT_FOR_HS);
-
-            /* Don't free previous tx NDEF message because we are reusing it */
-            *p_free_hr = FALSE;
-        }
-    }
-    else /* if (role == NFA_CHO_ROLE_REQUESTER) */
-    {
-        /* wait for "Hs" record */
-        *p_free_hr = TRUE;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_check_disconnect_collision
-**
-** Description      Disconnect any collision connection
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_cho_check_disconnect_collision (void)
-{
-    if (nfa_cho_cb.flags & NFA_CHO_FLAGS_CONN_COLLISION)
-    {
-        /* disconnect collision connection */
-        LLCP_DisconnectReq (nfa_cho_cb.collision_local_sap,
-                            nfa_cho_cb.collision_remote_sap,
-                            FALSE);
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_proc_rx_handover_msg
-**
-** Description      Process received Handover Message
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_cho_proc_rx_handover_msg (void)
-{
-    tNFA_CHO_MSG_TYPE msg_type;
-    BOOLEAN           free_tx_ndef_msg = TRUE;
-
-    /* get message type before processing to check collision */
-    msg_type = nfa_cho_get_msg_type (nfa_cho_cb.rx_ndef_cur_size,
-                                     nfa_cho_cb.p_rx_ndef_msg);
-
-    if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HS)
-    {
-        /* if we sent "Hr" but received "Hr", collision */
-        if (msg_type == NFA_CHO_MSG_HR)
-        {
-            nfa_cho_resolve_collision (&free_tx_ndef_msg);
-        }
-        else if (msg_type == NFA_CHO_MSG_HS)
-        {
-            /* parse and report application */
-            nfa_cho_proc_hs (nfa_cho_cb.rx_ndef_cur_size,
-                             nfa_cho_cb.p_rx_ndef_msg);
-
-            nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_LOCAL_HR;
-        }
-        else
-        {
-            CHO_TRACE_ERROR0 ("nfa_cho_proc_rx_handover_msg (): Unknown Message Type");
-
-            nfa_cho_check_disconnect_collision ();
-
-            nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_UNKNOWN_MSG;
-
-            LLCP_DisconnectReq (nfa_cho_cb.local_sap,
-                                nfa_cho_cb.remote_sap,
-                                FALSE);
-        }
-    }
-    else if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
-    {
-        if (msg_type == NFA_CHO_MSG_HR)
-        {
-            /* parse and notify NFA_CHO_REQ_EVT to application */
-            nfa_cho_proc_hr (nfa_cho_cb.rx_ndef_cur_size,
-                             nfa_cho_cb.p_rx_ndef_msg);
-
-            /* In case of parsing error, let peer got timeout (1 sec) */
-
-            /* wait for application selection */
-            nfa_cho_cb.substate = NFA_CHO_SUBSTATE_W4_LOCAL_HS;
-        }
-        else
-        {
-            CHO_TRACE_ERROR0 ("nfa_cho_proc_rx_handover_msg (): Expecting Handover Request");
-
-            nfa_cho_check_disconnect_collision ();
-
-            nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_SEMANTIC_ERROR;
-
-            LLCP_DisconnectReq (nfa_cho_cb.local_sap,
-                                nfa_cho_cb.remote_sap,
-                                FALSE);
-        }
-    }
-    else
-    {
-        CHO_TRACE_ERROR1 ("nfa_cho_proc_rx_handover_msg (): Unexpected data in substate (0x%x)", nfa_cho_cb.substate);
-
-        nfa_cho_check_disconnect_collision ();
-
-        nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_SEMANTIC_ERROR;
-
-        LLCP_DisconnectReq (nfa_cho_cb.local_sap,
-                            nfa_cho_cb.remote_sap,
-                            FALSE);
-    }
-
-    if ((free_tx_ndef_msg) && (nfa_cho_cb.p_tx_ndef_msg))
-    {
-        GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
-        nfa_cho_cb.p_tx_ndef_msg = NULL;
-    }
-
-    /* processing rx message is done, free buffer for rx handover message */
-    if (nfa_cho_cb.p_rx_ndef_msg)
-    {
-        GKI_freebuf (nfa_cho_cb.p_rx_ndef_msg);
-        nfa_cho_cb.p_rx_ndef_msg = NULL;
-    }
-}
-
-#if (BT_TRACE_VERBOSE == TRUE)
-/*******************************************************************************
-**
-** Function         nfa_cho_state_code
-**
-** Description
-**
-** Returns          string of state
-**
-*******************************************************************************/
-static char *nfa_cho_state_code (tNFA_CHO_STATE state_code)
-{
-    switch (state_code)
-    {
-    case NFA_CHO_ST_DISABLED:
-        return "DISABLED";
-    case NFA_CHO_ST_IDLE:
-        return "IDLE";
-    case NFA_CHO_ST_CONNECTED:
-        return "CONNECTED";
-    default:
-        return "unknown state";
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_evt_code
-**
-** Description
-**
-** Returns          string of event
-**
-*******************************************************************************/
-char *nfa_cho_evt_code (tNFA_CHO_INT_EVT evt_code)
-{
-    switch (evt_code)
-    {
-    case NFA_CHO_API_REG_EVT:
-        return "API_REG";
-    case NFA_CHO_API_DEREG_EVT:
-        return "API_DEREG";
-    case NFA_CHO_API_CONNECT_EVT:
-        return "API_CONNECT";
-    case NFA_CHO_API_DISCONNECT_EVT:
-        return "API_DISCONNECT";
-    case NFA_CHO_API_SEND_HR_EVT:
-        return "API_SEND_HR";
-    case NFA_CHO_API_SEND_HS_EVT:
-        return "API_SEND_HS";
-    case NFA_CHO_API_SEL_ERR_EVT:
-        return "API_SEL_ERR";
-
-    case NFA_CHO_RX_HANDOVER_MSG_EVT:
-        return "RX_HANDOVER_MSG";
-
-    case NFA_CHO_LLCP_CONNECT_IND_EVT:
-        return "LLCP_CONNECT_IND";
-    case NFA_CHO_LLCP_CONNECT_RESP_EVT:
-        return "LLCP_CONNECT_RESP";
-    case NFA_CHO_LLCP_DISCONNECT_IND_EVT:
-        return "LLCP_DISCONNECT_IND";
-    case NFA_CHO_LLCP_DISCONNECT_RESP_EVT:
-        return "LLCP_DISCONNECT_RESP";
-    case NFA_CHO_LLCP_CONGEST_EVT:
-        return "LLCP_CONGEST";
-    case NFA_CHO_LLCP_LINK_STATUS_EVT:
-        return "LLCP_LINK_STATUS";
-
-    case NFA_CHO_NDEF_TYPE_HANDLER_EVT:
-        return "NDEF_TYPE_HANDLER";
-    case NFA_CHO_TIMEOUT_EVT:
-        return "TIMEOUT";
-
-    default:
-        return "unknown event";
-    }
-}
-#endif  /* Debug Functions */
diff --git a/src/nfa/cho/nfa_cho_util.c b/src/nfa/cho/nfa_cho_util.c
deleted file mode 100644
index 90eb947..0000000
--- a/src/nfa/cho/nfa_cho_util.c
+++ /dev/null
@@ -1,2005 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This is the utilities implementation file for the NFA Connection
- *  Handover.
- *
- ******************************************************************************/
-
-#include "string.h"
-#include "nfa_sys.h"
-#include "llcp_api.h"
-#include "llcp_defs.h"
-#include "nfa_p2p_int.h"
-#include "nfa_cho_api.h"
-#include "nfa_cho_int.h"
-#include "trace_api.h"
-#include "nfa_mem_co.h"
-
-/*****************************************************************************
-**  Constants
-*****************************************************************************/
-/* Handover server name on LLCP */
-static char *p_cho_service_name = "urn:nfc:sn:handover";
-
-/* Handover Request Record Type */
-static UINT8 hr_rec_type[HR_REC_TYPE_LEN] = { 0x48, 0x72 }; /* "Hr" */
-
-/* Handover Select Record Type */
-static UINT8 hs_rec_type[HS_REC_TYPE_LEN] = { 0x48, 0x73 }; /* "Hs" */
-
-/* Handover Carrier recrod Type */
-/* static UINT8 hc_rec_type[HC_REC_TYPE_LEN] = { 0x48, 0x63 }; "Hc" */
-
-/* Collision Resolution Record Type */
-static UINT8 cr_rec_type[CR_REC_TYPE_LEN] = { 0x63, 0x72 }; /* "cr" */
-
-/* Alternative Carrier Record Type */
-static UINT8 ac_rec_type[AC_REC_TYPE_LEN] = { 0x61, 0x63 }; /* "ac" */
-
-/* Error Record Type */
-static UINT8 err_rec_type[ERR_REC_TYPE_LEN] = { 0x65, 0x72, 0x72 }; /* "err" */
-
-/* Bluetooth OOB Data Type */
-static UINT8 *p_bt_oob_rec_type = (UINT8 *) "application/vnd.bluetooth.ep.oob";
-
-/* WiFi Data Type */
-static UINT8 *p_wifi_rec_type = (UINT8 *) "application/vnd.wfa.wsc";
-
-/*****************************************************************************
-**  Global Variables
-*****************************************************************************/
-
-/*****************************************************************************
-**  Static Functions
-*****************************************************************************/
-static void nfa_cho_ndef_cback (tNFA_NDEF_EVT event, tNFA_NDEF_EVT_DATA *p_data);
-
-/*******************************************************************************
-**
-** Function         nfa_cho_ndef_cback
-**
-** Description      callback function from NDEF handler
-**                  Post NDEF handler callback event to NFA Connection Handover module
-**
-** Returns          None
-**
-*******************************************************************************/
-static void nfa_cho_ndef_cback (tNFA_NDEF_EVT event, tNFA_NDEF_EVT_DATA *p_data)
-{
-    tNFA_CHO_NDEF_TYPE_HDLR_EVT *p_msg;
-    tNFA_CHO_MSG_TYPE           msg_type;
-
-    CHO_TRACE_DEBUG1 ("nfa_cho_ndef_cback () event=%d", event);
-
-    if ((p_msg = (tNFA_CHO_NDEF_TYPE_HDLR_EVT *) GKI_getbuf (sizeof (tNFA_CHO_NDEF_TYPE_HDLR_EVT))) != NULL)
-    {
-        p_msg->hdr.event = NFA_CHO_NDEF_TYPE_HANDLER_EVT;
-
-        /* copy NDEF handler callback event and data */
-        p_msg->event = event;
-        memcpy (&(p_msg->data), p_data, sizeof (tNFA_NDEF_EVT_DATA));
-
-        /* if it has NDEF message */
-        if (event == NFA_NDEF_DATA_EVT)
-        {
-            if (p_data->ndef_data.ndef_type_handle == nfa_cho_cb.bt_ndef_type_handle )
-            {
-                msg_type = nfa_cho_get_msg_type (p_data->ndef_data.len,
-                                                 p_data->ndef_data.p_data);
-                if (msg_type != NFA_CHO_MSG_BT_OOB)
-                {
-                    /* This is not simplified BT OOB Message. It contains BT OOB Message. */
-                    GKI_freebuf (p_msg);
-                    return;
-                }
-            }
-            else if (p_data->ndef_data.ndef_type_handle == nfa_cho_cb.wifi_ndef_type_handle )
-            {
-                msg_type = nfa_cho_get_msg_type (p_data->ndef_data.len,
-                                                 p_data->ndef_data.p_data);
-                if (msg_type != NFA_CHO_MSG_WIFI)
-                {
-                    /* This is not simplified WiFi Message. It contains WiFi Message. */
-                    GKI_freebuf (p_msg);
-                    return;
-                }
-            }
-
-            /*
-            ** NDEF message could be bigger than max GKI buffer
-            ** so allocate memory from platform.
-            */
-            p_msg->data.ndef_data.p_data = (UINT8 *) nfa_mem_co_alloc (p_msg->data.ndef_data.len);
-
-            if (p_msg->data.ndef_data.p_data)
-            {
-                memcpy (p_msg->data.ndef_data.p_data,
-                        p_data->ndef_data.p_data,
-                        p_msg->data.ndef_data.len);
-            }
-            else
-            {
-                CHO_TRACE_ERROR1 ("Failed nfa_mem_co_alloc () for %d bytes", p_msg->data.ndef_data.len);
-                GKI_freebuf (p_msg);
-                return;
-            }
-        }
-
-        nfa_sys_sendmsg (p_msg);
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_proc_ndef_type_handler_evt
-**
-** Description      Process events (registration and NDEF data) from NFA NDEF
-**                  Type Handler
-**
-** Returns          tNFA_STATUS
-**
-*******************************************************************************/
-void nfa_cho_proc_ndef_type_handler_evt (tNFA_CHO_INT_EVENT_DATA *p_evt_data)
-{
-    tNFA_CHO_MSG_TYPE msg_type;
-
-    if (p_evt_data->ndef_type_hdlr.event == NFA_NDEF_REGISTER_EVT)
-    {
-        if (p_evt_data->ndef_type_hdlr.data.ndef_reg.status == NFA_STATUS_OK)
-        {
-            /* store handle for deregistration */
-            if (nfa_cho_cb.hs_ndef_type_handle == NFA_HANDLE_INVALID)
-            {
-                nfa_cho_cb.hs_ndef_type_handle = p_evt_data->ndef_type_hdlr.data.ndef_reg.ndef_type_handle;
-            }
-            else if (nfa_cho_cb.bt_ndef_type_handle == NFA_HANDLE_INVALID)
-            {
-                nfa_cho_cb.bt_ndef_type_handle = p_evt_data->ndef_type_hdlr.data.ndef_reg.ndef_type_handle;
-            }
-            else if (nfa_cho_cb.wifi_ndef_type_handle == NFA_HANDLE_INVALID)
-            {
-                nfa_cho_cb.wifi_ndef_type_handle = p_evt_data->ndef_type_hdlr.data.ndef_reg.ndef_type_handle;
-            }
-        }
-    }
-    else if (p_evt_data->ndef_type_hdlr.event == NFA_NDEF_DATA_EVT)
-    {
-        /* if negotiated handover is on going, then ignore static handover */
-        if (nfa_cho_cb.state != NFA_CHO_ST_CONNECTED)
-        {
-#if (BT_TRACE_PROTOCOL == TRUE)
-            DispNDEFMsg (p_evt_data->ndef_type_hdlr.data.ndef_data.p_data,
-                         p_evt_data->ndef_type_hdlr.data.ndef_data.len, TRUE);
-#endif
-            msg_type = nfa_cho_get_msg_type (p_evt_data->ndef_type_hdlr.data.ndef_data.len,
-                                             p_evt_data->ndef_type_hdlr.data.ndef_data.p_data);
-
-            if (msg_type == NFA_CHO_MSG_HS)
-            {
-                nfa_cho_proc_hs (p_evt_data->ndef_type_hdlr.data.ndef_data.len,
-                                 p_evt_data->ndef_type_hdlr.data.ndef_data.p_data);
-            }
-            else if (  (msg_type == NFA_CHO_MSG_BT_OOB)
-                     ||(msg_type == NFA_CHO_MSG_WIFI)  )
-            {
-                /* simplified BT OOB/Wifi Message */
-                nfa_cho_proc_simplified_format (p_evt_data->ndef_type_hdlr.data.ndef_data.len,
-                                                p_evt_data->ndef_type_hdlr.data.ndef_data.p_data);
-            }
-            else
-            {
-                CHO_TRACE_ERROR0 ("Unexpected CHO Message Type");
-            }
-        }
-
-        nfa_mem_co_free (p_evt_data->ndef_type_hdlr.data.ndef_data.p_data);
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_proc_api_reg
-**
-** Description      Process registeration request from application
-**                  Register Handover server on LLCP for negotiated handover
-**                  Register handover select records on NDEF handler for static handover
-**
-** Returns          tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_proc_api_reg (tNFA_CHO_INT_EVENT_DATA *p_evt_data)
-{
-    CHO_TRACE_DEBUG1 ("nfa_cho_proc_api_reg (): enable_server=%d",
-                      p_evt_data->api_reg.enable_server);
-
-    if (p_evt_data->api_reg.enable_server == TRUE)
-    {
-        /* Register Handover server on LLCP for negotiated handover */
-        nfa_cho_cb.server_sap = LLCP_RegisterServer (LLCP_INVALID_SAP,
-                                                     LLCP_LINK_TYPE_DATA_LINK_CONNECTION,
-                                                     p_cho_service_name,
-                                                     nfa_cho_sm_llcp_cback);
-        if (nfa_cho_cb.server_sap == LLCP_INVALID_SAP)
-        {
-            CHO_TRACE_ERROR0 ("Cannot register CHO server");
-            return NFA_STATUS_FAILED;
-        }
-        else
-        {
-            nfa_p2p_enable_listening (NFA_ID_CHO, FALSE);
-        }
-    }
-    else
-    {
-        /*
-        ** Register Handover client on LLCP for negotiated handover
-        ** LLCP will notify link status through callback
-        */
-        nfa_cho_cb.client_sap = LLCP_RegisterClient (LLCP_LINK_TYPE_DATA_LINK_CONNECTION,
-                                                     nfa_cho_sm_llcp_cback);
-
-        if (nfa_cho_cb.client_sap == LLCP_INVALID_SAP)
-        {
-            CHO_TRACE_ERROR0 ("Cannot register CHO client");
-            return NFA_STATUS_FAILED;
-        }
-
-        /* set flag not to deregister client when disconnected */
-        nfa_cho_cb.flags |= NFA_CHO_FLAGS_CLIENT_ONLY;
-    }
-
-    /* Register handover select record on NDEF handler for static handover */
-    if (nfa_cho_cb.hs_ndef_type_handle == NFA_HANDLE_INVALID)
-    {
-        NFA_RegisterNDefTypeHandler (TRUE, NFA_TNF_WKT, hs_rec_type, HS_REC_TYPE_LEN,
-                                     nfa_cho_ndef_cback);
-    }
-    if (nfa_cho_cb.bt_ndef_type_handle == NFA_HANDLE_INVALID)
-    {
-        NFA_RegisterNDefTypeHandler (TRUE, NFA_TNF_RFC2046_MEDIA,
-                                     p_bt_oob_rec_type, (UINT8) strlen ((char *) p_bt_oob_rec_type),
-                                     nfa_cho_ndef_cback);
-    }
-    if (nfa_cho_cb.wifi_ndef_type_handle == NFA_HANDLE_INVALID)
-    {
-        NFA_RegisterNDefTypeHandler (TRUE, NFA_TNF_RFC2046_MEDIA,
-                                     p_wifi_rec_type, (UINT8) strlen ((char *) p_wifi_rec_type),
-                                     nfa_cho_ndef_cback);
-    }
-
-    nfa_cho_cb.p_cback = p_evt_data->api_reg.p_cback;
-
-    return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_proc_api_dereg
-**
-** Description      Process deregisteration request from application
-**                  Disconnect LLCP connection if any
-**                  Deregister callback from NDEF handler and NFA P2P
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_cho_proc_api_dereg (void)
-{
-    CHO_TRACE_DEBUG0 ("nfa_cho_proc_api_dereg ()");
-
-    /* Deregister outgoing connection, data link will be disconnected if any */
-    if (nfa_cho_cb.client_sap != LLCP_INVALID_SAP)
-    {
-        LLCP_Deregister (nfa_cho_cb.client_sap);
-        nfa_cho_cb.client_sap = LLCP_INVALID_SAP;
-    }
-
-    /* Close Connection Handover server in LLCP, data link will be disconnected if any */
-    if (nfa_cho_cb.server_sap != LLCP_INVALID_SAP)
-    {
-        LLCP_Deregister (nfa_cho_cb.server_sap);
-        nfa_cho_cb.server_sap = LLCP_INVALID_SAP;
-    }
-
-    /* Deregister type handler if any */
-    if (nfa_cho_cb.hs_ndef_type_handle != NFA_HANDLE_INVALID)
-    {
-        NFA_DeregisterNDefTypeHandler (nfa_cho_cb.hs_ndef_type_handle);
-        nfa_cho_cb.hs_ndef_type_handle = NFA_HANDLE_INVALID;
-    }
-
-    if (nfa_cho_cb.bt_ndef_type_handle != NFA_HANDLE_INVALID)
-    {
-        NFA_DeregisterNDefTypeHandler (nfa_cho_cb.bt_ndef_type_handle);
-        nfa_cho_cb.bt_ndef_type_handle = NFA_HANDLE_INVALID;
-    }
-
-    if (nfa_cho_cb.wifi_ndef_type_handle != NFA_HANDLE_INVALID)
-    {
-        NFA_DeregisterNDefTypeHandler (nfa_cho_cb.wifi_ndef_type_handle);
-        nfa_cho_cb.wifi_ndef_type_handle = NFA_HANDLE_INVALID;
-    }
-
-    nfa_sys_stop_timer (&nfa_cho_cb.timer);
-    nfa_cho_cb.p_cback = NULL;
-    nfa_cho_cb.flags   = 0;
-
-    nfa_p2p_disable_listening (NFA_ID_CHO, FALSE);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_create_connection
-**
-** Description      Create data link connection with handover server in remote
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_create_connection (void)
-{
-    tLLCP_CONNECTION_PARAMS conn_params;
-    tNFA_STATUS             status = NFA_STATUS_FAILED;
-
-    CHO_TRACE_DEBUG0 ("nfa_cho_create_connection ()");
-
-    if (nfa_cho_cb.client_sap == LLCP_INVALID_SAP)
-    {
-        nfa_cho_cb.client_sap = LLCP_RegisterClient (LLCP_LINK_TYPE_DATA_LINK_CONNECTION,
-                                                     nfa_cho_sm_llcp_cback);
-    }
-
-    if (nfa_cho_cb.client_sap == LLCP_INVALID_SAP)
-    {
-        CHO_TRACE_ERROR0 ("Cannot register CHO client");
-    }
-    else
-    {
-        /* create data link connection with server name */
-        conn_params.miu = (UINT16) (nfa_cho_cb.local_link_miu >= NFA_CHO_MIU ? NFA_CHO_MIU : nfa_cho_cb.local_link_miu);
-        conn_params.rw  = NFA_CHO_RW;
-        BCM_STRNCPY_S (conn_params.sn, sizeof (conn_params.sn),
-                       p_cho_service_name, LLCP_MAX_SN_LEN);
-        conn_params.sn[LLCP_MAX_SN_LEN] = 0;
-
-        if (LLCP_ConnectReq (nfa_cho_cb.client_sap, LLCP_SAP_SDP, &conn_params) == LLCP_STATUS_SUCCESS)
-            status = NFA_STATUS_OK;
-    }
-
-    return status;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_process_disconnection
-**
-** Description      Clean up buffers and notify disconnection to application
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_cho_process_disconnection (tNFA_CHO_DISC_REASON disc_reason)
-{
-    tNFA_CHO_EVT_DATA evt_data;
-
-    nfa_sys_stop_timer (&nfa_cho_cb.timer);
-
-    /* free buffer for Tx/Rx NDEF message */
-    if (nfa_cho_cb.p_tx_ndef_msg)
-    {
-        GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
-        nfa_cho_cb.p_tx_ndef_msg = NULL;
-    }
-    if (nfa_cho_cb.p_rx_ndef_msg)
-    {
-        GKI_freebuf (nfa_cho_cb.p_rx_ndef_msg);
-        nfa_cho_cb.p_rx_ndef_msg = NULL;
-    }
-
-    /* if no server is registered on LLCP, do not deregister client to get link statue from LLCP */
-    if (!(nfa_cho_cb.flags & NFA_CHO_FLAGS_CLIENT_ONLY))
-    {
-        if (nfa_cho_cb.client_sap != LLCP_INVALID_SAP)
-        {
-            LLCP_Deregister (nfa_cho_cb.client_sap);
-            nfa_cho_cb.client_sap = LLCP_INVALID_SAP;
-        }
-    }
-
-    nfa_cho_cb.flags &= ~NFA_CHO_FLAGS_CONN_COLLISION;
-
-    evt_data.disconnected.reason = disc_reason;
-    nfa_cho_cb.p_cback (NFA_CHO_DISCONNECTED_EVT, &evt_data);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_notify_tx_fail_evt
-**
-** Description      Notify application of NFA_CHO_TX_FAIL_EVT
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_cho_notify_tx_fail_evt (tNFA_STATUS status)
-{
-    tNFA_CHO_EVT_DATA evt_data;
-
-    CHO_TRACE_DEBUG0 ("nfa_cho_notify_tx_fail_evt ()");
-
-    evt_data.status = status;
-
-    if (nfa_cho_cb.p_cback)
-        nfa_cho_cb.p_cback (NFA_CHO_TX_FAIL_EVT, &evt_data);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_reassemble_ho_msg
-**
-** Description      Reassemble received data for handover message
-**
-**
-** Returns          tNFA_CHO_RX_NDEF_STATUS
-**
-*******************************************************************************/
-tNFA_CHO_RX_NDEF_STATUS nfa_cho_reassemble_ho_msg (UINT8 local_sap, UINT8 remote_sap)
-{
-    tNFA_CHO_RX_NDEF_STATUS rx_status;
-
-    nfa_sys_stop_timer (&nfa_cho_cb.timer);
-
-    /*
-    ** allocate memory for NDEF message for the first segment
-    ** validate NDEF message to check if received complete message
-    */
-    rx_status = nfa_cho_read_ndef_msg (local_sap, remote_sap);
-
-    /* if Temporary Memory Constraint */
-    if (rx_status == NFA_CHO_RX_NDEF_TEMP_MEM)
-    {
-        CHO_TRACE_ERROR0 ("Failed due to Temporary Memory Constraint");
-
-        /* if we are expecting Hr then send Hs Error record */
-        if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
-        {
-            /* ask retry later, handover request will disconnect */
-            nfa_cho_send_hs_error (NFA_CHO_ERROR_TEMP_MEM, NFA_CHO_TIMEOUT_FOR_RETRY);
-        }
-        else
-        {
-            /* we cannot send error record, so disconnect */
-            nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_INTERNAL_ERROR;
-            LLCP_DisconnectReq (nfa_cho_cb.local_sap, nfa_cho_cb.remote_sap, FALSE);
-        }
-    }
-    /* Permanent Memory Constraint */
-    else if (rx_status == NFA_CHO_RX_NDEF_PERM_MEM)
-    {
-        CHO_TRACE_ERROR0 ("Failed due to Permanent Memory Constraint");
-
-        /* if we are expecting Hr then send Hs Error record */
-        if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
-        {
-            /*
-            ** notify our buffer size and ask retry with modified message later
-            ** handover request will disconnect
-            */
-            nfa_cho_send_hs_error (NFA_CHO_ERROR_PERM_MEM, nfa_cho_cb.rx_ndef_buf_size);
-        }
-        else
-        {
-            /* we cannot send error record, so disconnect */
-            nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_INTERNAL_ERROR;
-            LLCP_DisconnectReq (nfa_cho_cb.local_sap, nfa_cho_cb.remote_sap, FALSE);
-        }
-    }
-    /* Invalid NDEF message */
-    else if (rx_status == NFA_CHO_RX_NDEF_INVALID)
-    {
-        CHO_TRACE_ERROR0 ("Failed due to invalid NDEF message");
-
-        if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
-        {
-            /* let Handover Requester got timeout */
-        }
-        else
-        {
-            /* we cannot send error record, so disconnect */
-            nfa_cho_cb.disc_reason = NFA_CHO_DISC_REASON_INVALID_MSG;
-            LLCP_DisconnectReq (nfa_cho_cb.local_sap, nfa_cho_cb.remote_sap, FALSE);
-        }
-    }
-    /* need more segment */
-    else if (rx_status == NFA_CHO_RX_NDEF_INCOMPLTE)
-    {
-        /* wait for next segment */
-        if (nfa_cho_cb.substate == NFA_CHO_SUBSTATE_W4_REMOTE_HR)
-        {
-            nfa_sys_start_timer (&nfa_cho_cb.timer, 0, NFA_CHO_TIMEOUT_SEGMENTED_HR);
-        }
-        /* don't update running timer if we are waiting Hs */
-    }
-    else /* NFA_CHO_RX_NDEF_COMPLETE */
-    {
-        /* Received complete NDEF message */
-    }
-
-    return rx_status;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_send_handover_msg
-**
-** Description      Send segmented or whole Handover Message on LLCP
-**                  if congested then wait for uncongested event from LLCP
-**
-** Returns          tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_send_handover_msg (void)
-{
-    tNFA_STATUS  status = NFA_STATUS_FAILED;
-    tLLCP_STATUS llcp_status;
-    UINT16       tx_size;
-    BT_HDR       *p_msg;
-    UINT8        *p_src, *p_dst;
-
-    CHO_TRACE_DEBUG2 ("nfa_cho_send_handover_msg () size=%d, sent=%d",
-                      nfa_cho_cb.tx_ndef_cur_size, nfa_cho_cb.tx_ndef_sent_size);
-
-    /* while data link connection is not congested */
-    while ((!nfa_cho_cb.congested) && (nfa_cho_cb.tx_ndef_sent_size < nfa_cho_cb.tx_ndef_cur_size))
-    {
-        /* select segment size as min (MIU of remote, remaining NDEF size) */
-        if (nfa_cho_cb.tx_ndef_cur_size - nfa_cho_cb.tx_ndef_sent_size > nfa_cho_cb.remote_miu)
-        {
-            tx_size = nfa_cho_cb.remote_miu;
-        }
-        else
-        {
-            tx_size = (UINT16) (nfa_cho_cb.tx_ndef_cur_size - nfa_cho_cb.tx_ndef_sent_size);
-        }
-
-        /* transmit a segment on LLCP */
-        if ((p_msg = (BT_HDR *) GKI_getpoolbuf (LLCP_POOL_ID)) != NULL)
-        {
-            p_msg->len    = (UINT16) tx_size;
-            p_msg->offset = LLCP_MIN_OFFSET;
-
-            p_dst = (UINT8*) (p_msg + 1) + p_msg->offset;
-            p_src = nfa_cho_cb.p_tx_ndef_msg + nfa_cho_cb.tx_ndef_sent_size;
-
-            memcpy (p_dst, p_src, tx_size);
-
-            llcp_status = LLCP_SendData (nfa_cho_cb.local_sap, nfa_cho_cb.remote_sap, p_msg);
-
-            nfa_cho_cb.tx_ndef_sent_size += tx_size;
-        }
-        else
-        {
-            llcp_status = LLCP_STATUS_FAIL;
-        }
-
-        if (llcp_status == LLCP_STATUS_SUCCESS)
-        {
-            status = NFA_STATUS_OK;
-        }
-        else if (llcp_status == LLCP_STATUS_CONGESTED)
-        {
-            status = NFA_STATUS_CONGESTED;
-            CHO_TRACE_DEBUG0 ("Data link connection is congested");
-            /* wait for uncongested event */
-            nfa_cho_cb.congested = TRUE;
-            break;
-        }
-        else
-        {
-            status = NFA_STATUS_FAILED;
-            GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
-            nfa_cho_cb.p_tx_ndef_msg = NULL;
-            break;
-        }
-    }
-
-    /*
-    ** free buffer when receiving response or disconnected because we may need to send
-    ** Hr message again due to collision
-    */
-
-    return status;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_read_ndef_msg
-**
-** Description      allocate memory for NDEF message for the first segment
-**                  validate NDEF message to check if received complete message
-**
-** Returns          None
-**
-*******************************************************************************/
-tNFA_CHO_RX_NDEF_STATUS nfa_cho_read_ndef_msg (UINT8 local_sap, UINT8 remote_sap)
-{
-    tNDEF_STATUS            ndef_status;
-    tNFA_CHO_RX_NDEF_STATUS rx_status;
-    BOOLEAN                 more;
-    UINT32                  length;
-
-    CHO_TRACE_DEBUG2 ("nfa_cho_read_ndef_msg () local_sap=0x%x, remote_sap=0x%x",
-                      local_sap, remote_sap);
-
-    /* if this is the first segment */
-    if (!nfa_cho_cb.p_rx_ndef_msg)
-    {
-        nfa_cho_cb.p_rx_ndef_msg = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-
-        if (!nfa_cho_cb.p_rx_ndef_msg)
-        {
-            CHO_TRACE_ERROR0 ("Failed to allocate buffer");
-            return NFA_CHO_RX_NDEF_TEMP_MEM;
-        }
-
-        nfa_cho_cb.rx_ndef_buf_size = LLCP_POOL_BUF_SIZE;
-        nfa_cho_cb.rx_ndef_cur_size = 0;
-    }
-
-    more = TRUE;
-    while (more)
-    {
-        more = LLCP_ReadDataLinkData (local_sap,
-                                      remote_sap,
-                                      (UINT16)(nfa_cho_cb.rx_ndef_buf_size - nfa_cho_cb.rx_ndef_cur_size),
-                                      &length,
-                                      nfa_cho_cb.p_rx_ndef_msg + nfa_cho_cb.rx_ndef_cur_size);
-
-        nfa_cho_cb.rx_ndef_cur_size += length;
-
-        /* if it doesn't fit into allocated memory */
-        if ((nfa_cho_cb.rx_ndef_cur_size >= nfa_cho_cb.rx_ndef_buf_size)
-          &&(more))
-        {
-            CHO_TRACE_ERROR0 ("Failed to store too much data");
-
-            LLCP_FlushDataLinkRxData (local_sap, remote_sap);
-
-            GKI_freebuf (nfa_cho_cb.p_rx_ndef_msg);
-            nfa_cho_cb.p_rx_ndef_msg = NULL;
-
-            return NFA_CHO_RX_NDEF_PERM_MEM;
-        }
-    }
-
-    /* check NDEF message */
-    ndef_status = NDEF_MsgValidate (nfa_cho_cb.p_rx_ndef_msg, nfa_cho_cb.rx_ndef_cur_size, FALSE);
-
-    switch (ndef_status)
-    {
-    case NDEF_OK:
-        rx_status = NFA_CHO_RX_NDEF_COMPLETE;
-        break;
-
-    case NDEF_MSG_TOO_SHORT:
-    case NDEF_MSG_NO_MSG_END:
-    case NDEF_MSG_LENGTH_MISMATCH:
-        rx_status = NFA_CHO_RX_NDEF_INCOMPLTE;
-        break;
-
-    default:
-        rx_status = NFA_CHO_RX_NDEF_INVALID;
-        break;
-    }
-
-    if (rx_status == NFA_CHO_RX_NDEF_COMPLETE)
-    {
-#if (BT_TRACE_PROTOCOL == TRUE)
-        DispCHO (nfa_cho_cb.p_rx_ndef_msg, nfa_cho_cb.rx_ndef_cur_size, TRUE);
-#endif
-    }
-    else if (rx_status == NFA_CHO_RX_NDEF_INCOMPLTE)
-    {
-        CHO_TRACE_DEBUG0 ("Need more data to complete NDEF message");
-    }
-    else /* if (rx_status == NFA_CHO_RX_NDEF_INVALID) */
-    {
-        CHO_TRACE_ERROR1 ("Failed to validate NDEF message error=0x%x", ndef_status);
-        GKI_freebuf (nfa_cho_cb.p_rx_ndef_msg);
-        nfa_cho_cb.p_rx_ndef_msg = NULL;
-    }
-
-    return rx_status;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_add_cr_record
-**
-** Description      Adding Collision Resolution record
-**
-**
-** Returns          NDEF_OK if success
-**
-*******************************************************************************/
-tNDEF_STATUS nfa_cho_add_cr_record (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size)
-{
-    tNDEF_STATUS status;
-    UINT32       temp32;
-
-    CHO_TRACE_DEBUG1 ("nfa_cho_add_cr_record () cur_size = %d", *p_cur_size);
-
-    /* Get random number from timer */
-    temp32 = GKI_get_tick_count ();
-    nfa_cho_cb.tx_random_number = (UINT16) ((temp32 >> 16) ^ (temp32));
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
-    if (nfa_cho_cb.test_enabled & NFA_CHO_TEST_RANDOM)
-    {
-        nfa_cho_cb.tx_random_number = nfa_cho_cb.test_random_number;
-    }
-#endif
-
-    CHO_TRACE_DEBUG1 ("tx_random_number = 0x%04x", nfa_cho_cb.tx_random_number);
-
-    /* Add Well-Known Type:Collistion Resolution Record */
-    status = NDEF_MsgAddWktCr (p_msg, max_size, p_cur_size,
-                               nfa_cho_cb.tx_random_number);
-
-    return status;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_add_ac_record
-**
-** Description      Adding Alternative Carrier record
-**
-**
-** Returns          NDEF_OK if success
-**
-*******************************************************************************/
-tNDEF_STATUS nfa_cho_add_ac_record (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size,
-                                    UINT8 num_ac_info, tNFA_CHO_AC_INFO *p_ac_info,
-                                    UINT8 *p_ndef, UINT32 max_ndef_size, UINT32 *p_cur_ndef_size)
-{
-    tNDEF_STATUS status = NDEF_OK;
-    UINT8        xx, yy;
-    UINT8       *p_rec, *p_id, id_len;
-    char         carrier_data_ref_str[NFA_CHO_MAX_REF_NAME_LEN];
-    char        *aux_data_ref[NFA_CHO_MAX_AUX_DATA_COUNT];
-    char         aux_data_ref_str[NFA_CHO_MAX_AUX_DATA_COUNT][NFA_CHO_MAX_REF_NAME_LEN];
-
-    CHO_TRACE_DEBUG1 ("nfa_cho_add_ac_record (): num_ac_info = %d", num_ac_info);
-
-    /* initialize auxilary data reference */
-    for (xx = 0; xx < NFA_CHO_MAX_AUX_DATA_COUNT; xx++)
-    {
-        aux_data_ref[xx] = aux_data_ref_str[xx];
-    }
-
-    p_rec = p_ndef;
-
-    /* Alternative Carrier Records */
-    for (xx = 0; (xx < num_ac_info) && (status == NDEF_OK); xx++)
-    {
-        if (!p_rec)
-        {
-            status = NDEF_REC_NOT_FOUND;
-            break;
-        }
-
-        p_id = NDEF_RecGetId (p_rec, &id_len);
-
-        if ((p_id) && (id_len > 0) && (id_len <= NFA_CHO_MAX_REF_NAME_LEN))
-        {
-            memcpy (carrier_data_ref_str, p_id, id_len);
-            carrier_data_ref_str[id_len] = 0x00;
-        }
-        else
-        {
-            CHO_TRACE_ERROR1 ("nfa_cho_add_ac_record ():id_len=%d", id_len);
-            status = NDEF_REC_NOT_FOUND;
-            break;
-        }
-
-        p_rec = NDEF_MsgGetNextRec (p_rec);
-
-        /* auxilary data reference */
-        for (yy = 0; yy < p_ac_info[xx].num_aux_data; yy++)
-        {
-            if (!p_rec)
-            {
-                status = NDEF_REC_NOT_FOUND;
-                break;
-            }
-
-            p_id = NDEF_RecGetId (p_rec, &id_len);
-
-            if ((p_id) && (id_len > 0) && (id_len <= NFA_CHO_MAX_REF_NAME_LEN))
-            {
-                memcpy (aux_data_ref_str[yy], p_id, id_len);
-                aux_data_ref_str[yy][id_len] = 0x00;
-            }
-            else
-            {
-                CHO_TRACE_ERROR1 ("nfa_cho_add_ac_record ():id_len=%d", id_len);
-                status = NDEF_REC_NOT_FOUND;
-                break;
-            }
-
-            p_rec = NDEF_MsgGetNextRec (p_rec);
-        }
-
-        if (status == NDEF_OK)
-        {
-            /* Add Well-Known Type:Alternative Carrier Record */
-            status = NDEF_MsgAddWktAc (p_msg, max_size, p_cur_size,
-                                       p_ac_info[xx].cps, carrier_data_ref_str,
-                                       p_ac_info[xx].num_aux_data, aux_data_ref);
-        }
-
-        if (status != NDEF_OK)
-        {
-            break;
-        }
-    }
-
-    return status;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_send_hr
-**
-** Description      Sending Handover Request Message
-**                  It may send one from AC list to select a specific AC.
-**
-** Returns          NFA_STATUS_OK if success
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_send_hr (tNFA_CHO_API_SEND_HR *p_api_send_hr)
-{
-    tNDEF_STATUS    status;
-    UINT8          *p_msg_cr_ac;
-    UINT32          cur_size_cr_ac, max_size;
-    UINT8           version;
-
-    CHO_TRACE_DEBUG0 ("nfa_cho_send_hr ()");
-
-    /* Collistion Resolution Record and Alternative Carrier Records */
-
-    p_msg_cr_ac = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-    if (!p_msg_cr_ac)
-    {
-        CHO_TRACE_ERROR0 ("Failed to allocate buffer");
-        return NFA_STATUS_NO_BUFFERS;
-    }
-
-    max_size = LLCP_POOL_BUF_SIZE;
-    NDEF_MsgInit (p_msg_cr_ac, max_size, &cur_size_cr_ac);
-
-    /* Collistion Resolution Record */
-    if (NDEF_OK != nfa_cho_add_cr_record (p_msg_cr_ac, max_size, &cur_size_cr_ac))
-    {
-        CHO_TRACE_ERROR0 ("Failed to add cr record");
-        GKI_freebuf (p_msg_cr_ac);
-        return NFA_STATUS_FAILED;
-    }
-
-    /* Alternative Carrier Records */
-    if (NDEF_OK != nfa_cho_add_ac_record (p_msg_cr_ac, max_size, &cur_size_cr_ac,
-                                          p_api_send_hr->num_ac_info, p_api_send_hr->p_ac_info,
-                                          p_api_send_hr->p_ndef, p_api_send_hr->max_ndef_size,
-                                          &(p_api_send_hr->cur_ndef_size)))
-    {
-        CHO_TRACE_ERROR0 ("Failed to add ac record");
-        GKI_freebuf (p_msg_cr_ac);
-        return NFA_STATUS_FAILED;
-    }
-
-    /* Handover Request Message */
-
-    nfa_cho_cb.p_tx_ndef_msg = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-    if (!nfa_cho_cb.p_tx_ndef_msg)
-    {
-        CHO_TRACE_ERROR0 ("Failed to allocate buffer");
-        GKI_freebuf (p_msg_cr_ac);
-        return NFA_STATUS_FAILED;
-    }
-
-    max_size = LLCP_POOL_BUF_SIZE;
-
-    /* Handover Request Record */
-    version = NFA_CHO_VERSION;
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
-    if (nfa_cho_cb.test_enabled & NFA_CHO_TEST_VERSION)
-    {
-        version = nfa_cho_cb.test_version;
-    }
-#endif
-
-    status = NDEF_MsgCreateWktHr (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
-                                  version);
-    if (status != NDEF_OK)
-    {
-        CHO_TRACE_ERROR0 ("Failed to create Hr");
-        GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
-        nfa_cho_cb.p_tx_ndef_msg = NULL;
-        GKI_freebuf (p_msg_cr_ac);
-        return NFA_STATUS_FAILED;
-    }
-
-    /* Append Collistion Resolution Record and Alternative Carrier Records */
-    status = NDEF_MsgAppendPayload (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
-                                    nfa_cho_cb.p_tx_ndef_msg, p_msg_cr_ac, cur_size_cr_ac);
-
-    GKI_freebuf (p_msg_cr_ac);
-
-    if (status != NDEF_OK)
-    {
-        CHO_TRACE_ERROR0 ("Failed to add cr/ac record");
-        GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
-        nfa_cho_cb.p_tx_ndef_msg = NULL;
-        return NFA_STATUS_FAILED;
-    }
-
-
-    /* Append Alternative Carrier Reference Data or Handover Carrier Record */
-    status = NDEF_MsgAppendRec (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
-                                p_api_send_hr->p_ndef, p_api_send_hr->cur_ndef_size);
-
-    if (status != NDEF_OK)
-    {
-        CHO_TRACE_ERROR0 ("Failed to add ac reference data or Hc record");
-        GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
-        nfa_cho_cb.p_tx_ndef_msg = NULL;
-        return NFA_STATUS_FAILED;
-    }
-
-#if (BT_TRACE_PROTOCOL == TRUE)
-    DispCHO (nfa_cho_cb.p_tx_ndef_msg, nfa_cho_cb.tx_ndef_cur_size, FALSE);
-#endif
-
-    /* Send it to peer */
-    nfa_cho_cb.tx_ndef_sent_size = 0;
-
-    status = nfa_cho_send_handover_msg ();
-
-    if (status == NFA_STATUS_CONGESTED)
-    {
-        status = NFA_STATUS_OK;
-    }
-
-    return status;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_send_hs
-**
-** Description      Send Handover Select Message
-**
-**
-** Returns          NFA_STATUS_OK if success
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_send_hs (tNFA_CHO_API_SEND_HS *p_api_select)
-{
-    tNDEF_STATUS    status;
-    UINT8          *p_msg_ac;
-    UINT32          cur_size_ac = 0, max_size;
-    UINT8           version;
-
-    CHO_TRACE_DEBUG1 ("nfa_cho_send_hs () num_ac_info=%d", p_api_select->num_ac_info);
-
-    if (p_api_select->num_ac_info > 0)
-    {
-        /* Alternative Carrier Records */
-
-        p_msg_ac = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-
-        if (!p_msg_ac)
-        {
-            CHO_TRACE_ERROR0 ("Failed to allocate buffer");
-            return NFA_STATUS_FAILED;
-        }
-
-        max_size = LLCP_POOL_BUF_SIZE;
-        NDEF_MsgInit (p_msg_ac, max_size, &cur_size_ac);
-
-        if (NDEF_OK != nfa_cho_add_ac_record (p_msg_ac, max_size, &cur_size_ac,
-                                              p_api_select->num_ac_info, p_api_select->p_ac_info,
-                                              p_api_select->p_ndef, p_api_select->max_ndef_size,
-                                              &(p_api_select->cur_ndef_size)))
-        {
-            CHO_TRACE_ERROR0 ("Failed to add ac record");
-            GKI_freebuf (p_msg_ac);
-            return NFA_STATUS_FAILED;
-        }
-    }
-    else
-    {
-        p_msg_ac = NULL;
-    }
-
-    /* Handover Select Message */
-    nfa_cho_cb.p_tx_ndef_msg = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-
-    if (!nfa_cho_cb.p_tx_ndef_msg)
-    {
-        CHO_TRACE_ERROR0 ("Failed to allocate buffer");
-
-        if (p_msg_ac)
-            GKI_freebuf (p_msg_ac);
-
-        return NFA_STATUS_FAILED;
-    }
-    max_size = LLCP_POOL_BUF_SIZE;
-
-    /* Handover Select Record */
-    version = NFA_CHO_VERSION;
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
-    if (nfa_cho_cb.test_enabled & NFA_CHO_TEST_VERSION)
-    {
-        version = nfa_cho_cb.test_version;
-    }
-#endif
-    status = NDEF_MsgCreateWktHs (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
-                                  version);
-
-    if (status != NDEF_OK)
-    {
-        CHO_TRACE_ERROR0 ("Failed to create Hs");
-
-        GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
-        nfa_cho_cb.p_tx_ndef_msg = NULL;
-
-        if (p_msg_ac)
-            GKI_freebuf (p_msg_ac);
-
-        return NFA_STATUS_FAILED;
-    }
-
-    if (p_api_select->num_ac_info > 0)
-    {
-        /* Append Alternative Carrier Records */
-        status = NDEF_MsgAppendPayload (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
-                                        nfa_cho_cb.p_tx_ndef_msg, p_msg_ac, cur_size_ac);
-
-        if (p_msg_ac)
-            GKI_freebuf (p_msg_ac);
-
-        if (status != NDEF_OK)
-        {
-            CHO_TRACE_ERROR0 ("Failed to add cr record");
-            GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
-            nfa_cho_cb.p_tx_ndef_msg = NULL;
-            return NFA_STATUS_FAILED;
-        }
-
-        /* Append Alternative Carrier Reference Data */
-        status = NDEF_MsgAppendRec (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
-                                    p_api_select->p_ndef, p_api_select->cur_ndef_size);
-
-        if (status != NDEF_OK)
-        {
-            CHO_TRACE_ERROR0 ("Failed to add ac reference data record");
-            GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
-            nfa_cho_cb.p_tx_ndef_msg = NULL;
-            return NFA_STATUS_FAILED;
-        }
-    }
-
-#if (BT_TRACE_PROTOCOL == TRUE)
-    DispCHO (nfa_cho_cb.p_tx_ndef_msg, nfa_cho_cb.tx_ndef_cur_size, FALSE);
-#endif
-
-    /* Send it to peer */
-    nfa_cho_cb.tx_ndef_sent_size = 0;
-
-    status = nfa_cho_send_handover_msg ();
-
-    if (status == NFA_STATUS_CONGESTED)
-    {
-        status = NFA_STATUS_OK;
-    }
-    return status;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_send_hs_error
-**
-** Description      Sending Handover Select Message with error record
-**
-**
-** Returns          NFA_STATUS_OK if success
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_send_hs_error (UINT8 error_reason, UINT32 error_data)
-{
-    tNDEF_STATUS    status;
-    UINT8           version;
-    UINT32          max_size;
-
-    CHO_TRACE_DEBUG2 ("nfa_cho_send_hs_error () error_reason=0x%x, error_data=0x%x",
-                       error_reason, error_data);
-
-    /* Handover Select Message */
-    nfa_cho_cb.p_tx_ndef_msg = (UINT8 *) GKI_getpoolbuf (LLCP_POOL_ID);
-
-    if (!nfa_cho_cb.p_tx_ndef_msg)
-    {
-        CHO_TRACE_ERROR0 ("Failed to allocate buffer");
-        return NFA_STATUS_FAILED;
-    }
-
-    max_size = LLCP_POOL_BUF_SIZE;
-
-    /* Handover Select Record with Version */
-    version = NFA_CHO_VERSION;
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
-    if (nfa_cho_cb.test_enabled & NFA_CHO_TEST_VERSION)
-    {
-        version = nfa_cho_cb.test_version;
-    }
-#endif
-    status = NDEF_MsgCreateWktHs (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
-                                  version);
-
-    if (status != NDEF_OK)
-    {
-        CHO_TRACE_ERROR0 ("Failed to create Hs");
-
-        GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
-        nfa_cho_cb.p_tx_ndef_msg = NULL;
-
-        return NFA_STATUS_FAILED;
-    }
-
-    /* Add Error Records */
-    status = NDEF_MsgAddWktErr (nfa_cho_cb.p_tx_ndef_msg, max_size, &nfa_cho_cb.tx_ndef_cur_size,
-                                error_reason, error_data);
-
-    if (status != NDEF_OK)
-    {
-        CHO_TRACE_ERROR0 ("Failed to add err record");
-
-        GKI_freebuf (nfa_cho_cb.p_tx_ndef_msg);
-        nfa_cho_cb.p_tx_ndef_msg = NULL;
-
-        return NFA_STATUS_FAILED;
-    }
-
-#if (BT_TRACE_PROTOCOL == TRUE)
-    DispCHO (nfa_cho_cb.p_tx_ndef_msg, nfa_cho_cb.tx_ndef_cur_size, FALSE);
-#endif
-
-    /* Send it to peer */
-    nfa_cho_cb.tx_ndef_sent_size = 0;
-
-    status = nfa_cho_send_handover_msg ();
-
-    if (status == NFA_STATUS_CONGESTED)
-    {
-        status = NFA_STATUS_OK;
-    }
-    return status;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_get_random_number
-**
-** Description      Return random number in Handover Request message
-**
-**
-** Returns          random number in "cr" record
-**
-*******************************************************************************/
-UINT16 nfa_cho_get_random_number (UINT8 *p_ndef_msg)
-{
-    UINT16 random_number;
-    UINT8 *p_cr_record, *p_cr_payload;
-    UINT32 cr_payload_len;
-
-    CHO_TRACE_DEBUG0 ("nfa_cho_get_random_number ()");
-
-    /* find Collision Resolution record */
-    p_cr_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, cr_rec_type, CR_REC_TYPE_LEN);
-
-    if (!p_cr_record)
-    {
-        CHO_TRACE_ERROR0 ("Failed to find cr record");
-        return 0;
-    }
-
-    /* get start of payload in Collision Resolution record */
-    p_cr_payload = NDEF_RecGetPayload (p_cr_record, &cr_payload_len);
-
-    if ((!p_cr_payload) || (cr_payload_len != 2))
-    {
-        CHO_TRACE_ERROR0 ("Failed to get cr payload (random number)");
-        return 0;
-    }
-
-    /* get random number from payload */
-    BE_STREAM_TO_UINT16 (random_number, p_cr_payload);
-
-    return random_number;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_parse_ac_records
-**
-** Description      Parsing NDEF message to retrieve Alternative Carrier records
-**                  and store into tNFA_CHO_AC_REC
-**
-** Returns          tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_parse_ac_records (UINT8 *p_ndef_msg, UINT8 *p_num_ac_rec, tNFA_CHO_AC_REC *p_ac_rec)
-{
-    UINT8 *p_ac_record, *p_ac_payload;
-    UINT32 ac_payload_len;
-
-    UINT8  xx, yy;
-
-    CHO_TRACE_DEBUG0 ("nfa_cho_parse_ac_records ()");
-
-    /* get Alternative Carrier record */
-    p_ac_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, ac_rec_type, AC_REC_TYPE_LEN);
-
-    xx = 0;
-
-    while ((p_ac_record) && (xx < NFA_CHO_MAX_AC_INFO))
-    {
-        /* get payload */
-        p_ac_payload = NDEF_RecGetPayload (p_ac_record, &ac_payload_len);
-
-        if ((!p_ac_payload) || (ac_payload_len < 3))
-        {
-            CHO_TRACE_ERROR0 ("Failed to get ac payload");
-            return NFA_STATUS_FAILED;
-        }
-
-        /* Carrier Power State */
-        BE_STREAM_TO_UINT8 (p_ac_rec->cps, p_ac_payload);
-
-        /* Carrier Data Reference Length and Characters */
-        BE_STREAM_TO_UINT8 (p_ac_rec->carrier_data_ref.ref_len, p_ac_payload);
-
-        ac_payload_len -= 2;
-
-        /* remaining must have carrier data ref and Auxiliary Data Reference Count at least */
-        if (ac_payload_len > p_ac_rec->carrier_data_ref.ref_len)
-        {
-            if (p_ac_rec->carrier_data_ref.ref_len > NFA_CHO_MAX_REF_NAME_LEN)
-            {
-                CHO_TRACE_ERROR1 ("Too many bytes for carrier_data_ref, ref_len = %d",
-                                   p_ac_rec->carrier_data_ref.ref_len);
-                return NFA_STATUS_FAILED;
-            }
-
-            BE_STREAM_TO_ARRAY (p_ac_payload,
-                                p_ac_rec->carrier_data_ref.ref_name,
-                                p_ac_rec->carrier_data_ref.ref_len);
-            ac_payload_len -= p_ac_rec->carrier_data_ref.ref_len;
-        }
-        else
-        {
-            CHO_TRACE_ERROR0 ("Failed to parse carrier_data_ref.ref_len");
-            return NFA_STATUS_FAILED;
-        }
-
-        /* Auxiliary Data Reference Count */
-        BE_STREAM_TO_UINT8 (p_ac_rec->aux_data_ref_count, p_ac_payload);
-        ac_payload_len--;
-
-        /* Auxiliary Data Reference Length and Characters */
-        for (yy = 0; (yy < p_ac_rec->aux_data_ref_count) && (yy < NFA_CHO_MAX_AUX_DATA_COUNT); yy++)
-        {
-            if (ac_payload_len > 0)
-            {
-                BE_STREAM_TO_UINT8 (p_ac_rec->aux_data_ref[yy].ref_len, p_ac_payload);
-                ac_payload_len--;
-
-                if (ac_payload_len >= p_ac_rec->aux_data_ref[yy].ref_len)
-                {
-                    if (p_ac_rec->aux_data_ref[yy].ref_len > NFA_CHO_MAX_REF_NAME_LEN)
-                    {
-                        CHO_TRACE_ERROR2 ("Too many bytes for aux_data_ref[%d], ref_len=%d",
-                                           yy, p_ac_rec->aux_data_ref[yy].ref_len);
-                        return NFA_STATUS_FAILED;
-                    }
-
-                    BE_STREAM_TO_ARRAY (p_ac_payload,
-                                        p_ac_rec->aux_data_ref[yy].ref_name,
-                                        p_ac_rec->aux_data_ref[yy].ref_len);
-                    ac_payload_len -= p_ac_rec->aux_data_ref[yy].ref_len;
-                }
-                else
-                {
-                    CHO_TRACE_ERROR1 ("Failed to parse ref_name for aux_data_ref[%d]", yy);
-                    return NFA_STATUS_FAILED;
-                }
-            }
-            else
-            {
-                CHO_TRACE_ERROR1 ("Failed to parse ref_len for aux_data_ref[%d]", yy);
-                return NFA_STATUS_FAILED;
-            }
-        }
-
-        if (ac_payload_len != 0)
-        {
-            CHO_TRACE_WARNING1 ("Found extra data in AC record[%d]", xx);
-        }
-
-        xx++;
-        p_ac_rec++;
-
-        /* get next Alternative Carrier record */
-        p_ac_record = NDEF_MsgGetNextRecByType (p_ac_record, NDEF_TNF_WKT, ac_rec_type, AC_REC_TYPE_LEN);
-    }
-
-    *p_num_ac_rec = xx;
-
-    return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_parse_hr_record
-**
-** Description      Parsing Handover Request message to retrieve version, random number,
-**                  Alternative Carrier records and store into tNFA_CHO_AC_REC
-**
-**
-** Returns          tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_parse_hr_record (UINT8  *p_ndef_msg,
-                                     UINT8  *p_version,
-                                     UINT16 *p_random_number,
-                                     UINT8  *p_num_ac_rec,
-                                     tNFA_CHO_AC_REC *p_ac_rec)
-{
-    UINT8 *p_hr_record, *p_hr_payload;
-    UINT32 hr_payload_len;
-
-    CHO_TRACE_DEBUG0 ("nfa_cho_parse_hr_record ()");
-
-    /* get Handover Request record */
-    p_hr_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, hr_rec_type, HR_REC_TYPE_LEN);
-
-    if (!p_hr_record)
-    {
-        CHO_TRACE_ERROR0 ("Failed to find Hr record");
-        return NFA_STATUS_FAILED;
-    }
-
-    p_hr_payload = NDEF_RecGetPayload (p_hr_record, &hr_payload_len);
-
-    if ((!p_hr_payload) || (hr_payload_len < 7))
-    {
-        CHO_TRACE_ERROR0 ("Failed to get Hr payload (version, cr/ac record)");
-        return NFA_STATUS_FAILED;
-    }
-
-    /* Version */
-    STREAM_TO_UINT8 ((*p_version), p_hr_payload);
-    hr_payload_len--;
-
-    /* NDEF message for Collision Resolution record and Alternative Carrier records */
-
-    if (NDEF_OK != NDEF_MsgValidate (p_hr_payload, hr_payload_len, FALSE))
-    {
-        CHO_TRACE_ERROR0 ("Failed to validate NDEF message for cr/ac records");
-        return NFA_STATUS_FAILED;
-    }
-
-    /* Collision Resolution record */
-    if (p_random_number)
-    {
-        *p_random_number = nfa_cho_get_random_number (p_hr_payload);
-    }
-
-    /* Alternative Carrier records */
-    if (p_ac_rec)
-    {
-        return (nfa_cho_parse_ac_records (p_hr_payload, p_num_ac_rec, p_ac_rec));
-    }
-
-    return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_parse_carrier_config
-**
-** Description      Parse Alternative Carrier Configuration and Aux Data
-**
-**
-** Returns          tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_parse_carrier_config (UINT8 *p_ndef_msg, UINT8 num_ac_rec, tNFA_CHO_AC_REC *p_ac_rec)
-{
-    UINT8  *p_record;
-    UINT8   xx, yy;
-
-    CHO_TRACE_DEBUG1 ("nfa_cho_parse_carrier_config () num_ac_rec = %d", num_ac_rec);
-
-    /* Parse Alternative Carrier Configuration and Aux Data */
-    for (xx = 0; xx < num_ac_rec; xx++)
-    {
-        p_record = NDEF_MsgGetFirstRecById (p_ndef_msg,
-                                            p_ac_rec->carrier_data_ref.ref_name,
-                                            p_ac_rec->carrier_data_ref.ref_len);
-
-        if (!p_record)
-        {
-            CHO_TRACE_ERROR2 ("Failed to find Payload ID: len=%d, [0x%x ...]",
-                              p_ac_rec->carrier_data_ref.ref_len,
-                              p_ac_rec->carrier_data_ref.ref_name[0]);
-            return NFA_STATUS_FAILED;
-        }
-
-        for (yy = 0; yy < p_ac_rec->aux_data_ref_count; yy++)
-        {
-            /* Get aux data record by Payload ID */
-            p_record = NDEF_MsgGetFirstRecById (p_ndef_msg,
-                                                p_ac_rec->aux_data_ref[yy].ref_name,
-                                                p_ac_rec->aux_data_ref[yy].ref_len);
-
-            if (!p_record)
-            {
-                CHO_TRACE_ERROR2 ("Failed to find Payload ID for Aux: len=%d, [0x%x ...]",
-                                  p_ac_rec->aux_data_ref[yy].ref_len,
-                                  p_ac_rec->aux_data_ref[yy].ref_name[0]);
-                return NFA_STATUS_FAILED;
-            }
-        }
-
-        p_ac_rec++;
-    }
-
-    return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_proc_hr
-**
-** Description      Parse Handover Request Message
-**                  In case of parsing error, let peer got timeout (1 sec).
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_cho_proc_hr (UINT32 length, UINT8 *p_ndef_msg)
-{
-    tNFA_CHO_EVT_DATA    evt_data;
-    tNFA_CHO_API_SEND_HS select;
-    UINT8  version;
-    UINT16 random_number;
-
-    CHO_TRACE_DEBUG1 ("nfa_cho_proc_hr () length=%d", length);
-
-    /* Parse Handover Request record */
-    if (NDEF_OK != nfa_cho_parse_hr_record (p_ndef_msg, &version, &random_number,
-                                            &evt_data.request.num_ac_rec,
-                                            &evt_data.request.ac_rec[0]))
-    {
-        CHO_TRACE_ERROR0 ("Failed to parse hr record");
-        return;
-    }
-
-    if (version != NFA_CHO_VERSION)
-    {
-        CHO_TRACE_DEBUG1 ("Version (0x%02x) not matched", version);
-        /* For the future, */
-        /* if we have higher major then support peer's version */
-        /* if we have lower major then send empty handover select message */
-        if (NFA_CHO_GET_MAJOR_VERSION (version) > NFA_CHO_GET_MAJOR_VERSION (NFA_CHO_VERSION))
-        {
-            select.num_ac_info = 0;
-            nfa_cho_send_hs (&select);
-            return;
-        }
-    }
-
-    if (NFA_STATUS_OK != nfa_cho_parse_carrier_config (p_ndef_msg,
-                                                       evt_data.request.num_ac_rec,
-                                                       &evt_data.request.ac_rec[0]))
-    {
-        CHO_TRACE_ERROR0 ("Failed to parse carrier configuration");
-
-        evt_data.request.status       = NFA_STATUS_FAILED;
-        evt_data.request.num_ac_rec   = 0;
-        evt_data.request.p_ref_ndef   = NULL;
-        evt_data.request.ref_ndef_len = 0;
-
-        nfa_cho_cb.p_cback (NFA_CHO_REQUEST_EVT, &evt_data);
-        return;
-    }
-
-    if (evt_data.request.num_ac_rec)
-    {
-        /* passing alternative carrier references */
-        evt_data.request.p_ref_ndef   = NDEF_MsgGetNextRec (p_ndef_msg);
-        *evt_data.request.p_ref_ndef |= NDEF_MB_MASK;
-        evt_data.request.ref_ndef_len = (UINT32)(length - (evt_data.request.p_ref_ndef - p_ndef_msg));
-    }
-    else
-    {
-        evt_data.request.p_ref_ndef   = NULL;
-        evt_data.request.ref_ndef_len = 0;
-    }
-
-    evt_data.request.status = NFA_STATUS_OK;
-
-    nfa_cho_cb.p_cback (NFA_CHO_REQUEST_EVT, &evt_data);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_get_error
-**
-** Description      Search Error record and parse it
-**
-**
-** Returns          tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_get_error (UINT8 *p_ndef_msg, UINT8 *p_error_reason, UINT32 *p_error_data)
-{
-    UINT8 *p_err_record, *p_err_payload, u8;
-    UINT32 err_payload_len;
-
-    CHO_TRACE_DEBUG0 ("nfa_cho_get_error ()");
-
-    p_err_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, err_rec_type, ERR_REC_TYPE_LEN);
-
-    if (!p_err_record)
-    {
-        CHO_TRACE_DEBUG0 ("Found no err record");
-        return NFA_STATUS_FAILED;
-    }
-
-    p_err_payload = NDEF_RecGetPayload (p_err_record, &err_payload_len);
-
-    if (!p_err_payload)
-    {
-        CHO_TRACE_ERROR0 ("Failed to get err payload");
-        return NFA_STATUS_SYNTAX_ERROR;
-    }
-
-    BE_STREAM_TO_UINT8 (*p_error_reason, p_err_payload);
-
-    if (  (err_payload_len == 2)
-        &&(  (*p_error_reason == NFA_CHO_ERROR_TEMP_MEM)
-           ||(*p_error_reason == NFA_CHO_ERROR_CARRIER)  )  )
-    {
-        BE_STREAM_TO_UINT8 (u8, p_err_payload);
-        *p_error_data = (UINT32)u8;
-    }
-    else if (  (err_payload_len == 5)
-             &&(*p_error_reason == NFA_CHO_ERROR_PERM_MEM)  )
-    {
-        BE_STREAM_TO_UINT32 (*p_error_data, p_err_payload);
-    }
-    else
-    {
-        CHO_TRACE_ERROR2 ("Unknown error reason = %d, err_payload_len = %d",
-                          *p_error_reason, err_payload_len);
-        return NFA_STATUS_SYNTAX_ERROR;
-    }
-
-    CHO_TRACE_DEBUG2 ("error_reason=0x%x, error_data=0x%x", *p_error_reason, *p_error_data);
-
-    return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_parse_hs_record
-**
-** Description      Parse Handover Select record
-**
-**
-** Returns          tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_parse_hs_record (UINT8  *p_ndef_msg,
-                                     UINT8  *p_version,
-                                     UINT8  *p_num_ac_rec,
-                                     tNFA_CHO_AC_REC *p_ac_rec,
-                                     UINT8  *p_error_reason,
-                                     UINT32 *p_error_data)
-{
-    tNFA_STATUS status;
-    UINT8 *p_hs_record, *p_hs_payload;
-    UINT32 hs_payload_len;
-
-    CHO_TRACE_DEBUG0 ("nfa_cho_parse_hs_record ()");
-
-    /* get Handover Select record */
-    p_hs_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, hs_rec_type, HS_REC_TYPE_LEN);
-
-    if (!p_hs_record)
-    {
-        CHO_TRACE_ERROR0 ("Failed to find Hs record");
-        return NFA_STATUS_FAILED;
-    }
-
-    p_hs_payload = NDEF_RecGetPayload (p_hs_record, &hs_payload_len);
-
-    if ((!p_hs_payload) || (hs_payload_len < 1))  /* at least version */
-    {
-        CHO_TRACE_ERROR0 ("Failed to get Hs payload (version, ac record)");
-        return NFA_STATUS_FAILED;
-    }
-
-    STREAM_TO_UINT8 ((*p_version), p_hs_payload);
-    hs_payload_len--;
-
-    /* Check if error record is sent */
-    status = nfa_cho_get_error (p_ndef_msg, p_error_reason, p_error_data);
-
-    if (status == NFA_STATUS_SYNTAX_ERROR)
-    {
-        return NFA_STATUS_FAILED;
-    }
-    else if (status == NFA_STATUS_OK)
-    {
-        return NFA_STATUS_OK;
-    }
-
-    if (hs_payload_len >= 3 )
-    {
-        /* NDEF message for Alternative Carrier records */
-        if (NDEF_OK != NDEF_MsgValidate (p_hs_payload, hs_payload_len, FALSE))
-        {
-            CHO_TRACE_ERROR0 ("Failed to validate NDEF message for ac records");
-            return NFA_STATUS_FAILED;
-        }
-
-        /* Alternative Carrier records */
-        if (p_ac_rec)
-        {
-            if (NFA_STATUS_OK != nfa_cho_parse_ac_records (p_hs_payload, p_num_ac_rec, p_ac_rec))
-            {
-                return NFA_STATUS_FAILED;
-            }
-
-            CHO_TRACE_DEBUG1 ("Found %d ac record", *p_num_ac_rec);
-        }
-    }
-    else
-    {
-        CHO_TRACE_DEBUG0 ("Empty Handover Select Message");
-        *p_num_ac_rec = 0;
-    }
-
-    return NFA_STATUS_OK;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_proc_hs
-**
-** Description      Parse Handover Select Message
-**
-**
-** Returns          FALSE if we need to select one from inactive ACs
-**
-*******************************************************************************/
-void nfa_cho_proc_hs (UINT32 length, UINT8 *p_ndef_msg)
-{
-    tNFA_CHO_EVT_DATA evt_data;
-    UINT8  version, error_reason = 0;
-    UINT32 error_data;
-
-    CHO_TRACE_DEBUG0 ("nfa_cho_proc_hs ()");
-
-    evt_data.select.status = NFA_STATUS_OK;
-
-    /* Parse Handover Select record */
-    if (NFA_STATUS_OK != nfa_cho_parse_hs_record (p_ndef_msg, &version,
-                                                  &evt_data.select.num_ac_rec,
-                                                  &evt_data.select.ac_rec[0],
-                                                  &error_reason, &error_data))
-    {
-        CHO_TRACE_ERROR0 ("Failed to parse hs record");
-
-        evt_data.select.status = NFA_STATUS_FAILED;
-    }
-
-    if (  (evt_data.select.status == NFA_STATUS_OK)
-        &&(error_reason != 0)  )
-    {
-        /* We got error records */
-        evt_data.sel_err.error_reason = error_reason;
-        evt_data.sel_err.error_data   = error_data;
-
-        nfa_cho_cb.p_cback (NFA_CHO_SEL_ERR_EVT, &evt_data);
-        return;
-    }
-
-    if (  (evt_data.select.status == NFA_STATUS_OK)
-        &&(version != NFA_CHO_VERSION)  )
-    {
-        CHO_TRACE_ERROR1 ("Version (0x%02x) not matched", version);
-
-        evt_data.select.status = NFA_STATUS_FAILED;
-    }
-
-    /* parse Alternative Carrier information */
-
-    if (  (evt_data.select.status == NFA_STATUS_OK)
-        &&(NFA_STATUS_OK != nfa_cho_parse_carrier_config (p_ndef_msg,
-                                                          evt_data.select.num_ac_rec,
-                                                          &evt_data.select.ac_rec[0]))  )
-    {
-        CHO_TRACE_ERROR0 ("Failed to parse carrier configuration");
-
-        evt_data.select.status = NFA_STATUS_FAILED;
-    }
-
-    if (evt_data.select.status == NFA_STATUS_OK)
-    {
-        if (evt_data.select.num_ac_rec)
-        {
-            /* passing alternative carrier references */
-            evt_data.select.p_ref_ndef   = NDEF_MsgGetNextRec (p_ndef_msg);
-            *evt_data.select.p_ref_ndef |= NDEF_MB_MASK;
-            evt_data.select.ref_ndef_len = (UINT32)(length - (evt_data.select.p_ref_ndef - p_ndef_msg));
-        }
-        else
-        {
-            evt_data.select.p_ref_ndef   = NULL;
-            evt_data.select.ref_ndef_len = 0;
-        }
-    }
-    else
-    {
-        evt_data.select.num_ac_rec   = 0;
-        evt_data.select.p_ref_ndef   = NULL;
-        evt_data.select.ref_ndef_len = 0;
-    }
-
-    nfa_cho_cb.p_cback (NFA_CHO_SELECT_EVT, &evt_data);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_proc_simplified_format
-**
-** Description      Parse simplified BT OOB/Wifi Message
-**
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfa_cho_proc_simplified_format (UINT32 length, UINT8 *p_ndef_msg)
-{
-    tNFA_CHO_EVT_DATA evt_data;
-
-    CHO_TRACE_DEBUG0 ("nfa_cho_proc_simplified_format ()");
-
-    evt_data.select.status = NFA_STATUS_OK;
-
-    evt_data.select.num_ac_rec = 1;
-
-    evt_data.select.ac_rec[0].cps = NFA_CHO_CPS_UNKNOWN;
-    evt_data.select.ac_rec[0].carrier_data_ref.ref_len = 0;
-    evt_data.select.ac_rec[0].aux_data_ref_count       = 0;
-
-    evt_data.select.p_ref_ndef   = p_ndef_msg;
-    evt_data.select.ref_ndef_len = length;
-
-    nfa_cho_cb.p_cback (NFA_CHO_SELECT_EVT, &evt_data);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_get_msg_type
-**
-** Description      Get handover message type to check collision
-**
-**
-** Returns          NFA_CHO_MSG_HR if it has Handover Request record
-**                  NFA_CHO_MSG_HS if it has Handover Select record
-**                  NFA_CHO_MSG_BT_OOB if it has simplified BT OOB record
-**                  NFA_CHO_MSG_WIFI if it has simplified WiFi record
-**                  NFA_CHO_MSG_UNKNOWN, otherwise
-**
-*******************************************************************************/
-tNFA_CHO_MSG_TYPE nfa_cho_get_msg_type (UINT32 length, UINT8 *p_ndef_msg)
-{
-    UINT8 *p_record;
-
-    CHO_TRACE_DEBUG1 ("nfa_cho_get_msg_type () length=%d", length);
-
-    p_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, hr_rec_type, HR_REC_TYPE_LEN);
-
-    if (p_record)
-    {
-        CHO_TRACE_DEBUG0 ("Found Hr record");
-        return NFA_CHO_MSG_HR;
-    }
-
-    p_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, hs_rec_type, HS_REC_TYPE_LEN);
-
-    if (p_record)
-    {
-        CHO_TRACE_DEBUG0 ("Found Hs record");
-        return NFA_CHO_MSG_HS;
-    }
-
-    p_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_MEDIA,
-                                          p_bt_oob_rec_type, BT_OOB_REC_TYPE_LEN);
-
-    if (p_record)
-    {
-        CHO_TRACE_DEBUG0 ("Found simplified BT OOB record");
-        return NFA_CHO_MSG_BT_OOB;
-    }
-
-    p_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_MEDIA,
-                                          p_wifi_rec_type, (UINT8) strlen ((char *) p_wifi_rec_type));
-
-    if (p_record)
-    {
-        CHO_TRACE_DEBUG0 ("Found simplified WiFi record");
-        return NFA_CHO_MSG_WIFI;
-    }
-
-    CHO_TRACE_ERROR0 ("Failed to find Hr/Hs record");
-
-    return NFA_CHO_MSG_UNKNOWN;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_get_local_device_role
-**
-** Description      Resolve collision and get role of local device
-**
-**
-** Returns          tNFA_CHO_ROLE_TYPE
-**
-*******************************************************************************/
-tNFA_CHO_ROLE_TYPE nfa_cho_get_local_device_role (UINT32 length, UINT8 *p_ndef_msg)
-{
-    UINT16 rx_random_number;
-    UINT8  version;
-
-    CHO_TRACE_DEBUG1 ("nfa_cho_get_local_device_role () length=%d", length);
-
-    /* Get random number in Handover Request record */
-    if (NDEF_OK != nfa_cho_parse_hr_record (p_ndef_msg, &version, &rx_random_number, NULL, NULL))
-    {
-        CHO_TRACE_ERROR0 ("Failed to parse hr record");
-        return NFA_CHO_ROLE_UNDECIDED;
-    }
-
-    CHO_TRACE_DEBUG2 ("tx_random_number=0x%x, rx_random_number=0x%x",
-                       nfa_cho_cb.tx_random_number, rx_random_number);
-
-    if (nfa_cho_cb.tx_random_number == rx_random_number)
-    {
-        return NFA_CHO_ROLE_UNDECIDED;
-    }
-    /* if the least significant bits are same */
-    else if (((nfa_cho_cb.tx_random_number ^ rx_random_number) & 0x0001) == 0)
-    {
-        if (nfa_cho_cb.tx_random_number > rx_random_number)
-            return NFA_CHO_ROLE_SELECTOR;
-        else
-            return NFA_CHO_ROLE_REQUESTER;
-    }
-    else
-    {
-        if (nfa_cho_cb.tx_random_number > rx_random_number)
-            return NFA_CHO_ROLE_REQUESTER;
-        else
-            return NFA_CHO_ROLE_SELECTOR;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_cho_update_random_number
-**
-** Description      Replace random number
-**
-**
-** Returns          tNFA_STATUS
-**
-*******************************************************************************/
-tNFA_STATUS nfa_cho_update_random_number (UINT8 *p_ndef_msg)
-{
-    UINT8 *p_hr_record, *p_hr_payload;
-    UINT8 *p_cr_record, *p_cr_payload;
-    UINT32 hr_payload_len, cr_payload_len;
-    UINT32 temp32;
-
-    CHO_TRACE_DEBUG0 ("nfa_cho_update_random_number ()");
-
-    /* get Handover Request record */
-    p_hr_record = NDEF_MsgGetFirstRecByType (p_ndef_msg, NDEF_TNF_WKT, hr_rec_type, HR_REC_TYPE_LEN);
-
-    if (!p_hr_record)
-    {
-        CHO_TRACE_ERROR0 ("Failed to find Hr record");
-        return NFA_STATUS_FAILED;
-    }
-
-    p_hr_payload = NDEF_RecGetPayload (p_hr_record, &hr_payload_len);
-
-    /* Skip Version */
-    p_hr_payload++;
-    hr_payload_len--;
-
-    /* NDEF message for Collision Resolution record and Alternative Carrier records */
-
-    /* find Collision Resolution record */
-    p_cr_record = NDEF_MsgGetFirstRecByType (p_hr_payload, NDEF_TNF_WKT, cr_rec_type, CR_REC_TYPE_LEN);
-
-    if (!p_cr_record)
-    {
-        CHO_TRACE_ERROR0 ("Failed to find cr record");
-        return NFA_STATUS_FAILED;
-    }
-
-    /* get start of payload in Collision Resolution record */
-    p_cr_payload = NDEF_RecGetPayload (p_cr_record, &cr_payload_len);
-
-    /* Get random number from timer */
-    temp32 = GKI_get_tick_count ();
-    nfa_cho_cb.tx_random_number = (UINT16) ((temp32 >> 16) ^ (temp32));
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
-    if (nfa_cho_cb.test_enabled & NFA_CHO_TEST_RANDOM)
-    {
-        nfa_cho_cb.tx_random_number = nfa_cho_cb.test_random_number;
-    }
-#endif
-
-    CHO_TRACE_DEBUG1 ("tx_random_number = 0x%04x", nfa_cho_cb.tx_random_number);
-
-    /* update random number in payload */
-    UINT16_TO_BE_STREAM (p_cr_payload, nfa_cho_cb.tx_random_number);
-
-    return NFA_STATUS_OK;
-}
diff --git a/src/nfa/dm/nfa_dm_act.c b/src/nfa/dm/nfa_dm_act.c
index 077f066..c7f9a1d 100644
--- a/src/nfa/dm/nfa_dm_act.c
+++ b/src/nfa/dm/nfa_dm_act.c
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the action functions for device manager state
@@ -32,9 +33,12 @@
 #include "nfa_rw_int.h"
 #include "nfa_rw_api.h"
 #include "nfa_p2p_int.h"
-#include "nfa_cho_int.h"
 #include "nci_hmsgs.h"
 
+#if (defined (NFA_CHO_INCLUDED) && (NFA_CHO_INCLUDED==TRUE))
+#include "nfa_cho_int.h"
+#endif
+
 #if (NFC_NFCEE_INCLUDED == TRUE)
 #include "nfa_ee_int.h"
 #include "nfa_hci_int.h"
@@ -42,8 +46,6 @@
 
 #if (defined (NFA_SNEP_INCLUDED) && (NFA_SNEP_INCLUDED==TRUE))
 #include "nfa_snep_int.h"
-#else
-#define nfa_snep_init ()
 #endif
 
 /* This is the timeout value to guarantee disable is performed within reasonable amount of time */
@@ -332,7 +334,15 @@
     case NFC_NFCEE_INFO_REVT:                    /* NFCEE Discover Notification */
     case NFC_EE_ACTION_REVT:                     /* EE Action notification */
     case NFC_NFCEE_MODE_SET_REVT:                /* NFCEE Mode Set response */
+        nfa_ee_proc_evt (event, p_data);
+        break;
+
     case NFC_EE_DISCOVER_REQ_REVT:               /* EE Discover Req notification */
+        if (nfa_dm_is_active() &&
+            (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_DISCOVERY) )
+        {
+            nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+        }
         nfa_ee_proc_evt (event, p_data);
         break;
 #endif
@@ -393,6 +403,7 @@
         nfa_dm_conn_cback_event_notify (NFA_UPDATE_RF_PARAM_RESULT_EVT, &conn_evt);
         break;
 
+
     default:
         break;
     }
@@ -1060,6 +1071,8 @@
         else
         {
             status = NFC_SendData (NFC_RF_CONN_ID, (BT_HDR*) p_data);
+            /* Already freed or NCI layer will free buffer */
+            return FALSE;
         }
     }
 
@@ -1429,15 +1442,6 @@
         nfa_dm_cb.disc_cb.activated_sel_res = 0;
         break;
 
-    case NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT:
-        /* DH initiated deactivation in NFA_DM_RFST_W4_HOST_SELECT */
-        /* No need to notify NFA RW sub-systems                    */
-
-        evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
-        /* notify deactivation to application */
-        nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data);
-        break;
-
     default:
         NFA_TRACE_ERROR0 ("Unexpected event");
         break;
@@ -1568,37 +1572,6 @@
                 nfa_dm_conn_cback_event_notify (NFA_POLL_DISABLED_EVT, &evt_data);
             }
         }
-
-        break;
-
-    case NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT:
-        /* DH initiated deactivation in NFA_DM_RFST_W4_HOST_SELECT */
-        /* No need to notify NFA RW sub-systems                    */
-
-        /* clear stored NFCID/UID */
-        nfa_dm_cb.activated_nfcid_len = 0;
-        /* clean up SEL_RES response */
-        nfa_dm_cb.disc_cb.activated_sel_res = 0;
-
-        evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
-        /* notify deactivation to application */
-        nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data);
-
-        if (!(nfa_dm_cb.flags & NFA_DM_FLAGS_POLLING_ENABLED))
-        {
-            /* deregister discovery callback from NFA DM Discovery */
-            nfa_dm_delete_rf_discover (nfa_dm_cb.poll_disc_handle);
-            nfa_dm_cb.poll_disc_handle = NFA_HANDLE_INVALID;
-
-            /* this is for disable polling */
-            if (nfa_dm_cb.flags & NFA_DM_FLAGS_SEND_POLL_STOP_EVT)
-            {
-                nfa_dm_cb.flags &= ~NFA_DM_FLAGS_SEND_POLL_STOP_EVT;
-
-                evt_data.status = NFA_STATUS_OK;
-                nfa_dm_conn_cback_event_notify (NFA_POLL_DISABLED_EVT, &evt_data);
-            }
-        }
         break;
     }
 }
diff --git a/src/nfa/dm/nfa_dm_api.c b/src/nfa/dm/nfa_dm_api.c
index 139062f..060f54a 100644
--- a/src/nfa/dm/nfa_dm_api.c
+++ b/src/nfa/dm/nfa_dm_api.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  NFA interface for device management
@@ -697,12 +698,19 @@
 ** Description      Send a raw frame over the activated interface with the NFCC.
 **                  This function can only be called after NFC link is activated.
 **
+**                  If the activated interface is a tag and auto-presence check is
+**                  enabled then presence_check_start_delay can be used to indicate
+**                  the delay in msec after which the next auto presence check
+**                  command can be sent. NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY
+**                  can be used as the default value for the delay.
+**
 ** Returns          NFA_STATUS_OK if successfully initiated
 **                  NFA_STATUS_FAILED otherwise
 **
 *******************************************************************************/
 tNFA_STATUS NFA_SendRawFrame (UINT8  *p_raw_data,
-                              UINT16  data_len)
+                              UINT16  data_len,
+                              UINT16  presence_check_start_delay)
 {
     BT_HDR *p_msg;
     UINT16  size;
@@ -718,6 +726,7 @@
     if ((p_msg = (BT_HDR *) GKI_getbuf (size)) != NULL)
     {
         p_msg->event  = NFA_DM_API_RAW_FRAME_EVT;
+        p_msg->layer_specific = presence_check_start_delay;
         p_msg->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE;
         p_msg->len    = data_len;
 
diff --git a/src/nfa/dm/nfa_dm_cfg.c b/src/nfa/dm/nfa_dm_cfg.c
index 58d8ace..344079a 100644
--- a/src/nfa/dm/nfa_dm_cfg.c
+++ b/src/nfa/dm/nfa_dm_cfg.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2011-2012 Broadcom Corporation
+ *  Copyright (C) 2011-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains compile-time configurable constants for NFA modules
@@ -87,5 +88,10 @@
 tNFA_DM_CFG *p_nfa_dm_cfg = (tNFA_DM_CFG *) &nfa_dm_cfg;
 
 
+const tNFA_HCI_CFG nfa_hci_cfg =
+{
+    NFA_HCI_NETWK_INIT_IDLE_TIMEOUT, /* Max HCI Network IDLE time to wait for EE DISC REQ Ntf(s) */
+    NFA_HCI_RESPONSE_TIMEOUT         /* Maximum HCP Response time to any HCP Command */
+};
 
-
+tNFA_HCI_CFG *p_nfa_hci_cfg = (tNFA_HCI_CFG *) &nfa_hci_cfg;
diff --git a/src/nfa/dm/nfa_dm_discover.c b/src/nfa/dm/nfa_dm_discover.c
index 686239f..083c339 100644
--- a/src/nfa/dm/nfa_dm_discover.c
+++ b/src/nfa/dm/nfa_dm_discover.c
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the action functions for device manager discovery
@@ -838,6 +839,48 @@
 
 /*******************************************************************************
 **
+** Function         nfa_dm_disc_force_to_idle
+**
+** Description      Force NFCC to idle state while waiting for deactivation NTF
+**
+** Returns          tNFC_STATUS
+**
+*******************************************************************************/
+static tNFC_STATUS nfa_dm_disc_force_to_idle (void)
+{
+    tNFC_STATUS status = NFC_STATUS_SEMANTIC_ERROR;
+
+    NFA_TRACE_DEBUG1 ("nfa_dm_disc_force_to_idle() disc_flags = 0x%x", nfa_dm_cb.disc_cb.disc_flags);
+
+    if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF) /* do not execute more than one */
+    {
+        nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_NTF);
+        nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP);
+        nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+        status = NFC_Deactivate (NFC_DEACTIVATE_TYPE_IDLE);
+    }
+
+    return (status);
+}
+
+/*******************************************************************************
+**
+** Function         nfa_dm_disc_deact_ntf_timeout_cback
+**
+** Description      Timeout while waiting for deactivation NTF
+**
+** Returns          void
+**
+*******************************************************************************/
+static void nfa_dm_disc_deact_ntf_timeout_cback (TIMER_LIST_ENT *p_tle)
+{
+    NFA_TRACE_ERROR0 ("nfa_dm_disc_deact_ntf_timeout_cback()");
+
+    nfa_dm_disc_force_to_idle();
+}
+
+/*******************************************************************************
+**
 ** Function         nfa_dm_send_deactivate_cmd
 **
 ** Description      Send deactivate command to NFCC, if needed.
@@ -859,13 +902,27 @@
         nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF);
 
         status = NFC_Deactivate (deactivate_type);
+
+        if (!nfa_dm_cb.disc_cb.tle.in_use)
+        {
+            nfa_dm_cb.disc_cb.tle.p_cback = (TIMER_CBACK *)nfa_dm_disc_deact_ntf_timeout_cback;
+            nfa_sys_start_timer (&nfa_dm_cb.disc_cb.tle, 0, NFA_DM_DISC_TIMEOUT_W4_DEACT_NTF);
+        }
     }
-    else if ((w4_flags == NFA_DM_DISC_FLAGS_W4_NTF) && (deactivate_type == NFC_DEACTIVATE_TYPE_IDLE))
+    else
     {
-        nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_NTF);
-        nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP);
-        nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY);
-        status = NFC_Deactivate (deactivate_type);
+        if (deactivate_type == NFC_DEACTIVATE_TYPE_SLEEP)
+        {
+            status = NFC_STATUS_SEMANTIC_ERROR;
+        }
+        else if (nfa_dm_cb.disc_cb.tle.in_use)
+        {
+            status = NFC_STATUS_OK;
+        }
+        else
+        {
+            status = nfa_dm_disc_force_to_idle ();
+        }
     }
 
     return status;
@@ -1056,6 +1113,9 @@
         /* RF discovery is started but there is no valid technology or protocol to discover */
         nfa_dm_disc_notify_started (NFA_STATUS_OK);
     }
+
+    /* reset hanlde of activated sub-module */
+    nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID;
 }
 
 /*******************************************************************************
@@ -1256,7 +1316,8 @@
                                              tNFC_DISCOVER *p_data)
 {
     tNFA_HANDLE         xx;
-    tNFA_DM_RF_DISC_EVT disc_evt;
+    tNFA_CONN_EVT_DATA  evt_data;
+    tNFC_DISCOVER       disc_data;
 
     NFA_TRACE_DEBUG1 ("nfa_dm_disc_notify_deactivation (): activated_handle=%d",
                        nfa_dm_cb.disc_cb.activated_handle);
@@ -1270,38 +1331,62 @@
     if (sm_event == NFA_DM_RF_DEACTIVATE_RSP)
     {
         /*
-        ** Activation has been aborted by upper layer in NFA_DM_RFST_W4_HOST_SELECT
-        ** or NFA_DM_RFST_LISTEN_SLEEP
+        ** Activation has been aborted by upper layer in NFA_DM_RFST_W4_ALL_DISCOVERIES or NFA_DM_RFST_W4_HOST_SELECT
+        ** Deactivation by upper layer or RF link loss in NFA_DM_RFST_LISTEN_SLEEP
+        ** No sub-module is activated at this state.
         */
-        disc_evt = NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT;
-    }
-    else
-    {
-        /* Received deactivation NTF */
-        disc_evt = NFA_DM_RF_DISC_DEACTIVATED_EVT;
-    }
 
-    if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use)
-    {
-        if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)
-            (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (disc_evt, p_data);
+        if (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_SLEEP)
+        {
+            if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use)
+            {
+                if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)
+                {
+                    disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE;
+                    (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, &disc_data);
+                }
+            }
+            else
+            {
+                /* let each sub-module handle deactivation */
+                for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++)
+                {
+                    if (  (nfa_dm_cb.disc_cb.entry[xx].in_use)
+                        &&(nfa_dm_cb.disc_cb.entry[xx].selected_disc_mask & NFA_DM_DISC_MASK_LISTEN)  )
+                    {
+                        disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE;
+                        (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, &disc_data);
+                    }
+                }
+            }
+        }
+        else if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING))
+        {
+            evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
+            /* notify deactivation to application */
+            nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data);
+        }
     }
     else
     {
         /* notify event to activated module */
-        xx = nfa_dm_cb.disc_cb.activated_handle;
-
-        if (  (sm_event == NFA_DM_RF_DEACTIVATE_RSP)
-            ||(p_data->deactivate.type == NFC_DEACTIVATE_TYPE_IDLE)  )
+        if (nfa_dm_cb.disc_cb.excl_disc_entry.in_use)
         {
-            /* Don't remove handle in NFA_DM_RFST_W4_HOST_SELECT or NFA_DM_RFST_LISTEN_SLEEP */
-            nfa_dm_cb.disc_cb.activated_handle = NFA_HANDLE_INVALID;
+            if (nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)
+            {
+                disc_data.deactivate.type = NFA_DEACTIVATE_TYPE_IDLE;
+                (*(nfa_dm_cb.disc_cb.excl_disc_entry.p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data);
+            }
         }
-
-        if ((xx < NFA_DM_DISC_NUM_ENTRIES) && (nfa_dm_cb.disc_cb.entry[xx].in_use))
+        else
         {
-            if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)
-                (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (disc_evt, p_data);
+            xx = nfa_dm_cb.disc_cb.activated_handle;
+
+            if ((xx < NFA_DM_DISC_NUM_ENTRIES) && (nfa_dm_cb.disc_cb.entry[xx].in_use))
+            {
+                if (nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)
+                    (*(nfa_dm_cb.disc_cb.entry[xx].p_disc_cback)) (NFA_DM_RF_DISC_DEACTIVATED_EVT, p_data);
+            }
         }
     }
 
@@ -1310,6 +1395,7 @@
     nfa_dm_cb.disc_cb.activated_rf_disc_id   = 0;
     nfa_dm_cb.disc_cb.activated_rf_interface = 0;
     nfa_dm_cb.disc_cb.activated_protocol     = NFA_PROTOCOL_INVALID;
+    nfa_dm_cb.disc_cb.activated_handle       = NFA_HANDLE_INVALID;
 }
 
 /*******************************************************************************
@@ -1356,14 +1442,16 @@
 {
     if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING)
     {
+        nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_CHECKING;
+
         /* notify RW module that presence checking is finished */
         nfa_rw_handle_presence_check_rsp (status);
-        nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_CHECKING;
+
         if (nfa_dm_cb.presence_check_deact_pending)
         {
             nfa_dm_cb.presence_check_deact_pending = FALSE;
             nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD,
-                                          (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.presence_check_deact_type);
+                                   (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.presence_check_deact_type);
         }
     }
 }
@@ -1415,7 +1503,8 @@
                        nfa_dm_cb.disc_cb.disc_state, new_state, nfa_dm_cb.disc_cb.disc_flags);
 #endif
     nfa_dm_cb.disc_cb.disc_state = new_state;
-    if (new_state == NFA_DM_RFST_IDLE)
+    if (  (new_state == NFA_DM_RFST_IDLE)
+        &&(!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP))  ) /* not error recovering */
     {
         if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING)
         {
@@ -1523,15 +1612,53 @@
         break;
 
     case NFA_DM_RF_DEACTIVATE_RSP:
-        /* restart discovery */
         nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
-        if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_DISABLING)
+
+        /* if NFCC goes to idle successfully */
+        if (p_data->nfc_discover.status == NFC_STATUS_OK)
         {
-            nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_DISABLING;
-            nfa_sys_check_disabled ();
+            /* if DH forced to go idle while waiting for deactivation NTF */
+            if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
+            {
+                nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
+
+                /* check any pending flags like NFA_DM_DISC_FLAGS_STOPPING or NFA_DM_DISC_FLAGS_DISABLING */
+                nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+                /* check if need to restart discovery after resync discovery state with NFCC */
+                nfa_dm_start_rf_discover ();
+            }
+            /* Otherwise, deactivating when getting unexpected activation */
         }
-        else
-            nfa_dm_start_rf_discover ();
+        /* Otherwise, wait for deactivation NTF */
+        break;
+
+    case NFA_DM_RF_DEACTIVATE_NTF:
+        /* if NFCC sent this after NFCC had rejected deactivate CMD to idle while deactivating */
+        if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
+        {
+            if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY)
+            {
+                /* stop discovery */
+                nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_RSP;
+                NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+            }
+            else
+            {
+                nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
+                /* check any pending flags like NFA_DM_DISC_FLAGS_STOPPING or NFA_DM_DISC_FLAGS_DISABLING */
+                nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+                /* check if need to restart discovery after resync discovery state with NFCC */
+                nfa_dm_start_rf_discover ();
+            }
+        }
+        /* Otherwise, deactivated when received unexpected activation in idle state */
+        nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF;
+        break;
+
+    case NFA_DM_RF_INTF_ACTIVATED_NTF:
+        /* unexpected activation, deactivate to idle */
+        nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF);
+        NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
         break;
 
     case NFA_DM_LP_LISTEN_CMD:
@@ -1568,38 +1695,76 @@
         break;
     case NFA_DM_RF_DEACTIVATE_RSP:
         nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
-        nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
-        nfa_dm_start_rf_discover ();
+
+        /* if it's not race condition between deactivate CMD and activate NTF */
+        if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
+        {
+            /* do not notify deactivated to idle in RF discovery state
+            ** because it is internal or stopping RF discovery
+            */
+
+            /* there was no activation while waiting for deactivation RSP */
+            nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+            nfa_dm_start_rf_discover ();
+        }
         break;
     case NFA_DM_RF_DISCOVER_NTF:
         nfa_dm_disc_new_state (NFA_DM_RFST_W4_ALL_DISCOVERIES);
         nfa_dm_notify_discovery (p_data);
         break;
     case NFA_DM_RF_INTF_ACTIVATED_NTF:
-        if (p_data->nfc_discover.activate.intf_param.type == NFC_INTERFACE_EE_DIRECT_RF)
+        if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)
         {
-            nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE);
-        }
-        else if (p_data->nfc_discover.activate.rf_tech_param.mode & 0x80)
-        {
-            /* Listen mode */
-            nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE);
+            NFA_TRACE_DEBUG0 ("RF Activated while waiting for deactivation RSP");
+            /* it's race condition. DH has to wait for deactivation NTF */
+            nfa_dm_cb.disc_cb.disc_flags |= NFA_DM_DISC_FLAGS_W4_NTF;
         }
         else
         {
-            /* Poll mode */
-            nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE);
-        }
+            if (p_data->nfc_discover.activate.intf_param.type == NFC_INTERFACE_EE_DIRECT_RF)
+            {
+                nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE);
+            }
+            else if (p_data->nfc_discover.activate.rf_tech_param.mode & 0x80)
+            {
+                /* Listen mode */
+                nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE);
+            }
+            else
+            {
+                /* Poll mode */
+                nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE);
+            }
 
-        if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED)
-        {
-            NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf");
+            if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED)
+            {
+                NFA_TRACE_DEBUG0 ("Not matched, restart discovery after receiving deactivate ntf");
 
-            /* after receiving deactivate event, restart discovery */
-            NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+                /* after receiving deactivate event, restart discovery */
+                nfa_dm_cb.disc_cb.disc_flags |= (NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF);
+                NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+            }
         }
         break;
 
+    case NFA_DM_RF_DEACTIVATE_NTF:
+        /* if there was race condition between deactivate CMD and activate NTF */
+        if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF)
+        {
+            /* race condition is resolved */
+            nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF;
+
+            if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP))
+            {
+                /* do not notify deactivated to idle in RF discovery state
+                ** because it is internal or stopping RF discovery
+                */
+
+                nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+                nfa_dm_start_rf_discover ();
+            }
+        }
+        break;
     case NFA_DM_LP_LISTEN_CMD:
         break;
     case NFA_DM_CORE_INTF_ERROR_NTF:
@@ -1635,16 +1800,23 @@
         break;
     case NFA_DM_RF_DEACTIVATE_RSP:
         nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
+        /* notify exiting from w4 all discoverie state */
+        nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover));
+
         nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
         nfa_dm_start_rf_discover ();
         break;
     case NFA_DM_RF_DISCOVER_NTF:
-        /* Notification Type = NCI_DISCOVER_NTF_LAST or NCI_DISCOVER_NTF_LAST_ABORT */
-        if (p_data->nfc_discover.result.more != NCI_DISCOVER_NTF_MORE)
+        /* if deactivate CMD is already sent then ignore discover NTF */
+        if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP))
         {
-            nfa_dm_disc_new_state (NFA_DM_RFST_W4_HOST_SELECT);
+            /* Notification Type = NCI_DISCOVER_NTF_LAST or NCI_DISCOVER_NTF_LAST_ABORT */
+            if (p_data->nfc_discover.result.more != NCI_DISCOVER_NTF_MORE)
+            {
+                nfa_dm_disc_new_state (NFA_DM_RFST_W4_HOST_SELECT);
+            }
+            nfa_dm_notify_discovery (p_data);
         }
-        nfa_dm_notify_discovery (p_data);
         break;
     case NFA_DM_RF_INTF_ACTIVATED_NTF:
         /*
@@ -1722,14 +1894,8 @@
         nfa_dm_disc_new_state (NFA_DM_RFST_POLL_ACTIVE);
         if (old_pres_check_flag)
         {
-            /* notify RW module of presence of tag */
-            nfa_rw_handle_presence_check_rsp (NFC_STATUS_OK);
-            if (nfa_dm_cb.presence_check_deact_pending)
-            {
-                nfa_dm_cb.presence_check_deact_pending = FALSE;
-                nfa_dm_disc_sm_execute (NFA_DM_RF_DEACTIVATE_CMD,
-                                       (tNFA_DM_RF_DISC_DATA *) &nfa_dm_cb.presence_check_deact_type);
-            }
+            /* Handle presence check success: notify RW module of presence of tag; if deactivation is pending then deactivate  */
+            nfa_dm_disc_end_presence_check (NFC_STATUS_OK);
         }
 
         else if (nfa_dm_disc_notify_activation (&(p_data->nfc_discover)) == NFA_STATUS_FAILED)
@@ -1756,10 +1922,11 @@
         break;
     case NFA_DM_RF_DEACTIVATE_RSP:
         nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
-        nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
-        nfa_dm_start_rf_discover ();
         /* notify exiting from host select state */
         nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover));
+
+        nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+        nfa_dm_start_rf_discover ();
         break;
 
     case NFA_DM_CORE_INTF_ERROR_NTF:
@@ -1781,12 +1948,6 @@
         /* performing presence check for unknow protocol and exception conditions happened
          * clear presence check information and report failure */
         nfa_dm_disc_end_presence_check (NFC_STATUS_FAILED);
-        if (nfa_dm_cb.presence_check_deact_pending)
-        {
-            nfa_dm_cb.presence_check_deact_pending = FALSE;
-
-            NFC_Deactivate (nfa_dm_cb.presence_check_deact_type);
-        }
     }
 }
 
@@ -1806,6 +1967,7 @@
     tNFA_DM_DISC_FLAGS  old_pres_check_flag = (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_CHECKING);
     BOOLEAN             pres_check_event = FALSE;
     BOOLEAN             pres_check_event_processed = FALSE;
+    tNFC_DEACTIVATE_DEVT deact;
 
     switch (event)
     {
@@ -1827,10 +1989,38 @@
         nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
         /* register callback to get interface error NTF */
         NFC_SetStaticRfCback (nfa_dm_disc_data_cback);
+
+        if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
+        {
+            /* it's race condition. received deactivate NTF before receiving RSP */
+
+            deact.status = NFC_STATUS_OK;
+            deact.type   = NFC_DEACTIVATE_TYPE_IDLE;
+            deact.is_ntf = TRUE;
+            nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact);
+
+            /* NFCC is in IDLE state */
+            nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+            nfa_dm_start_rf_discover ();
+        }
         break;
     case NFA_DM_RF_DEACTIVATE_NTF:
-        pres_check_event    = TRUE;
         nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF;
+
+        nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle);
+
+        if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)
+        {
+            /* it's race condition. received deactivate NTF before receiving RSP */
+            /* notify deactivation after receiving deactivate RSP */
+            NFA_TRACE_DEBUG0 ("Rx deactivate NTF while waiting for deactivate RSP");
+            break;
+        }
+
+        pres_check_event    = TRUE;
+
+        nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
+
         if (  (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP)
             ||(p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF)  )
         {
@@ -1841,14 +2031,12 @@
                 /* process pending deactivate request */
                 if (nfa_dm_cb.presence_check_deact_pending)
                 {
-                    nfa_dm_cb.presence_check_deact_pending = FALSE;
                     /* notify RW module that presence checking is finished */
+                    /* if deactivation is pending then deactivate  */
                     nfa_dm_disc_end_presence_check (NFC_STATUS_OK);
 
-                    if (nfa_dm_cb.presence_check_deact_type == NFC_DEACTIVATE_TYPE_IDLE)
-                        NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
-                    else
-                        nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
+                    /* Notify NFA RW sub-systems because NFA_DM_RF_DEACTIVATE_RSP will not call this function */
+                    nfa_rw_proc_disc_evt (NFA_DM_RF_DISC_DEACTIVATED_EVT, NULL, TRUE);
                 }
                 else
                 {
@@ -1875,7 +2063,6 @@
                 NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
             }
         }
-        nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
         break;
 
     case NFA_DM_CORE_INTF_ERROR_NTF:
@@ -1893,12 +2080,6 @@
         /* performing presence check for unknow protocol and exception conditions happened
          * clear presence check information and report failure */
         nfa_dm_disc_end_presence_check (NFC_STATUS_FAILED);
-        if (nfa_dm_cb.presence_check_deact_pending)
-        {
-            nfa_dm_cb.presence_check_deact_pending = FALSE;
-
-            NFC_Deactivate (nfa_dm_cb.presence_check_deact_type);
-        }
     }
 }
 
@@ -1914,6 +2095,8 @@
 static void nfa_dm_disc_sm_listen_active (tNFA_DM_RF_DISC_SM_EVENT event,
                                           tNFA_DM_RF_DISC_DATA     *p_data)
 {
+    tNFC_DEACTIVATE_DEVT deact;
+
     switch (event)
     {
     case NFA_DM_RF_DEACTIVATE_CMD:
@@ -1921,32 +2104,56 @@
         break;
     case NFA_DM_RF_DEACTIVATE_RSP:
         nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
-        break;
-    case NFA_DM_RF_DEACTIVATE_NTF:
-        /* clear both W4_RSP and W4_NTF because of race condition between deactivat CMD and link loss */
-        nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF);
-
-        if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE)
+        if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
         {
+            /* it's race condition. received deactivate NTF before receiving RSP */
+
+            deact.status = NFC_STATUS_OK;
+            deact.type   = NFC_DEACTIVATE_TYPE_IDLE;
+            deact.is_ntf = TRUE;
+            nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, (tNFC_DISCOVER*)&deact);
+
+            /* NFCC is in IDLE state */
             nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
             nfa_dm_start_rf_discover ();
         }
-        else if (  (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP)
-                 ||(p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF)  )
+        break;
+    case NFA_DM_RF_DEACTIVATE_NTF:
+        nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF;
+
+        nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle);
+
+        if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_RSP)
         {
-            nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_SLEEP);
+            /* it's race condition. received deactivate NTF before receiving RSP */
+            /* notify deactivation after receiving deactivate RSP */
+            NFA_TRACE_DEBUG0 ("Rx deactivate NTF while waiting for deactivate RSP");
         }
-        else if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY)
+        else
         {
-            /* Discovery */
-            nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY);
-            if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING)
+            nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
+
+            if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE)
             {
-                /* stop discovery */
-                NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+                nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+                nfa_dm_start_rf_discover ();
+            }
+            else if (  (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP)
+                     ||(p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF)  )
+            {
+                nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_SLEEP);
+            }
+            else if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_DISCOVERY)
+            {
+                /* Discovery */
+                nfa_dm_disc_new_state (NFA_DM_RFST_DISCOVERY);
+                if (nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_STOPPING)
+                {
+                    /* stop discovery */
+                    NFC_Deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+                }
             }
         }
-        nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
         break;
 
     case NFA_DM_CORE_INTF_ERROR_NTF:
@@ -1973,19 +2180,33 @@
     {
     case NFA_DM_RF_DEACTIVATE_CMD:
         nfa_dm_send_deactivate_cmd (p_data->deactivate_type);
+
+        /* if deactivate type is not discovery then NFCC will not sent deactivation NTF */
+        if (p_data->deactivate_type != NFA_DEACTIVATE_TYPE_DISCOVERY)
+        {
+            nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_NTF;
+            nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle);
+        }
         break;
     case NFA_DM_RF_DEACTIVATE_RSP:
         nfa_dm_cb.disc_cb.disc_flags &= ~NFA_DM_DISC_FLAGS_W4_RSP;
         /* if deactivate type in CMD was IDLE */
         if (!(nfa_dm_cb.disc_cb.disc_flags & NFA_DM_DISC_FLAGS_W4_NTF))
         {
-            nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
             nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover));
+
+            nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
+            nfa_dm_start_rf_discover ();
         }
         break;
     case NFA_DM_RF_DEACTIVATE_NTF:
         /* clear both W4_RSP and W4_NTF because of race condition between deactivat CMD and link loss */
         nfa_dm_cb.disc_cb.disc_flags &= ~(NFA_DM_DISC_FLAGS_W4_RSP|NFA_DM_DISC_FLAGS_W4_NTF);
+        nfa_sys_stop_timer (&nfa_dm_cb.disc_cb.tle);
+
+        /* there is no active protocol in this state, so broadcast to all by using NFA_DM_RF_DEACTIVATE_RSP */
+        nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_RSP, &(p_data->nfc_discover));
+
         if (p_data->nfc_discover.deactivate.type == NFC_DEACTIVATE_TYPE_IDLE)
         {
             nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
@@ -2001,7 +2222,6 @@
             nfa_dm_disc_new_state (NFA_DM_RFST_IDLE);
             nfa_dm_start_rf_discover ();
         }
-        nfa_dm_disc_notify_deactivation (NFA_DM_RF_DEACTIVATE_NTF, &(p_data->nfc_discover));
         break;
     case NFA_DM_RF_INTF_ACTIVATED_NTF:
         nfa_dm_disc_new_state (NFA_DM_RFST_LISTEN_ACTIVE);
diff --git a/src/nfa/dm/nfa_dm_main.c b/src/nfa/dm/nfa_dm_main.c
index 6829143..b63bce7 100644
--- a/src/nfa/dm/nfa_dm_main.c
+++ b/src/nfa/dm/nfa_dm_main.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the main implementation file for the NFA device manager.
diff --git a/src/nfa/dm/nfa_dm_ndef.c b/src/nfa/dm/nfa_dm_ndef.c
index c3e63b2..e5528ec 100644
--- a/src/nfa/dm/nfa_dm_ndef.c
+++ b/src/nfa/dm/nfa_dm_ndef.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  Handle ndef messages
@@ -266,7 +267,7 @@
             {
                 /* This is a handler for a specific URI type */
                 /* Check if this recurd is WKT URI */
-                if ((type_name_len == 1) && (*p_type_name == 'U'))
+                if ((p_payload) && (type_name_len == 1) && (*p_type_name == 'U'))
                 {
                     /* Check if URI prefix abrieviation matches */
                     if ((payload_len>1) && (p_payload[0] == p_cb->p_ndef_handler[i]->uri_id))
diff --git a/src/nfa/ee/nfa_ee_act.c b/src/nfa/ee/nfa_ee_act.c
index ebe7a7b..78400ed 100644
--- a/src/nfa/ee/nfa_ee_act.c
+++ b/src/nfa/ee/nfa_ee_act.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the action functions for NFA-EE
@@ -82,7 +83,7 @@
 
 static void nfa_ee_check_restore_complete(void);
 static void nfa_ee_report_discover_req_evt(void);
-
+static void nfa_ee_build_discover_req_evt (tNFA_EE_DISCOVER_REQ *p_evt_data);
 /*******************************************************************************
 **
 ** Function         nfa_ee_conn_cback
@@ -296,15 +297,19 @@
         for (xx = 0; xx < NFA_EE_MAX_CBACKS; xx++)
         {
             if (nfa_ee_cb.p_ee_cback[xx] == NULL)
-        {
-            nfa_ee_cb.p_ee_cback[xx]    = p_cback;
-            evt_data.ee_register        = NFA_STATUS_OK;
-            break;
+            {
+                nfa_ee_cb.p_ee_cback[xx]    = p_cback;
+                evt_data.ee_register        = NFA_STATUS_OK;
+                break;
+            }
         }
     }
-    }
     /* This callback is verified (not NULL) in NFA_EeRegister() */
     (*p_cback)(NFA_EE_REGISTER_EVT, &evt_data);
+
+    /* report NFCEE Discovery Request collected during booting up */
+    nfa_ee_build_discover_req_evt (&evt_data.discover_req);
+    (*p_cback)(NFA_EE_DISCOVER_REQ_EVT, &evt_data);
 }
 
 /*******************************************************************************
@@ -703,13 +708,13 @@
             {
                 nfa_sys_cback_notify_enable_complete (NFA_ID_EE);
                 if (nfa_ee_cb.p_enable_cback)
-                    (*nfa_ee_cb.p_enable_cback)(FALSE);
+                    (*nfa_ee_cb.p_enable_cback)(NFA_EE_DISC_STS_ON);
             }
             else if ((nfa_ee_cb.em_state == NFA_EE_EM_STATE_RESTORING) && (nfa_ee_cb.ee_flags & NFA_EE_FLAG_NOTIFY_HCI) )
             {
                 nfa_ee_cb.ee_flags   &= ~NFA_EE_FLAG_NOTIFY_HCI;
                 if (nfa_ee_cb.p_enable_cback)
-                    (*nfa_ee_cb.p_enable_cback)(FALSE);
+                    (*nfa_ee_cb.p_enable_cback)(NFA_EE_DISC_STS_ON);
             }
         }
 
@@ -1033,6 +1038,7 @@
             p_cb->ecb_flags &= ~NFA_EE_ECB_FLAGS_ORDER;
             nfa_ee_report_discover_req_evt();
         }
+
     }
 
     if (new_em_state != NFA_EE_EM_STATE_MAX)
@@ -1098,6 +1104,52 @@
 
 /*******************************************************************************
 **
+** Function         nfa_ee_build_discover_req_evt
+**
+** Description      Build NFA_EE_DISCOVER_REQ_EVT for all active NFCEE
+**
+** Returns          void
+**
+*******************************************************************************/
+static void nfa_ee_build_discover_req_evt (tNFA_EE_DISCOVER_REQ *p_evt_data)
+{
+    tNFA_EE_ECB           *p_cb;
+    tNFA_EE_DISCOVER_INFO *p_info;
+    UINT8                 xx;
+
+    if (!p_evt_data)
+        return;
+
+    p_evt_data->num_ee = 0;
+    p_cb               = nfa_ee_cb.ecb;
+    p_info             = p_evt_data->ee_disc_info;
+
+    for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++)
+    {
+        if (  (p_cb->ee_status & NFA_EE_STATUS_INT_MASK)
+            ||(p_cb->ee_status != NFA_EE_STATUS_ACTIVE)
+            ||((p_cb->ecb_flags & NFA_EE_ECB_FLAGS_DISC_REQ) == 0)  )
+        {
+            continue;
+        }
+        p_info->ee_handle       = (tNFA_HANDLE)p_cb->nfcee_id | NFA_HANDLE_GROUP_EE;
+        p_info->la_protocol     = p_cb->la_protocol;
+        p_info->lb_protocol     = p_cb->lb_protocol;
+        p_info->lf_protocol     = p_cb->lf_protocol;
+        p_info->lbp_protocol    = p_cb->lbp_protocol;
+        p_evt_data->num_ee++;
+        p_info++;
+
+        NFA_TRACE_DEBUG6 ("[%d] ee_handle:0x%x, listen protocol A:%d, B:%d, F:%d, BP:%d",
+                          p_evt_data->num_ee, p_cb->nfcee_id,
+                          p_cb->la_protocol, p_cb->lb_protocol, p_cb->lf_protocol, p_cb->lbp_protocol);
+    }
+
+    p_evt_data->status     = NFA_STATUS_OK;
+}
+
+/*******************************************************************************
+**
 ** Function         nfa_ee_report_discover_req_evt
 **
 ** Description      Report NFA_EE_DISCOVER_REQ_EVT for all active NFCEE
@@ -1108,9 +1160,10 @@
 static void nfa_ee_report_discover_req_evt(void)
 {
     tNFA_EE_DISCOVER_REQ    evt_data;
-    tNFA_EE_DISCOVER_INFO   *p_info;
-    UINT8                   xx;
-    tNFA_EE_ECB  *p_cb = nfa_ee_cb.ecb;
+
+    if (nfa_ee_cb.p_enable_cback)
+        (*nfa_ee_cb.p_enable_cback) (NFA_EE_DISC_STS_REQ);
+
 
     /* if this is restoring NFCC */
     if (!nfa_dm_is_active ())
@@ -1119,28 +1172,7 @@
         return;
     }
 
-    evt_data.num_ee = 0;
-    p_cb            = nfa_ee_cb.ecb;
-    p_info          = evt_data.ee_disc_info;
-    for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++)
-    {
-        if ((p_cb->ee_status & NFA_EE_STATUS_INT_MASK) || (p_cb->ee_status != NFA_EE_STATUS_ACTIVE) || ((p_cb->ecb_flags & NFA_EE_ECB_FLAGS_DISC_REQ) == 0))
-        {
-            continue;
-        }
-        p_info->la_protocol     = p_cb->la_protocol;
-        p_info->lb_protocol     = p_cb->lb_protocol;
-        p_info->lf_protocol     = p_cb->lf_protocol;
-        p_info->lbp_protocol    = p_cb->lbp_protocol;
-        evt_data.num_ee++;
-        p_info++;
-
-        NFA_TRACE_DEBUG6 ("[%d] ee_handle:0x%x, listen protocol A:%d, B:%d, F:%d, BP:%d",
-                          evt_data.num_ee, p_cb->nfcee_id,
-                          p_cb->la_protocol, p_cb->lb_protocol, p_cb->lf_protocol, p_cb->lbp_protocol);
-    }
-
-    evt_data.status     = NFA_STATUS_OK;
+    nfa_ee_build_discover_req_evt (&evt_data);
     nfa_ee_report_event(NULL, NFA_EE_DISCOVER_REQ_EVT, (tNFA_EE_CBACK_DATA *)&evt_data);
 }
 
@@ -1293,7 +1325,20 @@
             p_cb->p_ee_cback = NULL;
             p_cb->conn_id    = 0;
             if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_DISABLING)
-                nfa_ee_sys_disable();
+            {
+                if (nfa_ee_cb.ee_flags & NFA_EE_FLAG_WAIT_DISCONN)
+                {
+                    if (nfa_ee_cb.num_ee_expecting)
+                    {
+                        nfa_ee_cb.num_ee_expecting--;
+                    }
+                }
+                if (nfa_ee_cb.num_ee_expecting == 0)
+                {
+                    nfa_ee_cb.ee_flags &= ~NFA_EE_FLAG_WAIT_DISCONN;
+                    nfa_ee_check_disable();
+                }
+            }
             break;
 
         case NFC_DATA_CEVT:
@@ -1402,29 +1447,31 @@
                 p_cb->la_protocol, p_cb->lb_protocol, p_cb->lf_protocol);
         }
         else
+        {
+            if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_A)
             {
-                if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_A)
-                {
-                    p_cb->la_protocol = 0;
-                }
-                else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B)
-                {
-                    p_cb->lb_protocol = 0;
-                }
-                else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_F)
-                {
-                    p_cb->lf_protocol = 0;
-                }
-                else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B_PRIME)
-                {
-                    p_cb->lbp_protocol = 0;
+                p_cb->la_protocol = 0;
             }
+            else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B)
+            {
+                p_cb->lb_protocol = 0;
+            }
+            else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_F)
+            {
+                p_cb->lf_protocol = 0;
+            }
+            else if (p_cbk->info[xx].tech_n_mode == NFC_DISCOVERY_TYPE_LISTEN_B_PRIME)
+            {
+                p_cb->lbp_protocol = 0;
+        }
         }
     }
 
+
     /* Report NFA_EE_DISCOVER_REQ_EVT for all active NFCEE */
     if ((p_cb->ecb_flags & NFA_EE_ECB_FLAGS_ORDER) == 0)
         nfa_ee_report_discover_req_evt();
+
 }
 
 /*******************************************************************************
@@ -1771,7 +1818,7 @@
 {
     NFC_NfceeDiscover(FALSE);
     if (nfa_ee_cb.p_enable_cback)
-        (*nfa_ee_cb.p_enable_cback)(TRUE);
+        (*nfa_ee_cb.p_enable_cback)(NFA_EE_DISC_STS_OFF);
 }
 
 /*******************************************************************************
diff --git a/src/nfa/ee/nfa_ee_api.c b/src/nfa/ee/nfa_ee_api.c
index dceacec..efb6907 100644
--- a/src/nfa/ee/nfa_ee_api.c
+++ b/src/nfa/ee/nfa_ee_api.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  NFA interface to NFCEE - API functions
diff --git a/src/nfa/ee/nfa_ee_main.c b/src/nfa/ee/nfa_ee_main.c
index 6b0c289..8af4290 100644
--- a/src/nfa/ee/nfa_ee_main.c
+++ b/src/nfa/ee/nfa_ee_main.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the main implementation file for the NFA EE.
@@ -233,7 +234,8 @@
                 p_cb->ecb_flags    |= NFA_EE_ECB_FLAGS_RESTORE;
             }
         }
-        nfa_ee_cb.em_state      = NFA_EE_EM_STATE_RESTORING;
+        nfa_ee_cb.em_state          = NFA_EE_EM_STATE_RESTORING;
+        nfa_ee_cb.num_ee_expecting  = 0;
         if (nfa_sys_is_register (NFA_ID_HCI))
         {
             nfa_ee_cb.ee_flags   |= NFA_EE_FLAG_WAIT_HCI;
@@ -435,6 +437,7 @@
     UINT32  xx;
     tNFA_EE_ECB *p_cb;
     tNFA_EE_MSG     msg;
+
     NFA_TRACE_DEBUG0 ("nfa_ee_sys_disable ()");
 
     nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLED;
@@ -448,6 +451,7 @@
         }
     }
 
+    nfa_ee_cb.num_ee_expecting  = 0;
     p_cb = nfa_ee_cb.ecb;
     for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++)
     {
@@ -458,7 +462,7 @@
                 /* Disconnect NCI connection on graceful shutdown */
                 msg.disconnect.p_cb = p_cb;
                 nfa_ee_api_disconnect (&msg);
-                nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLING;
+                nfa_ee_cb.num_ee_expecting++;
             }
             else
             {
@@ -469,11 +473,18 @@
             }
         }
     }
+
+    if (nfa_ee_cb.num_ee_expecting)
+    {
+        nfa_ee_cb.ee_flags |= NFA_EE_FLAG_WAIT_DISCONN;
+        nfa_ee_cb.em_state  = NFA_EE_EM_STATE_DISABLING;
+    }
+
+
     nfa_sys_stop_timer (&nfa_ee_cb.timer);
     nfa_sys_stop_timer (&nfa_ee_cb.discv_timer);
 
     /* If Application initiated NFCEE discovery, fake/report the event */
-    nfa_ee_cb.num_ee_expecting = 0;
     nfa_ee_report_disc_done (FALSE);
 
     /* deregister message handler on NFA SYS */
@@ -481,6 +492,24 @@
         nfa_sys_deregister (NFA_ID_EE);
 
 }
+
+/*******************************************************************************
+**
+** Function         nfa_ee_check_disable
+**
+** Description      Check if it is safe to move to disabled state
+**
+** Returns          None
+**
+*******************************************************************************/
+void nfa_ee_check_disable (void)
+{
+    if (!(nfa_ee_cb.ee_flags & NFA_EE_FLAG_WAIT_DISCONN))
+    {
+        nfa_ee_cb.em_state = NFA_EE_EM_STATE_DISABLED;
+        nfa_sys_deregister (NFA_ID_EE);
+    }
+}
 /*******************************************************************************
 **
 ** Function         nfa_ee_reg_cback_enable_done
diff --git a/src/nfa/hci/nfa_hci_act.c b/src/nfa/hci/nfa_hci_act.c
index f89061c..0622cc3 100644
--- a/src/nfa/hci/nfa_hci_act.c
+++ b/src/nfa/hci/nfa_hci_act.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the action functions for the NFA HCI.
@@ -28,6 +29,7 @@
 #include "nfa_sys_int.h"
 #include "nfa_hci_api.h"
 #include "nfa_hci_int.h"
+#include "nfa_dm_int.h"
 #include "nfa_nv_co.h"
 #include "nfa_mem_co.h"
 #include "nfa_hci_defs.h"
@@ -71,7 +73,6 @@
     BT_HDR              *p_msg;
     tNFA_HCI_EVENT_DATA *p_evt_data;
     BOOLEAN             b_free;
-    UINT8               b_cmd_flag = 0;
 
     /* If busy, or API queue is empty, then exit */
     if (  (nfa_hci_cb.hci_state != NFA_HCI_STATE_IDLE)
@@ -351,7 +352,7 @@
     }
 
     /* See if any pipe is owned by this app */
-    if ((p_pipe = nfa_hciu_find_pipe_by_owner (nfa_hci_cb.app_in_use)) == NULL)
+    if (nfa_hciu_find_pipe_by_owner (nfa_hci_cb.app_in_use) == NULL)
     {
         /* No pipes, release all gates owned by this app */
         while ((p_gate = nfa_hciu_find_gate_by_owner (nfa_hci_cb.app_in_use)) != NULL)
@@ -436,6 +437,21 @@
             }
         }
     }
+
+    evt_data.gates_pipes.num_uicc_created_pipes = 0;
+    /* Loop through all pipes that are connected to connectivity gate */
+    for (xx = 0, pp = nfa_hci_cb.cfg.dyn_pipes; xx < NFA_HCI_MAX_PIPE_CB; xx++, pp++)
+    {
+        if (pp->pipe_id != 0  && pp->local_gate == NFA_HCI_CONNECTIVITY_GATE)
+        {
+            memcpy (&evt_data.gates_pipes.uicc_created_pipe [evt_data.gates_pipes.num_uicc_created_pipes++], pp, sizeof (tNFA_HCI_PIPE_INFO));
+        }
+        else if (pp->pipe_id != 0  && pp->local_gate == NFA_HCI_LOOP_BACK_GATE)
+        {
+            memcpy (&evt_data.gates_pipes.uicc_created_pipe [evt_data.gates_pipes.num_uicc_created_pipes++], pp, sizeof (tNFA_HCI_PIPE_INFO));
+        }
+    }
+
     evt_data.gates_pipes.status = NFA_STATUS_OK;
 
     /* notify NFA_HCI_GET_GATE_PIPE_LIST_EVT to the application */
@@ -512,7 +528,7 @@
     else
     {
         /* See if any pipe is owned by this app */
-        if ((p_pipe = nfa_hciu_find_pipe_on_gate (p_gate->gate_id)) == NULL)
+        if (nfa_hciu_find_pipe_on_gate (p_gate->gate_id) == NULL)
         {
             nfa_hciu_release_gate (p_gate->gate_id);
 
@@ -561,15 +577,12 @@
 
     nfa_hci_cb.app_in_use = p_evt_data->get_host_list.hci_handle;
 
-    /* First, check if the application handle is valid */
-    if (  ((nfa_hci_cb.app_in_use & NFA_HANDLE_GROUP_MASK) != NFA_HANDLE_GROUP_HCI)
-        ||(app_inx >= NFA_HCI_MAX_APP_CB)
-        ||(nfa_hci_cb.p_app_cback[app_inx] == NULL) )
+    /* Send Get Host List command on "Internal request" or requested by registered application with valid handle and callback function */
+    if (  (nfa_hci_cb.app_in_use == NFA_HANDLE_INVALID)
+        ||((app_inx < NFA_HCI_MAX_APP_CB) && (nfa_hci_cb.p_app_cback[app_inx] != NULL))  )
     {
-        return;
+        nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
     }
-
-    nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
 }
 
 /*******************************************************************************
@@ -856,7 +869,7 @@
         app_handle = nfa_hciu_get_pipe_owner (p_evt_data->send_cmd.pipe);
 
         if (  (nfa_hciu_is_active_host (p_pipe->dest_host))
-            &&(app_handle == p_evt_data->send_cmd.hci_handle)  )
+            &&((app_handle == p_evt_data->send_cmd.hci_handle || p_pipe->local_gate == NFA_HCI_CONNECTIVITY_GATE))  )
         {
             if (nfa_hciu_is_host_reseting (p_pipe->dest_host))
             {
@@ -915,7 +928,7 @@
         app_handle = nfa_hciu_get_pipe_owner (p_evt_data->send_rsp.pipe);
 
         if (  (nfa_hciu_is_active_host (p_pipe->dest_host))
-            &&(app_handle == p_evt_data->send_rsp.hci_handle)  )
+            &&((app_handle == p_evt_data->send_rsp.hci_handle || p_pipe->local_gate == NFA_HCI_CONNECTIVITY_GATE))  )
         {
             if (p_pipe->pipe_state == NFA_HCI_PIPE_OPENED)
             {
@@ -967,7 +980,7 @@
         app_handle = nfa_hciu_get_pipe_owner (p_evt_data->send_evt.pipe);
 
         if (  (nfa_hciu_is_active_host (p_pipe->dest_host))
-            &&(app_handle == p_evt_data->send_evt.hci_handle)  )
+            &&((app_handle == p_evt_data->send_evt.hci_handle || p_pipe->local_gate == NFA_HCI_CONNECTIVITY_GATE))  )
         {
             if (nfa_hciu_is_host_reseting (p_pipe->dest_host))
             {
@@ -982,6 +995,12 @@
 
                 if (status == NFA_STATUS_OK)
                 {
+                    if (p_pipe->local_gate == NFA_HCI_LOOP_BACK_GATE)
+                    {
+                        nfa_hci_cb.w4_rsp_evt   = TRUE;
+                        nfa_hci_cb.hci_state    = NFA_HCI_STATE_WAIT_RSP;
+                    }
+
                     if (p_evt_data->send_evt.rsp_len)
                     {
                         nfa_hci_cb.pipe_in_use  = p_evt_data->send_evt.pipe;
@@ -993,9 +1012,18 @@
                             nfa_hci_cb.hci_state    = NFA_HCI_STATE_WAIT_RSP;
                             nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_evt_data->send_evt.rsp_timeout);
                         }
+                        else if (p_pipe->local_gate == NFA_HCI_LOOP_BACK_GATE)
+                        {
+                            nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hcp_response_timeout);
+                        }
                     }
                     else
                     {
+                        if (p_pipe->local_gate == NFA_HCI_LOOP_BACK_GATE)
+                        {
+                            nfa_hci_cb.pipe_in_use  = p_evt_data->send_evt.pipe;
+                            nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hcp_response_timeout);
+                        }
                         nfa_hci_cb.rsp_buf_size = 0;
                         nfa_hci_cb.p_rsp_buf    = NULL;
                     }
@@ -1019,7 +1047,7 @@
 
     evt_data.evt_sent.status = status;
 
-    /* Send NFC_HCI_EVENT_SENT_EVT to notify failure */
+    /* Send NFC_HCI_EVENT_SENT_EVT to notify status */
     nfa_hciu_send_to_app (NFA_HCI_EVENT_SENT_EVT, &evt_data, p_evt_data->send_evt.hci_handle);
     return TRUE;
 }
@@ -1322,7 +1350,8 @@
     /* If starting up, handle events here */
     if (  (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
         ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)
-        ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)  )
+        ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+        ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE))
     {
         if (nfa_hci_cb.inst != NFA_HCI_ANY_OK)
         {
@@ -1341,11 +1370,9 @@
             }
             else if (nfa_hci_cb.param_in_use == NFA_HCI_WHITELIST_INDEX)
             {
-                if (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
+                if (  (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
+                    ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)  )
                     nfa_hci_dh_startup_complete ();
-
-                else if (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)
-                    nfa_hci_startup_complete (NFA_STATUS_OK);
             }
             break;
 
@@ -1382,7 +1409,7 @@
                 if (!memcmp ((UINT8 *) nfa_hci_cb.cfg.admin_gate.session_id, p_data, NFA_HCI_SESSION_ID_LEN) )
                 {
                     /* Session has not changed. Set the WHITELIST */
-                    nfa_hciu_send_set_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_WHITELIST_INDEX, 0x01, hosts);
+                    nfa_hciu_send_set_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_WHITELIST_INDEX, 0x02, hosts);
                 }
                 else
                 {
@@ -1594,7 +1621,8 @@
 *******************************************************************************/
 void nfa_hci_handle_admin_gate_evt (UINT8 *p_data)
 {
-    tNFA_HCI_EVT_DATA   evt_data;
+    tNFA_HCI_EVT_DATA           evt_data;
+    tNFA_HCI_API_GET_HOST_LIST  *p_msg;
 
     if (nfa_hci_cb.inst != NFA_HCI_EVT_HOT_PLUG)
     {
@@ -1602,10 +1630,52 @@
         return;
     }
 
-    evt_data.rcvd_evt.evt_code = nfa_hci_cb.inst;
+    NFA_TRACE_DEBUG0 ("nfa_hci_handle_admin_gate_evt - HOT PLUG EVT event on ADMIN Pipe");
+    nfa_hci_cb.num_hot_plug_evts++;
 
-    nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
-    nfa_hciu_send_to_all_apps (NFA_HCI_EVENT_RCVD_EVT, &evt_data);
+    if (  (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+        ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)  )
+    {
+        /* Received Hot Plug evt while waiting for other Host in the network to bootup after DH host bootup is complete */
+        if (  (nfa_hci_cb.ee_disable_disc)
+            &&(nfa_hci_cb.num_hot_plug_evts == (nfa_hci_cb.num_nfcee - 1))
+            &&(nfa_hci_cb.num_ee_dis_req_ntf < (nfa_hci_cb.num_nfcee - 1))  )
+        {
+            /* Received expected number of Hot Plug event(s) before as many number of EE DISC REQ Ntf(s) are received */
+            nfa_sys_stop_timer (&nfa_hci_cb.timer);
+            /* Received HOT PLUG EVT(s), now wait some more time for EE DISC REQ Ntf(s) */
+            nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
+        }
+    }
+    else if (  (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
+             ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)  )
+    {
+        /* Received Hot Plug evt during DH host bootup */
+        if (  (nfa_hci_cb.ee_disable_disc)
+            &&(nfa_hci_cb.num_hot_plug_evts == (nfa_hci_cb.num_nfcee - 1))
+            &&(nfa_hci_cb.num_ee_dis_req_ntf < (nfa_hci_cb.num_nfcee - 1))  )
+        {
+            /* Received expected number of Hot Plug event(s) before as many number of EE DISC REQ Ntf(s) are received */
+            nfa_hci_cb.w4_hci_netwk_init = FALSE;
+        }
+    }
+    else
+    {
+        /* Received Hot Plug evt on UICC self reset */
+        evt_data.rcvd_evt.evt_code = nfa_hci_cb.inst;
+        /* Notify all registered application with the HOT_PLUG_EVT */
+        nfa_hciu_send_to_all_apps (NFA_HCI_EVENT_RCVD_EVT, &evt_data);
+
+        /* Send Get Host List after receiving any pending response */
+        if ((p_msg = (tNFA_HCI_API_GET_HOST_LIST *) GKI_getbuf (sizeof (tNFA_HCI_API_GET_HOST_LIST))) != NULL)
+        {
+            p_msg->hdr.event    = NFA_HCI_API_GET_HOST_LIST_EVT;
+            /* Set Invalid handle to identify this Get Host List command is internal */
+            p_msg->hci_handle   = NFA_HANDLE_INVALID;
+
+            nfa_sys_sendmsg (p_msg);
+        }
+    }
 }
 
 /*******************************************************************************
@@ -1796,8 +1866,7 @@
             data_len--;
         evt_data.registry.data_len = data_len;
 
-        if (data_len <= NFA_MAX_HCI_DATA_LEN)
-            memcpy (evt_data.registry.reg_data, p_data, data_len);
+        memcpy (evt_data.registry.reg_data, p_data, data_len);
 
         nfa_hciu_send_to_app (NFA_HCI_SET_REG_CMD_EVT, &evt_data, app_handle);
         break;
@@ -1959,6 +2028,17 @@
             p_pipe->pipe_state = NFA_HCI_PIPE_OPENED;
         else if (nfa_hci_cb.cmd_sent == NFA_HCI_ANY_CLOSE_PIPE)
             p_pipe->pipe_state = NFA_HCI_PIPE_CLOSED;
+
+        /* Could be a response to application specific command sent, pass it on */
+        evt_data.rsp_rcvd.status   = NFA_STATUS_OK;
+        evt_data.rsp_rcvd.pipe     = p_pipe->pipe_id;;
+        evt_data.rsp_rcvd.rsp_code = nfa_hci_cb.inst;
+        evt_data.rsp_rcvd.rsp_len  = data_len;
+
+        if (data_len <= NFA_MAX_HCI_RSP_LEN)
+            memcpy (evt_data.rsp_rcvd.rsp_data, p_data, data_len);
+
+        nfa_hciu_send_to_app (NFA_HCI_RSP_RCVD_EVT, &evt_data, nfa_hci_cb.app_in_use);
     }
     else if (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)
     {
@@ -1986,7 +2066,7 @@
     UINT8               data[1];
     UINT8               rsp_len = 0;
     tNFA_HCI_RESPONSE   response = NFA_HCI_ANY_OK;
-
+    tNFA_HCI_EVT_DATA   evt_data;
 
     /* Check if data packet is a command, response or event */
     if (nfa_hci_cb.type == NFA_HCI_COMMAND_TYPE)
@@ -2002,19 +2082,40 @@
             p_pipe->pipe_state = NFA_HCI_PIPE_CLOSED;
         }
         else
-            response = NFA_HCI_ANY_E_PIPE_NOT_OPENED;
+            response = NFA_HCI_ANY_E_CMD_NOT_SUPPORTED;
 
         nfa_hciu_send_msg (p_pipe->pipe_id, NFA_HCI_RESPONSE_TYPE, response, rsp_len, data);
     }
     else if (nfa_hci_cb.type == NFA_HCI_RESPONSE_TYPE)
     {
-        /* Since we never send any commands on our local loopback gate,
-         * there should not be any response.
-         */
+        if ((nfa_hci_cb.cmd_sent == NFA_HCI_ANY_OPEN_PIPE) && (nfa_hci_cb.inst == NFA_HCI_ANY_OK))
+            p_pipe->pipe_state = NFA_HCI_PIPE_OPENED;
+        else if (nfa_hci_cb.cmd_sent == NFA_HCI_ANY_CLOSE_PIPE)
+            p_pipe->pipe_state = NFA_HCI_PIPE_CLOSED;
+
+        /* Could be a response to application specific command sent, pass it on */
+        evt_data.rsp_rcvd.status   = NFA_STATUS_OK;
+        evt_data.rsp_rcvd.pipe     = p_pipe->pipe_id;;
+        evt_data.rsp_rcvd.rsp_code = nfa_hci_cb.inst;
+        evt_data.rsp_rcvd.rsp_len  = data_len;
+
+        if (data_len <= NFA_MAX_HCI_RSP_LEN)
+            memcpy (evt_data.rsp_rcvd.rsp_data, p_data, data_len);
+
+        nfa_hciu_send_to_app (NFA_HCI_RSP_RCVD_EVT, &evt_data, nfa_hci_cb.app_in_use);
     }
     else if (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)
     {
-        if (nfa_hci_cb.inst == NFA_HCI_EVT_POST_DATA)
+        if (nfa_hci_cb.w4_rsp_evt)
+        {
+            evt_data.rcvd_evt.pipe      = p_pipe->pipe_id;
+            evt_data.rcvd_evt.evt_code  = nfa_hci_cb.inst;
+            evt_data.rcvd_evt.evt_len   = data_len;
+            evt_data.rcvd_evt.p_evt_buf = p_data;
+
+            nfa_hciu_send_to_app (NFA_HCI_EVENT_RCVD_EVT, &evt_data, nfa_hci_cb.app_in_use);
+        }
+        else if (nfa_hci_cb.inst == NFA_HCI_EVT_POST_DATA)
         {
             /* Send back the same data we got */
             nfa_hciu_send_msg (p_pipe->pipe_id, NFA_HCI_EVENT_TYPE, NFA_HCI_EVT_POST_DATA, data_len, p_data);
diff --git a/src/nfa/hci/nfa_hci_api.c b/src/nfa/hci/nfa_hci_api.c
index 4b28987..987ce8b 100644
--- a/src/nfa/hci/nfa_hci_api.c
+++ b/src/nfa/hci/nfa_hci_api.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  NFA interface to HCI
diff --git a/src/nfa/hci/nfa_hci_ci.c b/src/nfa/hci/nfa_hci_ci.c
index a368d13..3ee65bd 100644
--- a/src/nfa/hci/nfa_hci_ci.c
+++ b/src/nfa/hci/nfa_hci_ci.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the call-in functions for NFA HCI
@@ -47,13 +48,11 @@
 
         if (  (status == NFA_STATUS_OK)
             &&(num_bytes_read != 0) )
-        {
             p_msg->nv_read.status = NFA_STATUS_OK;
-            p_msg->nv_read.size   = num_bytes_read;
-        }
         else
             p_msg->nv_read.status = NFA_STATUS_FAILED;
 
+        p_msg->nv_read.size  = num_bytes_read;
         p_msg->nv_read.block = block;
         nfa_sys_sendmsg (p_msg);
     }
diff --git a/src/nfa/hci/nfa_hci_main.c b/src/nfa/hci/nfa_hci_main.c
index ebcc588..76d7f38 100644
--- a/src/nfa/hci/nfa_hci_main.c
+++ b/src/nfa/hci/nfa_hci_main.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the main implementation file for the NFA HCI.
@@ -85,25 +86,92 @@
 ** Returns          None
 **
 *******************************************************************************/
-void nfa_hci_ee_info_cback (BOOLEAN disable_discover)
+void nfa_hci_ee_info_cback (tNFA_EE_DISC_STS status)
 {
-    NFA_TRACE_DEBUG1 ("nfa_hci_ee_info_cback (): %d", disable_discover);
+    UINT8           num_nfcee = 3;
+    tNFA_EE_INFO    ee_info[3];
 
-    /* Notify EE Discovery is complete */
+    NFA_TRACE_DEBUG1 ("nfa_hci_ee_info_cback (): %d", status);
 
-    if (disable_discover)
+    switch (status)
     {
-        nfa_hci_cb.w4_hci_netwk_init = FALSE;
-        if (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
-        {
-            nfa_sys_stop_timer (&nfa_hci_cb.timer);
-            nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
-        }
-    }
-    else
-    {
-        nfa_hci_cb.ee_disc_cmplt = TRUE;
+    case NFA_EE_DISC_STS_ON:
+        /* NFCEE Discovery is in progress */
+        nfa_hci_cb.ee_disc_cmplt      = TRUE;
+        nfa_hci_cb.ee_disable_disc    = FALSE;
+        nfa_hci_cb.num_ee_dis_req_ntf = 0;
+        nfa_hci_cb.num_hot_plug_evts  = 0;
+        nfa_hci_cb.conn_id            = 0;
         nfa_hci_startup ();
+        break;
+
+    case NFA_EE_DISC_STS_OFF:
+        nfa_hci_cb.ee_disable_disc  = TRUE;
+        /* Discovery operation is complete, retrieve discovery result */
+        NFA_EeGetInfo (&num_nfcee, ee_info);
+        nfa_hci_cb.num_nfcee        = num_nfcee;
+
+        if (  (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+            ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)  )
+        {
+            if (  (nfa_hci_cb.num_nfcee <= 1)
+                ||(nfa_hci_cb.num_ee_dis_req_ntf == (nfa_hci_cb.num_nfcee - 1))
+                ||(nfa_hci_cb.num_hot_plug_evts  == (nfa_hci_cb.num_nfcee - 1))  )
+            {
+                /* No UICC Host is detected or
+                 * HOT_PLUG_EVT(s) and or EE DISC REQ Ntf(s) are already received
+                 * Get Host list and notify SYS on Initialization complete */
+                nfa_sys_stop_timer (&nfa_hci_cb.timer);
+                if (  (nfa_hci_cb.num_nfcee > 1)
+                    &&(nfa_hci_cb.num_ee_dis_req_ntf != (nfa_hci_cb.num_nfcee - 1))  )
+                {
+                    /* Received HOT PLUG EVT, we will also wait for EE DISC REQ Ntf(s) */
+                    nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
+                }
+                else
+                {
+                    nfa_hci_cb.w4_hci_netwk_init = FALSE;
+                    nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+                }
+            }
+        }
+        else if (nfa_hci_cb.num_nfcee <= 1)
+        {
+            /* No UICC Host is detected, HCI NETWORK is enabled */
+            nfa_hci_cb.w4_hci_netwk_init = FALSE;
+        }
+        break;
+
+    case NFA_EE_DISC_STS_REQ:
+        nfa_hci_cb.num_ee_dis_req_ntf++;
+
+        if (nfa_hci_cb.ee_disable_disc)
+        {
+            /* Already received Discovery Ntf */
+            if (  (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+                ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)  )
+            {
+                /* Received DISC REQ Ntf while waiting for other Host in the network to bootup after DH host bootup is complete */
+                if (nfa_hci_cb.num_ee_dis_req_ntf == (nfa_hci_cb.num_nfcee - 1))
+                {
+                    /* Received expected number of EE DISC REQ Ntf(s) */
+                    nfa_sys_stop_timer (&nfa_hci_cb.timer);
+                    nfa_hci_cb.w4_hci_netwk_init = FALSE;
+                    nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+                }
+            }
+            else if (  (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
+                     ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)  )
+            {
+                /* Received DISC REQ Ntf during DH host bootup */
+                if (nfa_hci_cb.num_ee_dis_req_ntf == (nfa_hci_cb.num_nfcee - 1))
+                {
+                    /* Received expected number of EE DISC REQ Ntf(s) */
+                    nfa_hci_cb.w4_hci_netwk_init = FALSE;
+                }
+            }
+        }
+        break;
     }
 }
 
@@ -355,9 +423,16 @@
         nfa_hci_cb.b_low_power_mode = FALSE;
         if (nfa_hci_cb.hci_state == NFA_HCI_STATE_IDLE)
         {
-            nfa_hci_cb.hci_state     = NFA_HCI_STATE_RESTORE;
-            nfa_hci_cb.ee_disc_cmplt = FALSE;
-            nfa_hci_cb.conn_id       = 0;
+            nfa_hci_cb.hci_state          = NFA_HCI_STATE_RESTORE;
+            nfa_hci_cb.ee_disc_cmplt      = FALSE;
+            nfa_hci_cb.ee_disable_disc    = TRUE;
+            if (nfa_hci_cb.num_nfcee > 1)
+                nfa_hci_cb.w4_hci_netwk_init  = TRUE;
+            else
+                nfa_hci_cb.w4_hci_netwk_init  = FALSE;
+            nfa_hci_cb.conn_id            = 0;
+            nfa_hci_cb.num_ee_dis_req_ntf = 0;
+            nfa_hci_cb.num_hot_plug_evts  = 0;
         }
         else
         {
@@ -390,12 +465,30 @@
 {
     if (nfa_hci_cb.w4_hci_netwk_init)
     {
-        nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_NETWK_ENABLE;
-        /* No HCP packet to DH for a specified period of time indicates all host in the network is initialized */
-        nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, NFA_HCI_NETWK_INIT_TIMEOUT);
+        if (nfa_hci_cb.hci_state == NFA_HCI_STATE_STARTUP)
+        {
+            nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_NETWK_ENABLE;
+            /* No HCP packet to DH for a specified period of time indicates all host in the network is initialized */
+            nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
+        }
+        else if (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)
+        {
+            nfa_hci_cb.hci_state = NFA_HCI_STATE_RESTORE_NETWK_ENABLE;
+            /* No HCP packet to DH for a specified period of time indicates all host in the network is initialized */
+            nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
+        }
+    }
+    else if (  (nfa_hci_cb.num_nfcee > 1)
+             &&(nfa_hci_cb.num_ee_dis_req_ntf != (nfa_hci_cb.num_nfcee - 1))  )
+    {
+        /* Received HOT PLUG EVT, we will also wait for EE DISC REQ Ntf(s) */
+        nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
     }
     else
+    {
+        /* Received EE DISC REQ Ntf(s) */
         nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+    }
 }
 
 /*******************************************************************************
@@ -415,7 +508,8 @@
 
     nfa_sys_stop_timer (&nfa_hci_cb.timer);
 
-    if (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)
+    if (  (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE)
+        ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)  )
     {
         nfa_ee_proc_hci_info_cback ();
         nfa_sys_cback_notify_nfcc_power_mode_proc_complete (NFA_ID_HCI);
@@ -464,7 +558,6 @@
     if (nfa_hci_cb.nv_read_cmplt && nfa_hci_cb.ee_disc_cmplt && (nfa_hci_cb.conn_id == 0))
     {
         NFA_EeGetInfo (&num_nfcee, ee_info);
-        nfa_hci_cb.num_nfcee = num_nfcee;
 
         while ((count < num_nfcee) && (!found))
         {
@@ -597,11 +690,13 @@
     if ((event != NFC_DATA_CEVT) || (p_pkt == NULL))
             return;
 
-    if (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+    if (  (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE)
+        ||(nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)  )
     {
         /* Received HCP Packet before timeout, Other Host initialization is not complete */
         nfa_sys_stop_timer (&nfa_hci_cb.timer);
-        nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, NFA_HCI_NETWK_INIT_TIMEOUT);
+        if (nfa_hci_cb.w4_hci_netwk_init)
+            nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hci_netwk_enable_timeout);
     }
 
     p       = (UINT8 *) (p_pkt + 1) + p_pkt->offset;
@@ -684,11 +779,11 @@
 
     /* If we got a response, cancel the response timer. Also, if waiting for */
     /* a single response, we can go back to idle state                       */
-    if (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_RSP)
+    if (  (nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_RSP)
+        &&((nfa_hci_cb.type == NFA_HCI_RESPONSE_TYPE) || (nfa_hci_cb.w4_rsp_evt && (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)))  )
     {
         nfa_sys_stop_timer (&nfa_hci_cb.timer);
         nfa_hci_cb.hci_state  = NFA_HCI_STATE_IDLE;
-        nfa_hci_cb.w4_rsp_evt = FALSE;
     }
 
     switch (pipe)
@@ -721,6 +816,11 @@
         break;
     }
 
+    if ((nfa_hci_cb.type == NFA_HCI_RESPONSE_TYPE) || (nfa_hci_cb.w4_rsp_evt && (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)))
+    {
+        nfa_hci_cb.w4_rsp_evt = FALSE;
+    }
+
     /* Send a message to ouselves to check for anything to do */
     p_pkt->event = NFA_HCI_CHECK_QUEUE_EVT;
     p_pkt->len   = 0;
@@ -753,6 +853,7 @@
             ||(!(memcmp (nfa_hci_cb.cfg.admin_gate.session_id, default_session, NFA_HCI_SESSION_ID_LEN)))
             ||(!(memcmp (nfa_hci_cb.cfg.admin_gate.session_id, reset_session, NFA_HCI_SESSION_ID_LEN)))  )
         {
+            nfa_hci_cb.b_hci_netwk_reset = TRUE;
             /* Set a new session id so that we clear all pipes later after seeing a difference with the HC Session ID */
             memcpy (&session_id[(NFA_HCI_SESSION_ID_LEN / 2)], nfa_hci_cb.cfg.admin_gate.session_id, (NFA_HCI_SESSION_ID_LEN / 2));
             os_tick = GKI_get_os_tick_count ();
@@ -791,9 +892,18 @@
         break;
 
     case NFA_HCI_STATE_WAIT_NETWK_ENABLE:
-        /* HCI Network is enabled */
-        nfa_hci_cb.w4_hci_netwk_init = FALSE;
-        nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+    case NFA_HCI_STATE_RESTORE_NETWK_ENABLE:
+
+        if (nfa_hci_cb.w4_hci_netwk_init)
+        {
+            /* HCI Network is enabled */
+            nfa_hci_cb.w4_hci_netwk_init = FALSE;
+            nfa_hciu_send_get_param_cmd (NFA_HCI_ADMIN_PIPE, NFA_HCI_HOST_LIST_INDEX);
+        }
+        else
+        {
+            nfa_hci_startup_complete (NFA_STATUS_FAILED);
+        }
         break;
 
     case NFA_HCI_STATE_REMOVE_GATE:
diff --git a/src/nfa/hci/nfa_hci_utils.c b/src/nfa/hci/nfa_hci_utils.c
index 6edf589..bb430ed 100644
--- a/src/nfa/hci/nfa_hci_utils.c
+++ b/src/nfa/hci/nfa_hci_utils.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the utility functions for the NFA HCI.
@@ -26,6 +27,7 @@
 #include "nfc_api.h"
 #include "nfa_sys.h"
 #include "nfa_sys_int.h"
+#include "nfa_dm_int.h"
 #include "nfa_hci_api.h"
 #include "nfa_hci_int.h"
 #include "nfa_nv_co.h"
@@ -402,7 +404,7 @@
         if (nfa_hci_cb.hci_state == NFA_HCI_STATE_IDLE)
             nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_RSP;
 
-        nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, NFA_HCI_CMD_RSP_TIMEOUT);
+        nfa_sys_start_timer (&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT, p_nfa_hci_cfg->hcp_response_timeout);
     }
 
     return status;
@@ -423,7 +425,7 @@
     int                 xx;
     UINT8               count = 0;
 
-    for (xx = 0, p_cb = nfa_hci_cb.cfg.dyn_gates; xx <= NFA_HCI_MAX_GATE_CB; xx++, p_cb++)
+    for (xx = 0, p_cb = nfa_hci_cb.cfg.dyn_gates; xx < NFA_HCI_MAX_GATE_CB; xx++, p_cb++)
     {
         if (p_cb->gate_id != 0)
         {
@@ -1296,14 +1298,15 @@
 
     switch (state)
     {
-    case NFA_HCI_STATE_DISABLED:            return ("DISABLED");
-    case NFA_HCI_STATE_STARTUP:             return ("STARTUP");
-    case NFA_HCI_STATE_IDLE:                return ("IDLE");
-    case NFA_HCI_STATE_WAIT_RSP:            return ("WAIT_RSP");
-    case NFA_HCI_STATE_REMOVE_GATE:         return ("REMOVE_GATE");
-    case NFA_HCI_STATE_APP_DEREGISTER:      return ("APP_DEREGISTER");
-    case NFA_HCI_STATE_RESTORE:             return ("RESTORE");
-
+    case NFA_HCI_STATE_DISABLED:             return ("DISABLED");
+    case NFA_HCI_STATE_STARTUP:              return ("STARTUP");
+    case NFA_HCI_STATE_WAIT_NETWK_ENABLE:    return ("WAIT_NETWK_ENABLE");
+    case NFA_HCI_STATE_IDLE:                 return ("IDLE");
+    case NFA_HCI_STATE_WAIT_RSP:             return ("WAIT_RSP");
+    case NFA_HCI_STATE_REMOVE_GATE:          return ("REMOVE_GATE");
+    case NFA_HCI_STATE_APP_DEREGISTER:       return ("APP_DEREGISTER");
+    case NFA_HCI_STATE_RESTORE:              return ("RESTORE");
+    case NFA_HCI_STATE_RESTORE_NETWK_ENABLE: return ("WAIT_NETWK_ENABLE_AFTER_RESTORE");
 
     default:
         sprintf (unknown, "?? Unknown: %u ?? ", state);
diff --git a/src/nfa/include/nfa_api.h b/src/nfa/include/nfa_api.h
index 26007e4..ccc1a32 100644
--- a/src/nfa/include/nfa_api.h
+++ b/src/nfa/include/nfa_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the public interface file for NFA, Broadcom's NFC application
@@ -29,6 +30,7 @@
 #include "nci_defs.h"
 #include "tags_defs.h"
 #include "nfc_api.h"
+#include "rw_api.h"
 #include "nfc_hal_api.h"
 #include "gki.h"
 
@@ -153,6 +155,17 @@
 #define NFA_T1T_CMD_UID_LEN         T1T_CMD_UID_LEN /* UID len for T1T cmds     */
 #define NFA_T2T_UID_LEN             T2T_UID_LEN     /* T2T UID length           */
 
+#define NFA_RW_NDEF_FL_READ_ONLY        RW_NDEF_FL_READ_ONLY     /* Tag is read only              */
+#define NFA_RW_NDEF_FL_FORMATED         RW_NDEF_FL_FORMATED      /* Tag formated for NDEF         */
+#define NFA_RW_NDEF_FL_SUPPORTED        RW_NDEF_FL_SUPPORTED     /* NDEF supported by the tag     */
+#define NFA_RW_NDEF_FL_UNKNOWN          RW_NDEF_FL_UNKNOWN       /* Unable to find if tag is ndef capable/formated/read only */
+#define NFA_RW_NDEF_FL_FORMATABLE       RW_NDEF_FL_FORMATABLE    /* Tag supports format operation */
+#define NFA_RW_NDEF_FL_SOFT_LOCKABLE    RW_NDEF_FL_SOFT_LOCKABLE /* Tag can be soft locked */
+#define NFA_RW_NDEF_FL_HARD_LOCKABLE    RW_NDEF_FL_HARD_LOCKABLE /* Tag can be hard locked */
+#define NFA_RW_NDEF_FL_OTP              RW_NDEF_FL_OTP           /* Tag is one time programmable */
+
+typedef UINT8 tNFA_RW_NDEF_FLAG;
+
 /* Data for NFA_DM_SET_CONFIG_EVT */
 typedef struct
 {
@@ -205,14 +218,6 @@
 /* NFA_DM callback */
 typedef void (tNFA_DM_CBACK) (UINT8 event, tNFA_DM_CBACK_DATA *p_data);
 
-/* Data for data events */
-typedef struct
-{
-    tNFA_HANDLE handle;     /* Connection handle */
-    UINT16      len;        /* Length of data    */
-    UINT8       *p_buf;     /* Data buffer       */
-} tNFA_DATA;
-
 
 /* NFA Connection Callback Events */
 #define NFA_POLL_ENABLED_EVT                    0   /* Polling enabled event                        */
@@ -321,7 +326,7 @@
     tNFA_NFC_PROTOCOL   protocol;           /* protocol used to detect NDEF                             */
     UINT32              max_size;           /* max number of bytes available for NDEF data              */
     UINT32              cur_size;           /* current size of stored NDEF data (in bytes)              */
-    UINT8               flags;              /* Flags to indicate NDEF capability,formated,formatable and read only */
+    tNFA_RW_NDEF_FLAG   flags;              /* Flags to indicate NDEF capability, is formated, soft/hard lockable, formatable, otp and read only */
 } tNFA_NDEF_DETECT;
 
 
@@ -484,6 +489,13 @@
     BOOLEAN auto_read_ndef;             /* Automatic NDEF read (when not in exclusive RF mode)      */
 } tNFA_DM_CFG;
 
+/* compile-time configuration structure for HCI */
+typedef struct
+{
+    UINT16 hci_netwk_enable_timeout; /* Maximum idle(no HCP Pkt) time to wait for EE DISC REQ Ntf(s) */
+    UINT16 hcp_response_timeout;     /* Maximum time to wait for EE DISC REQ NTF(s) after HOT PLUG EVT(s) */
+} tNFA_HCI_CFG;
+
 /*
 ** Exclusive RF mode listen configuration
 */
@@ -585,7 +597,7 @@
 
 /* Events for tNFA_NDEF_CBACK */
 #define NFA_NDEF_REGISTER_EVT   0   /* NDEF record type registered. (In response to NFA_RegisterNDefTypeHandler)    */
-#define NFA_NDEF_DATA_EVT	    1   /* Received an NDEF message with the registered type. See [tNFA_DATA]       */
+#define NFA_NDEF_DATA_EVT	    1   /* Received an NDEF message with the registered type. See [tNFA_NDEF_DATA]       */
 typedef UINT8 tNFA_NDEF_EVT;
 
 /* Structure for NFA_NDEF_REGISTER_EVT event data */
@@ -968,12 +980,19 @@
 ** Description      Send a raw frame over the activated interface with the NFCC.
 **                  This function can only be called after NFC link is activated.
 **
+**                  If the activated interface is a tag and auto-presence check is
+**                  enabled then presence_check_start_delay can be used to indicate
+**                  the delay in msec after which the next auto presence check
+**                  command can be sent. NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY
+**                  can be used as the default value for the delay.
+**
 ** Returns          NFA_STATUS_OK if successfully initiated
 **                  NFA_STATUS_FAILED otherwise
 **
 *******************************************************************************/
 NFC_API extern tNFA_STATUS NFA_SendRawFrame (UINT8  *p_raw_data,
-                                             UINT16  data_len);
+                                             UINT16  data_len,
+                                             UINT16  presence_check_start_delay);
 
 /*******************************************************************************
 ** NDEF APIs
diff --git a/src/nfa/include/nfa_ce_api.h b/src/nfa/include/nfa_ce_api.h
index d339320..3d15cf0 100644
--- a/src/nfa/include/nfa_ce_api.h
+++ b/src/nfa/include/nfa_ce_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  NFA card emulation API functions
@@ -61,24 +62,19 @@
 **                  To disable the local NDEF tag, set protocol_mask=0
 **
 **                  The NDEF data provided by p_ndef_data must be persistent
-**                  as long as the local NDEF tag is enabled.
+**                  as long as the local NDEF tag is enabled. Also, Input parameters p_uid and
+**                  uid_len are reserved for future use.
 **
-**                  UID of the tag can be set only for Type 1 and Type 2 tag.
-**                  UID Length should be 4/7 bytes in case of Type 1 tag and
-**                  UID Length should be 4/10 bytes in case of Type 2 tag.
 **
 ** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-**                  should happen before calling this function
+**                  should happen before calling this function.
 **
 ** Returns:
 **                  NFA_STATUS_OK,            if command accepted
 **                  NFA_STATUS_INVALID_PARAM,
 **                      if protocol_maks is not 0 and p_ndef_data is NULL
-**                  (or)if p_uid is NULL and uid_len is not 0
-**                  (or)if protocol mask is set for both Type 1 and Type 2
-**                  (or)if uid_len is not 0 and protocol mask is not set for Type 1/2
-**                  (or)if protocol mask is set for Type 1 and uid_len is not 4/7
-**                  (or)if protocol mask is set for Type 2 and uid_len is not 4/10
+**                  (or) uid_len is not 0
+**                  (or) if protocol mask is set for Type 1 or Type 2
 **
 **                  NFA_STATUS_FAILED:        otherwise
 **
diff --git a/src/nfa/include/nfa_cho_api.h b/src/nfa/include/nfa_cho_api.h
index fde3222..b8c3f52 100644
--- a/src/nfa/include/nfa_cho_api.h
+++ b/src/nfa/include/nfa_cho_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the public interface file for NFA Connection Handover,
diff --git a/src/nfa/include/nfa_ee_api.h b/src/nfa/include/nfa_ee_api.h
index 7098ae3..3ac6caa 100644
--- a/src/nfa/include/nfa_ee_api.h
+++ b/src/nfa/include/nfa_ee_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  NFA interface to NFCEE
@@ -173,12 +174,19 @@
     tNFA_EE_DISCOVER_INFO   ee_disc_info[NFA_DM_MAX_UICC];  /* MFCEE DISCOVER Request info   */
 } tNFA_EE_DISCOVER_REQ;
 
+/* Data for NFA_EE_DATA_EVT */
+typedef struct
+{
+    tNFA_HANDLE handle;     /* Connection handle */
+    UINT16      len;        /* Length of data    */
+    UINT8       *p_buf;     /* Data buffer       */
+} tNFA_EE_DATA;
 
 /* Union of all EE callback structures */
 typedef union
 {
     tNFA_STATUS             status;             /* NFA_STATUS_OK is successful; otherwise NFA_STATUS_FAILED */
-    tNFA_DATA               data;
+    tNFA_EE_DATA            data;
     tNFA_HANDLE             handle;
     tNFA_EE_DISCOVER        ee_discover;
     tNFA_STATUS             ee_register;
diff --git a/src/nfa/include/nfa_hci_api.h b/src/nfa/include/nfa_hci_api.h
index a8b3fcc..7a56861 100644
--- a/src/nfa/include/nfa_hci_api.h
+++ b/src/nfa/include/nfa_hci_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the public interface file for NFA HCI, Broadcom's NFC
@@ -71,173 +72,174 @@
 #define NFA_MAX_HCI_DATA_LEN                    260     /* Max HCI data length */
 
 /* NFA HCI PIPE states */
-#define NFA_HCI_PIPE_CLOSED                         0x00     /* Pipe is closed */
-#define NFA_HCI_PIPE_OPENED                         0x01     /* Pipe is opened */
+#define NFA_HCI_PIPE_CLOSED                     0x00    /* Pipe is closed */
+#define NFA_HCI_PIPE_OPENED                     0x01    /* Pipe is opened */
 
 typedef UINT8 tNFA_HCI_PIPE_STATE;
 /* Dynamic pipe control block */
 typedef struct
 {
-    UINT8                   pipe_id;                /* Pipe ID */
-    tNFA_HCI_PIPE_STATE     pipe_state;             /* State of the Pipe */
-    UINT8                   local_gate;             /* local gate id */
-    UINT8                   dest_host;              /* Peer host to which this pipe is connected */
-    UINT8                   dest_gate;              /* Peer gate to which this pipe is connected */
+    UINT8                   pipe_id;                    /* Pipe ID */
+    tNFA_HCI_PIPE_STATE     pipe_state;                 /* State of the Pipe */
+    UINT8                   local_gate;                 /* local gate id */
+    UINT8                   dest_host;                  /* Peer host to which this pipe is connected */
+    UINT8                   dest_gate;                  /* Peer gate to which this pipe is connected */
 } tNFA_HCI_PIPE_INFO;
 
 /* Data for NFA_HCI_REGISTER_EVT */
 typedef struct
 {
-    tNFA_STATUS         status;
-    tNFA_HANDLE         hci_handle;
-    UINT8               num_pipes;
-    UINT8               num_gates;
+    tNFA_STATUS         status;                         /* Status of registration */
+    tNFA_HANDLE         hci_handle;                     /* Handle assigned to the application */
+    UINT8               num_pipes;                      /* Number of dynamic pipes exist for the application */
+    UINT8               num_gates;                      /* Number of generic gates exist for the application */
 } tNFA_HCI_REGISTER;
 
 /* Data for NFA_HCI_DEREGISTER_EVT */
 typedef struct
 {
-    tNFA_STATUS         status;
+    tNFA_STATUS         status;                         /* Status of deregistration */
 } tNFA_HCI_DEREGISTER;
 
 /* Data for NFA_HCI_GET_GATE_PIPE_LIST_EVT */
 typedef struct
 {
     tNFA_STATUS         status;
-    UINT8               num_pipes;
-    tNFA_HCI_PIPE_INFO  pipe[NFA_HCI_MAX_PIPE_CB];
-    UINT8               num_gates;
-    UINT8               gate[NFA_HCI_MAX_GATE_CB];
-
+    UINT8               num_pipes;                      /* Number of dynamic pipes exist for the application */
+    tNFA_HCI_PIPE_INFO  pipe[NFA_HCI_MAX_PIPE_CB];      /* List of pipe created for the application */
+    UINT8               num_gates;                      /* Number of generic gates exist for the application */
+    UINT8               gate[NFA_HCI_MAX_GATE_CB];      /* List of generic gates allocated to the application */
+    UINT8               num_uicc_created_pipes;         /* Number of pipes created by UICC host */
+    tNFA_HCI_PIPE_INFO  uicc_created_pipe[NFA_HCI_MAX_HOST_IN_NETWORK]; /* Pipe information of the UICC created pipe */
 } tNFA_HCI_GET_GATE_PIPE_LIST;
 
 /* Data for NFA_HCI_ALLOCATE_GATE_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
-    UINT8           gate;
+    tNFA_STATUS     status;                             /* Status of response to allocate gate request */
+    UINT8           gate;                               /* The gate allocated to the application */
 } tNFA_HCI_ALLOCATE_GATE;
 
 /* Data for NFA_HCI_DEALLOCATE_GATE_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
-    UINT8           gate;
+    tNFA_STATUS     status;                             /* Status of response to deallocate gate request */
+    UINT8           gate;                               /* The gate deallocated from the application */
 } tNFA_HCI_DEALLOCATE_GATE;
 
 /* Data for NFA_HCI_CREATE_PIPE_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
-    UINT8           pipe;
-    UINT8           source_gate;
-    UINT8           dest_host;
-    UINT8           dest_gate;
+    tNFA_STATUS     status;                             /* Status of creating dynamic pipe for the application */
+    UINT8           pipe;                               /* The pipe created for the application */
+    UINT8           source_gate;                        /* DH host gate to which the one end of pipe is attached */
+    UINT8           dest_host;                          /* Destination host whose gate is the other end of the pipe is attached to */
+    UINT8           dest_gate;                          /* Destination host gate to which the other end of pipe is attached */
 } tNFA_HCI_CREATE_PIPE;
 
 /* Data for NFA_HCI_OPEN_PIPE_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
-    UINT8           pipe;
+    tNFA_STATUS     status;                             /* Status of open pipe operation */
+    UINT8           pipe;                               /* The dynamic pipe for open operation */
 }tNFA_HCI_OPEN_PIPE;
 
 /* Data for NFA_HCI_CLOSE_PIPE_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
-    UINT8           pipe;
+    tNFA_STATUS     status;                             /* Status of close pipe operation */
+    UINT8           pipe;                               /* The dynamic pipe for close operation */
 }tNFA_HCI_CLOSE_PIPE;
 
 /* Data for NFA_HCI_DELETE_PIPE_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
-    UINT8           pipe;
+    tNFA_STATUS     status;                             /* Status of delete pipe operation */
+    UINT8           pipe;                               /* The dynamic pipe for delete operation */
 } tNFA_HCI_DELETE_PIPE;
 
 /* Data for NFA_HCI_HOST_LIST_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
-    UINT8           num_hosts;
-    UINT8           host[NFA_HCI_MAX_HOST_IN_NETWORK];
+    tNFA_STATUS     status;                             /* Status og get host list operation */
+    UINT8           num_hosts;                          /* Number of hosts in the host network */
+    UINT8           host[NFA_HCI_MAX_HOST_IN_NETWORK];  /* List of host in the host network */
 } tNFA_HCI_HOST_LIST;
 
 /* Data for NFA_HCI_RSP_RCVD_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
-    UINT8           pipe;
-    UINT8           rsp_code;
-    UINT16          rsp_len;
-    UINT8           rsp_data[NFA_MAX_HCI_RSP_LEN];
+    tNFA_STATUS     status;                             /* Status of RSP to HCP CMD sent */
+    UINT8           pipe;                               /* The pipe on which HCP packet is exchanged */
+    UINT8           rsp_code;                           /* Response id */
+    UINT16          rsp_len;                            /* Response parameter length */
+    UINT8           rsp_data[NFA_MAX_HCI_RSP_LEN];      /* Response received */
 } tNFA_HCI_RSP_RCVD;
 
 /* Data for NFA_HCI_EVENT_RCVD_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
-    UINT8           pipe;
-    UINT8           evt_code;
-    UINT16          evt_len;
-    UINT8           *p_evt_buf;
+    tNFA_STATUS     status;                             /* Status of Event received */
+    UINT8           pipe;                               /* The pipe on which HCP EVT packet is received */
+    UINT8           evt_code;                           /* HCP EVT id */
+    UINT16          evt_len;                            /* HCP EVT parameter length */
+    UINT8           *p_evt_buf;                         /* HCP EVT Parameter */
 } tNFA_HCI_EVENT_RCVD;
 
 /* Data for NFA_HCI_CMD_RCVD_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
-    UINT8           pipe;
-    UINT8           cmd_code;
-    UINT16          cmd_len;
-    UINT8           cmd_data[NFA_MAX_HCI_CMD_LEN];
+    tNFA_STATUS     status;                             /* Status of Command received */
+    UINT8           pipe;                               /* The pipe on which HCP CMD packet is received */
+    UINT8           cmd_code;                           /* HCP CMD id */
+    UINT16          cmd_len;                            /* HCP CMD parameter length */
+    UINT8           cmd_data[NFA_MAX_HCI_CMD_LEN];      /* HCP CMD Parameter */
 } tNFA_HCI_CMD_RCVD;
 
 /* Data for NFA_HCI_INIT_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
+    tNFA_STATUS     status;                             /* Status of Enabling HCI Network */
 } tNFA_HCI_INIT;
 
 /* Data for NFA_HCI_EXIT_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
+    tNFA_STATUS     status;                             /* Status of Disabling HCI Network */
 } tNFA_HCI_EXIT;
 
 /* Data for NFA_HCI_RSP_SENT_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
+    tNFA_STATUS     status;                             /* Status of HCP response send operation */
 } tNFA_HCI_RSP_SENT;
 
 /* Data for NFA_HCI_CMD_SENT_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
+    tNFA_STATUS     status;                             /* Status of Command send operation */
 } tNFA_HCI_CMD_SENT;
 
 /* Data for NFA_HCI_EVENT_SENT_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
+    tNFA_STATUS     status;                             /* Status of Event send operation */
 } tNFA_HCI_EVENT_SENT;
 
 /* Data for NFA_HCI_ADD_STATIC_PIPE_EVT */
 typedef struct
 {
-    tNFA_STATUS     status;
+    tNFA_STATUS     status;                             /* Status of adding proprietary pipe */
 } tNFA_HCI_ADD_STATIC_PIPE_EVT;
 
 /* data type for all registry-related events */
 typedef struct
 {
-    tNFA_STATUS         status;
-    UINT8               pipe;
-    UINT8               index;
-    UINT8               data_len;
-    UINT8               reg_data[NFA_MAX_HCI_DATA_LEN];
+    tNFA_STATUS         status;                         /* Status of Registry operation */
+    UINT8               pipe;                           /* Pipe on whose registry is of interest */
+    UINT8               index;                          /* Index of the registry operated */
+    UINT8               data_len;                       /* length of the registry parameter */
+    UINT8               reg_data[NFA_MAX_HCI_DATA_LEN]; /* Registry parameter */
 } tNFA_HCI_REGISTRY;
 
 
@@ -261,7 +263,7 @@
     tNFA_HCI_CMD_RCVD               cmd_rcvd;       /* NFA_HCI_CMD_RCVD_EVT           */
     tNFA_HCI_EVENT_RCVD             rcvd_evt;       /* NFA_HCI_EVENT_RCVD_EVT         */
     tNFA_STATUS                     status;         /* status of api command request  */
-    tNFA_HCI_REGISTRY               registry;       /* all registry-related events    */
+    tNFA_HCI_REGISTRY               registry;       /* all registry-related events - NFA_HCI_GET_REG_CMD_EVT, NFA_HCI_SET_REG_CMD_EVT, NFA_HCI_GET_REG_RSP_EVT, NFA_HCI_SET_REG_RSP_EVT */
     tNFA_HCI_INIT                   hci_init;       /* NFA_HCI_INIT_EVT               */
     tNFA_HCI_EXIT                   hci_exit;       /* NFA_HCI_EXIT_EVT               */
     tNFA_HCI_ADD_STATIC_PIPE_EVT    pipe_added;     /* NFA_HCI_ADD_STATIC_PIPE_EVT    */
diff --git a/src/nfa/include/nfa_hci_defs.h b/src/nfa/include/nfa_hci_defs.h
index 088837f..5bad2d5 100644
--- a/src/nfa/include/nfa_hci_defs.h
+++ b/src/nfa/include/nfa_hci_defs.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2009-2012 Broadcom Corporation
+ *  Copyright (C) 2009-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the NFA HCI related definitions from the
diff --git a/src/nfa/include/nfa_mem_co.h b/src/nfa/include/nfa_mem_co.h
index 5b3686d..ec961c8 100644
--- a/src/nfa/include/nfa_mem_co.h
+++ b/src/nfa/include/nfa_mem_co.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  Callout functions for memory allocation/deallocatoin
diff --git a/src/nfa/include/nfa_nv_ci.h b/src/nfa/include/nfa_nv_ci.h
index 7b49ed0..95a2668 100644
--- a/src/nfa/include/nfa_nv_ci.h
+++ b/src/nfa/include/nfa_nv_ci.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2003-2012 Broadcom Corporation
+ *  Copyright (C) 2003-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the interface file for non valtile memory call-in functions.
diff --git a/src/nfa/include/nfa_nv_co.h b/src/nfa/include/nfa_nv_co.h
index 9ed5093..09eedba 100644
--- a/src/nfa/include/nfa_nv_co.h
+++ b/src/nfa/include/nfa_nv_co.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2003-2012 Broadcom Corporation
+ *  Copyright (C) 2003-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the interface file for the synchronization server call-out
diff --git a/src/nfa/include/nfa_p2p_api.h b/src/nfa/include/nfa_p2p_api.h
index 4134e8d..0d3dd02 100644
--- a/src/nfa/include/nfa_p2p_api.h
+++ b/src/nfa/include/nfa_p2p_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the public interface file for NFA P2P, Broadcom's NFC
diff --git a/src/nfa/include/nfa_rw_api.h b/src/nfa/include/nfa_rw_api.h
index fde2ff7..811d56f 100644
--- a/src/nfa/include/nfa_rw_api.h
+++ b/src/nfa/include/nfa_rw_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  NFA reader/writer API functions
@@ -459,7 +460,7 @@
 ** Function         NFA_RwI93Inventory
 **
 ** Description:
-**      Send Inventory command to the activated ISO 15693 tag.
+**      Send Inventory command to the activated ISO 15693 tag with/without AFI..
 **      If UID is provided then set UID[0]:MSB, ... UID[7]:LSB
 **
 **      When the write operation has completed (or if an error occurs), the
@@ -471,7 +472,7 @@
 **      NFA_STATUS_FAILED otherwise
 **
 *******************************************************************************/
-NFC_API extern tNFA_STATUS NFA_RwI93Inventory (UINT8 afi, UINT8 *p_uid);
+NFC_API extern tNFA_STATUS NFA_RwI93Inventory (BOOLEAN afi_present, UINT8 afi, UINT8 *p_uid);
 
 /*******************************************************************************
 **
diff --git a/src/nfa/include/nfa_snep_api.h b/src/nfa/include/nfa_snep_api.h
index a890047..c2299d9 100644
--- a/src/nfa/include/nfa_snep_api.h
+++ b/src/nfa/include/nfa_snep_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the public interface file for NFA SNEP, Broadcom's NFC
diff --git a/src/nfa/int/nfa_ce_int.h b/src/nfa/int/nfa_ce_int.h
index ef58dc2..63086f7 100644
--- a/src/nfa/int/nfa_ce_int.h
+++ b/src/nfa/int/nfa_ce_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2011-2012 Broadcom Corporation
+ *  Copyright (C) 2011-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the private interface file for NFA_CE
diff --git a/src/nfa/int/nfa_cho_int.h b/src/nfa/int/nfa_cho_int.h
index 4d0142a..15ebeb6 100644
--- a/src/nfa/int/nfa_cho_int.h
+++ b/src/nfa/int/nfa_cho_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the private interface file for the NFA Connection Handover.
@@ -287,9 +288,5 @@
 tNFA_CHO_MSG_TYPE  nfa_cho_get_msg_type (UINT32 length, UINT8 *p_ndef_msg);
 tNFA_CHO_ROLE_TYPE nfa_cho_get_local_device_role (UINT32 length, UINT8 *p_ndef_msg);
 tNFA_STATUS nfa_cho_update_random_number (UINT8 *p_ndef_msg);
-#else
-
-#define nfa_cho_init ()
-
 #endif /* (defined (NFA_CHO_INCLUDED) && (NFA_CHO_INCLUDED==TRUE)) */
 #endif /* NFA_CHO_INT_H */
diff --git a/src/nfa/int/nfa_dm_int.h b/src/nfa/int/nfa_dm_int.h
index 3abf918..2169269 100644
--- a/src/nfa/int/nfa_dm_int.h
+++ b/src/nfa/int/nfa_dm_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2003-2012 Broadcom Corporation
+ *  Copyright (C) 2003-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the private interface file for the NFA device manager.
@@ -273,9 +274,7 @@
 {
     NFA_DM_RF_DISC_START_EVT,           /* discovery started with protocol, technology and mode       */
     NFA_DM_RF_DISC_ACTIVATED_EVT,       /* activated with configured protocol, technology and mode    */
-    NFA_DM_RF_DISC_DEACTIVATED_EVT,     /* deactivated sleep or idle                                  */
-    NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT    /* deactivated to idle from host select or listen sleep state */
-                                        /*  by DH request                                             */
+    NFA_DM_RF_DISC_DEACTIVATED_EVT      /* deactivated sleep or idle                                  */
 };
 typedef UINT8 tNFA_DM_RF_DISC_EVT;
 
@@ -358,6 +357,12 @@
 #define SLP_REQ_CMD     0x5000
 #define NFA_DM_MAX_TECH_ROUTE   4 /* NFA_EE_MAX_TECH_ROUTE. only A, B, F, Bprime are supported by UICC now */
 
+/* timeout for waiting deactivation NTF,
+** possible delay to send deactivate CMD if all credit wasn't returned
+** transport delay (1sec) and max RWT (5sec)
+*/
+#define NFA_DM_DISC_TIMEOUT_W4_DEACT_NTF            (NFC_DEACTIVATE_TIMEOUT*1000 + 6000)
+
 typedef struct
 {
     UINT16                  disc_duration;          /* Disc duration                                    */
@@ -379,6 +384,8 @@
     UINT8                   listen_RT[NFA_DM_MAX_TECH_ROUTE];/* Host ID for A, B, F, B' technology routing*/
     tNFA_DM_DISC_TECH_PROTO_MASK    dm_disc_mask;   /* technology and protocol waiting for activation   */
 
+    TIMER_LIST_ENT          tle;                    /* timer for waiting deactivation NTF               */
+
 } tNFA_DM_DISC_CB;
 
 /* NDEF Type Handler Definitions */
@@ -500,6 +507,7 @@
 void nfa_ce_init (void);
 
 /* Pointer to compile-time configuration structure */
+extern tNFA_HCI_CFG *p_nfa_hci_cfg;
 extern tNFA_DM_CFG *p_nfa_dm_cfg;
 extern UINT8 *p_nfa_dm_ce_cfg;
 extern UINT8 *p_nfa_dm_gen_cfg;
@@ -517,8 +525,17 @@
 
 void nfa_dm_init (void);
 void nfa_p2p_init (void);
+#if (defined (NFA_CHO_INCLUDED) && (NFA_CHO_INCLUDED==TRUE))
 void nfa_cho_init (void);
+#else
+#define nfa_cho_init()
+#endif /* (defined (NFA_CHO_INCLUDED) && (NFA_CHO_INCLUDED==TRUE)) */
+#if (defined (NFA_SNEP_INCLUDED) && (NFA_SNEP_INCLUDED==TRUE))
 void nfa_snep_init (BOOLEAN is_dta_mode);
+#else
+#define nfa_snep_init(is_dta_mode)
+#endif
+
 void nfa_dta_init (void);
 #if (NFC_NFCEE_INCLUDED == TRUE)
 void nfa_ee_init (void);
diff --git a/src/nfa/int/nfa_dta_int.h b/src/nfa/int/nfa_dta_int.h
index b21d725..18e4474 100644
--- a/src/nfa/int/nfa_dta_int.h
+++ b/src/nfa/int/nfa_dta_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2003-2012 Broadcom Corporation
+ *  Copyright (C) 2003-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the private interface file for the NFA DTA
diff --git a/src/nfa/int/nfa_ee_int.h b/src/nfa/int/nfa_ee_int.h
index bdcd8c5..5093bce 100644
--- a/src/nfa/int/nfa_ee_int.h
+++ b/src/nfa/int/nfa_ee_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the private interface file for the NFA EE.
@@ -366,9 +367,16 @@
 
 #define NFA_EE_FLAG_WAIT_HCI            0x01    /* set this bit when waiting for HCI to finish the initialization process in NFA_EE_EM_STATE_RESTORING */
 #define NFA_EE_FLAG_NOTIFY_HCI          0x02    /* set this bit when EE needs to notify the p_enable_cback at the end of NFCEE discover process in NFA_EE_EM_STATE_RESTORING */
+#define NFA_EE_FLAG_WAIT_DISCONN        0x04    /* set this bit when gracefully disable with outstanding NCI connections */
 typedef UINT8 tNFA_EE_FLAGS;
 
-typedef void (tNFA_EE_ENABLE_DONE_CBACK)(BOOLEAN disable_discover);
+
+#define NFA_EE_DISC_STS_ON              0x00    /* NFCEE DISCOVER in progress       */
+#define NFA_EE_DISC_STS_OFF             0x01    /* disable NFCEE DISCOVER           */
+#define NFA_EE_DISC_STS_REQ             0x02    /* received NFCEE DISCOVER REQ NTF  */
+typedef UINT8 tNFA_EE_DISC_STS;
+
+typedef void (tNFA_EE_ENABLE_DONE_CBACK)(tNFA_EE_DISC_STS status);
 
 /* NFA EE Management control block */
 typedef struct
@@ -451,6 +459,7 @@
 void nfa_ee_reg_cback_enable_done (tNFA_EE_ENABLE_DONE_CBACK *p_cback);
 
 extern void nfa_ee_proc_hci_info_cback (void);
+void nfa_ee_check_disable (void);
 
 
 #endif /* NFA_P2P_INT_H */
diff --git a/src/nfa/int/nfa_hci_int.h b/src/nfa/int/nfa_hci_int.h
index a1763ac..d6a29c8 100644
--- a/src/nfa/int/nfa_hci_int.h
+++ b/src/nfa/int/nfa_hci_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the private interface file for the NFA HCI.
@@ -33,9 +34,8 @@
 *****************************************************************************/
 
 
-#define NFA_HCI_HOST_ID_UICC0           0x02
-#define NFA_HCI_HOST_ID_UICC1           0x03
-#define NFA_HCI_LAST_HOST_SPECIFIC_GATE 0xEF
+#define NFA_HCI_HOST_ID_UICC0           0x02        /* Host ID for UICC 0 */
+#define NFA_HCI_LAST_HOST_SPECIFIC_GATE 0xEF        /* Lost host specific gate */
 
 #define NFA_HCI_SESSION_ID_LEN          8           /* HCI Session ID length */
 #define NFA_MAX_PIPES_IN_GENERIC_GATE   0x0F        /* Maximum pipes that can be created on a generic pipe  */
@@ -47,14 +47,15 @@
 #define NFA_HCI_VERSION                 90          /* HCI Version                                 */
 
 /* NFA HCI states */
-#define NFA_HCI_STATE_DISABLED          0x00     /* HCI is disabled  */
-#define NFA_HCI_STATE_STARTUP           0x01     /* HCI performing Initialization sequence */
-#define NFA_HCI_STATE_WAIT_NETWK_ENABLE 0x02     /* HCI is waiting for initialization of other host in the network */
-#define NFA_HCI_STATE_IDLE              0x03     /* HCI is waiting to handle api commands  */
-#define NFA_HCI_STATE_WAIT_RSP          0x04     /* HCI is performing api command request  */
-#define NFA_HCI_STATE_REMOVE_GATE       0x05     /* Removing all pipes prior to removing the gate */
-#define NFA_HCI_STATE_APP_DEREGISTER    0x06     /* Removing all pipes and gates prior to deregistering the app */
-#define NFA_HCI_STATE_RESTORE           0x07     /* HCI restore */
+#define NFA_HCI_STATE_DISABLED              0x00     /* HCI is disabled  */
+#define NFA_HCI_STATE_STARTUP               0x01     /* HCI performing Initialization sequence */
+#define NFA_HCI_STATE_WAIT_NETWK_ENABLE     0x02     /* HCI is waiting for initialization of other host in the network */
+#define NFA_HCI_STATE_IDLE                  0x03     /* HCI is waiting to handle api commands  */
+#define NFA_HCI_STATE_WAIT_RSP              0x04     /* HCI is waiting for response to command sent */
+#define NFA_HCI_STATE_REMOVE_GATE           0x05     /* Removing all pipes prior to removing the gate */
+#define NFA_HCI_STATE_APP_DEREGISTER        0x06     /* Removing all pipes and gates prior to deregistering the app */
+#define NFA_HCI_STATE_RESTORE               0x07     /* HCI restore */
+#define NFA_HCI_STATE_RESTORE_NETWK_ENABLE  0x08     /* HCI is waiting for initialization of other host in the network after restore */
 
 typedef UINT8 tNFA_HCI_STATE;
 
@@ -91,7 +92,7 @@
 
     NFA_HCI_RSP_NV_READ_EVT,                                      /* Non volatile read complete event */
     NFA_HCI_RSP_NV_WRITE_EVT,                                     /* Non volatile write complete event */
-    NFA_HCI_RSP_TIMEOUT_EVT,
+    NFA_HCI_RSP_TIMEOUT_EVT,                                      /* Timeout to response for the HCP Command packet */
     NFA_HCI_CHECK_QUEUE_EVT
 };
 
@@ -306,8 +307,8 @@
     tNFA_HCI_API_SEND_EVENT_EVT         send_evt;                       /* Send a command on a pipe to a host */
 
     /* Internal events */
-    tNFA_HCI_RSP_NV_READ_EVT            nv_read;
-    tNFA_HCI_RSP_NV_WRITE_EVT           nv_write;
+    tNFA_HCI_RSP_NV_READ_EVT            nv_read;                        /* Read Non volatile data */
+    tNFA_HCI_RSP_NV_WRITE_EVT           nv_write;                       /* Write Non volatile data */
 } tNFA_HCI_EVENT_DATA;
 
 /*****************************************************************************
@@ -366,7 +367,9 @@
 typedef struct
 {
     tNFA_HCI_STATE                  hci_state;                          /* state of the HCI */
-    UINT8                           num_nfcee;
+    UINT8                           num_nfcee;                          /* Number of NFCEE ID Discovered */
+    UINT8                           num_ee_dis_req_ntf;                 /* Number of ee discovery request ntf received */
+    UINT8                           num_hot_plug_evts;                  /* Number of Hot plug events received after ee discovery disable ntf */
     UINT8                           inactive_host[NFA_HCI_MAX_HOST_IN_NETWORK]; /* Inactive host in the host network */
     UINT8                           reset_host[NFA_HCI_MAX_HOST_IN_NETWORK]; /* List of host reseting */
     BOOLEAN                         b_low_power_mode;                   /* Host controller in low power mode */
@@ -388,6 +391,7 @@
     UINT8                           param_in_use;                       /* The registry parameter currently working with */
     tNFA_HCI_COMMAND                cmd_sent;                           /* The last command sent */
     BOOLEAN                         ee_disc_cmplt;                      /* EE Discovery operation completed */
+    BOOLEAN                         ee_disable_disc;                    /* EE Discovery operation is disabled */
     UINT16                          msg_len;                            /* For segmentation - length of the combined message */
     UINT16                          max_msg_len;                        /* Maximum reassembled message size */
     UINT8                           msg_data[NFA_MAX_HCI_EVENT_LEN];    /* For segmentation - the combined message data */
@@ -400,7 +404,7 @@
     tNFA_HCI_CBACK                  *p_app_cback[NFA_HCI_MAX_APP_CB];   /* Callback functions registered by the applications */
     UINT16                          rsp_buf_size;                       /* Maximum size of APDU buffer */
     UINT8                           *p_rsp_buf;                         /* Buffer to hold response to sent event */
-    struct
+    struct                                                              /* Persistent information for Device Host */
     {
         char                        reg_app_names[NFA_HCI_MAX_APP_CB][NFA_MAX_HCI_APP_NAME_LEN + 1];
 
@@ -441,7 +445,6 @@
 extern void nfa_hci_startup_complete (tNFA_STATUS status);
 extern void nfa_hci_startup (void);
 extern void nfa_hci_restore_default_config (UINT8 *p_session_id);
-extern void nfa_hci_vsc_cback (tNFC_VS_EVT event, UINT16 data_len, UINT8 *p_data);
 
 /* Action functions in nfa_hci_act.c
 */
diff --git a/src/nfa/int/nfa_p2p_int.h b/src/nfa/int/nfa_p2p_int.h
index 7eedbe0..ae69b46 100644
--- a/src/nfa/int/nfa_p2p_int.h
+++ b/src/nfa/int/nfa_p2p_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the private interface file for the NFA P2P.
@@ -61,6 +62,7 @@
     NFA_P2P_API_GET_LINK_INFO_EVT,
     NFA_P2P_API_GET_REMOTE_SAP_EVT,
     NFA_P2P_API_SET_LLCP_CFG_EVT,
+    NFA_P2P_INT_RESTART_RF_DISC_EVT,
 
     NFA_P2P_LAST_EVT
 };
@@ -244,12 +246,16 @@
 {
     tNFA_HANDLE         dm_disc_handle;
 
+    tNFA_DM_RF_DISC_STATE rf_disc_state;
     tNFA_P2P_LLCP_STATE llcp_state;
     BOOLEAN             is_initiator;
+    BOOLEAN             is_active_mode;
     UINT16              local_link_miu;
     UINT16              remote_link_miu;
 
     tNFA_TECHNOLOGY_MASK listen_tech_mask;          /* for P2P listening */
+    tNFA_TECHNOLOGY_MASK listen_tech_mask_to_restore;/* to retry without active listen mode */
+    TIMER_LIST_ENT      active_listen_restore_timer; /* timer to restore active listen mode */
     BOOLEAN             is_p2p_listening;
     BOOLEAN             is_cho_listening;
     BOOLEAN             is_snep_listening;
@@ -316,6 +322,7 @@
 BOOLEAN nfa_p2p_get_link_info (tNFA_P2P_MSG *p_msg);
 BOOLEAN nfa_p2p_get_remote_sap (tNFA_P2P_MSG *p_msg);
 BOOLEAN nfa_p2p_set_llcp_cfg (tNFA_P2P_MSG *p_msg);
+BOOLEAN nfa_p2p_restart_rf_discovery (tNFA_P2P_MSG *p_msg);
 
 #if (BT_TRACE_VERBOSE == TRUE)
 char *nfa_p2p_evt_code (UINT16 evt_code);
diff --git a/src/nfa/int/nfa_rw_int.h b/src/nfa/int/nfa_rw_int.h
index f877818..0d62f15 100644
--- a/src/nfa/int/nfa_rw_int.h
+++ b/src/nfa/int/nfa_rw_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2003-2012 Broadcom Corporation
+ *  Copyright (C) 2003-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the private interface file for NFA_RW
@@ -193,6 +194,7 @@
 {
     BOOLEAN             uid_present;
     UINT8               uid[I93_UID_BYTE_LEN];
+    BOOLEAN             afi_present;
     UINT8               afi;
     UINT8               dsfid;
     UINT16              first_block_number;
diff --git a/src/nfa/int/nfa_snep_int.h b/src/nfa/int/nfa_snep_int.h
index 9cadec4..b1e38b4 100644
--- a/src/nfa/int/nfa_snep_int.h
+++ b/src/nfa/int/nfa_snep_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the private interface file for the NFA SNEP.
diff --git a/src/nfa/int/nfa_sys.h b/src/nfa/int/nfa_sys.h
index 0351636..f377d7b 100644
--- a/src/nfa/int/nfa_sys.h
+++ b/src/nfa/int/nfa_sys.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2003-2012 Broadcom Corporation
+ *  Copyright (C) 2003-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the public interface file for the BTA system manager.
diff --git a/src/nfa/int/nfa_sys_int.h b/src/nfa/int/nfa_sys_int.h
index 5be99df..51b8e7c 100644
--- a/src/nfa/int/nfa_sys_int.h
+++ b/src/nfa/int/nfa_sys_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the private interface file for the NFA system manager.
diff --git a/src/nfa/int/nfa_sys_ptim.h b/src/nfa/int/nfa_sys_ptim.h
index 8a81f65..7035d70 100644
--- a/src/nfa/int/nfa_sys_ptim.h
+++ b/src/nfa/int/nfa_sys_ptim.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2003-2012 Broadcom Corporation
+ *  Copyright (C) 2003-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  Protocol timer services.
diff --git a/src/nfa/p2p/nfa_p2p_act.c b/src/nfa/p2p/nfa_p2p_act.c
index 1901d8b..416a961 100644
--- a/src/nfa/p2p/nfa_p2p_act.c
+++ b/src/nfa/p2p/nfa_p2p_act.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the implementation file for the NFA P2P.
@@ -1215,3 +1216,22 @@
 
     return TRUE;
 }
+
+/*******************************************************************************
+**
+** Function         nfa_p2p_restart_rf_discovery
+**
+** Description      Restart RF discovery by deactivating to IDLE
+**
+**
+** Returns          TRUE to deallocate buffer
+**
+*******************************************************************************/
+BOOLEAN nfa_p2p_restart_rf_discovery (tNFA_P2P_MSG *p_msg)
+{
+    P2P_TRACE_DEBUG0 ("nfa_p2p_restart_rf_discovery ()");
+
+    nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_IDLE);
+
+    return TRUE;
+}
diff --git a/src/nfa/p2p/nfa_p2p_api.c b/src/nfa/p2p/nfa_p2p_api.c
index aa4d25a..93b6887 100644
--- a/src/nfa/p2p/nfa_p2p_api.c
+++ b/src/nfa/p2p/nfa_p2p_api.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  NFA interface to LLCP
diff --git a/src/nfa/p2p/nfa_p2p_main.c b/src/nfa/p2p/nfa_p2p_main.c
index f8bca03..a5c3a0c 100644
--- a/src/nfa/p2p/nfa_p2p_main.c
+++ b/src/nfa/p2p/nfa_p2p_main.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the main implementation file for the NFA P2P.
@@ -49,6 +50,7 @@
 
 /* disable function type */
 static void nfa_p2p_sys_disable (void);
+static void nfa_p2p_update_active_listen (void);
 
 /* debug functions type */
 #if (BT_TRACE_VERBOSE == TRUE)
@@ -58,6 +60,9 @@
 /*****************************************************************************
 **  Constants
 *****************************************************************************/
+/* timeout to restore active listen mode if no RF activation on passive mode */
+#define NFA_P2P_RESTORE_ACTIVE_LISTEN_TIMEOUT   5000
+
 static const tNFA_SYS_REG nfa_p2p_sys_reg =
 {
     NULL,
@@ -86,7 +91,8 @@
     nfa_p2p_set_local_busy,                 /* NFA_P2P_API_SET_LOCAL_BUSY_EVT   */
     nfa_p2p_get_link_info,                  /* NFA_P2P_API_GET_LINK_INFO_EVT    */
     nfa_p2p_get_remote_sap,                 /* NFA_P2P_API_GET_REMOTE_SAP_EVT   */
-    nfa_p2p_set_llcp_cfg                    /* NFA_P2P_API_SET_LLCP_CFG_EVT     */
+    nfa_p2p_set_llcp_cfg,                   /* NFA_P2P_API_SET_LLCP_CFG_EVT     */
+    nfa_p2p_restart_rf_discovery            /* NFA_P2P_INT_RESTART_RF_DISC_EVT  */
 };
 
 /*******************************************************************************
@@ -110,12 +116,15 @@
     case NFA_DM_RF_DISC_START_EVT:
         if (p_data->status == NFC_STATUS_OK)
         {
-            nfa_p2p_cb.llcp_state = NFA_P2P_LLCP_STATE_LISTENING;
+            nfa_p2p_cb.llcp_state    = NFA_P2P_LLCP_STATE_LISTENING;
+            nfa_p2p_cb.rf_disc_state = NFA_DM_RFST_DISCOVERY;
         }
         break;
 
     case NFA_DM_RF_DISC_ACTIVATED_EVT:
 
+        nfa_p2p_cb.rf_disc_state = NFA_DM_RFST_LISTEN_ACTIVE;
+
         /* notify NFC link activation */
         memcpy (&(evt_data.activated.activate_ntf),
                 &(p_data->activate),
@@ -126,30 +135,38 @@
           &&(p_data->activate.intf_param.type == NFC_INTERFACE_NFC_DEP))
         {
             nfa_p2p_activate_llcp (p_data);
+
+            /* stop timer not to deactivate LLCP link on passive mode */
+            nfa_sys_stop_timer (&nfa_p2p_cb.active_listen_restore_timer);
         }
         break;
 
     case NFA_DM_RF_DISC_DEACTIVATED_EVT:
 
+        if (  (nfa_p2p_cb.rf_disc_state != NFA_DM_RFST_LISTEN_ACTIVE)
+            &&(nfa_p2p_cb.rf_disc_state != NFA_DM_RFST_LISTEN_SLEEP)  )
+        {
+            /* this is not for P2P listen
+            ** DM broadcasts deactivaiton event in listen sleep state.
+            */
+            break;
+        }
+
         /* notify deactivation */
         if (  (p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP)
             ||(p_data->deactivate.type == NFC_DEACTIVATE_TYPE_SLEEP_AF)  )
         {
+            nfa_p2p_cb.rf_disc_state  = NFA_DM_RFST_LISTEN_SLEEP;
             evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_SLEEP;
         }
         else
         {
+            nfa_p2p_cb.rf_disc_state  = NFA_DM_RFST_DISCOVERY;
             evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
         }
         nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data);
         break;
 
-    case NFA_DM_RF_DISC_CMD_IDLE_CMPL_EVT:
-        /* DH initiated deactivation in NFA_DM_RFST_LISTEN_SLEEP */
-        evt_data.deactivated.type = NFA_DEACTIVATE_TYPE_IDLE;
-        nfa_dm_conn_cback_event_notify (NFA_DEACTIVATED_EVT, &evt_data);
-        break;
-
     default:
         P2P_TRACE_ERROR0 ("Unexpected event");
         break;
@@ -158,6 +175,94 @@
 
 /*******************************************************************************
 **
+** Function         nfa_p2p_update_active_listen_timeout_cback
+**
+** Description      Timeout while waiting for passive mode activation
+**
+** Returns          void
+**
+*******************************************************************************/
+static void nfa_p2p_update_active_listen_timeout_cback (TIMER_LIST_ENT *p_tle)
+{
+    NFA_TRACE_ERROR0 ("nfa_p2p_update_active_listen_timeout_cback()");
+
+    /* restore active listen mode */
+    nfa_p2p_update_active_listen ();
+}
+
+/*******************************************************************************
+**
+** Function         nfa_p2p_update_active_listen
+**
+** Description      Remove active listen mode temporarily or restore it
+**
+**
+** Returns          None
+**
+*******************************************************************************/
+static void nfa_p2p_update_active_listen (void)
+{
+    tNFA_DM_DISC_TECH_PROTO_MASK p2p_listen_mask = 0;
+    BT_HDR *p_msg;
+
+    P2P_TRACE_DEBUG1 ("nfa_p2p_update_active_listen (): listen_tech_mask_to_restore:0x%x",
+                       nfa_p2p_cb.listen_tech_mask_to_restore);
+
+    /* if active listen mode was removed temporarily */
+    if (nfa_p2p_cb.listen_tech_mask_to_restore)
+    {
+        /* restore listen technologies */
+        nfa_p2p_cb.listen_tech_mask = nfa_p2p_cb.listen_tech_mask_to_restore;
+        nfa_p2p_cb.listen_tech_mask_to_restore = 0;
+        nfa_sys_stop_timer (&nfa_p2p_cb.active_listen_restore_timer);
+    }
+    else
+    {
+        /* start timer in case of no passive activation */
+        nfa_p2p_cb.active_listen_restore_timer.p_cback = (TIMER_CBACK *)nfa_p2p_update_active_listen_timeout_cback;
+        nfa_sys_start_timer (&nfa_p2p_cb.active_listen_restore_timer, 0, NFA_P2P_RESTORE_ACTIVE_LISTEN_TIMEOUT);
+
+        /* save listen techonologies */
+        nfa_p2p_cb.listen_tech_mask_to_restore = nfa_p2p_cb.listen_tech_mask;
+
+        /* remove active listen mode */
+        nfa_p2p_cb.listen_tech_mask &= ~( NFA_TECHNOLOGY_MASK_A_ACTIVE|NFA_TECHNOLOGY_MASK_F_ACTIVE);
+    }
+
+    if (nfa_p2p_cb.dm_disc_handle != NFA_HANDLE_INVALID)
+    {
+        nfa_dm_delete_rf_discover (nfa_p2p_cb.dm_disc_handle);
+        nfa_p2p_cb.dm_disc_handle = NFA_HANDLE_INVALID;
+    }
+
+    /* collect listen technologies with NFC-DEP protocol */
+    if (nfa_p2p_cb.listen_tech_mask & NFA_TECHNOLOGY_MASK_A)
+        p2p_listen_mask |= NFA_DM_DISC_MASK_LA_NFC_DEP;
+
+    if (nfa_p2p_cb.listen_tech_mask & NFA_TECHNOLOGY_MASK_F)
+        p2p_listen_mask |= NFA_DM_DISC_MASK_LF_NFC_DEP;
+
+    if (nfa_p2p_cb.listen_tech_mask & NFA_TECHNOLOGY_MASK_A_ACTIVE)
+        p2p_listen_mask |= NFA_DM_DISC_MASK_LAA_NFC_DEP;
+
+    if (nfa_p2p_cb.listen_tech_mask & NFA_TECHNOLOGY_MASK_F_ACTIVE)
+        p2p_listen_mask |= NFA_DM_DISC_MASK_LFA_NFC_DEP;
+
+    /* Configure listen technologies and protocols and register callback to NFA DM discovery */
+    nfa_p2p_cb.dm_disc_handle = nfa_dm_add_rf_discover (p2p_listen_mask,
+                                                        NFA_DM_DISC_HOST_ID_DH,
+                                                        nfa_p2p_discovery_cback);
+
+    /* restart RF discovery to update RF technologies */
+    if ((p_msg = (BT_HDR *) GKI_getbuf (sizeof(BT_HDR))) != NULL)
+    {
+        p_msg->event = NFA_P2P_INT_RESTART_RF_DISC_EVT;
+        nfa_sys_sendmsg (p_msg);
+    }
+}
+
+/*******************************************************************************
+**
 ** Function         nfa_p2p_llcp_link_cback
 **
 ** Description      Processing event from LLCP link management callback
@@ -171,7 +276,7 @@
     tNFA_LLCP_ACTIVATED     llcp_activated;
     tNFA_LLCP_DEACTIVATED   llcp_deactivated;
 
-    P2P_TRACE_DEBUG1 ("nfa_p2p_llcp_link_cback () event:0x%x", event);
+    P2P_TRACE_DEBUG2 ("nfa_p2p_llcp_link_cback () event:0x%x, reason:0x%x", event, reason);
 
     if (event == LLCP_LINK_ACTIVATION_COMPLETE_EVT)
     {
@@ -209,13 +314,57 @@
     {
         nfa_p2p_cb.llcp_state = NFA_P2P_LLCP_STATE_IDLE;
 
+        /* if got RF link loss without any rx LLC PDU */
+        if (reason == LLCP_LINK_RF_LINK_LOSS_NO_RX_LLC)
+        {
+            /* if it was active listen mode */
+            if (  (nfa_p2p_cb.is_active_mode)
+                &&(!nfa_p2p_cb.is_initiator))
+            {
+                /* if it didn't retry without active listen mode and passive mode is available */
+                if (  (nfa_p2p_cb.listen_tech_mask_to_restore == 0x00)
+                    &&(nfa_p2p_cb.listen_tech_mask & ( NFA_TECHNOLOGY_MASK_A
+                                                      |NFA_TECHNOLOGY_MASK_F)))
+                {
+                    P2P_TRACE_DEBUG0 ("Retry without active listen mode");
+
+                    /* retry without active listen mode */
+                    nfa_p2p_update_active_listen ();
+                }
+            }
+            else if (nfa_p2p_cb.listen_tech_mask_to_restore)
+            {
+                nfa_sys_start_timer (&nfa_p2p_cb.active_listen_restore_timer, 0, NFA_P2P_RESTORE_ACTIVE_LISTEN_TIMEOUT);
+            }
+
+            reason = LLCP_LINK_RF_LINK_LOSS_ERR;
+        }
+        else
+        {
+            if (nfa_p2p_cb.listen_tech_mask_to_restore)
+            {
+                /* restore active listen mode */
+                nfa_p2p_update_active_listen ();
+            }
+        }
+
         llcp_deactivated.reason = reason;
         nfa_dm_act_conn_cback_notify (NFA_LLCP_DEACTIVATED_EVT, (tNFA_CONN_EVT_DATA *)&llcp_deactivated);
 
-        if (  (nfa_p2p_cb.is_initiator)
-            &&(reason != LLCP_LINK_RF_LINK_LOSS_ERR)  ) /* if NFC link is still up */
+        if (reason != LLCP_LINK_RF_LINK_LOSS_ERR) /* if NFC link is still up */
         {
-            nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_DISCOVERY);
+            if (nfa_p2p_cb.is_initiator)
+            {
+                nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_DISCOVERY);
+            }
+            else if ((nfa_p2p_cb.is_active_mode) && (reason == LLCP_LINK_TIMEOUT))
+            {
+                /*
+                ** target needs to trun off RF in case of receiving invalid frame from initiator
+                */
+                P2P_TRACE_DEBUG0 ("Got LLCP_LINK_TIMEOUT in active mode on target");
+                nfa_dm_rf_deactivate (NFA_DEACTIVATE_TYPE_DISCOVERY);
+            }
         }
     }
 }
@@ -248,6 +397,18 @@
         config.is_initiator = FALSE;
     }
 
+    if (  (p_data->activate.rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A_ACTIVE)
+        ||(p_data->activate.rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_F_ACTIVE)
+        ||(p_data->activate.rf_tech_param.mode == NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE)
+        ||(p_data->activate.rf_tech_param.mode == NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE)  )
+    {
+        nfa_p2p_cb.is_active_mode = TRUE;
+    }
+    else
+    {
+        nfa_p2p_cb.is_active_mode = FALSE;
+    }
+
     nfa_p2p_cb.is_initiator = config.is_initiator;
 
     config.max_payload_size = p_data->activate.intf_param.intf_param.pa_nfc.max_payload_size;
@@ -320,6 +481,8 @@
 {
     P2P_TRACE_DEBUG0 ("nfa_p2p_sys_disable()");
 
+    nfa_sys_stop_timer (&nfa_p2p_cb.active_listen_restore_timer);
+
     /* deregister message handler on NFA SYS */
     nfa_sys_deregister (NFA_ID_P2P);
 }
@@ -470,7 +633,8 @@
             &&(nfa_p2p_cb.is_cho_listening == FALSE)
             &&(nfa_p2p_cb.is_snep_listening == FALSE)  )
         {
-            nfa_p2p_cb.llcp_state = NFA_P2P_LLCP_STATE_IDLE;
+            nfa_p2p_cb.llcp_state    = NFA_P2P_LLCP_STATE_IDLE;
+            nfa_p2p_cb.rf_disc_state = NFA_DM_RFST_IDLE;
 
             nfa_dm_delete_rf_discover (nfa_p2p_cb.dm_disc_handle);
             nfa_p2p_cb.dm_disc_handle = NFA_HANDLE_INVALID;
@@ -495,7 +659,13 @@
 *******************************************************************************/
 void nfa_p2p_update_listen_tech (tNFA_TECHNOLOGY_MASK tech_mask)
 {
-    P2P_TRACE_DEBUG1 ("nfa_p2p_update_listen_tech ()  tech_mask = %d", tech_mask);
+    P2P_TRACE_DEBUG1 ("nfa_p2p_update_listen_tech ()  tech_mask = 0x%x", tech_mask);
+
+    if (nfa_p2p_cb.listen_tech_mask_to_restore)
+    {
+        nfa_p2p_cb.listen_tech_mask_to_restore = 0;
+        nfa_sys_stop_timer (&nfa_p2p_cb.active_listen_restore_timer);
+    }
 
     if (nfa_p2p_cb.listen_tech_mask != tech_mask)
     {
@@ -503,6 +673,8 @@
 
         if (nfa_p2p_cb.dm_disc_handle != NFA_HANDLE_INVALID)
         {
+            nfa_p2p_cb.rf_disc_state = NFA_DM_RFST_IDLE;
+
             nfa_dm_delete_rf_discover (nfa_p2p_cb.dm_disc_handle);
             nfa_p2p_cb.dm_disc_handle = NFA_HANDLE_INVALID;
         }
@@ -623,6 +795,8 @@
         return "API_GET_REMOTE_SAP";
     case NFA_P2P_API_SET_LLCP_CFG_EVT:
         return "API_SET_LLCP_CFG_EVT";
+    case NFA_P2P_INT_RESTART_RF_DISC_EVT:
+        return "RESTART_RF_DISC_EVT";
     default:
         return "Unknown event";
     }
diff --git a/src/nfa/rw/nfa_rw_act.c b/src/nfa/rw/nfa_rw_act.c
index bcc1e87..4edb0fe 100644
--- a/src/nfa/rw/nfa_rw_act.c
+++ b/src/nfa/rw/nfa_rw_act.c
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the action functions the NFA_RW state machine.
@@ -36,6 +37,7 @@
 static tNFC_STATUS nfa_rw_config_tag_ro(BOOLEAN b_hard_lock);
 static BOOLEAN     nfa_rw_op_req_while_busy(tNFA_RW_MSG *p_data);
 static void        nfa_rw_error_cleanup (UINT8 event);
+static void        nfa_rw_presence_check (tNFA_RW_MSG *p_data);
 
 /*******************************************************************************
 **
@@ -129,18 +131,26 @@
 **
 ** Function         nfa_rw_check_start_presence_check_timer
 **
-** Description      Start timer for presence check
+** Description      Start timer to wait for specified time before presence check
 **
 ** Returns          Nothing
 **
 *******************************************************************************/
-static void nfa_rw_check_start_presence_check_timer (void)
+static void nfa_rw_check_start_presence_check_timer (UINT16 presence_check_start_delay)
 {
 #if (defined (NFA_DM_AUTO_PRESENCE_CHECK) && (NFA_DM_AUTO_PRESENCE_CHECK == TRUE))
     if (nfa_rw_cb.flags & NFA_RW_FL_NOT_EXCL_RF_MODE)
     {
-        NFA_TRACE_DEBUG0("Starting presence check timer...");
-        nfa_sys_start_timer(&nfa_rw_cb.tle, NFA_RW_PRESENCE_CHECK_TICK_EVT, NFA_RW_PRESENCE_CHECK_INTERVAL);
+        if (presence_check_start_delay)
+        {
+            NFA_TRACE_DEBUG0("Starting presence check timer...");
+            nfa_sys_start_timer(&nfa_rw_cb.tle, NFA_RW_PRESENCE_CHECK_TICK_EVT, presence_check_start_delay);
+        }
+        else
+        {
+            /* Presence check now */
+            nfa_rw_presence_check (NULL);
+        }
     }
 #endif   /* NFA_DM_AUTO_PRESENCE_CHECK  */
 }
@@ -491,7 +501,18 @@
 
     case RW_T1T_NDEF_DETECT_EVT:
         nfa_rw_cb.tlv_st = NFA_RW_TLV_DETECT_ST_COMPLETE;
+
+        if (  (p_rw_data->status != NFC_STATUS_OK)
+            &&(nfa_rw_cb.cur_op == NFA_RW_OP_WRITE_NDEF)
+            &&(p_rw_data->ndef.flags & RW_NDEF_FL_FORMATABLE) && (!(p_rw_data->ndef.flags & RW_NDEF_FL_FORMATED)) && (p_rw_data->ndef.flags & RW_NDEF_FL_SUPPORTED)  )
+        {
+            /* Tag is in Initialized state, Format the tag first and then Write NDEF */
+            if (RW_T1tFormatNDef() == NFC_STATUS_OK)
+                break;
+        }
+
         nfa_rw_handle_ndef_detect(event, p_rw_data);
+
         break;
 
     case RW_T1T_NDEF_READ_EVT:
@@ -558,12 +579,32 @@
         break;
 
     case RW_T1T_FORMAT_CPLT_EVT:
+
         if (p_rw_data->data.status == NFA_STATUS_OK)
             nfa_rw_cb.ndef_st = NFA_RW_NDEF_ST_UNKNOWN;
 
-        /* Command complete - perform cleanup, notify the app */
-        nfa_rw_command_complete();
-        nfa_dm_act_conn_cback_notify(NFA_FORMAT_CPLT_EVT, &conn_evt_data);
+        if (nfa_rw_cb.cur_op == NFA_RW_OP_WRITE_NDEF)
+        {
+            /* if format operation was done as part of ndef-write operation, now start NDEF Write */
+            if (  (p_rw_data->data.status != NFA_STATUS_OK)
+                ||((conn_evt_data.status = RW_T1tDetectNDef ()) != NFC_STATUS_OK)  )
+            {
+                /* Command complete - perform cleanup, notify app */
+                nfa_rw_command_complete();
+                nfa_rw_cb.ndef_st = NFA_RW_NDEF_ST_FALSE;
+
+
+                /* if format operation failed or ndef detection did not start, then notify app of ndef-write operation failure */
+                conn_evt_data.status = NFA_STATUS_FAILED;
+                nfa_dm_act_conn_cback_notify(NFA_WRITE_CPLT_EVT, &conn_evt_data);
+            }
+        }
+        else
+        {
+            /* Command complete - perform cleanup, notify the app */
+            nfa_rw_command_complete();
+            nfa_dm_act_conn_cback_notify(NFA_FORMAT_CPLT_EVT, &conn_evt_data);
+        }
         break;
 
     case RW_T1T_INTF_ERROR_EVT:
@@ -1620,8 +1661,17 @@
     }
     else if (nfa_rw_cb.ndef_st == NFA_RW_NDEF_ST_FALSE)
     {
-        /* Tag is not NDEF */
-        write_status = NFA_STATUS_FAILED;
+        if (nfa_rw_cb.protocol == NFC_PROTOCOL_T1T)
+        {
+            /* For Type 1 tag, NDEF can be written on Initialized tag
+            *  Perform ndef detection first to check if tag is in Initialized state to Write NDEF */
+            write_status = nfa_rw_start_ndef_detection();
+        }
+        else
+        {
+            /* Tag is not NDEF */
+            write_status = NFA_STATUS_FAILED;
+        }
     }
     else
     {
@@ -2170,11 +2220,15 @@
         i93_command = I93_CMD_INVENTORY;
         if (p_data->op_req.params.i93_cmd.uid_present)
         {
-            status = RW_I93Inventory (p_data->op_req.params.i93_cmd.uid);
+            status = RW_I93Inventory (p_data->op_req.params.i93_cmd.afi_present,
+                                      p_data->op_req.params.i93_cmd.afi,
+                                      p_data->op_req.params.i93_cmd.uid);
         }
         else
         {
-            status = RW_I93Inventory (NULL);
+            status = RW_I93Inventory (p_data->op_req.params.i93_cmd.afi_present,
+                                      p_data->op_req.params.i93_cmd.afi,
+                                      NULL);
         }
         break;
 
@@ -2362,7 +2416,7 @@
 
         /* Notify app of NFA_ACTIVATED_EVT and start presence check timer */
         nfa_dm_notify_activation_status (NFA_STATUS_OK, NULL);
-        nfa_rw_check_start_presence_check_timer ();
+        nfa_rw_check_start_presence_check_timer (NFA_RW_PRESENCE_CHECK_INTERVAL);
         return TRUE;
     }
 
@@ -2474,7 +2528,7 @@
     if (activate_notify)
     {
         nfa_dm_notify_activation_status (NFA_STATUS_OK, &tag_params);
-        nfa_rw_check_start_presence_check_timer ();
+        nfa_rw_check_start_presence_check_timer (NFA_RW_PRESENCE_CHECK_INTERVAL);
     }
 
 
@@ -2525,6 +2579,7 @@
 BOOLEAN nfa_rw_handle_op_req (tNFA_RW_MSG *p_data)
 {
     BOOLEAN freebuf = TRUE;
+    UINT16  presence_check_start_delay = 0;
 
     /* Check if activated */
     if (!(nfa_rw_cb.flags & NFA_RW_FL_ACTIVATED))
@@ -2573,10 +2628,15 @@
         break;
 
     case NFA_RW_OP_SEND_RAW_FRAME:
+        presence_check_start_delay = p_data->op_req.params.send_raw_frame.p_data->layer_specific;
+
         NFC_SendData (NFC_RF_CONN_ID, p_data->op_req.params.send_raw_frame.p_data);
 
-        /* Command complete - perform cleanup */
-        nfa_rw_command_complete();
+        /* Clear the busy flag */
+        nfa_rw_cb.flags &= ~NFA_RW_FL_API_BUSY;
+
+        /* Start presence_check after specified delay */
+        nfa_rw_check_start_presence_check_timer (presence_check_start_delay);
         break;
 
     case NFA_RW_OP_PRESENCE_CHECK:
@@ -2782,5 +2842,5 @@
     nfa_rw_cb.flags &= ~NFA_RW_FL_API_BUSY;
 
     /* Restart presence_check timer */
-    nfa_rw_check_start_presence_check_timer ();
+    nfa_rw_check_start_presence_check_timer (NFA_RW_PRESENCE_CHECK_INTERVAL);
 }
diff --git a/src/nfa/rw/nfa_rw_api.c b/src/nfa/rw/nfa_rw_api.c
index 4ac6dd4..0001e96 100644
--- a/src/nfa/rw/nfa_rw_api.c
+++ b/src/nfa/rw/nfa_rw_api.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  NFA interface for tag Reader/Writer
@@ -257,15 +258,16 @@
     tNFA_RW_OPERATION *p_msg;
     tNFC_PROTOCOL      protocol = nfa_rw_cb.protocol;
 
-    if ((protocol != NFC_PROTOCOL_T1T) && (protocol != NFC_PROTOCOL_T2T) && (protocol != NFC_PROTOCOL_15693))
+    if ((protocol != NFC_PROTOCOL_T1T) && (protocol != NFC_PROTOCOL_T2T) && (protocol != NFC_PROTOCOL_15693) && (protocol != NFC_PROTOCOL_ISO_DEP) && (protocol != NFC_PROTOCOL_T3T))
     {
         NFA_TRACE_API1 ("NFA_RwSetTagReadOnly (): Cannot Configure as read only for Protocol: %d", protocol);
         return (NFA_STATUS_REJECTED);
     }
 
-    if (!b_hard_lock && (protocol == NFC_PROTOCOL_15693))
+    if (  (!b_hard_lock && (protocol == NFC_PROTOCOL_15693))
+        ||(b_hard_lock && (protocol == NFC_PROTOCOL_ISO_DEP))  )
     {
-        NFA_TRACE_API1 ("NFA_RwSetTagReadOnly (): Can only hardlock for Protocol: %d", protocol);
+        NFA_TRACE_API2 ("NFA_RwSetTagReadOnly (): Cannot %s for Protocol: %d", b_hard_lock ? "Hard lock" : "Soft lock", protocol);
         return (NFA_STATUS_REJECTED);
     }
 
@@ -643,7 +645,7 @@
 {
     tNFA_RW_OPERATION *p_msg;
 
-    NFA_TRACE_API1 ("NFA_RwT2tRead (): Block to write: %d", block_number);
+    NFA_TRACE_API1 ("NFA_RwT2tWrite (): Block to write: %d", block_number);
 
     if ((p_msg = (tNFA_RW_OPERATION *) GKI_getbuf ((UINT16) (sizeof (tNFA_RW_OPERATION)))) != NULL)
     {
@@ -805,7 +807,7 @@
 ** Function         NFA_RwI93Inventory
 **
 ** Description:
-**      Send Inventory command to the activated ISO 15693 tag.
+**      Send Inventory command to the activated ISO 15693 tag with/without AFI
 **      If UID is provided then set UID[0]:MSB, ... UID[7]:LSB
 **
 **      When the operation has completed (or if an error occurs), the
@@ -817,11 +819,11 @@
 **      NFA_STATUS_FAILED otherwise
 **
 *******************************************************************************/
-tNFA_STATUS NFA_RwI93Inventory (UINT8 afi, UINT8 *p_uid)
+tNFA_STATUS NFA_RwI93Inventory (BOOLEAN afi_present, UINT8 afi, UINT8 *p_uid)
 {
     tNFA_RW_OPERATION *p_msg;
 
-    NFA_TRACE_API1 ("NFA_RwI93Inventory (): AFI: 0x%02X", afi);
+    NFA_TRACE_API2 ("NFA_RwI93Inventory (): afi_present:%d, AFI: 0x%02X", afi_present, afi);
 
     if (nfa_rw_cb.protocol != NFC_PROTOCOL_15693)
     {
@@ -834,6 +836,7 @@
         p_msg->hdr.event = NFA_RW_OP_REQUEST_EVT;
         p_msg->op        = NFA_RW_OP_I93_INVENTORY;
 
+        p_msg->params.i93_cmd.afi_present = afi_present;
         p_msg->params.i93_cmd.afi = afi;
 
         if (p_uid)
diff --git a/src/nfa/rw/nfa_rw_main.c b/src/nfa/rw/nfa_rw_main.c
index 0304328..d46360d 100644
--- a/src/nfa/rw/nfa_rw_main.c
+++ b/src/nfa/rw/nfa_rw_main.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2003-2012 Broadcom Corporation
+ *  Copyright (C) 2003-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the main implementation file for the NFA_RW
diff --git a/src/nfa/snep/nfa_snep_act.c b/src/nfa/snep/nfa_snep_act.c
deleted file mode 100644
index 68810c7..0000000
--- a/src/nfa/snep/nfa_snep_act.c
+++ /dev/null
@@ -1,1975 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This is the generic SNEP implementation file for the NFA SNEP.
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfa_api.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "llcp_defs.h"
-#include "nfa_p2p_int.h"
-#include "nfa_snep_int.h"
-#include "nfa_mem_co.h"
-#include "trace_api.h"
-
-/*****************************************************************************
-**  Global Variables
-*****************************************************************************/
-
-/*****************************************************************************
-**  Static Functions
-*****************************************************************************/
-
-/* debug functions type */
-#if (BT_TRACE_VERBOSE == TRUE)
-static char *nfa_snep_opcode (UINT8 opcode);
-#endif
-
-/*****************************************************************************
-**  Constants
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function         nfa_snep_sap_to_index
-**
-** Description      find a connection control block with SAP
-**
-**
-** Returns          index of connection control block if success
-**                  NFA_SNEP_MAX_CONN, otherwise
-**
-*******************************************************************************/
-UINT8 nfa_snep_sap_to_index (UINT8 local_sap, UINT8 remote_sap, UINT8 flags)
-{
-    UINT8 xx;
-
-    for (xx = 0; xx < NFA_SNEP_MAX_CONN; xx++)
-    {
-        if (  (nfa_snep_cb.conn[xx].p_cback)
-            &&(nfa_snep_cb.conn[xx].local_sap == local_sap)
-            &&((remote_sap == NFA_SNEP_ANY_SAP) || (nfa_snep_cb.conn[xx].remote_sap == remote_sap))
-            &&((nfa_snep_cb.conn[xx].flags & flags) == flags)  )
-        {
-            return xx;
-        }
-    }
-    return NFA_SNEP_MAX_CONN;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_allocate_cb
-**
-** Description      Allocate a connection control block
-**
-**
-** Returns          index of connection control block if success
-**                  NFA_SNEP_MAX_CONN, otherwise
-**
-*******************************************************************************/
-UINT8 nfa_snep_allocate_cb (void)
-{
-    UINT8 xx;
-
-    for (xx = 0; xx < NFA_SNEP_MAX_CONN; xx++)
-    {
-        if (nfa_snep_cb.conn[xx].p_cback == NULL)
-        {
-            memset (&nfa_snep_cb.conn[xx], 0x00, sizeof (tNFA_SNEP_CONN));
-            return xx;
-        }
-    }
-    return NFA_SNEP_MAX_CONN;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_deallocate_cb
-**
-** Description      Deallocate a connection control block
-**
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfa_snep_deallocate_cb (UINT8 xx)
-{
-    nfa_snep_cb.conn[xx].p_cback = NULL;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_timer_cback
-**
-** Description      Process timeout event when timer expires
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-static void nfa_snep_timer_cback (void *p_tle)
-{
-    UINT8 dlink = (UINT8) ((TIMER_LIST_ENT*)p_tle)->event;
-
-    SNEP_TRACE_DEBUG1 ("nfa_snep_timer_cback () dlink = %d", dlink);
-
-    /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
-    nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-    LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
-                        nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_get_efficent_miu
-**
-** Description      Calculate best MIU to send data for throughput
-**
-**
-** Returns          most efficent MIU for throughput
-**
-*******************************************************************************/
-static UINT16 nfa_snep_get_efficent_miu (UINT16 remote_miu, UINT8 remote_rw)
-{
-    UINT16 local_link_miu, remote_link_miu;
-    UINT16 max_num_pdu_in_agf;
-    UINT16 efficent_miu;
-
-    SNEP_TRACE_DEBUG2 ("nfa_snep_get_efficent_miu () remote_miu = %d, remote_rw = %d",
-                        remote_miu, remote_rw);
-
-    LLCP_GetLinkMIU (&local_link_miu, &remote_link_miu);
-
-    /* local buffer size is small than max receiving size of peer */
-    if (local_link_miu < remote_link_miu)
-    {
-        remote_link_miu = local_link_miu;
-    }
-
-    /*
-    ** 9 bytes overhead if AGF is used
-    **  - 2 byts AGF header
-    **  - at least two of 2 bytes length field for I-PDU
-    **  - 3 bytes header for I-PDU
-    */
-    if (remote_link_miu - remote_miu > 9)
-    {
-        /*
-        ** 5 bytes overhead for each I-PDU in AGF
-        **  - 2 bytes length field
-        **  - 3 bytes header for I-PDU
-        */
-        max_num_pdu_in_agf = remote_link_miu / (remote_miu + 5);
-
-        if (remote_link_miu % (remote_miu + 5))
-        {
-            max_num_pdu_in_agf += 1;
-        }
-
-        /* if local devie can put all I-PDU in one AGF */
-        if (max_num_pdu_in_agf <= remote_rw)
-        {
-            efficent_miu = (remote_link_miu - max_num_pdu_in_agf*5)/max_num_pdu_in_agf;
-        }
-        else
-        {
-            efficent_miu = remote_miu;
-        }
-    }
-    else
-    {
-        efficent_miu = remote_miu;
-    }
-
-    SNEP_TRACE_DEBUG2 ("nfa_snep_get_efficent_miu () remote_link_miu = %d, efficent_miu = %d",
-                        remote_link_miu, efficent_miu);
-
-    return efficent_miu;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_check_version
-**
-** Description      Check version of SNEP
-**
-**
-** Returns          TRUE if supported
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_check_version (UINT8 version)
-{
-    /* if major version is matched */
-    if ((version & 0xF0) == (NFA_SNEP_VERSION & 0xF0))
-        return TRUE;
-    else
-        return FALSE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_send_msg
-**
-** Description      Send complete or the first fragment of SNEP message with or
-**                  without information.
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfa_snep_send_msg (UINT8 opcode, UINT8 dlink)
-{
-    BT_HDR *p_msg;
-    UINT32 length;
-    UINT8  *p;
-    tLLCP_STATUS status = LLCP_STATUS_FAIL;
-
-#if (BT_TRACE_VERBOSE == TRUE)
-    SNEP_TRACE_DEBUG4 ("nfa_snep_send_msg () [0x%x, 0x%x]: %s (0x%02x)",
-                       nfa_snep_cb.conn[dlink].local_sap,
-                       nfa_snep_cb.conn[dlink].remote_sap,
-                       nfa_snep_opcode (opcode), opcode);
-#else
-    SNEP_TRACE_DEBUG3 ("nfa_snep_send_msg () [0x%x, 0x%x]: opcode 0x%02x",
-                       nfa_snep_cb.conn[dlink].local_sap,
-                       nfa_snep_cb.conn[dlink].remote_sap,
-                       opcode);
-#endif
-
-    /* if there is pending SNEP message and opcode can have information */
-    if (  (nfa_snep_cb.conn[dlink].p_ndef_buff)
-        &&((opcode == NFA_SNEP_REQ_CODE_GET) || (opcode == NFA_SNEP_REQ_CODE_PUT) || (opcode == NFA_SNEP_RESP_CODE_SUCCESS))  )
-    {
-        length = NFA_SNEP_HEADER_SIZE + nfa_snep_cb.conn[dlink].ndef_length;
-
-        if (opcode == NFA_SNEP_REQ_CODE_GET)
-        {
-            length += NFA_SNEP_ACCEPT_LEN_SIZE; /* add acceptable length field */
-        }
-
-        /* if message is bigger than peer's MIU, send the first fragment */
-        if (length > nfa_snep_cb.conn[dlink].tx_miu)
-        {
-            length = nfa_snep_cb.conn[dlink].tx_miu;
-        }
-
-        if ((p_msg = (BT_HDR *) GKI_getpoolbuf (LLCP_POOL_ID)) != NULL)
-        {
-            p_msg->len    = (UINT16) length;
-            p_msg->offset = LLCP_MIN_OFFSET;
-
-            p = (UINT8*) (p_msg + 1) + p_msg->offset;
-
-            /* add SNEP header */
-            UINT8_TO_BE_STREAM (p, NFA_SNEP_VERSION);
-            UINT8_TO_BE_STREAM (p, opcode);
-
-            if (opcode == NFA_SNEP_REQ_CODE_GET)
-            {
-                /* add acceptable length field in information field*/
-                UINT32_TO_BE_STREAM (p, nfa_snep_cb.conn[dlink].ndef_length + NFA_SNEP_ACCEPT_LEN_SIZE);
-                UINT32_TO_BE_STREAM (p, nfa_snep_cb.conn[dlink].acceptable_length);
-                length -= NFA_SNEP_ACCEPT_LEN_SIZE;
-            }
-            else
-            {
-                UINT32_TO_BE_STREAM (p, nfa_snep_cb.conn[dlink].ndef_length);
-            }
-
-            length -= NFA_SNEP_HEADER_SIZE;
-
-
-            /* add the first fragment or complete of NDEF message */
-            memcpy (p, nfa_snep_cb.conn[dlink].p_ndef_buff, length);
-
-#if (BT_TRACE_PROTOCOL == TRUE)
-            DispSNEP (nfa_snep_cb.conn[dlink].local_sap,
-                      nfa_snep_cb.conn[dlink].remote_sap,
-                     (UINT8*)(p_msg + 1) + p_msg->offset,
-                      NFA_SNEP_HEADER_SIZE,
-                      FALSE);
-#endif
-            status = LLCP_SendData (nfa_snep_cb.conn[dlink].local_sap,
-                                    nfa_snep_cb.conn[dlink].remote_sap, p_msg);
-
-            if (status != LLCP_STATUS_FAIL)
-            {
-                SNEP_TRACE_DEBUG2 ("nfa_snep_send_msg (): sending %d out of %d",
-                                   length, nfa_snep_cb.conn[dlink].ndef_length);
-
-                /* if sent complete SNEP message */
-                if (length == nfa_snep_cb.conn[dlink].ndef_length)
-                {
-                    nfa_snep_cb.conn[dlink].cur_length = 0;
-
-                    if (  (opcode == NFA_SNEP_RESP_CODE_SUCCESS)
-                        &&(nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_REQ_CODE_GET)  )
-                    {
-                        /* Set LLCP to send LLCP_SAP_EVT_TX_COMPLETE */
-                        LLCP_SetTxCompleteNtf (nfa_snep_cb.conn[dlink].local_sap,
-                                               nfa_snep_cb.conn[dlink].remote_sap);
-                    }
-                }
-                else
-                {
-                    /* update sent length */
-                    nfa_snep_cb.conn[dlink].cur_length = length;
-
-                    if ((opcode == NFA_SNEP_REQ_CODE_GET) || (opcode == NFA_SNEP_REQ_CODE_PUT))
-                    {
-                        nfa_snep_cb.conn[dlink].flags |= NFA_SNEP_FLAG_W4_RESP_CONTINUE;
-                    }
-                    else /* (opcode == NFA_SNEP_RESP_CODE_SUCCESS) */
-                    {
-                        nfa_snep_cb.conn[dlink].flags |= NFA_SNEP_FLAG_W4_REQ_CONTINUE;
-                    }
-                }
-            }
-        }
-    }
-    else /* opcode without information */
-    {
-        if ((p_msg = (BT_HDR *) GKI_getpoolbuf (LLCP_POOL_ID)) != NULL)
-        {
-            p_msg->len    = NFA_SNEP_HEADER_SIZE;
-            p_msg->offset = LLCP_MIN_OFFSET;
-
-            p = (UINT8*) (p_msg + 1) + p_msg->offset;
-
-            /* add SNEP header without information */
-            UINT8_TO_BE_STREAM (p, NFA_SNEP_VERSION);
-            UINT8_TO_BE_STREAM (p, opcode);
-            UINT32_TO_BE_STREAM (p, 0);
-
-#if (BT_TRACE_PROTOCOL == TRUE)
-            DispSNEP(nfa_snep_cb.conn[dlink].local_sap,
-                     nfa_snep_cb.conn[dlink].remote_sap,
-                     (UINT8*)(p_msg + 1) + p_msg->offset,
-                     NFA_SNEP_HEADER_SIZE,
-                     FALSE);
-#endif
-            status = LLCP_SendData (nfa_snep_cb.conn[dlink].local_sap,
-                                    nfa_snep_cb.conn[dlink].remote_sap, p_msg);
-        }
-    }
-
-    if (status == LLCP_STATUS_FAIL)
-    {
-        SNEP_TRACE_ERROR0 ("Cannot allocate buffer or failed to send data");
-
-        /* upper layer will free buffer when NFA_SNEP_DISC_EVT is received */
-        nfa_snep_cb.conn[dlink].p_ndef_buff = 0;
-
-        LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
-                            nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-    }
-    else if (status == LLCP_STATUS_CONGESTED)
-    {
-        nfa_snep_cb.conn[dlink].congest = TRUE;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_send_remaining
-**
-** Description      Send remaining fragments of SNEP message
-**
-**
-** Returns          void
-**
-*******************************************************************************/
-void nfa_snep_send_remaining (UINT8 dlink)
-{
-    BT_HDR *p_msg;
-    UINT8  *p_src, *p_dst;
-    UINT32 length;
-    tLLCP_STATUS status;
-
-    SNEP_TRACE_DEBUG1 ("nfa_snep_send_remaining (): dlink:0x%02X", dlink);
-
-    /* while data link connection is not congested */
-    while (  (nfa_snep_cb.conn[dlink].congest == FALSE)
-           &&(nfa_snep_cb.conn[dlink].cur_length > 0)   /* if any fragment was sent */
-           &&(nfa_snep_cb.conn[dlink].cur_length < nfa_snep_cb.conn[dlink].ndef_length)  )
-    {
-        /* start of remaining fragments */
-        p_src = nfa_snep_cb.conn[dlink].p_ndef_buff + nfa_snep_cb.conn[dlink].cur_length;
-
-        length = nfa_snep_cb.conn[dlink].ndef_length - nfa_snep_cb.conn[dlink].cur_length;
-
-        /* sending up to peer's MIU */
-        if (length > nfa_snep_cb.conn[dlink].tx_miu)
-        {
-            length = nfa_snep_cb.conn[dlink].tx_miu;
-        }
-
-        status = LLCP_STATUS_FAIL;
-
-        if ((p_msg = (BT_HDR *) GKI_getpoolbuf (LLCP_POOL_ID)) != NULL)
-        {
-            p_msg->len    = (UINT16) length;
-            p_msg->offset = LLCP_MIN_OFFSET;
-
-            p_dst = (UINT8*) (p_msg + 1) + p_msg->offset;
-
-            memcpy (p_dst, p_src, length);
-
-            status = LLCP_SendData (nfa_snep_cb.conn[dlink].local_sap,
-                                    nfa_snep_cb.conn[dlink].remote_sap, p_msg);
-
-            if (status != LLCP_STATUS_FAIL)
-            {
-                /* update sent length */
-                nfa_snep_cb.conn[dlink].cur_length += length;
-
-                SNEP_TRACE_DEBUG2 ("nfa_snep_send_remaining (): sending %d out of %d",
-                                   nfa_snep_cb.conn[dlink].cur_length,
-                                   nfa_snep_cb.conn[dlink].ndef_length);
-
-                /* if sent the last fragment */
-                if (nfa_snep_cb.conn[dlink].cur_length == nfa_snep_cb.conn[dlink].ndef_length)
-                {
-                    nfa_snep_cb.conn[dlink].cur_length = 0;
-
-                    if (  (nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_RESP_CODE_SUCCESS)
-                        &&(nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_REQ_CODE_CONTINUE)  )
-                    {
-                        /* Set LLCP to send LLCP_SAP_EVT_TX_COMPLETE */
-                        LLCP_SetTxCompleteNtf (nfa_snep_cb.conn[dlink].local_sap,
-                                               nfa_snep_cb.conn[dlink].remote_sap);
-                    }
-                }
-            }
-        }
-
-        if (status == LLCP_STATUS_CONGESTED)
-        {
-            nfa_snep_cb.conn[dlink].congest = TRUE;
-
-            /* wait for uncongested event from LLCP */
-            break;
-        }
-        else if (status == LLCP_STATUS_FAIL)
-        {
-            SNEP_TRACE_ERROR0 ("Cannot allocate buffer or failed to send data");
-
-            /* upper layer will free buffer when NFA_SNEP_DISC_EVT is received */
-            nfa_snep_cb.conn[dlink].p_ndef_buff = 0;
-
-            LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
-                                nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-            return;
-        }
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_llcp_cback
-**
-** Description      Processing event from LLCP
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_snep_llcp_cback (tLLCP_SAP_CBACK_DATA *p_data)
-{
-    SNEP_TRACE_DEBUG2 ("nfa_snep_llcp_cback (): event:0x%02X, local_sap:0x%02X", p_data->hdr.event, p_data->hdr.local_sap);
-
-    switch (p_data->hdr.event)
-    {
-    case LLCP_SAP_EVT_DATA_IND:
-        nfa_snep_proc_llcp_data_ind (p_data);
-        break;
-
-    case LLCP_SAP_EVT_CONNECT_IND:
-        nfa_snep_proc_llcp_connect_ind (p_data);
-        break;
-
-    case LLCP_SAP_EVT_CONNECT_RESP:
-        nfa_snep_proc_llcp_connect_resp (p_data);
-        break;
-
-    case LLCP_SAP_EVT_DISCONNECT_IND:
-        nfa_snep_proc_llcp_disconnect_ind (p_data);
-        break;
-
-    case LLCP_SAP_EVT_DISCONNECT_RESP:
-        nfa_snep_proc_llcp_disconnect_resp (p_data);
-        break;
-
-    case LLCP_SAP_EVT_CONGEST:
-        /* congestion start/end */
-        nfa_snep_proc_llcp_congest (p_data);
-        break;
-
-    case LLCP_SAP_EVT_LINK_STATUS:
-        nfa_snep_proc_llcp_link_status (p_data);
-        break;
-
-    case LLCP_SAP_EVT_TX_COMPLETE:
-        nfa_snep_proc_llcp_tx_complete (p_data);
-        break;
-
-    default:
-        SNEP_TRACE_ERROR1 ("Unknown event:0x%02X", p_data->hdr.event);
-        return;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_validate_rx_msg
-**
-** Description      Validate version, opcode, length in received message
-**
-**
-** Returns          TRUE if message is valid
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_validate_rx_msg (UINT8 dlink)
-{
-    UINT32  length;
-    UINT8   buffer[NFA_SNEP_HEADER_SIZE], *p;
-    BOOLEAN more;
-    UINT8   version, opcode;
-    UINT32  info_len;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_validate_rx_msg ()");
-
-    more = LLCP_ReadDataLinkData (nfa_snep_cb.conn[dlink].local_sap,
-                                  nfa_snep_cb.conn[dlink].remote_sap,
-                                  NFA_SNEP_HEADER_SIZE,
-                                  &length, buffer);
-
-#if (BT_TRACE_PROTOCOL == TRUE)
-    DispSNEP(nfa_snep_cb.conn[dlink].local_sap,
-             nfa_snep_cb.conn[dlink].remote_sap,
-             buffer,
-             (UINT16)length,
-             TRUE);
-#endif
-
-    /* check if it has minimum header,
-    ** the first fragment shall include at least the entier SNEP header
-    */
-    if (length < NFA_SNEP_HEADER_SIZE)
-    {
-        SNEP_TRACE_ERROR0 ("The first fragment shall include at least the entire SNEP header");
-
-        /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
-        nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-        LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
-                            nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-        return FALSE;
-    }
-
-    p = buffer;
-
-    /* parse SNEP header */
-    BE_STREAM_TO_UINT8 (version, p);
-    BE_STREAM_TO_UINT8 (opcode,  p);
-    BE_STREAM_TO_UINT32 (info_len, p);
-
-    /* check version of SNEP */
-    if (!nfa_snep_check_version (version))
-    {
-        nfa_snep_send_msg (NFA_SNEP_RESP_CODE_UNSUPP_VER, dlink);
-        return FALSE;
-    }
-
-    /* check valid opcode for server */
-    if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_SERVER)
-    {
-        /* if this is response message */
-        if (opcode & NFA_SNEP_RESP_CODE_CONTINUE)
-        {
-            SNEP_TRACE_ERROR0 ("Invalid opcode for server");
-
-            /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
-            nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-            LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
-                                nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-            return FALSE;
-        }
-        else if (  (opcode != NFA_SNEP_REQ_CODE_CONTINUE)
-                 &&(opcode != NFA_SNEP_REQ_CODE_GET)
-                 &&(opcode != NFA_SNEP_REQ_CODE_PUT)
-                 &&(opcode != NFA_SNEP_REQ_CODE_REJECT)  )
-        {
-            SNEP_TRACE_ERROR0 ("Not supported opcode for server");
-            nfa_snep_send_msg (NFA_SNEP_RESP_CODE_NOT_IMPLM, dlink);
-            return FALSE;
-        }
-    }
-    /* check valid opcode for client */
-    else
-    {
-        if (  (opcode != NFA_SNEP_RESP_CODE_CONTINUE)
-            &&(opcode != NFA_SNEP_RESP_CODE_SUCCESS)
-            &&(opcode != NFA_SNEP_RESP_CODE_NOT_FOUND)
-            &&(opcode != NFA_SNEP_RESP_CODE_EXCESS_DATA)
-            &&(opcode != NFA_SNEP_RESP_CODE_BAD_REQ)
-            &&(opcode != NFA_SNEP_RESP_CODE_NOT_IMPLM)
-            &&(opcode != NFA_SNEP_RESP_CODE_UNSUPP_VER)
-            &&(opcode != NFA_SNEP_RESP_CODE_REJECT)  )
-        {
-            SNEP_TRACE_ERROR0 ("Invalid opcode for client");
-            /* client cannot send error code so disconnect */
-            /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
-            nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-            LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
-                                nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-            return FALSE;
-        }
-    }
-
-    if (opcode == NFA_SNEP_REQ_CODE_GET)
-    {
-        more = LLCP_ReadDataLinkData (nfa_snep_cb.conn[dlink].local_sap,
-                                      nfa_snep_cb.conn[dlink].remote_sap,
-                                      NFA_SNEP_ACCEPT_LEN_SIZE,
-                                      &length, buffer);
-
-        if (length < NFA_SNEP_ACCEPT_LEN_SIZE)
-        {
-            /*
-            ** Including acceptable length in the first segment is not mandated in spec
-            ** but MIU is always big enough to include acceptable length field.
-            */
-            nfa_snep_send_msg (NFA_SNEP_RESP_CODE_BAD_REQ, dlink);
-            return FALSE;
-        }
-
-        p = buffer;
-        BE_STREAM_TO_UINT32 (nfa_snep_cb.conn[dlink].acceptable_length, p);
-
-        /* store expected NDEF message length */
-        nfa_snep_cb.conn[dlink].ndef_length = info_len - NFA_SNEP_ACCEPT_LEN_SIZE;
-    }
-    else if (  (opcode == NFA_SNEP_REQ_CODE_PUT)
-             ||((opcode == NFA_SNEP_RESP_CODE_SUCCESS) && (nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_REQ_CODE_GET)))
-    {
-        /* store expected NDEF message length */
-        nfa_snep_cb.conn[dlink].ndef_length = info_len;
-    }
-    else
-    {
-        if (more)
-        {
-            SNEP_TRACE_ERROR0 ("The information field shall not be transmitted with this request or response");
-
-            if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_SERVER)
-            {
-                nfa_snep_send_msg (NFA_SNEP_RESP_CODE_BAD_REQ, dlink);
-            }
-            /* client cannot send error code so disconnect */
-            /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
-            nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-            LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
-                                nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-            return FALSE;
-        }
-    }
-
-    /* store received opcode */
-    nfa_snep_cb.conn[dlink].rx_code = opcode;
-
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_store_first_rx_msg
-**
-** Description      Allocate buffer and store the first fragment
-**
-**
-** Returns          TRUE if the received fragment is successfully stored
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_store_first_rx_msg (UINT8 dlink)
-{
-    tNFA_SNEP_EVT_DATA evt_data;
-    BOOLEAN            more;
-    UINT32             length;
-
-    /* send event to upper layer of this data link connection to allocate buffer */
-    evt_data.alloc.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-    evt_data.alloc.req_code    = nfa_snep_cb.conn[dlink].rx_code;
-    evt_data.alloc.ndef_length = nfa_snep_cb.conn[dlink].ndef_length;
-    evt_data.alloc.p_buff      = NULL;
-
-    nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_ALLOC_BUFF_EVT, &evt_data);
-    nfa_snep_cb.conn[dlink].p_ndef_buff = evt_data.alloc.p_buff;
-
-    /* store information into application buffer */
-    if (nfa_snep_cb.conn[dlink].p_ndef_buff)
-    {
-        /* store buffer size */
-        nfa_snep_cb.conn[dlink].buff_length = evt_data.alloc.ndef_length;
-
-        more = LLCP_ReadDataLinkData (nfa_snep_cb.conn[dlink].local_sap,
-                                      nfa_snep_cb.conn[dlink].remote_sap,
-                                      nfa_snep_cb.conn[dlink].buff_length,
-                                      &length,
-                                      nfa_snep_cb.conn[dlink].p_ndef_buff);
-
-        /* store received message length */
-        nfa_snep_cb.conn[dlink].cur_length  = (UINT32) length;
-
-        SNEP_TRACE_DEBUG2 ("Received NDEF on SNEP, %d ouf of %d",
-                           nfa_snep_cb.conn[dlink].cur_length,
-                           nfa_snep_cb.conn[dlink].ndef_length);
-
-        /* if fragmented */
-        if (nfa_snep_cb.conn[dlink].ndef_length > nfa_snep_cb.conn[dlink].cur_length)
-        {
-            nfa_snep_cb.conn[dlink].rx_fragments = TRUE;
-        }
-        else if (more)
-        {
-            /* ignore extra bytes in the message */
-            length = LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
-                                               nfa_snep_cb.conn[dlink].remote_sap);
-
-            SNEP_TRACE_WARNING1 ("Received extra %d bytes on SNEP", length);
-        }
-
-        return TRUE;
-    }
-    else
-    {
-        SNEP_TRACE_ERROR1 ("Upper layer cannot allocate buffer for %d bytes",
-                           nfa_snep_cb.conn[dlink].ndef_length);
-
-        /* clear data in data link connection */
-        length = LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
-                                           nfa_snep_cb.conn[dlink].remote_sap);
-
-        /* if fragmented */
-        if (nfa_snep_cb.conn[dlink].ndef_length > nfa_snep_cb.conn[dlink].cur_length)
-        {
-            /* notify peer not to send any more fragment */
-            if (evt_data.alloc.resp_code != NFA_SNEP_RESP_CODE_NOT_IMPLM)
-            {
-                /* Set proper code */
-                evt_data.alloc.resp_code = NFA_SNEP_REQ_CODE_REJECT;
-            }
-        }
-        else
-        {
-            if (evt_data.alloc.resp_code != NFA_SNEP_RESP_CODE_NOT_IMPLM)
-            {
-                /* Set proper code */
-                evt_data.alloc.resp_code = NFA_SNEP_RESP_CODE_NOT_FOUND;
-            }
-        }
-
-        nfa_snep_send_msg (evt_data.alloc.resp_code, dlink);
-
-        return FALSE;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_proc_first_rx_msg
-**
-** Description      Process the first part of received message
-**
-**
-** Returns          TRUE if it is not fragmented message
-**                  FALSE if it is fragmented or found error
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_proc_first_rx_msg (UINT8 dlink)
-{
-    UINT32             length;
-    tNFA_SNEP_EVT_DATA evt_data;
-    BOOLEAN            more;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_proc_first_rx_msg ()");
-
-    /* if version, opcode or length is not valid in received message */
-    if (!nfa_snep_validate_rx_msg (dlink))
-    {
-        /* clear data in data link connection */
-        LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
-                                  nfa_snep_cb.conn[dlink].remote_sap);
-        return FALSE;
-    }
-
-    if (nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_REQ_CODE_GET)
-    {
-        /* if failed to allocate buffer */
-        if (!nfa_snep_store_first_rx_msg (dlink))
-        {
-            return FALSE;
-        }
-        else
-        {
-            if (nfa_snep_cb.conn[dlink].rx_fragments == TRUE)
-            {
-                /* let peer send remaining fragments */
-                nfa_snep_send_msg (NFA_SNEP_RESP_CODE_CONTINUE, dlink);
-
-                return FALSE;
-            }
-        }
-    }
-    else if (nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_REQ_CODE_PUT)
-    {
-        /* if failed to allocate buffer */
-        if (!nfa_snep_store_first_rx_msg (dlink))
-        {
-            return FALSE;
-        }
-        else
-        {
-            if (nfa_snep_cb.conn[dlink].rx_fragments == TRUE)
-            {
-                /* let peer send remaining fragments */
-                nfa_snep_send_msg (NFA_SNEP_RESP_CODE_CONTINUE, dlink);
-                return FALSE;
-            }
-        }
-    }
-    /* if we got response of GET request from server */
-    else if (  (nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_RESP_CODE_SUCCESS)
-             &&(nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_REQ_CODE_GET)  )
-    {
-        /* if server is sending more than acceptable length */
-        if (nfa_snep_cb.conn[dlink].ndef_length > nfa_snep_cb.conn[dlink].acceptable_length)
-        {
-            SNEP_TRACE_ERROR0 ("Server is sending more than acceptable length");
-
-            length = LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
-                                               nfa_snep_cb.conn[dlink].remote_sap);
-
-            /* if fragmented */
-            if (nfa_snep_cb.conn[dlink].ndef_length > length)
-            {
-                nfa_snep_send_msg (NFA_SNEP_REQ_CODE_REJECT, dlink);
-                nfa_snep_cb.conn[dlink].rx_fragments = FALSE;
-            }
-
-            /* return error to client so buffer can be freed */
-            evt_data.get_resp.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-            evt_data.get_resp.resp_code   = NFA_SNEP_RESP_CODE_EXCESS_DATA;
-            evt_data.get_resp.ndef_length = 0;
-            evt_data.get_resp.p_ndef      = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
-            nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_GET_RESP_EVT, &evt_data);
-            nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-            return FALSE;
-        }
-
-        more = LLCP_ReadDataLinkData (nfa_snep_cb.conn[dlink].local_sap,
-                                      nfa_snep_cb.conn[dlink].remote_sap,
-                                      nfa_snep_cb.conn[dlink].buff_length,
-                                      &length,
-                                      nfa_snep_cb.conn[dlink].p_ndef_buff);
-
-        /* store received message length */
-        nfa_snep_cb.conn[dlink].cur_length = length;
-
-        SNEP_TRACE_DEBUG2 ("Received NDEF on SNEP, %d ouf of %d",
-                           nfa_snep_cb.conn[dlink].cur_length,
-                           nfa_snep_cb.conn[dlink].ndef_length);
-
-        if (nfa_snep_cb.conn[dlink].ndef_length > nfa_snep_cb.conn[dlink].cur_length)
-        {
-            nfa_snep_cb.conn[dlink].rx_fragments = TRUE;
-        }
-        else if (more)
-        {
-            /* ignore extra bytes in the message */
-            length = LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
-                                               nfa_snep_cb.conn[dlink].remote_sap);
-
-            SNEP_TRACE_WARNING1 ("Received extra %d bytes on SNEP", length);
-        }
-
-        if (nfa_snep_cb.conn[dlink].rx_fragments == TRUE)
-        {
-            /* let peer send remaining fragments */
-            nfa_snep_send_msg (NFA_SNEP_REQ_CODE_CONTINUE, dlink);
-
-            /* start timer for next fragment */
-            nfa_sys_start_timer (&nfa_snep_cb.conn[dlink].timer, dlink, NFA_SNEP_CLIENT_TIMEOUT);
-
-            return FALSE;
-        }
-    }
-
-    /* other than above cases, there is no inforamtion field */
-
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_assemble_fragments
-**
-** Description      Assemble fragments of SNEP message
-**
-**
-** Returns          TRUE if it is not fragmented message
-**                  FALSE if it is fragmented or found error
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_assemble_fragments (UINT8 dlink)
-{
-    BOOLEAN more;
-    UINT32  length;
-
-    more = LLCP_ReadDataLinkData (nfa_snep_cb.conn[dlink].local_sap,
-                                  nfa_snep_cb.conn[dlink].remote_sap,
-                                  nfa_snep_cb.conn[dlink].buff_length - nfa_snep_cb.conn[dlink].cur_length,
-                                  &length,
-                                  nfa_snep_cb.conn[dlink].p_ndef_buff + nfa_snep_cb.conn[dlink].cur_length);
-
-    nfa_snep_cb.conn[dlink].cur_length += length;
-
-    SNEP_TRACE_DEBUG2 ("Received NDEF on SNEP, %d ouf of %d",
-                       nfa_snep_cb.conn[dlink].cur_length,
-                       nfa_snep_cb.conn[dlink].ndef_length);
-
-    /* if received the last fragment */
-    if (nfa_snep_cb.conn[dlink].ndef_length == nfa_snep_cb.conn[dlink].cur_length)
-    {
-        nfa_snep_cb.conn[dlink].rx_fragments = FALSE;
-
-        if (more)
-        {
-            length = LLCP_FlushDataLinkRxData (nfa_snep_cb.conn[dlink].local_sap,
-                                               nfa_snep_cb.conn[dlink].remote_sap);
-
-            SNEP_TRACE_ERROR2 ("Received extra %d bytes more than NDEF length (%d)",
-                               length,
-                               nfa_snep_cb.conn[dlink].ndef_length);
-
-            /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
-            nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-            LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
-                                nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-
-            return FALSE;
-        }
-    }
-    else
-    {
-        if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CLIENT)
-        {
-            /* wait for more fragments */
-            nfa_sys_start_timer (&nfa_snep_cb.conn[dlink].timer, dlink, NFA_SNEP_CLIENT_TIMEOUT);
-        }
-
-        return FALSE;
-    }
-
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_proc_llcp_data_ind
-**
-** Description      Processing incoming data from LLCP
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_data_ind (tLLCP_SAP_CBACK_DATA  *p_data)
-{
-    UINT8              dlink;
-    tNFA_SNEP_EVT_DATA evt_data;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_data_ind ()");
-
-    /* find connection control block with SAP */
-    dlink = nfa_snep_sap_to_index (p_data->data_ind.local_sap,
-                                   p_data->data_ind.remote_sap,
-                                   NFA_SNEP_FLAG_ANY);
-
-    /* if found */
-    if (  (dlink < NFA_SNEP_MAX_CONN)
-        &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED)  )
-    {
-        if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CLIENT)
-        {
-            /* stop timer for response from server */
-            nfa_sys_stop_timer (&nfa_snep_cb.conn[dlink].timer);
-        }
-
-        /* if received the first fragment or complete SNEP message */
-        if (nfa_snep_cb.conn[dlink].rx_fragments == FALSE)
-        {
-            if (!nfa_snep_proc_first_rx_msg (dlink))
-            {
-                /* need more data or found error */
-                return;
-            }
-        }
-        /* if received other than the first fragment */
-        else
-        {
-            if (!nfa_snep_assemble_fragments (dlink))
-            {
-                /* need more data or found error */
-                return;
-            }
-        }
-
-        /* processing complete SNEP message */
-        switch (nfa_snep_cb.conn[dlink].rx_code)
-        {
-        case NFA_SNEP_REQ_CODE_CONTINUE:
-            if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_W4_REQ_CONTINUE)
-            {
-                nfa_snep_cb.conn[dlink].flags &= ~NFA_SNEP_FLAG_W4_REQ_CONTINUE;
-
-                /* send remaining fragments of GET response */
-                nfa_snep_send_remaining (dlink);
-            }
-            else
-            {
-                SNEP_TRACE_ERROR0 ("Received invalid NFA_SNEP_REQ_CODE_CONTINUE");
-
-                /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
-                nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-                LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
-                                    nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-            }
-            break;
-
-        case NFA_SNEP_REQ_CODE_GET:
-            evt_data.get_req.conn_handle       = (NFA_HANDLE_GROUP_SNEP | dlink);
-            evt_data.get_req.acceptable_length = nfa_snep_cb.conn[dlink].acceptable_length;
-
-            /* NDEF message */
-            evt_data.get_req.ndef_length = nfa_snep_cb.conn[dlink].ndef_length;
-            evt_data.get_req.p_ndef      = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
-            nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-            /* send event to server of this data link connection */
-            nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_GET_REQ_EVT, &evt_data);
-            break;
-
-        case NFA_SNEP_REQ_CODE_PUT:
-            evt_data.put_req.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-
-            /* NDEF message */
-            evt_data.put_req.ndef_length = nfa_snep_cb.conn[dlink].ndef_length;
-            evt_data.put_req.p_ndef      = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
-            nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-            /* send event to server of this data link connection */
-            nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_PUT_REQ_EVT, &evt_data);
-            break;
-
-        case NFA_SNEP_RESP_CODE_CONTINUE:
-            if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_W4_RESP_CONTINUE)
-            {
-                nfa_snep_cb.conn[dlink].flags &= ~NFA_SNEP_FLAG_W4_RESP_CONTINUE;
-                /* send remaining fragments GET/PUT request */
-                nfa_snep_send_remaining (dlink);
-            }
-            else
-            {
-                SNEP_TRACE_ERROR0 ("Received invalid NFA_SNEP_RESP_CODE_CONTINUE");
-
-                /* application will free buffer when receiving NFA_SNEP_DISC_EVT */
-                nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-                LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
-                                    nfa_snep_cb.conn[dlink].remote_sap, TRUE);
-            }
-            break;
-
-        case NFA_SNEP_RESP_CODE_SUCCESS:
-            if (nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_REQ_CODE_GET)
-            {
-                evt_data.get_resp.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-                evt_data.get_resp.resp_code   = NFA_SNEP_RESP_CODE_SUCCESS;
-                evt_data.get_resp.ndef_length = nfa_snep_cb.conn[dlink].ndef_length;
-                evt_data.get_resp.p_ndef      = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
-                nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-
-                /* send event to client of this data link connection */
-                nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_GET_RESP_EVT, &evt_data);
-            }
-            else
-            {
-                evt_data.put_resp.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-                evt_data.put_resp.resp_code   = NFA_SNEP_RESP_CODE_SUCCESS;
-
-                /* send event to client of this data link connection */
-                nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_PUT_RESP_EVT, &evt_data);
-            }
-            break;
-
-        case NFA_SNEP_RESP_CODE_NOT_FOUND:
-        case NFA_SNEP_RESP_CODE_EXCESS_DATA:
-        case NFA_SNEP_RESP_CODE_BAD_REQ:
-        case NFA_SNEP_RESP_CODE_NOT_IMPLM:
-        case NFA_SNEP_RESP_CODE_UNSUPP_VER:
-        case NFA_SNEP_RESP_CODE_REJECT:
-            /* if client sent GET request */
-            if (nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_REQ_CODE_GET)
-            {
-                evt_data.get_resp.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-                evt_data.get_resp.resp_code   = nfa_snep_cb.conn[dlink].rx_code;
-                evt_data.get_resp.ndef_length = 0;
-                evt_data.get_resp.p_ndef      = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
-                /* send event to client of this data link connection */
-                nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_GET_RESP_EVT, &evt_data);
-            }
-            /* if client sent PUT request */
-            else if (nfa_snep_cb.conn[dlink].tx_code == NFA_SNEP_REQ_CODE_PUT)
-            {
-                evt_data.put_resp.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-                evt_data.put_resp.resp_code   = nfa_snep_cb.conn[dlink].rx_code;
-
-                /* send event to client of this data link connection */
-                nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_PUT_RESP_EVT, &evt_data);
-            }
-
-            /* if there is remaining SNEP message */
-            if (nfa_snep_cb.conn[dlink].p_ndef_buff)
-            {
-                nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-            }
-            break;
-        }
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_proc_llcp_connect_ind
-**
-** Description      Processing connection request from peer
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_connect_ind (tLLCP_SAP_CBACK_DATA  *p_data)
-{
-    UINT8 server, dlink;
-    tLLCP_CONNECTION_PARAMS params;
-    tNFA_SNEP_EVT_DATA      evt_data;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_connect_ind ()");
-
-    server = nfa_snep_sap_to_index (p_data->connect_ind.server_sap,
-                                    NFA_SNEP_ANY_SAP,
-                                    NFA_SNEP_FLAG_SERVER);
-
-    /* if found valid server */
-    if (server < NFA_SNEP_MAX_CONN)
-    {
-        /* allocate connection control block for data link connection */
-        dlink = nfa_snep_allocate_cb ();
-
-        if (dlink < NFA_SNEP_MAX_CONN)
-        {
-            /* set data link connection's callback to server's callback */
-            /* request will be sent to this server */
-            nfa_snep_cb.conn[dlink].local_sap  = p_data->connect_ind.local_sap;
-            nfa_snep_cb.conn[dlink].remote_sap = p_data->connect_ind.remote_sap;
-            nfa_snep_cb.conn[dlink].p_cback    = nfa_snep_cb.conn[server].p_cback;
-            nfa_snep_cb.conn[dlink].flags      = NFA_SNEP_FLAG_SERVER|NFA_SNEP_FLAG_CONNECTED;
-
-            nfa_snep_cb.conn[dlink].tx_miu = nfa_snep_get_efficent_miu (p_data->connect_ind.miu,
-                                                                        p_data->connect_ind.rw);
-
-            /* accept connection request */
-            params.miu = NFA_SNEP_MIU;
-            params.rw  = NFA_SNEP_RW;
-            params.sn[0] = 0;
-
-            LLCP_ConnectCfm (p_data->connect_ind.local_sap,
-                             p_data->connect_ind.remote_sap, &params);
-
-            evt_data.connect.reg_handle  = (NFA_HANDLE_GROUP_SNEP | server);
-            evt_data.connect.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-            nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_CONNECTED_EVT, &evt_data);
-        }
-        else
-        {
-            SNEP_TRACE_ERROR0 ("Cannot allocate connection control block");
-            LLCP_ConnectReject (p_data->connect_ind.local_sap,
-                                p_data->connect_ind.remote_sap,
-                                LLCP_SAP_DM_REASON_TEMP_REJECT_THIS);
-        }
-    }
-    else
-    {
-        SNEP_TRACE_ERROR0 ("Cannot find SNEP server");
-        LLCP_ConnectReject (p_data->connect_ind.local_sap,
-                            p_data->connect_ind.remote_sap,
-                            LLCP_SAP_DM_REASON_NO_SERVICE);
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_proc_llcp_connect_resp
-**
-** Description      Processing connection response from peer
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_connect_resp (tLLCP_SAP_CBACK_DATA  *p_data)
-{
-    UINT8 dlink;
-    tNFA_SNEP_EVT_DATA evt_data;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_connect_resp ()");
-
-    /* find client by SAP */
-    dlink = nfa_snep_sap_to_index (p_data->connect_resp.local_sap,
-                                   NFA_SNEP_ANY_SAP,
-                                   NFA_SNEP_FLAG_CLIENT|NFA_SNEP_FLAG_CONNECTING);
-
-    /* if found client */
-    if (dlink < NFA_SNEP_MAX_CONN)
-    {
-        nfa_snep_cb.conn[dlink].remote_sap = p_data->connect_resp.remote_sap;
-        nfa_snep_cb.conn[dlink].flags      = NFA_SNEP_FLAG_CLIENT|NFA_SNEP_FLAG_CONNECTED;
-
-        nfa_snep_cb.conn[dlink].tx_miu = nfa_snep_get_efficent_miu (p_data->connect_resp.miu,
-                                                                    p_data->connect_resp.rw);
-
-        evt_data.connect.reg_handle  = (NFA_HANDLE_GROUP_SNEP | dlink);
-        evt_data.connect.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-        nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_CONNECTED_EVT, &evt_data);
-    }
-    else
-    {
-        SNEP_TRACE_ERROR0 ("Cannot find SNEP client");
-        LLCP_DisconnectReq (p_data->connect_resp.local_sap,
-                            p_data->connect_resp.remote_sap, TRUE);
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_proc_llcp_disconnect_ind
-**
-** Description      Processing disconnection request from peer
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_disconnect_ind (tLLCP_SAP_CBACK_DATA  *p_data)
-{
-    UINT8              dlink;
-    tNFA_SNEP_EVT_DATA evt_data;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_disconnect_ind ()");
-
-    /* find connection control block by SAP */
-    dlink = nfa_snep_sap_to_index (p_data->disconnect_ind.local_sap,
-                                   p_data->disconnect_ind.remote_sap,
-                                   NFA_SNEP_FLAG_ANY);
-
-    /* if found */
-    if (dlink < NFA_SNEP_MAX_CONN)
-    {
-        evt_data.disc.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-
-        nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_DISC_EVT, &evt_data);
-
-        if (nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CLIENT)
-        {
-            /* clear other flags */
-            nfa_snep_cb.conn[dlink].flags      = NFA_SNEP_FLAG_CLIENT;
-            nfa_snep_cb.conn[dlink].remote_sap = LLCP_INVALID_SAP;
-        }
-        else
-        {
-            nfa_snep_deallocate_cb (dlink);
-        }
-    }
-    else
-    {
-        SNEP_TRACE_ERROR0 ("Cannot find SNEP connection");
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_proc_llcp_disconnect_resp
-**
-** Description      Processing rejected connection from peer
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_disconnect_resp (tLLCP_SAP_CBACK_DATA  *p_data)
-{
-    UINT8              dlink, flags;
-    UINT8              remote_sap;
-    tNFA_SNEP_EVT_DATA evt_data;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_disconnect_resp ()");
-
-    /* if remote sent response to disconnection requested by local */
-    if (p_data->disconnect_resp.reason == LLCP_SAP_DM_REASON_RESP_DISC)
-    {
-        remote_sap = p_data->disconnect_resp.remote_sap;
-        flags      = NFA_SNEP_FLAG_CLIENT|NFA_SNEP_FLAG_CONNECTED;
-    }
-    else /* connection failed so we don't have remote SAP */
-    {
-        remote_sap = NFA_SNEP_ANY_SAP;
-        flags      = NFA_SNEP_FLAG_CLIENT|NFA_SNEP_FLAG_CONNECTING;
-    }
-
-    /* find connection control block by SAP */
-    dlink = nfa_snep_sap_to_index (p_data->disconnect_resp.local_sap,
-                                   remote_sap,
-                                   flags);
-
-    /* if found client */
-    if (dlink < NFA_SNEP_MAX_CONN)
-    {
-        evt_data.disc.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-
-        nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_DISC_EVT, &evt_data);
-
-        /* clear other flags */
-        nfa_snep_cb.conn[dlink].flags      = NFA_SNEP_FLAG_CLIENT;
-        nfa_snep_cb.conn[dlink].remote_sap = LLCP_INVALID_SAP;
-    }
-    else
-    {
-        /* find server connection control block by SAP */
-        dlink = nfa_snep_sap_to_index (p_data->disconnect_resp.local_sap,
-                                       remote_sap,
-                                       NFA_SNEP_FLAG_SERVER|NFA_SNEP_FLAG_CONNECTED);
-
-        /* if found server connection */
-        if (dlink < NFA_SNEP_MAX_CONN)
-        {
-            evt_data.disc.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-
-            nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_DISC_EVT, &evt_data);
-
-            nfa_snep_deallocate_cb (dlink);
-        }
-        else
-        {
-            SNEP_TRACE_ERROR0 ("Cannot find SNEP connection");
-        }
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_proc_llcp_congest
-**
-** Description      Processing LLCP congestion event
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_congest (tLLCP_SAP_CBACK_DATA  *p_data)
-{
-    UINT8 dlink;
-
-    SNEP_TRACE_DEBUG3 ("nfa_snep_proc_llcp_congest () local_sap=0x%x, remote_sap=0x%x, is_congested=%d",
-                       p_data->congest.local_sap,
-                       p_data->congest.remote_sap,
-                       p_data->congest.is_congested);
-
-    /* if data link connection is congested */
-    if (p_data->congest.link_type == LLCP_LINK_TYPE_DATA_LINK_CONNECTION)
-    {
-        dlink = nfa_snep_sap_to_index (p_data->congest.local_sap,
-                                       p_data->congest.remote_sap,
-                                       NFA_SNEP_FLAG_ANY);
-
-        if (  (dlink < NFA_SNEP_MAX_CONN)
-            &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED)  )
-        {
-            nfa_snep_cb.conn[dlink].congest = p_data->congest.is_congested;
-
-            if (!nfa_snep_cb.conn[dlink].congest)
-            {
-                /* if received CONTINUE then continue to send remaining fragments */
-                if (  (nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_REQ_CODE_CONTINUE)
-                    ||(nfa_snep_cb.conn[dlink].rx_code == NFA_SNEP_RESP_CODE_CONTINUE)  )
-                {
-                    nfa_snep_send_remaining (dlink);
-                }
-            }
-        }
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_proc_llcp_link_status
-**
-** Description      Processing LLCP link status
-**
-**
-** Returns          none
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_link_status (tLLCP_SAP_CBACK_DATA  *p_data)
-{
-    UINT8              xx;
-    tNFA_SNEP_EVT_DATA evt_data;
-
-    SNEP_TRACE_DEBUG1 ("nfa_snep_proc_llcp_link_status () is_activated:%d",
-                       p_data->link_status.is_activated);
-
-    xx = nfa_snep_sap_to_index (p_data->link_status.local_sap,
-                                NFA_SNEP_ANY_SAP,
-                                NFA_SNEP_FLAG_CLIENT);
-
-    if (xx < NFA_SNEP_MAX_CONN)
-    {
-        evt_data.activated.client_handle = (NFA_HANDLE_GROUP_SNEP | xx);
-
-        /* if LLCP link is activated */
-        if (p_data->link_status.is_activated == TRUE)
-        {
-            /* notify only client which may want to connect */
-            nfa_snep_cb.conn[xx].p_cback (NFA_SNEP_ACTIVATED_EVT, &evt_data);
-        }
-        else
-        {
-            /* LLCP link is deactivated */
-            nfa_snep_cb.conn[xx].p_cback (NFA_SNEP_DEACTIVATED_EVT, &evt_data);
-        }
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_proc_llcp_tx_complete
-**
-** Description      Processing LLCP tx complete event
-**
-**
-** Returns          none
-**
-*******************************************************************************/
-void nfa_snep_proc_llcp_tx_complete (tLLCP_SAP_CBACK_DATA  *p_data)
-{
-    UINT8              dlink;
-    tNFA_SNEP_EVT_DATA evt_data;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_proc_llcp_tx_complete ()");
-
-    dlink = nfa_snep_sap_to_index (p_data->tx_complete.local_sap,
-                                   p_data->tx_complete.remote_sap,
-                                   NFA_SNEP_FLAG_SERVER|NFA_SNEP_FLAG_CONNECTED);
-
-    if (dlink < NFA_SNEP_MAX_CONN)
-    {
-        /* notify upper layer that transmission is complete */
-        evt_data.get_resp_cmpl.conn_handle = (NFA_HANDLE_GROUP_SNEP | dlink);
-        evt_data.get_resp_cmpl.p_buff      = nfa_snep_cb.conn[dlink].p_ndef_buff;
-
-        nfa_snep_cb.conn[dlink].p_cback (NFA_SNEP_GET_RESP_CMPL_EVT, &evt_data);
-        nfa_snep_cb.conn[dlink].p_ndef_buff = NULL;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_reg_server
-**
-** Description      Allocate a connection control block as server and register to LLCP
-**
-**
-** Returns          TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_reg_server (tNFA_SNEP_MSG *p_msg)
-{
-    tNFA_SNEP_EVT_DATA  evt_data;
-    UINT8               xx, local_sap = LLCP_INVALID_SAP;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_reg_server ()");
-
-    xx = nfa_snep_allocate_cb ();
-
-    if (xx < NFA_SNEP_MAX_CONN)
-    {
-        local_sap = LLCP_RegisterServer (p_msg->api_reg_server.server_sap,
-                                         LLCP_LINK_TYPE_DATA_LINK_CONNECTION,
-                                         p_msg->api_reg_server.service_name,
-                                         nfa_snep_llcp_cback);
-    }
-
-    BCM_STRNCPY_S (evt_data.reg.service_name, sizeof (evt_data.reg.service_name),
-                   p_msg->api_reg_server.service_name, LLCP_MAX_SN_LEN);
-    evt_data.reg.service_name[LLCP_MAX_SN_LEN] = 0x00;
-
-    if ((xx == NFA_SNEP_MAX_CONN) || (local_sap == LLCP_INVALID_SAP))
-    {
-        SNEP_TRACE_ERROR0 ("Cannot allocate or register SNEP server");
-
-        evt_data.reg.status = NFA_STATUS_FAILED;
-        p_msg->api_reg_server.p_cback (NFA_SNEP_REG_EVT, &evt_data);
-        return TRUE;
-    }
-
-    if (!nfa_snep_cb.is_dta_mode)
-    {
-        /* if need to update WKS in LLCP Gen bytes */
-        if (local_sap <= LLCP_UPPER_BOUND_WK_SAP)
-        {
-            nfa_p2p_enable_listening (NFA_ID_SNEP, TRUE);
-            nfa_snep_cb.listen_enabled = TRUE;
-        }
-        else if (!nfa_snep_cb.listen_enabled)
-        {
-            nfa_p2p_enable_listening (NFA_ID_SNEP, FALSE);
-            nfa_snep_cb.listen_enabled = TRUE;
-        }
-    }
-
-    nfa_snep_cb.conn[xx].local_sap  = local_sap;
-    nfa_snep_cb.conn[xx].remote_sap = LLCP_INVALID_SAP;
-    nfa_snep_cb.conn[xx].p_cback    = p_msg->api_reg_server.p_cback;
-    nfa_snep_cb.conn[xx].flags      = NFA_SNEP_FLAG_SERVER;
-
-    evt_data.reg.status     = NFA_STATUS_OK;
-    evt_data.reg.reg_handle = (NFA_HANDLE_GROUP_SNEP | xx);
-
-    /* notify NFA_SNEP_REG_EVT to application */
-    nfa_snep_cb.conn[xx].p_cback (NFA_SNEP_REG_EVT, &evt_data);
-
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_reg_client
-**
-** Description      Allocate a connection control block as client and register to LLCP
-**
-**
-** Returns          TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_reg_client (tNFA_SNEP_MSG *p_msg)
-{
-    tNFA_SNEP_EVT_DATA  evt_data;
-    UINT8               xx, local_sap = LLCP_INVALID_SAP;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_reg_client ()");
-
-    xx = nfa_snep_allocate_cb ();
-
-    if (xx < NFA_SNEP_MAX_CONN)
-    {
-        local_sap = LLCP_RegisterClient (LLCP_LINK_TYPE_DATA_LINK_CONNECTION,
-                                         nfa_snep_llcp_cback);
-    }
-
-    evt_data.reg.service_name[0] = 0x00;
-
-    if ((xx == NFA_SNEP_MAX_CONN) || (local_sap == LLCP_INVALID_SAP))
-    {
-        SNEP_TRACE_ERROR0 ("Cannot allocate or register SNEP client");
-
-        evt_data.reg.status = NFA_STATUS_FAILED;
-        p_msg->api_reg_client.p_cback (NFA_SNEP_REG_EVT, &evt_data);
-        return TRUE;
-    }
-
-    nfa_snep_cb.conn[xx].local_sap  = local_sap;
-    nfa_snep_cb.conn[xx].remote_sap = LLCP_INVALID_SAP;
-    nfa_snep_cb.conn[xx].p_cback    = p_msg->api_reg_client.p_cback;
-    nfa_snep_cb.conn[xx].flags      = NFA_SNEP_FLAG_CLIENT;
-
-    /* initialize timer callback */
-    nfa_snep_cb.conn[xx].timer.p_cback = nfa_snep_timer_cback;
-
-    evt_data.reg.status     = NFA_STATUS_OK;
-    evt_data.reg.reg_handle = (NFA_HANDLE_GROUP_SNEP | xx);
-
-    /* notify NFA_SNEP_REG_EVT to application */
-    nfa_snep_cb.conn[xx].p_cback (NFA_SNEP_REG_EVT, &evt_data);
-
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_dereg
-**
-** Description      Deallocate a connection control block and deregister to LLCP
-**                  LLCP will deallocate any data link connection created for this
-**
-** Returns          TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_dereg (tNFA_SNEP_MSG *p_msg)
-{
-    UINT8 xx;
-    UINT8 local_sap;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_dereg ()");
-
-    xx = (UINT8) (p_msg->api_dereg.reg_handle & NFA_HANDLE_MASK);
-
-    if (  (xx < NFA_SNEP_MAX_CONN)
-        &&(nfa_snep_cb.conn[xx].p_cback)
-        &&(nfa_snep_cb.conn[xx].flags & (NFA_SNEP_FLAG_SERVER|NFA_SNEP_FLAG_CLIENT))  )
-    {
-        local_sap = nfa_snep_cb.conn[xx].local_sap;
-        LLCP_Deregister (local_sap);
-        nfa_snep_deallocate_cb (xx);
-    }
-    else
-    {
-        SNEP_TRACE_ERROR0 ("Cannot find SNEP server/client");
-        return TRUE;
-    }
-
-    if (!nfa_snep_cb.is_dta_mode)
-    {
-        if (nfa_snep_cb.listen_enabled)
-        {
-            for (xx = 0; xx < NFA_SNEP_MAX_CONN; xx++)
-            {
-                if (  (nfa_snep_cb.conn[xx].p_cback)
-                    &&(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_SERVER)  )
-                {
-                    break;
-                }
-            }
-
-            if (xx >= NFA_SNEP_MAX_CONN)
-            {
-                /* if need to update WKS in LLCP Gen bytes */
-                if (local_sap <= LLCP_UPPER_BOUND_WK_SAP)
-                    nfa_p2p_disable_listening (NFA_ID_SNEP, TRUE);
-                else
-                    nfa_p2p_disable_listening (NFA_ID_SNEP, FALSE);
-
-                nfa_snep_cb.listen_enabled = FALSE;
-            }
-            /* if need to update WKS in LLCP Gen bytes */
-            else if (local_sap <= LLCP_UPPER_BOUND_WK_SAP)
-            {
-                nfa_p2p_enable_listening (NFA_ID_SNEP, TRUE);
-            }
-        }
-    }
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_connect
-**
-** Description      Create data link connection for client
-**
-** Returns          TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_connect (tNFA_SNEP_MSG *p_msg)
-{
-    tLLCP_CONNECTION_PARAMS conn_params;
-    UINT8 xx;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_connect ()");
-
-    xx = (UINT8) (p_msg->api_connect.client_handle & NFA_HANDLE_MASK);
-
-    if (xx < NFA_SNEP_MAX_CONN)
-    {
-        nfa_snep_cb.conn[xx].congest = FALSE;
-
-        /* Set remote_sap to SDP to find callback in case that link is deactivted before connected */
-        nfa_snep_cb.conn[xx].remote_sap = LLCP_SAP_SDP;
-
-        /* in order to send NFA_SNEP_DISC_EVT in case of connection failure */
-        nfa_snep_cb.conn[xx].flags = NFA_SNEP_FLAG_CLIENT|NFA_SNEP_FLAG_CONNECTING;
-
-        /* create data link connection with server name */
-        conn_params.miu = NFA_SNEP_MIU;
-        conn_params.rw  = NFA_SNEP_RW;
-        BCM_STRNCPY_S (conn_params.sn, sizeof (conn_params.sn),
-                       p_msg->api_connect.service_name, LLCP_MAX_SN_LEN);
-        conn_params.sn[LLCP_MAX_SN_LEN] = 0;
-
-        LLCP_ConnectReq (nfa_snep_cb.conn[xx].local_sap, LLCP_SAP_SDP, &conn_params);
-    }
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_get_req
-**
-** Description      Send SNEP GET request on data link connection
-**
-** Returns          TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_get_req (tNFA_SNEP_MSG *p_msg)
-{
-    UINT8 dlink;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_get_req ()");
-
-    dlink = (UINT8) (p_msg->api_get_req.conn_handle & NFA_HANDLE_MASK);
-
-    if (  (dlink < NFA_SNEP_MAX_CONN)
-        &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED)  )
-    {
-        nfa_snep_cb.conn[dlink].tx_code           = NFA_SNEP_REQ_CODE_GET;
-        nfa_snep_cb.conn[dlink].buff_length       = p_msg->api_get_req.buff_length;
-        nfa_snep_cb.conn[dlink].ndef_length       = p_msg->api_get_req.ndef_length;
-        nfa_snep_cb.conn[dlink].p_ndef_buff       = p_msg->api_get_req.p_ndef_buff;
-        nfa_snep_cb.conn[dlink].acceptable_length = p_msg->api_get_req.buff_length;
-
-        nfa_snep_send_msg (NFA_SNEP_REQ_CODE_GET, dlink);
-
-        /* start timer for response from server */
-        nfa_sys_start_timer (&nfa_snep_cb.conn[dlink].timer, dlink, NFA_SNEP_CLIENT_TIMEOUT);
-    }
-    else
-    {
-        SNEP_TRACE_ERROR0 ("Data link connection is not established");
-    }
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_put_req
-**
-** Description      Send SNEP PUT request on data link connection
-**
-** Returns          TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_put_req (tNFA_SNEP_MSG *p_msg)
-{
-    UINT8 dlink;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_put_req ()");
-
-    dlink = (UINT8) (p_msg->api_put_req.conn_handle & NFA_HANDLE_MASK);
-
-    if (  (dlink < NFA_SNEP_MAX_CONN)
-        &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED)  )
-    {
-        nfa_snep_cb.conn[dlink].tx_code     = NFA_SNEP_REQ_CODE_PUT;
-        nfa_snep_cb.conn[dlink].buff_length = p_msg->api_put_req.ndef_length;
-        nfa_snep_cb.conn[dlink].ndef_length = p_msg->api_put_req.ndef_length;
-        nfa_snep_cb.conn[dlink].p_ndef_buff = p_msg->api_put_req.p_ndef_buff;
-
-        nfa_snep_send_msg (NFA_SNEP_REQ_CODE_PUT, dlink);
-
-        /* start timer for response from server */
-        nfa_sys_start_timer (&nfa_snep_cb.conn[dlink].timer, dlink, NFA_SNEP_CLIENT_TIMEOUT);
-    }
-    else
-    {
-        SNEP_TRACE_ERROR0 ("Data link connection is not established");
-    }
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_get_resp
-**
-** Description      Server responds to GET request
-**
-**
-** Returns          TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_get_resp (tNFA_SNEP_MSG *p_msg)
-{
-    UINT8 dlink;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_get_resp ()");
-
-    dlink = (UINT8) (p_msg->api_get_resp.conn_handle & NFA_HANDLE_MASK);
-
-    if (  (dlink < NFA_SNEP_MAX_CONN)
-        &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED)  )
-    {
-        nfa_snep_cb.conn[dlink].buff_length = p_msg->api_get_resp.ndef_length;
-        nfa_snep_cb.conn[dlink].ndef_length = p_msg->api_get_resp.ndef_length;
-        nfa_snep_cb.conn[dlink].p_ndef_buff = p_msg->api_get_resp.p_ndef_buff;
-
-        nfa_snep_cb.conn[dlink].tx_code     = p_msg->api_get_resp.resp_code;
-
-        nfa_snep_send_msg (p_msg->api_get_resp.resp_code, dlink);
-    }
-    else
-    {
-        SNEP_TRACE_ERROR0 ("Data link connection is not established");
-    }
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_put_resp
-**
-** Description      Server responds to PUT request
-**
-**
-** Returns          TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_put_resp (tNFA_SNEP_MSG *p_msg)
-{
-    UINT8 dlink;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_put_resp ()");
-
-    dlink = (UINT8) (p_msg->api_put_resp.conn_handle & NFA_HANDLE_MASK);
-
-    if (  (dlink < NFA_SNEP_MAX_CONN)
-        &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED)  )
-    {
-        nfa_snep_cb.conn[dlink].tx_code = p_msg->api_put_resp.resp_code;
-
-        nfa_snep_send_msg (p_msg->api_put_resp.resp_code, dlink);
-    }
-    else
-    {
-        SNEP_TRACE_ERROR0 ("Data link connection is not established");
-    }
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_disconnect
-**
-** Description      Disconnect data link connection
-**
-**
-** Returns          TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_disconnect (tNFA_SNEP_MSG *p_msg)
-{
-    UINT8 dlink;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_disconnect ()");
-
-    dlink = (UINT8) (p_msg->api_disc.conn_handle & NFA_HANDLE_MASK);
-
-    if (  (dlink < NFA_SNEP_MAX_CONN)
-        &&(nfa_snep_cb.conn[dlink].flags & NFA_SNEP_FLAG_CONNECTED)  )
-    {
-        LLCP_DisconnectReq (nfa_snep_cb.conn[dlink].local_sap,
-                            nfa_snep_cb.conn[dlink].remote_sap,
-                            p_msg->api_disc.flush);
-    }
-    else
-    {
-        SNEP_TRACE_ERROR0 ("Data link connection is not established");
-    }
-    return TRUE;
-}
-
-#if (BT_TRACE_VERBOSE == TRUE)
-/*******************************************************************************
-**
-** Function         nfa_snep_opcode
-**
-** Description
-**
-** Returns          string of event
-**
-*******************************************************************************/
-static char *nfa_snep_opcode (UINT8 opcode)
-{
-    switch (opcode)
-    {
-    case NFA_SNEP_REQ_CODE_CONTINUE:
-        return "REQ_CONTINUE";
-    case NFA_SNEP_REQ_CODE_GET:
-        return "REQ_GET";
-    case NFA_SNEP_REQ_CODE_PUT:
-        return "REQ_PUT";
-    case NFA_SNEP_REQ_CODE_REJECT:
-        return "REQ_REJECT";
-
-    case NFA_SNEP_RESP_CODE_CONTINUE:
-        return "RESP_CONTINUE";
-    case NFA_SNEP_RESP_CODE_SUCCESS:
-        return "RESP_SUCCESS";
-    case NFA_SNEP_RESP_CODE_NOT_FOUND:
-        return "RESP_NOT_FOUND";
-    case NFA_SNEP_RESP_CODE_EXCESS_DATA:
-        return "RESP_EXCESS_DATA";
-    case NFA_SNEP_RESP_CODE_BAD_REQ:
-        return "RESP_BAD_REQ";
-    case NFA_SNEP_RESP_CODE_NOT_IMPLM:
-        return "RESP_NOT_IMPLM";
-    case NFA_SNEP_RESP_CODE_UNSUPP_VER:
-        return "RESP_UNSUPP_VER";
-    case NFA_SNEP_RESP_CODE_REJECT:
-        return "RESP_REJECT";
-
-    default:
-        return "Reserved opcode";
-    }
-}
-
-#endif  /* Debug Functions */
-
diff --git a/src/nfa/snep/nfa_snep_api.c b/src/nfa/snep/nfa_snep_api.c
deleted file mode 100644
index d02a7a5..0000000
--- a/src/nfa/snep/nfa_snep_api.c
+++ /dev/null
@@ -1,620 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  NFA SNEP interface to LLCP
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfa_api.h"
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfa_snep_int.h"
-#include "nfa_mem_co.h"
-
-/*****************************************************************************
-**  Constants
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function         NFA_SnepStartDefaultServer
-**
-** Description      This function is called to listen to SAP, 0x04 as SNEP default
-**                  server ("urn:nfc:sn:snep") on LLCP.
-**
-**                  NFA_SNEP_DEFAULT_SERVER_STARTED_EVT without data will be returned.
-**
-** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-**                  should happen before calling this function
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepStartDefaultServer (tNFA_SNEP_CBACK *p_cback)
-{
-    tNFA_SNEP_API_START_DEFAULT_SERVER *p_msg;
-
-    SNEP_TRACE_API0 ("NFA_SnepStartDefaultServer ()");
-
-    if (p_cback == NULL)
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepStartDefaultServer (): p_cback is NULL");
-        return (NFA_STATUS_INVALID_PARAM);
-    }
-
-    if ((p_msg = (tNFA_SNEP_API_START_DEFAULT_SERVER *) GKI_getbuf (sizeof (tNFA_SNEP_API_START_DEFAULT_SERVER))) != NULL)
-    {
-        p_msg->hdr.event = NFA_SNEP_API_START_DEFAULT_SERVER_EVT;
-        p_msg->p_cback   = p_cback;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_SnepStopDefaultServer
-**
-** Description      This function is called to stop SNEP default server on LLCP.
-**
-**                  NFA_SNEP_DEFAULT_SERVER_STOPPED_EVT without data will be returned.
-**
-** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-**                  should happen before calling this function
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepStopDefaultServer (tNFA_SNEP_CBACK *p_cback)
-{
-    tNFA_SNEP_API_STOP_DEFAULT_SERVER *p_msg;
-
-    SNEP_TRACE_API0 ("NFA_SnepStopDefaultServer ()");
-
-    if (p_cback == NULL)
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepStopDefaultServer (): p_cback is NULL");
-        return (NFA_STATUS_INVALID_PARAM);
-    }
-
-    if ((p_msg = (tNFA_SNEP_API_STOP_DEFAULT_SERVER *) GKI_getbuf (sizeof (tNFA_SNEP_API_STOP_DEFAULT_SERVER))) != NULL)
-    {
-        p_msg->hdr.event = NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT;
-        p_msg->p_cback   = p_cback;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_SnepRegisterServer
-**
-** Description      This function is called to listen to a SAP as SNEP server.
-**
-**                  If server_sap is set to NFA_SNEP_ANY_SAP, then NFA will allocate
-**                  a SAP between LLCP_LOWER_BOUND_SDP_SAP and LLCP_UPPER_BOUND_SDP_SAP
-**
-**                  NFC Forum default SNEP server ("urn:nfc:sn:snep") may be launched
-**                  by NFA_SnepStartDefaultServer().
-**
-**                  NFA_SNEP_REG_EVT will be returned with status, handle and service name.
-**
-** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-**                  should happen before calling this function
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_INVALID_PARAM if p_service_name or p_cback is NULL
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepRegisterServer (UINT8           server_sap,
-                                    char            *p_service_name,
-                                    tNFA_SNEP_CBACK *p_cback)
-{
-    tNFA_SNEP_API_REG_SERVER *p_msg;
-
-    SNEP_TRACE_API2 ("NFA_SnepRegisterServer (): SAP:0x%X, SN:<%s>", server_sap, p_service_name);
-
-    if ((p_service_name == NULL) || (p_cback == NULL))
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepRegisterServer (): p_service_name or p_cback is NULL");
-        return (NFA_STATUS_INVALID_PARAM);
-    }
-
-    if ((p_msg = (tNFA_SNEP_API_REG_SERVER *) GKI_getbuf (sizeof (tNFA_SNEP_API_REG_SERVER))) != NULL)
-    {
-        p_msg->hdr.event = NFA_SNEP_API_REG_SERVER_EVT;
-
-        p_msg->server_sap = server_sap;
-
-        BCM_STRNCPY_S (p_msg->service_name, sizeof (p_msg->service_name),
-                       p_service_name, LLCP_MAX_SN_LEN);
-        p_msg->service_name[LLCP_MAX_SN_LEN] = 0;
-
-        p_msg->p_cback = p_cback;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_SnepRegisterClient
-**
-** Description      This function is called to register SNEP client.
-**                  NFA_SNEP_REG_EVT will be returned with status, handle
-**                  and zero-length service name.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_INVALID_PARAM if p_cback is NULL
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepRegisterClient (tNFA_SNEP_CBACK *p_cback)
-{
-    tNFA_SNEP_API_REG_CLIENT *p_msg;
-
-    SNEP_TRACE_API0 ("NFA_SnepRegisterClient ()");
-
-    if (p_cback == NULL)
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepRegisterClient (): p_cback is NULL");
-        return (NFA_STATUS_INVALID_PARAM);
-    }
-
-    if ((p_msg = (tNFA_SNEP_API_REG_CLIENT *) GKI_getbuf (sizeof (tNFA_SNEP_API_REG_CLIENT))) != NULL)
-    {
-        p_msg->hdr.event = NFA_SNEP_API_REG_CLIENT_EVT;
-
-        p_msg->p_cback = p_cback;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_SnepDeregister
-**
-** Description      This function is called to stop listening as SNEP server
-**                  or SNEP client. Application shall use reg_handle returned in
-**                  NFA_SNEP_REG_EVT.
-**
-** Note:            If this function is called to de-register a SNEP server and RF
-**                  discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
-**                  should happen before calling this function
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepDeregister (tNFA_HANDLE reg_handle)
-{
-    tNFA_SNEP_API_DEREG *p_msg;
-    tNFA_HANDLE          xx;
-
-    SNEP_TRACE_API1 ("NFA_SnepDeregister (): reg_handle:0x%X", reg_handle);
-
-    xx = reg_handle & NFA_HANDLE_MASK;
-
-    if (  (xx >= NFA_SNEP_MAX_CONN)
-        ||(nfa_snep_cb.conn[xx].p_cback == NULL)  )
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepDeregister (): Handle is invalid or not registered");
-        return (NFA_STATUS_BAD_HANDLE);
-    }
-
-    if ((p_msg = (tNFA_SNEP_API_DEREG *) GKI_getbuf (sizeof (tNFA_SNEP_API_DEREG))) != NULL)
-    {
-        p_msg->hdr.event = NFA_SNEP_API_DEREG_EVT;
-
-        p_msg->reg_handle = reg_handle;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_SnepConnect
-**
-** Description      This function is called by client to create data link connection
-**                  to SNEP server on peer device.
-**
-**                  Client handle and service name of server to connect shall be provided.
-**                  A conn_handle will be returned in NFA_SNEP_CONNECTED_EVT, if
-**                  successfully connected. Otherwise NFA_SNEP_DISC_EVT will be returned.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_INVALID_PARAM if p_service_name or p_cback is NULL
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepConnect (tNFA_HANDLE     client_handle,
-                             char            *p_service_name)
-{
-    tNFA_SNEP_API_CONNECT *p_msg;
-    tNFA_HANDLE            xx;
-
-    SNEP_TRACE_API1 ("NFA_SnepConnect(): client_handle:0x%X", client_handle);
-
-    xx = client_handle & NFA_HANDLE_MASK;
-
-    if (  (xx >= NFA_SNEP_MAX_CONN)
-        ||(nfa_snep_cb.conn[xx].p_cback == NULL)
-        ||(!(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_CLIENT))  )
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepConnect (): Client handle is invalid");
-        return (NFA_STATUS_BAD_HANDLE);
-    }
-
-    if (p_service_name == NULL)
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepConnect (): p_service_name is NULL");
-        return (NFA_STATUS_INVALID_PARAM);
-    }
-
-    if ((p_msg = (tNFA_SNEP_API_CONNECT*) GKI_getbuf (sizeof (tNFA_SNEP_API_CONNECT))) != NULL)
-    {
-        p_msg->hdr.event = NFA_SNEP_API_CONNECT_EVT;
-
-        p_msg->client_handle = client_handle;
-        BCM_STRNCPY_S (p_msg->service_name, sizeof (p_msg->service_name),
-                       p_service_name, LLCP_MAX_SN_LEN);
-        p_msg->service_name[LLCP_MAX_SN_LEN] = 0;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_SnepGet
-**
-** Description      This function is called by client to send GET request.
-**
-**                  Application shall allocate a buffer and put NDEF message with
-**                  desired record type to get from server. NDEF message from server
-**                  will be returned in the same buffer with NFA_SNEP_GET_RESP_EVT.
-**                  The size of buffer will be used as "Acceptable Length".
-**
-**                  NFA_SNEP_GET_RESP_EVT or NFA_SNEP_DISC_EVT will be returned
-**                  through registered p_cback. Application may free the buffer
-**                  after receiving these events.
-**
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepGet (tNFA_HANDLE     conn_handle,
-                         UINT32          buff_length,
-                         UINT32          ndef_length,
-                         UINT8           *p_ndef_buff)
-{
-    tNFA_SNEP_API_GET_REQ *p_msg;
-    tNFA_HANDLE            xx;
-
-    SNEP_TRACE_API1 ("NFA_SnepGet (): conn_handle:0x%X", conn_handle);
-
-    xx = conn_handle & NFA_HANDLE_MASK;
-
-    if (  (xx >= NFA_SNEP_MAX_CONN)
-        ||(nfa_snep_cb.conn[xx].p_cback == NULL)
-        ||(!(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_CLIENT))  )
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepGet (): Connection handle is invalid");
-        return (NFA_STATUS_BAD_HANDLE);
-    }
-
-    if ((p_msg = (tNFA_SNEP_API_GET_REQ *) GKI_getbuf (sizeof (tNFA_SNEP_API_GET_REQ))) != NULL)
-    {
-        p_msg->hdr.event = NFA_SNEP_API_GET_REQ_EVT;
-
-        p_msg->conn_handle = conn_handle;
-        p_msg->buff_length = buff_length;
-        p_msg->ndef_length = ndef_length;
-        p_msg->p_ndef_buff = p_ndef_buff;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_SnepPut
-**
-** Description      This function is called by client to send PUT request.
-**
-**                  Application shall allocate a buffer and put desired NDEF message
-**                  to send to server.
-**
-**                  NFA_SNEP_PUT_RESP_EVT or NFA_SNEP_DISC_EVT will be returned
-**                  through registered p_cback. Application may free the buffer after
-**                  receiving these events.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepPut (tNFA_HANDLE     conn_handle,
-                         UINT32          ndef_length,
-                         UINT8           *p_ndef_buff)
-{
-    tNFA_SNEP_API_PUT_REQ *p_msg;
-    tNFA_HANDLE            xx;
-
-    SNEP_TRACE_API1 ("NFA_SnepPut (): conn_handle:0x%X", conn_handle);
-
-    xx = conn_handle & NFA_HANDLE_MASK;
-
-    if (  (xx >= NFA_SNEP_MAX_CONN)
-        ||(nfa_snep_cb.conn[xx].p_cback == NULL)
-        ||(!(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_CLIENT))  )
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepPut (): Connection handle is invalid");
-        return (NFA_STATUS_BAD_HANDLE);
-    }
-
-    if ((p_msg = (tNFA_SNEP_API_PUT_REQ *) GKI_getbuf (sizeof (tNFA_SNEP_API_PUT_REQ))) != NULL)
-    {
-        p_msg->hdr.event = NFA_SNEP_API_PUT_REQ_EVT;
-
-        p_msg->conn_handle = conn_handle;
-        p_msg->ndef_length = ndef_length;
-        p_msg->p_ndef_buff = p_ndef_buff;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_SnepGetResponse
-**
-** Description      This function is called by server to send response of GET request.
-**
-**                  When server application receives NFA_SNEP_ALLOC_BUFF_EVT,
-**                  it shall allocate a buffer for incoming NDEF message and
-**                  pass the pointer within callback context. This buffer will be
-**                  returned with NFA_SNEP_GET_REQ_EVT after receiving complete
-**                  NDEF message. If buffer is not allocated, NFA_SNEP_RESP_CODE_NOT_FOUND
-**                  (Note:There is no proper response code for this case)
-**                  or NFA_SNEP_RESP_CODE_REJECT will be sent to client.
-**
-**                  Server application shall provide conn_handle which is received in
-**                  NFA_SNEP_GET_REQ_EVT.
-**
-**                  Server application shall allocate a buffer and put NDEF message if
-**                  response code is NFA_SNEP_RESP_CODE_SUCCESS. Otherwise, ndef_length
-**                  shall be set to zero.
-**
-**                  NFA_SNEP_GET_RESP_CMPL_EVT or NFA_SNEP_DISC_EVT will be returned
-**                  through registered callback function. Application may free
-**                  the buffer after receiving these events.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepGetResponse (tNFA_HANDLE         conn_handle,
-                                 tNFA_SNEP_RESP_CODE resp_code,
-                                 UINT32              ndef_length,
-                                 UINT8               *p_ndef_buff)
-{
-    tNFA_SNEP_API_GET_RESP *p_msg;
-    tNFA_HANDLE            xx;
-
-    SNEP_TRACE_API1 ("NFA_SnepGetResponse (): conn_handle:0x%X", conn_handle);
-
-    xx = conn_handle & NFA_HANDLE_MASK;
-
-    if (  (xx >= NFA_SNEP_MAX_CONN)
-        ||(nfa_snep_cb.conn[xx].p_cback == NULL)
-        ||(!(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_SERVER))  )
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepGetResponse (): Handle is invalid");
-        return (NFA_STATUS_BAD_HANDLE);
-    }
-
-    if ((p_msg = (tNFA_SNEP_API_GET_RESP *) GKI_getbuf (sizeof (tNFA_SNEP_API_GET_RESP))) != NULL)
-    {
-        p_msg->hdr.event = NFA_SNEP_API_GET_RESP_EVT;
-
-        p_msg->conn_handle = conn_handle;
-        p_msg->resp_code   = resp_code;
-        p_msg->ndef_length = ndef_length;
-        p_msg->p_ndef_buff = p_ndef_buff;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-
-/*******************************************************************************
-**
-** Function         NFA_SnepPutResponse
-**
-** Description      This function is called by server to send response of PUT request.
-**
-**                  When server application receives NFA_SNEP_ALLOC_BUFF_EVT,
-**                  it shall allocate a buffer for incoming NDEF message and
-**                  pass the pointer within callback context. This buffer will be
-**                  returned with NFA_SNEP_PUT_REQ_EVT after receiving complete
-**                  NDEF message.  If buffer is not allocated, NFA_SNEP_RESP_CODE_REJECT
-**                  will be sent to client or NFA will discard request and send
-**                  NFA_SNEP_RESP_CODE_SUCCESS (Note:There is no proper response code for
-**                  this case).
-**
-**                  Server application shall provide conn_handle which is received in
-**                  NFA_SNEP_PUT_REQ_EVT.
-**
-**                  NFA_SNEP_DISC_EVT will be returned through registered callback
-**                  function when client disconnects data link connection.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepPutResponse (tNFA_HANDLE         conn_handle,
-                                 tNFA_SNEP_RESP_CODE resp_code)
-{
-    tNFA_SNEP_API_PUT_RESP *p_msg;
-    tNFA_HANDLE            xx;
-
-    SNEP_TRACE_API1 ("NFA_SnepPutResponse (): conn_handle:0x%X", conn_handle);
-
-    xx = conn_handle & NFA_HANDLE_MASK;
-
-    if (  (xx >= NFA_SNEP_MAX_CONN)
-        ||(nfa_snep_cb.conn[xx].p_cback == NULL)
-        ||(!(nfa_snep_cb.conn[xx].flags & NFA_SNEP_FLAG_SERVER))  )
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepPutResponse (): Handle is invalid");
-        return (NFA_STATUS_BAD_HANDLE);
-    }
-
-    if ((p_msg = (tNFA_SNEP_API_PUT_RESP *) GKI_getbuf (sizeof (tNFA_SNEP_API_PUT_RESP))) != NULL)
-    {
-        p_msg->hdr.event = NFA_SNEP_API_PUT_RESP_EVT;
-
-        p_msg->conn_handle = conn_handle;
-        p_msg->resp_code   = resp_code;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_SnepDisconnect
-**
-** Description      This function is called to disconnect data link connection.
-**                  discard any pending data if flush is set to TRUE
-**
-**                  Client application shall provide conn_handle in NFA_SNEP_GET_RESP_EVT
-**                  or NFA_SNEP_PUT_RESP_EVT.
-**
-**                  Server application shall provide conn_handle in NFA_SNEP_GET_REQ_EVT
-**                  or NFA_SNEP_PUT_REQ_EVT.
-**
-**                  NFA_SNEP_DISC_EVT will be returned
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_BAD_HANDLE if handle is not valid
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-tNFA_STATUS NFA_SnepDisconnect (tNFA_HANDLE conn_handle, BOOLEAN flush)
-{
-    tNFA_SNEP_API_DISCONNECT *p_msg;
-    tNFA_HANDLE              xx;
-
-    SNEP_TRACE_API2 ("NFA_SnepDisconnect (): conn_handle:0x%X, flush=%d", conn_handle, flush);
-
-    xx = conn_handle & NFA_HANDLE_MASK;
-
-    if (  (xx >= NFA_SNEP_MAX_CONN)
-        ||(nfa_snep_cb.conn[xx].p_cback == NULL))
-    {
-        SNEP_TRACE_ERROR0 ("NFA_SnepDisconnect (): Handle is invalid");
-        return (NFA_STATUS_BAD_HANDLE);
-    }
-
-    if ((p_msg = (tNFA_SNEP_API_DISCONNECT *) GKI_getbuf (sizeof (tNFA_SNEP_API_DISCONNECT))) != NULL)
-    {
-        p_msg->hdr.event   = NFA_SNEP_API_DISCONNECT_EVT;
-        p_msg->conn_handle = conn_handle;
-        p_msg->flush       = flush;
-
-        nfa_sys_sendmsg (p_msg);
-
-        return (NFA_STATUS_OK);
-    }
-
-    return (NFA_STATUS_FAILED);
-}
-
-/*******************************************************************************
-**
-** Function         NFA_SnepSetTraceLevel
-**
-** Description      This function sets the trace level for SNEP.  If called with
-**                  a value of 0xFF, it simply returns the current trace level.
-**
-** Returns          The new or current trace level
-**
-*******************************************************************************/
-UINT8 NFA_SnepSetTraceLevel (UINT8 new_level)
-{
-    if (new_level != 0xFF)
-        nfa_snep_cb.trace_level = new_level;
-
-    return (nfa_snep_cb.trace_level);
-}
diff --git a/src/nfa/snep/nfa_snep_default.c b/src/nfa/snep/nfa_snep_default.c
deleted file mode 100644
index 07f3061..0000000
--- a/src/nfa/snep/nfa_snep_default.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This is the implementation file for the NFA SNEP default server.
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfa_snep_int.h"
-#include "nfa_mem_co.h"
-#include "nfa_dm_int.h"
-#include "trace_api.h"
-
-/*****************************************************************************
-**  Global Variables
-*****************************************************************************/
-
-/* system manager control block definition */
-#if NFA_DYNAMIC_MEMORY == FALSE
-tNFA_SNEP_DEFAULT_CB nfa_snep_default_cb;
-#endif
-
-/*****************************************************************************
-**  Static Functions
-*****************************************************************************/
-
-/*****************************************************************************
-**  Constants
-*****************************************************************************/
-
-/*******************************************************************************
-**
-** Function         nfa_snep_default_init
-**
-** Description      Initialize NFA SNEP default server
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_snep_default_init (void)
-{
-    UINT8 xx;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_default_init ()");
-
-    /* initialize control block */
-    memset (&nfa_snep_default_cb, 0, sizeof (tNFA_SNEP_DEFAULT_CB));
-
-    /* initialize non-zero value */
-    nfa_snep_default_cb.server_handle = NFA_HANDLE_INVALID;
-
-    for (xx = 0; xx < NFA_SNEP_DEFAULT_MAX_CONN; xx++)
-    {
-        nfa_snep_default_cb.conn[xx].conn_handle = NFA_HANDLE_INVALID;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_default_service_cback
-**
-** Description      Processing event to default SNEP server/client
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_snep_default_service_cback (tNFA_SNEP_EVT event, tNFA_SNEP_EVT_DATA *p_data)
-{
-    UINT8 xx;
-    tNFA_SNEP_API_DISCONNECT api_disconnect;
-    tNFA_SNEP_API_PUT_RESP   api_put_resp;
-
-    SNEP_TRACE_DEBUG1 ("nfa_snep_default_service_cback () event:0x%X", event);
-
-    switch (event)
-    {
-    case NFA_SNEP_REG_EVT:
-        if (p_data->reg.status == NFA_STATUS_OK)
-        {
-            nfa_snep_default_cb.server_handle = p_data->reg.reg_handle;
-        }
-        else
-        {
-            SNEP_TRACE_ERROR0 ("Default SNEP server failed to register");
-        }
-        break;
-
-    case NFA_SNEP_CONNECTED_EVT:
-        if (p_data->connect.reg_handle == nfa_snep_default_cb.server_handle)
-        {
-            for (xx = 0; xx < NFA_SNEP_DEFAULT_MAX_CONN; xx++)
-            {
-                if (nfa_snep_default_cb.conn[xx].conn_handle == NFA_HANDLE_INVALID)
-                {
-                    nfa_snep_default_cb.conn[xx].conn_handle = p_data->connect.conn_handle;
-                    break;
-                }
-            }
-
-            if (xx >= NFA_SNEP_DEFAULT_MAX_CONN)
-            {
-                SNEP_TRACE_ERROR1 ("Default SNEP server cannot handle more than %d connections",
-                                  NFA_SNEP_DEFAULT_MAX_CONN);
-
-                api_disconnect.conn_handle = p_data->connect.conn_handle;
-                api_disconnect.flush       = TRUE;
-                nfa_snep_disconnect ((tNFA_SNEP_MSG *) &api_disconnect);
-            }
-        }
-        break;
-
-    case NFA_SNEP_ALLOC_BUFF_EVT:
-        if (p_data->alloc.req_code == NFA_SNEP_REQ_CODE_GET)
-        {
-            /*
-            ** Default server doesn't support GET
-            ** Send NFA_SNEP_RESP_CODE_NOT_IMPLM to peer
-            */
-            SNEP_TRACE_WARNING0 ("Default SNEP server doesn't support GET");
-            p_data->alloc.p_buff    = NULL;
-            p_data->alloc.resp_code = NFA_SNEP_RESP_CODE_NOT_IMPLM;
-        }
-        else /* NFA_SNEP_REQ_CODE_PUT */
-        {
-            p_data->alloc.p_buff = NULL;
-
-            for (xx = 0; xx < NFA_SNEP_DEFAULT_MAX_CONN; xx++)
-            {
-                if (nfa_snep_default_cb.conn[xx].conn_handle == p_data->alloc.conn_handle)
-                {
-                    if (p_data->alloc.ndef_length <= NFA_SNEP_DEFAULT_SERVER_MAX_NDEF_SIZE)
-                    {
-                        /* allocate memory, allocated buffer will be returned in NFA_SNEP_PUT_REQ_EVT */
-                        p_data->alloc.p_buff = (UINT8*) nfa_mem_co_alloc (p_data->alloc.ndef_length);
-                    }
-
-                    /* store buffer pointer in case of failure in the middle */
-                    nfa_snep_default_cb.conn[xx].p_rx_ndef = p_data->alloc.p_buff;
-                    break;
-                }
-            }
-        }
-        break;
-
-    case NFA_SNEP_PUT_REQ_EVT:
-        for (xx = 0; xx < NFA_SNEP_DEFAULT_MAX_CONN; xx++)
-        {
-            if (nfa_snep_default_cb.conn[xx].conn_handle == p_data->put_req.conn_handle)
-            {
-                if (!nfa_snep_cb.is_dta_mode)
-                {
-                    nfa_dm_ndef_handle_message (NFA_STATUS_OK,
-                                                p_data->put_req.p_ndef,
-                                                p_data->put_req.ndef_length);
-                }
-#if (BT_TRACE_PROTOCOL == TRUE)
-                else
-                {
-                    DispNDEFMsg (p_data->put_req.p_ndef,
-                                 p_data->put_req.ndef_length, TRUE);
-                }
-#endif
-
-                nfa_mem_co_free (p_data->put_req.p_ndef);
-                nfa_snep_default_cb.conn[xx].p_rx_ndef = NULL;
-
-                api_put_resp.conn_handle = p_data->put_req.conn_handle;
-                api_put_resp.resp_code   = NFA_SNEP_RESP_CODE_SUCCESS;
-
-                nfa_snep_put_resp ((tNFA_SNEP_MSG *) &api_put_resp);
-                break;
-            }
-        }
-        break;
-
-    case NFA_SNEP_DISC_EVT:
-        for (xx = 0; xx < NFA_SNEP_DEFAULT_MAX_CONN; xx++)
-        {
-            if (nfa_snep_default_cb.conn[xx].conn_handle == p_data->disc.conn_handle)
-            {
-                nfa_snep_default_cb.conn[xx].conn_handle = NFA_HANDLE_INVALID;
-
-                /* if buffer is not freed */
-                if (nfa_snep_default_cb.conn[xx].p_rx_ndef)
-                {
-                    nfa_mem_co_free (nfa_snep_default_cb.conn[xx].p_rx_ndef);
-                    nfa_snep_default_cb.conn[xx].p_rx_ndef  = NULL;
-                }
-                break;
-            }
-        }
-        break;
-
-    default:
-        SNEP_TRACE_ERROR0 ("Unexpected event for default SNEP server");
-        break;
-    }
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_start_default_server
-**
-** Description      Launching default SNEP server
-**
-**
-** Returns          TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_start_default_server (tNFA_SNEP_MSG *p_msg)
-{
-    tNFA_SNEP_API_REG_SERVER msg;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_start_default_server ()");
-
-    if (nfa_snep_default_cb.server_handle == NFA_HANDLE_INVALID)
-    {
-        msg.server_sap = NFA_SNEP_DEFAULT_SERVER_SAP;
-
-        BCM_STRNCPY_S (msg.service_name, sizeof (msg.service_name),
-                      "urn:nfc:sn:snep", LLCP_MAX_SN_LEN);
-        msg.service_name[LLCP_MAX_SN_LEN] = 0;
-
-        msg.p_cback = nfa_snep_default_service_cback;
-        nfa_snep_reg_server ((tNFA_SNEP_MSG *) &msg);
-    }
-
-    (*p_msg->api_start_default_server.p_cback) (NFA_SNEP_DEFAULT_SERVER_STARTED_EVT, NULL);
-
-    return TRUE;
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_stop_default_server
-**
-** Description      Stoppping default SNEP server
-**
-**
-** Returns          TRUE to deallocate message
-**
-*******************************************************************************/
-BOOLEAN nfa_snep_stop_default_server (tNFA_SNEP_MSG *p_msg)
-{
-    tNFA_SNEP_API_DEREG msg;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_stop_default_server ()");
-
-    if (nfa_snep_default_cb.server_handle != NFA_HANDLE_INVALID)
-    {
-        msg.reg_handle = nfa_snep_default_cb.server_handle;
-
-        nfa_snep_dereg ((tNFA_SNEP_MSG *) &msg);
-
-        nfa_snep_default_cb.server_handle = NFA_HANDLE_INVALID;
-    }
-
-    (*p_msg->api_stop_default_server.p_cback) (NFA_SNEP_DEFAULT_SERVER_STOPPED_EVT, NULL);
-
-    return TRUE;
-}
-
diff --git a/src/nfa/snep/nfa_snep_main.c b/src/nfa/snep/nfa_snep_main.c
deleted file mode 100644
index b2ef6c1..0000000
--- a/src/nfa/snep/nfa_snep_main.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2012 Broadcom Corporation
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at:
- *
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This is the main implementation file for the NFA SNEP.
- *
- ******************************************************************************/
-#include <string.h>
-#include "nfa_sys.h"
-#include "nfa_sys_int.h"
-#include "nfa_snep_int.h"
-
-/*****************************************************************************
-**  Global Variables
-*****************************************************************************/
-
-/* system manager control block definition */
-#if NFA_DYNAMIC_MEMORY == FALSE
-tNFA_SNEP_CB nfa_snep_cb;
-#endif
-
-/*****************************************************************************
-**  Static Functions
-*****************************************************************************/
-
-/* event handler function type */
-static BOOLEAN nfa_snep_evt_hdlr (BT_HDR *p_msg);
-
-/* disable function type */
-static void nfa_snep_sys_disable (void);
-
-/* debug functions type */
-#if (BT_TRACE_VERBOSE == TRUE)
-static char *nfa_snep_evt_code (UINT16 evt_code);
-#endif
-
-/*****************************************************************************
-**  Constants
-*****************************************************************************/
-static const tNFA_SYS_REG nfa_snep_sys_reg =
-{
-    NULL,
-    nfa_snep_evt_hdlr,
-    nfa_snep_sys_disable,
-    NULL
-};
-
-#define NFA_SNEP_NUM_ACTIONS  (NFA_SNEP_LAST_EVT & 0x00ff)
-
-/* type for action functions */
-typedef BOOLEAN (*tNFA_SNEP_ACTION) (tNFA_SNEP_MSG *p_data);
-
-/* action function list */
-const tNFA_SNEP_ACTION nfa_snep_action[] =
-{
-    nfa_snep_start_default_server,          /* NFA_SNEP_API_START_DEFAULT_SERVER_EVT */
-    nfa_snep_stop_default_server,           /* NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT  */
-    nfa_snep_reg_server,                    /* NFA_SNEP_API_REG_SERVER_EVT           */
-    nfa_snep_reg_client,                    /* NFA_SNEP_API_REG_CLIENT_EVT           */
-    nfa_snep_dereg,                         /* NFA_SNEP_API_DEREG_EVT                */
-    nfa_snep_connect,                       /* NFA_SNEP_API_CONNECT_EVT              */
-    nfa_snep_get_req,                       /* NFA_SNEP_API_GET_REQ_EVT              */
-    nfa_snep_put_req,                       /* NFA_SNEP_API_PUT_REQ_EVT              */
-    nfa_snep_get_resp,                      /* NFA_SNEP_API_GET_RESP_EVT             */
-    nfa_snep_put_resp,                      /* NFA_SNEP_API_PUT_RESP_EVT             */
-    nfa_snep_disconnect                     /* NFA_SNEP_API_DISCONNECT_EVT           */
-};
-
-/*******************************************************************************
-**
-** Function         nfa_snep_init
-**
-** Description      Initialize NFA SNEP
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-void nfa_snep_init (BOOLEAN is_dta_mode)
-{
-    /* initialize control block */
-    memset (&nfa_snep_cb, 0, sizeof (tNFA_SNEP_CB));
-    nfa_snep_cb.trace_level = APPL_INITIAL_TRACE_LEVEL;
-    nfa_snep_cb.is_dta_mode = is_dta_mode;
-
-    SNEP_TRACE_DEBUG1 ("nfa_snep_init (): is_dta_mode=%d", is_dta_mode);
-
-    nfa_snep_default_init ();
-
-    /* register message handler on NFA SYS */
-    nfa_sys_register (NFA_ID_SNEP,  &nfa_snep_sys_reg);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_sys_disable
-**
-** Description      Clean up and deregister NFA SNEP from NFA SYS/DM
-**
-**
-** Returns          None
-**
-*******************************************************************************/
-static void nfa_snep_sys_disable (void)
-{
-    UINT8 xx;
-
-    SNEP_TRACE_DEBUG0 ("nfa_snep_sys_disable ()");
-
-    /* deallocate any buffer and deregister from LLCP */
-    for (xx = 0; xx < NFA_SNEP_MAX_CONN; xx++)
-    {
-        if (nfa_snep_cb.conn[xx].p_cback != NULL)
-        {
-            LLCP_Deregister (nfa_snep_cb.conn[xx].local_sap);
-            nfa_snep_deallocate_cb (xx);
-        }
-    }
-
-    /* deregister message handler on NFA SYS */
-    nfa_sys_deregister (NFA_ID_SNEP);
-}
-
-/*******************************************************************************
-**
-** Function         nfa_snep_evt_hdlr
-**
-** Description      Processing event for NFA SNEP
-**
-**
-** Returns          TRUE if p_msg needs to be deallocated
-**
-*******************************************************************************/
-static BOOLEAN nfa_snep_evt_hdlr (BT_HDR *p_hdr)
-{
-    BOOLEAN delete_msg = TRUE;
-    UINT16  event;
-
-    tNFA_SNEP_MSG *p_msg = (tNFA_SNEP_MSG *) p_hdr;
-
-#if (BT_TRACE_VERBOSE == TRUE)
-    SNEP_TRACE_DEBUG1 ("nfa_snep_evt_hdlr (): Event [%s]", nfa_snep_evt_code (p_msg->hdr.event));
-#else
-    SNEP_TRACE_DEBUG1 ("nfa_snep_evt_hdlr(): Event 0x%02x", p_msg->hdr.event);
-#endif
-
-    event = p_msg->hdr.event & 0x00ff;
-
-    /* execute action functions */
-    if (event < NFA_SNEP_NUM_ACTIONS)
-    {
-        delete_msg = (*nfa_snep_action[event]) (p_msg);
-    }
-    else
-    {
-        SNEP_TRACE_ERROR0 ("Unhandled event");
-    }
-
-    return delete_msg;
-}
-
-
-#if (BT_TRACE_VERBOSE == TRUE)
-/*******************************************************************************
-**
-** Function         nfa_snep_evt_code
-**
-** Description
-**
-** Returns          string of event
-**
-*******************************************************************************/
-static char *nfa_snep_evt_code (UINT16 evt_code)
-{
-    switch (evt_code)
-    {
-    case NFA_SNEP_API_START_DEFAULT_SERVER_EVT:
-        return "API_START_DEFAULT_SERVER";
-    case NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT:
-        return "API_STOP_DEFAULT_SERVER";
-    case NFA_SNEP_API_REG_SERVER_EVT:
-        return "API_REG_SERVER";
-    case NFA_SNEP_API_REG_CLIENT_EVT:
-        return "API_REG_CLIENT";
-    case NFA_SNEP_API_DEREG_EVT:
-        return "API_DEREG";
-    case NFA_SNEP_API_CONNECT_EVT:
-        return "API_CONNECT";
-    case NFA_SNEP_API_GET_REQ_EVT:
-        return "API_GET_REQ";
-    case NFA_SNEP_API_PUT_REQ_EVT:
-        return "API_PUT_REQ";
-    case NFA_SNEP_API_GET_RESP_EVT:
-        return "API_GET_RESP";
-    case NFA_SNEP_API_PUT_RESP_EVT:
-        return "API_PUT_RESP";
-    case NFA_SNEP_API_DISCONNECT_EVT:
-        return "API_DISCONNECT";
-    default:
-        return "Unknown event";
-    }
-}
-#endif  /* Debug Functions */
diff --git a/src/nfa/sys/nfa_sys_cback.c b/src/nfa/sys/nfa_sys_cback.c
index 174fe28..cfe31a7 100644
--- a/src/nfa/sys/nfa_sys_cback.c
+++ b/src/nfa/sys/nfa_sys_cback.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  Registration/deregistration functions for inter-module callbacks
diff --git a/src/nfa/sys/nfa_sys_cfg.c b/src/nfa/sys/nfa_sys_cfg.c
index 9b60ea7..14a66dc 100644
--- a/src/nfa/sys/nfa_sys_cfg.c
+++ b/src/nfa/sys/nfa_sys_cfg.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains compile-time configurable constants for the NFA
diff --git a/src/nfa/sys/nfa_sys_main.c b/src/nfa/sys/nfa_sys_main.c
index de8b115..0ad988e 100644
--- a/src/nfa/sys/nfa_sys_main.c
+++ b/src/nfa/sys/nfa_sys_main.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This is the main implementation file for the NFA system manager.
diff --git a/src/nfa/sys/nfa_sys_ptim.c b/src/nfa/sys/nfa_sys_ptim.c
index a10008b..c38b204 100644
--- a/src/nfa/sys/nfa_sys_ptim.c
+++ b/src/nfa/sys/nfa_sys_ptim.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  Protocol timer services (taken from bta ptim)
diff --git a/src/nfc/include/ce_api.h b/src/nfc/include/ce_api.h
index 3abdea9..9be3804 100644
--- a/src/nfc/include/ce_api.h
+++ b/src/nfc/include/ce_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2009-2012 Broadcom Corporation
+ *  Copyright (C) 2009-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the Near Field Communication (NFC) Card Emulation
diff --git a/src/nfc/include/llcp_api.h b/src/nfc/include/llcp_api.h
index 32af471..31413fd 100644
--- a/src/nfc/include/llcp_api.h
+++ b/src/nfc/include/llcp_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the LLCP API definitions
@@ -79,6 +80,7 @@
 #define LLCP_LINK_REMOTE_INITIATED          0x05    /* Link has been deactivated by remote      */
 #define LLCP_LINK_TIMEOUT                   0x06    /* Link has been deactivated by timeout     */
 #define LLCP_LINK_FRAME_ERROR               0x07    /* Link has been deactivated by frame error */
+#define LLCP_LINK_RF_LINK_LOSS_NO_RX_LLC    0x08    /* RF link loss without any rx LLC PDU      */
 #define LLCP_LINK_RF_TRANSMISSION_ERR       NFC_STATUS_RF_TRANSMISSION_ERR
 #define LLCP_LINK_RF_PROTOCOL_ERR           NFC_STATUS_RF_PROTOCOL_ERR
 #define LLCP_LINK_RF_TIMEOUT                NFC_STATUS_TIMEOUT
diff --git a/src/nfc/include/llcp_defs.h b/src/nfc/include/llcp_defs.h
index ed77ffe..b474930 100644
--- a/src/nfc/include/llcp_defs.h
+++ b/src/nfc/include/llcp_defs.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the LLCP definitions
diff --git a/src/nfc/include/nci_hmsgs.h b/src/nfc/include/nci_hmsgs.h
index cdde2a2..c1fdfb0 100644
--- a/src/nfc/include/nci_hmsgs.h
+++ b/src/nfc/include/nci_hmsgs.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2009-2012 Broadcom Corporation
+ *  Copyright (C) 2009-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  defines NCI interface messages (for DH)
diff --git a/src/nfc/include/ndef_utils.h b/src/nfc/include/ndef_utils.h
index 336cd8b..d723a9a 100644
--- a/src/nfc/include/ndef_utils.h
+++ b/src/nfc/include/ndef_utils.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains definitions for some utility functions to help parse
@@ -72,6 +73,7 @@
 #define AC_REC_TYPE_LEN     2       /* Alternative Carrier Record Type  */
 #define ERR_REC_TYPE_LEN    3       /* Error Record Type                */
 #define BT_OOB_REC_TYPE_LEN 32      /* Bluetooth OOB Data Type          */
+#define WIFI_WSC_REC_TYPE_LEN 23    /* Wifi WSC Data Type               */
 
 
 #ifdef __cplusplus
@@ -519,6 +521,18 @@
                                                              char *p_id_str,
                                                              UINT8 eir_type, UINT8 data_len, UINT8 *p_data);
 
+/*******************************************************************************
+**
+** Function         NDEF_MsgAddMediaWifiWsc
+**
+** Description      This function adds Wifi Wsc Record header.
+**
+** Returns          NDEF_OK if all OK
+**
+*******************************************************************************/
+EXPORT_NDEF_API extern tNDEF_STATUS NDEF_MsgAddMediaWifiWsc (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size,
+                                    char *p_id_str, UINT8 *p_payload, UINT32 payload_len);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/nfc/include/nfc_api.h b/src/nfc/include/nfc_api.h
index 2fac0e7..8254986 100644
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2009-2012 Broadcom Corporation
+ *  Copyright (C) 2009-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the Near Field Communication (NFC) API function
@@ -558,25 +559,29 @@
     UINT8       uid[NFC_ISO15693_UID_LEN];
 } tNFC_RF_PISO15693_PARAMS;
 
-#define NFC_KOVIO_MAX_LEN       16
+#ifndef NFC_KOVIO_MAX_LEN
+#define NFC_KOVIO_MAX_LEN       32
+#endif
 typedef struct
 {
     UINT8       uid_len;
     UINT8       uid[NFC_KOVIO_MAX_LEN];
 } tNFC_RF_PKOVIO_PARAMS;
 
+typedef union
+{
+    tNFC_RF_PA_PARAMS   pa;
+    tNFC_RF_PB_PARAMS   pb;
+    tNFC_RF_PF_PARAMS   pf;
+    tNFC_RF_LF_PARAMS   lf;
+    tNFC_RF_PISO15693_PARAMS pi93;
+    tNFC_RF_PKOVIO_PARAMS pk;
+} tNFC_RF_TECH_PARAMU;
+
 typedef struct
 {
     tNFC_DISCOVERY_TYPE     mode;
-    union
-    {
-        tNFC_RF_PA_PARAMS   pa;
-        tNFC_RF_PB_PARAMS   pb;
-        tNFC_RF_PF_PARAMS   pf;
-        tNFC_RF_LF_PARAMS   lf;
-        tNFC_RF_PISO15693_PARAMS pi93;
-        tNFC_RF_PKOVIO_PARAMS pk;
-    } param; /* Discovery Type specific parameters */
+    tNFC_RF_TECH_PARAMU     param;
 } tNFC_RF_TECH_PARAMS;
 
 /* the data type associated with NFC_RESULT_DEVT */
@@ -693,6 +698,7 @@
     UINT8                   rf_disc_id;     /* RF Discovery ID          */
     tNFC_PROTOCOL           protocol;       /* supported protocol       */
     tNFC_RF_TECH_PARAMS     rf_tech_param;  /* RF technology parameters */
+    tNFC_DISCOVERY_TYPE     data_mode;      /* for future Data Exchange */
     tNFC_BIT_RATE           tx_bitrate;     /* Data Exchange Tx Bitrate */
     tNFC_BIT_RATE           rx_bitrate;     /* Data Exchange Rx Bitrate */
     tNFC_INTF_PARAMS        intf_param;     /* interface type and params*/
diff --git a/src/nfc/include/rw_api.h b/src/nfc/include/rw_api.h
index f0348c5..1cfaa91 100644
--- a/src/nfc/include/rw_api.h
+++ b/src/nfc/include/rw_api.h
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the Near Field Communication (NFC) Reader/Writer mode
@@ -85,6 +86,7 @@
     RW_T3T_POLL_EVT,                            /* Response to RW_T3tPoll                   */
     RW_T3T_GET_SYSTEM_CODES_EVT,                /* Response to RW_T3tGetSystemCodes         */
     RW_T3T_FORMAT_CPLT_EVT,                     /* Tag Formated (Felica-Lite only)          */
+    RW_T3T_SET_READ_ONLY_CPLT_EVT,              /* Tag is set as Read only                  */
     RW_T3T_INTF_ERROR_EVT,                      /* RF Interface error event                 */
     RW_T3T_MAX_EVT,
 
@@ -96,6 +98,7 @@
     RW_T4T_NDEF_READ_FAIL_EVT,                  /* Read operation failed                    */
     RW_T4T_NDEF_UPDATE_CPLT_EVT,                /* Update operation completed               */
     RW_T4T_NDEF_UPDATE_FAIL_EVT,                /* Update operation failed                  */
+    RW_T4T_SET_TO_RO_EVT,                       /* Tag is set as read only                  */
     RW_T4T_PRESENCE_CHECK_EVT,                  /* Response to RW_T4tPresenceCheck          */
     RW_T4T_RAW_FRAME_EVT,                       /* Response of raw frame sent               */
     RW_T4T_INTF_ERROR_EVT,                      /* RF Interface error event                 */
@@ -133,6 +136,8 @@
 #define RW_NDEF_FL_HARD_LOCKABLE                0x40    /* Tag can be hard locked */
 #define RW_NDEF_FL_OTP                          0x80    /* Tag is one time programmable */
 
+typedef UINT8 tRW_NDEF_FLAG;
+
 typedef struct
 {
     tNFC_STATUS     status;
@@ -168,7 +173,7 @@
     tNFC_PROTOCOL   protocol;           /* protocol used to detect NDEF */
     UINT32          max_size;           /* max number of bytes available for NDEF data */
     UINT32          cur_size;           /* current size of stored NDEF data (in bytes) */
-    UINT8           flags;              /* Flags to indicate NDEF capability,formated,formatable and read only */
+    tRW_NDEF_FLAG   flags;              /* Flags to indicate NDEF capability,formated,formatable and read only */
 } tRW_DETECT_NDEF_DATA;
 
 typedef struct
@@ -635,6 +640,24 @@
 
 /*****************************************************************************
 **
+** Function         RW_T3tSetReadOnly
+**
+** Description
+**      Set a type-3 tag to Read Only
+**
+**      Only Felica-Lite tags are supported by this API.
+**      RW_T3tDetectNDef() must be called before using this
+**      The RW_T3T_SET_READ_ONLY_CPLT_EVT event will be returned.
+**
+** Returns
+**      NFC_STATUS_OK if success
+**      NFC_STATUS_FAILED if T3T is busy or other error
+**
+*****************************************************************************/
+NFC_API extern tNFC_STATUS RW_T3tSetReadOnly (BOOLEAN b_hard_lock);
+
+/*****************************************************************************
+**
 ** Function         RW_T3tCheckNDef
 **
 ** Description
@@ -878,12 +901,26 @@
 *****************************************************************************/
 NFC_API extern tNFC_STATUS RW_T4tPresenceCheck (void);
 
+/*****************************************************************************
+**
+** Function         RW_T4tSetNDefReadOnly
+**
+** Description      This function performs NDEF read-only procedure
+**                  Note: RW_T4tDetectNDef() must be called before using this
+**
+**                  The RW_T4T_SET_TO_RO_EVT event will be returned.
+**
+** Returns          NFC_STATUS_OK if success
+**                  NFC_STATUS_FAILED if T4T is busy or other error
+**
+*****************************************************************************/
+NFC_API extern tNFC_STATUS RW_T4tSetNDefReadOnly (void);
 
 /*******************************************************************************
 **
 ** Function         RW_I93Inventory
 **
-** Description      This function send Inventory command
+** Description      This function send Inventory command with/without AFI
 **                  If UID is provided then set UID[0]:MSB, ... UID[7]:LSB
 **
 **                  RW_I93_RESPONSE_EVT will be returned
@@ -893,7 +930,7 @@
 **                  NFC_STATUS_FAILED if T4T is busy or other error
 **
 *******************************************************************************/
-NFC_API extern tNFC_STATUS RW_I93Inventory (UINT8 *p_uid);
+NFC_API extern tNFC_STATUS RW_I93Inventory (BOOLEAN including_afi, UINT8 afi, UINT8 *p_uid);
 
 /*******************************************************************************
 **
diff --git a/src/nfc/include/tags_defs.h b/src/nfc/include/tags_defs.h
index 300d020..09d23f1 100644
--- a/src/nfc/include/tags_defs.h
+++ b/src/nfc/include/tags_defs.h
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the Near Field Communication (NFC) Tags related
@@ -226,6 +227,7 @@
 #define T3T_SYSTEM_CODE_NDEF        0x12FC  /* System Code for NDEF tags */
 #define T3T_SYSTEM_CODE_FELICA_LITE 0x88B4  /* System Code for felica-lite tags */
 #define T3T_MAX_SYSTEM_CODES        16
+#define T3T_FELICALITE_NMAXB        13      /* Maximum number of blocks for NDEF message for Felica Lite tags */
 
 /* Block descriptor, used to describe a block to check/update */
 typedef struct
@@ -307,7 +309,11 @@
 
 /* Felica Lite defintions */
 #define T3T_MSG_FELICALITE_BLOCK_ID_MC              0x88    /* Block ID for MC (memory configuration)                       */
-#define T3T_MSG_FELICALITE_MC_OFFSET_SYS_OP         0x03    /* Memory Configuration Block offset: SYS_OP (System Option)    */
+
+#define T3T_MSG_FELICALITE_MC_OFFSET_MC_SP          0x00    /* Memory Configuration Block offset: MC_SP (Memory Configuration for scratch pad)   */
+#define T3T_MSG_FELICALITE_MC_OFFSET_MC_ALL         0x02    /* Memory Configuration Block offset: MC_ALL (Memory Configuration for system block) */
+#define T3T_MSG_FELICALITE_MC_OFFSET_SYS_OP         0x03    /* Memory Configuration Block offset: SYS_OP (System Option)                         */
+#define T3T_MSG_FELICALITE_MC_OFFSET_RF_PRM         0x04    /* Memory Configuration Block offset: RF_PRM (Memory Configuration for RF Parameter) */
 
 
 
@@ -356,8 +362,9 @@
 #define T4T_CC_FILE_ID                  0xE103
 #define T4T_CC_FILE_MIN_LEN             0x000F
 
-#define T4T_VERSION_OFFSET_IN_CC        0x02
-#define T4T_FC_TLV_OFFSET_IN_CC         0x07
+#define T4T_VERSION_OFFSET_IN_CC          0x02
+#define T4T_FC_TLV_OFFSET_IN_CC           0x07
+#define T4T_FC_WRITE_ACCESS_OFFSET_IN_TLV 0x07  /* Offset of Write access byte from type field in CC */
 
 #define T4T_NDEF_FILE_CONTROL_TYPE      0x04    /* NDEF File Control Type */
 #define T4T_PROP_FILE_CONTROL_TYPE      0x05    /* Proprietary File Control Type */
diff --git a/src/nfc/int/ce_int.h b/src/nfc/int/ce_int.h
index 2d1d9fe..dc01e28 100644
--- a/src/nfc/int/ce_int.h
+++ b/src/nfc/int/ce_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2009-2012 Broadcom Corporation
+ *  Copyright (C) 2009-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the Near Field Communication (NFC) Card Emulation
diff --git a/src/nfc/int/llcp_int.h b/src/nfc/int/llcp_int.h
index 62dd384..37e54bb 100644
--- a/src/nfc/int/llcp_int.h
+++ b/src/nfc/int/llcp_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains LLCP internal definitions
@@ -46,6 +47,11 @@
 #define LLCP_LINK_SYMM_REMOTE_XMIT_NEXT  1
 
 /*
+** LLCP internal flags
+*/
+#define LLCP_LINK_FLAGS_RX_ANY_LLC_PDU      0x01    /* Received any LLC PDU in activated state */
+
+/*
 ** LLCP link control block
 */
 typedef struct
@@ -56,6 +62,7 @@
 
     BOOLEAN             is_initiator;           /* TRUE if initiator role                       */
     BOOLEAN             is_sending_data;        /* TRUE if llcp_link_check_send_data() is excuting    */
+    UINT8               flags;                  /* LLCP internal flags                          */
     UINT8               agreed_major_version;   /* llcp major version used in activated state   */
     UINT8               agreed_minor_version;   /* llcp minor version used in activated state   */
 
diff --git a/src/nfc/int/nfc_int.h b/src/nfc/int/nfc_int.h
index e9180e6..ea7ed03 100644
--- a/src/nfc/int/nfc_int.h
+++ b/src/nfc/int/nfc_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2009-2012 Broadcom Corporation
+ *  Copyright (C) 2009-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  this file contains the main NFC Upper Layer internal definitions and
@@ -272,6 +273,8 @@
 void nfc_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
 void nfc_stop_quick_timer (TIMER_LIST_ENT *p_tle);
 void nfc_process_quick_timer_evt (void);
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/nfc/int/rw_int.h b/src/nfc/int/rw_int.h
index 9c27de6..21d6af7 100644
--- a/src/nfc/int/rw_int.h
+++ b/src/nfc/int/rw_int.h
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the Near Field Communication (NFC) Reader/Writer mode
@@ -373,6 +374,7 @@
 #define RW_T3T_FL_W4_GET_SC_POLL_RSP            0x04    /* Waiting for POLL response for RW_T3tGetSystemCodes */
 #define RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP       0x08    /* Waiting for POLL response for RW_T3tDetectNDef */
 #define RW_T3T_FL_W4_FMT_FELICA_LITE_POLL_RSP   0x10    /* Waiting for POLL response for RW_T3tFormat */
+#define RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP   0x20    /* Waiting for POLL response for RW_T3tSetReadOnly */
 
 typedef struct
 {
diff --git a/src/nfc/int/tags_int.h b/src/nfc/int/tags_int.h
index 4a6cf98..108e225 100644
--- a/src/nfc/int/tags_int.h
+++ b/src/nfc/int/tags_int.h
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2009-2012 Broadcom Corporation
+ *  Copyright (C) 2009-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the common data types shared by Reader/Writer mode
diff --git a/src/nfc/llcp/llcp_api.c b/src/nfc/llcp/llcp_api.c
index 1764a1c..ac6fbcf 100644
--- a/src/nfc/llcp/llcp_api.c
+++ b/src/nfc/llcp/llcp_api.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the LLCP API code
@@ -391,7 +392,7 @@
     if (reg_sap == LLCP_INVALID_SAP)
     {
         /* allocate a SAP between 0x10 and 0x1F */
-        for (sap = 0; sap <= LLCP_MAX_SERVER; sap++)
+        for (sap = 0; sap < LLCP_MAX_SERVER; sap++)
         {
             if (llcp_cb.server_cb[sap].p_app_cback == NULL)
             {
@@ -531,7 +532,7 @@
     }
 
     /* allocate a SAP between 0x20 and 0x3F */
-    for (sap = 0; sap <= LLCP_MAX_CLIENT; sap++)
+    for (sap = 0; sap < LLCP_MAX_CLIENT; sap++)
     {
         if (llcp_cb.client_cb[sap].p_app_cback == NULL)
         {
@@ -1019,7 +1020,12 @@
     LLCP_TRACE_API2 ("LLCP_ConnectCfm () Local SAP:0x%x, Remote SAP:0x%x)",
                      local_sap, remote_sap);
 
-    if ((p_params) && (p_params->miu > llcp_cb.lcb.local_link_miu))
+    if (!p_params)
+    {
+        LLCP_TRACE_ERROR0 ("LLCP_ConnectCfm (): tLLCP_CONNECTION_PARAMS must be provided");
+        return LLCP_STATUS_FAIL;
+    }
+    else if (p_params->miu > llcp_cb.lcb.local_link_miu)
     {
         LLCP_TRACE_ERROR0 ("LLCP_ConnectCfm (): Data link MIU shall not be bigger than local link MIU");
         return LLCP_STATUS_FAIL;
diff --git a/src/nfc/llcp/llcp_dlc.c b/src/nfc/llcp/llcp_dlc.c
index ee9eb6c..3221494 100644
--- a/src/nfc/llcp/llcp_dlc.c
+++ b/src/nfc/llcp/llcp_dlc.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the LLCP Data Link Connection Management
@@ -657,6 +658,7 @@
             llcp_util_send_dm (ssap, LLCP_SAP_SDP, LLCP_SAP_DM_REASON_PERM_REJECT_THIS );
             return;
         }
+
         if (dsap == LLCP_SAP_SDP)
         {
             LLCP_TRACE_ERROR0 ("llcp_dlc_proc_connect_pdu (): SDP doesn't accept connection");
@@ -671,6 +673,20 @@
             llcp_util_send_dm (ssap, LLCP_SAP_SDP, LLCP_SAP_DM_REASON_NO_SERVICE );
             return;
         }
+        else
+        {
+            /* check if this application can support connection-oriented transport */
+            p_app_cb = llcp_util_get_app_cb (dsap);
+
+            if (  (p_app_cb == NULL)
+                ||(p_app_cb->p_app_cback == NULL)
+                ||((p_app_cb->link_type & LLCP_LINK_TYPE_DATA_LINK_CONNECTION) == 0)  )
+            {
+                LLCP_TRACE_ERROR1 ("llcp_dlc_proc_connect_pdu (): SAP(0x%x) doesn't support connection-oriented", dsap);
+                llcp_util_send_dm (ssap, dsap, LLCP_SAP_DM_REASON_NO_SERVICE );
+                return;
+            }
+        }
     }
 
     /* check if any data link */
diff --git a/src/nfc/llcp/llcp_link.c b/src/nfc/llcp/llcp_link.c
index 7deaeb2..865511b 100644
--- a/src/nfc/llcp/llcp_link.c
+++ b/src/nfc/llcp/llcp_link.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the LLCP Link Management
@@ -210,6 +211,9 @@
 
     llcp_cb.lcb.is_initiator = p_config->is_initiator;
 
+    /* reset internal flags */
+    llcp_cb.lcb.flags = 0x00;
+
     /* set tx MIU to MIN (MIU of local LLCP, MIU of peer LLCP) */
 
     if (llcp_cb.lcb.local_link_miu >= llcp_cb.lcb.peer_miu)
@@ -427,6 +431,13 @@
     }
     else /*  for link timeout and interface error */
     {
+        /* if got RF link loss receiving no LLC PDU from peer */
+        if (  (reason == LLCP_LINK_RF_LINK_LOSS_ERR)
+            &&(!(llcp_cb.lcb.flags & LLCP_LINK_FLAGS_RX_ANY_LLC_PDU)))
+        {
+            reason = LLCP_LINK_RF_LINK_LOSS_NO_RX_LLC;
+        }
+
         NFC_FlushData (NFC_RF_CONN_ID);
     }
 
@@ -1659,6 +1670,7 @@
         }
         else
         {
+            llcp_cb.lcb.flags |= LLCP_LINK_FLAGS_RX_ANY_LLC_PDU;
             llcp_link_proc_rx_data ((BT_HDR *) p_data->data.p_data);
         }
     }
diff --git a/src/nfc/llcp/llcp_main.c b/src/nfc/llcp/llcp_main.c
index 540cfc5..e1e1824 100644
--- a/src/nfc/llcp/llcp_main.c
+++ b/src/nfc/llcp/llcp_main.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the main LLCP entry points
diff --git a/src/nfc/llcp/llcp_sdp.c b/src/nfc/llcp/llcp_sdp.c
index 6d2c73f..d9b13f6 100644
--- a/src/nfc/llcp/llcp_sdp.c
+++ b/src/nfc/llcp/llcp_sdp.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the LLCP Service Discovery
diff --git a/src/nfc/llcp/llcp_util.c b/src/nfc/llcp/llcp_util.c
index b11fbbc..5a402e2 100644
--- a/src/nfc/llcp/llcp_util.c
+++ b/src/nfc/llcp/llcp_util.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the LLCP utilities
diff --git a/src/nfc/nci/nci_hmsgs.c b/src/nfc/nci/nci_hmsgs.c
index 4bb6896..9052867 100644
--- a/src/nfc/nci/nci_hmsgs.c
+++ b/src/nfc/nci/nci_hmsgs.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains function of the NCI unit to format and send NCI
diff --git a/src/nfc/nci/nci_hrcv.c b/src/nfc/nci/nci_hrcv.c
index b9f9bcb..d0a9fd4 100644
--- a/src/nfc/nci/nci_hrcv.c
+++ b/src/nfc/nci/nci_hrcv.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains function of the NFC unit to receive/process NCI
diff --git a/src/nfc/ndef/ndef_cho_utils.c b/src/nfc/ndef/ndef_cho_utils.c
index 53c2bfc..1fe4b80 100644
--- a/src/nfc/ndef/ndef_cho_utils.c
+++ b/src/nfc/ndef/ndef_cho_utils.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains source code for some utility functions to help parse
@@ -58,7 +59,10 @@
 static UINT8 err_rec_type[ERR_REC_TYPE_LEN] = { 0x65, 0x72, 0x72 }; /* "err" */
 
 /* Bluetooth OOB Data Type */
-static UINT8 *p_bt_oob_rec_type = (UINT8 *) "application/vnd.bluetooth.ep.oob";
+static UINT8 *p_bt_oob_rec_type = (UINT8 *)"application/vnd.bluetooth.ep.oob";
+
+/* Wifi WSC Data Type */
+static UINT8 *p_wifi_wsc_rec_type = (UINT8 *)"application/vnd.wfa.wsc";
 
 /*******************************************************************************
 **
@@ -138,13 +142,13 @@
     ARRAY_TO_STREAM (p, p_carrier_type, carrier_type_len);
     ARRAY_TO_STREAM (p, p_carrier_data, carrier_data_len);
 
-    payload_len = (UINT32) carrier_type_len + carrier_data_len + 2;
+    payload_len = (UINT32)carrier_type_len + carrier_data_len + 2;
 
-    id_len = (UINT8) strlen (p_id_str);
+    id_len = (UINT8)strlen (p_id_str);
 
     status = NDEF_MsgAddRec (p_msg, max_size, p_cur_size,
                              NDEF_TNF_WKT, hc_rec_type, HC_REC_TYPE_LEN,
-                             (UINT8*) p_id_str, id_len, payload, payload_len);
+                             (UINT8*)p_id_str, id_len, payload, payload_len);
     return (status);
 }
 
@@ -169,11 +173,11 @@
     /* get payload length first */
 
     /* CPS, length of carrier data ref, carrier data ref, Aux data reference count */
-    payload_len = 3 + (UINT8) strlen (p_carrier_data_ref_str);
+    payload_len = 3 + (UINT8)strlen (p_carrier_data_ref_str);
     for (xx = 0; xx < aux_data_ref_count; xx++)
     {
         /* Aux Data Reference length (1 byte) */
-        payload_len += 1 + (UINT8) strlen (p_aux_data_ref_str[xx]);
+        payload_len += 1 + (UINT8)strlen (p_aux_data_ref_str[xx]);
     }
 
     /* reserve memory for payload */
@@ -193,7 +197,7 @@
         UINT8_TO_BE_STREAM (p, cps);
 
         /* Carrier Data Reference length */
-        ref_str_len = (UINT8) strlen (p_carrier_data_ref_str);
+        ref_str_len = (UINT8)strlen (p_carrier_data_ref_str);
 
         UINT8_TO_BE_STREAM (p, ref_str_len);
 
@@ -206,7 +210,7 @@
         for (xx = 0; xx < aux_data_ref_count; xx++)
         {
             /* Aux Data Reference length (1 byte) */
-            ref_str_len = (UINT8) strlen (p_aux_data_ref_str[xx]);
+            ref_str_len = (UINT8)strlen (p_aux_data_ref_str[xx]);
 
             UINT8_TO_BE_STREAM (p, ref_str_len);
 
@@ -305,11 +309,11 @@
     BDADDR_TO_STREAM (p, bd_addr);
 
     payload_len = BD_ADDR_LEN + 2;
-    id_len = (UINT8) strlen (p_id_str);
+    id_len = (UINT8)strlen (p_id_str);
 
     status = NDEF_MsgAddRec (p_msg, max_size, p_cur_size,
                              NDEF_TNF_MEDIA, p_bt_oob_rec_type, BT_OOB_REC_TYPE_LEN,
-                             (UINT8*) p_id_str, id_len, payload, payload_len);
+                             (UINT8*)p_id_str, id_len, payload, payload_len);
     return (status);
 }
 
@@ -346,8 +350,8 @@
     eir_data_len = BT_OOB_COD_SIZE + 2;
 
     /* append EIR data at the end of record */
-    status = NDEF_MsgAppendPayload (p_msg, max_size, p_cur_size,
-                                    p_rec, eir_data, eir_data_len);
+    status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size,
+                                   p_rec, eir_data, eir_data_len);
 
     /* update BT OOB data length, if success */
     if (status == NDEF_OK)
@@ -404,8 +408,8 @@
     eir_data_len = name_len + 2;
 
     /* append EIR data at the end of record */
-    status = NDEF_MsgAppendPayload (p_msg, max_size, p_cur_size,
-                                    p_rec, eir_data, eir_data_len);
+    status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size,
+                                   p_rec, eir_data, eir_data_len);
 
     /* update BT OOB data length, if success */
     if (status == NDEF_OK)
@@ -446,19 +450,19 @@
     /* create EIR data format */
     p = eir_data;
 
-    UINT8_TO_STREAM (p, BT_OOB_HASH_C_SIZE + 1);
-    UINT8_TO_STREAM (p, BT_EIR_OOB_SSP_HASH_C_TYPE);
+    UINT8_TO_STREAM   (p, BT_OOB_HASH_C_SIZE + 1);
+    UINT8_TO_STREAM   (p, BT_EIR_OOB_SSP_HASH_C_TYPE);
     ARRAY16_TO_STREAM (p, p_hash_c);
 
-    UINT8_TO_STREAM (p, BT_OOB_RAND_R_SIZE + 1);
-    UINT8_TO_STREAM (p, BT_EIR_OOB_SSP_RAND_R_TYPE);
+    UINT8_TO_STREAM   (p, BT_OOB_RAND_R_SIZE + 1);
+    UINT8_TO_STREAM   (p, BT_EIR_OOB_SSP_RAND_R_TYPE);
     ARRAY16_TO_STREAM (p, p_rand_r);
 
     eir_data_len = BT_OOB_HASH_C_SIZE + BT_OOB_RAND_R_SIZE + 4;
 
     /* append EIR data at the end of record */
-    status = NDEF_MsgAppendPayload (p_msg, max_size, p_cur_size,
-                                    p_rec, eir_data, eir_data_len);
+    status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size,
+                                   p_rec, eir_data, eir_data_len);
 
     /* update BT OOB data length, if success */
     if (status == NDEF_OK)
@@ -505,8 +509,8 @@
     eir_data_len = data_len + 2;
 
     /* append EIR data at the end of record */
-    status = NDEF_MsgAppendPayload (p_msg, max_size, p_cur_size,
-                                    p_rec, eir_data, eir_data_len);
+    status = NDEF_MsgAppendPayload(p_msg, max_size, p_cur_size,
+                                   p_rec, eir_data, eir_data_len);
 
     /* update BT OOB data length, if success */
     if (status == NDEF_OK)
@@ -521,6 +525,30 @@
 
 /*******************************************************************************
 **
+** Function         NDEF_MsgAddMediaWifiWsc
+**
+** Description      This function adds Wifi Wsc Record header.
+**
+** Returns          NDEF_OK if all OK
+**
+*******************************************************************************/
+tNDEF_STATUS NDEF_MsgAddMediaWifiWsc (UINT8 *p_msg, UINT32 max_size, UINT32 *p_cur_size,
+                                    char *p_id_str, UINT8 *p_payload, UINT32 payload_len)
+{
+    tNDEF_STATUS    status;
+    UINT8           id_len = 0;
+
+    if (p_id_str)
+        id_len = (UINT8)strlen (p_id_str);
+
+    status = NDEF_MsgAddRec (p_msg, max_size, p_cur_size,
+                             NDEF_TNF_MEDIA, p_wifi_wsc_rec_type, WIFI_WSC_REC_TYPE_LEN,
+                             (UINT8*)p_id_str, id_len, p_payload, payload_len);
+    return (status);
+}
+
+/*******************************************************************************
+**
 **              Static Local Functions
 **
 *******************************************************************************/
@@ -540,8 +568,8 @@
     UINT8   id_len, tnf, type_len;
 
     /* find record by Payload ID */
-    id_len = (UINT8) strlen (p_id_str);
-    p_rec = NDEF_MsgGetFirstRecById (p_msg, (UINT8*) p_id_str, id_len);
+    id_len = (UINT8)strlen (p_id_str);
+    p_rec = NDEF_MsgGetFirstRecById (p_msg, (UINT8*)p_id_str, id_len);
 
     if (!p_rec)
         return (NULL);
@@ -549,10 +577,10 @@
     p_type = NDEF_RecGetType (p_rec, &tnf, &type_len);
 
     /* check type if this is BT OOB record */
-    if (  (!p_rec)
-        ||(tnf != NDEF_TNF_MEDIA)
-        ||(type_len != BT_OOB_REC_TYPE_LEN)
-        ||(memcmp (p_type, p_bt_oob_rec_type, BT_OOB_REC_TYPE_LEN))  )
+    if ((!p_rec)
+      ||(tnf != NDEF_TNF_MEDIA)
+      ||(type_len != BT_OOB_REC_TYPE_LEN)
+      ||(memcmp (p_type, p_bt_oob_rec_type, BT_OOB_REC_TYPE_LEN)))
     {
         return (NULL);
     }
diff --git a/src/nfc/ndef/ndef_utils.c b/src/nfc/ndef/ndef_utils.c
index 48084f0..908e9ff 100644
--- a/src/nfc/ndef/ndef_utils.c
+++ b/src/nfc/ndef/ndef_utils.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains source code for some utility functions to help parse
diff --git a/src/nfc/nfc/nfc_ee.c b/src/nfc/nfc/nfc_ee.c
index 5f2969a..26fae8b 100644
--- a/src/nfc/nfc/nfc_ee.c
+++ b/src/nfc/nfc/nfc_ee.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains functions that interface with the NFCEEs.
diff --git a/src/nfc/nfc/nfc_main.c b/src/nfc/nfc/nfc_main.c
index ea7a705..d88c78e 100644
--- a/src/nfc/nfc/nfc_main.c
+++ b/src/nfc/nfc/nfc_main.c
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains functions that interface with the NFC NCI transport.
@@ -37,6 +38,7 @@
 #include "rw_int.h"
 #include "ce_int.h"
 
+
 #if (NFC_RW_ONLY == FALSE)
 #include "ce_api.h"
 #include "ce_int.h"
@@ -199,6 +201,8 @@
     }
 }
 
+
+
 /*******************************************************************************
 **
 ** Function         nfc_enabled
diff --git a/src/nfc/nfc/nfc_ncif.c b/src/nfc/nfc/nfc_ncif.c
index 0bf772b..a80406f 100644
--- a/src/nfc/nfc/nfc_ncif.c
+++ b/src/nfc/nfc/nfc_ncif.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 1999-2012 Broadcom Corporation
+ *  Copyright (C) 1999-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains functions that interface with the NFC NCI transport.
@@ -229,8 +230,7 @@
             p_cb->num_buff--;
 
         /* send to HAL */
-        nfc_cb.p_hal->write(p->len, (UINT8 *)(p+1) + p->offset);
-        GKI_freebuf(p);
+        HAL_WRITE(p);
 
         if (!fragmented)
         {
@@ -285,8 +285,7 @@
             }
 
             /* send to HAL */
-            nfc_cb.p_hal->write(p_buf->len, (UINT8 *)(p_buf+1) + p_buf->offset);
-            GKI_freebuf(p_buf);
+            HAL_WRITE(p_buf);
 
             /* Indicate command is pending */
             nfc_cb.nci_cmd_window--;
@@ -620,6 +619,7 @@
 
     len             = *p++;
     p_start         = p;
+    memset ( &p_param->param, 0, sizeof (tNFC_RF_TECH_PARAMU));
     switch (p_param->mode)
     {
     case NCI_DISCOVERY_TYPE_POLL_A:
@@ -630,6 +630,8 @@
 NFCID1 length   1 byte  Length of NFCID1 Available after Collision Resolution
 NFCID1  4, 7, or 10 bytes   Defined in [DIGPROT]Available after Collision Resolution
 SEL_RES Response    1 byte  Defined in [DIGPROT]Available after Collision Resolution
+HRx Length  1 Octets    Length of HRx Parameters collected from the response to the T1T RID command.
+HRx 0 or 2 Octets   If present, the first byte SHALL contain HR0 and the second byte SHALL contain HR1 as defined in [DIGITAL].
         */
         STREAM_TO_ARRAY (p_pa->sens_res, p, 2);
         p_pa->nfcid1_len     = *p++;
@@ -639,6 +641,15 @@
         u8                   = *p++;
         if (u8)
             p_pa->sel_rsp    = *p++;
+        if (len == (7 + p_pa->nfcid1_len + u8)) /* 2(sens_res) + 1(len) + p_pa->nfcid1_len + 1(len) + u8 + hr (1:len + 2) */
+        {
+            p_pa->hr_len     = *p++;
+            if (p_pa->hr_len == NCI_T1T_HR_LEN)
+            {
+                p_pa->hr[0]  = *p++;
+                p_pa->hr[1]  = *p;
+            }
+        }
         break;
 
     case NCI_DISCOVERY_TYPE_POLL_B:
@@ -691,7 +702,12 @@
 
     case NCI_DISCOVERY_TYPE_POLL_KOVIO:
         p_param->param.pk.uid_len = *p++;
-        STREAM_TO_ARRAY (p_param->param.pk.uid, p, NFC_KOVIO_MAX_LEN);
+        if (p_param->param.pk.uid_len > NFC_KOVIO_MAX_LEN)
+        {
+            NFC_TRACE_ERROR2( "Kovio UID len:0x%x exceeds max(0x%x)", p_param->param.pk.uid_len, NFC_KOVIO_MAX_LEN);
+            p_param->param.pk.uid_len = NFC_KOVIO_MAX_LEN;
+        }
+        STREAM_TO_ARRAY (p_param->param.pk.uid, p, p_param->param.pk.uid_len);
         break;
     }
 
@@ -754,6 +770,7 @@
     tNFC_CONN_CB * p_cb = &nfc_cb.conn_cb[NFC_RF_CONN_ID];
     UINT8                   *pp, len_act;
     UINT8                   buff_size, num_buff;
+    tNFC_RF_PA_PARAMS       *p_pa;
 
     nfc_set_state (NFC_STATE_OPEN);
 
@@ -771,7 +788,7 @@
     /* fill in tNFC_activate_DEVT */
     p = nfc_ncif_decode_rf_params (&evt_data.activate.rf_tech_param, p);
 
-    evt_data.activate.rf_tech_param.mode    = *p++;
+    evt_data.activate.data_mode             = *p++;
     evt_data.activate.tx_bitrate            = *p++;
     evt_data.activate.rx_bitrate            = *p++;
     mode         = evt_data.activate.rf_tech_param.mode;
@@ -927,6 +944,17 @@
         }
     }
 #endif
+    else if ((evt_data.activate.intf_param.type == NCI_INTERFACE_FRAME) && (evt_data.activate.protocol == NCI_PROTOCOL_T1T) )
+    {
+        p_pa = &evt_data.activate.rf_tech_param.param.pa;
+        if ((len_act == NCI_T1T_HR_LEN) && (p_pa->hr_len == 0))
+        {
+            p_pa->hr_len    = NCI_T1T_HR_LEN;
+            p_pa->hr[0]     = *p++;
+            p_pa->hr[1]     = *p++;
+        }
+    }
+
     p_cb->act_protocol  = evt_data.activate.protocol;
     p_cb->buff_size     = buff_size;
     p_cb->num_buff      = num_buff;
diff --git a/src/nfc/nfc/nfc_task.c b/src/nfc/nfc/nfc_task.c
index e8da53b..66cdf31 100644
--- a/src/nfc/nfc/nfc_task.c
+++ b/src/nfc/nfc/nfc_task.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  Entry point for NFC_TASK
@@ -283,6 +284,7 @@
             break;
 #endif
         default:
+            NFC_TRACE_DEBUG1 ("nfc_process_quick_timer_evt: unhandled timer event (0x%04x)", p_tle->event);
             break;
         }
     }
diff --git a/src/nfc/nfc/nfc_test.c b/src/nfc/nfc/nfc_test.c
index 251c888..d71641e 100644
--- a/src/nfc/nfc/nfc_test.c
+++ b/src/nfc/nfc/nfc_test.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains functions that interface with the NFC NCI transport.
diff --git a/src/nfc/nfc/nfc_utils.c b/src/nfc/nfc/nfc_utils.c
index ef0a553..244c946 100644
--- a/src/nfc/nfc/nfc_utils.c
+++ b/src/nfc/nfc/nfc_utils.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 1999-2012 Broadcom Corporation
+ *  Copyright (C) 1999-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains functions that interface with the NFC NCI transport.
diff --git a/src/nfc/nfc/nfc_vs.c b/src/nfc/nfc/nfc_vs.c
index f790940..90cef25 100644
--- a/src/nfc/nfc/nfc_vs.c
+++ b/src/nfc/nfc/nfc_vs.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains functions that NCI vendor specific interface with the
diff --git a/src/nfc/tags/ce_main.c b/src/nfc/tags/ce_main.c
index bc73070..0e5d9b3 100644
--- a/src/nfc/tags/ce_main.c
+++ b/src/nfc/tags/ce_main.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2009-2012 Broadcom Corporation
+ *  Copyright (C) 2009-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains functions that interface with the NFC NCI transport.
diff --git a/src/nfc/tags/ce_t3t.c b/src/nfc/tags/ce_t3t.c
index 62cc1c0..1d45294 100644
--- a/src/nfc/tags/ce_t3t.c
+++ b/src/nfc/tags/ce_t3t.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the implementation for Type 3 tag in Card Emulation
diff --git a/src/nfc/tags/ce_t4t.c b/src/nfc/tags/ce_t4t.c
index 80833dd..2df0874 100644
--- a/src/nfc/tags/ce_t4t.c
+++ b/src/nfc/tags/ce_t4t.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the implementation for Type 4 tag in Card Emulation
@@ -264,7 +265,7 @@
     tCE_T4T_MEM *p_t4t = &ce_cb.mem.t4t;
     UINT8       *p;
     UINT8        file_length[2];
-    UINT16       starting_offset, status_words;
+    UINT16       starting_offset;
     tCE_DATA     ce_data;
 
     CE_TRACE_DEBUG3 ("ce_t4t_update_binary (): Offset:0x%04X, Length:0x%04X, selected status = 0x%02X",
@@ -291,8 +292,6 @@
     if (length > 0)
         memcpy (p_t4t->p_scratch_buf + offset - T4T_FILE_LENGTH_SIZE, p_data, length);
 
-    status_words = T4T_RSP_CMD_CMPLTED;
-
     /* if this is the last step: writing non-zero length in NLEN */
     if ((starting_offset == 0) && (p_t4t->nlen > 0))
     {
@@ -322,16 +321,14 @@
             (*ce_cb.p_cback) (CE_T4T_NDEF_UPDATE_START_EVT, NULL);
     }
 
-    if (!ce_t4t_send_status (status_words))
+    if (!ce_t4t_send_status (T4T_RSP_CMD_CMPLTED))
     {
         return FALSE;
     }
-
-    if (status_words == T4T_RSP_CMD_CMPLTED)
+    else
     {
         return TRUE;
     }
-    return FALSE;
 }
 
 /*******************************************************************************
@@ -658,7 +655,7 @@
         CE_TRACE_DEBUG0 ("CET4T: Forward raw frame to registered AID");
 
         /* forward raw frame to upper layer */
-        if (ce_cb.mem.t4t.selected_aid_idx < NFC_MAX_AID_LEN)
+        if (ce_cb.mem.t4t.selected_aid_idx < CE_T4T_MAX_REG_AID)
         {
             ce_data.raw_frame.status = NFC_STATUS_OK;
             ce_data.raw_frame.p_data = p_c_apdu;
diff --git a/src/nfc/tags/rw_i93.c b/src/nfc/tags/rw_i93.c
index 1c9df79..5bcbc46 100644
--- a/src/nfc/tags/rw_i93.c
+++ b/src/nfc/tags/rw_i93.c
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the implementation for ISO 15693 in Reader/Writer
@@ -533,12 +534,12 @@
 ** Returns          tNFC_STATUS
 **
 *******************************************************************************/
-tNFC_STATUS rw_i93_send_cmd_inventory (UINT8 *p_uid)
+tNFC_STATUS rw_i93_send_cmd_inventory (UINT8 *p_uid, BOOLEAN including_afi, UINT8 afi)
 {
     BT_HDR      *p_cmd;
-    UINT8       *p;
+    UINT8       *p, flags;
 
-    RW_TRACE_DEBUG0 ("rw_i93_send_cmd_inventory ()");
+    RW_TRACE_DEBUG2 ("rw_i93_send_cmd_inventory () including_afi:%d, AFI:0x%02X", including_afi, afi);
 
     p_cmd = (BT_HDR *) GKI_getpoolbuf (NFC_RW_POOL_ID);
 
@@ -553,11 +554,24 @@
     p = (UINT8 *) (p_cmd + 1) + p_cmd->offset;
 
     /* Flags */
-    UINT8_TO_STREAM (p, (I93_FLAG_SLOT_ONE | I93_FLAG_INVENTORY_SET | RW_I93_FLAG_SUB_CARRIER | RW_I93_FLAG_DATA_RATE));
+    flags = (I93_FLAG_SLOT_ONE | I93_FLAG_INVENTORY_SET | RW_I93_FLAG_SUB_CARRIER | RW_I93_FLAG_DATA_RATE);
+    if (including_afi)
+    {
+        flags |= I93_FLAG_AFI_PRESENT;
+    }
+
+    UINT8_TO_STREAM (p, flags);
 
     /* Command Code */
     UINT8_TO_STREAM (p, I93_CMD_INVENTORY);
 
+    if (including_afi)
+    {
+        /* Parameters */
+        UINT8_TO_STREAM (p, afi);    /* Optional AFI */
+        p_cmd->len++;
+    }
+
     if (p_uid)
     {
         UINT8_TO_STREAM  (p, I93_UID_BYTE_LEN*8);         /* Mask Length */
@@ -3201,7 +3215,7 @@
 **
 ** Function         RW_I93Inventory
 **
-** Description      This function send Inventory command
+** Description      This function send Inventory command with/without AFI
 **                  If UID is provided then set UID[0]:MSB, ... UID[7]:LSB
 **
 **                  RW_I93_RESPONSE_EVT will be returned
@@ -3212,11 +3226,11 @@
 **                  NFC_STATUS_FAILED if other error
 **
 *******************************************************************************/
-tNFC_STATUS RW_I93Inventory (UINT8 *p_uid)
+tNFC_STATUS RW_I93Inventory (BOOLEAN including_afi, UINT8 afi, UINT8 *p_uid)
 {
     tNFC_STATUS status;
 
-    RW_TRACE_API0 ("RW_I93Inventory ()");
+    RW_TRACE_API2 ("RW_I93Inventory (), including_afi:%d, AFI:0x%02X", including_afi, afi);
 
     if (rw_cb.tcb.i93.state != RW_I93_STATE_IDLE)
     {
@@ -3225,14 +3239,7 @@
         return NFC_STATUS_BUSY;
     }
 
-    if (p_uid)
-    {
-        status = rw_i93_send_cmd_inventory (p_uid);
-    }
-    else
-    {
-        status = rw_i93_send_cmd_inventory (NULL);
-    }
+    status = rw_i93_send_cmd_inventory (p_uid, including_afi, afi);
 
     if (status == NFC_STATUS_OK)
     {
@@ -3813,7 +3820,7 @@
 
     if (rw_cb.tcb.i93.uid[0] != I93_UID_FIRST_BYTE)
     {
-        status = rw_i93_send_cmd_inventory (NULL);
+        status = rw_i93_send_cmd_inventory (NULL, FALSE, 0x00);
         sub_state = RW_I93_SUBSTATE_WAIT_UID;
     }
     else if (  (rw_cb.tcb.i93.num_block == 0)
@@ -4004,7 +4011,7 @@
     }
     else
     {
-        status = rw_i93_send_cmd_inventory (rw_cb.tcb.i93.uid);
+        status = rw_i93_send_cmd_inventory (rw_cb.tcb.i93.uid, FALSE, 0x00);
         sub_state = RW_I93_SUBSTATE_WAIT_UID;
     }
 
@@ -4110,7 +4117,8 @@
     }
     else
     {
-        status = rw_i93_send_cmd_inventory (rw_cb.tcb.i93.uid);
+        /* The support of AFI by the VICC is optional, so do not include AFI */
+        status = rw_i93_send_cmd_inventory (rw_cb.tcb.i93.uid, FALSE, 0x00);
 
         if (status == NFC_STATUS_OK)
         {
diff --git a/src/nfc/tags/rw_main.c b/src/nfc/tags/rw_main.c
index 11dc93f..be88aa0 100644
--- a/src/nfc/tags/rw_main.c
+++ b/src/nfc/tags/rw_main.c
@@ -16,13 +16,14 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains functions that interface with the NFC NCI transport.
  *  On the receive side, it routes events to the appropriate handler
  *  (callback). On the transmit side, it manages the command transmission.
  *
- ******************************************************************************/
+******************************************************************************/
 #include <string.h>
 #include "nfc_target.h"
 #include "bt_types.h"
@@ -232,7 +233,7 @@
     case NFC_PROTOCOL_T1T:    /* Type1Tag    - NFC-A */
         if (p_activate_params->rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A)
         {
-            status = rw_t1t_select (p_activate_params->intf_param.intf_param.frame.param,
+            status = rw_t1t_select (p_activate_params->rf_tech_param.param.pa.hr,
                                     p_activate_params->rf_tech_param.param.pa.nfcid1);
         }
         break;
diff --git a/src/nfc/tags/rw_t1t.c b/src/nfc/tags/rw_t1t.c
index 0d98546..4e7fffe 100644
--- a/src/nfc/tags/rw_t1t.c
+++ b/src/nfc/tags/rw_t1t.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the implementation for Type 1 tag in Reader/Writer
@@ -63,6 +64,9 @@
     BT_HDR                  *p_pkt;
     UINT8                   *p;
     tT1T_CMD_RSP_INFO       *p_cmd_rsp_info     = (tT1T_CMD_RSP_INFO *) rw_cb.tcb.t1t.p_cmd_rsp_info;
+#if (BT_TRACE_VERBOSE == TRUE)
+    UINT8                   begin_state         = p_t1t->state;
+#endif
 
     p_pkt = (BT_HDR *) (p_data->data.p_data);
     if (p_pkt == NULL)
@@ -190,6 +194,15 @@
     }
     else
         GKI_freebuf (p_pkt);
+
+#if (BT_TRACE_VERBOSE == TRUE)
+    if (begin_state != p_t1t->state)
+    {
+        RW_TRACE_DEBUG2 ("RW T1T state changed:<%s> -> <%s>",
+                          rw_t1t_get_state_name (begin_state),
+                          rw_t1t_get_state_name (p_t1t->state));
+    }
+#endif
 }
 
 /*******************************************************************************
@@ -673,6 +686,11 @@
 
     p_t1t->state    = RW_T1T_STATE_IDLE;
 #if (defined (RW_NDEF_INCLUDED) && (RW_NDEF_INCLUDED == TRUE))
+    if (p_t1t->state != RW_T1T_STATE_READ_NDEF)
+    {
+        p_t1t->b_update = FALSE;
+        p_t1t->b_rseg   = FALSE;
+    }
     p_t1t->substate = RW_T1T_SUBSTATE_NONE;
 #endif
     return;
diff --git a/src/nfc/tags/rw_t1t_ndef.c b/src/nfc/tags/rw_t1t_ndef.c
index 1fc2124..828d473 100644
--- a/src/nfc/tags/rw_t1t_ndef.c
+++ b/src/nfc/tags/rw_t1t_ndef.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the implementation for Type 1 tag NDEF operation in
@@ -99,7 +100,7 @@
             rw_t1t_update_tag_state ();
             rw_t1t_update_attributes ();
             rw_t1t_update_lock_attributes ();
-            memcpy (p_t1t->mem, (UINT8 *) (p_data + 1), T1T_SEGMENT_SIZE);
+            memcpy (p_t1t->mem, (UINT8 *) (p_data + T1T_ADD_LEN), T1T_SEGMENT_SIZE);
         }
         *p_status = rw_t1t_handle_dyn_read_rsp (p_notify,p_data);
     }
@@ -171,6 +172,8 @@
 ** Description      This function will extract lock bytes if any present in the
 **                  response data
 **
+** Parameters       p_data: Data bytes in the response of RSEG/READ8/RALL command
+**
 ** Returns          None
 **
 *******************************************************************************/
@@ -189,12 +192,12 @@
     if (p_cmd_rsp_info->opcode == T1T_CMD_RSEG)
     {
         start = p_t1t->segment * T1T_SEGMENT_SIZE;
-        end   = (p_t1t->segment + 1) * T1T_SEGMENT_SIZE;
+        end   = start + T1T_SEGMENT_SIZE;
     }
     else if (p_cmd_rsp_info->opcode == T1T_CMD_READ8)
     {
-        start = p_data[0] * T1T_BLOCK_SIZE;
-        end   = (p_data[0] + 1) * T1T_BLOCK_SIZE;
+        start = p_t1t->block_read * T1T_BLOCK_SIZE;
+        end   = start + T1T_BLOCK_SIZE;
     }
     else if (p_cmd_rsp_info->opcode == T1T_CMD_RALL)
     {
@@ -209,18 +212,20 @@
     {
         if (p_t1t->lockbyte[num_locks].b_lock_read == FALSE)
         {
+            /* Get the exact offset of the dynamic lock byte in the tag */
             offset = p_t1t->lock_tlv[p_t1t->lockbyte[num_locks].tlv_index].offset + p_t1t->lockbyte[num_locks].byte_index;
             if (  (offset <  end)
                 &&(offset >= start)  )
 
             {
+                /* This dynamic lock byte is in the response */
                 if (p_cmd_rsp_info->opcode == T1T_CMD_RSEG)
                 {
-                    lock_offset = (offset % T1T_SEGMENT_SIZE) + T1T_ADD_LEN;
+                    lock_offset = (offset % T1T_SEGMENT_SIZE);
                 }
                 else if (p_cmd_rsp_info->opcode == T1T_CMD_READ8)
                 {
-                    lock_offset = (offset % T1T_BLOCK_SIZE) + T1T_ADD_LEN;
+                    lock_offset = (offset % T1T_BLOCK_SIZE);
                 }
                 else if (p_cmd_rsp_info->opcode == T1T_CMD_RALL)
                 {
@@ -254,7 +259,7 @@
     /* Set Tag state based on CC value and NDEF Message length */
     if (  ((p_t1t->mem[T1T_CC_NMN_BYTE] == T1T_CC_NMN) || (p_t1t->mem[T1T_CC_NMN_BYTE] == 0))
         &&((p_t1t->mem[T1T_CC_VNO_BYTE] == T1T_CC_VNO) || (p_t1t->mem[T1T_CC_VNO_BYTE] == T1T_CC_LEGACY_VNO))
-        &&((p_t1t->mem[T1T_CC_RWA_BYTE] == T1T_CC_RWA_RW)|| (p_t1t->mem[T1T_CC_RWA_BYTE] == T1T_CC_RWA_RO))  )
+        &&((p_t1t->mem[T1T_CC_RWA_BYTE] == T1T_CC_RWA_RW) || (p_t1t->mem[T1T_CC_RWA_BYTE] == T1T_CC_RWA_RO))  )
     {
         /* Valid CC value, so Tag is initialized */
         if (p_t1t->ndef_msg_len > 0)
@@ -314,7 +319,8 @@
             else if (offset < (p_t1t->mem[T1T_CC_TMS_BYTE] + 1) * T1T_BLOCK_SIZE)
             {
                 /* send READ8 command */
-                if ((status = rw_t1t_send_dyn_cmd (T1T_CMD_READ8, (UINT8) (offset/T1T_BLOCK_SIZE), NULL)) == NFC_STATUS_OK)
+                p_t1t->block_read = (UINT8) (offset/T1T_BLOCK_SIZE);
+                if ((status = rw_t1t_send_dyn_cmd (T1T_CMD_READ8, p_t1t->block_read, NULL)) == NFC_STATUS_OK)
                 {
                     /* Reading Locks */
                     status          = NFC_STATUS_CONTINUE;
@@ -590,13 +596,13 @@
 **
 ** Function         rw_t1t_handle_read_rsp
 **
-** Description      This function handle the response received for RSEG,
-**                  RALL, READ8 commands
+** Description      This function handle the data bytes excluding ADD(S)/ADD8 field
+**                  received as part of RSEG, RALL, READ8 command response
 **
 ** Returns          status of the current NDEF/TLV Operation
 **
 *******************************************************************************/
-tNFC_STATUS rw_t1t_handle_read_rsp (BOOLEAN *p_notify,UINT8 *p_data)
+tNFC_STATUS rw_t1t_handle_read_rsp (BOOLEAN *p_notify, UINT8 *p_data)
 {
     tRW_T1T_CB              *p_t1t  = &rw_cb.tcb.t1t;
     tNFC_STATUS             status  = NFC_STATUS_OK;
@@ -811,6 +817,8 @@
 
     *p_notify = FALSE;
 
+    p_data += T1T_ADD_LEN;
+
     rw_t1t_extract_lock_bytes (p_data);
 
     if (p_t1t->state == RW_T1T_STATE_READ_NDEF)
@@ -838,7 +846,7 @@
     }
     else
     {
-        status = rw_t1t_handle_read_rsp (p_notify,p_data);
+        status = rw_t1t_handle_read_rsp (p_notify, p_data);
     }
     return status;
 }
@@ -1195,7 +1203,7 @@
 
     p_t1t->work_offset += bytes_read;
 
-    /* If not found and not failed, try to read next segment in Dynamic Memory structure */
+    /* NDEF/Lock/Mem TLV to be found in segment 0, if not assume detection failed */
     if (!found && !failed)
     {
         if (  ((p_t1t->tlv_detect == TAG_LOCK_CTRL_TLV) && (p_t1t->num_lockbytes > 0))
@@ -1313,10 +1321,8 @@
     tRW_T1T_CB          *p_t1t      = &rw_cb.tcb.t1t;
     UINT8               index;
     UINT8               adds;
-    UINT8               *p_readbytes;
     tT1T_CMD_RSP_INFO   *p_cmd_rsp_info = (tT1T_CMD_RSP_INFO *) rw_cb.tcb.t1t.p_cmd_rsp_info;
 
-    p_readbytes = p_data + T1T_ADD_LEN;
     /* The Response received could be for Read8 or Read Segment command */
     switch(p_cmd_rsp_info->opcode)
     {
@@ -1334,7 +1340,7 @@
         {
             if (rw_t1t_is_lock_reserved_otp_byte ((UINT16) ((p_t1t->block_read * T1T_BLOCK_SIZE) + index)) == FALSE)
             {
-                p_t1t->p_ndef_buffer[p_t1t->work_offset] = p_readbytes[index];
+                p_t1t->p_ndef_buffer[p_t1t->work_offset] = p_data[index];
                 p_t1t->work_offset++;
             }
             index++;
@@ -1356,7 +1362,7 @@
         {
             if (rw_t1t_is_lock_reserved_otp_byte ((UINT16) (index)) == FALSE)
             {
-                p_t1t->p_ndef_buffer[p_t1t->work_offset] = p_readbytes[index];
+                p_t1t->p_ndef_buffer[p_t1t->work_offset] = p_data[index];
                 p_t1t->work_offset++;
             }
             index++;
@@ -1868,7 +1874,7 @@
     {
     case RW_T1T_SUBSTATE_WAIT_READ_NDEF_BLOCK:
         /* Backup ndef_final_block */
-        memcpy (p_t1t->ndef_final_block,p_data + T1T_ADD_LEN,T1T_BLOCK_SIZE);
+        memcpy (p_t1t->ndef_final_block, p_data, T1T_BLOCK_SIZE);
         /* Invalidate existing NDEF Message */
         RW_T1T_BLD_ADD ((addr), (T1T_CC_BLOCK), (T1T_CC_NMN_OFFSET));
         if (NFC_STATUS_OK == rw_t1t_send_static_cmd (T1T_CMD_WRITE_E, addr, 0))
@@ -2401,10 +2407,7 @@
 {
     tNFC_STATUS     status = NFC_STATUS_FAILED;
     tRW_T1T_CB      *p_t1t= &rw_cb.tcb.t1t;
-    BOOLEAN         b_notify;
     UINT8           adds;
-    const tT1T_CMD_RSP_INFO *p_cmd_rsp_info_rall = t1t_cmd_to_rsp_info (T1T_CMD_RALL);
-    const tT1T_CMD_RSP_INFO *p_cmd_rsp_info_rseg = t1t_cmd_to_rsp_info (T1T_CMD_RSEG);
 
     if (p_t1t->state != RW_T1T_STATE_IDLE)
     {
@@ -2433,53 +2436,26 @@
         p_t1t->num_lock_tlvs = 0;
     }
 
-    if (p_t1t->b_rseg == TRUE)
+    /* Start reading memory, looking for the TLV */
+    p_t1t->segment = 0;
+    if ((p_t1t->hr[0] & 0x0F) != 1)
     {
-        /* If already got response to RSEG 0 */
-        p_t1t->tlv_detect   = tlv_type;
-        p_t1t->work_offset  = 0;
-        p_t1t->state        = RW_T1T_STATE_TLV_DETECT;
-        p_t1t->substate     = RW_T1T_SUBSTATE_NONE;
-
-        p_t1t->p_cmd_rsp_info = (tT1T_CMD_RSP_INFO *) p_cmd_rsp_info_rseg;
-        rw_t1t_handle_read_rsp (&b_notify,p_t1t->mem);
-        status              = NFC_STATUS_OK;
-    }
-    else if (p_t1t->b_update == TRUE)
-    {
-        /* If already got response to RALL */
-        p_t1t->tlv_detect   = tlv_type;
-        p_t1t->work_offset  = 0;
-        p_t1t->state        = RW_T1T_STATE_TLV_DETECT;
-        p_t1t->substate     = RW_T1T_SUBSTATE_NONE;
-
-        p_t1t->p_cmd_rsp_info = (tT1T_CMD_RSP_INFO *) p_cmd_rsp_info_rall;
-        rw_t1t_handle_read_rsp (&b_notify,p_t1t->mem);
-        status              = NFC_STATUS_OK;
+        /* send RSEG command */
+        RW_T1T_BLD_ADDS ((adds), (p_t1t->segment));
+        status = rw_t1t_send_dyn_cmd (T1T_CMD_RSEG, adds, NULL);
     }
     else
     {
-        /* Start reading memory, looking for the TLV */
-        p_t1t->segment = 0;
-        if ((p_t1t->hr[0] & 0x0F) != 1)
-        {
-            /* send RSEG command */
-            RW_T1T_BLD_ADDS ((adds), (p_t1t->segment));
-            status = rw_t1t_send_dyn_cmd (T1T_CMD_RSEG, adds, NULL);
-        }
-        else
-        {
-            status = rw_t1t_send_static_cmd (T1T_CMD_RALL, 0, 0);
-        }
-        if (status == NFC_STATUS_OK)
-        {
-            p_t1t->tlv_detect   = tlv_type;
-            p_t1t->work_offset  = 0;
-            p_t1t->state        = RW_T1T_STATE_TLV_DETECT;
-            p_t1t->substate     = RW_T1T_SUBSTATE_NONE;
-        }
-
+        status = rw_t1t_send_static_cmd (T1T_CMD_RALL, 0, 0);
     }
+    if (status == NFC_STATUS_OK)
+    {
+        p_t1t->tlv_detect   = tlv_type;
+        p_t1t->work_offset  = 0;
+        p_t1t->state        = RW_T1T_STATE_TLV_DETECT;
+        p_t1t->substate     = RW_T1T_SUBSTATE_NONE;
+    }
+
     return status;
 }
 
@@ -2621,7 +2597,6 @@
     tRW_T1T_CB  *p_t1t          = &rw_cb.tcb.t1t;
     UINT16      num_ndef_bytes;
     UINT16      offset;
-    UINT8       block;
     UINT8       addr;
     UINT8       init_lengthfield_len;
     UINT8       new_lengthfield_len;
@@ -2692,11 +2667,11 @@
     if ((p_t1t->hr[0] & 0x0F) != 1)
     {
         /* Dynamic data structure */
-        block = (UINT8) ((offset - 1)/T1T_BLOCK_SIZE);
+        p_t1t->block_read = (UINT8) ((offset - 1)/T1T_BLOCK_SIZE);
         /* Read NDEF final block before updating */
-        if ((status = rw_t1t_send_dyn_cmd (T1T_CMD_READ8, block, NULL)) == NFC_STATUS_OK)
+        if ((status = rw_t1t_send_dyn_cmd (T1T_CMD_READ8, p_t1t->block_read, NULL)) == NFC_STATUS_OK)
         {
-            p_t1t->num_ndef_finalblock = block;
+            p_t1t->num_ndef_finalblock = p_t1t->block_read;
             p_t1t->state    = RW_T1T_STATE_WRITE_NDEF;
             p_t1t->substate = RW_T1T_SUBSTATE_WAIT_READ_NDEF_BLOCK;
         }
diff --git a/src/nfc/tags/rw_t2t.c b/src/nfc/tags/rw_t2t.c
index 91f51f4..cb4e92c 100644
--- a/src/nfc/tags/rw_t2t.c
+++ b/src/nfc/tags/rw_t2t.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the implementation for Type 2 tag in Reader/Writer
@@ -66,6 +67,9 @@
     tRW_READ_DATA           evt_data = {0};
     tT2T_CMD_RSP_INFO       *p_cmd_rsp_info = (tT2T_CMD_RSP_INFO *) rw_cb.tcb.t2t.p_cmd_rsp_info;
     tRW_DETECT_NDEF_DATA    ndef_data;
+#if (BT_TRACE_VERBOSE == TRUE)
+    UINT8                   begin_state     = p_t2t->state;
+#endif
 
     if (  (p_t2t->state == RW_T2T_STATE_IDLE)
         ||(p_cmd_rsp_info == NULL)  )
@@ -212,6 +216,14 @@
 
     if (b_release)
         GKI_freebuf (p_pkt);
+#if (BT_TRACE_VERBOSE == TRUE)
+    if (begin_state != p_t2t->state)
+    {
+        RW_TRACE_DEBUG2 ("RW T2T state changed:<%s> -> <%s>",
+                          rw_t2t_get_state_name (begin_state),
+                          rw_t2t_get_state_name (p_t2t->state));
+    }
+#endif
 }
 
 /*******************************************************************************
@@ -826,6 +838,12 @@
 {
     tRW_T2T_CB      *p_t2t  = &rw_cb.tcb.t2t;
 
+    if (  (p_t2t->state == RW_T2T_STATE_READ_NDEF)
+        ||(p_t2t->state == RW_T2T_STATE_WRITE_NDEF)  )
+    {
+        p_t2t->b_read_data = FALSE;
+    }
+
     p_t2t->state    = RW_T2T_STATE_IDLE;
     p_t2t->substate = RW_T2T_SUBSTATE_NONE;
     return;
diff --git a/src/nfc/tags/rw_t2t_ndef.c b/src/nfc/tags/rw_t2t_ndef.c
index 0abfa08..e9bd16b 100644
--- a/src/nfc/tags/rw_t2t_ndef.c
+++ b/src/nfc/tags/rw_t2t_ndef.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the implementation for Type 2 tag NDEF operation in
@@ -2305,7 +2306,7 @@
         xx                      = 0;
         num_static_lock_bytes   = 0;
         block_count             = 0;
-        num_lock_bits           = TAG_BITS_PER_BYTE;
+        num_lock_bits           = TAG_BITS_PER_BYTE - 1; /* the inner while loop increases xx by 2. need (-1) to avoid coverity overrun error */
 
         while (num_static_lock_bytes < T2T_NUM_STATIC_LOCK_BYTES)
         {
@@ -2830,8 +2831,10 @@
             p_t2t->substate = RW_T2T_SUBSTATE_NONE;
     }
     else
-        status = rw_t2t_format_tag ();
-
+    {
+        if ((status = rw_t2t_format_tag ()) != NFC_STATUS_OK)
+            p_t2t->b_read_hdr = FALSE;
+    }
     return status;
 }
 
@@ -2870,8 +2873,10 @@
     }
 
     if (  (tlv_type == TAG_LOCK_CTRL_TLV)
+        &&(p_t2t->b_read_hdr)
         &&(p_t2t->tag_hdr[T2T_CC2_TMS_BYTE] == T2T_CC2_TMS_STATIC)  )
     {
+        p_t2t->b_read_hdr = FALSE;
         RW_TRACE_API1 ("RW_T2tLocateTlv - No Lock tlv in static structure tag, CC[0]: 0x%02x", p_t2t->tag_hdr[T2T_CC2_TMS_BYTE]);
         return (NFC_STATUS_FAILED);
     }
@@ -2880,6 +2885,7 @@
         &&(p_t2t->b_read_hdr)
         &&(p_t2t->tag_hdr[T2T_CC0_NMN_BYTE] != T2T_CC0_NMN)  )
     {
+        p_t2t->b_read_hdr = FALSE;
         RW_TRACE_WARNING3 ("RW_T2tLocateTlv - Invalid NDEF Magic Number!, CC[0]: 0x%02x, CC[1]: 0x%02x, CC[3]: 0x%02x", p_t2t->tag_hdr[T2T_CC0_NMN_BYTE], p_t2t->tag_hdr[T2T_CC1_VNO_BYTE], p_t2t->tag_hdr[T2T_CC3_RWA_BYTE]);
         return (NFC_STATUS_FAILED);
     }
@@ -3072,18 +3078,18 @@
         return (NFC_STATUS_FAILED);
     }
 
-    if (p_t2t->tag_hdr[T2T_CC3_RWA_BYTE] != T2T_CC3_RWA_RW)
-    {
-        RW_TRACE_ERROR1 ("RW_T2tWriteNDef - Write access not granted - CC3: %u", p_t2t->tag_hdr[T2T_CC3_RWA_BYTE]);
-        return (NFC_STATUS_REFUSED);
-    }
-
     if (p_t2t->ndef_status == T2T_NDEF_NOT_DETECTED)
     {
         RW_TRACE_ERROR0 ("RW_T2tWriteNDef - Error: NDEF detection not performed!");
         return (NFC_STATUS_FAILED);
     }
 
+    if (p_t2t->tag_hdr[T2T_CC3_RWA_BYTE] != T2T_CC3_RWA_RW)
+    {
+        RW_TRACE_ERROR1 ("RW_T2tWriteNDef - Write access not granted - CC3: %u", p_t2t->tag_hdr[T2T_CC3_RWA_BYTE]);
+        return (NFC_STATUS_REFUSED);
+    }
+
     /* Check if there is enough memory on the tag */
     if (msg_len > p_t2t->max_ndef_msg_len)
     {
@@ -3163,7 +3169,10 @@
             p_t2t->substate = RW_T2T_SUBSTATE_NONE;
     }
     else
-        status = rw_t2t_soft_lock_tag ();
+    {
+        if ((status = rw_t2t_soft_lock_tag ()) != NFC_STATUS_OK)
+            p_t2t->b_read_hdr = FALSE;
+    }
 
     return status;
 }
diff --git a/src/nfc/tags/rw_t3t.c b/src/nfc/tags/rw_t3t.c
index 89e960d..b921323 100644
--- a/src/nfc/tags/rw_t3t.c
+++ b/src/nfc/tags/rw_t3t.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the implementation for Type 3 tag in Reader/Writer
@@ -63,6 +64,8 @@
     RW_T3T_CMD_SEND_RAW_FRAME,
     RW_T3T_CMD_GET_SYSTEM_CODES,
     RW_T3T_CMD_FORMAT,
+    RW_T3T_CMD_SET_READ_ONLY_SOFT,
+    RW_T3T_CMD_SET_READ_ONLY_HARD,
 
     RW_T3T_CMD_MAX
 };
@@ -77,7 +80,8 @@
     RW_T3T_UPDATE_CPLT_EVT,         /* RW_T3T_CMD_UPDATE */
     RW_T3T_RAW_FRAME_EVT,           /* RW_T3T_CMD_SEND_RAW_FRAME */
     RW_T3T_GET_SYSTEM_CODES_EVT,    /* RW_T3T_CMD_GET_SYSTEM_CODES */
-    RW_T3T_FORMAT_CPLT_EVT          /* RW_T3T_CMD_FORMAT */
+    RW_T3T_FORMAT_CPLT_EVT,         /* RW_T3T_CMD_FORMAT */
+    RW_T3T_SET_READ_ONLY_CPLT_EVT   /* RW_T3T_CMD_SET_READ_ONLY */
 };
 
 /* States */
@@ -100,7 +104,13 @@
     RW_T3T_FMT_SST_POLL_FELICA_LITE,        /* Waiting for POLL Felica-Lite response (for formatting) */
     RW_T3T_FMT_SST_CHECK_MC_BLK,            /* Waiting for Felica-Lite MC (MemoryControl) block-read to complete */
     RW_T3T_FMT_SST_UPDATE_MC_BLK,           /* Waiting for Felica-Lite MC (MemoryControl) block-write to complete */
-    RW_T3T_FMT_SST_UPDATE_NDEF_ATTRIB       /* Waiting for NDEF attribute block-write to complete */
+    RW_T3T_FMT_SST_UPDATE_NDEF_ATTRIB,      /* Waiting for NDEF attribute block-write to complete */
+
+    /* Sub states for setting Felica-Lite read only */
+    RW_T3T_SRO_SST_POLL_FELICA_LITE,        /* Waiting for POLL Felica-Lite response (for setting read only) */
+    RW_T3T_SRO_SST_UPDATE_NDEF_ATTRIB,      /* Waiting for NDEF attribute block-write to complete */
+    RW_T3T_SRO_SST_CHECK_MC_BLK,            /* Waiting for Felica-Lite MC (MemoryControl) block-read to complete */
+    RW_T3T_SRO_SST_UPDATE_MC_BLK            /* Waiting for Felica-Lite MC (MemoryControl) block-write to complete */
 };
 
 #if (BT_TRACE_VERBOSE == TRUE)
@@ -117,12 +127,13 @@
 static void rw_t3t_handle_get_sc_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf);
 static void rw_t3t_handle_ndef_detect_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf);
 static void rw_t3t_handle_fmt_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf);
+static void rw_t3t_handle_sro_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf);
 
 
 /* Default NDEF attribute information block (used when formatting Felica-Lite tags) */
 #define RW_T3T_DEFAULT_FELICALITE_NBR       4   /* NBr (max block reads per cmd)*/
 #define RW_T3T_DEFAULT_FELICALITE_NBW       1   /* NBw (max block write per cmd)*/
-#define RW_T3T_DEFAULT_FELICALITE_NMAXB     13  /* Nmaxb (max size in blocks)   */
+#define RW_T3T_DEFAULT_FELICALITE_NMAXB     (T3T_FELICALITE_NMAXB)
 #define RW_T3T_DEFAULT_FELICALITE_ATTRIB_INFO_CHECKSUM  ((T3T_MSG_NDEF_VERSION +                    \
                                                             RW_T3T_DEFAULT_FELICALITE_NBR +         \
                                                             RW_T3T_DEFAULT_FELICALITE_NBW +         \
@@ -288,6 +299,12 @@
         p_cb->flags &= ~RW_T3T_FL_W4_FMT_FELICA_LITE_POLL_RSP;
         rw_t3t_handle_fmt_poll_rsp (p_cb, nci_status, num_responses, sensf_res_buf_size, p_sensf_res_buf);
     }
+    else if (p_cb->flags & RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP)
+    {
+        /* Handle POLL ntf in response to get system codes */
+        p_cb->flags &= ~RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP;
+        rw_t3t_handle_sro_poll_rsp (p_cb, nci_status, num_responses, sensf_res_buf_size, p_sensf_res_buf);
+    }
     else if (p_cb->flags & RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP)
     {
         /* Handle POLL ntf in response to ndef detection */
@@ -358,6 +375,19 @@
 
     p_cb->rw_state = RW_T3T_STATE_IDLE;
 
+    /* Update ndef info */
+    p_cb->ndef_attrib.status = status;
+    if (status == NFC_STATUS_OK)
+    {
+        p_cb->ndef_attrib.version = T3T_MSG_NDEF_VERSION;
+        p_cb->ndef_attrib.nbr = RW_T3T_DEFAULT_FELICALITE_NBR;
+        p_cb->ndef_attrib.nbw = RW_T3T_DEFAULT_FELICALITE_NBW;
+        p_cb->ndef_attrib.nmaxb = RW_T3T_DEFAULT_FELICALITE_NMAXB;
+        p_cb->ndef_attrib.writef = T3T_MSG_NDEF_WRITEF_OFF;
+        p_cb->ndef_attrib.rwflag = T3T_MSG_NDEF_RWFLAG_RW;
+        p_cb->ndef_attrib.ln = 0;
+    }
+
     /* Notify upper layer of format complete */
     evt_data.status = status;
     (*(rw_cb.p_cback)) (RW_T3T_FORMAT_CPLT_EVT, &evt_data);
@@ -365,6 +395,27 @@
 
 /*******************************************************************************
 **
+** Function         rw_t3t_set_readonly_cplt
+**
+** Description      Notify upper layer of set read only complete
+**
+** Returns          none
+**
+*******************************************************************************/
+void rw_t3t_set_readonly_cplt (tNFC_STATUS status)
+{
+    tRW_T3T_CB *p_cb = &rw_cb.tcb.t3t;
+    tRW_DATA evt_data;
+
+    p_cb->rw_state = RW_T3T_STATE_IDLE;
+
+    /* Notify upper layer of format complete */
+    evt_data.status = status;
+    (*(rw_cb.p_cback)) (RW_T3T_SET_READ_ONLY_CPLT_EVT, &evt_data);
+}
+
+/*******************************************************************************
+**
 ** Function         rw_t3t_process_timeout
 **
 ** Description      Process timeout
@@ -415,6 +466,13 @@
             RW_TRACE_ERROR0 ("Felica-Lite tag not detected");
             rw_t3t_format_cplt (NFC_STATUS_FAILED);
         }
+        else if (p_cb->flags & RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP)
+        {
+            /* POLL timeout for configuring Felica Lite read only */
+            p_cb->flags &= ~RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP;
+            RW_TRACE_ERROR0 ("Felica-Lite tag not detected");
+            rw_t3t_set_readonly_cplt (NFC_STATUS_FAILED);
+        }
         else if (p_cb->flags & RW_T3T_FL_W4_NDEF_DETECT_POLL_RSP)
         {
             /* POLL timeout for ndef detection */
@@ -1051,6 +1109,56 @@
 
 /*****************************************************************************
 **
+** Function         rw_t3t_check_mc_block
+**
+** Description      Send command to check Memory Configuration Block
+**
+** Returns          tNFC_STATUS
+**
+*****************************************************************************/
+tNFC_STATUS rw_t3t_check_mc_block (tRW_T3T_CB *p_cb)
+{
+    BT_HDR *p_cmd_buf;
+    UINT8 *p, *p_cmd_start;
+
+    /* Read Memory Configuration block */
+    if ((p_cmd_buf = rw_t3t_get_cmd_buf ()) != NULL)
+    {
+        /* Construct T3T message */
+        p = p_cmd_start = (UINT8 *) (p_cmd_buf+1) + p_cmd_buf->offset;
+
+        /* Add CHECK opcode to message  */
+        UINT8_TO_STREAM (p, T3T_MSG_OPC_CHECK_CMD);
+
+        /* Add IDm to message */
+        ARRAY_TO_STREAM (p, p_cb->peer_nfcid2, NCI_NFCID2_LEN);
+
+        /* Add Service code list */
+        UINT8_TO_STREAM (p, 1);                       /* Number of services (only 1 service: NDEF) */
+        UINT16_TO_STREAM (p, T3T_MSG_NDEF_SC_RO);     /* Service code (little-endian format) */
+
+        /* Number of blocks */
+        UINT8_TO_STREAM (p, 1);                       /* Number of blocks (only 1 block: Memory Configuration Information ) */
+
+        /* Block List element: the Memory Configuration block (block 0x88) */
+        UINT8_TO_STREAM (p, T3T_MSG_MASK_TWO_BYTE_BLOCK_DESC_FORMAT);
+        UINT8_TO_STREAM (p, T3T_MSG_FELICALITE_BLOCK_ID_MC);
+
+        /* Calculate length of message */
+        p_cmd_buf->len = (UINT16) (p - p_cmd_start);
+
+        /* Send the T3T message */
+        return rw_t3t_send_cmd (p_cb, p_cb->cur_cmd, p_cmd_buf, RW_T3T_DEFAULT_CMD_TIMEOUT_TICKS);
+    }
+    else
+    {
+        RW_TRACE_ERROR0 ("Unable to allocate buffer to read MC block");
+        return (NFC_STATUS_NO_BUFFERS);
+    }
+}
+
+/*****************************************************************************
+**
 ** Function         rw_t3t_send_raw_frame
 **
 ** Description      Send raw frame
@@ -1665,7 +1773,8 @@
 **
 ** Function         rw_t3t_update_block
 **
-** Description      Send UPDATE command for single block (for formatting)
+** Description      Send UPDATE command for single block
+**                  (for formatting/configuring read only)
 **
 ** Returns          tNFC_STATUS
 **
@@ -1704,7 +1813,7 @@
         p_cmd_buf->len = (UINT16) (p_dst - p_cmd_start);
 
         /* Send the T3T message */
-        status = rw_t3t_send_cmd (p_cb, RW_T3T_CMD_FORMAT, p_cmd_buf, RW_T3T_DEFAULT_CMD_TIMEOUT_TICKS);
+        status = rw_t3t_send_cmd (p_cb, p_cb->cur_cmd, p_cmd_buf, RW_T3T_DEFAULT_CMD_TIMEOUT_TICKS);
     }
     else
     {
@@ -1726,8 +1835,6 @@
 *****************************************************************************/
 static void rw_t3t_handle_fmt_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf)
 {
-    BT_HDR *p_cmd_buf;
-    UINT8 *p, *p_cmd_start;
     tRW_DATA evt_data;
 
     evt_data.status = NFC_STATUS_OK;
@@ -1739,42 +1846,10 @@
         /* Get MemoryControl block */
         RW_TRACE_DEBUG0 ("Felica-Lite tag detected...getting Memory Control block.");
 
-        /* Read NDEF attribute block */
-        if ((p_cmd_buf = rw_t3t_get_cmd_buf ()) != NULL)
-        {
-            p_cb->rw_substate = RW_T3T_FMT_SST_CHECK_MC_BLK;
+        p_cb->rw_substate = RW_T3T_FMT_SST_CHECK_MC_BLK;
 
-            /* Construct T3T message */
-            p = p_cmd_start = (UINT8 *) (p_cmd_buf+1) + p_cmd_buf->offset;
-
-            /* Add CHECK opcode to message  */
-            UINT8_TO_STREAM (p, T3T_MSG_OPC_CHECK_CMD);
-
-            /* Add IDm to message */
-            ARRAY_TO_STREAM (p, p_cb->peer_nfcid2, NCI_NFCID2_LEN);
-
-            /* Add Service code list */
-            UINT8_TO_STREAM (p, 1);                       /* Number of services (only 1 service: NDEF) */
-            UINT16_TO_STREAM (p, T3T_MSG_NDEF_SC_RO);     /* Service code (little-endian format) */
-
-            /* Number of blocks */
-            UINT8_TO_STREAM (p, 1);                       /* Number of blocks (only 1 block: NDEF Attribute Information ) */
-
-            /* Block List element: the NDEF attribute information block (block 0) */
-            UINT8_TO_STREAM (p, T3T_MSG_MASK_TWO_BYTE_BLOCK_DESC_FORMAT);
-            UINT8_TO_STREAM (p, T3T_MSG_FELICALITE_BLOCK_ID_MC);
-
-            /* Calculate length of message */
-            p_cmd_buf->len = (UINT16) (p - p_cmd_start);
-
-            /* Send the T3T message */
-            evt_data.status = rw_t3t_send_cmd (p_cb, RW_T3T_CMD_FORMAT, p_cmd_buf, RW_T3T_DEFAULT_CMD_TIMEOUT_TICKS);
-        }
-        else
-        {
-            RW_TRACE_ERROR0 ("Unable to allocate buffer to read MC block");
-            evt_data.status = NFC_STATUS_NO_BUFFERS;
-        }
+        /* Send command to check Memory Configuration block */
+        evt_data.status = rw_t3t_check_mc_block (p_cb);
     }
     else
     {
@@ -1833,6 +1908,9 @@
                 /* Set SYS_OP field to 0x01 (enable NDEF) */
                 p_mc[T3T_MSG_FELICALITE_MC_OFFSET_SYS_OP] = 0x01;
 
+                /* Set RF_PRM field to 0x07 (procedure of issuance) */
+                p_mc[T3T_MSG_FELICALITE_MC_OFFSET_RF_PRM] = 0x07;
+
                 /* Construct and send UPDATE message to write MC block */
                 p_cb->rw_substate = RW_T3T_FMT_SST_UPDATE_MC_BLK;
                 evt_data.status = rw_t3t_update_block (p_cb, T3T_MSG_FELICALITE_BLOCK_ID_MC, p_mc);
@@ -1892,6 +1970,195 @@
     GKI_freebuf (p_msg_rsp);
 }
 
+/*****************************************************************************
+**
+** Function         rw_t3t_handle_sro_poll_rsp
+**
+** Description      Handle POLL response for configuring felica-lite read only
+**
+** Returns          Nothing
+**
+*****************************************************************************/
+static void rw_t3t_handle_sro_poll_rsp (tRW_T3T_CB *p_cb, UINT8 nci_status, UINT8 num_responses, UINT8 sensf_res_buf_size, UINT8 *p_sensf_res_buf)
+{
+    tRW_DATA evt_data;
+    UINT8 rw_t3t_ndef_attrib_info[T3T_MSG_BLOCKSIZE];
+    UINT8 *p;
+    UINT8 tempU8;
+    UINT16 checksum, i;
+    UINT32 tempU32 = 0;
+
+    evt_data.status = NFC_STATUS_OK;
+
+    /* Validate response for poll response */
+    if ((nci_status == NCI_STATUS_OK) && (num_responses > 0))
+    {
+        /* Tag responded for Felica-Lite poll */
+        if (p_cb->ndef_attrib.rwflag != T3T_MSG_NDEF_RWFLAG_RO)
+        {
+            /* First update attribute information block */
+            RW_TRACE_DEBUG0 ("Felica-Lite tag detected...update NDef attribution block.");
+
+            p_cb->rw_substate = RW_T3T_SRO_SST_UPDATE_NDEF_ATTRIB;
+
+            p = rw_t3t_ndef_attrib_info;
+
+            UINT8_TO_STREAM (p, p_cb->ndef_attrib.version);
+
+            /* Update NDEF info */
+            UINT8_TO_STREAM (p, p_cb->ndef_attrib.nbr);              /* NBr: number of blocks that can be read using one Check command */
+            UINT8_TO_STREAM (p, p_cb->ndef_attrib.nbw);              /* Nbw: number of blocks that can be written using one Update command */
+            UINT16_TO_BE_STREAM (p, p_cb->ndef_attrib.nmaxb);        /* Nmaxb: maximum number of blocks available for NDEF data */
+            UINT32_TO_BE_STREAM (p, tempU32);
+            UINT8_TO_STREAM (p, p_cb->ndef_attrib.writef);           /* WriteFlag: 00h if writing data finished; 0Fh if writing data in progress */
+            UINT8_TO_STREAM (p, 0x00);                               /* RWFlag: 00h NDEF is read-only */
+
+            tempU8 = (UINT8) (p_cb->ndef_attrib.ln >> 16);
+            /* Get length (3-byte, big-endian) */
+            UINT8_TO_STREAM (p, tempU8);                               /* Ln: high-byte */
+            UINT16_TO_BE_STREAM (p, p_cb->ndef_attrib.ln);           /* Ln: lo-word */
+
+            /* Calculate and append Checksum */
+            checksum = 0;
+            for (i = 0; i < T3T_MSG_NDEF_ATTR_INFO_SIZE; i++)
+            {
+                checksum+=rw_t3t_ndef_attrib_info[i];
+            }
+            UINT16_TO_BE_STREAM (p, checksum);
+
+            evt_data.status = rw_t3t_update_block (p_cb, 0, (UINT8 *) rw_t3t_ndef_attrib_info);
+        }
+        else if (p_cb->cur_cmd == RW_T3T_CMD_SET_READ_ONLY_HARD)
+        {
+            /* NDEF is already read only, Read and update MemoryControl block */
+            RW_TRACE_DEBUG0 ("Felica-Lite tag detected...getting Memory Control block.");
+            p_cb->rw_substate = RW_T3T_SRO_SST_CHECK_MC_BLK;
+
+            /* Send command to check Memory Configuration block */
+            evt_data.status = rw_t3t_check_mc_block (p_cb);
+        }
+    }
+    else
+    {
+        RW_TRACE_ERROR0 ("Felica-Lite tag not detected");
+        evt_data.status = NFC_STATUS_FAILED;
+    }
+
+    /* If error, notify upper layer */
+    if (evt_data.status != NFC_STATUS_OK)
+    {
+        rw_t3t_set_readonly_cplt (evt_data.status);
+    }
+}
+
+/*****************************************************************************
+**
+** Function         rw_t3t_act_handle_sro_rsp
+**
+** Description      Handle response for setting read only codes
+**
+** Returns          Nothing
+**
+*****************************************************************************/
+void rw_t3t_act_handle_sro_rsp (tRW_T3T_CB *p_cb, BT_HDR *p_msg_rsp)
+{
+    UINT8 *p_t3t_rsp = (UINT8 *) (p_msg_rsp+1) + p_msg_rsp->offset;
+    UINT8 *p_mc;
+    tRW_DATA evt_data;
+
+    evt_data.status = NFC_STATUS_OK;
+
+    if (p_cb->rw_substate == RW_T3T_SRO_SST_UPDATE_NDEF_ATTRIB)
+    {
+        /* Validate response opcode */
+        if (  (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_UPDATE_RSP)
+            ||(p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1] != T3T_MSG_RSP_STATUS_OK)  )
+
+        {
+            RW_TRACE_ERROR2 ("Response error: rsp_code=%02X, status=%02X", p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE], p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
+            evt_data.status = NFC_STATUS_FAILED;
+        }
+        else
+        {
+            p_cb->ndef_attrib.rwflag = T3T_MSG_NDEF_RWFLAG_RO;
+            if (p_cb->cur_cmd == RW_T3T_CMD_SET_READ_ONLY_HARD)
+            {
+                p_cb->rw_substate = RW_T3T_SRO_SST_CHECK_MC_BLK;
+
+                /* Send command to check Memory Configuration block */
+                evt_data.status = rw_t3t_check_mc_block (p_cb);
+            }
+            else
+            {
+                rw_t3t_set_readonly_cplt (evt_data.status);
+            }
+        }
+    }
+    else if (p_cb->rw_substate == RW_T3T_SRO_SST_CHECK_MC_BLK)
+    {
+        /* Check tags's response for reading MemoryControl block, Validate response opcode */
+        if (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_CHECK_RSP)
+        {
+            RW_TRACE_ERROR2 ("Response error: expecting rsp_code %02X, but got %02X", T3T_MSG_OPC_CHECK_RSP, p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE]);
+            evt_data.status = NFC_STATUS_FAILED;
+        }
+        /* Validate status code and NFCID2 response from tag */
+        else if (  (p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1] != T3T_MSG_RSP_STATUS_OK)                           /* verify response status code */
+                 ||(memcmp (p_cb->peer_nfcid2, &p_t3t_rsp[T3T_MSG_RSP_OFFSET_IDM], NCI_NFCID2_LEN) != 0)  )   /* verify response IDm */
+        {
+            evt_data.status = NFC_STATUS_FAILED;
+        }
+        else
+        {
+            /* Check if memory configuration (MC) block to see if SYS_OP=1 (NDEF enabled) */
+            p_mc = &p_t3t_rsp[T3T_MSG_RSP_OFFSET_CHECK_DATA];  /* Point to MC data of CHECK response */
+
+            if (p_mc[T3T_MSG_FELICALITE_MC_OFFSET_SYS_OP] != 0x01)
+            {
+                /* Tag is not currently enabled for NDEF */
+                evt_data.status = NFC_STATUS_FAILED;
+            }
+            else
+            {
+                /* Set MC_SP field with MC[0] = 0x00 & MC[1] = 0xC0 (Hardlock) to change access permission from RW to RO */
+                p_mc[T3T_MSG_FELICALITE_MC_OFFSET_MC_SP]     = 0x00;
+                /* Not changing the access permission of Subtraction Register and MC[0:1] */
+                p_mc[T3T_MSG_FELICALITE_MC_OFFSET_MC_SP + 1] = 0xC0;
+
+               /* Set RF_PRM field to 0x07 (procedure of issuance) */
+                p_mc[T3T_MSG_FELICALITE_MC_OFFSET_RF_PRM] = 0x07;
+
+                /* Construct and send UPDATE message to write MC block */
+                p_cb->rw_substate = RW_T3T_SRO_SST_UPDATE_MC_BLK;
+                evt_data.status = rw_t3t_update_block (p_cb, T3T_MSG_FELICALITE_BLOCK_ID_MC, p_mc);
+            }
+        }
+    }
+    else if (p_cb->rw_substate == RW_T3T_SRO_SST_UPDATE_MC_BLK)
+    {
+        /* Validate response opcode */
+        if (  (p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE] != T3T_MSG_OPC_UPDATE_RSP)
+            ||(p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1] != T3T_MSG_RSP_STATUS_OK)  )
+
+        {
+            RW_TRACE_ERROR2 ("Response error: rsp_code=%02X, status=%02X", p_t3t_rsp[T3T_MSG_RSP_OFFSET_RSPCODE], p_t3t_rsp[T3T_MSG_RSP_OFFSET_STATUS1]);
+            evt_data.status = NFC_STATUS_FAILED;
+        }
+        else
+        {
+            rw_t3t_set_readonly_cplt (evt_data.status);
+        }
+    }
+
+    /* If error, notify upper layer */
+    if (evt_data.status != NFC_STATUS_OK)
+    {
+        rw_t3t_set_readonly_cplt (evt_data.status);
+    }
+
+    GKI_freebuf (p_msg_rsp);
+}
+
 /*******************************************************************************
 **
 ** Function         rw_t3t_data_cback
@@ -1989,6 +2256,11 @@
                 rw_t3t_act_handle_fmt_rsp (p_cb, p_msg);
                 break;
 
+            case RW_T3T_CMD_SET_READ_ONLY_SOFT:
+            case RW_T3T_CMD_SET_READ_ONLY_HARD:
+                rw_t3t_act_handle_sro_rsp (p_cb, p_msg);
+                break;
+
             default:
                 GKI_freebuf (p_msg);
                 break;
@@ -2711,3 +2983,66 @@
 
     return (retval);
 }
+
+/*****************************************************************************
+**
+** Function         RW_T3tSetReadOnly
+**
+** Description      This function performs NDEF read-only procedure
+**                  Note: Only Felica-Lite tags are supported by this API.
+**                        RW_T3tDetectNDef() must be called before using this
+**
+**                  The RW_T3T_SET_READ_ONLY_CPLT_EVT event will be returned.
+**
+** Returns          NFC_STATUS_OK if success
+**                  NFC_STATUS_FAILED if T3T is busy or other error
+**
+*****************************************************************************/
+tNFC_STATUS RW_T3tSetReadOnly (BOOLEAN b_hard_lock)
+{
+    tNFC_STATUS retval = NFC_STATUS_OK;
+    tRW_T3T_CB  *p_cb  = &rw_cb.tcb.t3t;
+    tRW_DATA    evt_data;
+
+    RW_TRACE_API0 ("RW_T4tSetTagReadOnly ()");
+
+    /* Check if we are in valid state to handle this API */
+    if (p_cb->rw_state != RW_T3T_STATE_IDLE)
+    {
+        RW_TRACE_ERROR1 ("Error: invalid state to handle API (0x%x)", p_cb->rw_state);
+        return (NFC_STATUS_FAILED);
+    }
+
+    if (p_cb->ndef_attrib.status != NFC_STATUS_OK)       /* NDEF detection not performed yet? */
+    {
+        RW_TRACE_ERROR0 ("Error: NDEF detection not performed yet");
+        return (NFC_STATUS_NOT_INITIALIZED);
+    }
+
+    if ((!b_hard_lock) && (p_cb->ndef_attrib.rwflag == T3T_MSG_NDEF_RWFLAG_RO))/* Tag's NDEF memory is read-only already */
+    {
+        evt_data.status = NFC_STATUS_OK;
+        (*(rw_cb.p_cback)) (RW_T4T_SET_TO_RO_EVT, &evt_data);
+        return (retval);
+    }
+    else
+    {
+        /* Poll tag, to see if Felica-Lite system is supported */
+        if ((retval = (tNFC_STATUS) nci_snd_t3t_polling (T3T_SYSTEM_CODE_FELICA_LITE, T3T_POLL_RC_SC, 0)) == NCI_STATUS_OK)
+        {
+            if (b_hard_lock)
+                p_cb->cur_cmd     = RW_T3T_CMD_SET_READ_ONLY_HARD;
+            else
+                p_cb->cur_cmd     = RW_T3T_CMD_SET_READ_ONLY_SOFT;
+            p_cb->cur_tout    = RW_T3T_DEFAULT_CMD_TIMEOUT_TICKS;
+            p_cb->cur_poll_rc = T3T_POLL_RC_SC;
+            p_cb->rw_state    = RW_T3T_STATE_COMMAND_PENDING;
+            p_cb->rw_substate = RW_T3T_SRO_SST_POLL_FELICA_LITE;
+            p_cb->flags |= RW_T3T_FL_W4_SRO_FELICA_LITE_POLL_RSP;
+
+            /* start timer for waiting for responses */
+            rw_t3t_start_poll_timer (p_cb);
+        }
+    }
+    return (retval);
+}
diff --git a/src/nfc/tags/rw_t4t.c b/src/nfc/tags/rw_t4t.c
index 7b61339..831be59 100644
--- a/src/nfc/tags/rw_t4t.c
+++ b/src/nfc/tags/rw_t4t.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the implementation for Type 4 tag in Reader/Writer
@@ -43,6 +44,7 @@
 #define RW_T4T_STATE_READ_NDEF                  0x03    /* performing read NDEF procedure       */
 #define RW_T4T_STATE_UPDATE_NDEF                0x04    /* performing update NDEF procedure     */
 #define RW_T4T_STATE_PRESENCE_CHECK             0x05    /* checking presence of tag             */
+#define RW_T4T_STATE_SET_READ_ONLY              0x06    /* convert tag to read only             */
 
 /* sub state */
 #define RW_T4T_SUBSTATE_WAIT_SELECT_APP         0x00    /* waiting for response of selecting AID    */
@@ -53,6 +55,7 @@
 #define RW_T4T_SUBSTATE_WAIT_READ_RESP          0x05    /* waiting for response of reading file     */
 #define RW_T4T_SUBSTATE_WAIT_UPDATE_RESP        0x06    /* waiting for response of updating file    */
 #define RW_T4T_SUBSTATE_WAIT_UPDATE_NLEN        0x07    /* waiting for response of updating NLEN    */
+#define RW_T4T_SUBSTATE_WAIT_UPDATE_CC          0x08    /* waiting for response of updating CC      */
 
 #if (BT_TRACE_VERBOSE == TRUE)
 static char *rw_t4t_get_state_name (UINT8 state);
@@ -64,12 +67,14 @@
 static BOOLEAN rw_t4t_read_file (UINT16 offset, UINT16 length, BOOLEAN is_continue);
 static BOOLEAN rw_t4t_update_nlen (UINT16 ndef_len);
 static BOOLEAN rw_t4t_update_file (void);
+static BOOLEAN rw_t4t_update_cc_to_readonly (void);
 static BOOLEAN rw_t4t_select_application (UINT8 version);
 static BOOLEAN rw_t4t_validate_cc_file (void);
 static void rw_t4t_handle_error (tNFC_STATUS status, UINT8 sw1, UINT8 sw2);
 static void rw_t4t_sm_detect_ndef (BT_HDR *p_r_apdu);
 static void rw_t4t_sm_read_ndef (BT_HDR *p_r_apdu);
 static void rw_t4t_sm_update_ndef (BT_HDR  *p_r_apdu);
+static void rw_t4t_sm_set_readonly (BT_HDR  *p_r_apdu);
 static void rw_t4t_data_cback (UINT8 conn_id, tNFC_CONN_EVT event, tNFC_CONN *p_data);
 
 /*******************************************************************************
@@ -318,6 +323,53 @@
 
 /*******************************************************************************
 **
+** Function         rw_t4t_update_cc_to_readonly
+**
+** Description      Send UpdateBinary Command for changing Write access
+**
+** Returns          TRUE if success
+**
+*******************************************************************************/
+static BOOLEAN rw_t4t_update_cc_to_readonly (void)
+{
+    BT_HDR          *p_c_apdu;
+    UINT8           *p;
+
+    RW_TRACE_DEBUG0 ("rw_t4t_update_cc_to_readonly (): Remove Write access from CC");
+
+    p_c_apdu = (BT_HDR *) GKI_getpoolbuf (NFC_RW_POOL_ID);
+
+    if (!p_c_apdu)
+    {
+        RW_TRACE_ERROR0 ("rw_t4t_update_cc_to_readonly (): Cannot allocate buffer");
+        return FALSE;
+    }
+
+    p_c_apdu->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE;
+    p = (UINT8 *) (p_c_apdu + 1) + p_c_apdu->offset;
+
+    /* Add Command Header */
+    UINT8_TO_BE_STREAM (p, T4T_CMD_CLASS);
+    UINT8_TO_BE_STREAM (p, T4T_CMD_INS_UPDATE_BINARY);
+    UINT16_TO_BE_STREAM (p, (T4T_FC_TLV_OFFSET_IN_CC + T4T_FC_WRITE_ACCESS_OFFSET_IN_TLV)); /* Offset for Read Write access byte of CC */
+    UINT8_TO_BE_STREAM (p, 1); /* Length of write access field in cc interms of bytes */
+
+    /* Remove Write access */
+    UINT8_TO_BE_STREAM (p, T4T_FC_NO_WRITE_ACCESS);
+
+
+    p_c_apdu->len = T4T_CMD_MAX_HDR_SIZE + 1;
+
+    if (!rw_t4t_send_to_lower (p_c_apdu))
+    {
+        return FALSE;
+    }
+
+    return TRUE;
+}
+
+/*******************************************************************************
+**
 ** Function         rw_t4t_select_application
 **
 ** Description      Select Application
@@ -515,6 +567,10 @@
             rw_data.status = NFC_STATUS_FAILED;
             break;
 
+        case RW_T4T_STATE_SET_READ_ONLY:
+            event = RW_T4T_SET_TO_RO_EVT;
+            break;
+
         default:
             event = RW_T4T_MAX_EVT;
             break;
@@ -978,6 +1034,89 @@
 
 /*******************************************************************************
 **
+** Function         rw_t4t_sm_set_readonly
+**
+** Description      State machine for CC update procedure
+**
+** Returns          none
+**
+*******************************************************************************/
+static void rw_t4t_sm_set_readonly (BT_HDR  *p_r_apdu)
+{
+    tRW_T4T_CB  *p_t4t = &rw_cb.tcb.t4t;
+    UINT8       *p;
+    UINT16      status_words;
+    tRW_DATA    rw_data;
+
+#if (BT_TRACE_VERBOSE == TRUE)
+    RW_TRACE_DEBUG2 ("rw_t4t_sm_set_readonly (): sub_state:%s (%d)",
+                      rw_t4t_get_sub_state_name (p_t4t->sub_state), p_t4t->sub_state);
+#else
+    RW_TRACE_DEBUG1 ("rw_t4t_sm_set_readonly (): sub_state=%d", p_t4t->sub_state);
+#endif
+
+    /* Get status words */
+    p = (UINT8 *) (p_r_apdu + 1) + p_r_apdu->offset;
+    p += (p_r_apdu->len - T4T_RSP_STATUS_WORDS_SIZE);
+    BE_STREAM_TO_UINT16 (status_words, p);
+
+    if (status_words != T4T_RSP_CMD_CMPLTED)
+    {
+        rw_t4t_handle_error (NFC_STATUS_CMD_NOT_CMPLTD, *(p-2), *(p-1));
+        return;
+    }
+
+    switch (p_t4t->sub_state)
+    {
+    case RW_T4T_SUBSTATE_WAIT_SELECT_CC:
+
+        /* CC file has been selected then update write access to read-only in CC file */
+        if (!rw_t4t_update_cc_to_readonly ())
+        {
+            rw_t4t_handle_error (NFC_STATUS_FAILED, 0, 0);
+        }
+        else
+        {
+            p_t4t->sub_state = RW_T4T_SUBSTATE_WAIT_UPDATE_CC;
+        }
+        break;
+
+    case RW_T4T_SUBSTATE_WAIT_UPDATE_CC:
+        /* CC Updated, Select NDEF File to allow NDEF operation */
+        p_t4t->cc_file.ndef_fc.write_access = T4T_FC_NO_WRITE_ACCESS;
+        p_t4t->ndef_status |= RW_T4T_NDEF_STATUS_NDEF_READ_ONLY;
+
+        if (!rw_t4t_select_file (p_t4t->cc_file.ndef_fc.file_id))
+        {
+            rw_t4t_handle_error (NFC_STATUS_FAILED, 0, 0);
+        }
+        else
+        {
+            p_t4t->sub_state = RW_T4T_SUBSTATE_WAIT_SELECT_NDEF_FILE;
+        }
+        break;
+
+    case RW_T4T_SUBSTATE_WAIT_SELECT_NDEF_FILE:
+        p_t4t->state = RW_T4T_STATE_IDLE;
+        /* just finished last step of configuring tag read only (Selecting NDEF file CC) */
+        if (rw_cb.p_cback)
+        {
+            rw_data.status = NFC_STATUS_OK;
+
+            RW_TRACE_DEBUG0 ("rw_t4t_sm_set_readonly (): Sent RW_T4T_SET_TO_RO_EVT");
+            (*(rw_cb.p_cback)) (RW_T4T_SET_TO_RO_EVT, &rw_data);
+        }
+        break;
+
+    default:
+        RW_TRACE_ERROR1 ("rw_t4t_sm_set_readonly (): unknown sub_state = %d", p_t4t->sub_state);
+        rw_t4t_handle_error (NFC_STATUS_FAILED, 0, 0);
+        break;
+    }
+}
+
+/*******************************************************************************
+**
 ** Function         rw_t4t_process_timeout
 **
 ** Description      process timeout event
@@ -1097,6 +1236,10 @@
         (*(rw_cb.p_cback)) (RW_T4T_PRESENCE_CHECK_EVT, &rw_data);
         GKI_freebuf (p_r_apdu);
         break;
+    case RW_T4T_STATE_SET_READ_ONLY:
+        rw_t4t_sm_set_readonly (p_r_apdu);
+        GKI_freebuf (p_r_apdu);
+        break;
     default:
         RW_TRACE_ERROR1 ("rw_t4t_data_cback (): invalid state=%d", p_t4t->state);
         GKI_freebuf (p_r_apdu);
@@ -1346,7 +1489,7 @@
     else if (rw_cb.tcb.t4t.state != RW_T4T_STATE_IDLE)
     {
         evt_data.status = NFC_STATUS_OK;
-        (*rw_cb.p_cback) (RW_T3T_PRESENCE_CHECK_EVT, &evt_data);
+        (*rw_cb.p_cback) (RW_T4T_PRESENCE_CHECK_EVT, &evt_data);
     }
     else
     {
@@ -1363,6 +1506,63 @@
     return (retval);
 }
 
+/*****************************************************************************
+**
+** Function         RW_T4tSetNDefReadOnly
+**
+** Description      This function performs NDEF read-only procedure
+**                  Note: RW_T4tDetectNDef() must be called before using this
+**
+**                  The RW_T4T_SET_TO_RO_EVT event will be returned.
+**
+** Returns          NFC_STATUS_OK if success
+**                  NFC_STATUS_FAILED if T4T is busy or other error
+**
+*****************************************************************************/
+tNFC_STATUS RW_T4tSetNDefReadOnly (void)
+{
+    tNFC_STATUS retval = NFC_STATUS_OK;
+    tRW_DATA    evt_data;
+
+    RW_TRACE_API0 ("RW_T4tSetNDefReadOnly ()");
+
+    if (rw_cb.tcb.t4t.state != RW_T4T_STATE_IDLE)
+    {
+        RW_TRACE_ERROR1 ("RW_T4tSetNDefReadOnly ():Unable to start command at state (0x%X)",
+                          rw_cb.tcb.t4t.state);
+        return NFC_STATUS_FAILED;
+    }
+
+    /* if NDEF has been detected */
+    if (rw_cb.tcb.t4t.ndef_status & RW_T4T_NDEF_STATUS_NDEF_DETECTED)
+    {
+        /* if read-only */
+        if (rw_cb.tcb.t4t.ndef_status & RW_T4T_NDEF_STATUS_NDEF_READ_ONLY)
+        {
+            evt_data.status = NFC_STATUS_OK;
+            (*rw_cb.p_cback) (RW_T4T_SET_TO_RO_EVT, &evt_data);
+            return (retval);
+        }
+
+        /* NDEF Tag application has been selected then select CC file */
+        if (!rw_t4t_select_file (T4T_CC_FILE_ID))
+        {
+            return NFC_STATUS_FAILED;
+        }
+
+        rw_cb.tcb.t4t.state     = RW_T4T_STATE_SET_READ_ONLY;
+        rw_cb.tcb.t4t.sub_state = RW_T4T_SUBSTATE_WAIT_SELECT_CC;
+
+        return NFC_STATUS_OK;
+    }
+    else
+    {
+        RW_TRACE_ERROR0 ("RW_T4tSetNDefReadOnly ():No NDEF detected");
+        return NFC_STATUS_FAILED;
+    }
+    return (retval);
+}
+
 #if (BT_TRACE_VERBOSE == TRUE)
 /*******************************************************************************
 **
diff --git a/src/nfc/tags/tags_int.c b/src/nfc/tags/tags_int.c
index ce7266b..09b0201 100644
--- a/src/nfc/tags/tags_int.c
+++ b/src/nfc/tags/tags_int.c
@@ -1,6 +1,6 @@
 /******************************************************************************
  *
- *  Copyright (C) 2010-2012 Broadcom Corporation
+ *  Copyright (C) 2010-2013 Broadcom Corporation
  *
  *  Licensed under the Apache License, Version 2.0 (the "License");
  *  you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
  *
  ******************************************************************************/
 
+
 /******************************************************************************
  *
  *  This file contains the common data types shared by Reader/Writer mode
diff --git a/src/nfca_version.c b/src/nfca_version.c
new file mode 100644
index 0000000..1c217b0
--- /dev/null
+++ b/src/nfca_version.c
@@ -0,0 +1,20 @@
+/*****************************************************************************/
+/*                                                                           */
+/*  Name:          nfca_version.c                                             */
+/*                                                                           */
+/*  Description:                                                             */
+/*      NFCA Version string declaration.                                      */
+/*                                                                           */
+/*  Copyright (c) 2011, Broadcom Corporation, All Rights Reserved.           */
+/*****************************************************************************/
+#include "bt_types.h"
+
+const UINT8 nfca_version_string[] = "NFCDROID_MI_422_10.0.4";
+
+/*
+// The following string should be manually updated to contain the
+// label of the NFA version being used (see stack-info.txt).
+//
+// NOTE: IF additional branches are used add a "+" at the end of the string
+*/
+const UINT8 nfa_version_string[] =  "NFA_MI_1.03.57+";
diff --git a/src/udrv/include/uipc.h b/src/udrv/include/uipc.h
index 0d6358a..f5f1ec1 100755
--- a/src/udrv/include/uipc.h
+++ b/src/udrv/include/uipc.h
@@ -32,8 +32,8 @@
 #define UIPC_CH_ID_ALL  0   /* used to address all the ch id at once */
 #define UIPC_CH_ID_0    1   /* shared mem interface */
 #define UIPC_CH_ID_1    2   /* TCP socket (GPS) */
-#define UIPC_CH_ID_2    3   /* BSA control socket */
-#define UIPC_CH_ID_3    4   /* BSA HH */
+#define UIPC_CH_ID_2    3   /* BTIF control socket */
+#define UIPC_CH_ID_3    4   /* BTIF HH */
 #define UIPC_CH_ID_4    5   /* Future usage */
 #define UIPC_CH_ID_5    6   /* Future usage */
 #define UIPC_CH_ID_6    7   /* Future usage */
diff --git a/src/udrv/include/upio.h b/src/udrv/include/upio.h
index 41ac97c..08b17a7 100755
--- a/src/udrv/include/upio.h
+++ b/src/udrv/include/upio.h
@@ -24,8 +24,6 @@
 #ifndef UPIO_H
 #define UPIO_H
 
-#include "bt_target.h"
-
 /* Enumeration of UPIO features                                         */
 /* Not all features enumerated here are supported by the hardware.      */
 /* Use UPIO_Feature() to determine support of a particular feature.     */