NFC: Merge branch 'nfc.lnx.2.9' into nfc.lnx.3.1

* nfc.lnx.2.9: (90 commits)
  NFC: Add chiptype info for NQ2xx chipsets
  NFC: Fix SWP set/get configuration for NQ2xx
  NFC: Fix compile error
  NFC: Integrate constants, hal modifications and feature list
  SEAccessKit_AR8.1.0_OpnSrc
  NFC_NCIHALx_AR00C0.8.1.0_O_OpnSrc
  MW version updated to 8.1.0
  [LxDebug]:Added config NXP_NCI_PARSER_LIBRARY to enable/disable parser library
  MW-version-updated-to-8.0.18
  NFC init is not proper after FW update
  [EMPTY_AID] : Replace ISO7816 proto routing to EMPTY AID routing
  NFC_GetConfig and NFC_PowerLink command are sent back to back causing JNI to be never notified thus causing NFC service died issue
  NFC service died while semdaemon and NFC Off/On
  MW version updated to 8.0.17
  MW version updated to 8.0.16
  MW version updated to 8.0.15
  Continous presence check even I93 tag  is removed added fix for handling corrupted RF frames
  eSE restricted mode check failure     storage bin file dependancy is removed
  Remove APDU and connectivity pipe dependency on bin file
  [SEMDAEMON-NFCOFF/ON] GKI leak observed during NFC ON/OFF and SemDaemon. 1. Set NFC service PID function added in NFC_API 2. Setting NFC PID after NFC service
  ...

Change-Id: Iadf2725720d7e61eae25368197b086d6549be915
diff --git a/README.md b/README.md
index 4d2c3f7..5dbc62f 100644
--- a/README.md
+++ b/README.md
@@ -39,3 +39,6 @@
 | Android Version        | NXP Release          | NXP Tag  |
 | :-------------: |:-------------:| :-----:|
 | android-o-preview2                     |  8.0.9_O (PN553/PN557) |  NFC_NCIHALx_AR1800.8.0.9_O_OpnSrc |
+| android-o-preview2                     |  8.0.C_O (PN553/PN557) |  NFC_NCIHALx_AR1800.8.0.C_O_OpnSrc |
+| android-o-preview2                     |  8.0.13_O (PN553/PN557) |  NFC_NCIHALx_AR18C0.8.0.13_O_OpnSrc |
+| android-8.0.0_r4               |  8.1.0_O (PN553) |  NFC_NCIHALx_AR00C0.8.1.0_O_OpnSrc |
diff --git a/halimpl/pn54x/common/phNfcCommon.h b/halimpl/pn54x/common/phNfcCommon.h
index d71b9e6..4ba1bbf 100644
--- a/halimpl/pn54x/common/phNfcCommon.h
+++ b/halimpl/pn54x/common/phNfcCommon.h
@@ -32,59 +32,9 @@
 #include <phDal4Nfc_messageQueueLib.h>
 #include <phNfcCompId.h>
 
-
-#define FW_DLL_ROOT_DIR "/vendor/firmware/"
-#define FW_DLL_EXTENSION ".so"
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-
-/* Actual FW library name*/
-#define FW_LIB_PATH FW_DLL_ROOT_DIR "libpn548ad_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Setttings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn548ad_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn548ad_fw_pku" FW_DLL_EXTENSION
-#elif(NFC_NXP_CHIP_TYPE == PN551)
-/* Actual FW library name*/
-#define FW_LIB_PATH FLASH_CONF_ROOT_DIR "libpn551_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Settings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn551_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn551_fw_pku" FW_DLL_EXTENSION
-#elif(NFC_NXP_CHIP_TYPE == PN553)
-/* Actual FW library name*/
-#define FW_LIB_PATH FLASH_CONF_ROOT_DIR "libpn553tc_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Settings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn553tc_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn553tc_fw_pku" FW_DLL_EXTENSION
-#else
-/* Actual FW library name*/
-#define FW_LIB_PATH FW_DLL_ROOT_DIR "libpn547_fw" FW_DLL_EXTENSION
-/* Restore Corrupted PLL Settings/etc */
-#define PLATFORM_LIB_PATH \
-  FW_DLL_ROOT_DIR "libpn547_fw_platform" FW_DLL_EXTENSION
-/* Upgrade the public Key */
-#define PKU_LIB_PATH FW_DLL_ROOT_DIR "libpn547_fw_pku" FW_DLL_EXTENSION
-#endif
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-#define COMPILATION_MW "PN548C2"
-#elif(NFC_NXP_CHIP_TYPE == PN551)
-#define COMPILATION_MW "PN551"
-#elif(NFC_NXP_CHIP_TYPE == PN553)
-#define COMPILATION_MW "PN553"
-#elif(NFC_NXP_CHIP_TYPE == PN557)
-#define COMPILATION_MW "PN557"
-#else
-#define COMPILATION_MW "PN547C2"
-#endif
 /* HAL Version number (Updated as per release) */
-#define NXP_MW_VERSION_MAJ (0U)
-#define NXP_MW_VERSION_MIN (9U)
+#define NXP_MW_VERSION_MAJ (0x01)
+#define NXP_MW_VERSION_MIN (0x00)
 
 #define GET_EEPROM_DATA (1U)
 #define SET_EEPROM_DATA (2U)
@@ -116,13 +66,49 @@
  * If Clk_Src is set to PLL, make sure to set the Clk_Freq also*
  *****************************************************************
  */
-#define CLK_FREQ_UNDEF 0
-#define CLK_FREQ_13MHZ 1
-#define CLK_FREQ_19_2MHZ 2
-#define CLK_FREQ_24MHZ 3
-#define CLK_FREQ_26MHZ 4
-#define CLK_FREQ_38_4MHZ 5
-#define CLK_FREQ_52MHZ 6
+#define CLK_FREQ_UNDEF         0
+#define CLK_FREQ_13MHZ         1
+#define CLK_FREQ_19_2MHZ       2
+#define CLK_FREQ_24MHZ         3
+#define CLK_FREQ_26MHZ         4
+#define CLK_FREQ_32MHZ         5
+#define CLK_FREQ_38_4MHZ       6
+#define CLK_FREQ_52MHZ         7
+
+#define SET_CONFIG_CMD_PLL_13MHZ        {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x20, 0x08, 0x08,\
+                                        0x52, 0xA2, 0x02, 0x30, 0x01, 0xE1, 0x02}
+
+#define SET_CONFIG_CMD_DPLL_13MHZ       {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x26, 0x08, 0x40,\
+                                        0x42, 0xA3, 0x02, 0x88, 0x01, 0xE2, 0x02}
+
+#define SET_CONFIG_CMD_PLL_19_2MHZ      {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x20, 0x08, 0x88,\
+                                        0x51, 0xE3, 0x02, 0xB8, 0x21, 0xE1, 0x02}
+
+#define SET_CONFIG_CMD_DPLL_19_2MHZ     {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x26, 0x08, 0x88,\
+                                        0x01, 0xE2, 0x02, 0xF0, 0x00, 0xA2, 0x01}
+
+#define SET_CONFIG_CMD_PLL_24MHZ        {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x20, 0x08, 0x28,\
+                                         0xC2, 0xA2, 0x83, 0x88, 0x11, 0xE1, 0x02}
+
+#define SET_CONFIG_CMD_DPLL_24MHZ       {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x26, 0x08, 0x38,\
+                                         0x41, 0xD3, 0x02, 0x88, 0x01, 0xE2, 0x02}
+
+#define SET_CONFIG_CMD_PLL_26MHZ        {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x20, 0x08, 0x08,\
+                                         0x52, 0xA2, 0x82, 0x30, 0x01, 0xE1, 0x02}
+
+#define SET_CONFIG_CMD_DPLL_26MHZ       {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x26, 0x08, 0x20,\
+                                         0x41, 0xA3, 0x01, 0x88, 0x01, 0xE2, 0x02}
+
+#define SET_CONFIG_CMD_PLL_32MHZ        {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x20, 0x08, 0xB8, 0x51, 0xA3, 0x82, 0x88, 0xF1, 0xF0, 0x02}
+
+#define SET_CONFIG_CMD_DPLL_32MHZ       {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x26, 0x08, 0xB0,\
+                                         0x01, 0xA3, 0x82, 0x88, 0x01, 0xE2, 0x02}
+
+#define SET_CONFIG_CMD_PLL_38_4MHZ      {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x20, 0x08, 0x88,\
+                                         0x51, 0xE3, 0x82, 0x88, 0x21, 0xE1, 0x02}
+
+#define SET_CONFIG_CMD_DPLL_38_4MHZ     {0x20, 0x02, 0x0C, 0x01, 0xA0, 0x26, 0x08, 0x88,\
+                                        0x01, 0xE2, 0x82, 0xF0, 0x00, 0xA2, 0x01}
 
 /* Set to one of CLK_FREQ_<value> */
 #define NXP_SYS_CLK_FREQ_SEL CLK_FREQ_19_2MHZ
diff --git a/halimpl/pn54x/common/phNfcStatus.h b/halimpl/pn54x/common/phNfcStatus.h
index d9be5c4..5057b01 100644
--- a/halimpl/pn54x/common/phNfcStatus.h
+++ b/halimpl/pn54x/common/phNfcStatus.h
@@ -89,6 +89,12 @@
 #define NFCSTATUS_BUFFER_TOO_SMALL (0x0003)
 
 /*
+ * The function indicates given module not initialized
+ */
+#define NFC_STATUS_NOT_INITIALIZED (0x0004)
+
+/*
+
  * Device specifier/handle value is invalid for the operation
  */
 #define NFCSTATUS_INVALID_DEVICE (0x0006)
@@ -299,8 +305,6 @@
 /* No registry node matches the specified input data. */
 #define NFCSTATUS_NODE_NOT_FOUND (0x0017)
 
-#if (NFC_NXP_ESE == TRUE)
-
 #define NFCSTATUS_SMX_SPI_STATE (0x00F0)
 
 /* The current module is free ; one might use it */
@@ -312,11 +316,9 @@
 /* The current module is free ; one might use it */
 #define NFCSTATUS_NFCC_DWNLD_STATE (0x00F4)
 
-#else
 /* The current module is busy ; one might retry later */
 #define NFCSTATUS_SMX_BAD_STATE (0x00F0)
 
-#endif
 
 /* The Abort mechanism has failed for unexpected reason: user can try again*/
 #define NFCSTATUS_ABORT_FAILED (0x00F2)
diff --git a/halimpl/pn54x/common/phNfcTypes.h b/halimpl/pn54x/common/phNfcTypes.h
index bd8b255..3a0baf9 100644
--- a/halimpl/pn54x/common/phNfcTypes.h
+++ b/halimpl/pn54x/common/phNfcTypes.h
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <stdbool.h>
+#include "Nxp_Features.h"
 
 #ifndef true
 #define true (0x01) /* Logical True Value */
@@ -304,7 +305,7 @@
                        */
   uint8_t bWordCount;  /* Number of words to be read or written */
 } phNfc_sTransceiveInfo_t;
-#if ((NFC_NXP_ESE == TRUE) && (NXP_EXTNS == TRUE))
+#if (NXP_EXTNS == TRUE)
 typedef enum p61_access_state {
   P61_STATE_INVALID = 0x0000,
   P61_STATE_IDLE = 0x0100,         /* p61 is free to use */
diff --git a/halimpl/pn54x/configs/NXP_ESE_Features.h b/halimpl/pn54x/configs/NXP_ESE_Features.h
deleted file mode 100755
index 5f0ef76..0000000
--- a/halimpl/pn54x/configs/NXP_ESE_Features.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (C) 2012-2016 NXP Semiconductors
- *
- * 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.
- */
-
-/*
- * NXP ESE features macros definitions
- */
-
-#ifndef NXP_ESE_FEATURES_H
-#define NXP_ESE_FEATURES_H
-
-/** Dual/Triple mode priority schemes **/
-#define NXP_ESE_EXCLUSIVE_WIRED_MODE 1
-#define NXP_ESE_WIRED_MODE_RESUME 2
-#define NXP_ESE_WIRED_MODE_TIMEOUT 3
-
-/*Chip ID specific macros as per configurations file*/
-#define CHIP_ID_PN547C2 0x01
-#define CHIP_ID_PN65T 0x02
-#define CHIP_ID_PN548AD 0x03
-#define CHIP_ID_PN66T 0x04
-#define CHIP_ID_PN551 0x05
-#define CHIP_ID_PN67T 0x06
-#define CHIP_ID_PN553 0x07
-#define CHIP_ID_PN80T 0x08
-#define CHIP_ID_PN557 0x09
-#define CHIP_ID_PN81T 0x0A
-
-#if (NFC_NXP_ESE == TRUE)
-// Reset Schemes
-#define NXP_ESE_PN67T_RESET 1
-#define NXP_ESE_APDU_GATE_RESET 2
-
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
-#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY true
-#define NXP_LEGACY_APDU_GATE true
-
-#elif((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
-#define NFC_NXP_TRIPLE_MODE_PROTECTION true
-#define NXP_ESE_FELICA_CLT false
-#define NXP_WIRED_MODE_STANDBY_PROP true
-#define NXP_WIRED_MODE_STANDBY false
-// dual mode prio scheme
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
-// Reset scheme
-#define NXP_ESE_RESET_METHOD false
-#define NXP_ESE_ETSI_READER_ENABLE true
-#define NXP_ESE_SVDD_SYNC true
-#define NXP_LEGACY_APDU_GATE true
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION true
-#define NXP_ESE_JCOP_DWNLD_PROTECTION false
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES false
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE true
-#define NFC_NXP_ESE_ETSI12_PROP_INIT false
-
-#elif(NFC_NXP_CHIP_TYPE == PN553)
-
-#define NFC_NXP_TRIPLE_MODE_PROTECTION false
-#define NXP_ESE_FELICA_CLT true
-#define NXP_ESE_WIRED_MODE_PRIO false
-#define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE false  // UICC exclusive wired mode
-// dual mode prio scheme
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_RESUME
-// reset scheme
-#define NXP_ESE_RESET_METHOD true
-#define NXP_ESE_POWER_MODE true
-#define NXP_ESE_P73_ISO_RST true
-#define NXP_BLOCK_PROPRIETARY_APDU_GATE false
-#define NXP_WIRED_MODE_STANDBY true
-#define NXP_WIRED_MODE_STANDBY_PROP false
-#define NXP_ESE_ETSI_READER_ENABLE true
-#define NXP_ESE_SVDD_SYNC true
-#define NXP_LEGACY_APDU_GATE false
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION false
-#define NXP_ESE_JCOP_DWNLD_PROTECTION true
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES true
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE true
-#define NFC_NXP_ESE_ETSI12_PROP_INIT true
-
-#elif(NFC_NXP_CHIP_TYPE == PN557)
-
-#define NFC_NXP_TRIPLE_MODE_PROTECTION false
-#define NXP_ESE_FELICA_CLT true
-#define NXP_ESE_WIRED_MODE_PRIO false
-#define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE false  // UICC exclusive wired mode
-// dual mode prio scheme
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_RESUME
-// reset scheme
-#define NXP_ESE_RESET_METHOD true
-#define NXP_ESE_POWER_MODE true
-#define NXP_ESE_P73_ISO_RST true
-#define NXP_BLOCK_PROPRIETARY_APDU_GATE false
-#define NXP_WIRED_MODE_STANDBY true
-#define NXP_WIRED_MODE_STANDBY_PROP false
-#define NXP_ESE_ETSI_READER_ENABLE true
-#define NXP_ESE_SVDD_SYNC true
-#define NXP_LEGACY_APDU_GATE false
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION false
-#define NXP_ESE_JCOP_DWNLD_PROTECTION true
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES true
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE true
-#define NFC_NXP_ESE_ETSI12_PROP_INIT true
-
-#endif
-
-#else /*Else of #if(NFC_NXP_ESE == TRUE)*/
-
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
-#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY false
-#define NXP_LEGACY_APDU_GATE false
-#endif
-
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
-#define NFC_NXP_TRIPLE_MODE_PROTECTION false
-#define NXP_WIRED_MODE_STANDBY_PROP false
-#define NXP_ESE_FELICA_CLT false
-// Reset scheme
-#define NXP_ESE_RESET_METHOD false
-#define NXP_ESE_ETSI_READER_ENABLE false
-#define NXP_ESE_SVDD_SYNC false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE false
-#define NXP_LEGACY_APDU_GATE false
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION false
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
-#define NXP_ESE_JCOP_DWNLD_PROTECTION false
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES false
-#define NFC_NXP_ESE_ETSI12_PROP_INIT false
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-#elif(NFC_NXP_CHIP_TYPE == PN553)
-
-#define NFC_NXP_TRIPLE_MODE_PROTECTION false
-#define NXP_ESE_FELICA_CLT false
-#define NXP_ESE_WIRED_MODE_PRIO \
-  false  // eSE wired mode prio over UICC wired mode
-#define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE false  // UICC exclusive wired mode
-// reset scheme
-#define NXP_ESE_RESET_METHOD false
-#define NXP_ESE_POWER_MODE false
-#define NXP_ESE_P73_ISO_RST false
-#define NXP_BLOCK_PROPRIETARY_APDU_GATE false
-#define NXP_WIRED_MODE_STANDBY false
-#define NXP_ESE_ETSI_READER_ENABLE false
-#define NXP_ESE_SVDD_SYNC false
-#define NXP_LEGACY_APDU_GATE false
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE false
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
-#define NXP_ESE_JCOP_DWNLD_PROTECTION false
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES false
-#define NFC_NXP_ESE_ETSI12_PROP_INIT true
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-
-#elif(NFC_NXP_CHIP_TYPE == PN557)
-
-#define NFC_NXP_TRIPLE_MODE_PROTECTION false
-#define NXP_ESE_FELICA_CLT false
-#define NXP_ESE_WIRED_MODE_PRIO \
-  false  // eSE wired mode prio over UICC wired mode
-#define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE false  // UICC exclusive wired mode
-// reset scheme
-#define NXP_ESE_RESET_METHOD false
-#define NXP_ESE_POWER_MODE false
-#define NXP_ESE_P73_ISO_RST false
-#define NXP_BLOCK_PROPRIETARY_APDU_GATE false
-#define NXP_WIRED_MODE_STANDBY false
-#define NXP_ESE_ETSI_READER_ENABLE false
-#define NXP_ESE_SVDD_SYNC false
-#define NXP_LEGACY_APDU_GATE false
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE false
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
-#define NXP_ESE_JCOP_DWNLD_PROTECTION false
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES false
-#define NFC_NXP_ESE_ETSI12_PROP_INIT true
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-
-#endif
-
-#endif /*End of #if(NFC_NXP_ESE == TRUE)*/
-#endif /*End of #ifndef NXP_ESE_FEATURES_H */
diff --git a/halimpl/pn54x/configs/NXP_NFCC_Features.h b/halimpl/pn54x/configs/NXP_NFCC_Features.h
deleted file mode 100755
index 9882823..0000000
--- a/halimpl/pn54x/configs/NXP_NFCC_Features.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2012-2016 NXP Semiconductors
- *
- * 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.
- */
-
-/*
- * NXP NFCC features macros definitions
- */
-
-#ifndef NXP_NFCC_FEATURES_H
-#define NXP_NFCC_FEATURES_H
-/*Flags common to all chip types*/
-#define NXP_NFCC_EMPTY_DATA_PACKET true
-#define GEMALTO_SE_SUPPORT true
-
-#if (NFC_NXP_CHIP_TYPE == PN553)
-
-#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT true
-#define NXP_NFCC_MIFARE_TIANJIN false
-#define NXP_NFCC_MW_RCVRY_BLK_FW_DNLD true
-#define NXP_NFCC_DYNAMIC_DUAL_UICC true
-#define NXP_NFCC_FW_WA true
-#define NXP_NFCC_FORCE_NCI1_0_INIT true
-#define NXP_NFCC_ROUTING_BLOCK_BIT true
-#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH false
-#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH true
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC true
-#define NXP_HW_ANTENNA_LOOP4_SELF_TEST false
-#define NXP_NFCEE_REMOVED_NTF_RECOVERY true
-#define NXP_NFCC_FORCE_FW_DOWNLOAD true
-#define NXP_UICC_CREATE_CONNECTIVITY_PIPE true
-#define NXP_NFC_UICC_ETSI12 false
-#if (NFC_NXP_ESE == TRUE)
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC true
-#define NFA_EE_MAX_EE_SUPPORTED 4
-#else
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#endif
-
-#elif (NFC_NXP_CHIP_TYPE == PN557)
-
-#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT true
-#define NXP_NFCC_MIFARE_TIANJIN false
-#define NXP_NFCC_MW_RCVRY_BLK_FW_DNLD true
-#define NXP_NFCC_DYNAMIC_DUAL_UICC true
-#define NXP_NFCC_FW_WA true
-#define NXP_NFCC_FORCE_NCI1_0_INIT false
-#define NXP_NFCC_ROUTING_BLOCK_BIT true
-#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH false
-#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH true
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC true
-#define NXP_HW_ANTENNA_LOOP4_SELF_TEST false
-#define NXP_NFCEE_REMOVED_NTF_RECOVERY true
-#define NXP_NFCC_FORCE_FW_DOWNLOAD true
-#define NXP_UICC_CREATE_CONNECTIVITY_PIPE true
-#define NXP_NFC_UICC_ETSI12 false
-#if (NFC_NXP_ESE == TRUE)
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC true
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#else
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#endif
-
-#elif(NFC_NXP_CHIP_TYPE == PN551)
-#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT true
-#define NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG true
-#define NXP_NFCC_DYNAMIC_DUAL_UICC false
-#define NXP_NFCC_ROUTING_BLOCK_BIT_PROP true
-#define NXP_NFCC_MIFARE_TIANJIN true
-#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH true
-#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH false
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC false
-#define NXP_HW_ANTENNA_LOOP4_SELF_TEST true
-#define NXP_NFCEE_REMOVED_NTF_RECOVERY true
-#define NXP_NFCC_FORCE_FW_DOWNLOAD false
-#define NXP_UICC_CREATE_CONNECTIVITY_PIPE false
-#if (NFC_NXP_ESE == TRUE)
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#else
-#define NFA_EE_MAX_EE_SUPPORTED 2
-#endif
-#elif(NFC_NXP_CHIP_TYPE == PN548C2)
-#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT true
-#define NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG true
-#define NXP_NFCC_DYNAMIC_DUAL_UICC false
-#define NXP_NFCC_ROUTING_BLOCK_BIT_PROP true
-#define NXP_NFCC_MIFARE_TIANJIN true
-#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH true
-#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH false
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC false
-#define NXP_HW_ANTENNA_LOOP4_SELF_TEST true
-#define NXP_NFCEE_REMOVED_NTF_RECOVERY true
-#define NXP_NFCC_FORCE_FW_DOWNLOAD false
-#define NXP_UICC_CREATE_CONNECTIVITY_PIPE false
-#if (NFC_NXP_ESE == TRUE)
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#else
-#define NFA_EE_MAX_EE_SUPPORTED 2
-#endif
-#elif(NFC_NXP_CHIP_TYPE == PN547C2)
-#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT false
-#define NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG true
-#define NXP_NFCC_MIFARE_TIANJIN true
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC false
-#define NXP_HW_ANTENNA_LOOP4_SELF_TEST true
-#define NXP_NFCEE_REMOVED_NTF_RECOVERY true
-#define NXP_NFCC_FORCE_FW_DOWNLOAD false
-#define NXP_UICC_CREATE_CONNECTIVITY_PIPE false
-#if (NFC_NXP_ESE == TRUE)
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#else
-#define NFA_EE_MAX_EE_SUPPORTED 2
-#endif
-#endif
-#endif /* end of #ifndef NXP_NFCC_FEATURES_H */
diff --git a/halimpl/pn54x/configs/NXP_Platform_Features.h b/halimpl/pn54x/configs/NXP_Platform_Features.h
deleted file mode 100755
index e1fd56d..0000000
--- a/halimpl/pn54x/configs/NXP_Platform_Features.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2012-2016 NXP Semiconductors
- *
- * 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.
- */
-
-/*
- * NXP Platform specific features macros definitions
- */
-
-#ifndef NXP_PLATFORM_FEATURES_H
-#define NXP_PLATFORM_FEATURES_H
-
-#if (NFC_NXP_CHIP_TYPE == PN557)
-#undef NXP_NFCC_RESET_RSP_LEN
-#define NXP_NFCC_RESET_RSP_LEN (0x10U)
-#endif
-
-#if (NFC_NXP_CHIP_TYPE == PN553)
-#undef NXP_NFCC_RESET_RSP_LEN
-#define NXP_NFCC_RESET_RSP_LEN (0x10U)
-#endif
-
-#if (NFC_NXP_CHIP_TYPE == PN551)
-#undef NXP_NFCC_RESET_RSP_LEN
-#define NXP_NFCC_RESET_RSP_LEN (0x11U)
-#endif
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-#undef NXP_NFCC_RESET_RSP_LEN
-#define NXP_NFCC_RESET_RSP_LEN (0x11U)
-#endif
-
-#endif /* end of #ifndef NXP_PLATFORM_FEATURES_H */
diff --git a/halimpl/pn54x/configs/NxpNfcCapability.cpp b/halimpl/pn54x/configs/NxpNfcCapability.cpp
new file mode 100644
index 0000000..5a89486
--- /dev/null
+++ b/halimpl/pn54x/configs/NxpNfcCapability.cpp
@@ -0,0 +1,95 @@
+/******************************************************************************
+ *
+ *  Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ *  Not a Contribution.
+ *
+ *  Copyright (C) 2015 NXP Semiconductors
+ *
+ *  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.
+ *
+ ******************************************************************************/
+#include "NxpNfcCapability.h"
+#include <phNxpLog.h>
+
+capability* capability::instance = NULL;
+tNFC_chipType capability::chipType = pn80T;
+
+capability::capability(){}
+
+capability* capability::getInstance() {
+    if (NULL == instance) {
+        instance = new capability();
+    }
+    return instance;
+}
+
+tNFC_chipType capability::processChipType(uint8_t* msg, uint16_t msg_len) {
+    if((msg != NULL) && (msg_len != 0)) {
+        if((msg[0] == 0x60 && msg[1] == 00) ||
+                ((offsetFwVersion < msg_len) && (msg[offsetFwVersion] == 0x12))) {
+            chipType = pn81T;
+        }
+        else if(offsetHwVersion < msg_len) {
+            ALOGD ("%s HwVersion : 0x%02x", __func__,msg[offsetHwVersion]);
+            switch(msg[offsetHwVersion]){
+
+            case 0x40 : //PN553 A0
+            case 0x41 : //PN553 B0
+                chipType = pn553;
+                break;
+
+            case 0x50 : //PN553 A0 + P73
+            case 0x51 : //PN553 B0 + P73
+                chipType = pn80T;
+                break;
+
+            case 0x98 :
+                chipType = pn551;
+                break;
+
+            case 0xA8 :
+                chipType = pn67T;
+                break;
+
+            case 0x28 :
+            case 0x48 :
+                chipType = pn548C2;
+                break;
+
+            case 0x18 :
+            case 0x58 :
+                chipType = pn66T;
+                break;
+
+            default :
+                chipType = pn80T;
+            }
+        }
+        else {
+            ALOGD ("%s Wrong msg_len. Setting Default ChiptType pn80T",__func__);
+            chipType = pn80T;
+        }
+    }
+    return chipType;
+}
+
+extern "C" tNFC_chipType configChipType(uint8_t* msg, uint16_t msg_len) {
+    return pConfigFL->processChipType(msg,msg_len);
+}
+
+extern "C" tNFC_chipType getChipType() {
+    ALOGD ("%s", __FUNCTION__);
+    return capability::chipType;
+}
+
+
diff --git a/halimpl/pn54x/configs/NxpNfcCapability.h b/halimpl/pn54x/configs/NxpNfcCapability.h
new file mode 100644
index 0000000..538a9c8
--- /dev/null
+++ b/halimpl/pn54x/configs/NxpNfcCapability.h
@@ -0,0 +1,69 @@
+/******************************************************************************
+ *
+ *  Copyright (C) 2015 NXP Semiconductors
+ *
+ *  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.
+ *
+ ******************************************************************************/
+#include "Nxp_Features.h"
+#ifndef __CAP_H__
+#define __CAP_H__
+#define pConfigFL       (capability::getInstance())
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*******************************************************************************
+**
+** Function         getChipType
+**
+** Description      Gets the chipType which is configured during bootup
+**
+** Parameters       none
+**
+** Returns          chipType
+*******************************************************************************/
+tNFC_chipType getChipType ();
+
+/*******************************************************************************
+**
+** Function         configChipType
+**
+** Description      Finds chiptType by processing msg buffer
+**
+** Parameters       msg, len
+**                  msg : CORE_INIT_RESPONSE (NCI 1.0)
+**                           CORE_RST_NTF (NCI 2.0)
+**
+** Returns          chipType
+*******************************************************************************/
+tNFC_chipType configChipType(uint8_t* msg, uint16_t msg_len);
+#ifdef __cplusplus
+};
+
+class capability {
+private:
+    static capability* instance;
+    const uint16_t offsetHwVersion = 24;
+    const uint16_t offsetFwVersion = 25;
+    capability();
+public:
+    static tNFC_chipType chipType;
+    static capability* getInstance();
+    tNFC_chipType processChipType(uint8_t* msg, uint16_t msg_len);
+};
+
+#endif
+
+#endif
+
diff --git a/halimpl/pn54x/dnld/phDnldNfc.c b/halimpl/pn54x/dnld/phDnldNfc.c
index 1b9a51c..09882d2 100644
--- a/halimpl/pn54x/dnld/phDnldNfc.c
+++ b/halimpl/pn54x/dnld/phDnldNfc.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
  * Not a Contribution.
  *
  * Copyright (C) 2015 NXP Semiconductors
@@ -27,15 +27,12 @@
 #include <phNxpLog.h>
 #include <dlfcn.h>
 #include <phNxpConfig.h>
-#include <cutils/properties.h>
 
 static void*
     pFwLibHandle;    /* Global firmware lib handle used in this file only */
 uint16_t wMwVer = 0; /* Middleware version no */
 uint16_t wFwVer = 0; /* Firmware version no */
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 uint8_t gRecFWDwnld; /* flag set to true to indicate dummy FW download */
-#endif
 static pphDnldNfc_DlContext_t gpphDnldContext = NULL; /* Download contex */
 static pphDnldNfc_RspCb_t UserCb; /* Upper layer call back function */
 static void* UserCtxt;            /* Pointer to upper layer context */
@@ -244,8 +241,6 @@
 NFCSTATUS phDnldNfc_CheckIntegrity(uint8_t bChipVer, pphDnldNfc_Buff_t pCRCData,
                                    pphDnldNfc_RspCb_t pNotify, void* pContext) {
   NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
-  int rc;
-  char nq_chipid[PROPERTY_VALUE_MAX] = {0};
 
   if ((NULL == pNotify) || (NULL == pContext)) {
     NXPLOG_FWDNLD_E("Invalid Input Parameters!!");
@@ -255,21 +250,17 @@
       NXPLOG_FWDNLD_E("Dnld Cmd Request in Progress..Cannot Continue!!");
       wStatus = PHNFCSTVAL(CID_NFC_DNLD, NFCSTATUS_BUSY);
     } else {
-          rc = __system_property_get("sys.nfc.nq.chipid", nq_chipid);
-          if (rc <= 0)
-              ALOGE("get sys.nfc.nq.chipid fail, rc = %d\n", rc);
-          else
-              ALOGD("sys.nfc.nq.chipid = %s\n", nq_chipid);
-          if((PHDNLDNFC_HWVER_MRA2_1 == bChipVer) || (PHDNLDNFC_HWVER_MRA2_2 == bChipVer)
-#if(NFC_NXP_CHIP_TYPE == PN551)
-              || (PHDNLDNFC_HWVER_PN551_MRA1_0 == bChipVer)  || (PHDNLDNFC_HWVER_PN553_MRA1_0 == bChipVer)
-#else
-              || (((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX)))
-              && (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bChipVer))
-              || (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & bChipVer)
-              || (PHDNLDNFC_HWVER_PN557_MRA1_0 ==  bChipVer)
-#endif
-              ) {
+      if ((PHDNLDNFC_HWVER_MRA2_1 == bChipVer) ||
+           (PHDNLDNFC_HWVER_MRA2_2 == bChipVer) ||
+           ((nfcFL.chipType == pn551) &&
+                   ((PHDNLDNFC_HWVER_PN551_MRA1_0 == bChipVer) ||
+           (PHDNLDNFC_HWVER_PN553_MRA1_0 == bChipVer))) ||
+            ((nfcFL.chipType == pn548C2) &&
+                    (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bChipVer)) ||
+            (((nfcFL.chipType == pn553) || (nfcFL.chipType == pn557)) &&
+               ((PHDNLDNFC_HWVER_PN553_MRA1_0 == bChipVer) ||
+            (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & bChipVer) ||
+            (PHDNLDNFC_HWVER_PN557_MRA1_0 == bChipVer)))) {
         (gpphDnldContext->FrameInp.Type) = phDnldNfc_ChkIntg;
       } else {
         (gpphDnldContext->FrameInp.Type) = phDnldNfc_FTNone;
@@ -769,13 +760,11 @@
   }
 
 /* load the library and get the image info pointer */
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  if (gRecFWDwnld == true)
+  if ((nfcFL.chipType != pn547C2) && (gRecFWDwnld == true)) {
     wStatus = phDnldNfc_LoadRecoveryFW(pathName, &pImageInfo, &ImageInfoLen);
-  else
-/* else condition */
-#endif
+  } else {
     wStatus = phDnldNfc_LoadFW(pathName, &pImageInfo, &ImageInfoLen);
+  }
 
   NXPLOG_FWDNLD_D("FW Image Length - ImageInfoLen %d", ImageInfoLen);
   NXPLOG_FWDNLD_D("FW Image Info Pointer - pImageInfo %p", pImageInfo);
@@ -843,13 +832,14 @@
   /* if memory is not allocated then allocate memory for donwload context
    * structure */
   phDnldNfc_SetHwDevHandle();
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  if (gRecFWDwnld == true)
-    wStatus =
-        phDnldNfc_LoadRecoveryFW(PLATFORM_LIB_PATH, &pImageInfo, &ImageInfoLen);
-  else
-#endif
-    wStatus = phDnldNfc_LoadFW(PLATFORM_LIB_PATH, &pImageInfo, &ImageInfoLen);
+  if ((nfcFL.chipType != pn547C2) && (gRecFWDwnld == true)) {
+      wStatus =
+              phDnldNfc_LoadRecoveryFW(nfcFL.nfcMwFL._PLATFORM_LIB_PATH,
+                      &pImageInfo, &ImageInfoLen);
+  } else {
+      wStatus = phDnldNfc_LoadFW(nfcFL.nfcMwFL._PLATFORM_LIB_PATH,
+              &pImageInfo, &ImageInfoLen);
+  }
   if ((pImageInfo == NULL) || (ImageInfoLen == 0)) {
     NXPLOG_FWDNLD_E(
         "Image extraction Failed - invalid imginfo or imginfolen!!");
@@ -902,13 +892,14 @@
   phDnldNfc_SetHwDevHandle();
 
 /* load the PKU image library */
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  if (gRecFWDwnld == true)
-    wStatus =
-        phDnldNfc_LoadRecoveryFW(PKU_LIB_PATH, &pImageInfo, &ImageInfoLen);
-  else
-#endif
-    wStatus = phDnldNfc_LoadFW(PKU_LIB_PATH, &pImageInfo, &ImageInfoLen);
+  if ((nfcFL.chipType != pn547C2) && (gRecFWDwnld == true)) {
+      wStatus =
+              phDnldNfc_LoadRecoveryFW(nfcFL.nfcMwFL._PKU_LIB_PATH,
+                      &pImageInfo, &ImageInfoLen);
+  } else {
+      wStatus = phDnldNfc_LoadFW(nfcFL.nfcMwFL._PKU_LIB_PATH,
+              &pImageInfo, &ImageInfoLen);
+  }
   if ((pImageInfo == NULL) || (ImageInfoLen == 0)) {
     NXPLOG_FWDNLD_E(
         "Image extraction Failed - invalid imginfo or imginfolen!!");
@@ -980,17 +971,17 @@
   void* pImageInfo = NULL;
   void* pImageInfoLen = NULL;
   if (pathName == NULL) {
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-    pathName = "/vendor/firmware/libpn548ad_fw.so";
-#elif(NFC_NXP_CHIP_TYPE == PN551)
-    pathName = "/vendor/firmware/libpn551_fw.so";
-#elif(NFC_NXP_CHIP_TYPE == PN553)
-    pathName = "/vendor/firmware/libpn553_fw.so";
-#elif(NFC_NXP_CHIP_TYPE == PN557)
-    pathName = "/vendor/firmware/libpn557_fw.so";
-#else
-    pathName = "/vendor/firmware/libpn547_fw.so";
-#endif
+      if(nfcFL.chipType == pn548C2) {
+          pathName = "/vendor/firmware/libpn548ad_fw.so";
+      } else if(nfcFL.chipType == pn551) {
+          pathName = "/vendor/firmware/libpn551_fw.so";
+      } else if(nfcFL.chipType == pn553) {
+          pathName = "/vendor/firmware/libpn553_fw.so";
+      } else if(nfcFL.chipType == pn557) {
+          pathName = "/vendor/firmware/libpn557_fw.so";
+      } else {
+          pathName = "/vendor/firmware/libpn547_fw.so";
+      }
   }
 
   /* check if the handle is not NULL then free the library */
@@ -1032,7 +1023,6 @@
   return NFCSTATUS_SUCCESS;
 }
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 /*******************************************************************************
 **
 ** Function         phDnldNfc_LoadRecoveryFW
@@ -1055,17 +1045,17 @@
 
   /* check for path name */
   if (pathName == NULL) {
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-    pathName = "/vendor/firmware/libpn548ad_fw.so";
-#elif(NFC_NXP_CHIP_TYPE == PN551)
-    pathName = "/vendor/firmware/libpn551_fw.so";
-#elif(NFC_NXP_CHIP_TYPE == PN553)
-    pathName = "/vendor/firmware/libpn553_fw.so";
-#elif(NFC_NXP_CHIP_TYPE == PN557)
-    pathName = "/vendor/firmware/libpn557_fw.so";
-#else
-    pathName = "/vendor/firmware/libpn547_fw.so";
-#endif
+      if(nfcFL.chipType == pn548C2) {
+          pathName = "/vendor/firmware/libpn548ad_fw.so";
+      } else if(nfcFL.chipType == pn551) {
+          pathName = "/vendor/firmware/libpn551_fw.so";
+      } else if(nfcFL.chipType == pn553) {
+          pathName = "/vendor/firmware/libpn553_fw.so";
+      }else if(nfcFL.chipType == pn557) {
+          pathName = "/vendor/firmware/libpn557_fw.so";
+      } else {
+          pathName = "/vendor/firmware/libpn547_fw.so";
+      }
   }
   /* check if the handle is not NULL then free the library */
   if (pFwLibHandle != NULL) {
@@ -1104,7 +1094,6 @@
 
   return NFCSTATUS_SUCCESS;
 }
-#endif
 /*******************************************************************************
 **
 ** Function         phDnldNfc_UnloadFW
diff --git a/halimpl/pn54x/dnld/phDnldNfc.h b/halimpl/pn54x/dnld/phDnldNfc.h
index a849ae5..59bb756 100644
--- a/halimpl/pn54x/dnld/phDnldNfc.h
+++ b/halimpl/pn54x/dnld/phDnldNfc.h
@@ -134,10 +134,8 @@
 extern void phDnldNfc_CloseFwLibHandle(void);
 extern NFCSTATUS phDnldNfc_LoadFW(const char* pathName, uint8_t** pImgInfo,
                                   uint16_t* pImgInfoLen);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 extern NFCSTATUS phDnldNfc_LoadRecoveryFW(const char* pathName,
                                           uint8_t** pImgInfo,
                                           uint16_t* pImgInfoLen);
-#endif
 extern NFCSTATUS phDnldNfc_UnloadFW(void);
 #endif /* PHDNLDNFC_H */
diff --git a/halimpl/pn54x/dnld/phDnldNfc_Internal.c b/halimpl/pn54x/dnld/phDnldNfc_Internal.c
index 4ae666c..d6d0bad 100644
--- a/halimpl/pn54x/dnld/phDnldNfc_Internal.c
+++ b/halimpl/pn54x/dnld/phDnldNfc_Internal.c
@@ -75,33 +75,6 @@
 #define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x003CU)
 /* 16 bits length of user data area */
 #define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0DC0U)
-#else
-
-#if ((NFC_NXP_CHIP_TYPE == PN548C2))
-/* EEPROM offset and length value for PN548AD */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x02BCU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0C00U)
-#elif(NFC_NXP_CHIP_TYPE == PN551)
-/* EEPROM offset and length value for PN551 */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x02BCU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0C00U)
-#elif(NFC_NXP_CHIP_TYPE == PN553 || NFC_NXP_CHIP_TYPE == PN557)
-/* EEPROM offset and length value for PN553/PN557 */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x02BCU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0BC0U)
-#else
-/* EEPROM offset and length value for PN547C2 */
-/* 16 bits offset indicating user data area start location */
-#define PHDNLDNFC_USERDATA_EEPROM_OFFSET (0x023CU)
-/* 16 bits length of user data area */
-#define PHDNLDNFC_USERDATA_EEPROM_LEN (0x0C80U)
-#endif
 
 #endif
 #define PH_LIBNFC_VEN_RESET_ON_DOWNLOAD_TIMEOUT (1)
@@ -718,13 +691,21 @@
       (pDlContext->tCmdRspFrameInfo.dwSendlength) += PHDNLDNFC_MIN_PLD_LEN;
     } else if (phDnldNfc_ChkIntg == (pDlContext->FrameInp.Type)) {
       (pDlContext->tCmdRspFrameInfo.dwSendlength) += PHDNLDNFC_MIN_PLD_LEN;
-
+#ifdef NXP_PN547C1_DOWNLOAD
       wChkIntgVal = PHDNLDNFC_USERDATA_EEPROM_OFFSET;
+#else
+      wChkIntgVal = nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET;
+#endif
+
       memcpy(&(pDlContext->tCmdRspFrameInfo
                    .aFrameBuff[PHDNLDNFC_FRAME_RDDATA_OFFSET]),
              &wChkIntgVal, sizeof(wChkIntgVal));
 
+#ifdef NXP_PN547C1_DOWNLOAD
       wChkIntgVal = PHDNLDNFC_USERDATA_EEPROM_LEN;
+#else
+      wChkIntgVal = nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_LEN;
+#endif
       memcpy(&(pDlContext->tCmdRspFrameInfo
                    .aFrameBuff[PHDNLDNFC_FRAME_RDDATA_OFFSET +
                                PHDNLDNFC_USERDATA_EEPROM_OFFSIZE]),
diff --git a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
index 19fdaba..100b72b 100644
--- a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
+++ b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.c
@@ -1,4 +1,7 @@
 /*
+ * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
  * Copyright (C) 2015 NXP Semiconductors
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,7 +23,6 @@
 #include <phNxpNciHal_utils.h>
 #include <phNxpLog.h>
 #include <phNxpConfig.h>
-#include <cutils/properties.h>
 
 /* Macro */
 #define PHLIBNFC_IOCTL_DNLD_MAX_ATTEMPTS 3
@@ -36,10 +38,8 @@
 /* External global variable to get FW version */
 extern uint16_t wFwVer;
 extern uint16_t wMwVer;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 extern uint8_t
     gRecFWDwnld; /* flag  set to true to  indicate dummy FW download */
-#endif
 /* RF Configuration structure */
 typedef struct phLibNfc_IoctlSetRfConfig {
   uint8_t bNumOfParams;   /* Number of Rf configurable parameters to be set */
@@ -180,18 +180,25 @@
     NFCSTATUS (*seq_handler[])(void* pContext, NFCSTATUS status, void* pInfo));
 
 /* Array of pointers to start fw download seq */
-static NFCSTATUS (*phNxpNciHal_dwnld_seqhandler[])(void* pContext,
+static NFCSTATUS (*phNxpNciHal_dwnld_seqhandler_stat[])(void* pContext,
                                                    NFCSTATUS status,
                                                    void* pInfo) = {
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
     phNxpNciHal_fw_dnld_normal, phNxpNciHal_fw_dnld_normal,
-#endif
     phNxpNciHal_fw_dnld_get_sessn_state, phNxpNciHal_fw_dnld_get_version,
     phNxpNciHal_fw_dnld_log_read, phNxpNciHal_fw_dnld_write,
     phNxpNciHal_fw_dnld_get_sessn_state, phNxpNciHal_fw_dnld_get_version,
     phNxpNciHal_fw_dnld_log, phNxpNciHal_fw_dnld_chk_integrity, NULL};
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
+/* Array of pointers to start fw download seq */
+static NFCSTATUS (*phNxpNciHal_dwnld_seqhandler_common[])(void* pContext,
+                                                   NFCSTATUS status,
+                                                   void* pInfo) = {
+    phNxpNciHal_fw_dnld_normal, phNxpNciHal_fw_dnld_normal,
+    phNxpNciHal_fw_dnld_get_sessn_state, phNxpNciHal_fw_dnld_get_version,
+    phNxpNciHal_fw_dnld_log_read, phNxpNciHal_fw_dnld_write,
+    phNxpNciHal_fw_dnld_get_sessn_state, phNxpNciHal_fw_dnld_get_version,
+    phNxpNciHal_fw_dnld_log, phNxpNciHal_fw_dnld_chk_integrity, NULL};
+
 /* Array of pointers to start dummy fw download seq */
 static NFCSTATUS (*phNxpNciHal_dummy_rec_dwnld_seqhandler[])(void* pContext,
                                                              NFCSTATUS status,
@@ -200,7 +207,6 @@
     phNxpNciHal_fw_dnld_get_sessn_state, phNxpNciHal_fw_dnld_get_version,
     phNxpNciHal_fw_dnld_log_read,        phNxpNciHal_fw_dnld_write,
     NULL};
-#endif
 /* Download Recovery Sequence */
 static NFCSTATUS (*phNxpNciHal_dwnld_rec_seqhandler[])(void* pContext,
                                                        NFCSTATUS status,
@@ -522,8 +528,6 @@
   uint8_t bExpectedLen = 0;
   uint8_t bNewVer[2];
   uint8_t bCurrVer[2];
-  int rc;
-  char nq_chipid[PROPERTY_VALUE_MAX] = {0};
 
   if ((NFCSTATUS_SUCCESS == wStatus) && (NULL != pInfo)) {
     NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_get_version_cb - Request Successful");
@@ -533,29 +537,21 @@
     if ((0 != pRespBuff->wLen) && (NULL != pRespBuff->pBuff)) {
       bHwVer = (pRespBuff->pBuff[0]);
       bHwVer &= 0x0F; /* 0x0F is the mask to extract chip version */
-
-      rc = __system_property_get("sys.nfc.nq.chipid", nq_chipid);
-      if (rc <= 0)
-          ALOGE("get sys.nfc.nq.chipid fail, rc = %d\n", rc);
-      else
-          ALOGD("sys.nfc.nq.chipid = %s\n", nq_chipid);
       if ((PHDNLDNFC_HWVER_MRA2_1 == bHwVer) ||
-          (PHDNLDNFC_HWVER_MRA2_2 == bHwVer)
-#if(NFC_NXP_CHIP_TYPE == PN551)
-              || (PHDNLDNFC_HWVER_PN551_MRA1_0 == bHwVer)|| (PHDNLDNFC_HWVER_PN553_MRA1_0 == bHwVer)
-#else
-              || (((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX)))
-              && (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bHwVer))
-              || (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & pRespBuff->pBuff[0])
-#endif
-              ) {
+              (PHDNLDNFC_HWVER_MRA2_2 == bHwVer) ||
+               ((nfcFL.chipType == pn551) &&
+                       ((PHDNLDNFC_HWVER_PN551_MRA1_0 == bHwVer) ||
+              (PHDNLDNFC_HWVER_PN553_MRA1_0 == bHwVer))) ||
+              ((nfcFL.chipType == pn548C2) &&
+                    (PHDNLDNFC_HWVER_PN548AD_MRA1_0 == bHwVer)) ||
+              (((nfcFL.chipType == pn553) || (nfcFL.chipType == pn557)) &&
+                     ((PHDNLDNFC_HWVER_PN553_MRA1_0 == bHwVer ||
+              PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & pRespBuff->pBuff[0])))) {
         bExpectedLen = PHLIBNFC_IOCTL_DNLD_GETVERLEN_MRA2_1;
         (gphNxpNciHal_fw_IoctlCtx.bChipVer) = bHwVer;
-        if ((strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) && (strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX)))
-        {
-            if (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & pRespBuff->pBuff[0]) {
-                (gphNxpNciHal_fw_IoctlCtx.bChipVer) = pRespBuff->pBuff[0];
-            }
+        if ((nfcFL.chipType == pn553) &&
+                (PHDNLDNFC_HWVER_PN553_MRA1_0_UPDATED & pRespBuff->pBuff[0])) {
+            (gphNxpNciHal_fw_IoctlCtx.bChipVer) = pRespBuff->pBuff[0];
         }
 
       } else if ((bHwVer >= PHDNLDNFC_HWVER_MRA1_0) &&
@@ -609,13 +605,13 @@
         wStatus = NFCSTATUS_SUCCESS;
 #if (PH_LIBNFC_ENABLE_FORCE_DOWNLOAD == 0)
         NXPLOG_FWDNLD_D("Version Already UpToDate!!\n");
-#if (NXP_NFCC_FORCE_FW_DOWNLOAD == true)
-        if ((gphNxpNciHal_fw_IoctlCtx.bForceDnld) == false) {
-          (gphNxpNciHal_fw_IoctlCtx.bSkipSeq) = true;
+        if ((nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD == true) &&
+                ((gphNxpNciHal_fw_IoctlCtx.bForceDnld) == false)) {
+            (gphNxpNciHal_fw_IoctlCtx.bSkipSeq) = true;
         }
-#else
-        (gphNxpNciHal_fw_IoctlCtx.bSkipSeq) = true;
-#endif
+        else {
+            (gphNxpNciHal_fw_IoctlCtx.bSkipSeq) = true;
+        }
 #else
         (gphNxpNciHal_fw_IoctlCtx.bForceDnld) = true;
 #endif
@@ -1021,11 +1017,9 @@
     NXPLOG_FWDNLD_E("phNxpNciHal_fw_dnld_write cb_data creation failed");
     return NFCSTATUS_FAILED;
   }
-#if (NXP_NFCC_FORCE_FW_DOWNLOAD == true)
-/* if(false == (gphNxpNciHal_fw_IoctlCtx.bForceDnld)) */
-#else
-  if (false == (gphNxpNciHal_fw_IoctlCtx.bForceDnld))
-#endif
+
+  if ((nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD == false) &&
+          (false == (gphNxpNciHal_fw_IoctlCtx.bForceDnld)))
   {
     NXPLOG_FWDNLD_D("phNxpNciHal_fw_dnld_write - Incrementing NumDnldTrig..");
     (gphNxpNciHal_fw_IoctlCtx.bDnldInitiated) = true;
@@ -1622,7 +1616,11 @@
     (gphNxpNciHal_fw_IoctlCtx.bSendNciCmd) = false;
 
     /* Perform the download sequence ... after successful recover attempt */
-    wStatus = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_seqhandler);
+    if(nfcFL.chipType == pn547C2) {
+        wStatus = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_seqhandler_stat);
+    } else {
+        wStatus = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_seqhandler_common);
+    }
 
     status = phNxpNciHal_fw_dnld_complete(pContext, wStatus, &pInfo);
     if (NFCSTATUS_SUCCESS == status) {
@@ -1710,12 +1708,8 @@
 ** Returns          NFCSTATUS_SUCCESS if success
 **
 *******************************************************************************/
-#if (NXP_NFCC_FORCE_FW_DOWNLOAD == true)
 NFCSTATUS phNxpNciHal_fw_download_seq(uint8_t bClkSrcVal, uint8_t bClkFreqVal,
                                       uint8_t force_fwDnld_Req)
-#else
-NFCSTATUS phNxpNciHal_fw_download_seq(uint8_t bClkSrcVal, uint8_t bClkFreqVal)
-#endif
 {
   NFCSTATUS status = NFCSTATUS_FAILED;
   phDnldNfc_Buff_t pInfo;
@@ -1737,22 +1731,22 @@
   (gphNxpNciHal_fw_IoctlCtx.bClkSrcVal) = bClkSrcVal;
   (gphNxpNciHal_fw_IoctlCtx.bClkFreqVal) = bClkFreqVal;
 
-#if (NXP_NFCC_FORCE_FW_DOWNLOAD == true)
-  if (force_fwDnld_Req) {
+  if (nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD && force_fwDnld_Req) {
     (gphNxpNciHal_fw_IoctlCtx.bForceDnld) = true;
   }
-#endif
   /* Get firmware version */
   if (NFCSTATUS_SUCCESS == phDnldNfc_InitImgInfo()) {
     NXPLOG_FWDNLD_D("phDnldNfc_InitImgInfo:SUCCESS");
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    if (gRecFWDwnld == true) {
+    if ((nfcFL.chipType != pn547C2) && (gRecFWDwnld == true)) {
       status =
           phNxpNciHal_fw_seq_handler(phNxpNciHal_dummy_rec_dwnld_seqhandler);
     } else
-#endif
     {
-      status = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_seqhandler);
+        if(nfcFL.chipType == pn547C2) {
+            status = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_seqhandler_stat);
+        } else {
+            status = phNxpNciHal_fw_seq_handler(phNxpNciHal_dwnld_seqhandler_common);
+        }
     }
   } else {
     NXPLOG_FWDNLD_E("phDnldNfc_InitImgInfo: FAILED");
@@ -1773,14 +1767,15 @@
 }
 
 static NFCSTATUS phLibNfc_VerifyCrcStatus(uint8_t bCrcStatus) {
-#if ((NFC_NXP_CHIP_TYPE == PN551) || (NFC_NXP_CHIP_TYPE == PN553)\
-    || (NFC_NXP_CHIP_TYPE == PN557))
-  uint8_t bBitPos = 1;
-  uint8_t bShiftVal = 2;
-#else
-  uint8_t bBitPos = 0;
-  uint8_t bShiftVal = 1;
-#endif
+    uint8_t bBitPos;
+    uint8_t bShiftVal;
+    if((nfcFL.chipType == pn551) || (nfcFL.chipType == pn553)) {
+        bBitPos = 1;
+        bShiftVal = 2;
+    } else {
+        bBitPos = 0;
+        bShiftVal = 1;
+    }
   NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
   while (bBitPos < 7) {
     if (!(bCrcStatus & bShiftVal)) {
diff --git a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.h b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.h
index 1491072..dcd3c0d 100644
--- a/halimpl/pn54x/dnld/phNxpNciHal_Dnld.h
+++ b/halimpl/pn54x/dnld/phNxpNciHal_Dnld.h
@@ -19,11 +19,7 @@
 #include <phNfcTypes.h>
 #include <phNfcStatus.h>
 
-#if (NXP_NFCC_FORCE_FW_DOWNLOAD == true)
 NFCSTATUS phNxpNciHal_fw_download_seq(uint8_t bClkSrcVal, uint8_t bClkFreqVal,
                                       uint8_t force_fwDnld_Req);
-#else
-NFCSTATUS phNxpNciHal_fw_download_seq(uint8_t bClkSrcVal, uint8_t bClkFreqVal);
-#endif
 
 #endif /* _PHNXPNCIHAL_DNLD_H_ */
diff --git a/halimpl/pn54x/hal/phNxpNciHal.c b/halimpl/pn54x/hal/phNxpNciHal.c
index 4623ee7..6fcad93 100644
--- a/halimpl/pn54x/hal/phNxpNciHal.c
+++ b/halimpl/pn54x/hal/phNxpNciHal.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
  * Not a Contribution.
  *
  * Copyright (C) 2015 NXP Semiconductors
@@ -30,7 +30,7 @@
 #include <phNxpNciHal_NfcDepSWPrio.h>
 #include <phNxpNciHal_Kovio.h>
 #include <phTmlNfc_i2c.h>
-#include <cutils/properties.h>
+#include "phNxpNciHal_nciParser.h"
 /*********************** Global Variables *************************************/
 #define PN547C2_CLOCK_SETTING
 #undef PN547C2_FACTORY_RESET_DEBUG
@@ -41,33 +41,23 @@
 #endif
 #endif
 
-/* FW Mobile major number */
-#define FW_MOBILE_MAJOR_NUMBER_PN553 0x01
-#define FW_MOBILE_MAJOR_NUMBER_PN551 0x05
-#define FW_MOBILE_MAJOR_NUMBER_PN48AD 0x01
-#define FW_MOBILE_MAJOR_NUMBER_PN557 0x00
 
-#if (NFC_NXP_CHIP_TYPE == PN551)
-#define FW_MOBILE_MAJOR_NUMBER FW_MOBILE_MAJOR_NUMBER_PN551
-#elif(NFC_NXP_CHIP_TYPE == PN553)
-#define FW_MOBILE_MAJOR_NUMBER FW_MOBILE_MAJOR_NUMBER_PN553
-#elif(NFC_NXP_CHIP_TYPE == PN557)
-#define FW_MOBILE_MAJOR_NUMBER FW_MOBILE_MAJOR_NUMBER_PN553 /*Update during bring-up*/
-#else
-#define FW_MOBILE_MAJOR_NUMBER FW_MOBILE_MAJOR_NUMBER_PN48AD
-#endif
+#define NXP_NCI_HAL_CORE_INIT_RECOVER(recoveryCount, recoveryLabel)\
+do\
+{\
+    recoveryCount++;\
+    goto recoveryLabel;\
+}while(0)
 
 /* Processing of ISO 15693 EOF */
 extern uint8_t icode_send_eof;
 extern uint8_t icode_detected;
 static uint8_t cmd_icode_eof[] = {0x00, 0x00, 0x00};
-#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true)
 static uint8_t read_failed_disable_nfc = false;
-#endif
 static uint8_t pwr_link_required = false;
 static uint8_t config_access = false;
 static uint8_t config_success = true;
-static NFCSTATUS phNxpNciHal_FwDwnld(void);
+static NFCSTATUS phNxpNciHal_FwDwnld(uint16_t aType);
 static NFCSTATUS phNxpNciHal_SendCmd(uint8_t cmd_len, uint8_t* pcmd_buff);
 static void phNxpNciHal_check_delete_nfaStorage_DHArea();
 /* NCI HAL Control structure */
@@ -84,12 +74,9 @@
 extern int phNxpNciHal_CheckFwRegFlashRequired(uint8_t* fw_update_req,
                                                uint8_t* rf_update_req);
 phNxpNci_getCfg_info_t* mGetCfg_info = NULL;
-#if (NXP_ESE_SVDD_SYNC == true)
 uint32_t gSvddSyncOff_Delay = 10;
-#endif
-#if (NXP_NFCC_FORCE_FW_DOWNLOAD == true)
 bool_t force_fw_download_req = false;
-#endif
+bool_t gParserCreated = FALSE;
 /* global variable to get FW version from NCI response*/
 uint32_t wFwVerRsp;
 /* External global variable to get FW version */
@@ -100,11 +87,9 @@
 extern int send_to_upper_kovio;
 extern int kovio_detected;
 extern int disable_kovio;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 extern uint8_t
     gRecFWDwnld; /* flag  set to true to  indicate dummy FW download */
 static uint8_t gRecFwRetryCount;  // variable to hold dummy FW recovery count
-#endif
 static uint8_t write_unlocked_status = NFCSTATUS_SUCCESS;
 static uint8_t Rx_data[NCI_MAX_DATA_LEN];
 uint32_t timeoutTimerId = 0;
@@ -113,7 +98,7 @@
 #endif
 phNxpNciHal_Sem_t config_data;
 
-phNxpNciClock_t phNxpNciClock = {0, {0}, false};
+phNxpNciClock_t phNxpNciClock = {0, {0}};
 
 phNxpNciRfSetting_t phNxpNciRfSet = {false, {0}};
 
@@ -131,8 +116,9 @@
 static void phNxpNciHal_kill_client_thread(
     phNxpNciHal_Control_t* p_nxpncihal_ctrl);
 static void* phNxpNciHal_client_thread(void* arg);
-static void phNxpNciHal_get_clk_freq(void);
-static void phNxpNciHal_set_clock(void);
+static void phNxpNciHal_nfccClockCfgRead(void);
+static NFCSTATUS phNxpNciHal_nfccClockCfgApply(void);
+static void phNxpNciHal_txNfccClockSetCmd(void);
 static void phNxpNciHal_check_factory_reset(void);
 static NFCSTATUS phNxpNciHal_check_eSE_Session_Identity(void);
 static void phNxpNciHal_print_res_status(uint8_t* p_rx_data, uint16_t* p_len);
@@ -140,14 +126,14 @@
 static void phNxpNciHal_enable_i2c_fragmentation();
 static void phNxpNciHal_core_MinInitialized_complete(NFCSTATUS status);
 static NFCSTATUS phNxpNciHal_set_Boot_Mode(uint8_t mode);
-NFCSTATUS phNxpNciHal_check_clock_config(void);
 NFCSTATUS phNxpNciHal_set_china_region_configs(void);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
+static void phNxpNciHal_configNciParser(void);
 static NFCSTATUS phNxpNciHalRFConfigCmdRecSequence();
 static NFCSTATUS phNxpNciHal_CheckRFCmdRespStatus();
-#endif
 int check_config_parameter();
 static NFCSTATUS phNxpNciHal_uicc_baud_rate();
+
+//static tNfc_featureList phNxpNciHal_getFeatureList();
 /******************************************************************************
  * Function         phNxpNciHal_client_thread
  *
@@ -308,20 +294,22 @@
 static NFCSTATUS phNxpNciHal_fw_download(void) {
   NFCSTATUS status = NFCSTATUS_FAILED;
   NFCSTATUS wConfigStatus = NFCSTATUS_FAILED;
-  phNxpNciHal_get_clk_freq();
+  phNxpNciHal_nfccClockCfgRead();
   status = phTmlNfc_IoCtl(phTmlNfc_e_EnableDownloadMode);
   if (NFCSTATUS_SUCCESS == status) {
     /* Set the obtained device handle to download module */
     phDnldNfc_SetHwDevHandle();
     NXPLOG_NCIHAL_D("Calling Seq handler for FW Download \n");
-#if (NXP_NFCC_FORCE_FW_DOWNLOAD == true)
+if(nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD) {
     status = phNxpNciHal_fw_download_seq(nxpprofile_ctrl.bClkSrcVal,
                                          nxpprofile_ctrl.bClkFreqVal,
                                          force_fw_download_req);
-#else
+}
+else {
     status = phNxpNciHal_fw_download_seq(nxpprofile_ctrl.bClkSrcVal,
-                                         nxpprofile_ctrl.bClkFreqVal);
-#endif
+                                         nxpprofile_ctrl.bClkFreqVal,
+                                         false);
+}
     phDnldNfc_ReSetHwDevHandle();
     /* call read pending */
     wConfigStatus = phTmlNfc_Read(
@@ -363,7 +351,7 @@
 
   NXPLOG_NCIHAL_D("%s current_major_no = 0x%x", __func__, ufw_current_major_no);
 
-  if ( ufw_current_major_no == FW_MOBILE_MAJOR_NUMBER) {
+  if (ufw_current_major_no == nfcFL.nfcMwFL._FW_MOBILE_MAJOR_NUMBER) {
     status = NFCSTATUS_SUCCESS;
   } else if (ufw_current_major_no == sfw_infra_major_no) {
         if(rom_version == FW_MOBILE_ROM_VERSION_PN553 || rom_version == FW_MOBILE_ROM_VERSION_PN557) {
@@ -396,11 +384,9 @@
     }
   }
   }
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  else if (gRecFWDwnld == true) {
+  else if ((nfcFL.chipType != pn547C2) && (gRecFWDwnld == true)) {
     status = NFCSTATUS_SUCCESS;
   }
-#endif
   else if (wFwVerRsp == 0) {
     NXPLOG_NCIHAL_E(
         "FW Version not received by NCI command >>> Force Firmware download");
@@ -412,59 +398,6 @@
   return status;
 }
 
-static void phNxpNciHal_get_clk_freq(void) {
-  unsigned long num = 0;
-  int isfound = 0;
-
-  nxpprofile_ctrl.bClkSrcVal = 0;
-  nxpprofile_ctrl.bClkFreqVal = 0;
-  nxpprofile_ctrl.bTimeout = 0;
-
-  isfound = GetNxpNumValue(NAME_NXP_SYS_CLK_SRC_SEL, &num, sizeof(num));
-  if (isfound > 0) {
-    nxpprofile_ctrl.bClkSrcVal = num;
-  }
-
-  num = 0;
-  isfound = 0;
-  isfound = GetNxpNumValue(NAME_NXP_SYS_CLK_FREQ_SEL, &num, sizeof(num));
-  if (isfound > 0) {
-    nxpprofile_ctrl.bClkFreqVal = num;
-  }
-
-  num = 0;
-  isfound = 0;
-  isfound = GetNxpNumValue(NAME_NXP_SYS_CLOCK_TO_CFG, &num, sizeof(num));
-  if (isfound > 0) {
-    nxpprofile_ctrl.bTimeout = num;
-  }
-
-  NXPLOG_FWDNLD_D("gphNxpNciHal_fw_IoctlCtx.bClkSrcVal = 0x%x",
-                  nxpprofile_ctrl.bClkSrcVal);
-  NXPLOG_FWDNLD_D("gphNxpNciHal_fw_IoctlCtx.bClkFreqVal = 0x%x",
-                  nxpprofile_ctrl.bClkFreqVal);
-  NXPLOG_FWDNLD_D("gphNxpNciHal_fw_IoctlCtx.bClkFreqVal = 0x%x",
-                  nxpprofile_ctrl.bTimeout);
-
-  if ((nxpprofile_ctrl.bClkSrcVal < CLK_SRC_XTAL) ||
-      (nxpprofile_ctrl.bClkSrcVal > CLK_SRC_PLL)) {
-    NXPLOG_FWDNLD_E(
-        "Clock source value is wrong in config file, setting it as default");
-    nxpprofile_ctrl.bClkSrcVal = NXP_SYS_CLK_SRC_SEL;
-  }
-  if ((nxpprofile_ctrl.bClkFreqVal < CLK_FREQ_13MHZ) ||
-      (nxpprofile_ctrl.bClkFreqVal > CLK_FREQ_52MHZ)) {
-    NXPLOG_FWDNLD_E(
-        "Clock frequency value is wrong in config file, setting it as default");
-    nxpprofile_ctrl.bClkFreqVal = NXP_SYS_CLK_FREQ_SEL;
-  }
-  if ((nxpprofile_ctrl.bTimeout < CLK_TO_CFG_DEF) ||
-      (nxpprofile_ctrl.bTimeout > CLK_TO_CFG_MAX)) {
-    NXPLOG_FWDNLD_E(
-        "Clock timeout value is wrong in config file, setting it as default");
-    nxpprofile_ctrl.bTimeout = CLK_TO_CFG_DEF;
-  }
-}
 /******************************************************************************
  * Function         phNxpNciHal_FwDwnld
  *
@@ -475,12 +408,15 @@
  *                  In case of failure returns other failure value.
  *
  ******************************************************************************/
-static NFCSTATUS phNxpNciHal_FwDwnld(void) {
-  NFCSTATUS status = NFCSTATUS_SUCCESS, wConfigStatus = NFCSTATUS_SUCCESS;
-  if (wFwVerRsp == 0) {
-    phDnldNfc_InitImgInfo();
-  }
-  status = phNxpNciHal_CheckValidFwVersion();
+static NFCSTATUS phNxpNciHal_FwDwnld(uint16_t aType) {
+   NFCSTATUS status = NFCSTATUS_SUCCESS;
+
+   if(aType != NFC_STATUS_NOT_INITIALIZED) {
+   if (wFwVerRsp == 0) {
+            phDnldNfc_InitImgInfo();
+        }
+        status= phNxpNciHal_CheckValidFwVersion();
+   }
   if (NFCSTATUS_SUCCESS == status) {
     NXPLOG_NCIHAL_D("Found Valid Firmware Type");
     status = phNxpNciHal_fw_download();
@@ -688,8 +624,6 @@
   }
   /* reset config cache */
   resetNxpConfig();
-
-  /* initialize trace level */
   phNxpLog_InitializeLogLevel();
 
   /*Create the timer for extns write response*/
@@ -738,9 +672,8 @@
     NXPLOG_NCIHAL_E(
         "Invalid nfc device node name keeping the default device node "
         "/dev/nq-nci");
-    strlcpy(nfc_dev_node, "/dev/nq-nci", max_len);
+    strlcpy((char*)nfc_dev_node, "/dev/nq-nci", max_len);
   }
-
   /* Configure hardware link */
   nxpncihal_ctrl.gDrvCfg.nClientId = phDal4Nfc_msgget(0, 0600);
   nxpncihal_ctrl.gDrvCfg.nLinkType = ENUM_LINK_TYPE_I2C; /* For PN54X */
@@ -760,7 +693,6 @@
       nfc_dev_node = NULL;
     }
   }
-
   /* Create the client thread */
   pthread_attr_t attr;
   pthread_attr_init(&attr);
@@ -775,7 +707,6 @@
   }
 
   CONCURRENCY_UNLOCK();
-
   /* call read pending */
   status = phTmlNfc_Read(
       nxpncihal_ctrl.p_cmd_data, NCI_MAX_DATA_LEN,
@@ -794,6 +725,8 @@
     if ((status != NFCSTATUS_SUCCESS) &&
         (nxpncihal_ctrl.retry_cnt >= MAX_RETRY_COUNT)) {
       NXPLOG_NCIHAL_E("NFCC not coming out from Standby");
+      NXPLOG_NCIHAL_E("Trying Force FW download");
+      goto force_download;
       wConfigStatus = NFCSTATUS_FAILED;
     } else if (status != NFCSTATUS_SUCCESS) {
       NXPLOG_NCIHAL_E("NCI_CORE_RESET: Failed");
@@ -807,26 +740,24 @@
       wConfigStatus = NFCSTATUS_FAILED;
       goto clean_and_return;
     }
-#if (NXP_NFCC_FORCE_NCI1_0_INIT == true)
-    status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
-#else
-    status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
-    if (status == NFCSTATUS_SUCCESS) {
-      if (nxpncihal_ctrl.nci_info.nci_version != NCI_VERSION_2_0) {
-        NXPLOG_NCIHAL_E("Chip is in NCI1.0 mode reset the chip again");
-        status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
-        if(status == NFCSTATUS_SUCCESS) {
-          if(nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
-            status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
-          } else {
-            status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
-          }
+    if(nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
+        status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
+    } else {
+        status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci), cmd_init_nci);
+        if(status == NFCSTATUS_SUCCESS && (nfcFL.chipType == pn557)) {
+            NXPLOG_NCIHAL_E("Chip is in NCI1.0 mode reset the chip to 2.0 mode");
+            status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
+            if(status == NFCSTATUS_SUCCESS) {
+                status = phNxpNciHal_send_ext_cmd(sizeof(cmd_init_nci2_0), cmd_init_nci2_0);
+                if(status == NFCSTATUS_SUCCESS) {
+                    goto init_retry;
+                }
+            }
         }
-      }
     }
-#endif
+
     if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("NCI_CORE_INIT : Failed");
+      NXPLOG_NCIHAL_E("COMMAND Failed");
       if (init_retry_cnt < 3) {
         init_retry_cnt++;
         (void)phNxpNciHal_power_cycle();
@@ -842,6 +773,11 @@
 
   return wConfigStatus;
 
+force_download:
+  wFwVerRsp = 0;
+  phNxpNciHal_FwDwnld(NFC_STATUS_NOT_INITIALIZED);
+  goto init_retry;
+
 clean_and_return:
   CONCURRENCY_UNLOCK();
   if (nfc_dev_node != NULL) {
@@ -855,7 +791,6 @@
   /* Report error status */
   (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_OPEN_CPLT_EVT,
                                       HAL_NFC_STATUS_FAILED);
-
   nxpncihal_ctrl.p_nfc_stack_cback = NULL;
   nxpncihal_ctrl.p_nfc_stack_data_cback = NULL;
   phNxpNciHal_cleanup_monitor();
@@ -873,22 +808,22 @@
  *
  ******************************************************************************/
 int phNxpNciHal_fw_mw_ver_check() {
-  NFCSTATUS status = NFCSTATUS_FAILED;
+    NFCSTATUS status = NFCSTATUS_FAILED;
 
-  if ((!(strcmp(COMPILATION_MW, "PN553")) && (rom_version == 0x11) &&
-       (fw_maj_ver == 0x01))) {
-    status = NFCSTATUS_SUCCESS;
-  } else if ((!(strcmp(COMPILATION_MW, "PN551")) && (rom_version == 0x10) &&
-              (fw_maj_ver == 0x05))) {
-    status = NFCSTATUS_SUCCESS;
-  } else if ((!(strcmp(COMPILATION_MW, "PN548C2")) && (rom_version == 0x10) &&
-              (fw_maj_ver == 0x01))) {
-    status = NFCSTATUS_SUCCESS;
-  } else if ((!(strcmp(COMPILATION_MW, "PN547C2")) && (rom_version == 0x08) &&
-              (fw_maj_ver == 0x01))) {
-    status = NFCSTATUS_SUCCESS;
-  }
-  return status;
+    if (((nfcFL.chipType == pn553)||(nfcFL.chipType == pn80T)) &&
+            (rom_version == 0x11) && (fw_maj_ver == 0x01)) {
+        status = NFCSTATUS_SUCCESS;
+    } else if (((nfcFL.chipType == pn551)||(nfcFL.chipType == pn67T)) &&
+            (rom_version == 0x10) && (fw_maj_ver == 0x05)) {
+        status = NFCSTATUS_SUCCESS;
+    } else if (((nfcFL.chipType == pn548C2)||(nfcFL.chipType == pn66T)) &&
+            (rom_version == 0x10) && (fw_maj_ver == 0x01)) {
+        status = NFCSTATUS_SUCCESS;
+    } else if (((nfcFL.chipType == pn547C2)||(nfcFL.chipType == pn65T)) &&
+            (rom_version == 0x08) && (fw_maj_ver == 0x01)) {
+        status = NFCSTATUS_SUCCESS;
+    }
+    return status;
 }
 /******************************************************************************
  * Function         phNxpNciHal_open_complete
@@ -1041,13 +976,13 @@
     if (nxpncihal_ctrl.retry_cnt++ < MAX_RETRY_COUNT) {
       NXPLOG_NCIHAL_E(
           "write_unlocked failed - PN54X Maybe in Standby Mode - Retry");
-#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true)
-      /* 5ms delay to give NFCC wake up delay */
-      usleep(5000);
-#else
-      /* 1ms delay to give NFCC wake up delay */
-      usleep(1000);
-#endif
+      if(nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT) {
+          /* 5ms delay to give NFCC wake up delay */
+          usleep(5000);
+      } else {
+          /* 1ms delay to give NFCC wake up delay */
+          usleep(1000);
+}
       goto retry;
     } else {
       NXPLOG_NCIHAL_E(
@@ -1135,17 +1070,17 @@
   if (nxpncihal_ctrl.read_retry_cnt == 1) {
     nxpncihal_ctrl.read_retry_cnt = 0;
   }
-#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true)
-  if (pInfo->wStatus == NFCSTATUS_READ_FAILED) {
-    if (nxpncihal_ctrl.p_nfc_stack_cback != NULL) {
-      read_failed_disable_nfc = true;
-      /* Send the event */
-      (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_ERROR_EVT,
-                                          HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
-    }
-    return;
+  if (nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT &&
+          (pInfo->wStatus == NFCSTATUS_READ_FAILED)) {
+      if (nxpncihal_ctrl.p_nfc_stack_cback != NULL) {
+          read_failed_disable_nfc = true;
+          /* Send the event */
+          (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_ERROR_EVT,
+                  HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
+      }
+      return;
   }
-#endif
+
   if (pInfo->wStatus == NFCSTATUS_SUCCESS) {
     NXPLOG_NCIHAL_D("read successful status = 0x%x", pInfo->wStatus);
 
@@ -1159,9 +1094,9 @@
                                  &nxpncihal_ctrl.rx_data_len);
 #if (NXP_NFCC_FORCE_NCI1_0_INIT == true)
     /* Notification Checking */
-    if ((nxpncihal_ctrl.hal_ext_enabled == 1) &&
+    if (nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT && ((nxpncihal_ctrl.hal_ext_enabled == 1) &&
         (nxpncihal_ctrl.p_rx_data[0x00] == 0x60) &&
-        (nxpncihal_ctrl.p_rx_data[0x03] == 0x02)) {
+        (nxpncihal_ctrl.p_rx_data[0x03] == 0x02))) {
       nxpncihal_ctrl.ext_cb_data.status = NFCSTATUS_SUCCESS;
       SEM_POST(&(nxpncihal_ctrl.ext_cb_data));
     } else
@@ -1234,13 +1169,15 @@
 *******************************************************************************/
 void phNxpNciHal_check_delete_nfaStorage_DHArea() {
   struct stat st;
+  int ret = 0;
   const char config_eseinfo_path[] = "/data/nfc/nfaStorage.bin1";
   if (stat(config_eseinfo_path, &st) == -1) {
-    ALOGD("%s file not present = %s", __func__, config_eseinfo_path);
+    ALOGD("%s: file not found %s", __func__, config_eseinfo_path);
   } else {
-    ALOGD("%s file present = %s", __func__, config_eseinfo_path);
-    remove(config_eseinfo_path);
-    ALOGD("%s Deleting the file present = %s", __func__, config_eseinfo_path);
+    ALOGD("%s: file found %s, delete it", __func__, config_eseinfo_path);
+    ret = remove(config_eseinfo_path);
+    if(ret!=0)
+      ALOGE("%s: error deleting file %s", __func__, config_eseinfo_path);
   }
 }
 
@@ -1263,7 +1200,6 @@
   uint8_t fw_dwnld_flag = false;
 #endif
   uint8_t setConfigAlways = false;
-  uint8_t temp_fix = 1;
   static uint8_t retry_core_init_cnt = 0;
   static uint8_t p2p_listen_mode_routing_cmd[] = {0x21, 0x01, 0x07, 0x00, 0x01,
                                                   0x01, 0x03, 0x00, 0x01, 0x05};
@@ -1278,17 +1214,16 @@
   long bufflen = 260;
   long retlen = 0;
   unsigned long num = 0;
+  static uint8_t  init_param;
+  init_param = *p_core_init_rsp_params;
   phNxpNci_EEPROM_info_t mEEPROM_info = {.request_mode = 0};
-#if (NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG == true)
   static uint8_t android_l_aid_matching_mode_on_cmd[] = {
       0x20, 0x02, 0x05, 0x01, 0xA0, 0x91, 0x01, 0x01};
-#endif
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
   /*initialize dummy FW recovery variables*/
-  gRecFwRetryCount = 0;
-  gRecFWDwnld = false;
-#endif
-
+  if(nfcFL.chipType != pn547C2) {
+      gRecFwRetryCount = 0;
+      gRecFWDwnld = false;
+  }
   if (nxpncihal_ctrl.halStatus != HAL_STATUS_OPEN) {
     return NFCSTATUS_FAILED;
   }
@@ -1298,6 +1233,7 @@
   /*MW recovery -- begins*/
   if ((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4)) {
   retry_core_init:
+    *p_core_init_rsp_params = init_param;
     config_access = false;
     if (mGetCfg_info != NULL) {
       mGetCfg_info->isGetcfg = false;
@@ -1307,15 +1243,14 @@
       buffer = NULL;
     }
     if (retry_core_init_cnt > 3) {
-#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true)
-      if (nxpncihal_ctrl.p_nfc_stack_cback != NULL) {
-        NXPLOG_NCIHAL_D("Posting Core Init Failed\n");
-        read_failed_disable_nfc = true;
-        (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_ERROR_EVT,
-                                            HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
-      }
-#endif
-      return NFCSTATUS_FAILED;
+        if (nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT &&
+                (nxpncihal_ctrl.p_nfc_stack_cback != NULL)) {
+            NXPLOG_NCIHAL_D("Posting Core Init Failed\n");
+            read_failed_disable_nfc = true;
+            (*nxpncihal_ctrl.p_nfc_stack_cback)(HAL_NFC_ERROR_EVT,
+                    HAL_NFC_STATUS_ERR_CMD_TIMEOUT);
+        }
+        return NFCSTATUS_FAILED;
     }
 
     status = phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
@@ -1325,21 +1260,21 @@
       NXPLOG_NCIHAL_D("PN54X Reset - FAILED\n");
     }
 
-#if (NXP_NFCC_FORCE_NCI1_0_INIT == true)
-    status = phNxpNciHal_send_ext_cmd_ntf(sizeof(cmd_reset_nci), cmd_reset_nci);
-#else
-    status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
-#endif
+    if(nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT) {
+        status = phNxpNciHal_send_ext_cmd_ntf(sizeof(cmd_reset_nci), cmd_reset_nci);
+    }
+    else {
+        status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
+    }
+
     if ((status != NFCSTATUS_SUCCESS) &&
         (nxpncihal_ctrl.retry_cnt >= MAX_RETRY_COUNT)) {
       NXPLOG_NCIHAL_E(
           "NFCC not coming out from Standby Max retry count reached");
-      retry_core_init_cnt++;
-      goto retry_core_init;
+      NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
     } else if (status != NFCSTATUS_SUCCESS) {
       NXPLOG_NCIHAL_E("NCI_CORE_RESET: Failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
+      NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
     }
 
     if (*p_core_init_rsp_params == 2) {
@@ -1354,8 +1289,7 @@
     }
     if (status != NFCSTATUS_SUCCESS) {
       NXPLOG_NCIHAL_E("NCI_CORE_INIT : Failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
+      NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
     }
 
     if (*p_core_init_rsp_params == 3) {
@@ -1380,8 +1314,7 @@
     status = phNxpNciHal_send_ext_cmd(retlen, buffer);
     if (status != NFCSTATUS_SUCCESS) {
       NXPLOG_NCIHAL_E("NXP ACT Proprietary Ext failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
+      NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
     }
   }
 
@@ -1393,23 +1326,25 @@
     status = phNxpNciHal_send_ext_cmd(retlen, buffer);
     if (status != NFCSTATUS_SUCCESS) {
       NXPLOG_NCIHAL_E("Stand by mode enable failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
+      NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
     }
   }
-#if (NXP_ESE_SVDD_SYNC == true)
-  if (GetNxpNumValue(NAME_NXP_SVDD_SYNC_OFF_DELAY, (void*)&gSvddSyncOff_Delay,
-                     sizeof(gSvddSyncOff_Delay))) {
-    if (gSvddSyncOff_Delay > 20) gSvddSyncOff_Delay = 10;
-    NXPLOG_NCIHAL_E("NAME_NXP_SVDD_SYNC_OFF_DELAY success value = %d",
-                    gSvddSyncOff_Delay);
-  } else {
-    NXPLOG_NCIHAL_E("NAME_NXP_SVDD_SYNC_OFF_DELAY failed");
-    gSvddSyncOff_Delay = 10;
+
+  if(nfcFL.eseFL._ESE_SVDD_SYNC) {
+      if (GetNxpNumValue(NAME_NXP_SVDD_SYNC_OFF_DELAY, (void*)&gSvddSyncOff_Delay,
+              sizeof(gSvddSyncOff_Delay))) {
+          if (gSvddSyncOff_Delay > 20) gSvddSyncOff_Delay = 10;
+          NXPLOG_NCIHAL_E("NAME_NXP_SVDD_SYNC_OFF_DELAY success value = %d",
+                  gSvddSyncOff_Delay);
+      } else {
+          NXPLOG_NCIHAL_E("NAME_NXP_SVDD_SYNC_OFF_DELAY failed");
+          gSvddSyncOff_Delay = 10;
+      }
   }
-#endif
   config_access = false;
+  if(nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY == false) {
   phNxpNciHal_check_factory_reset();
+  }
 
 #ifdef FW_DWNLD_FLAG
   mEEPROM_info.buffer = &fw_dwnld_flag;
@@ -1420,50 +1355,49 @@
 #endif
 
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2 && (NXP_NFCC_ROUTING_BLOCK_BIT_PROP == true))
-  if (isNxpConfigModified() || (fw_dwnld_flag == 0x01)) {
-    uint8_t value;
-    retlen = 0;
-    if (GetNxpNumValue(NAME_NXP_PROP_BLACKLIST_ROUTING, (void*)&retlen,
-                       sizeof(retlen))) {
-      if (retlen == 0x00 || retlen == 0x01) {
-        value = (uint8_t)retlen;
-        mEEPROM_info.buffer = &value;
-        mEEPROM_info.bufflen = sizeof(value);
-        mEEPROM_info.request_type = EEPROM_PROP_ROUTING;
-        mEEPROM_info.request_mode = SET_EEPROM_DATA;
-        status = request_EEPROM(&mEEPROM_info);
+  if((nfcFL.chipType != pn547C2) && nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP) {
+      if (isNxpConfigModified() || (fw_dwnld_flag == 0x01)) {
+          uint8_t value;
+          retlen = 0;
+          if (GetNxpNumValue(NAME_NXP_PROP_BLACKLIST_ROUTING,
+                  (void*)&retlen, sizeof(retlen))) {
+              if (retlen == 0x00 || retlen == 0x01) {
+                  value = (uint8_t)retlen;
+                  mEEPROM_info.buffer = &value;
+                  mEEPROM_info.bufflen = sizeof(value);
+                  mEEPROM_info.request_type = EEPROM_PROP_ROUTING;
+                  mEEPROM_info.request_mode = SET_EEPROM_DATA;
+                  status = request_EEPROM(&mEEPROM_info);
+              }
+          }
       }
-    }
-  }
-#endif
+}
 
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
-  {
-    uint8_t resume_timeout_buf[NXP_WIREDMODE_RESUME_TIMEOUT_LEN];
-    mEEPROM_info.request_mode = GET_EEPROM_DATA;
-    NXPLOG_NCIHAL_D("Timeout value");
-    if (isNxpConfigModified() || (fw_dwnld_flag == 0x01)) {
-      NXPLOG_NCIHAL_D("Timeout value - 1");
-      if (GetNxpByteArrayValue(NAME_NXP_WIREDMODE_RESUME_TIMEOUT, (char*)buffer,
-                               bufflen, &retlen)) {
-        NXPLOG_NCIHAL_D("Time out value %x %x %x %x retlen=%ld", buffer[0],
-                        buffer[1], buffer[2], buffer[3], retlen);
-        if (retlen >= NXP_WIREDMODE_RESUME_TIMEOUT_LEN) {
-          memcpy(&resume_timeout_buf, buffer, NXP_STAG_TIMEOUT_BUF_LEN);
-          mEEPROM_info.request_mode = SET_EEPROM_DATA;
-        }
+  if((nfcFL.chipType != pn547C2) && (nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME)) {
+      uint8_t resume_timeout_buf[NXP_WIREDMODE_RESUME_TIMEOUT_LEN];
+      mEEPROM_info.request_mode = GET_EEPROM_DATA;
+      NXPLOG_NCIHAL_D("Timeout value");
+      if (isNxpConfigModified() || (fw_dwnld_flag == 0x01)) {
+          NXPLOG_NCIHAL_D("Timeout value - 1");
+          if (GetNxpByteArrayValue(NAME_NXP_WIREDMODE_RESUME_TIMEOUT, (char*)buffer,
+                  bufflen, &retlen)) {
+              NXPLOG_NCIHAL_D("Time out value %x %x %x %x retlen=%ld", buffer[0],
+                      buffer[1], buffer[2], buffer[3], retlen);
+              if (retlen >= NXP_WIREDMODE_RESUME_TIMEOUT_LEN) {
+                  memcpy(&resume_timeout_buf, buffer, NXP_STAG_TIMEOUT_BUF_LEN);
+                  mEEPROM_info.request_mode = SET_EEPROM_DATA;
+              }
+          }
       }
-    }
-    mEEPROM_info.buffer = resume_timeout_buf;
-    mEEPROM_info.bufflen = sizeof(resume_timeout_buf);
-    mEEPROM_info.request_type = EEPROM_WIREDMODE_RESUME_TIMEOUT;
-    request_EEPROM(&mEEPROM_info);
+      mEEPROM_info.buffer = resume_timeout_buf;
+      mEEPROM_info.bufflen = sizeof(resume_timeout_buf);
+      mEEPROM_info.request_type = EEPROM_WIREDMODE_RESUME_TIMEOUT;
+      request_EEPROM(&mEEPROM_info);
   }
-#endif
 
-#if ((NXP_EXTNS == TRUE) && (NXP_ESE_POWER_MODE == true))
+#if (NXP_EXTNS == TRUE)
+  if(nfcFL.eseFL._ESE_POWER_MODE)
   {
     uint8_t value;
     retlen = 0;
@@ -1532,57 +1466,37 @@
       isNxpRFConfigModified() || isNxpConfigModified()) {
     config_access = true;
     retlen = 0;
-    status = phNxpNciHal_check_clock_config();
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("phNxpNciHal_check_clock_config failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
+    if (phNxpNciHal_nfccClockCfgApply() != NFCSTATUS_SUCCESS) {
+        NXPLOG_NCIHAL_E("phNxpNciHal_nfccClockCfgApply failed");
+        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
     }
 
   if (config_success == false) return NFCSTATUS_FAILED;
 #ifdef PN547C2_CLOCK_SETTING
-    if (isNxpConfigModified() || (phNxpNciClock.issetConfig)
 #if (NFC_NXP_HFO_SETTINGS == TRUE)
-        || temp_fix == 1
-#endif
-        ) {
-      // phNxpNciHal_get_clk_freq();
-      phNxpNciHal_set_clock();
-      phNxpNciClock.issetConfig = false;
-#if (NFC_NXP_HFO_SETTINGS == TRUE)
-      if (temp_fix == 1) {
-        NXPLOG_NCIHAL_D(
-            "Applying Default Clock setting and DPLL register at power on");
-        /*
-        # A0, 0D, 06, 06, 83, 55, 2A, 04, 00 RF_CLIF_CFG_TARGET
-        CLIF_DPLL_GEAR_REG
-        # A0, 0D, 06, 06, 82, 33, 14, 17, 00 RF_CLIF_CFG_TARGET
-        CLIF_DPLL_INIT_REG
-        # A0, 0D, 06, 06, 84, AA, 85, 00, 80 RF_CLIF_CFG_TARGET
-        CLIF_DPLL_INIT_FREQ_REG
-        # A0, 0D, 06, 06, 81, 63, 00, 00, 00 RF_CLIF_CFG_TARGET
-        CLIF_DPLL_CONTROL_REG
-        */
-        static uint8_t cmd_dpll_set_reg_nci[] = {
-            0x20, 0x02, 0x25, 0x04, 0xA0, 0x0D, 0x06, 0x06, 0x83, 0x55,
-            0x2A, 0x04, 0x00, 0xA0, 0x0D, 0x06, 0x06, 0x82, 0x33, 0x14,
-            0x17, 0x00, 0xA0, 0x0D, 0x06, 0x06, 0x84, 0xAA, 0x85, 0x00,
-            0x80, 0xA0, 0x0D, 0x06, 0x06, 0x81, 0x63, 0x00, 0x00, 0x00};
+    NXPLOG_NCIHAL_D("Applying Default Clock setting and DPLL register at power on");
+    /*
+    # A0, 0D, 06, 06, 83, 55, 2A, 04, 00 RF_CLIF_CFG_TARGET CLIF_DPLL_GEAR_REG
+    # A0, 0D, 06, 06, 82, 33, 14, 17, 00 RF_CLIF_CFG_TARGET CLIF_DPLL_INIT_REG
+    # A0, 0D, 06, 06, 84, AA, 85, 00, 80 RF_CLIF_CFG_TARGET CLIF_DPLL_INIT_FREQ_REG
+    # A0, 0D, 06, 06, 81, 63, 00, 00, 00 RF_CLIF_CFG_TARGET CLIF_DPLL_CONTROL_REG
+    */
+    static uint8_t cmd_dpll_set_reg_nci[] = {0x20, 0x02, 0x25, 0x04,
+                                             0xA0, 0x0D, 0x06, 0x06, 0x83, 0x55, 0x2A, 0x04, 0x00,
+                                             0xA0, 0x0D, 0x06, 0x06, 0x82, 0x33, 0x14, 0x17, 0x00,
+                                             0xA0, 0x0D, 0x06, 0x06, 0x84, 0xAA, 0x85, 0x00, 0x80,
+                                             0xA0, 0x0D, 0x06, 0x06, 0x81, 0x63, 0x00, 0x00, 0x00};
 
-        status = phNxpNciHal_send_ext_cmd(sizeof(cmd_dpll_set_reg_nci),
-                                          cmd_dpll_set_reg_nci);
-        if (status != NFCSTATUS_SUCCESS) {
-          NXPLOG_NCIHAL_E("NXP DPLL REG ACT Proprietary Ext failed");
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-        /* reset the NFCC after applying the clock setting and DPLL setting */
-        // phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
-        temp_fix = 0;
-        goto retry_core_init;
-      }
-#endif
+    status = phNxpNciHal_send_ext_cmd(sizeof(cmd_dpll_set_reg_nci), cmd_dpll_set_reg_nci);
+    if (status != NFCSTATUS_SUCCESS) {
+        NXPLOG_NCIHAL_E("NXP DPLL REG ACT Proprietary Ext failed");
+        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
     }
+    /* reset the NFCC after applying the clock setting and DPLL setting */
+    //phTmlNfc_IoCtl(phTmlNfc_e_ResetDevice);
+    goto retry_core_init;
+  }
+#endif
 #endif
 
     retlen = 0;
@@ -1594,81 +1508,72 @@
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
       if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("NXP ACT Proprietary Ext failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     }
 
     retlen = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    NXPLOG_NCIHAL_D("Performing TVDD Settings");
-    /*TVDD settings commented for PN553 bringup FW  */
-    isfound = GetNxpNumValue(NAME_NXP_EXT_TVDD_CFG, &num, sizeof(num));
-    if (isfound > 0) {
-      if (num == 1) {
-        isfound = GetNxpByteArrayValue(NAME_NXP_EXT_TVDD_CFG_1, (char*)buffer,
-                                       bufflen, &retlen);
-        if (retlen > 0) {
-          status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-          if (status != NFCSTATUS_SUCCESS) {
-            NXPLOG_NCIHAL_E("EXT TVDD CFG 1 Settings failed");
-            retry_core_init_cnt++;
-            goto retry_core_init;
-          }
+    if(nfcFL.chipType != pn547C2) {
+        NXPLOG_NCIHAL_D("Performing TVDD Settings");
+        /*TVDD settings commented for PN553 bringup FW  */
+        isfound = GetNxpNumValue(NAME_NXP_EXT_TVDD_CFG, &num, sizeof(num));
+        if (isfound > 0) {
+            if (num == 1) {
+                isfound = GetNxpByteArrayValue(NAME_NXP_EXT_TVDD_CFG_1, (char*)buffer,
+                        bufflen, &retlen);
+                if (retlen > 0) {
+                    status = phNxpNciHal_send_ext_cmd(retlen, buffer);
+                    if (status != NFCSTATUS_SUCCESS) {
+                        NXPLOG_NCIHAL_E("EXT TVDD CFG 1 Settings failed");
+                        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+                    }
+                }
+            } else if (num == 2) {
+                isfound = GetNxpByteArrayValue(NAME_NXP_EXT_TVDD_CFG_2, (char*)buffer,
+                        bufflen, &retlen);
+                if (retlen > 0) {
+                    status = phNxpNciHal_send_ext_cmd(retlen, buffer);
+                    if (status != NFCSTATUS_SUCCESS) {
+                        NXPLOG_NCIHAL_E("EXT TVDD CFG 2 Settings failed");
+                        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+                    }
+                }
+            } else if (num == 3) {
+                isfound = GetNxpByteArrayValue(NAME_NXP_EXT_TVDD_CFG_3, (char*)buffer,
+                        bufflen, &retlen);
+                if (retlen > 0) {
+                    status = phNxpNciHal_send_ext_cmd(retlen, buffer);
+                    if (status != NFCSTATUS_SUCCESS) {
+                        NXPLOG_NCIHAL_E("EXT TVDD CFG 3 Settings failed");
+                        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+                    }
+                }
+            } else {
+                NXPLOG_NCIHAL_E("Wrong Configuration Value %ld", num);
+            }
         }
-      } else if (num == 2) {
-        isfound = GetNxpByteArrayValue(NAME_NXP_EXT_TVDD_CFG_2, (char*)buffer,
-                                       bufflen, &retlen);
-        if (retlen > 0) {
-          status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-          if (status != NFCSTATUS_SUCCESS) {
-            NXPLOG_NCIHAL_E("EXT TVDD CFG 2 Settings failed");
-            retry_core_init_cnt++;
-            goto retry_core_init;
-          }
-        }
-      } else if (num == 3) {
-        isfound = GetNxpByteArrayValue(NAME_NXP_EXT_TVDD_CFG_3, (char*)buffer,
-                                       bufflen, &retlen);
-        if (retlen > 0) {
-          status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-          if (status != NFCSTATUS_SUCCESS) {
-            NXPLOG_NCIHAL_E("EXT TVDD CFG 3 Settings failed");
-            retry_core_init_cnt++;
-            goto retry_core_init;
-          }
-        }
-      } else {
-        NXPLOG_NCIHAL_E("Wrong Configuration Value %ld", num);
-      }
-    }
-#endif
+}
 
     retlen = 0;
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    config_access = false;
-#endif
+    if(nfcFL.chipType != pn547C2) {
+        config_access = false;
+    }
     NXPLOG_NCIHAL_D("Performing RF Settings BLK 1");
     isfound = GetNxpByteArrayValue(NAME_NXP_RF_CONF_BLK_1, (char*)buffer,
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("RF Settings BLK 1 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+      if ((nfcFL.chipType != pn547C2) && (status == NFCSTATUS_SUCCESS)) {
+          status = phNxpNciHal_CheckRFCmdRespStatus();
+          /*STATUS INVALID PARAM 0x09*/
+          if (status == 0x09) {
+              phNxpNciHalRFConfigCmdRecSequence();
+              NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+          }
+      } else if (status != NFCSTATUS_SUCCESS) {
+          NXPLOG_NCIHAL_E("RF Settings BLK 1 failed");
+          NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     }
     retlen = 0;
@@ -1678,21 +1583,16 @@
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
+      if ((nfcFL.chipType != pn547C2) && (status == NFCSTATUS_SUCCESS)) {
+          status = phNxpNciHal_CheckRFCmdRespStatus();
+          /*STATUS INVALID PARAM 0x09*/
+          if (status == 0x09) {
+              phNxpNciHalRFConfigCmdRecSequence();
+              NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+          }
+      } else if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("RF Settings BLK 2 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     }
     retlen = 0;
@@ -1702,21 +1602,16 @@
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("RF Settings BLK 3 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+      if ((nfcFL.chipType != pn547C2) && (status == NFCSTATUS_SUCCESS)) {
+          status = phNxpNciHal_CheckRFCmdRespStatus();
+          /*STATUS INVALID PARAM 0x09*/
+          if (status == 0x09) {
+              phNxpNciHalRFConfigCmdRecSequence();
+              NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+          }
+      } else if (status != NFCSTATUS_SUCCESS) {
+          NXPLOG_NCIHAL_E("RF Settings BLK 3 failed");
+          NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     }
     retlen = 0;
@@ -1726,21 +1621,16 @@
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("RF Settings BLK 4 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+      if ((nfcFL.chipType != pn547C2) && (status == NFCSTATUS_SUCCESS)) {
+          status = phNxpNciHal_CheckRFCmdRespStatus();
+          /*STATUS INVALID PARAM 0x09*/
+          if (status == 0x09) {
+              phNxpNciHalRFConfigCmdRecSequence();
+              NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+          }
+      } else if (status != NFCSTATUS_SUCCESS) {
+          NXPLOG_NCIHAL_E("RF Settings BLK 4 failed");
+          NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     }
     retlen = 0;
@@ -1750,21 +1640,16 @@
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("RF Settings BLK 5 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+      if ((nfcFL.chipType != pn547C2) && (status == NFCSTATUS_SUCCESS)) {
+          status = phNxpNciHal_CheckRFCmdRespStatus();
+          /*STATUS INVALID PARAM 0x09*/
+          if (status == 0x09) {
+              phNxpNciHalRFConfigCmdRecSequence();
+              NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+          }
+      } else if (status != NFCSTATUS_SUCCESS) {
+          NXPLOG_NCIHAL_E("RF Settings BLK 5 failed");
+          NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     }
     retlen = 0;
@@ -1774,27 +1659,23 @@
                                    bufflen, &retlen);
     if (retlen > 0) {
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("RF Settings BLK 6 failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+      if ((nfcFL.chipType != pn547C2) && (status == NFCSTATUS_SUCCESS)) {
+          status = phNxpNciHal_CheckRFCmdRespStatus();
+          /*STATUS INVALID PARAM 0x09*/
+          if (status == 0x09) {
+              phNxpNciHalRFConfigCmdRecSequence();
+              NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+          }
+      } else if (status != NFCSTATUS_SUCCESS) {
+          NXPLOG_NCIHAL_E("RF Settings BLK 6 failed");
+          NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     }
     retlen = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    config_access = true;
-#endif
+    if (nfcFL.chipType != pn547C2) {
+        config_access = true;
+    }
+
     NXPLOG_NCIHAL_D("Performing NAME_NXP_CORE_CONF_EXTN Settings");
     isfound = GetNxpByteArrayValue(NAME_NXP_CORE_CONF_EXTN, (char*)buffer,
                                    bufflen, &retlen);
@@ -1803,68 +1684,54 @@
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
       if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("NXP Core configuration failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     }
 
-#if (NFC_NXP_ESE_ETSI12_PROP_INIT == true)
-    uint8_t swp_info_buff[2];
-    uint8_t swp_intf_status = 0x00;
-    uint8_t swp1A_intf_status = 0x00;
-    char nq_chipid[PROPERTY_VALUE_MAX] = {0};
-    int rc = 0;
-    NFCSTATUS status = NFCSTATUS_FAILED;
-    phNxpNci_EEPROM_info_t swp_intf_info;
+    if(nfcFL.eseFL._ESE_ETSI12_PROP_INIT) {
+        uint8_t swp_info_buff[2];
+        uint8_t swp_intf_status = 0x00;
+        uint8_t swp1A_intf_status = 0x00;
+        NFCSTATUS status = NFCSTATUS_FAILED;
+        phNxpNci_EEPROM_info_t swp_intf_info;
 
-    rc = __system_property_get("sys.nfc.nq.chipid", nq_chipid);
-    if (rc <= 0) {
-        NXPLOG_NCIHAL_E("get sys.nfc.nq.chipid fail, rc = %d\n", rc);
-    }
-    else {
-        NXPLOG_NCIHAL_D("sys.nfc.nq.chipid = %s\n", nq_chipid);
-    }
-    memset(swp_info_buff, 0, sizeof(swp_info_buff));
-    /*Read SWP1 data*/
-    memset(&swp_intf_info, 0, sizeof(swp_intf_info));
-    swp_intf_info.request_mode = GET_EEPROM_DATA;
-    swp_intf_info.request_type = EEPROM_SWP1_INTF;
-    swp_intf_info.buffer = &swp_intf_status;
-    swp_intf_info.bufflen = sizeof(uint8_t);
-    status = request_EEPROM(&swp_intf_info);
-    if (status == NFCSTATUS_OK)
-      swp_info_buff[0] = swp_intf_status;
-    else {
-      NXPLOG_NCIHAL_E("request_EEPROM error occured %d", status);
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
-     if ((rc > 0) && (strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX) != 0) && (strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX) != 0)) {
-        /*Read SWP1A data*/
+        memset(swp_info_buff, 0, sizeof(swp_info_buff));
+        /*Read SWP1 data*/
         memset(&swp_intf_info, 0, sizeof(swp_intf_info));
         swp_intf_info.request_mode = GET_EEPROM_DATA;
-        swp_intf_info.request_type = EEPROM_SWP1A_INTF;
-        swp_intf_info.buffer = &swp1A_intf_status;
+        swp_intf_info.request_type = EEPROM_SWP1_INTF;
+        swp_intf_info.buffer = &swp_intf_status;
         swp_intf_info.bufflen = sizeof(uint8_t);
         status = request_EEPROM(&swp_intf_info);
         if (status == NFCSTATUS_OK)
-            swp_info_buff[1] = swp1A_intf_status;
+            swp_info_buff[0] = swp_intf_status;
         else {
             NXPLOG_NCIHAL_E("request_EEPROM error occured %d", status);
-            retry_core_init_cnt++;
-            goto retry_core_init;
+            NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
         }
-	}
-#endif
-    phNxpNci_EEPROM_info_t mEEPROM_info = {.request_mode = 0};
-    mEEPROM_info.buffer = swp_info_buff;
-    mEEPROM_info.bufflen= sizeof(swp_info_buff);
-    mEEPROM_info.request_type = EEPROM_RF_CFG;
-    mEEPROM_info.request_mode = SET_EEPROM_DATA;
-    status = request_EEPROM(&mEEPROM_info);
-    NXPLOG_NCIHAL_D("Setting value %d %d", swp_info_buff[1], swp_info_buff[0]);
-#endif  // END_OF_NFC_NXP_ESE_ETSI12_PROP_INIT
+        if ((nfcFL.chipType == pn551) || (nfcFL.chipType == pn553) || (nfcFL.chipType == pn557)) {
+            /*Read SWP1A data*/
+            memset(&swp_intf_info, 0, sizeof(swp_intf_info));
+            swp_intf_info.request_mode = GET_EEPROM_DATA;
+            swp_intf_info.request_type = EEPROM_SWP1A_INTF;
+            swp_intf_info.buffer = &swp1A_intf_status;
+            swp_intf_info.bufflen = sizeof(uint8_t);
+            status = request_EEPROM(&swp_intf_info);
+            if (status == NFCSTATUS_OK)
+                swp_info_buff[1] = swp1A_intf_status;
+            else {
+                NXPLOG_NCIHAL_E("request_EEPROM error occured %d", status);
+                NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+            }
+        }
+        phNxpNci_EEPROM_info_t mEEPROM_info = {.request_mode = 0};
+        mEEPROM_info.buffer = swp_info_buff;
+        mEEPROM_info.bufflen= sizeof(swp_info_buff);
+        mEEPROM_info.request_type = EEPROM_RF_CFG;
+        mEEPROM_info.request_mode = SET_EEPROM_DATA;
+        status = request_EEPROM(&mEEPROM_info);
+        NXPLOG_NCIHAL_D("Setting value %d %d", swp_info_buff[1], swp_info_buff[0]);
+    }  // END_OF_NFC_NXP_ESE_ETSI12_PROP_INIT
 
     NXPLOG_NCIHAL_D("Performing NAME_NXP_CORE_CONF Settings");
     retlen = 0;
@@ -1875,8 +1742,7 @@
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
       if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("Core Set Config failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     }
 
@@ -1888,86 +1754,79 @@
       status = phNxpNciHal_send_ext_cmd(retlen, buffer);
       if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("Setting mifare keys failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     }
 
     retlen = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    config_access = false;
-#endif
+    if (nfcFL.chipType != pn547C2) {
+        config_access = false;
+    }
     isfound = GetNxpByteArrayValue(NAME_NXP_CORE_RF_FIELD, (char*)buffer,
                                    bufflen, &retlen);
     if (retlen > 0) {
-      /* NXP ACT Proprietary Ext */
-      status = phNxpNciHal_send_ext_cmd(retlen, buffer);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phNxpNciHal_CheckRFCmdRespStatus();
-        /*STATUS INVALID PARAM 0x09*/
-        if (status == 0x09) {
-          phNxpNciHalRFConfigCmdRecSequence();
-          retry_core_init_cnt++;
-          goto retry_core_init;
+        /* NXP ACT Proprietary Ext */
+        status = phNxpNciHal_send_ext_cmd(retlen, buffer);
+        if ((nfcFL.chipType != pn547C2) && (status == NFCSTATUS_SUCCESS)) {
+            status = phNxpNciHal_CheckRFCmdRespStatus();
+            /*STATUS INVALID PARAM 0x09*/
+            if (status == 0x09) {
+                phNxpNciHalRFConfigCmdRecSequence();
+                NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+            }
+        } else if (status != NFCSTATUS_SUCCESS) {
+            NXPLOG_NCIHAL_E("Setting NXP_CORE_RF_FIELD status failed");
+            NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
         }
-      } else
-#endif
-          if (status != NFCSTATUS_SUCCESS) {
-        NXPLOG_NCIHAL_E("Setting NXP_CORE_RF_FIELD status failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
-      }
     }
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    config_access = true;
-#endif
+    if (nfcFL.chipType != pn547C2) {
+        config_access = true;
+    }
     num = 0;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    /* NXP SWP switch timeout Setting*/
-    if (GetNxpNumValue(NAME_NXP_SWP_SWITCH_TIMEOUT, (void*)&num, sizeof(num))) {
-      // Check the permissible range [0 - 60]
-      if (num <= 60) {
-        if (0 < num) {
-          uint16_t timeout = num * 1000;
-          unsigned int timeoutHx = 0x0000;
 
-          uint8_t tmpbuffer[10];
-          snprintf((char*)tmpbuffer, 10, "%04x", timeout);
-          sscanf((const char*)tmpbuffer, "%x", (unsigned int*)&timeoutHx);
+    if (nfcFL.chipType != pn547C2) {
+        /* NXP SWP switch timeout Setting*/
+        if (GetNxpNumValue(NAME_NXP_SWP_SWITCH_TIMEOUT, (void*)&num, sizeof(num))) {
+            // Check the permissible range [0 - 60]
+            if (num <= 60) {
+                if (0 < num) {
+                    uint16_t timeout = num * 1000;
+                    unsigned int timeoutHx = 0x0000;
 
-          swp_switch_timeout_cmd[7] = (timeoutHx & 0xFF);
-          swp_switch_timeout_cmd[8] = ((timeoutHx & 0xFF00) >> 8);
+                    uint8_t tmpbuffer[10];
+                    snprintf((char*)tmpbuffer, 10, "%04x", timeout);
+                    sscanf((const char*)tmpbuffer, "%x", (unsigned int*)&timeoutHx);
+
+                    swp_switch_timeout_cmd[7] = (timeoutHx & 0xFF);
+                    swp_switch_timeout_cmd[8] = ((timeoutHx & 0xFF00) >> 8);
+                }
+
+                status = phNxpNciHal_send_ext_cmd(sizeof(swp_switch_timeout_cmd),
+                        swp_switch_timeout_cmd);
+                if (status != NFCSTATUS_SUCCESS) {
+                    NXPLOG_NCIHAL_E("SWP switch timeout Setting Failed");
+                    NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+                }
+            } else {
+                NXPLOG_NCIHAL_E("SWP switch timeout Setting Failed - out of range!");
+            }
         }
-
-        status = phNxpNciHal_send_ext_cmd(sizeof(swp_switch_timeout_cmd),
-                                          swp_switch_timeout_cmd);
+    }
+    if (nfcFL.chipType != pn547C2) {
+        status = phNxpNciHal_set_china_region_configs();
         if (status != NFCSTATUS_SUCCESS) {
-          NXPLOG_NCIHAL_E("SWP switch timeout Setting Failed");
-          retry_core_init_cnt++;
-          goto retry_core_init;
+            NXPLOG_NCIHAL_E("phNxpNciHal_set_china_region_configs failed");
+            NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
         }
-      } else {
-        NXPLOG_NCIHAL_E("SWP switch timeout Setting Failed - out of range!");
-      }
     }
-#endif
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    status = phNxpNciHal_set_china_region_configs();
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("phNxpNciHal_set_china_region_configs failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
+
+    if (nfcFL.chipType == pn547C2) {
+        status = phNxpNciHal_uicc_baud_rate();
+        if (status != NFCSTATUS_SUCCESS) {
+            NXPLOG_NCIHAL_E("Setting NXP_CORE_RF_FIELD status failed");
+            NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+        }
     }
-#endif
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
-    status = phNxpNciHal_uicc_baud_rate();
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("Setting NXP_CORE_RF_FIELD status failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-#endif
 
     config_access = false;
     // if recovery mode and length of last command is 0 then only reset the P2P
@@ -1979,8 +1838,7 @@
                                         p2p_listen_mode_routing_cmd);
       if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("P2P listen mode routing failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     }
 
@@ -1993,8 +1851,7 @@
                                           swp_full_pwr_mode_on_cmd);
         if (status != NFCSTATUS_SUCCESS) {
           NXPLOG_NCIHAL_E("SWP FULL PWR MODE SETTING ON CMD FAILED");
-          retry_core_init_cnt++;
-          goto retry_core_init;
+          NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
         }
       } else {
         swp_full_pwr_mode_on_cmd[7] = 0x00;
@@ -2002,37 +1859,35 @@
                                           swp_full_pwr_mode_on_cmd);
         if (status != NFCSTATUS_SUCCESS) {
           NXPLOG_NCIHAL_E("SWP FULL PWR MODE SETTING OFF CMD FAILED");
-          retry_core_init_cnt++;
-          goto retry_core_init;
+          NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
         }
       }
     }
-#if (NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG == true)
-    num = 0;
-    /* Android L AID Matching Platform Setting*/
-    if (GetNxpNumValue(NAME_AID_MATCHING_PLATFORM, (void*)&num, sizeof(num))) {
-      if (1 == num) {
-        status =
-            phNxpNciHal_send_ext_cmd(sizeof(android_l_aid_matching_mode_on_cmd),
-                                     android_l_aid_matching_mode_on_cmd);
-        if (status != NFCSTATUS_SUCCESS) {
-          NXPLOG_NCIHAL_E("Android L AID Matching Platform Setting Failed");
-          retry_core_init_cnt++;
-          goto retry_core_init;
+    if(nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG == true) {
+        num = 0;
+        /* Android L AID Matching Platform Setting*/
+        if (GetNxpNumValue(NAME_AID_MATCHING_PLATFORM, (void*)&num, sizeof(num))) {
+            if (1 == num) {
+                status =
+                        phNxpNciHal_send_ext_cmd(sizeof(android_l_aid_matching_mode_on_cmd),
+                                android_l_aid_matching_mode_on_cmd);
+                if (status != NFCSTATUS_SUCCESS) {
+                    NXPLOG_NCIHAL_E("Android L AID Matching Platform Setting Failed");
+                    NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+                }
+            } else if (2 == num) {
+                android_l_aid_matching_mode_on_cmd[7] = 0x00;
+                status =
+                        phNxpNciHal_send_ext_cmd(sizeof(android_l_aid_matching_mode_on_cmd),
+                                android_l_aid_matching_mode_on_cmd);
+                if (status != NFCSTATUS_SUCCESS) {
+                    NXPLOG_NCIHAL_E("Android L AID Matching Platform Setting Failed");
+                    NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+                }
+            }
         }
-      } else if (2 == num) {
-        android_l_aid_matching_mode_on_cmd[7] = 0x00;
-        status =
-            phNxpNciHal_send_ext_cmd(sizeof(android_l_aid_matching_mode_on_cmd),
-                                     android_l_aid_matching_mode_on_cmd);
-        if (status != NFCSTATUS_SUCCESS) {
-          NXPLOG_NCIHAL_E("Android L AID Matching Platform Setting Failed");
-          retry_core_init_cnt++;
-          goto retry_core_init;
-        }
-      }
     }
-#endif
+
     NXPLOG_NCIHAL_E("Resetting FW Dnld flag");
     fw_dwnld_flag = 0x00;
 
@@ -2052,14 +1907,13 @@
 
   config_access = false;
   if (!((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4))) {
-#if (NFC_NXP_ESE == TRUE)
-    status = phNxpNciHal_check_eSE_Session_Identity();
-    if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("Session id/ SWP intf reset Failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
-    }
-#endif
+      if(nfcFL.nfcNxpEse == true) {
+          status = phNxpNciHal_check_eSE_Session_Identity();
+          if (status != NFCSTATUS_SUCCESS) {
+              NXPLOG_NCIHAL_E("Session id/ SWP intf reset Failed");
+              NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
+          }
+      }
     status = phNxpNciHal_send_ext_cmd(sizeof(cmd_reset_nci), cmd_reset_nci);
     if (status == NFCSTATUS_SUCCESS) {
         if (nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
@@ -2080,21 +1934,22 @@
     }
   }
 
-#if (NXP_WIRED_MODE_STANDBY == true)
-  if (nxpncihal_ctrl.hal_boot_mode == NFC_OSU_BOOT_MODE) {
-    status = phNxpNciHal_send_nfcee_pwr_cntl_cmd(POWER_ALWAYS_ON);
-    if (status == NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("Send nfcee_pwrcntl cmd SUCCESS");
-    } else {
-      NXPLOG_NCIHAL_E("Send nfcee_pwrcntl cmd FAILED");
-    }
+  if(nfcFL.eseFL._WIRED_MODE_STANDBY == true) {
+      if (nxpncihal_ctrl.hal_boot_mode == NFC_OSU_BOOT_MODE) {
+          status = phNxpNciHal_send_nfcee_pwr_cntl_cmd(POWER_ALWAYS_ON);
+          if (status == NFCSTATUS_SUCCESS) {
+              NXPLOG_NCIHAL_E("Send nfcee_pwrcntl cmd SUCCESS");
+          } else {
+              NXPLOG_NCIHAL_E("Send nfcee_pwrcntl cmd FAILED");
+          }
+      }
+
+      if (pwr_link_required == true) {
+          phNxpNciHal_send_nfcee_pwr_cntl_cmd(POWER_ALWAYS_ON | LINK_ALWAYS_ON);
+          pwr_link_required = false;
+      }
   }
 
-  if (pwr_link_required == true) {
-    phNxpNciHal_send_nfcee_pwr_cntl_cmd(POWER_ALWAYS_ON | LINK_ALWAYS_ON);
-    pwr_link_required = false;
-  }
-#endif
   if ((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4)) {
     static phLibNfc_Message_t msg;
     uint16_t tmp_len = 0;
@@ -2114,8 +1969,7 @@
     if (status != NFCSTATUS_SUCCESS) {
       NXPLOG_NCIHAL_E(
           "Sending DH and NFCC core connection command as raw packet!! Failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
+      NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
     }
 
     NXPLOG_NCIHAL_E("Sending DH and NFCC mode set as raw packet!!");
@@ -2124,13 +1978,12 @@
 
     if (status != NFCSTATUS_SUCCESS) {
       NXPLOG_NCIHAL_E("Sending DH and NFCC mode set as raw packet!! Failed");
-      retry_core_init_cnt++;
-      goto retry_core_init;
+      NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
     }
    }
 
     // Set the proper screen state
-    switch (p_core_init_rsp_params[255]) {
+    switch (p_core_init_rsp_params[295]) {
       case 0x0:
       case 0x8:
         NXPLOG_NCIHAL_E("Last Screen State Sent = 0x0");
@@ -2173,8 +2026,7 @@
       if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E(
             "Sending Set Screen ON State Command as raw packet!! Failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
 
       NXPLOG_NCIHAL_E("Sending discovery as raw packet!!");
@@ -2182,8 +2034,7 @@
                                         (uint8_t*)&p_core_init_rsp_params[3]);
       if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E("Sending discovery as raw packet Failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
       }
     } else {
       NXPLOG_NCIHAL_E("Sending Set Screen OFF State Command as raw packet!!");
@@ -2199,8 +2050,7 @@
       if (status != NFCSTATUS_SUCCESS) {
         NXPLOG_NCIHAL_E(
             "Sending Set Screen OFF State Command as raw packet!! Failed");
-        retry_core_init_cnt++;
-        goto retry_core_init;
+        NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
         }
       }
 
@@ -2212,16 +2062,8 @@
     }
 
     NXPLOG_NCIHAL_E("Sending last command for Recovery ");
-    /*
-     * Field 35 will have total length of command HDR(2) + Length(1) + Cmd data(n).
-     * - 36,37 - HDR(2).
-     * - 38    - Length(1).
-     * If length of last command is 0 then it doesn't need to send last command.
-     * Field 35 - 38 will be 0x03 (HDR(2) + Length(1)) in all valid cases.
-     * This extra check is added to avoid sending corrupt data as command.
-     */
-    if ((p_core_init_rsp_params[35] > 0)&&
-            (p_core_init_rsp_params[35] - p_core_init_rsp_params[38] == 0x03)) {
+
+    if (p_core_init_rsp_params[35] == 1) {
       if (!((p_core_init_rsp_params[36] == 0x21) &&
             (p_core_init_rsp_params[37] == 0x03) &&
             (*(p_core_init_rsp_params + 1) == 0x01)) &&
@@ -2234,8 +2076,7 @@
       // if the last command is deactivate to idle and RF status is also idle ,
       // no need to execute the command .
       {
-        tmp_len = p_core_init_rsp_params[35];
-
+          tmp_len = p_core_init_rsp_params[38] + 3; //Field 38 gives length of data + 3 - header and length field
         /* Check for NXP ext before sending write */
         status = phNxpNciHal_write_ext(
             &tmp_len, (uint8_t*)&p_core_init_rsp_params[36],
@@ -2255,19 +2096,22 @@
           return NFCSTATUS_SUCCESS;
         }
 
-        p_core_init_rsp_params[35] = (uint8_t)tmp_len;
-
         status = phNxpNciHal_send_ext_cmd(
-            p_core_init_rsp_params[35], (uint8_t*)&p_core_init_rsp_params[36]);
+                tmp_len, (uint8_t*)&p_core_init_rsp_params[36]);
         if (status != NFCSTATUS_SUCCESS) {
           NXPLOG_NCIHAL_E("Sending last command for Recovery Failed");
-          retry_core_init_cnt++;
-          goto retry_core_init;
+          NXP_NCI_HAL_CORE_INIT_RECOVER(retry_core_init_cnt, retry_core_init);
         }
       }
     }
   }
 
+  isfound = GetNxpNumValue(NAME_NXP_NCI_PARSER_LIBRARY, &num, sizeof(num));
+  if(isfound > 0 && num == 0x01)
+  {
+    phNxpNciHal_configNciParser();
+  }
+
   retry_core_init_cnt = 0;
 
   if (buffer) {
@@ -2275,11 +2119,12 @@
     buffer = NULL;
   }
   config_access = false;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
+
+  if(nfcFL.chipType != pn547C2) {
   // initialize dummy FW recovery variables
   gRecFWDwnld = false;
   gRecFwRetryCount = 0;
-#endif
+}
   if (!((*p_core_init_rsp_params > 0) && (*p_core_init_rsp_params < 4)))
     phNxpNciHal_core_initialized_complete(status);
   else {
@@ -2319,13 +2164,10 @@
   uint8_t default_session[8] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
   uint8_t swp2_intf_status = 0x00;
   long retlen = 0;
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
-  static uint8_t disable_swp_intf[] = {0x20, 0x02, 0x09, 0x02, 0xA0, 0xEC,
+  static uint8_t disable_dual_swp_intf[] = {0x20, 0x02, 0x09, 0x02, 0xA0, 0xEC,
                                        0x01, 0x00, 0xA0, 0xD4, 0x01, 0x00};
-#else
   static uint8_t disable_swp_intf[] = {0x20, 0x02, 0x05, 0x01,
                                        0xA0, 0xEC, 0x01, 0x00};
-#endif
 
   phNxpNci_EEPROM_info_t swp_intf_info;
   uint8_t swp_info_buff[32] = {0};
@@ -2364,8 +2206,14 @@
 
   if (status == NFCSTATUS_FAILED) {
     /*Disable SWP1 and 1A interfaces*/
-    status =
-        phNxpNciHal_send_ext_cmd(sizeof(disable_swp_intf), disable_swp_intf);
+      if ((nfcFL.chipType == pn551) || (nfcFL.chipType == pn553) || (nfcFL.chipType == pn557)) {
+          status = phNxpNciHal_send_ext_cmd(sizeof(disable_dual_swp_intf),
+                  disable_dual_swp_intf);
+      }
+      else {
+          status = phNxpNciHal_send_ext_cmd(sizeof(disable_swp_intf),
+                  disable_swp_intf);
+      }
     if (status != NFCSTATUS_SUCCESS) {
       NXPLOG_NCIHAL_E("NXP disable SWP interface_set command failed");
     }
@@ -2374,7 +2222,6 @@
   return status;
 }
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 /******************************************************************************
  * Function         phNxpNciHal_CheckRFCmdRespStatus
  *
@@ -2387,6 +2234,11 @@
  *
  ******************************************************************************/
 NFCSTATUS phNxpNciHal_CheckRFCmdRespStatus() {
+    NXPLOG_NCIHAL_D("phNxpNciHal_CheckRFCmdRespStatus () Enter");
+    if(nfcFL.chipType == pn547C2) {
+        NXPLOG_NCIHAL_D("chipType : pn547C2. Not allowed. Returning");
+        return NFCSTATUS_FAILED;
+    }
   NFCSTATUS status = NFCSTATUS_SUCCESS;
   static uint16_t INVALID_PARAM = 0x09;
   if ((nxpncihal_ctrl.rx_data_len > 0) && (nxpncihal_ctrl.p_rx_data[2] > 0)) {
@@ -2418,52 +2270,45 @@
  *
  ******************************************************************************/
 NFCSTATUS phNxpNciHalRFConfigCmdRecSequence() {
+    NXPLOG_NCIHAL_D("phNxpNciHalRFConfigCmdRecSequence () Enter");
+    if(nfcFL.chipType == pn547C2) {
+        NXPLOG_NCIHAL_D("chipType : pn547C2. Not allowed. Returning");
+        return NFCSTATUS_FAILED;
+    }
   NFCSTATUS status = NFCSTATUS_SUCCESS;
   uint16_t recFWState = 1;
-#if (NXP_NFCC_FORCE_FW_DOWNLOAD == true)
-  gRecFWDwnld = false;
-  force_fw_download_req = true;
-#else
-  gRecFWDwnld = true;
-#endif
+  if(nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD == true) {
+      gRecFWDwnld = false;
+      force_fw_download_req = true;
+  } else {
+      gRecFWDwnld = true;
+  }
   gRecFwRetryCount++;
   if (gRecFwRetryCount > 0x03) {
     NXPLOG_NCIHAL_D("Max retry count for RF config FW recovery exceeded ");
     gRecFWDwnld = false;
-#if (NXP_NFCC_FORCE_FW_DOWNLOAD == true)
-    force_fw_download_req = false;
-#endif
+    if(nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD == true) {
+        force_fw_download_req = false;
+    }
     return NFCSTATUS_FAILED;
   }
   do {
     phDnldNfc_InitImgInfo();
     if (NFCSTATUS_SUCCESS == phNxpNciHal_CheckValidFwVersion()) {
       status = phNxpNciHal_fw_download();
-      if (status == NFCSTATUS_SUCCESS) {
-        status = phTmlNfc_Read(
-            nxpncihal_ctrl.p_cmd_data, NCI_MAX_DATA_LEN,
-            (pphTmlNfc_TransactCompletionCb_t)&phNxpNciHal_read_complete, NULL);
-        if (status != NFCSTATUS_PENDING) {
-          NXPLOG_NCIHAL_E("TML Read status error status = %x", status);
-          status = phTmlNfc_Shutdown();
-          status = NFCSTATUS_FAILED;
-          break;
-        }
-      } else {
-        status = NFCSTATUS_FAILED;
+      if (status == NFCSTATUS_FAILED) {
         break;
       }
     }
     gRecFWDwnld = false;
   } while (recFWState--);
   gRecFWDwnld = false;
-#if (NXP_NFCC_FORCE_FW_DOWNLOAD == true)
-  force_fw_download_req = false;
-#endif
+  if(nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD == true) {
+      force_fw_download_req = false;
+  }
   return status;
 }
-#endif
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
+
 /******************************************************************************
  * Function         phNxpNciHal_uicc_baud_rate
  *
@@ -2474,6 +2319,11 @@
  *
  ******************************************************************************/
 static NFCSTATUS phNxpNciHal_uicc_baud_rate() {
+    NXPLOG_NCIHAL_D("phNxpNciHal_uicc_baud_rate () Enter");
+    if(nfcFL.chipType != pn547C2) {
+        NXPLOG_NCIHAL_D("chipType != pn547C2. Not allowed. Returning");
+        return NFCSTATUS_FAILED;
+    }
   unsigned long configValue = 0x00;
   uint16_t bitRateCmdLen = 0x04;  // HDR + LEN + PARAMS   2 + 1 + 1
   uint8_t uiccTypeAValue = 0x00;  // read uicc type A value
@@ -2552,7 +2402,7 @@
   }
   return status;
 }
-#endif
+
 /******************************************************************************
  * Function         phNxpNciHal_core_initialized_complete
  *
@@ -2683,6 +2533,7 @@
   uint8_t numPrms = 0;
   uint8_t ptr = 4;
   unsigned long uiccListenMask = 0x00;
+  unsigned long eseListenMask = 0x00;
 
   if (!(GetNxpNumValue(NAME_NXP_UICC_LISTEN_TECH_MASK, &uiccListenMask,
                        sizeof(uiccListenMask)))) {
@@ -2690,6 +2541,12 @@
     NXPLOG_NCIHAL_D("UICC_LISTEN_TECH_MASK = 0x%0lX", uiccListenMask);
   }
 
+  if (!(GetNxpNumValue(NAME_NXP_ESE_LISTEN_TECH_MASK, &eseListenMask, 
+                      sizeof(eseListenMask)))) {
+    eseListenMask = 0x07;
+    NXPLOG_NCIHAL_D ("NXP_ESE_LISTEN_TECH_MASK = 0x%0lX", eseListenMask);
+  }
+
   if (nxpncihal_ctrl.hal_boot_mode == NFC_FAST_BOOT_MODE) {
     NXPLOG_NCIHAL_E(" HAL NFC fast init mode calling min_close %d",
                     nxpncihal_ctrl.hal_boot_mode);
@@ -2703,32 +2560,32 @@
   }
 
   CONCURRENCY_LOCK();
-#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true)
-  if (read_failed_disable_nfc) {
-    read_failed_disable_nfc = false;
-    goto close_and_return;
+  if (nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT &&
+          read_failed_disable_nfc) {
+      read_failed_disable_nfc = false;
+      goto close_and_return;
   }
-#endif
+
   if (write_unlocked_status == NFCSTATUS_FAILED) {
     NXPLOG_NCIHAL_D("phNxpNciHal_close i2c write failed .Clean and Return");
     goto close_and_return;
   }
 
-  if ((uiccListenMask & 0x1) == 0x01) {
+  if((uiccListenMask & 0x1) == 0x01 || (eseListenMask & 0x1) == 0x01) {
     NXPLOG_NCIHAL_D("phNxpNciHal_close (): Adding A passive listen");
     numPrms++;
     cmd_ce_discovery_nci[ptr++] = 0x80;
     cmd_ce_discovery_nci[ptr++] = 0x01;
     length += 2;
   }
-  if ((uiccListenMask & 0x2) == 0x02) {
+  if((uiccListenMask & 0x2) == 0x02 || (eseListenMask & 0x4) == 0x02) {
     NXPLOG_NCIHAL_D("phNxpNciHal_close (): Adding B passive listen");
     numPrms++;
     cmd_ce_discovery_nci[ptr++] = 0x81;
     cmd_ce_discovery_nci[ptr++] = 0x01;
     length += 2;
   }
-  if ((uiccListenMask & 0x4) == 0x04) {
+  if((uiccListenMask & 0x4) == 0x04 || (eseListenMask & 0x4) == 0x04) {
     NXPLOG_NCIHAL_D("phNxpNciHal_close (): Adding F passive listen");
     numPrms++;
     cmd_ce_discovery_nci[ptr++] = 0x82;
@@ -2753,9 +2610,16 @@
 
   status =
       phNxpNciHal_send_ext_cmd(sizeof(cmd_core_reset_nci), cmd_core_reset_nci);
+
   if (status != NFCSTATUS_SUCCESS) {
     NXPLOG_NCIHAL_E("NCI_CORE_RESET: Failed");
   }
+
+  if(gParserCreated)
+    {
+        phNxpNciHal_deinitParser();
+        gParserCreated = FALSE;
+    }
 close_and_return:
 
   if (NULL != gpphTmlNfc_Context->pDevHandle) {
@@ -3005,78 +2869,93 @@
   NFCSTATUS fm_mw_ver_check = NFCSTATUS_FAILED;
 
   switch (arg) {
-#if (NFC_NXP_ESE == TRUE)
     case HAL_NFC_IOCTL_P61_IDLE_MODE:
-      status = phTmlNfc_IoCtl(phTmlNfc_e_SetP61IdleMode);
-      if (NFCSTATUS_FAILED != status) {
-        if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
-        ret = 0;
-      }
+        if(nfcFL.nfcNxpEse) {
+            status = phTmlNfc_IoCtl(phTmlNfc_e_SetP61IdleMode);
+            if (NFCSTATUS_FAILED != status) {
+                if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
+                ret = 0;
+            }
+        }
       break;
     case HAL_NFC_IOCTL_P61_WIRED_MODE:
-      status = phTmlNfc_IoCtl(phTmlNfc_e_SetP61WiredMode);
-      if (NFCSTATUS_FAILED != status) {
-        if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
-        ret = 0;
-      }
+        if(nfcFL.nfcNxpEse) {
+            status = phTmlNfc_IoCtl(phTmlNfc_e_SetP61WiredMode);
+            if (NFCSTATUS_FAILED != status) {
+                if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
+                ret = 0;
+            }
+        }
       break;
     case HAL_NFC_IOCTL_P61_PWR_MODE:
-      status = phTmlNfc_IoCtl(phTmlNfc_e_GetP61PwrMode);
-      if (NFCSTATUS_FAILED != status) {
-        if (NULL != p_data)
-          pInpOutData->out.data.p61CurrentState = (uint16_t)status;
-        ret = 0;
-      }
+        if(nfcFL.nfcNxpEse) {
+            status = phTmlNfc_IoCtl(phTmlNfc_e_GetP61PwrMode);
+            if (NFCSTATUS_FAILED != status) {
+                if (NULL != p_data)
+                    pInpOutData->out.data.p61CurrentState = (uint16_t)status;
+                ret = 0;
+            }
+        }
       break;
     case HAL_NFC_IOCTL_P61_ENABLE_MODE:
-      status = phTmlNfc_IoCtl(phTmlNfc_e_SetP61EnableMode);
-      if (NFCSTATUS_FAILED != status) {
-        if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
-        ret = 0;
-      }
+        if(nfcFL.nfcNxpEse) {
+            status = phTmlNfc_IoCtl(phTmlNfc_e_SetP61EnableMode);
+            if (NFCSTATUS_FAILED != status) {
+                if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
+                ret = 0;
+            }
+        }
       break;
     case HAL_NFC_IOCTL_P61_DISABLE_MODE:
-      status = phTmlNfc_IoCtl(phTmlNfc_e_SetP61DisableMode);
-      if (NFCSTATUS_FAILED != status) {
-        if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
-        ret = 0;
-      }
+        if(nfcFL.nfcNxpEse) {
+            status = phTmlNfc_IoCtl(phTmlNfc_e_SetP61DisableMode);
+            if (NFCSTATUS_FAILED != status) {
+                if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
+                ret = 0;
+            }
+        }
       break;
     case HAL_NFC_IOCTL_P61_GET_ACCESS:
-      NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_P61_GET_ACCESS timeoutInMillisec = %d",
-                      pInpOutData->inp.data.timeoutMilliSec);
-      status = phTmlNfc_get_ese_access(gpphTmlNfc_Context->pDevHandle,
-                                       pInpOutData->inp.data.timeoutMilliSec);
-      if (NFCSTATUS_SUCCESS == status) {
-        ret = 0;
-      }
+        if(nfcFL.nfcNxpEse) {
+            NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_P61_GET_ACCESS timeoutInMillisec = %d",
+                    pInpOutData->inp.data.timeoutMilliSec);
+            status = phTmlNfc_get_ese_access(gpphTmlNfc_Context->pDevHandle,
+                    pInpOutData->inp.data.timeoutMilliSec);
+            if (NFCSTATUS_SUCCESS == status) {
+                ret = 0;
+            }
+        }
       break;
     case HAL_NFC_IOCTL_P61_REL_ACCESS:
-      status = phTmlNfc_IoCtl(phTmlNfc_e_RelP61Access);
-      NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_P61_REL_ACCESS retval = %d\n", status);
-      pInpOutData->out.data.status = status;
-      if (NFCSTATUS_SUCCESS == status) {
-        ret = 0;
-      }
+        if(nfcFL.nfcNxpEse) {
+            status = phTmlNfc_IoCtl(phTmlNfc_e_RelP61Access);
+            NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_P61_REL_ACCESS retval = %d\n", status);
+            pInpOutData->out.data.status = status;
+            if (NFCSTATUS_SUCCESS == status) {
+                ret = 0;
+            }
+        }
       break;
     case HAL_NFC_IOCTL_ESE_CHIP_RST:
-      status = phTmlNfc_IoCtl(phTmlNfc_e_eSEChipRstMode);
-      if (NFCSTATUS_FAILED != status) {
-        if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
-        ret = 0;
-      }
+        if(nfcFL.nfcNxpEse) {
+            status = phTmlNfc_IoCtl(phTmlNfc_e_eSEChipRstMode);
+            if (NFCSTATUS_FAILED != status) {
+                if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
+                ret = 0;
+            }
+        }
       break;
-#if (NXP_ESE_SVDD_SYNC == true)
     case HAL_NFC_IOCTL_REL_SVDD_WAIT:
-      status = phTmlNfc_rel_svdd_wait(gpphTmlNfc_Context->pDevHandle);
-      NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_P61_REL_SVDD_WAIT retval = %d\n", status);
-      pInpOutData->out.data.status = status;
-      if (NFCSTATUS_SUCCESS == status) {
-        ret = 0;
-      }
+        if(nfcFL.nfcNxpEse && nfcFL.eseFL._ESE_SVDD_SYNC) {
+            status = phTmlNfc_rel_svdd_wait(gpphTmlNfc_Context->pDevHandle);
+            NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_P61_REL_SVDD_WAIT retval = %d\n", status);
+            pInpOutData->out.data.status = status;
+            if (NFCSTATUS_SUCCESS == status) {
+                ret = 0;
+            }
+        }
       break;
-#endif
-#endif
+
     case HAL_NFC_IOCTL_SET_BOOT_MODE:
       if (NULL != p_data) {
         status = phNxpNciHal_set_Boot_Mode(pInpOutData->inp.data.bootMode);
@@ -3086,24 +2965,27 @@
         }
       }
       break;
-#if (NXP_ESE_JCOP_DWNLD_PROTECTION == true)
     case HAL_NFC_IOCTL_SET_JCP_DWNLD_ENABLE:
-      NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_SET_JCP_DWNLD_ENABLE: \n");
-      status = phTmlNfc_IoCtl(phTmlNfc_e_SetJcopDwnldEnable);
-      if (NFCSTATUS_FAILED != status) {
-        if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
-        ret = 0;
-      }
+        if(nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION) {
+            NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_SET_JCP_DWNLD_ENABLE: \n");
+            status = phTmlNfc_IoCtl(phTmlNfc_e_SetJcopDwnldEnable);
+            if (NFCSTATUS_FAILED != status) {
+                if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
+                ret = 0;
+            }
+        }
       break;
     case HAL_NFC_IOCTL_SET_JCP_DWNLD_DISABLE:
-      NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_SET_JCP_DWNLD_DISABLE: \n");
-      status = phTmlNfc_IoCtl(phTmlNfc_e_SetJcopDwnldDisable);
-      if (NFCSTATUS_FAILED != status) {
-        if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
-        ret = 0;
-      }
+        if(nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION) {
+            NXPLOG_NCIHAL_D("HAL_NFC_IOCTL_SET_JCP_DWNLD_DISABLE: \n");
+            status = phTmlNfc_IoCtl(phTmlNfc_e_SetJcopDwnldDisable);
+            if (NFCSTATUS_FAILED != status) {
+                if (NULL != p_data) pInpOutData->out.data.status = (uint16_t)status;
+                ret = 0;
+            }
+        }
       break;
-#endif
+
     case HAL_NFC_IOCTL_GET_CONFIG_INFO:
       if (mGetCfg_info) {
         memcpy(pInpOutData->out.data.nxpNciAtrInfo, mGetCfg_info,
@@ -3126,14 +3008,14 @@
       }
       break;
     case HAL_NFC_IOCTL_FW_DWNLD:
-      status = phNxpNciHal_FwDwnld();
+      status = phNxpNciHal_FwDwnld(*(uint16_t*)p_data);
       pInpOutData->out.data.fwDwnldStatus = (uint16_t)status;
       if (NFCSTATUS_SUCCESS == status) {
         ret = 0;
       }
-#if (NXP_NFCC_FORCE_FW_DOWNLOAD == true)
-      force_fw_download_req = false;
-#endif
+      if(nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD) {
+          force_fw_download_req = false;
+      }
       break;
     case HAL_NFC_IOCTL_FW_MW_VER_CHECK:
       fm_mw_ver_check = phNxpNciHal_fw_mw_ver_check();
@@ -3174,6 +3056,10 @@
           }
       }
       break;
+    case HAL_NFC_IOCTL_GET_FEATURE_LIST:
+        pInpOutData->out.data.chipType = (uint8_t)phNxpNciHal_getChipType();
+        ret = 0;
+        break;
     default:
       NXPLOG_NCIHAL_E("%s : Wrong arg = %ld", __func__, arg);
       break;
@@ -3183,7 +3069,71 @@
 }
 
 /******************************************************************************
- * Function         phNxpNciHal_set_clock
+ * Function         phNxpNciHal_nfccClockCfgRead
+ *
+ * Description      This function is called for loading a data strcuture from
+ *                  the config file with clock source and clock frequency values
+ *
+ * Returns          void.
+ *
+ ******************************************************************************/
+static void phNxpNciHal_nfccClockCfgRead(void)
+{
+    unsigned long num = 0;
+    int isfound = 0;
+
+    nxpprofile_ctrl.bClkSrcVal = 0;
+    nxpprofile_ctrl.bClkFreqVal = 0;
+    nxpprofile_ctrl.bTimeout = 0;
+
+    isfound = GetNxpNumValue(NAME_NXP_SYS_CLK_SRC_SEL, &num, sizeof(num));
+    if (isfound > 0)
+    {
+        nxpprofile_ctrl.bClkSrcVal = num;
+    }
+
+    num = 0;
+    isfound = 0;
+    isfound = GetNxpNumValue(NAME_NXP_SYS_CLK_FREQ_SEL, &num, sizeof(num));
+    if (isfound > 0)
+    {
+        nxpprofile_ctrl.bClkFreqVal = num;
+    }
+
+    num = 0;
+    isfound = 0;
+    isfound = GetNxpNumValue(NAME_NXP_SYS_CLOCK_TO_CFG, &num, sizeof(num));
+    if (isfound > 0)
+    {
+        nxpprofile_ctrl.bTimeout = num;
+    }
+
+    NXPLOG_FWDNLD_D("gphNxpNciHal_fw_IoctlCtx.bClkSrcVal = 0x%x", nxpprofile_ctrl.bClkSrcVal);
+    NXPLOG_FWDNLD_D("gphNxpNciHal_fw_IoctlCtx.bClkFreqVal = 0x%x", nxpprofile_ctrl.bClkFreqVal);
+    NXPLOG_FWDNLD_D("gphNxpNciHal_fw_IoctlCtx.bClkFreqVal = 0x%x", nxpprofile_ctrl.bTimeout);
+
+    if ((nxpprofile_ctrl.bClkSrcVal < CLK_SRC_XTAL) ||
+            (nxpprofile_ctrl.bClkSrcVal > CLK_SRC_PLL))
+    {
+        NXPLOG_FWDNLD_E("Clock source value is wrong in config file, setting it as default");
+        nxpprofile_ctrl.bClkSrcVal = NXP_SYS_CLK_SRC_SEL;
+    }
+    if ((nxpprofile_ctrl.bClkFreqVal < CLK_FREQ_13MHZ) ||
+            (nxpprofile_ctrl.bClkFreqVal > CLK_FREQ_52MHZ))
+    {
+        NXPLOG_FWDNLD_E("Clock frequency value is wrong in config file, setting it as default");
+        nxpprofile_ctrl.bClkFreqVal = NXP_SYS_CLK_FREQ_SEL;
+    }
+    if ((nxpprofile_ctrl.bTimeout < CLK_TO_CFG_DEF) || (nxpprofile_ctrl.bTimeout > CLK_TO_CFG_MAX))
+    {
+        NXPLOG_FWDNLD_E("Clock timeout value is wrong in config file, setting it as default");
+        nxpprofile_ctrl.bTimeout = CLK_TO_CFG_DEF;
+    }
+
+}
+
+/******************************************************************************
+ * Function         phNxpNciHal_txNfccClockSetCmd
  *
  * Description      This function is called after successfull download
  *                  to apply the clock setting provided in config file
@@ -3191,21 +3141,159 @@
  * Returns          void.
  *
  ******************************************************************************/
-static void phNxpNciHal_set_clock(void) {
+static void phNxpNciHal_txNfccClockSetCmd(void) {
   NFCSTATUS status = NFCSTATUS_FAILED;
-  int retryCount = 0;
+
+if(nfcFL.chipType == pn553) {
+    static uint8_t set_clock_cmd[] = {0x20, 0x02, 0x05, 0x01, 0xA0, 0x03, 0x01, 0x08};
+    unsigned long  clockSource, frequency;
+    uint32_t pllSetRetryCount = 3, dpllSetRetryCount = 3;
+    uint8_t *pCmd4PllSetting;
+    uint8_t *pCmd4DpllSetting;
+    uint32_t pllCmdLen, dpllCmdLen;
+    int srcCfgFound, freqCfgFound;
+
+    srcCfgFound = (GetNxpNumValue(NAME_NXP_SYS_CLK_SRC_SEL, &clockSource, sizeof(clockSource)) > 0);
+
+    freqCfgFound = (GetNxpNumValue(NAME_NXP_SYS_CLK_FREQ_SEL, &frequency, sizeof(frequency)) > 0);
+
+    NXPLOG_NCIHAL_D("%s : clock source = %lu, frequency = %lu", __FUNCTION__, clockSource, frequency);
+
+    if(srcCfgFound && freqCfgFound && (clockSource == CLK_SRC_PLL))
+    {
+         phNxpNciClock.isClockSet = TRUE;
+
+        switch(frequency)
+        {
+            case CLK_FREQ_13MHZ:
+
+                NXPLOG_NCIHAL_D("PLL setting for CLK_FREQ_13MHZ");
+                uint8_t cmd4PllSetting13MHz[] = SET_CONFIG_CMD_PLL_13MHZ;
+                pCmd4PllSetting = cmd4PllSetting13MHz;
+                pllCmdLen = sizeof(cmd4PllSetting13MHz);
+
+                uint8_t cmd4DpllSetting13MHz[] = SET_CONFIG_CMD_DPLL_13MHZ;
+                pCmd4DpllSetting = cmd4DpllSetting13MHz;
+                dpllCmdLen = sizeof(cmd4DpllSetting13MHz);
+
+            break;
+
+            case CLK_FREQ_19_2MHZ:
+
+                NXPLOG_NCIHAL_D("PLL setting for CLK_FREQ_19_2MHZ");
+                uint8_t cmd4PllSetting19_2MHz[] = SET_CONFIG_CMD_PLL_19_2MHZ;
+                pCmd4PllSetting = cmd4PllSetting19_2MHz;
+                pllCmdLen = sizeof(cmd4PllSetting19_2MHz);
+
+                uint8_t cmd4DpllSetting19_2MHz[] = SET_CONFIG_CMD_DPLL_19_2MHZ;
+                pCmd4DpllSetting = cmd4DpllSetting19_2MHz;
+                dpllCmdLen = sizeof(cmd4DpllSetting19_2MHz);
+
+            break;
+
+            case CLK_FREQ_24MHZ:
+
+                NXPLOG_NCIHAL_D("PLL setting for CLK_FREQ_24MHZ");
+                uint8_t cmd4PllSetting24MHz[] = SET_CONFIG_CMD_PLL_24MHZ;
+                pCmd4PllSetting = cmd4PllSetting24MHz;
+                pllCmdLen = sizeof(cmd4PllSetting24MHz);
+
+                uint8_t cmd4DpllSetting24MHz[] = SET_CONFIG_CMD_DPLL_24MHZ;
+                pCmd4DpllSetting = cmd4DpllSetting24MHz;
+                dpllCmdLen = sizeof(cmd4DpllSetting24MHz);
+
+            break;
+
+            case CLK_FREQ_26MHZ:
+
+                NXPLOG_NCIHAL_D("PLL setting for CLK_FREQ_26MHZ");
+                uint8_t cmd4PllSetting26MHz[] = SET_CONFIG_CMD_PLL_26MHZ;
+                pCmd4PllSetting = cmd4PllSetting26MHz;
+                pllCmdLen = sizeof(cmd4PllSetting26MHz);
+
+                uint8_t cmd4DpllSetting26MHz[] = SET_CONFIG_CMD_DPLL_26MHZ;
+                pCmd4DpllSetting = cmd4DpllSetting26MHz;
+                dpllCmdLen = sizeof(cmd4DpllSetting26MHz);
+
+            break;
+            case CLK_FREQ_32MHZ:
+
+                NXPLOG_NCIHAL_D("PLL setting for CLK_FREQ_32MHZ");
+                uint8_t cmd4PllSetting32MHz[] = SET_CONFIG_CMD_PLL_32MHZ;
+                pCmd4PllSetting = cmd4PllSetting32MHz;
+                pllCmdLen = sizeof(cmd4PllSetting32MHz);
+
+                uint8_t cmd4DpllSetting32MHz[] = SET_CONFIG_CMD_DPLL_32MHZ;
+                pCmd4DpllSetting = cmd4DpllSetting32MHz;
+                dpllCmdLen = sizeof(cmd4DpllSetting32MHz);
+
+            break;
+
+            case CLK_FREQ_38_4MHZ:
+
+                NXPLOG_NCIHAL_D("PLL setting for CLK_FREQ_38_4MHZ");
+                uint8_t cmd4PllSetting38_4MHz[] = SET_CONFIG_CMD_PLL_38_4MHZ;
+                pCmd4PllSetting = cmd4PllSetting38_4MHz;
+                pllCmdLen = sizeof(cmd4PllSetting38_4MHz);
+
+                uint8_t cmd4DpllSetting38_4MHz[] = SET_CONFIG_CMD_DPLL_38_4MHZ;
+                pCmd4DpllSetting = cmd4DpllSetting38_4MHz;
+                dpllCmdLen = sizeof(cmd4DpllSetting38_4MHz);
+
+            break;
+
+            default:
+                phNxpNciClock.isClockSet = FALSE;
+                NXPLOG_NCIHAL_E("ERROR: Invalid clock frequency!!");
+                return;
+        }
+    }
+    switch(clockSource)
+    {
+        case CLK_SRC_PLL:
+            while(status != NFCSTATUS_SUCCESS && pllSetRetryCount -- > 0)
+                status = phNxpNciHal_send_ext_cmd(pllCmdLen, pCmd4PllSetting);
+
+            status = NFCSTATUS_FAILED;
+
+            while(status != NFCSTATUS_SUCCESS && dpllSetRetryCount -- > 0)
+                status = phNxpNciHal_send_ext_cmd(dpllCmdLen, pCmd4DpllSetting);
+
+            break;
+
+        case CLK_SRC_XTAL:
+            status = phNxpNciHal_send_ext_cmd(sizeof(set_clock_cmd), set_clock_cmd);
+            if (status != NFCSTATUS_SUCCESS)
+            {
+                NXPLOG_NCIHAL_E("XTAL clock setting failed !!");
+            }
+            break;
+
+        default:            NXPLOG_NCIHAL_E("Wrong clock source. Dont apply any modification");
+                            return;
+    }
+    phNxpNciClock.isClockSet = FALSE;
+    if(status == NFCSTATUS_SUCCESS && phNxpNciClock.p_rx_data[3] == NFCSTATUS_SUCCESS)
+    {
+        NXPLOG_NCIHAL_D("PLL and DPLL settings applied successfully");
+    }
+    return;
+}
+else {
+    NXPLOG_NCIHAL_D("Clock setting older version");
+  }
+
+int retryCount = 0;
 
 retrySetclock:
   phNxpNciClock.isClockSet = true;
   if (nxpprofile_ctrl.bClkSrcVal == CLK_SRC_PLL) {
     static uint8_t set_clock_cmd[] = {0x20, 0x02, 0x09, 0x02, 0xA0, 0x03,
                                       0x01, 0x11, 0xA0, 0x04, 0x01, 0x01};
-#if (NFC_NXP_CHIP_TYPE == PN553 || NFC_NXP_CHIP_TYPE == PN557)
-    uint8_t param_clock_src = 0x00;
-#else
-    uint8_t param_clock_src = CLK_SRC_PLL;
+    uint8_t param_clock_src;
+
+    param_clock_src = CLK_SRC_PLL;
     param_clock_src = param_clock_src << 3;
-#endif
 
     if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_13MHZ) {
       param_clock_src |= 0x00;
@@ -3221,11 +3309,9 @@
       param_clock_src |= 0x05;
     } else {
       NXPLOG_NCIHAL_E("Wrong clock freq, send default PLL@19.2MHz");
-#if (NFC_NXP_CHIP_TYPE == PN553 || NFC_NXP_CHIP_TYPE == PN557)
-      param_clock_src = 0x01;
-#else
+
       param_clock_src = 0x11;
-#endif
+
     }
 
     set_clock_cmd[7] = param_clock_src;
@@ -3262,7 +3348,69 @@
 }
 
 /******************************************************************************
- * Function         phNxpNciHal_check_clock_config
+ * Function         phNxpNciHal_determineConfiguredClockSrc
+ *
+ * Description      This function determines and encodes clock source based on
+ *                  clock frequency
+ *
+ * Returns          encoded form of clock source
+ *
+ *****************************************************************************/
+int   phNxpNciHal_determineConfiguredClockSrc()
+{
+    NFCSTATUS status = NFCSTATUS_FAILED;
+    uint8_t param_clock_src = CLK_SRC_PLL;
+    if (nxpprofile_ctrl.bClkSrcVal == CLK_SRC_PLL)
+    {
+
+    if(nfcFL.chipType == pn553) {
+        param_clock_src = param_clock_src << 3;
+    }
+
+        if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_13MHZ)
+        {
+            param_clock_src |= 0x00;
+        }
+        else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_19_2MHZ)
+        {
+            param_clock_src |= 0x01;
+        }
+        else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_24MHZ)
+        {
+            param_clock_src |= 0x02;
+        }
+        else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_26MHZ)
+        {
+            param_clock_src |= 0x03;
+        }
+        else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_38_4MHZ)
+        {
+            param_clock_src |= 0x04;
+        }
+        else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_52MHZ)
+        {
+            param_clock_src |= 0x05;
+        }
+        else
+        {
+            NXPLOG_NCIHAL_E("Wrong clock freq, send default PLL@19.2MHz");
+            param_clock_src = 0x11;
+        }
+    }
+    else if(nxpprofile_ctrl.bClkSrcVal == CLK_SRC_XTAL)
+    {
+        param_clock_src = 0x08;
+
+    }
+    else
+    {
+        NXPLOG_NCIHAL_E("Wrong clock source. Dont apply any modification")
+    }
+    return param_clock_src;
+  }
+
+/******************************************************************************
+ * Function         phNxpNciHal_nfccClockCfgApply
  *
  * Description      This function is called after successfull download
  *                  to check if clock settings in config file and chip
@@ -3271,27 +3419,32 @@
  * Returns          void.
  *
  ******************************************************************************/
-NFCSTATUS phNxpNciHal_check_clock_config(void) {
+NFCSTATUS phNxpNciHal_nfccClockCfgApply(void) {
   NFCSTATUS status = NFCSTATUS_SUCCESS;
-  uint8_t param_clock_src;
+  uint8_t nfcc_cfg_clock_src, nfcc_cur_clock_src;
+  uint8_t nfcc_clock_set_needed;
   static uint8_t get_clock_cmd[] = {0x20, 0x03, 0x07, 0x03, 0xA0,
                                     0x02, 0xA0, 0x03, 0xA0, 0x04};
+  phNxpNciHal_nfccClockCfgRead();
   phNxpNciClock.isClockSet = true;
-  phNxpNciHal_get_clk_freq();
   status = phNxpNciHal_send_ext_cmd(sizeof(get_clock_cmd), get_clock_cmd);
+  phNxpNciClock.isClockSet = false;
 
   if (status != NFCSTATUS_SUCCESS) {
     NXPLOG_NCIHAL_E("unable to retrieve get_clk_src_sel");
     return status;
   }
-  param_clock_src = check_config_parameter();
-  if (phNxpNciClock.p_rx_data[12] == param_clock_src &&
-      phNxpNciClock.p_rx_data[16] == nxpprofile_ctrl.bTimeout) {
-    phNxpNciClock.issetConfig = false;
-  } else {
-    phNxpNciClock.issetConfig = true;
+  
+  nfcc_cfg_clock_src = phNxpNciHal_determineConfiguredClockSrc();
+  nfcc_cur_clock_src = phNxpNciClock.p_rx_data[12];
+
+  nfcc_clock_set_needed = (nfcc_cfg_clock_src != nfcc_cur_clock_src ||
+                              phNxpNciClock.p_rx_data[16] == nxpprofile_ctrl.bTimeout) ?\
+                              true : false;
+  if(nfcc_clock_set_needed) {
+    NXPLOG_NCIHAL_D ("Setting Clock Source and Frequency");
+    phNxpNciHal_txNfccClockSetCmd();
   }
-  phNxpNciClock.isClockSet = false;
 
   return status;
 }
@@ -3309,13 +3462,16 @@
   int isfound = 0;
   unsigned long rf_enable = false;
   unsigned long cfg_blk_chk_enable = false;
+  unsigned long cma_bypass_enable = false;
   int rf_val = 0;
   int flag_send_tianjin_config = true;
   int flag_send_transit_config = true;
+  int flag_send_cmabypass_config = true;
   uint8_t retry_cnt = 0;
   int enable_bit = 0;
   int enable_blk_num_chk_bit = 0;
   static uint8_t get_rf_cmd[] = {0x20, 0x03, 0x03, 0x01, 0xA0, 0x85};
+  NXPLOG_NCIHAL_D("phNxpNciHal_set_china_region_configs - Enter");
 
 retry_send_ext:
   if (retry_cnt > 3) {
@@ -3341,29 +3497,31 @@
   isfound = (GetNxpNumValue(NAME_NXP_CHINA_TIANJIN_RF_ENABLED,
                             (void*)&rf_enable, sizeof(rf_enable)));
   if (isfound > 0) {
-    enable_bit = rf_val & 0x40;
-#if (NXP_NFCC_MIFARE_TIANJIN == true)
-    if ((enable_bit != 0x40) && (rf_enable == 1)) {
-      phNxpNciRfSet.p_rx_data[10] |= 0x40;  // Enable if it is disabled
-    } else if ((enable_bit == 0x40) && (rf_enable == 0)) {
-      phNxpNciRfSet.p_rx_data[10] &= 0xBF;  // Disable if it is Enabled
-    } else {
-      flag_send_tianjin_config = false;  // No need to change in RF setting
-    }
-#else
-    {
-      enable_bit = phNxpNciRfSet.p_rx_data[11] & 0x10;
-      if ((rf_enable == 1) && (enable_bit != 0x10)) {
-        NXPLOG_NCIHAL_E("Setting Non-Mifare reader for china tianjin");
-        phNxpNciRfSet.p_rx_data[11] |= 0x10;
-      } else if ((rf_enable == 0) && (enable_bit == 0x10)) {
-        NXPLOG_NCIHAL_E("Setting Non-Mifare reader for china tianjin");
-        phNxpNciRfSet.p_rx_data[11] &= 0xEF;
-      } else {
-        flag_send_tianjin_config = false;
+      enable_bit = rf_val & 0x40;
+      if(nfcFL.nfccFL._NFCC_MIFARE_TIANJIN) {
+          if ((enable_bit != 0x40) && (rf_enable == 1)) {
+              phNxpNciRfSet.p_rx_data[10] |= 0x40;  // Enable if it is disabled
+          } else if ((enable_bit == 0x40) && (rf_enable == 0)) {
+              phNxpNciRfSet.p_rx_data[10] &= 0xBF;  // Disable if it is Enabled
+          } else {
+              flag_send_tianjin_config = false;  // No need to change in RF setting
+          }
       }
-    }
-#endif
+      else {
+          enable_bit = phNxpNciRfSet.p_rx_data[11] & 0x10;
+          if ((rf_enable == 1) && (enable_bit != 0x10)) {
+              NXPLOG_NCIHAL_E("Setting Non-Mifare reader for china tianjin");
+              phNxpNciRfSet.p_rx_data[11] |= 0x10;
+          } else if ((rf_enable == 0) && (enable_bit == 0x10)) {
+              NXPLOG_NCIHAL_E("Setting Non-Mifare reader for china tianjin");
+              phNxpNciRfSet.p_rx_data[11] &= 0xEF;
+          } else {
+              flag_send_tianjin_config = false;
+          }
+      }
+  }
+  else {
+    flag_send_tianjin_config = false;
   }
   /*check if china block number check is required*/
   rf_val = phNxpNciRfSet.p_rx_data[8];
@@ -3380,8 +3538,30 @@
       flag_send_transit_config = false;  // No need to change in RF setting
     }
   }
+  else
+    {
+        flag_send_transit_config = FALSE;  // No need to change in RF setting
+    }
 
-  if (flag_send_tianjin_config || flag_send_transit_config) {
+    isfound = (GetNxpNumValue(NAME_NXP_CN_TRANSIT_CMA_BYPASSMODE_ENABLE, (void *)&cma_bypass_enable, sizeof(cma_bypass_enable)));
+    if(isfound >0) {
+        if(cma_bypass_enable == 0 && ((phNxpNciRfSet.p_rx_data[10] & 0x80) == 1)) {
+            NXPLOG_NCIHAL_D("Disable CMA_BYPASSMODE Supports EMVCo PICC Complaincy");
+            phNxpNciRfSet.p_rx_data[10] &=~0x80;        //set 24th bit of RF MISC SETTING to 0 for EMVCo PICC Complaincy support
+        }
+        else if(cma_bypass_enable == 1 && ((phNxpNciRfSet.p_rx_data[10] & 0x80) == 0)) {
+            NXPLOG_NCIHAL_D("Enable CMA_BYPASSMODE bypass the ISO14443-3A state machine from READY to ACTIVE and backward compatibility with MIfrae Reader ");
+            phNxpNciRfSet.p_rx_data[10] |=0x80;        //set 24th bit of RF MISC SETTING to 1 for backward compatibility with MIfrae Reader
+        }
+        else {
+            flag_send_cmabypass_config = FALSE;  // No need to change in RF setting
+        }
+    }
+    else {
+       flag_send_cmabypass_config = FALSE;
+    }
+
+  if (flag_send_tianjin_config || flag_send_transit_config || flag_send_cmabypass_config) {
     static uint8_t set_rf_cmd[] = {0x20, 0x02, 0x08, 0x01, 0xA0, 0x85,
                                    0x04, 0x50, 0x08, 0x68, 0x00};
     memcpy(&set_rf_cmd[4], &phNxpNciRfSet.p_rx_data[5], 7);
@@ -3396,38 +3576,6 @@
   return status;
 }
 
-int check_config_parameter() {
-  NFCSTATUS status = NFCSTATUS_FAILED;
-  uint8_t param_clock_src = CLK_SRC_PLL;
-  if (nxpprofile_ctrl.bClkSrcVal == CLK_SRC_PLL) {
-#if (NFC_NXP_CHIP_TYPE != PN553 && NFC_NXP_CHIP_TYPE != PN557)
-    param_clock_src = param_clock_src << 3;
-#endif
-
-    if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_13MHZ) {
-      param_clock_src |= 0x00;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_19_2MHZ) {
-      param_clock_src |= 0x01;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_24MHZ) {
-      param_clock_src |= 0x02;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_26MHZ) {
-      param_clock_src |= 0x03;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_38_4MHZ) {
-      param_clock_src |= 0x04;
-    } else if (nxpprofile_ctrl.bClkFreqVal == CLK_FREQ_52MHZ) {
-      param_clock_src |= 0x05;
-    } else {
-      NXPLOG_NCIHAL_E("Wrong clock freq, send default PLL@19.2MHz");
-      param_clock_src = 0x11;
-    }
-  } else if (nxpprofile_ctrl.bClkSrcVal == CLK_SRC_XTAL) {
-    param_clock_src = 0x08;
-
-  } else {
-    NXPLOG_NCIHAL_E("Wrong clock source. Dont apply any modification")
-  }
-  return param_clock_src;
-}
 /******************************************************************************
  * Function         phNxpNciHal_enable_i2c_fragmentation
  *
@@ -3522,22 +3670,43 @@
   int ret = 0;
   NFCSTATUS status = NFCSTATUS_FAILED;
   const char config_eseinfo_path[] = "/data/nfc/nfaStorage.bin1";
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true || \
-     NXP_NFCC_DYNAMIC_DUAL_UICC == true)
-  static uint8_t reset_ese_session_identity_set[] = {
-      0x20, 0x02, 0x22, 0x03, 0xA0, 0xEA, 0x08, 0xFF, 0xFF, 0xFF,
-      0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0x1E, 0x08, 0xFF, 0xFF,
-      0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0xEB, 0x08, 0xFF,
-      0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
-#else
-  static uint8_t reset_ese_session_identity_set[] = {
-      0x20, 0x02, 0x17, 0x02, 0xA0, 0xEA, 0x08, 0xFF, 0xFF,
-      0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0xEB, 0x08,
-      0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
-#endif
+  uint8_t *reset_ese_session_identity_set;
+  uint8_t ese_session_dyn_uicc_nv[] = {
+            0x20, 0x02, 0x17, 0x02,0xA0, 0xEA, 0x08, 0xFF, 0xFF, 0xFF,
+            0xFF, 0xFF, 0xFF, 0xFF, 0xFF,0xA0, 0x1E, 0x08, 0xFF, 0xFF,
+            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
+  uint8_t ese_session_dyn_uicc[] = {
+            0x20, 0x02, 0x22, 0x03, 0xA0, 0xEA, 0x08, 0xFF, 0xFF, 0xFF,
+            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0x1E, 0x08, 0xFF, 0xFF,
+            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0xEB, 0x08, 0xFF,
+            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
+  uint8_t ese_session_nv[] = {
+            0x20, 0x02, 0x0C, 0x01, 0xA0, 0xEA, 0x08, 0xFF, 0xFF,
+            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
+  uint8_t ese_session[] = {
+            0x20, 0x02, 0x17, 0x02, 0xA0, 0xEA, 0x08, 0xFF, 0xFF,
+            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0xEB, 0x08,
+            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
+  if(nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH || nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC) {
+    if(nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY) {
+      reset_ese_session_identity_set = ese_session_dyn_uicc_nv;
+    }
+    else {
+      reset_ese_session_identity_set = ese_session_dyn_uicc;
+    }
+  }
+  else {
+    if(nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY) {
+      reset_ese_session_identity_set = ese_session_nv;
+    }
+    else {
+      reset_ese_session_identity_set = ese_session;
+    }
+  }
+
 
 #ifdef PN547C2_FACTORY_RESET_DEBUG
-  static uint8_t reset_ese_session_identity[] = {0x20, 0x03, 0x05, 0x02,
+  static uint8_t reset_session_identity[] = {0x20, 0x03, 0x05, 0x02,
                                                  0xA0, 0xEA, 0xA0, 0xEB};
 #endif
   if (stat(config_eseinfo_path, &st) == -1) {
@@ -3550,21 +3719,24 @@
   if (ret == -1) {
 #ifdef PN547C2_FACTORY_RESET_DEBUG
     /* NXP ACT Proprietary Ext */
-    status = phNxpNciHal_send_ext_cmd(sizeof(reset_ese_session_identity),
-                                      reset_ese_session_identity);
+    status = phNxpNciHal_send_ext_cmd(sizeof(reset_session_identity),
+            reset_session_identity);
     if (status != NFCSTATUS_SUCCESS) {
-      NXPLOG_NCIHAL_E("NXP reset_ese_session_identity command failed");
+      NXPLOG_NCIHAL_E("NXP reset_session_identity command failed");
     }
 #endif
-    status = phNxpNciHal_send_ext_cmd(sizeof(reset_ese_session_identity_set),
-                                      reset_ese_session_identity_set);
+    if((nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) &&
+            (nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC)) {
+        status = phNxpNciHal_send_ext_cmd(sizeof(reset_ese_session_identity_set),
+                reset_ese_session_identity_set);
+    }
     if (status != NFCSTATUS_SUCCESS) {
       NXPLOG_NCIHAL_E("NXP reset_ese_session_identity_set command failed");
     }
 #ifdef PN547C2_FACTORY_RESET_DEBUG
     /* NXP ACT Proprietary Ext */
-    status = phNxpNciHal_send_ext_cmd(sizeof(reset_ese_session_identity),
-                                      reset_ese_session_identity);
+    status = phNxpNciHal_send_ext_cmd(sizeof(reset_session_identity),
+            reset_session_identity);
     if (status != NFCSTATUS_SUCCESS) {
       NXPLOG_NCIHAL_E("NXP reset_ese_session_identity command failed");
     }
@@ -3721,3 +3893,172 @@
 
   return status;
 }
+
+tNFC_chipType configChipType(uint8_t* msg, uint16_t msg_len) {
+    tNFC_chipType chipType;
+    const uint16_t offsetHwVersion = 24;
+    const uint16_t offsetFwVersion = 25;
+
+    if((msg != NULL) && (msg_len != 0)) {
+        if((msg[0] == 0x60 && msg[1] == 00) ||
+                ((offsetFwVersion < msg_len) && (msg[offsetFwVersion] == 0x12))) {
+            chipType = pn81T;
+        }
+        else if(offsetHwVersion < msg_len) {
+            ALOGD ("%s HwVersion : 0x%02x", __func__,msg[offsetHwVersion]);
+            switch(msg[offsetHwVersion]){
+
+            case 0x40 : //PN553 A0
+            case 0x41 : //PN553 B0
+                chipType = pn553;
+                break;
+
+            case 0x50 : //PN553 A0 + P73
+            case 0x51 : //PN553 B0 + P73
+                chipType = pn80T;
+                break;
+
+            case 0x98 :
+                chipType = pn551;
+                break;
+
+            case 0xA8 :
+                chipType = pn67T;
+                break;
+
+            case 0x28 :
+            case 0x48 :
+                chipType = pn548C2;
+                break;
+
+            case 0x18 :
+            case 0x58 :
+                chipType = pn66T;
+                break;
+
+            default :
+                chipType = pn80T;
+            }
+        }
+        else {
+            ALOGD ("%s Wrong msg_len. Setting Default ChiptType pn80T",__func__);
+            chipType = pn80T;
+        }
+    }
+    return chipType;
+}
+
+/*******************************************************************************
+**
+** Function         phNxpNciHal_configFeatureList
+**
+** Description      Configures the featureList based on chip type
+**                  HW Version information number will provide chipType.
+**                  HW Version can be obtained from CORE_INIT_RESPONSE(NCI 1.0)
+**                  or CORE_RST_NTF(NCI 2.0)
+**
+** Parameters       CORE_INIT_RESPONSE/CORE_RST_NTF, len
+**
+** Returns          none
+*******************************************************************************/
+void phNxpNciHal_configFeatureList(uint8_t* init_rsp, uint16_t rsp_len) {
+    nxpncihal_ctrl.chipType = configChipType(init_rsp,rsp_len);
+    tNFC_chipType chipType = nxpncihal_ctrl.chipType;
+    CONFIGURE_FEATURELIST(chipType);
+    NXPLOG_NCIHAL_D("NFC_GetFeatureList ()chipType = %d", chipType);
+}
+
+/*******************************************************************************
+**
+** Function         phNxpNciHal_getChipType
+**
+** Description      Gets the chipType which is configured during bootup
+**
+** Parameters       none
+**
+** Returns          chipType
+*******************************************************************************/
+tNFC_chipType phNxpNciHal_getChipType() {
+    return nxpncihal_ctrl.chipType;
+}
+
+/*******************************************************************************
+**
+** Function         phNxpNciHal_configLxDebug(void)
+**
+** Description      Helper function to configure LxDebug modes
+**
+** Parameters       none
+**
+** Returns          void
+*******************************************************************************/
+void phNxpNciHal_configNciParser(void)
+{
+    NFCSTATUS status = NFCSTATUS_SUCCESS;
+    unsigned long num = 0;
+    uint8_t  isfound = 0;
+    static uint8_t cmd_lxdebug[] = { 0x20, 0x02, 0x06, 0x01, 0xA0, 0x1D, 0x02, 0x00, 0x00 };
+
+    isfound = GetNxpNumValue(NAME_NXP_CORE_PROP_SYSTEM_DEBUG, &num, sizeof(num));
+
+    if(isfound > 0)
+    {
+        if(num == 0x00)
+        {
+            NXPLOG_NCIHAL_D("Disable LxDebug");
+        }
+        else if(num == 0x01)
+        {
+            NXPLOG_NCIHAL_D("Enable L1 RF NTF debugs");
+            cmd_lxdebug[7] = 0x10;
+        }
+        else if(num == 0x02)
+        {
+            NXPLOG_NCIHAL_D("Enable L2 RF NTF debugs");
+            cmd_lxdebug[7] = 0x01;
+        }
+        else if(num == 0x03)
+        {
+            NXPLOG_NCIHAL_D("Enable L1 & L2 RF NTF debugs");
+            cmd_lxdebug[7] = 0x31;
+        }
+        else if(num == 0x04)
+        {
+            NXPLOG_NCIHAL_D("Enable L1 & L2 & RSSI NTF debugs");
+            cmd_lxdebug[7] = 0x31;
+            cmd_lxdebug[8] = 0x01;
+        }
+        else if(num == 0x05)
+        {
+            NXPLOG_NCIHAL_D("Enable L2 & Felica RF NTF debugs");
+            cmd_lxdebug[7] = 0x03;
+        }
+        else
+            NXPLOG_NCIHAL_E("Invalid Level, Disable LxDebug");
+
+        status = phNxpNciHal_send_ext_cmd(sizeof(cmd_lxdebug)/sizeof(cmd_lxdebug[0]),cmd_lxdebug);
+        if (status != NFCSTATUS_SUCCESS)
+        {
+            NXPLOG_NCIHAL_E("Set lxDebug config failed");
+        }
+    }
+
+    // try initializing parser library
+    NXPLOG_NCIHAL_D("Try Init Parser gParserCreated:%d",gParserCreated);
+
+    if(!gParserCreated) {
+        gParserCreated = phNxpNciHal_initParser();
+    } else {
+        NXPLOG_NCIHAL_D("Parser Already Initialized");
+    }
+
+    if(gParserCreated) {
+        NXPLOG_NCIHAL_D("Parser Initialized Successfully");
+        if(isfound) {
+            NXPLOG_NCIHAL_D("Setting lxdebug levels in library");
+            phNxpNciHal_parsePacket(cmd_lxdebug,sizeof(cmd_lxdebug)/sizeof(cmd_lxdebug[0]));
+        }
+    } else {
+        NXPLOG_NCIHAL_E("Parser Library Not Available");
+    }
+}
diff --git a/halimpl/pn54x/hal/phNxpNciHal.h b/halimpl/pn54x/hal/phNxpNciHal.h
index 9cd784a..3839631 100644
--- a/halimpl/pn54x/hal/phNxpNciHal.h
+++ b/halimpl/pn54x/hal/phNxpNciHal.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
  * Not a Contribution.
  *
  * Copyright (C) 2015 NXP Semiconductors
@@ -21,10 +21,7 @@
 
 #include <hardware/nfc.h>
 #include <phNxpNciHal_utils.h>
-#include <NXP_ESE_Features.h>
-#ifndef NXP_NFCC_FEATURES_H
-#include <NXP_NFCC_Features.h>
-#endif
+#include "NxpNfcCapability.h"
 
 /********************* Definitions and structures *****************************/
 #define MAX_RETRY_COUNT 5
@@ -61,7 +58,8 @@
     HAL_NFC_IOCTL_REL_SVDD_WAIT,
     HAL_NFC_IOCTL_SET_JCP_DWNLD_ENABLE,
     HAL_NFC_IOCTL_SET_JCP_DWNLD_DISABLE,
-    HAL_NFC_IOCTL_SET_NFC_SERVICE_PID
+    HAL_NFC_IOCTL_SET_NFC_SERVICE_PID,
+    HAL_NFC_IOCTL_GET_FEATURE_LIST
 };
 
 #define NCI_VERSION_2_0 0x20
@@ -147,6 +145,7 @@
   uint8_t read_retry_cnt;
   phNxpNciInfo_t nci_info;
   uint8_t hal_boot_mode;
+  tNFC_chipType chipType;
 } phNxpNciHal_Control_t;
 
 typedef struct {
@@ -157,7 +156,6 @@
 typedef struct phNxpNciClock {
   bool_t isClockSet;
   uint8_t p_rx_data[20];
-  bool_t issetConfig;
 } phNxpNciClock_t;
 
 typedef struct phNxpNciRfSetting {
@@ -250,4 +248,31 @@
 static int phNxpNciHal_fw_mw_ver_check();
 NFCSTATUS request_EEPROM(phNxpNci_EEPROM_info_t* mEEPROM_info);
 NFCSTATUS phNxpNciHal_send_nfcee_pwr_cntl_cmd(uint8_t type);
+
+/*******************************************************************************
+**
+** Function         phNxpNciHal_configFeatureList
+**
+** Description      Configures the featureList based on chip type
+**                  HW Version information number will provide chipType.
+**                  HW Version can be obtained from CORE_INIT_RESPONSE(NCI 1.0)
+**                  or CORE_RST_NTF(NCI 2.0)
+**
+** Parameters       CORE_INIT_RESPONSE/CORE_RST_NTF, len
+**
+** Returns          none
+*******************************************************************************/
+void phNxpNciHal_configFeatureList(uint8_t* init_rsp, uint16_t rsp_len);
+
+/*******************************************************************************
+**
+** Function         phNxpNciHal_getChipType
+**
+** Description      Gets the chipType which is configured during bootup
+**
+** Parameters       none
+**
+** Returns          chipType
+*******************************************************************************/
+tNFC_chipType phNxpNciHal_getChipType();
 #endif /* _PHNXPNCIHAL_H_ */
diff --git a/halimpl/pn54x/hal/phNxpNciHal_Kovio.c b/halimpl/pn54x/hal/phNxpNciHal_Kovio.c
index 4c6ecc7..7cd95de 100644
--- a/halimpl/pn54x/hal/phNxpNciHal_Kovio.c
+++ b/halimpl/pn54x/hal/phNxpNciHal_Kovio.c
@@ -152,13 +152,11 @@
 
   send_to_upper_kovio = 1;
   if ((p_ntf[0] == 0x61) && (p_ntf[1] == 0x05)) {
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-    if ((p_ntf[5] == 0x81) && (p_ntf[6] == 0x70))
-#else
-    if ((p_ntf[5] == 0x8A) && (p_ntf[6] == 0x77))
-#endif
-    {
-      if (kovio_detected == 0) {
+      if (((nfcFL.chipType != pn547C2) &&
+              ((p_ntf[5] == 0x81) && (p_ntf[6] == 0x70))) ||
+              ((nfcFL.chipType != pn547C2)
+                      && ((p_ntf[5] == 0x8A) && (p_ntf[6] == 0x77)))) {
+          if (kovio_detected == 0) {
         if ((*p_len - 9) < KOVIO_ACT_NTF_TEMP_BUFF_LEN) {
           p_ntf[2] += 1;
           memcpy(tBuff, &p_ntf[9], *p_len - 9);
diff --git a/halimpl/pn54x/hal/phNxpNciHal_ext.c b/halimpl/pn54x/hal/phNxpNciHal_ext.c
index 94daaf7..805fe9b 100644
--- a/halimpl/pn54x/hal/phNxpNciHal_ext.c
+++ b/halimpl/pn54x/hal/phNxpNciHal_ext.c
@@ -25,6 +25,7 @@
 #include <phNxpLog.h>
 #include <phNxpConfig.h>
 #include <phDnldNfc.h>
+#include "phNxpNciHal_nciParser.h"
 
 /* Timeout value to wait for response from PN548AD */
 #define HAL_EXTNS_WRITE_RSP_TIMEOUT (2500)
@@ -54,6 +55,7 @@
 extern uint32_t wFwVerRsp;
 /* External global variable to get FW version from FW file*/
 extern uint16_t wFwVer;
+extern bool_t gParserCreated;
 uint16_t fw_maj_ver;
 uint16_t rom_version;
 /* local buffer to store CORE_INIT response */
@@ -64,9 +66,8 @@
 static uint32_t iCoreRstNtfLen;
 
 extern uint32_t timeoutTimerId;
-#if (NXP_ESE_SVDD_SYNC == true)
 extern uint32_t gSvddSyncOff_Delay; /*default delay*/
-#endif
+tNfc_featureList nfcFL;
 extern NFCSTATUS read_retry();
 /************** HAL extension functions ***************************************/
 static void hal_extns_write_rsp_timeout_cb(uint32_t TimerId, void* pContext);
@@ -111,6 +112,13 @@
   NFCSTATUS status = NFCSTATUS_SUCCESS;
   uint16_t rf_technology_length_param = 0;
 
+  /*parse and decode LxDebug Notifications*/
+    if(p_ntf[0] == 0x6F && (p_ntf[1] == 0x35 || p_ntf[1] == 0x36))
+    {
+        if(gParserCreated)
+            phNxpNciHal_parsePacket(p_ntf,*p_len);
+    }
+
   if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x03 &&
       p_ntf[5] == 0x05 && nxpprofile_ctrl.profile_type == EMV_CO_PROFILE) {
     p_ntf[4] = 0xFF;
@@ -195,11 +203,8 @@
       case 0x80:
         NXPLOG_NCIHAL_D("NxpNci: Protocol = MIFARE");
         break;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       case 0x81:
-#else
       case 0x8A:
-#endif
         NXPLOG_NCIHAL_D("NxpNci: Protocol = Kovio");
         break;
       default:
@@ -226,11 +231,8 @@
       case 0x06:
         NXPLOG_NCIHAL_D("NxpNci: Mode = 15693 Passive Poll");
         break;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
       case 0x70:
-#else
       case 0x77:
-#endif
         NXPLOG_NCIHAL_D("NxpNci: Mode = Kovio");
         break;
       case 0x80:
@@ -271,6 +273,7 @@
     }
     if(nxpncihal_ctrl.nci_info.nci_version != NCI_VERSION_2_0)
     {
+#if 0 /* this is work around added initially. not required now */
       if (p_ntf[p_ntf[2] + 2] == 0x00) {
         NXPLOG_NCIHAL_D("> Data of ISO-15693");
         p_ntf[2]--;
@@ -278,6 +281,7 @@
       } else {
         p_ntf[p_ntf[2] + 2] |= 0x01;
       }
+#endif
     }
   } else if (p_ntf[2] == 0x02 && p_ntf[1] == 0x00 && icode_detected == 1) {
     NXPLOG_NCIHAL_D("> ICODE EOF response do not send to upper layer");
@@ -296,10 +300,10 @@
     p_ntf[4] = 0x00;
     *p_len = 5;
   }
-#if (NXP_NFCC_FORCE_NCI1_0_INIT == true)
+if(nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT == true) {
   /*Handle NFCC2.0 in NCI2.0 Boot sequence*/
   /*After TML sent Hard Reset, we may or may not receive this notification*/
-  else if (p_ntf[0] == 0x60 && p_ntf[1] == 0x00 && p_ntf[2] == 0x09 &&
+  if (p_ntf[0] == 0x60 && p_ntf[1] == 0x00 && p_ntf[2] == 0x09 &&
            p_ntf[3] == 0x01) {
     NXPLOG_NCIHAL_D("CORE_RESET_NTF 2 reason NFCC Powered ON received !");
   } else if (p_ntf[0] == 0x40 && p_ntf[1] == 0x00 && p_ntf[2] == 0x03 &&
@@ -340,87 +344,92 @@
              nxpncihal_ctrl.is_wait_for_ce_ntf) {
     NXPLOG_NCIHAL_D("CORE_INIT_RSP 2 received !");
   }
-  /*Handle NFCC2.0 in NCI1.0 Boot sequence*/
-  else if ((p_ntf[0] == 0x40) && (p_ntf[1] == 0x01) &&
-           !nxpncihal_ctrl.is_wait_for_ce_ntf) {
-#else
-  else if ((p_ntf[0] == 0x40) && (p_ntf[1] == 0x01)) {
-#endif
+}
+/*Handle NFCC2.0 in NCI1.0 Boot sequence*/
+if (((nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT) &&
+        ((p_ntf[0] == 0x40) && (p_ntf[1] == 0x01) &&
+                !nxpncihal_ctrl.is_wait_for_ce_ntf)) ||
+        ((!nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT) &&
+                ((p_ntf[0] == 0x40) && (p_ntf[1] == 0x01)))) {
     if (nxpncihal_ctrl.nci_info.nci_version == NCI_VERSION_2_0) {
-      NXPLOG_NCIHAL_D("CORE_INIT_RSP NCI2.0 received !");
+        NXPLOG_NCIHAL_D("CORE_INIT_RSP NCI2.0 received !");
     } else {
-    NXPLOG_NCIHAL_D("CORE_INIT_RSP 1 received !");
-    int len = p_ntf[2] + 2; /*include 2 byte header*/
-    wFwVerRsp = (((uint32_t)p_ntf[len - 2]) << 16U) |
+        NXPLOG_NCIHAL_D("CORE_INIT_RSP 1 received !");
+
+        if(!nxpncihal_ctrl.hal_open_status && nxpncihal_ctrl.nci_info.nci_version != NCI_VERSION_2_0) {
+            phNxpNciHal_configFeatureList(p_ntf,*p_len);
+        }
+        int len = p_ntf[2] + 2; /*include 2 byte header*/
+        wFwVerRsp = (((uint32_t)p_ntf[len - 2]) << 16U) |
                 (((uint32_t)p_ntf[len - 1]) << 8U) | p_ntf[len];
-    if (wFwVerRsp == 0) status = NFCSTATUS_FAILED;
-    iCoreInitRspLen = *p_len;
-    memcpy(bCoreInitRsp, p_ntf, *p_len);
-    NXPLOG_NCIHAL_D("NxpNci> FW Version: %x.%x.%x", p_ntf[len - 2],
-                    p_ntf[len - 1], p_ntf[len]);
-    NXPLOG_NCIHAL_D("NxpNci> Model id: %x", p_ntf[len - 3] >> 4);
-    fw_maj_ver = p_ntf[len - 1];
-    rom_version = p_ntf[len - 2];
-    /* Before FW version: 10.01.12, products are PN548c2(for model id = 0) and
-     * PN66T(for model id = 1)*/
-    if (p_ntf[len - 2] == 0x10) {
-      if ((p_ntf[len - 1] < 0x01) |
-          ((p_ntf[len - 1] == 0x01) &&
-           (p_ntf[len] <= 0x11)))  // for FW < 10.01.12
-      {
-        NXPLOG_NCIHAL_D("NxpNci> Model ID: %x", p_ntf[len - 3] >> 4);
-        if (0x01 == (p_ntf[len - 3] >> 4)) {
-          NXPLOG_NCIHAL_D("NxpNci> Product: PN66T");
+        if (wFwVerRsp == 0) status = NFCSTATUS_FAILED;
+        iCoreInitRspLen = *p_len;
+        memcpy(bCoreInitRsp, p_ntf, *p_len);
+        NXPLOG_NCIHAL_D("NxpNci> FW Version: %x.%x.%x", p_ntf[len - 2],
+                p_ntf[len - 1], p_ntf[len]);
+        NXPLOG_NCIHAL_D("NxpNci> Model id: %x", p_ntf[len - 3] >> 4);
+        fw_maj_ver = p_ntf[len - 1];
+        rom_version = p_ntf[len - 2];
+        /* Before FW version: 10.01.12, products are PN548c2(for model id = 0) and
+         * PN66T(for model id = 1)*/
+        if (p_ntf[len - 2] == 0x10) {
+            if ((p_ntf[len - 1] < 0x01) |
+                    ((p_ntf[len - 1] == 0x01) &&
+                            (p_ntf[len] <= 0x11)))  // for FW < 10.01.12
+            {
+                NXPLOG_NCIHAL_D("NxpNci> Model ID: %x", p_ntf[len - 3] >> 4);
+                if (0x01 == (p_ntf[len - 3] >> 4)) {
+                    NXPLOG_NCIHAL_D("NxpNci> Product: PN66T");
+                } else {
+                    NXPLOG_NCIHAL_D("NxpNci> Product: PN548C2");
+                }
+            } else if ((p_ntf[len - 1] == 0x01) &&
+                    (p_ntf[len] >= 0x12))  // for FW >= 10.01.12
+            {
+                NXPLOG_NCIHAL_D("NxpNci> Model ID: %x", p_ntf[len - 3] >> 4);
+                /* From FW version: 10.01.12, product names based on Hardware Version
+                 * number */
+                switch (p_ntf[len - 3]) {
+                case 0x08:
+                    NXPLOG_NCIHAL_D("NxpNci> Product: PN546");
+                    break;
+                case 0x18:
+                    NXPLOG_NCIHAL_D("NxpNci> Product: PN66T");
+                    break;
+                case 0x28:
+                    NXPLOG_NCIHAL_D("NxpNci> Product: PN548C2");
+                    break;
+                case 0x38:
+                    NXPLOG_NCIHAL_D("NxpNci> Product: PN66U");
+                    break;
+                case 0x48:
+                    NXPLOG_NCIHAL_D("NxpNci> Product: NQ210");
+                    break;
+                case 0x58:
+                    NXPLOG_NCIHAL_D("NxpNci> Product: NQ220");
+                    break;
+                case 0x68:
+                    NXPLOG_NCIHAL_D("NxpNci> Product: NPC300");
+                    break;
+                case 0x78:
+                    NXPLOG_NCIHAL_D("NxpNci> Product: NPC320");
+                    break;
+                case 0x88:
+                    NXPLOG_NCIHAL_D("NxpNci> Product: PN7150");
+                    break;
+                case 0x98:
+                    NXPLOG_NCIHAL_D("NxpNci> Product: PN548C3");
+                    break;
+                default:
+                    NXPLOG_NCIHAL_D("NxpNci> Product: Invalid");
+                    break;
+                }
+            }
         } else {
-          NXPLOG_NCIHAL_D("NxpNci> Product: PN548C2");
+            /* Do Nothing */
         }
-      } else if ((p_ntf[len - 1] == 0x01) &&
-                 (p_ntf[len] >= 0x12))  // for FW >= 10.01.12
-      {
-        NXPLOG_NCIHAL_D("NxpNci> Model ID: %x", p_ntf[len - 3] >> 4);
-        /* From FW version: 10.01.12, product names based on Hardware Version
-         * number */
-        switch (p_ntf[len - 3]) {
-          case 0x08:
-            NXPLOG_NCIHAL_D("NxpNci> Product: PN546");
-            break;
-          case 0x18:
-            NXPLOG_NCIHAL_D("NxpNci> Product: PN66T");
-            break;
-          case 0x28:
-            NXPLOG_NCIHAL_D("NxpNci> Product: PN548C2");
-            break;
-          case 0x38:
-            NXPLOG_NCIHAL_D("NxpNci> Product: PN66U");
-            break;
-          case 0x48:
-            NXPLOG_NCIHAL_D("NxpNci> Product: NQ210");
-            break;
-          case 0x58:
-            NXPLOG_NCIHAL_D("NxpNci> Product: NQ220");
-            break;
-          case 0x68:
-            NXPLOG_NCIHAL_D("NxpNci> Product: NPC300");
-            break;
-          case 0x78:
-            NXPLOG_NCIHAL_D("NxpNci> Product: NPC320");
-            break;
-          case 0x88:
-            NXPLOG_NCIHAL_D("NxpNci> Product: PN7150");
-            break;
-          case 0x98:
-            NXPLOG_NCIHAL_D("NxpNci> Product: PN548C3");
-            break;
-          default:
-            NXPLOG_NCIHAL_D("NxpNci> Product: Invalid");
-            break;
-        }
-      }
-    } else {
-      /* Do Nothing */
     }
-  }
-  }
+}
 
   else if (p_ntf[0] == 0x42 && p_ntf[1] == 0x00 && ee_disc_done == 0x01) {
     NXPLOG_NCIHAL_D(
@@ -450,18 +459,17 @@
     status = NFCSTATUS_FAILED;
     return status;
   }
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
-  else if (p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x02 &&
-           p_ntf[5] == 0x80 && p_ntf[6] == 0x00) {
-    NXPLOG_NCIHAL_D(
-        "Going through the iso-dep interface mifare protocol with sak value "
-        "not equal to 0x20");
-    rf_technology_length_param = p_ntf[9];
-    if ((p_ntf[9 + rf_technology_length_param] & 0x20) != 0x20) {
-      p_ntf[4] = 0x80;
-    }
+  else if ((nfcFL.chipType == pn547C2) &&
+          (p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x02 &&
+                  p_ntf[5] == 0x80 && p_ntf[6] == 0x00)) {
+      NXPLOG_NCIHAL_D(
+              "Going through the iso-dep interface mifare protocol with sak value "
+              "not equal to 0x20");
+      rf_technology_length_param = p_ntf[9];
+      if ((p_ntf[9 + rf_technology_length_param] & 0x20) != 0x20) {
+          p_ntf[4] = 0x80;
+      }
   }
-#endif
   /*
   else if(p_ntf[0] == 0x61 && p_ntf[1] == 0x05 && p_ntf[4] == 0x01 && p_ntf[5]
   == 0x00 && p_ntf[6] == 0x01)
@@ -491,6 +499,7 @@
 ******************************************************************************/
 static NFCSTATUS phNxpNciHal_ext_process_nfc_init_rsp(uint8_t* p_ntf, uint16_t* p_len) {
    NFCSTATUS status = NFCSTATUS_SUCCESS;
+   uint8_t nfcdep_detected = 0x00;
     /* Parsing CORE_RESET_RSP and CORE_RESET_NTF to update NCI version.*/
     if(p_ntf == NULL || *p_len == 0x00) {
       return NFCSTATUS_FAILED;
@@ -510,6 +519,7 @@
            p_ntf[3] == CORE_RESET_TRIGGER_TYPE_POWERED_ON) {
           NXPLOG_NCIHAL_D("CORE_RESET_NTF NCI2.0 reason CORE_RESET_CMD received !");
           nxpncihal_ctrl.nci_info.nci_version  = p_ntf[5];
+          phNxpNciHal_configFeatureList(p_ntf,*p_len);
           int len = p_ntf[2] + 2; /*include 2 byte header*/
           wFwVerRsp = (((uint32_t)p_ntf[len - 2])<< 16U)|
           (((uint32_t)p_ntf[len - 1])<< 8U)|p_ntf[len];
@@ -517,18 +527,16 @@
           rom_version = p_ntf[len - 2];
           NXPLOG_NCIHAL_D ("NxpNci> FW Version: %x.%x.%x", p_ntf[len-2], p_ntf[len-1], p_ntf[len]);
           }else {
-#ifdef AOSP_NFCDEP
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-          if (nfcdep_detected &&
-          !(p_ntf[2] == 0x06 && p_ntf[3] == 0xA0 && p_ntf[4] == 0x00 &&
-          ((p_ntf[5] == 0xC9 && p_ntf[6] == 0x95 && p_ntf[7] == 0x00 &&
-          p_ntf[8] == 0x00) ||
-          (p_ntf[5] == 0x07 && p_ntf[6] == 0x39 && p_ntf[7] == 0xF2 &&
-          p_ntf[8] == 0x00)))) {
-          nfcdep_detected = 0x00;
-        }
-#endif
-#endif
+              if(nfcFL.chipType == pn548C2) {
+                  if (nfcdep_detected &&
+                          !(p_ntf[2] == 0x06 && p_ntf[3] == 0xA0 && p_ntf[4] == 0x00 &&
+                                  ((p_ntf[5] == 0xC9 && p_ntf[6] == 0x95 && p_ntf[7] == 0x00 &&
+                                          p_ntf[8] == 0x00) ||
+                                          (p_ntf[5] == 0x07 && p_ntf[6] == 0x39 && p_ntf[7] == 0xF2 &&
+                                                  p_ntf[8] == 0x00)))) {
+                      nfcdep_detected = 0x00;
+                  }
+              }
         phNxpNciHal_emergency_recovery();
         status = NFCSTATUS_FAILED;
       } /* Parsing CORE_INIT_RSP*/
@@ -751,14 +759,13 @@
     nxpprofile_ctrl.profile_type = NFC_FORUM_PROFILE;
     status = NFCSTATUS_SUCCESS;
   }
-#if (NXP_ESE_SVDD_SYNC == true)
-  else if (p_cmd_data[0] == 0x2F && p_cmd_data[1] == 0x31 &&
-           p_cmd_data[2] == 0x01 && p_cmd_data[3] == 0x00) {
+  else if ((nfcFL.eseFL._ESE_SVDD_SYNC) &&
+          (p_cmd_data[0] == 0x2F && p_cmd_data[1] == 0x31 &&
+                  p_cmd_data[2] == 0x01 && p_cmd_data[3] == 0x00)) {
     NXPLOG_NCIHAL_D("SVDD Sync Off Command - delay it by %d ms",
                     gSvddSyncOff_Delay);
     usleep(gSvddSyncOff_Delay * 1000);
   }
-#endif
   if (nxpprofile_ctrl.profile_type == EMV_CO_PROFILE) {
     if (p_cmd_data[0] == 0x21 && p_cmd_data[1] == 0x06 &&
         p_cmd_data[2] == 0x01 && p_cmd_data[3] == 0x03) {
@@ -800,18 +807,18 @@
   } else if (p_cmd_data[3] == 0x81 && p_cmd_data[4] == 0x01 &&
              p_cmd_data[5] == 0x03) {
     NXPLOG_NCIHAL_D("> Going through the set host list");
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
+    if(nfcFL.chipType != pn547C2) {
         *cmd_len = 8;
 
         p_cmd_data[2] = 0x05;
         p_cmd_data[6] = 0x02;
         p_cmd_data[7] = 0xC0;
-#else
-    *cmd_len = 7;
+    } else {
+        *cmd_len = 7;
 
-    p_cmd_data[2] = 0x04;
-    p_cmd_data[6] = 0xC0;
-#endif
+        p_cmd_data[2] = 0x04;
+        p_cmd_data[6] = 0xC0;
+    }
     status = NFCSTATUS_SUCCESS;
   } else if (icode_detected) {
     if ((p_cmd_data[3] & 0x40) == 0x40 &&
@@ -964,30 +971,29 @@
     }
   }
 
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-  if (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02) {
-    uint8_t temp;
-    uint8_t* p = p_cmd_data + 4;
-    uint8_t* end = p_cmd_data + *cmd_len;
-    while (p < end) {
-      if (*p == 0x53)  // LF_T3T_FLAGS
-      {
-        NXPLOG_NCIHAL_D("> Going through workaround - LF_T3T_FLAGS swap");
-        temp = *(p + 3);
-        *(p + 3) = *(p + 2);
-        *(p + 2) = temp;
-        NXPLOG_NCIHAL_D("> Going through workaround - LF_T3T_FLAGS - End");
-        status = NFCSTATUS_SUCCESS;
-        break;
+  if ((nfcFL.chipType == pn548C2) &&
+          (p_cmd_data[0] == 0x20 && p_cmd_data[1] == 0x02)) {
+      uint8_t temp;
+      uint8_t* p = p_cmd_data + 4;
+      uint8_t* end = p_cmd_data + *cmd_len;
+      while (p < end) {
+          if (*p == 0x53)  // LF_T3T_FLAGS
+          {
+              NXPLOG_NCIHAL_D("> Going through workaround - LF_T3T_FLAGS swap");
+              temp = *(p + 3);
+              *(p + 3) = *(p + 2);
+              *(p + 2) = temp;
+              NXPLOG_NCIHAL_D("> Going through workaround - LF_T3T_FLAGS - End");
+              status = NFCSTATUS_SUCCESS;
+              break;
+          }
+          if (*p == 0xA0) {
+              p += *(p + 2) + 3;
+          } else {
+              p += *(p + 1) + 2;
+          }
       }
-      if (*p == 0xA0) {
-        p += *(p + 2) + 3;
-      } else {
-        p += *(p + 1) + 2;
-      }
-    }
   }
-#endif
 
   return status;
 }
diff --git a/halimpl/pn54x/hal/phNxpNciHal_nciParser.c b/halimpl/pn54x/hal/phNxpNciHal_nciParser.c
new file mode 100644
index 0000000..19d2d66
--- /dev/null
+++ b/halimpl/pn54x/hal/phNxpNciHal_nciParser.c
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2017 NXP Semiconductors
+ *
+ * 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.
+ */
+
+#include "phNxpNciHal_nciParser.h"
+
+#include <dlfcn.h>
+#include <string.h>
+
+#include "phNxpLog.h"
+
+typedef void* tNCI_PARSER_INSTANCE;
+typedef void* tNCI_PARSER_LIB_HANDLE;
+
+typedef struct {
+    tNCI_PARSER_INSTANCE   pvInstance;
+    tNCI_PARSER_LIB_HANDLE pvHandle;
+    tNCI_PARSER_FUNCTIONS  sEntryFuncs;
+} sParserContext_t;
+
+static sParserContext_t sParserContext;
+
+unsigned char
+phNxpNciHal_initParser() {
+
+    sParserContext_t *psContext = &sParserContext;
+
+    memset(&psContext->sEntryFuncs,0,sizeof(psContext->sEntryFuncs));
+
+    psContext->pvInstance = NULL;
+    psContext->sEntryFuncs.createParser = NULL;
+    psContext->sEntryFuncs.initParser = NULL;
+    psContext->sEntryFuncs.deinitParser = NULL;
+    psContext->sEntryFuncs.destroyParser = NULL;
+    psContext->sEntryFuncs.parsePacket = NULL;
+
+    NXPLOG_NCIHAL_D("%s: enter", __FUNCTION__);
+
+    psContext->pvHandle = dlopen(NXP_NCI_PARSER_PATH, RTLD_NOW);
+    if (!psContext->pvHandle)
+    {
+        NXPLOG_NCIHAL_E("%s: dlopen failed !!!", __FUNCTION__);
+        return FALSE;
+    }
+
+    psContext->sEntryFuncs.createParser = dlsym(psContext->pvHandle, "native_createParser");
+    if (psContext->sEntryFuncs.createParser == NULL)
+    {
+        NXPLOG_NCIHAL_E("%s: dlsym native_createParser failed !!!", __FUNCTION__);
+        return FALSE;
+    }
+
+    psContext->sEntryFuncs.destroyParser = dlsym(psContext->pvHandle, "native_destroyParser");
+    if (psContext->sEntryFuncs.destroyParser == NULL)
+    {
+        NXPLOG_NCIHAL_E("%s: dlsym native_destroyParser failed !!!", __FUNCTION__);
+        return FALSE;
+    }
+
+    psContext->sEntryFuncs.initParser = dlsym(psContext->pvHandle, "native_initParser");
+    if (psContext->sEntryFuncs.initParser == NULL)
+    {
+        NXPLOG_NCIHAL_E("%s: dlsym native_initParser failed !!!", __FUNCTION__);
+        return FALSE;
+    }
+
+    psContext->sEntryFuncs.deinitParser = dlsym(psContext->pvHandle, "native_deinitParser");
+    if (psContext->sEntryFuncs.deinitParser == NULL)
+    {
+        NXPLOG_NCIHAL_E("%s: dlsym native_deinitParser failed !!!", __FUNCTION__);
+        return FALSE;
+    }
+
+    psContext->sEntryFuncs.parsePacket = dlsym(psContext->pvHandle, "native_parseNciMsg");
+    if (psContext->sEntryFuncs.parsePacket == NULL)
+    {
+        NXPLOG_NCIHAL_E("%s: dlsym native_parseNciMsg failed !!!", __FUNCTION__);
+        return FALSE;
+    }
+
+    psContext->pvInstance = (*(psContext->sEntryFuncs.createParser))();
+
+    if(psContext->pvInstance != NULL)
+    {
+        (*(psContext->sEntryFuncs.initParser))(psContext->pvInstance);
+    }
+    else
+    {
+        NXPLOG_NCIHAL_E("Parser Creation Failed !!!");
+        return FALSE;
+    }
+
+    NXPLOG_NCIHAL_D("%s: exit", __FUNCTION__);
+
+    return TRUE;
+}
+
+void
+phNxpNciHal_parsePacket(unsigned char *pNciPkt, unsigned short pktLen) {
+
+    sParserContext_t *psContext = &sParserContext;
+
+    NXPLOG_NCIHAL_D("%s: enter", __FUNCTION__);
+
+    if((pNciPkt == NULL) || (pktLen == 0))
+    {
+        NXPLOG_NCIHAL_E("Invalid NCI Packet");
+        return;
+    }
+
+    if(psContext->pvInstance != NULL)
+    {
+        (*(psContext->sEntryFuncs.parsePacket))(psContext->pvInstance, pNciPkt, pktLen);
+    }
+    else
+    {
+        NXPLOG_NCIHAL_E("Invalid Handle");
+    }
+    NXPLOG_NCIHAL_D("%s: exit", __FUNCTION__);
+}
+
+void phNxpNciHal_deinitParser() {
+
+    sParserContext_t *psContext = &sParserContext;
+
+    NXPLOG_NCIHAL_D("%s: enter", __FUNCTION__);
+
+    if(psContext->pvInstance != NULL)
+    {
+        (*(psContext->sEntryFuncs.deinitParser))(psContext->pvInstance);
+
+        (*(psContext->sEntryFuncs.destroyParser))(psContext->pvInstance);
+    }
+    else
+    {
+        NXPLOG_NCIHAL_E("Invalid Handle");
+    }
+
+    if(psContext->pvHandle != NULL)
+    {
+        dlclose(psContext->pvHandle);
+    }
+
+    NXPLOG_NCIHAL_D("%s: exit", __FUNCTION__);
+}
diff --git a/halimpl/pn54x/hal/phNxpNciHal_nciParser.h b/halimpl/pn54x/hal/phNxpNciHal_nciParser.h
new file mode 100644
index 0000000..bffbbb3
--- /dev/null
+++ b/halimpl/pn54x/hal/phNxpNciHal_nciParser.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2017 NXP Semiconductors
+ *
+ * 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.
+ */
+
+/*
+ * phNxpNciHal_nciParser.h
+ */
+
+#ifndef _PHNXPNCIHAL_NCIPARSER_H_
+#define _PHNXPNCIHAL_NCIPARSER_H_
+
+#define NXP_NCI_PARSER_PATH "/system/lib64/libnxp_nciparser.so"
+
+typedef void* (*tHAL_API_NATIVE_CREATE_PARSER)();
+typedef void  (*tHAL_API_NATIVE_DESTROY_PARSER)(void*);
+typedef void  (*tHAL_API_NATIVE_INIT_PARSER)(void*);
+typedef void  (*tHAL_API_NATIVE_DEINIT_PARSER)(void*);
+typedef void  (*tHAL_API_NATIVE_PARSE_PACKET)(void*,unsigned char *, unsigned short);
+
+typedef struct
+{
+    tHAL_API_NATIVE_CREATE_PARSER  createParser;
+    tHAL_API_NATIVE_DESTROY_PARSER destroyParser;
+    tHAL_API_NATIVE_INIT_PARSER    initParser;
+    tHAL_API_NATIVE_DEINIT_PARSER  deinitParser;
+    tHAL_API_NATIVE_PARSE_PACKET   parsePacket;
+} tNCI_PARSER_FUNCTIONS;
+
+unsigned char phNxpNciHal_initParser();
+void phNxpNciHal_parsePacket(unsigned char*, unsigned short);
+void phNxpNciHal_deinitParser();
+
+#endif /* _PHNXPNCIHAL_NCIPARSER_H_ */
diff --git a/halimpl/pn54x/inc/Nxp_Features.h b/halimpl/pn54x/inc/Nxp_Features.h
new file mode 100644
index 0000000..84ab3dc
--- /dev/null
+++ b/halimpl/pn54x/inc/Nxp_Features.h
@@ -0,0 +1,518 @@
+/*
+ * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright (C) 2012-2016 NXP Semiconductors
+ *
+ * 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.
+ */
+
+/*
+ * NXP features declarations
+ */
+#include <unistd.h>
+#include <string.h>
+#ifndef NXP_FEATURES_H
+#define NXP_FEATURES_H
+
+#define STRMAX_1 40
+#define STRMAX_2 100
+#define FW_DLL_ROOT_DIR "/system/vendor/firmware/"
+#define FW_DLL_EXTENSION ".so"
+
+#define FW_MOBILE_MAJOR_NUMBER_PN553 0x01
+#define FW_MOBILE_MAJOR_NUMBER_PN551 0x05
+#define FW_MOBILE_MAJOR_NUMBER_PN48AD 0x01
+
+#define NFA_EE_MAX_EE_SUPPORTED 4
+
+#define JCOP_VER_3_1    1
+#define JCOP_VER_3_2    2
+#define JCOP_VER_3_3    3
+#define JCOP_VER_4_0    4
+
+typedef enum {
+    pn547C2 = 0x01,
+    pn65T,
+    pn548C2,
+    pn66T,
+    pn551,
+    pn67T,
+    pn553,
+    pn80T,
+    pn557,
+    pn81T
+}tNFC_chipType;
+
+/*
+ * TODO renaming
+ * */
+typedef struct {
+    /*Flags common to all chip types*/
+    uint8_t _NXP_NFCC_EMPTY_DATA_PACKET                     : 1;
+    uint8_t _GEMALTO_SE_SUPPORT                             : 1;
+    uint8_t _NFCC_I2C_READ_WRITE_IMPROVEMENT                : 1;
+    uint8_t _NFCC_MIFARE_TIANJIN                            : 1;
+    uint8_t _NFCC_MW_RCVRY_BLK_FW_DNLD                      : 1;
+    uint8_t _NFCC_DYNAMIC_DUAL_UICC                         : 1;
+    uint8_t _NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH              : 1;
+    uint8_t _NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH           : 1;
+    uint8_t _NFCC_FW_WA                                     : 1;
+    uint8_t _NFCC_FORCE_NCI1_0_INIT                         : 1;
+    uint8_t _NFCC_ROUTING_BLOCK_BIT                         : 1;
+    uint8_t _NFCC_SPI_FW_DOWNLOAD_SYNC                      : 1;
+    uint8_t _HW_ANTENNA_LOOP4_SELF_TEST                     : 1;
+    uint8_t _NFCEE_REMOVED_NTF_RECOVERY                     : 1;
+    uint8_t _NFCC_FORCE_FW_DOWNLOAD                         : 1;
+    uint8_t _UICC_CREATE_CONNECTIVITY_PIPE                  : 1;
+    uint8_t _NFCC_AID_MATCHING_PLATFORM_CONFIG              : 1;
+    uint8_t _NFCC_ROUTING_BLOCK_BIT_PROP                    : 1;
+    uint8_t _NXP_NFC_UICC_ETSI12                            : 1;
+    uint8_t _NFA_EE_MAX_EE_SUPPORTED                        : 3;
+}tNfc_nfccFeatureList;
+/*
+ * TODO renaming
+ * */
+typedef struct {
+    uint8_t _ESE_EXCLUSIVE_WIRED_MODE                    : 2;
+    uint8_t _ESE_WIRED_MODE_RESUME                       : 2;
+    uint8_t _ESE_WIRED_MODE_TIMEOUT                      : 2;
+    uint8_t _ESE_PN67T_RESET                             : 2;
+    uint8_t _ESE_APDU_GATE_RESET                         : 2;
+    uint8_t _ESE_WIRED_MODE_DISABLE_DISCOVERY            : 1;
+    uint8_t _LEGACY_APDU_GATE                            : 1;
+    uint8_t _TRIPLE_MODE_PROTECTION                      : 1;
+    uint8_t _ESE_FELICA_CLT                              : 1;
+    uint8_t _WIRED_MODE_STANDBY_PROP                     : 1;
+    uint8_t _WIRED_MODE_STANDBY                          : 1;
+    uint8_t _ESE_DUAL_MODE_PRIO_SCHEME                   : 2;
+    uint8_t _ESE_FORCE_ENABLE                            : 1;
+    uint8_t _ESE_RESET_METHOD                            : 1;
+    uint8_t _EXCLUDE_NV_MEM_DEPENDENCY                   : 1;
+    uint8_t _ESE_ETSI_READER_ENABLE                      : 1;
+    uint8_t _ESE_SVDD_SYNC                               : 1;
+    uint8_t _NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION  : 1;
+    uint8_t _ESE_JCOP_DWNLD_PROTECTION                   : 1;
+    uint8_t _UICC_HANDLE_CLEAR_ALL_PIPES                 : 1;
+    uint8_t _GP_CONTINOUS_PROCESSING                     : 1;
+    uint8_t _ESE_DWP_SPI_SYNC_ENABLE                     : 1;
+    uint8_t _ESE_ETSI12_PROP_INIT                        : 1;
+    uint8_t _ESE_WIRED_MODE_PRIO                         : 1;
+    uint8_t _ESE_UICC_EXCLUSIVE_WIRED_MODE               : 1;
+    uint8_t _ESE_POWER_MODE                              : 1;
+    uint8_t _ESE_P73_ISO_RST                             : 1;
+    uint8_t _BLOCK_PROPRIETARY_APDU_GATE                 : 1;
+    uint8_t _JCOP_WA_ENABLE                              : 1;
+    uint8_t _NXP_LDR_SVC_VER_2                           : 1;
+    uint8_t _NXP_ESE_VER                                 : 3;
+}tNfc_eseFeatureList;
+/*
+ * TODO renaming
+ * */
+typedef struct {
+    uint8_t _NFCC_RESET_RSP_LEN;
+}tNfc_platformFeatureList;
+
+typedef struct {
+    uint8_t _NCI_INTERFACE_UICC_DIRECT;
+    uint8_t _NCI_INTERFACE_ESE_DIRECT;
+    uint8_t _NCI_PWR_LINK_PARAM_CMD_SIZE;
+    uint8_t _NCI_EE_PWR_LINK_ALWAYS_ON;
+    uint8_t _NFA_EE_MAX_AID_ENTRIES;
+    uint8_t _NFC_NXP_AID_MAX_SIZE_DYN : 1;
+    uint8_t _FW_LIB_PATH[STRMAX_2];
+    uint8_t _PLATFORM_LIB_PATH[STRMAX_2];
+    uint8_t _PKU_LIB_PATH[STRMAX_2];
+    uint16_t _PHDNLDNFC_USERDATA_EEPROM_OFFSET;
+    uint16_t _PHDNLDNFC_USERDATA_EEPROM_LEN;
+    uint8_t  _FW_MOBILE_MAJOR_NUMBER;
+}tNfc_nfcMwFeatureList;
+/*
+ * TODO renaming
+ * */
+typedef struct {
+    uint8_t nfcNxpEse : 1;
+    tNFC_chipType chipType;
+    tNfc_nfccFeatureList nfccFL;
+    tNfc_eseFeatureList eseFL;
+    tNfc_platformFeatureList platformFL;
+    tNfc_nfcMwFeatureList nfcMwFL;
+}tNfc_featureList;
+
+extern tNfc_featureList nfcFL;
+
+#define CONFIGURE_FEATURELIST(chipType) {                                   \
+        nfcFL.chipType = chipType;                                          \
+        nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN = true;                     \
+        if(chipType == pn81T) {                                             \
+            nfcFL.chipType = pn557;                                         \
+        }                                                                   \
+        else if(chipType == pn80T) {                                        \
+            nfcFL.chipType = pn553;                                         \
+        }                                                                   \
+        else if(chipType == pn67T) {                                        \
+            nfcFL.chipType = pn551;                                         \
+        }                                                                   \
+        else if(chipType == pn66T) {                                        \
+            nfcFL.chipType = pn548C2;                                       \
+        }                                                                   \
+        else if(chipType == pn65T) {                                        \
+            nfcFL.chipType = pn547C2;                                       \
+        }                                                                   \
+        if ((chipType == pn65T) || (chipType == pn66T) ||                   \
+                (chipType == pn67T) || (chipType == pn80T) ||               \
+                (chipType == pn81T)) {                                      \
+            nfcFL.nfcNxpEse = true;                                         \
+            CONFIGURE_FEATURELIST_NFCC_WITH_ESE(chipType)                   \
+        } \
+        else {                                                              \
+            nfcFL.nfcNxpEse = false;                                        \
+            CONFIGURE_FEATURELIST_NFCC(chipType)                            \
+        }                                                                   \
+        \
+        \
+}
+
+#define CONFIGURE_FEATURELIST_NFCC_WITH_ESE(chipType) {                     \
+        nfcFL.nfccFL._NXP_NFCC_EMPTY_DATA_PACKET = true;                    \
+        nfcFL.nfccFL._GEMALTO_SE_SUPPORT = true;                            \
+        \
+        \
+        nfcFL.eseFL._ESE_EXCLUSIVE_WIRED_MODE = 1;                          \
+        nfcFL.eseFL._ESE_WIRED_MODE_RESUME = 2;                             \
+        nfcFL.eseFL._ESE_PN67T_RESET = 1;                                   \
+        nfcFL.eseFL._ESE_APDU_GATE_RESET = 2;                               \
+        nfcFL.eseFL._NXP_ESE_VER = JCOP_VER_4_0;                            \
+        nfcFL.eseFL._NXP_LDR_SVC_VER_2 = true;                              \
+        \
+        \
+        if (chipType == pn81T) {                                            \
+            CONFIGURE_FEATURELIST_NFCC(pn557)                               \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true;                 \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 4;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_FELICA_CLT = true;                             \
+            nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME =                        \
+            nfcFL.eseFL._ESE_WIRED_MODE_RESUME;                             \
+            nfcFL.eseFL._ESE_RESET_METHOD = true;                           \
+            nfcFL.eseFL._ESE_POWER_MODE = true;                             \
+            nfcFL.eseFL._ESE_P73_ISO_RST = true;                            \
+            nfcFL.eseFL._WIRED_MODE_STANDBY = true;                         \
+            nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
+            nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
+            nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = true;                  \
+            nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = true;                \
+            nfcFL.eseFL._GP_CONTINOUS_PROCESSING = false;                   \
+            nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
+            nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true;                       \
+        }                                                                   \
+        if (chipType == pn80T) {                                            \
+            CONFIGURE_FEATURELIST_NFCC(pn553)                               \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 4;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_FELICA_CLT = true;                             \
+            nfcFL.eseFL._WIRED_MODE_STANDBY = true;                         \
+            nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME =                        \
+            nfcFL.eseFL._ESE_WIRED_MODE_RESUME;                             \
+            nfcFL.eseFL._ESE_RESET_METHOD = true;                           \
+            nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
+            nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
+            nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = true;                  \
+            nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = true;                \
+            nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
+            nfcFL.eseFL._ESE_POWER_MODE = true;                             \
+            nfcFL.eseFL._ESE_P73_ISO_RST = true;                            \
+            \
+            \
+            nfcFL.nfcMwFL._NCI_PWR_LINK_PARAM_CMD_SIZE = 0x02;              \
+            nfcFL.nfcMwFL._NCI_EE_PWR_LINK_ALWAYS_ON = 0x01;                \
+        }                                                                   \
+        else if (chipType == pn67T)                                         \
+        {                                                                   \
+            CONFIGURE_FEATURELIST_NFCC(pn551)                               \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
+            \
+            \
+            nfcFL.eseFL._TRIPLE_MODE_PROTECTION = true;                     \
+            nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = true;                    \
+            nfcFL.eseFL._ESE_FORCE_ENABLE = true;                           \
+            nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
+            nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
+            nfcFL.eseFL._LEGACY_APDU_GATE = true;                           \
+            nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = true; \
+            nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
+        }                                                                   \
+        else if (chipType == pn66T)                                         \
+        {                                                                   \
+            CONFIGURE_FEATURELIST_NFCC(pn548C2)                             \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
+            \
+            \
+            nfcFL.eseFL._TRIPLE_MODE_PROTECTION = true;                     \
+            nfcFL.eseFL._WIRED_MODE_STANDBY = true;                         \
+            nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = true;                    \
+            nfcFL.eseFL._ESE_FORCE_ENABLE = true;                           \
+            nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
+            nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
+            nfcFL.eseFL._LEGACY_APDU_GATE = true;                           \
+            nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = true; \
+            nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
+        }                                                                   \
+        else if (chipType == pn65T)                                         \
+        {                                                                   \
+            CONFIGURE_FEATURELIST_NFCC(pn547C2)                             \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
+            nfcFL.eseFL._ESE_WIRED_MODE_DISABLE_DISCOVERY = true;           \
+            nfcFL.eseFL._LEGACY_APDU_GATE = true;                           \
+        }                                                                   \
+}
+
+
+#define CONFIGURE_FEATURELIST_NFCC(chipType) {                              \
+        nfcFL.eseFL._ESE_WIRED_MODE_TIMEOUT = 3;                            \
+        nfcFL.eseFL._ESE_WIRED_MODE_DISABLE_DISCOVERY = false;              \
+        nfcFL.eseFL._LEGACY_APDU_GATE = false;                              \
+        nfcFL.eseFL._TRIPLE_MODE_PROTECTION = false;                        \
+        nfcFL.eseFL._ESE_FELICA_CLT = false;                                \
+        nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = false;                       \
+        nfcFL.eseFL._WIRED_MODE_STANDBY = false;                            \
+        nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME =                            \
+        nfcFL.eseFL._ESE_WIRED_MODE_TIMEOUT;                                \
+        nfcFL.eseFL._ESE_FORCE_ENABLE = false;                              \
+        nfcFL.eseFL._ESE_RESET_METHOD = false;                              \
+        nfcFL.eseFL._ESE_ETSI_READER_ENABLE = false;                        \
+        nfcFL.eseFL._ESE_SVDD_SYNC = false;                                 \
+        nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = false;    \
+        nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = false;                     \
+        nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = false;                   \
+        nfcFL.eseFL._GP_CONTINOUS_PROCESSING = false;                       \
+        nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = false;                       \
+        nfcFL.eseFL._ESE_ETSI12_PROP_INIT = false;                          \
+        nfcFL.eseFL._ESE_WIRED_MODE_PRIO = false;                           \
+        nfcFL.eseFL._ESE_UICC_EXCLUSIVE_WIRED_MODE = false;                 \
+        nfcFL.eseFL._ESE_POWER_MODE = false;                                \
+        nfcFL.eseFL._ESE_P73_ISO_RST = false;                               \
+        nfcFL.eseFL._BLOCK_PROPRIETARY_APDU_GATE = false;                   \
+        nfcFL.eseFL._JCOP_WA_ENABLE = true;                                 \
+        nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = false;                     \
+        nfcFL.nfccFL._NXP_NFC_UICC_ETSI12 = false;                          \
+        nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                    \
+        \
+        \
+        nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0;                           \
+        \
+        \
+        nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x00;                    \
+        nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x00;                     \
+        nfcFL.nfcMwFL._NCI_PWR_LINK_PARAM_CMD_SIZE = 0x02;                  \
+        nfcFL.nfcMwFL._NCI_EE_PWR_LINK_ALWAYS_ON = 0x01;                    \
+        nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x023CU;          \
+        nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C80U;             \
+        nfcFL.nfcMwFL._FW_MOBILE_MAJOR_NUMBER =                             \
+        FW_MOBILE_MAJOR_NUMBER_PN48AD;                                      \
+        \
+        \
+        if (chipType == pn557)                                              \
+        {                                                                   \
+            nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;           \
+            nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = false;                      \
+            nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = true;                 \
+            nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = true;                    \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false;        \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = true;      \
+            nfcFL.nfccFL._NFCC_FW_WA = true;                                \
+            nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                   \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true;                 \
+            nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = false;               \
+            nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                \
+            nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = true;                    \
+            nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = true;             \
+            nfcFL.nfccFL._NXP_NFC_UICC_ETSI12 = false;                      \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true;                       \
+            nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = true;                  \
+            \
+            \
+            nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x10U;                   \
+            \
+            \
+        }                                                                   \
+        else if (chipType == pn553)                                         \
+        {                                                                   \
+            nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;           \
+            nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = false;                      \
+            nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = true;                 \
+            nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = true;                    \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false;        \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = true;      \
+            nfcFL.nfccFL._NFCC_FW_WA = true;                                \
+            nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = true;                    \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = true;                    \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true;                 \
+            nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = false;               \
+            nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                \
+            nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = true;                    \
+            nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = true;             \
+            nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = false;        \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = false;              \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true;                       \
+            nfcFL.eseFL._JCOP_WA_ENABLE = false;                            \
+            nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = true;                  \
+            \
+            \
+            nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x10U;                   \
+            \
+            \
+            nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82;                \
+            nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83;                 \
+            \
+            \
+            SRTCPY_FW("libpn553tc_fw", "libpn553tc_fw_platform",            \
+                    "libpn553tc_fw_pku")                                    \
+            \
+            \
+            nfcFL.nfcMwFL._FW_MOBILE_MAJOR_NUMBER =                         \
+            FW_MOBILE_MAJOR_NUMBER_PN553;                                   \
+            \
+            \
+        }                                                                   \
+        else if (chipType == pn551)                                         \
+        {                                                                   \
+            nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;           \
+            nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true;                       \
+            nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false;                \
+            nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = false;                   \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = true;         \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false;     \
+            nfcFL.nfccFL._NFCC_FW_WA = false;                               \
+            nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                   \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false;                   \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                \
+            nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true;                \
+            nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                \
+            nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false;                   \
+            nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false;            \
+            nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true;         \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = true;               \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_FORCE_ENABLE = true;                           \
+            \
+            \
+            nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x11U;                   \
+            \
+            \
+            nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82;                \
+            nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83;                 \
+            \
+            \
+            SRTCPY_FW("libpn551_fw", "libpn551_fw_platform",                \
+                    "libpn551_fw_pku")                                      \
+            \
+            \
+            nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x02BCU;      \
+            nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C00U;         \
+            nfcFL.nfcMwFL._FW_MOBILE_MAJOR_NUMBER =                         \
+            FW_MOBILE_MAJOR_NUMBER_PN551;                                   \
+            \
+            \
+        }                                                                   \
+        else if (chipType == pn548C2)                                       \
+        {                                                                   \
+            nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;           \
+            nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true;                       \
+            nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false;                \
+            nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = false;                   \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = true;         \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false;     \
+            nfcFL.nfccFL._NFCC_FW_WA = false;                               \
+            nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                   \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false;                   \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                \
+            nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true;                \
+            nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                \
+            nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false;                   \
+            nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false;            \
+            nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true;         \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = true;               \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_FORCE_ENABLE = true;                           \
+            nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true;                       \
+            \
+            \
+            nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82;                \
+            nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83;                 \
+            \
+            \
+            SRTCPY_FW("libpn548ad_fw", "libpn548ad_fw_platform",            \
+                    "libpn548ad_fw_pku")                                    \
+            \
+            \
+            nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x02BCU;      \
+            nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C00U;         \
+            \
+            \
+        }                                                                   \
+        else if(chipType == pn547C2)                                        \
+        {                                                                   \
+            nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = false;          \
+            nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true;                       \
+            nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false;                \
+            nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = false;                   \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false;        \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false;     \
+            nfcFL.nfccFL._NFCC_FW_WA = false;                               \
+            nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                   \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false;                   \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                \
+            nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true;                \
+            nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                \
+            nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false;                   \
+            nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false;            \
+            nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true;         \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = false;              \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2;                      \
+            \
+            \
+            nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x81;                \
+            nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x82;                 \
+            \
+            \
+            SRTCPY_FW("libpn547_fw", "libpn547_fw_platform",                \
+                    "libpn547_fw_pku")                                      \
+            \
+            \
+        }                                                                   \
+}
+#ifdef __cplusplus
+#define SRTCPY_FW(str1,str2,str3)
+#else
+#define SRTCPY_FW(str1, str2,str3)                                                      \
+        snprintf(nfcFL.nfcMwFL._FW_LIB_PATH, STRMAX_2, "%s%s%s",                        \
+                FW_DLL_ROOT_DIR, str1, FW_DLL_EXTENSION);                               \
+                snprintf(nfcFL.nfcMwFL._PLATFORM_LIB_PATH, STRMAX_2, "%s%s%s",          \
+                        FW_DLL_ROOT_DIR, str2, FW_DLL_EXTENSION);                       \
+                        snprintf(nfcFL.nfcMwFL._PKU_LIB_PATH, STRMAX_2, "%s%s%s",       \
+                                FW_DLL_ROOT_DIR, str3, FW_DLL_EXTENSION);
+#endif
+#endif
diff --git a/halimpl/pn54x/inc/phNxpNciHal_Adaptation.h b/halimpl/pn54x/inc/phNxpNciHal_Adaptation.h
index cbba8b2..e73c5bc 100644
--- a/halimpl/pn54x/inc/phNxpNciHal_Adaptation.h
+++ b/halimpl/pn54x/inc/phNxpNciHal_Adaptation.h
@@ -97,6 +97,7 @@
     uint16_t            fwUpdateInf;
     uint16_t            fwDwnldStatus;
     uint16_t            fwMwVerStatus;
+    uint8_t             chipType;
 }outputData_t;
 
 /*
diff --git a/halimpl/pn54x/inc/phNxpNciHal_SelfTest.h b/halimpl/pn54x/inc/phNxpNciHal_SelfTest.h
index 409392a..0b4f22c 100644
--- a/halimpl/pn54x/inc/phNxpNciHal_SelfTest.h
+++ b/halimpl/pn54x/inc/phNxpNciHal_SelfTest.h
@@ -118,15 +118,11 @@
  **                  otherwise NFCSTATUS_FAILED.
  **
  ******************************************************************************/
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_PrbsType_t prbs_type,
                                     phNxpNfc_PrbsHwType_t hw_prbs_type,
                                     phNxpNfc_Tech_t tech,
                                     phNxpNfc_Bitrate_t bitrate);
-#else
-NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_Tech_t tech,
-                                    phNxpNfc_Bitrate_t bitrate);
-#endif
+
 /*******************************************************************************
  **
  ** Function         phNxpNciHal_PrbsTestStop
diff --git a/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf b/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
index 8e0e3d9..a3d727c 100644
--- a/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN547C2_example.conf
@@ -43,8 +43,9 @@
 #define CLK_FREQ_19_2MHZ       2
 #define CLK_FREQ_24MHZ         3
 #define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
+#define CLK_FREQ_32MHZ         5
+#define CLK_FREQ_38_4MHZ       6
+#define CLK_FREQ_52MHZ         7
 NXP_SYS_CLK_FREQ_SEL=0x00
 
 ###############################################################################
diff --git a/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf b/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf
index 6e309b1..5a5fd07 100644
--- a/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN548C2_example.conf
@@ -43,8 +43,9 @@
 #define CLK_FREQ_19_2MHZ       2
 #define CLK_FREQ_24MHZ         3
 #define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
+#define CLK_FREQ_32MHZ         5
+#define CLK_FREQ_38_4MHZ       6
+#define CLK_FREQ_52MHZ         7
 NXP_SYS_CLK_FREQ_SEL=0x02
 
 ###############################################################################
@@ -333,4 +334,4 @@
 # Enable            0x01
 NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
 
-###############################################################################
\ No newline at end of file
+###############################################################################
diff --git a/halimpl/pn54x/libnfc-nxp-PN551_example.conf b/halimpl/pn54x/libnfc-nxp-PN551_example.conf
index b32791b..990824f 100644
--- a/halimpl/pn54x/libnfc-nxp-PN551_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN551_example.conf
@@ -43,8 +43,9 @@
 #define CLK_FREQ_19_2MHZ       2
 #define CLK_FREQ_24MHZ         3
 #define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
+#define CLK_FREQ_32MHZ         5
+#define CLK_FREQ_38_4MHZ       6
+#define CLK_FREQ_52MHZ         7
 NXP_SYS_CLK_FREQ_SEL=0x01
 
 ###############################################################################
@@ -340,4 +341,4 @@
 # Blacklist disable  0x00
 NXP_PROP_BLACKLIST_ROUTING=0x00
 
-###############################################################################
\ No newline at end of file
+###############################################################################
diff --git a/halimpl/pn54x/libnfc-nxp-PN553_example.conf b/halimpl/pn54x/libnfc-nxp-PN553_example.conf
index 5721e91..1fdedf5 100644
--- a/halimpl/pn54x/libnfc-nxp-PN553_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN553_example.conf
@@ -43,8 +43,9 @@
 #define CLK_FREQ_19_2MHZ       2
 #define CLK_FREQ_24MHZ         3
 #define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
+#define CLK_FREQ_32MHZ         5
+#define CLK_FREQ_38_4MHZ       6
+#define CLK_FREQ_52MHZ         7
 NXP_SYS_CLK_FREQ_SEL=0x02
 
 ###############################################################################
@@ -453,6 +454,18 @@
 NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
 
 ###############################################################################
+#This config will enable different level of Rf transaction debugs based on the
+#following values provided. Decoded information will be printed in adb logcat
+#Debug Mode         Levels
+#Disable Debug      0x00
+#L1 Debug           0x01
+#L2 Debug           0x02
+#L1 & L2 Debug      0x03
+#L1 & L2 & RSSI     0x04
+#L1 & L2 & Felica   0x05
+#NXP_CORE_PROP_SYSTEM_DEBUG=0x00
+
+###############################################################################
 # Restrict routing to first matched rule only.
 # Blacklist enable   0x01
 # Blacklist disable  0x00
@@ -462,4 +475,4 @@
 # Timeout value in milliseconds to send response for Felica command received
 NXP_HCEF_CMD_RSP_TIMEOUT_VALUE=5000
 
-###############################################################################
\ No newline at end of file
+###############################################################################
diff --git a/halimpl/pn54x/libnfc-nxp-PN557_example.conf b/halimpl/pn54x/libnfc-nxp-PN557_example.conf
index 3dca16e..34d0339 100644
--- a/halimpl/pn54x/libnfc-nxp-PN557_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN557_example.conf
@@ -282,9 +282,10 @@
 # bit pos 0 = Switch On
 # bit pos 1 = Switch Off
 # bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_AID_PWR_STATE=0x19
+# bit pos 3 = Screen Off lock
+# bit pos 4 = Screen On lock
+# bit pos 5 = Screen Off lock
+DEFAULT_AID_PWR_STATE=0x39
 
 ###############################################################################
 #Set the Mifare Desfire Power state :
@@ -292,9 +293,10 @@
 # bit pos 0 = Switch On
 # bit pos 1 = Switch Off
 # bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_DESFIRE_PWR_STATE=0x1B
+# bit pos 3 = Screen Off lock
+# bit pos 4 = Screen On lock
+# bit pos 5 = Screen Off lock
+DEFAULT_DESFIRE_PWR_STATE=0x3B
 
 ###############################################################################
 #Set the Mifare CLT Power state :
@@ -302,9 +304,10 @@
 # bit pos 0 = Switch On
 # bit pos 1 = Switch Off
 # bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_MIFARE_CLT_PWR_STATE=0x1B
+# bit pos 3 = Screen Off lock
+# bit pos 4 = Screen On lock
+# bit pos 5 = Screen Off lock
+DEFAULT_MIFARE_CLT_PWR_STATE=0x3B
 
 ###############################################################################
 #Set the Felica CLT route Location :
@@ -320,9 +323,10 @@
 # bit pos 0 = Switch On
 # bit pos 1 = Switch Off
 # bit pos 2 = Battery Off
-# bit pos 3 = Screen Lock
-# bit pos 4 = Screen Off
-DEFAULT_FELICA_CLT_PWR_STATE=0x1B
+# bit pos 3 = Screen Off lock
+# bit pos 4 = Screen On lock
+# bit pos 5 = Screen Off lock
+DEFAULT_FELICA_CLT_PWR_STATE=0x3B
 
 ###############################################################################
 # AID Matching platform options
diff --git a/halimpl/pn54x/libnfc-nxp-PN65T_example.conf b/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
index 5f37cf5..3a9a807 100644
--- a/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN65T_example.conf
@@ -43,8 +43,9 @@
 #define CLK_FREQ_19_2MHZ       2
 #define CLK_FREQ_24MHZ         3
 #define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
+#define CLK_FREQ_32MHZ         5
+#define CLK_FREQ_38_4MHZ       6
+#define CLK_FREQ_52MHZ         7
 NXP_SYS_CLK_FREQ_SEL=0x00
 
 ###############################################################################
diff --git a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
index 30a6590..1af8100 100644
--- a/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN66T_example.conf
@@ -43,8 +43,9 @@
 #define CLK_FREQ_19_2MHZ       2
 #define CLK_FREQ_24MHZ         3
 #define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
+#define CLK_FREQ_32MHZ         5
+#define CLK_FREQ_38_4MHZ       6
+#define CLK_FREQ_52MHZ         7
 NXP_SYS_CLK_FREQ_SEL=0x02
 
 ###############################################################################
@@ -419,4 +420,4 @@
 #Disable  0x00
 NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
 
-###############################################################################
\ No newline at end of file
+###############################################################################
diff --git a/halimpl/pn54x/libnfc-nxp-PN67T_example.conf b/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
index 039fb2e..25f7a5f 100644
--- a/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN67T_example.conf
@@ -43,8 +43,9 @@
 #define CLK_FREQ_19_2MHZ       2
 #define CLK_FREQ_24MHZ         3
 #define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
+#define CLK_FREQ_32MHZ         5
+#define CLK_FREQ_38_4MHZ       6
+#define CLK_FREQ_52MHZ         7
 NXP_SYS_CLK_FREQ_SEL=0x02
 
 ###############################################################################
@@ -430,4 +431,4 @@
 # Blacklist disable  0x00
 NXP_PROP_BLACKLIST_ROUTING=0x00
 
-###############################################################################
\ No newline at end of file
+###############################################################################
diff --git a/halimpl/pn54x/libnfc-nxp-PN80T_example.conf b/halimpl/pn54x/libnfc-nxp-PN80T_example.conf
index 1997e05..31d6ddc 100644
--- a/halimpl/pn54x/libnfc-nxp-PN80T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN80T_example.conf
@@ -43,8 +43,9 @@
 #define CLK_FREQ_19_2MHZ       2
 #define CLK_FREQ_24MHZ         3
 #define CLK_FREQ_26MHZ         4
-#define CLK_FREQ_38_4MHZ       5
-#define CLK_FREQ_52MHZ         6
+#define CLK_FREQ_32MHZ         5
+#define CLK_FREQ_38_4MHZ       6
+#define CLK_FREQ_52MHZ         7
 NXP_SYS_CLK_FREQ_SEL=0x02
 
 ###############################################################################
@@ -228,6 +229,18 @@
 NXP_DEFAULT_SE=0x07
 
 ###############################################################################
+# Force ESE 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 | NFA_TECHNOLOGY_MASK_F
+NXP_ESE_LISTEN_TECH_MASK=0x07
+
+###############################################################################
+#set autonomous mode
+# disable autonomous 0x00
+# enable autonomous  0x01
+NXP_CORE_SCRN_OFF_AUTONOMOUS_ENABLE=0x00
+
+###############################################################################
 #Enable SWP full power mode when phone is power off
 NXP_SWP_FULL_PWR_ON=0x00
 
@@ -447,6 +460,11 @@
 NXP_CHECK_DEFAULT_PROTO_SE_ID=0x01
 
 ###############################################################################
+# SVDD sync off Delay in ms it can be max 20 ms
+# If out of range timeout used, default delay of 10ms will be set
+NXP_SVDD_SYNC_OFF_DELAY=10
+
+###############################################################################
 #NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE
 #Enable/Disable block number checks for china transit use case
 #Enable  0x01
@@ -454,12 +472,40 @@
 NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE=0x01
 
 ###############################################################################
+#NXP_CN_TRANSIT_CMA_BYPASSMODE_ENABLE
+#Enable this config it prevents EMVCo PICC compliancy and Mifare backward compatibility works
+#Disable this config EMVCo PICC compliancy works and Mifare backward compatibility will not work
+#Default config is Disable
+#Enable  0x01
+#Disable  0x00
+NXP_CN_TRANSIT_CMA_BYPASSMODE_ENABLE=0x00
+
+###############################################################################
+#Enable NXP NCI runtime parser library
+#Enable 0x01
+#Disable 0x00
+NXP_NCI_PARSER_LIBRARY=0x00
+
+###############################################################################
+#This config will enable different level of Rf transaction debugs based on the
+#following values provided. Decoded information will be printed in adb logcat
+#Debug Mode         Levels
+#Disable Debug      0x00
+#L1 Debug           0x01
+#L2 Debug           0x02
+#L1 & L2 Debug      0x03
+#L1 & L2 & RSSI     0x04
+#L1 & L2 & Felica   0x05
+#NXP_CORE_PROP_SYSTEM_DEBUG=0x00
+
+###############################################################################
 # Wired mode resume timeout vaule in wired mode resume feature enable
 # DWP resume time out in ms( 4 bytes hex value and LSB first)
 #example 1000 = 0x03E8
 #exmaple 2000 = 0x07D0
 #example 500 = 0x01F4
 NXP_WIREDMODE_RESUME_TIMEOUT={E8,03,00,00}
+
 ###############################################################################
 # Power to eSE is controlled by DH or PMU depending on following configurations
 #define DH_PWR_CONTROL         1
@@ -502,4 +548,8 @@
 # Timeout value in milliseconds to send response for Felica command received
 NXP_HCEF_CMD_RSP_TIMEOUT_VALUE=5000
 
+###############################################################################
+# Maximum WTX requests entertained by MW
+NXP_WM_MAX_WTX_COUNT=9000
+
 ###############################################################################
\ No newline at end of file
diff --git a/halimpl/pn54x/libnfc-nxp-PN81T_example.conf b/halimpl/pn54x/libnfc-nxp-PN81T_example.conf
index 1677416..9f614a1 100644
--- a/halimpl/pn54x/libnfc-nxp-PN81T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN81T_example.conf
@@ -199,8 +199,8 @@
 # bit pos 2 = Battery Off
 # bit pos 3 = Screen On lock
 # bit pos 4 = Screen off unlock
-DEFAULT_AID_PWR_STATE=0x19
-
+# bit pos 5 = Screen Off lock
+DEFAULT_AID_PWR_STATE=0x39
 ###############################################################################
 #Set the Mifare Desfire Power state :
 #This settings will be used when application does not set this parameter
@@ -209,7 +209,8 @@
 # bit pos 2 = Battery Off
 # bit pos 3 = Screen On lock
 # bit pos 4 = Screen off unlock
-DEFAULT_DESFIRE_PWR_STATE=0x1B
+# bit pos 5 = Screen Off lock
+DEFAULT_DESFIRE_PWR_STATE=0x3B
 
 ###############################################################################
 #Set the Mifare CLT Power state :
@@ -219,7 +220,8 @@
 # bit pos 2 = Battery Off
 # bit pos 3 = Screen On lock
 # bit pos 4 = Screen off unlock
-DEFAULT_MIFARE_CLT_PWR_STATE=0x1B
+# bit pos 5 = Screen Off lock
+DEFAULT_MIFARE_CLT_PWR_STATE=0x3B
 
 ###############################################################################
 #Set the Felica CLT Power state :
@@ -229,7 +231,8 @@
 # bit pos 2 = Battery Off
 # bit pos 3 = Screen On lock
 # bit pos 4 = Screen off unlock
-DEFAULT_FELICA_CLT_PWR_STATE=0x1B
+# bit pos 5 = Screen Off lock
+DEFAULT_FELICA_CLT_PWR_STATE=0x3B
 
 ###############################################################################
 # AID Matching platform options
diff --git a/halimpl/pn54x/nfc_nci.c b/halimpl/pn54x/nfc_nci.c
index 1f389a8..3bda6f8 100644
--- a/halimpl/pn54x/nfc_nci.c
+++ b/halimpl/pn54x/nfc_nci.c
@@ -19,10 +19,10 @@
 
 #define LOG_TAG "NxpNfcNciHal"
 
-#include <utils/Log.h>
 #include <errno.h>
 #include <hardware/hardware.h>
 #include <hardware/nfc.h>
+#include <log/log.h>
 #include <phNxpNciHal_Adaptation.h>
 #include <string.h>
 #include <stdlib.h>
diff --git a/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c b/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
index 829620a..b475412 100644
--- a/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
+++ b/halimpl/pn54x/self-test/phNxpNciHal_SelfTest.c
@@ -24,14 +24,14 @@
 #include <pthread.h>
 #include <phOsalNfc_Timer.h>
 #include <phNxpConfig.h>
-#include <NXP_NFCC_Features.h>
-#include <NXP_Platform_Features.h>
 
 /* Timeout value to wait for response from PN54X */
 #define HAL_WRITE_RSP_TIMEOUT (2000)
 #define HAL_WRITE_MAX_RETRY (10)
 #define CORE_INIT_NCI2_0 false
 
+#define NXP_NFCC_RESET_RSP_LEN (0x10U) //for PN553 (0x10U) else (0x11U)
+
 /******************* Structures and definitions *******************************/
 
 typedef uint8_t (*st_validator_t)(nci_data_t* exp,
@@ -82,15 +82,11 @@
 static uint8_t st_validator_testAntenna_AgcVal_Differential(
     nci_data_t* exp, phTmlNfc_TransactInfo_t* act);
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 NFCSTATUS phNxpNciHal_getPrbsCmd(phNxpNfc_PrbsType_t prbs_type,
                                  phNxpNfc_PrbsHwType_t hw_prbs_type,
                                  uint8_t tech, uint8_t bitrate,
                                  uint8_t* prbs_cmd, uint8_t prbs_cmd_len);
-#else
-NFCSTATUS phNxpNciHal_getPrbsCmd(uint8_t tech, uint8_t bitrate,
-                                 uint8_t* prbs_cmd, uint8_t prbs_cmd_len);
-#endif
+
 /* Test data to validate SWP line 2*/
 static nci_test_data_t swp2_test_data[] = {
     {{
@@ -1480,27 +1476,23 @@
  **
  ******************************************************************************/
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_PrbsType_t prbs_type,
                                     phNxpNfc_PrbsHwType_t hw_prbs_type,
                                     phNxpNfc_Tech_t tech,
                                     phNxpNfc_Bitrate_t bitrate)
-#else
-NFCSTATUS phNxpNciHal_PrbsTestStart(phNxpNfc_Tech_t tech,
-                                    phNxpNfc_Bitrate_t bitrate)
-#endif
 {
   NFCSTATUS status = NFCSTATUS_FAILED;
 
   nci_test_data_t prbs_cmd_data;
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
   uint8_t rsp_cmd_info[] = {0x4F, 0x30, 0x01, 0x00};
-  prbs_cmd_data.cmd.len = 0x09;
-#else
-  uint8_t rsp_cmd_info[] = {0x4F, 0x30, 0x01, 0x00};
-  prbs_cmd_data.cmd.len = 0x07;
-#endif
+
+  if(nfcFL.chipType != pn547C2) {
+      prbs_cmd_data.cmd.len = 0x09;
+  }
+  else {
+      prbs_cmd_data.cmd.len = 0x07;
+  }
 
   memcpy(prbs_cmd_data.exp_rsp.p_data, &rsp_cmd_info[0], sizeof(rsp_cmd_info));
   prbs_cmd_data.exp_rsp.len = sizeof(rsp_cmd_info);
@@ -1515,14 +1507,15 @@
 
 //    [NCI] -> [0x2F 0x30 0x04 0x00 0x00 0x01 0xFF]
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  status =
-      phNxpNciHal_getPrbsCmd(prbs_type, hw_prbs_type, tech, bitrate,
-                             prbs_cmd_data.cmd.p_data, prbs_cmd_data.cmd.len);
-#else
-  status = phNxpNciHal_getPrbsCmd(tech, bitrate, prbs_cmd_data.cmd.p_data,
-                                  prbs_cmd_data.cmd.len);
-#endif
+  if(nfcFL.chipType != pn547C2) {
+      status =
+              phNxpNciHal_getPrbsCmd(prbs_type, hw_prbs_type, tech, bitrate,
+                      prbs_cmd_data.cmd.p_data, prbs_cmd_data.cmd.len);
+  }
+  else {
+      status = phNxpNciHal_getPrbsCmd(0,0,tech, bitrate, prbs_cmd_data.cmd.p_data,
+              prbs_cmd_data.cmd.len);
+  }
 
   if (status == NFCSTATUS_FAILED) {
     // Invalid Param.
@@ -1594,15 +1587,11 @@
 ** Returns          NFCSTATUS_SUCCESS if successful,otherwise NFCSTATUS_FAILED.
 **
 *******************************************************************************/
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 NFCSTATUS phNxpNciHal_getPrbsCmd(phNxpNfc_PrbsType_t prbs_type,
                                  phNxpNfc_PrbsHwType_t hw_prbs_type,
                                  uint8_t tech, uint8_t bitrate,
                                  uint8_t* prbs_cmd, uint8_t prbs_cmd_len)
-#else
-NFCSTATUS phNxpNciHal_getPrbsCmd(uint8_t tech, uint8_t bitrate,
-                                 uint8_t* prbs_cmd, uint8_t prbs_cmd_len)
-#endif
+
 {
   NFCSTATUS status = NFCSTATUS_SUCCESS;
   int position_tech_param = 0;
@@ -1611,39 +1600,36 @@
   NXPLOG_NCIHAL_D("phNxpNciHal_getPrbsCmd - tech 0x%x bitrate = 0x%x", tech,
                   bitrate);
   if (NULL == prbs_cmd ||
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-      prbs_cmd_len != 0x09)
-#else
-      prbs_cmd_len != 0x07)
-#endif
+          ((nfcFL.chipType != pn547C2) && (prbs_cmd_len != 0x09)) ||
+          ((nfcFL.chipType == pn547C2) && (prbs_cmd_len != 0x07)))
   {
-    return status;
+      return status;
   }
 
   prbs_cmd[0] = 0x2F;
   prbs_cmd[1] = 0x30;
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  prbs_cmd[2] = 0x06;
-  prbs_cmd[3] = (uint8_t)prbs_type;
-  // 0xFF Error value used for validation.
-  prbs_cmd[4] = (uint8_t)hw_prbs_type;
-  prbs_cmd[5] = 0xFF;  // TECH
-  prbs_cmd[6] = 0xFF;  // BITRATE
-  prbs_cmd[7] = 0x01;
-  prbs_cmd[8] = 0xFF;
-  position_tech_param = 5;
-  position_bit_param = 6;
-#else
-  prbs_cmd[2] = 0x04;
-  // 0xFF Error value used for validation.
-  prbs_cmd[3] = 0xFF;  // TECH
-  // 0xFF Error value used for validation.
-  prbs_cmd[4] = 0xFF;  // BITRATE
-  prbs_cmd[5] = 0x01;
-  prbs_cmd[6] = 0xFF;
-  position_tech_param = 3;
-  position_bit_param = 4;
-#endif
+  if(nfcFL.chipType != pn547C2) {
+      prbs_cmd[2] = 0x06;
+      prbs_cmd[3] = (uint8_t)prbs_type;
+      // 0xFF Error value used for validation.
+      prbs_cmd[4] = (uint8_t)hw_prbs_type;
+      prbs_cmd[5] = 0xFF;  // TECH
+      prbs_cmd[6] = 0xFF;  // BITRATE
+      prbs_cmd[7] = 0x01;
+      prbs_cmd[8] = 0xFF;
+      position_tech_param = 5;
+      position_bit_param = 6;
+  } else {
+      prbs_cmd[2] = 0x04;
+      // 0xFF Error value used for validation.
+      prbs_cmd[3] = 0xFF;  // TECH
+      // 0xFF Error value used for validation.
+      prbs_cmd[4] = 0xFF;  // BITRATE
+      prbs_cmd[5] = 0x01;
+      prbs_cmd[6] = 0xFF;
+      position_tech_param = 3;
+      position_bit_param = 4;
+  }
 
   switch (tech) {
     case NFC_RF_TECHNOLOGY_A:
@@ -1847,20 +1833,18 @@
   }
 
   if (status == NFCSTATUS_SUCCESS) {
-    if ((gtxldo_status == NFCSTATUS_SUCCESS) &&
-        (gagc_value_status == NFCSTATUS_SUCCESS) &&
-        (gagc_nfcld_status == NFCSTATUS_SUCCESS)
-#if (NXP_HW_ANTENNA_LOOP4_SELF_TEST == true)
-        && (gagc_differential_status == NFCSTATUS_SUCCESS)
-#endif
-            ) {
-      antenna_st_status = NFCSTATUS_SUCCESS;
-      NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - SUCESS\n");
-    } else {
-      NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - FAILED\n");
-    }
+      if ((gtxldo_status == NFCSTATUS_SUCCESS) &&
+              (gagc_value_status == NFCSTATUS_SUCCESS) &&
+              (gagc_nfcld_status == NFCSTATUS_SUCCESS)
+              && ((nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST) &&
+                      (gagc_differential_status == NFCSTATUS_SUCCESS))) {
+          antenna_st_status = NFCSTATUS_SUCCESS;
+          NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - SUCESS\n");
+      } else {
+          NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - FAILED\n");
+      }
   } else {
-    NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - FAILED\n");
+      NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - FAILED\n");
   }
 
   NXPLOG_NCIHAL_D("phNxpNciHal_AntennaSelfTest - end\n");
diff --git a/halimpl/pn54x/tml/phTmlNfc.c b/halimpl/pn54x/tml/phTmlNfc.c
index 180d8a9..9f4f8aa 100644
--- a/halimpl/pn54x/tml/phTmlNfc.c
+++ b/halimpl/pn54x/tml/phTmlNfc.c
@@ -34,9 +34,8 @@
  */
 #define PHTMLNFC_MAXTIME_RETRANSMIT (200U)
 #define MAX_WRITE_RETRY_COUNT 0x03
-#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true)
 #define MAX_READ_RETRY_COUNT 0x05
-#endif
+
 /* Retry Count = Standby Recovery time of NFCC / Retransmission time + 1 */
 static uint8_t bCurrentRetryCount = (2000 / PHTMLNFC_MAXTIME_RETRANSMIT) + 1;
 
@@ -312,9 +311,7 @@
   NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
   int32_t dwNoBytesWrRd = PH_TMLNFC_RESET_VALUE;
   uint8_t temp[260];
-#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true)
   static uint8_t read_count = 0;
-#endif
 
   /* Transaction info buffer to be passed to Callback Thread */
   static phTmlNfc_TransactInfo_t tTransactionInfo;
@@ -349,46 +346,46 @@
             phTmlNfc_i2c_read(gpphTmlNfc_Context->pDevHandle, temp, 260);
 
         if (-1 == dwNoBytesWrRd) {
-          NXPLOG_TML_E("PN54X - Error in I2C Read.....\n");
-#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true)
-          if (read_count <= MAX_READ_RETRY_COUNT) {
-            read_count++;
-            /*sleep for 30/60/90/120/150 msec between each read trial incase of
-             * read error*/
-            usleep(read_count * 30 * 1000);
-          } else {
-            /* Fill the Transaction info structure to be passed to Callback
-             * Function */
-            tTransactionInfo.wStatus = NFCSTATUS_READ_FAILED;
-            // tTransactionInfo.pBuff = gpphTmlNfc_Context->tReadInfo.pBuffer;
-            /* Actual number of bytes read is filled in the structure */
-            // tTransactionInfo.wLength = gpphTmlNfc_Context->tReadInfo.wLength;
+            NXPLOG_TML_E("PN54X - Error in I2C Read.....\n");
+            if(nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT) {
+                if (read_count <= MAX_READ_RETRY_COUNT) {
+                    read_count++;
+                    /*sleep for 30/60/90/120/150 msec between each read trial incase of
+                     * read error*/
+                    usleep(read_count * 30 * 1000);
+                } else {
+                    /* Fill the Transaction info structure to be passed to Callback
+                     * Function */
+                    tTransactionInfo.wStatus = NFCSTATUS_READ_FAILED;
+                    // tTransactionInfo.pBuff = gpphTmlNfc_Context->tReadInfo.pBuffer;
+                    /* Actual number of bytes read is filled in the structure */
+                    // tTransactionInfo.wLength = gpphTmlNfc_Context->tReadInfo.wLength;
 
-            /* Read operation Failed. Post a Message onto Callback Thread*/
-            /* Prepare the message to be posted on User thread */
-            tDeferredInfo.pCallback = &phTmlNfc_ReadDeferredCb;
-            tDeferredInfo.pParameter = &tTransactionInfo;
-            tMsg.eMsgType = PH_LIBNFC_DEFERREDCALL_MSG;
-            tMsg.pMsgData = &tDeferredInfo;
-            tMsg.Size = sizeof(tDeferredInfo);
-            NXPLOG_TML_D("PN54X - Posting read failure message.....\n");
-            phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId,
-                                  &tMsg);
-            return;
-          }
-#endif
+                    /* Read operation Failed. Post a Message onto Callback Thread*/
+                    /* Prepare the message to be posted on User thread */
+                    tDeferredInfo.pCallback = &phTmlNfc_ReadDeferredCb;
+                    tDeferredInfo.pParameter = &tTransactionInfo;
+                    tMsg.eMsgType = PH_LIBNFC_DEFERREDCALL_MSG;
+                    tMsg.pMsgData = &tDeferredInfo;
+                    tMsg.Size = sizeof(tDeferredInfo);
+                    NXPLOG_TML_D("PN54X - Posting read failure message.....\n");
+                    phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId,
+                            &tMsg);
+                    return;
+                }
+            }
           sem_post(&gpphTmlNfc_Context->rxSemaphore);
         } else if (dwNoBytesWrRd > 260) {
           NXPLOG_TML_E("Numer of bytes read exceeds the limit 260.....\n");
-#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true)
-          read_count = 0;
-#endif
+          if(nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT) {
+              read_count = 0;
+          }
           sem_post(&gpphTmlNfc_Context->rxSemaphore);
         } else {
           memcpy(gpphTmlNfc_Context->tReadInfo.pBuffer, temp, dwNoBytesWrRd);
-#if (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true)
-          read_count = 0;
-#endif
+          if(nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT) {
+              read_count = 0;
+          }
           NXPLOG_TML_D("PN54X - I2C Read successful.....len = %d\n",
                        dwNoBytesWrRd);
           /* This has to be reset only after a successful read */
@@ -429,10 +426,14 @@
           tMsg.Size = sizeof(tDeferredInfo);
           /*Don't wait for posting notifications. Only wait for posting
            * responses*/
+          /*TML reader writer callback syncronization-- START*/
+          pthread_mutex_lock(&gpphTmlNfc_Context->wait_busy_lock);
           if ((gpphTmlNfc_Context->gWriterCbflag == false) &&
               ((gpphTmlNfc_Context->tReadInfo.pBuffer[0] & 0x60) != 0x60)) {
             phTmlNfc_WaitWriteComplete();
           }
+          /*TML reader writer callback syncronization-- END*/
+          pthread_mutex_unlock(&gpphTmlNfc_Context->wait_busy_lock);
           NXPLOG_TML_D("PN54X - Posting read message.....\n");
           phNxpNciHal_print_packet("RECV",
                                    gpphTmlNfc_Context->tReadInfo.pBuffer,
@@ -559,8 +560,12 @@
           NXPLOG_TML_D("PN54X - Posting Fresh Write message.....\n");
           phTmlNfc_DeferredCall(gpphTmlNfc_Context->dwCallbackThreadId, &tMsg);
           if (NFCSTATUS_SUCCESS == wStatus) {
+            /*TML reader writer thread callback syncronization---START*/
+            pthread_mutex_lock(&gpphTmlNfc_Context->wait_busy_lock);
             gpphTmlNfc_Context->gWriterCbflag = true;
             phTmlNfc_SignalWriteComplete();
+            /*TML reader writer thread callback syncronization---END*/
+            pthread_mutex_unlock(&gpphTmlNfc_Context->wait_busy_lock);
           }
         }
       } else {
@@ -928,70 +933,98 @@
         sem_post(&gpphTmlNfc_Context->rxSemaphore);
         break;
       }
-#if (NFC_NXP_ESE == TRUE)
       case phTmlNfc_e_SetJcopDwnldEnable: {
-        wStatus = phTmlNfc_i2c_set_Jcop_dwnld_state(
-            gpphTmlNfc_Context->pDevHandle, JCP_DWNLD_START);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_i2c_set_Jcop_dwnld_state(
+                      gpphTmlNfc_Context->pDevHandle, JCP_DWNLD_START);
+          }
+          break;
       }
       case phTmlNfc_e_SetJcopDwnldDisable: {
-        wStatus = phTmlNfc_i2c_set_Jcop_dwnld_state(
-            gpphTmlNfc_Context->pDevHandle, JCP_DWP_DWNLD_COMPLETE);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_i2c_set_Jcop_dwnld_state(
+                      gpphTmlNfc_Context->pDevHandle, JCP_DWP_DWNLD_COMPLETE);
+          }
+          break;
       }
       case phTmlNfc_e_SetNfcServicePid: {
-        wStatus =
-            phTmlNfc_set_pid(gpphTmlNfc_Context->pDevHandle,gpphTmlNfc_Context->nfc_service_pid);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_set_pid(gpphTmlNfc_Context->pDevHandle,
+                      gpphTmlNfc_Context->nfc_service_pid);
+          }
+          break;
       }
       case phTmlNfc_e_GetP61PwrMode: {
-        wStatus =
-            phTmlNfc_i2c_get_p61_power_state(gpphTmlNfc_Context->pDevHandle);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_i2c_get_p61_power_state(
+                      gpphTmlNfc_Context->pDevHandle);
+          }
+          break;
       }
       case phTmlNfc_e_SetP61WiredMode: {
-        wStatus =
-            phTmlNfc_i2c_set_p61_power_state(gpphTmlNfc_Context->pDevHandle, 1);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_i2c_set_p61_power_state(
+                              gpphTmlNfc_Context->pDevHandle, 1);
+          }
+          break;
       }
       case phTmlNfc_e_SetP61IdleMode: {
-        wStatus =
-            phTmlNfc_i2c_set_p61_power_state(gpphTmlNfc_Context->pDevHandle, 0);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_i2c_set_p61_power_state(
+                              gpphTmlNfc_Context->pDevHandle, 0);
+          }
+          break;
       }
       case phTmlNfc_e_SetP61DisableMode: {
-        wStatus =
-            phTmlNfc_i2c_set_p61_power_state(gpphTmlNfc_Context->pDevHandle, 2);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_i2c_set_p61_power_state(
+                              gpphTmlNfc_Context->pDevHandle, 2);
+          }
+          break;
       }
       case phTmlNfc_e_SetP61EnableMode: {
-        wStatus =
-            phTmlNfc_i2c_set_p61_power_state(gpphTmlNfc_Context->pDevHandle, 3);
-        break;
+          {
+              wStatus = phTmlNfc_i2c_set_p61_power_state(
+                      gpphTmlNfc_Context->pDevHandle, 3);
+          }
+          break;
       }
       case phTmlNfc_e_RelP61Access: {
-        wStatus =
-            phTmlNfc_i2c_set_p61_power_state(gpphTmlNfc_Context->pDevHandle, 4);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_i2c_set_p61_power_state(
+                      gpphTmlNfc_Context->pDevHandle, 4);
+          }
+          break;
       }
       case phTmlNfc_e_eSEChipRstMode: {
-        wStatus = phTmlNfc_i2c_reset(gpphTmlNfc_Context->pDevHandle, 3);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_i2c_reset(
+                      gpphTmlNfc_Context->pDevHandle, 3);
+          }
+          break;
       }
       case phTmlNfc_e_SetLegacyPowerScheme: {
-        wStatus = phTmlNfc_set_power_scheme(gpphTmlNfc_Context->pDevHandle, 2);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_set_power_scheme(
+                      gpphTmlNfc_Context->pDevHandle, 2);
+          }
+          break;
       }
       case phTmlNfc_e_SetExtPMUPowerScheme: {
-        wStatus = phTmlNfc_set_power_scheme(gpphTmlNfc_Context->pDevHandle, 3);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_set_power_scheme(
+                      gpphTmlNfc_Context->pDevHandle, 3);
+          }
+          break;
       }
       case phTmlNfc_e_SetPN67TPowerScheme: {
-        wStatus = phTmlNfc_set_power_scheme(gpphTmlNfc_Context->pDevHandle, 1);
-        break;
+          if(nfcFL.nfcNxpEse) {
+              wStatus = phTmlNfc_set_power_scheme(
+                      gpphTmlNfc_Context->pDevHandle, 1);
+          }
+          break;
       }
 
-#endif
       default: {
         wStatus = NFCSTATUS_INVALID_PARAMETER;
         break;
@@ -1097,7 +1130,6 @@
   if (clock_gettime(CLOCK_MONOTONIC, &absTimeout) == -1) {
     NXPLOG_TML_E("Reader Thread clock_gettime failed");
   } else {
-    pthread_mutex_lock(&gpphTmlNfc_Context->wait_busy_lock);
     absTimeout.tv_sec += 1; /*1 second timeout*/
     gpphTmlNfc_Context->wait_busy_flag = true;
     NXPLOG_TML_D("phTmlNfc_WaitWriteComplete - enter");
@@ -1108,7 +1140,6 @@
       NXPLOG_TML_E("Reader Thread wait failed");
     }
     NXPLOG_TML_D("phTmlNfc_WaitWriteComplete - exit");
-    pthread_mutex_unlock(&gpphTmlNfc_Context->wait_busy_lock);
   }
 }
 
@@ -1127,14 +1158,13 @@
   int ret = -1;
   if (gpphTmlNfc_Context->wait_busy_flag == true) {
     NXPLOG_TML_D("phTmlNfc_SignalWriteComplete - enter");
-    pthread_mutex_lock(&gpphTmlNfc_Context->wait_busy_lock);
     gpphTmlNfc_Context->wait_busy_flag = false;
+
     ret = pthread_cond_signal(&gpphTmlNfc_Context->wait_busy_condition);
     if (ret) {
       NXPLOG_TML_E(" phTmlNfc_SignalWriteComplete failed, error = 0x%X", ret);
     }
     NXPLOG_TML_D("phTmlNfc_SignalWriteComplete - exit");
-    pthread_mutex_unlock(&gpphTmlNfc_Context->wait_busy_lock);
   }
 }
 
diff --git a/halimpl/pn54x/tml/phTmlNfc.h b/halimpl/pn54x/tml/phTmlNfc.h
index 99163c3..5bdfb80 100644
--- a/halimpl/pn54x/tml/phTmlNfc.h
+++ b/halimpl/pn54x/tml/phTmlNfc.h
@@ -27,12 +27,6 @@
 
 #ifndef PHTMLNFC_H
 #define PHTMLNFC_H
-#ifndef NXP_NFCC_FEATURES_H
-#include <NXP_NFCC_Features.h>
-#endif
-#ifndef NXP_ESE_FEATURES_H
-#include <NXP_ESE_Features.h>
-#endif
 #include <phNfcCommon.h>
 
 /*
@@ -111,10 +105,7 @@
   phTmlNfc_e_ResetDevice = PH_TMLNFC_RESETDEVICE, /* Reset the device */
   phTmlNfc_e_EnableDownloadMode, /* Do the hardware setting to enter into
                                     download mode */
-  phTmlNfc_e_EnableNormalMode /* Hardware setting for normal mode of operation
-                                 */
-#if (NFC_NXP_ESE == TRUE)
-  ,
+  phTmlNfc_e_EnableNormalMode, /* Hardware setting for normal mode of operation*/
   phTmlNfc_e_SetNfcServicePid, /* Register the Nfc service PID with the driver
                                   */
   phTmlNfc_e_GetP61PwrMode,    /* Get the current P61 mode of operation */
@@ -127,15 +118,10 @@
   phTmlNfc_e_RelP61Access,      /*Release the P61 lock*/
   phTmlNfc_e_SetLegacyPowerScheme,
   phTmlNfc_e_SetExtPMUPowerScheme,
-  phTmlNfc_e_SetPN67TPowerScheme
-#if (NXP_ESE_SVDD_SYNC == true)
-  ,
-  phTmlNfc_e_RelP61SvddWait
-#endif
-  ,
+  phTmlNfc_e_SetPN67TPowerScheme,
+  phTmlNfc_e_RelP61SvddWait,
   phTmlNfc_e_SetJcopDwnldEnable,
   phTmlNfc_e_SetJcopDwnldDisable
-#endif
 } phTmlNfc_ControlCode_t; /* Control code for IOCTL call */
 
 /*
diff --git a/halimpl/pn54x/tml/phTmlNfc_i2c.c b/halimpl/pn54x/tml/phTmlNfc_i2c.c
index 776f54d..55d0c0e 100644
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.c
+++ b/halimpl/pn54x/tml/phTmlNfc_i2c.c
@@ -308,7 +308,6 @@
   return ret;
 }
 
-#if (NFC_NXP_ESE == TRUE)
 /*******************************************************************************
 **
 ** Function         phTmlNfc_i2c_set_Jcop_dwnld_state
@@ -322,7 +321,12 @@
 **
 *******************************************************************************/
 NFCSTATUS phTmlNfc_i2c_set_Jcop_dwnld_state(void* pDevHandle, long level) {
-  uint32_t ret = -1;
+    NXPLOG_TML_D("phTmlNfc_i2c_set_Jcop_dwnld_state()");
+    if(!nfcFL.nfcNxpEse) {
+        NXPLOG_TML_D("NxpEse not available. Returning");
+        return NFCSTATUS_FAILED;
+    }
+  int32_t ret = -1;
   NFCSTATUS wStatus = NFCSTATUS_SUCCESS;
 
   NXPLOG_TML_D("phTmlNfc_i2c_set_Jcop_dwnld_state(), level %ld", level);
@@ -360,6 +364,11 @@
 **
 *******************************************************************************/
 NFCSTATUS phTmlNfc_set_pid(void* pDevHandle, long pid) {
+    NXPLOG_TML_D("phTmlNfc_set_pid()");
+        if(!nfcFL.nfcNxpEse) {
+            NXPLOG_TML_D("NxpEse not available. Returning");
+            return NFCSTATUS_FAILED;
+        }
   NFCSTATUS wStatus = NFCSTATUS_FAILED;
   uint32_t ret = -1;
   NXPLOG_TML_D("phTmlNfc_set_pid(), pid  %ld", pid);
@@ -388,6 +397,11 @@
 **
 *******************************************************************************/
 NFCSTATUS phTmlNfc_set_power_scheme(void* pDevHandle, long id) {
+    NXPLOG_TML_D("phTmlNfc_set_power_scheme()");
+    if(!nfcFL.nfcNxpEse) {
+        NXPLOG_TML_D("NxpEse not available. Returning");
+        return NFCSTATUS_FAILED;
+    }
   int ret;
   NXPLOG_TML_D("phTmlNfc_set_power_scheme(), id  %ld", id);
 
@@ -411,6 +425,11 @@
 **
 *******************************************************************************/
 NFCSTATUS phTmlNfc_i2c_set_p61_power_state(void* pDevHandle, long level) {
+    NXPLOG_TML_D("phTmlNfc_i2c_set_p61_power_state()");
+    if(!nfcFL.nfcNxpEse) {
+        NXPLOG_TML_D("NxpEse not available. Returning");
+        return NFCSTATUS_FAILED;
+    }
   int ret = -1;
   NFCSTATUS wStatus = NFCSTATUS_FAILED;
 
@@ -451,6 +470,11 @@
 **
 *******************************************************************************/
 NFCSTATUS phTmlNfc_i2c_get_p61_power_state(void* pDevHandle) {
+    NXPLOG_TML_D("phTmlNfc_i2c_get_p61_power_state()");
+    if(!nfcFL.nfcNxpEse) {
+        NXPLOG_TML_D("NxpEse not available. Returning");
+        return NFCSTATUS_FAILED;
+    }
   int ret;
   NFCSTATUS wStatus = NFCSTATUS_FAILED;
   p61_access_state_t p61_current_state = P61_STATE_INVALID;
@@ -481,6 +505,11 @@
 **
 *******************************************************************************/
 NFCSTATUS phTmlNfc_get_ese_access(void* pDevHandle, long timeout) {
+    NXPLOG_TML_D("phTmlNfc_get_ese_access()");
+    if(!nfcFL.nfcNxpEse) {
+        NXPLOG_TML_D("NxpEse not available. Returning");
+        return NFCSTATUS_FAILED;
+    }
   int ret = -1;
   NFCSTATUS status = NFCSTATUS_SUCCESS;
   NXPLOG_TML_D("phTmlNfc_get_ese_access(), enter timeout  %ld", timeout);
@@ -501,7 +530,6 @@
   return status;
 }
 
-#if (NXP_ESE_SVDD_SYNC == true)
 /*******************************************************************************
 **
 ** Function         phTmlNfc_rel_svdd_wait
@@ -514,6 +542,11 @@
 **
 *******************************************************************************/
 NFCSTATUS phTmlNfc_rel_svdd_wait(void* pDevHandle) {
+    NXPLOG_TML_D("phTmlNfc_rel_svdd_wait()");
+    if(!nfcFL.nfcNxpEse && !nfcFL.eseFL._ESE_SVDD_SYNC) {
+        NXPLOG_TML_D("NxpEse and ESE_SVDD_SYNC not available. Returning");
+        return NFCSTATUS_FAILED;
+    }
   int ret = -1;
   NFCSTATUS status = NFCSTATUS_SUCCESS;
   NXPLOG_TML_D("phTmlNfc_rel_svdd_wait(), enter ");
@@ -533,8 +566,7 @@
                status);
   return status;
 }
-#endif
-#endif
+
 /*******************************************************************************
 **
 ** Function         getDownloadFlag
diff --git a/halimpl/pn54x/tml/phTmlNfc_i2c.h b/halimpl/pn54x/tml/phTmlNfc_i2c.h
index 7a4bc30..23441f5 100644
--- a/halimpl/pn54x/tml/phTmlNfc_i2c.h
+++ b/halimpl/pn54x/tml/phTmlNfc_i2c.h
@@ -21,7 +21,6 @@
 /* Basic type definitions */
 #include <phNfcTypes.h>
 #include <phTmlNfc.h>
-#include <NXP_ESE_Features.h>
 
 #define PN544_MAGIC 0xE9
 
@@ -44,16 +43,13 @@
  */
 #define PN544_SET_PWR    _IOW(PN544_MAGIC, 0x01, unsigned int)
 
-#if (NFC_NXP_ESE == TRUE)
 NFCSTATUS phTmlNfc_i2c_get_p61_power_state(void* pDevHandle);
 NFCSTATUS phTmlNfc_i2c_set_p61_power_state(void* pDevHandle, long arg);
 NFCSTATUS phTmlNfc_set_pid(void* pDevHandle, long pid);
 NFCSTATUS phTmlNfc_set_power_scheme(void* pDevHandle, long id);
 NFCSTATUS phTmlNfc_get_ese_access(void* pDevHandle, long timeout);
 NFCSTATUS phTmlNfc_i2c_set_Jcop_dwnld_state(void* pDevHandle, long level);
-#if (NXP_ESE_SVDD_SYNC == true)
 NFCSTATUS phTmlNfc_rel_svdd_wait(void* pDevHandle);
-#endif
 /*
  * SPI Request NFCC to enable p61 power, only in param
  * Only for SPI
@@ -88,15 +84,12 @@
   NFC and SPI will call the ioctl to update the power scheme
 */
 #define P544_SET_POWER_SCHEME _IOW(PN544_MAGIC, 0x07, long)
-#if (NXP_ESE_SVDD_SYNC == true)
 /*
   NFC will call the ioctl to release the svdd protection
 */
 #define P544_REL_SVDD_WAIT _IOW(PN544_MAGIC, 0x08, long)
-#endif
 /* SPI or DWP can call this ioctl to set the JCOP download
  * state of P61
  *
 */
 #define PN544_SET_DWNLD_STATUS _IOW(PN544_MAGIC, 0x09, long)
-#endif
diff --git a/halimpl/pn54x/utils/phNxpConfig.cpp b/halimpl/pn54x/utils/phNxpConfig.cpp
index 9d05904..fae228e 100644
--- a/halimpl/pn54x/utils/phNxpConfig.cpp
+++ b/halimpl/pn54x/utils/phNxpConfig.cpp
@@ -1,5 +1,5 @@
 /******************************************************************************
- *  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ *  Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
  *  Not a Contribution.
  *
  *  Copyright (C) 2011-2012 Broadcom Corporation
@@ -69,7 +69,7 @@
 
 #if 1
 const char* transport_config_paths[] = {"/odm/etc/", "/vendor/etc/", "/etc/"};
-const char transit_config_path[] = "/data/nfc/libnfc-nxpTransit.conf";
+const char transit_config_path[] = "/data/vendor/nfc/libnfc-nxpTransit.conf";
 #else
 const char* transport_config_paths[] = {"res/"};
 #endif
@@ -297,6 +297,7 @@
     char soc_info[MAX_SOC_INFO_NAME_LEN] = {'\0'};
     char nq_chipid[PROPERTY_VALUE_MAX] = {0};
     char nq_fw_ver[PROPERTY_VALUE_MAX] = {0};
+    bool nq2xx_present = false;
     string strPath;
     int rc = 0;
     int idx = 0;
@@ -316,16 +317,19 @@
 
     rc = __system_property_get("sys.nfc.nq.chipid", nq_chipid);
     if (rc <= 0)
-        ALOGE("get sys.nfc.nq.chipid fail, rc = %d\n", rc);
+        ALOGE("get sys.nfc.nq.chipid fail, chipid_found = %d\n", rc);
     else
         ALOGD("sys.nfc.nq.chipid = %s\n", nq_chipid);
 
     rc = __system_property_get("sys.nfc.nq.fwver", nq_fw_ver);
     if (rc <= 0)
-        ALOGE("get sys.nfc.nq.fwver fail, rc = %d\n", rc);
+        ALOGE("get sys.nfc.nq.fwver fail, fwver found = %d\n", rc);
     else
         ALOGD("sys.nfc.nq.fwver = %s\n", nq_fw_ver);
 
+    nq2xx_present = (!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX))
+                 || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX));
+
     // Converting the HW_PLATFORM detail that is read from target to lowercase
     for (int i=0;target_type[i];i++)
         target_type[i] = tolower(target_type[i]);
@@ -357,7 +361,7 @@
         case TARGET_MSM8937:
         case TARGET_MSM8917:
         case TARGET_MSM8940:
-            if ((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX))) {
+            if (nq2xx_present) {
                 // NQ210 or NQ220
                 config_id = QRD_TYPE_DEFAULT;
                 strlcpy(config_file, config_name_qrd, MAX_DATA_CONFIG_PATH_LEN);
@@ -385,7 +389,7 @@
         case TARGET_SDM630:
         case TARGET_MSM8998:
         case TARGET_MSM8997:
-            if ((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX))) {
+            if (nq2xx_present) {
                 // NQ210 or NQ220
                 config_id = QRD_TYPE_2;
                 strlcpy(config_file, config_name_qrd2, MAX_DATA_CONFIG_PATH_LEN);
@@ -411,7 +415,7 @@
         case TARGET_MSM8937:
         case TARGET_MSM8917:
         case TARGET_MSM8940:
-            if ((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX))) {
+            if (nq2xx_present) {
                 // NQ210 or NQ220
                 config_id = MTP_TYPE_DEFAULT;
                 strlcpy(config_file, config_name_mtp, MAX_DATA_CONFIG_PATH_LEN);
@@ -434,7 +438,7 @@
         case TARGET_SDM630:
         case TARGET_MSM8998:
         case TARGET_MSM8997:
-            if ((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX))) {
+            if (nq2xx_present) {
                 // NQ210 or NQ220
                 config_id = MTP_TYPE_1;
                 strlcpy(config_file, config_name_mtp1, MAX_DATA_CONFIG_PATH_LEN);
@@ -1062,6 +1066,7 @@
   if ((token.find("P2P_LISTEN_TECH_MASK") != std::string::npos) ||
       (token.find("HOST_LISTEN_TECH_MASK") != std::string::npos) ||
       (token.find("UICC_LISTEN_TECH_MASK") != std::string::npos) ||
+      (token.find("NXP_ESE_LISTEN_TECH_MASK") != std::string::npos) ||
       (token.find("POLLING_TECH_MASK") != std::string::npos) ||
       (token.find("NXP_RF_CONF_BLK") != std::string::npos) ||
       (token.find("NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE") !=
diff --git a/halimpl/pn54x/utils/phNxpConfig.h b/halimpl/pn54x/utils/phNxpConfig.h
index 6a8b22e..63eba34 100644
--- a/halimpl/pn54x/utils/phNxpConfig.h
+++ b/halimpl/pn54x/utils/phNxpConfig.h
@@ -38,9 +38,6 @@
 
 #ifndef __CONFIG_H
 #define __CONFIG_H
-#ifndef NXP_NFCC_FEATURES_H
-#include "NXP_NFCC_Features.h"
-#endif
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -68,6 +65,7 @@
 #define NAME_MIFARE_READER_ENABLE "MIFARE_READER_ENABLE"
 #define NAME_FW_STORAGE "FW_STORAGE"
 #define NAME_NXP_NFC_DEV_NODE "NXP_NFC_DEV_NODE"
+#define NAME_NXP_NFC_CHIP "NXP_NFC_CHIP"
 #define NAME_NXP_FW_NAME "NXP_FW_NAME"
 #define NAME_NXP_FW_PROTECION_OVERRIDE "NXP_FW_PROTECION_OVERRIDE"
 #define NAME_NXP_SYS_CLK_SRC_SEL "NXP_SYS_CLK_SRC_SEL"
@@ -91,11 +89,10 @@
 #define NAME_NXP_NFC_PROFILE_EXTN "NXP_NFC_PROFILE_EXTN"
 #define NAME_NXP_CHINA_TIANJIN_RF_ENABLED "NXP_CHINA_TIANJIN_RF_ENABLED"
 #define NAME_NXP_CHINA_BLK_NUM_CHK_ENABLE "NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE"
-#if (NXP_ESE_POWER_MODE == true)
+#define NAME_NXP_CN_TRANSIT_CMA_BYPASSMODE_ENABLE  "NXP_CN_TRANSIT_CMA_BYPASSMODE_ENABLE"
 #define NAME_NXP_ESE_POWER_DH_CONTROL "NXP_ESE_POWER_DH_CONTROL"
 #define NAME_NXP_ESE_POWER_EXT_PMU "NXP_ESE_POWER_EXT_PMU"
 #define NAME_NXP_ESE_POWER_DH_CONTROL_CFG_1 "NXP_ESE_POWER_DH_CONTROL_CFG_1"
-#endif
 #define NAME_NXP_SWP_SWITCH_TIMEOUT "NXP_SWP_SWITCH_TIMEOUT"
 #define NAME_NXP_SWP_FULL_PWR_ON "NXP_SWP_FULL_PWR_ON"
 #define NAME_NXP_CORE_RF_FIELD "NXP_CORE_RF_FIELD"
@@ -105,17 +102,14 @@
 #define NAME_NXP_TYPEA_UICC_BAUD_RATE "NXP_TYPEA_UICC_BAUD_RATE"
 #define NAME_NXP_TYPEB_UICC_BAUD_RATE "NXP_TYPEB_UICC_BAUD_RATE"
 #define NAME_NXP_SET_CONFIG_ALWAYS "NXP_SET_CONFIG_ALWAYS"
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NXP_NFCC_ROUTING_BLOCK_BIT_PROP == true))
 #define NAME_NXP_PROP_BLACKLIST_ROUTING "NXP_PROP_BLACKLIST_ROUTING"
-#endif
 #define NAME_NXP_WIREDMODE_RESUME_TIMEOUT "NXP_WIREDMODE_RESUME_TIMEOUT"
 #define NAME_NXP_UICC_LISTEN_TECH_MASK "UICC_LISTEN_TECH_MASK"
 #define NAME_NXP_HOST_LISTEN_TECH_MASK "HOST_LISTEN_TECH_MASK"
-#if (NXP_ESE_SVDD_SYNC == true)
+#define NAME_NXP_ESE_LISTEN_TECH_MASK "NXP_ESE_LISTEN_TECH_MASK"
 #define NAME_NXP_SVDD_SYNC_OFF_DELAY "NXP_SVDD_SYNC_OFF_DELAY"
-#endif
-
+#define NAME_NXP_CORE_PROP_SYSTEM_DEBUG "NXP_CORE_PROP_SYSTEM_DEBUG"
+#define NAME_NXP_NCI_PARSER_LIBRARY "NXP_NCI_PARSER_LIBRARY"
 /**
  *  @brief defines the different config files used.
  */
diff --git a/halimpl/pn54x/utils/phNxpNciHal_utils.h b/halimpl/pn54x/utils/phNxpNciHal_utils.h
index e0e7cae..b1a5bfc 100644
--- a/halimpl/pn54x/utils/phNxpNciHal_utils.h
+++ b/halimpl/pn54x/utils/phNxpNciHal_utils.h
@@ -42,6 +42,7 @@
 #include <phNfcStatus.h>
 #include <assert.h>
 #include <errno.h>
+
 /********************* Definitions and structures *****************************/
 
 /* List structures */
diff --git a/p61-jcop-kit/README.md b/p61-jcop-kit/README.md
index 2d4ad46..7b44299 100644
--- a/p61-jcop-kit/README.md
+++ b/p61-jcop-kit/README.md
@@ -22,3 +22,6 @@
 | android-7.1.1_r1                     |  7.3.0_N (PN548C2/PN551) |  SEAccessKit_AR7.3.0_OpnSrc |
 | android-7.1.1_r1                     |  7.4.0_N (PN553) |  SEAccessKit_AR7.4.0_OpnSrc |
 | android-o-preview2                     |  8.0.9_O (PN553/PN557) |  SEAccessKit_AR8.0.9_OpnSrc |
+| android-o-preview2                     |  8.0.C_O (PN553/PN557) |  SEAccessKit_AR8.0.C_OpnSrc |
+| android-o-preview2                     |  8.0.13_O (PN553/PN557) |  SEAccessKit_AR8.0.13_OpnSrc |
+| android-8.0.0_r4               |  8.1.0_O (PN553) |  SEAccessKit_AR8.1.0_OpnSrc |
diff --git a/p61-jcop-kit/src/Ala.cpp b/p61-jcop-kit/src/Ala.cpp
index cd74a43..6790411 100644
--- a/p61-jcop-kit/src/Ala.cpp
+++ b/p61-jcop-kit/src/Ala.cpp
@@ -2479,6 +2479,7 @@
         ALOGE("%s: SUCCESS Response written to script out file; status=0x%lx", fn, (status));
         wStatus = STATUS_OK;
     }
+    fflush(image_info->fResp);
     return wStatus;
 }
 
diff --git a/src/adaptation/NfcAdaptation.cpp b/src/adaptation/NfcAdaptation.cpp
index 9dd148d..273684d 100644
--- a/src/adaptation/NfcAdaptation.cpp
+++ b/src/adaptation/NfcAdaptation.cpp
@@ -63,6 +63,7 @@
 
 NfcAdaptation* NfcAdaptation::mpInstance = NULL;
 ThreadMutex NfcAdaptation::sLock;
+ThreadMutex NfcAdaptation::sIoctlLock;
 sp<INfc> NfcAdaptation::mHal;
 sp<INqNfc> NfcAdaptation::mNqHal;
 INfcClientCallback* NfcAdaptation::mCallback;
@@ -71,6 +72,7 @@
 tHAL_NFC_DATA_CBACK* NfcAdaptation::mHalDataCallback = NULL;
 ThreadCondVar NfcAdaptation::mHalOpenCompletedEvent;
 ThreadCondVar NfcAdaptation::mHalCloseCompletedEvent;
+ThreadCondVar NfcAdaptation::mHalIoctlEvent;
 #if (NXP_EXTNS == TRUE)
 ThreadCondVar NfcAdaptation::mHalCoreResetCompletedEvent;
 ThreadCondVar NfcAdaptation::mHalCoreInitCompletedEvent;
@@ -573,7 +575,9 @@
 *******************************************************************************/
 int NfcAdaptation::HalIoctl(long arg, void* p_data) {
   const char* func = "NfcAdaptation::HalIoctl";
+  mHalIoctlEvent.lock();
   ::android::hardware::nfc::V1_0::NfcData data;
+  AutoThreadMutex a(sIoctlLock);
   nfc_nci_IoctlInOutData_t* pInpOutData = (nfc_nci_IoctlInOutData_t*)p_data;
   int status = 0;
   ALOGD("%s arg=%ld", func, arg);
@@ -582,6 +586,7 @@
   data.setToExternal((uint8_t*)pInpOutData, sizeof(nfc_nci_IoctlInOutData_t));
   mNqHal->ioctl(arg, data, IoctlCallback);
   ALOGD("%s Ioctl Completed for Type=%llu", func, pInpOutData->out.ioctlType);
+  mHalIoctlEvent.unlock();
   return (pInpOutData->out.result);
 }
 
@@ -714,7 +719,6 @@
   return nfa_ee_max_ee_cfg;
 }
 
-
 /*******************************************************************************
 **
 ** Function:    NfcAdaptation::DownloadFirmware
diff --git a/src/adaptation/config.cpp b/src/adaptation/config.cpp
index d610e51..c3fb02b 100644
--- a/src/adaptation/config.cpp
+++ b/src/adaptation/config.cpp
@@ -50,7 +50,7 @@
     (sizeof(transport_config_paths) / sizeof(transport_config_paths[0]));
 
 #if (NXP_EXTNS == TRUE)
-const char transit_config_path[] = "/data/nfc/";
+const char transit_config_path[] = "/data/vendor/nfc/";
 #endif
 
 #define config_name "libnfc-brcm.conf"
@@ -624,6 +624,7 @@
   if ((token.find("P2P_LISTEN_TECH_MASK") != std::string::npos) ||
       (token.find("HOST_LISTEN_TECH_MASK") != std::string::npos) ||
       (token.find("UICC_LISTEN_TECH_MASK") != std::string::npos) ||
+      (token.find("NXP_ESE_LISTEN_TECH_MASK") != std::string::npos) ||
       (token.find("POLLING_TECH_MASK") != std::string::npos) ||
       (token.find("NXP_RF_CONF_BLK") != std::string::npos) ||
       (token.find("NXP_CN_TRANSIT_BLK_NUM_CHECK_ENABLE") !=
diff --git a/src/gki/common/gki_buffer.c b/src/gki/common/gki_buffer.c
index 174296d..09f49e0 100644
--- a/src/gki/common/gki_buffer.c
+++ b/src/gki/common/gki_buffer.c
@@ -96,10 +96,9 @@
       hdr = (BUFFER_HDR_T*)((uint8_t*)hdr + act_size);
       hdr1->p_next = hdr;
     }
-    if (hdr1 != NULL) {
-      hdr1->p_next = NULL;
-      p_cb->freeq[id].p_last = hdr1;
-    }
+    if (hdr1 != NULL) hdr = hdr1;
+    hdr->p_next = NULL;
+    p_cb->freeq[id].p_last = hdr;
   }
   return;
 }
diff --git a/src/hal/include/Nxp_Features.h b/src/hal/include/Nxp_Features.h
new file mode 100644
index 0000000..84ab3dc
--- /dev/null
+++ b/src/hal/include/Nxp_Features.h
@@ -0,0 +1,518 @@
+/*
+ * Copyright (c) 2017, The Linux Foundation. All rights reserved.
+ * Not a Contribution.
+ *
+ * Copyright (C) 2012-2016 NXP Semiconductors
+ *
+ * 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.
+ */
+
+/*
+ * NXP features declarations
+ */
+#include <unistd.h>
+#include <string.h>
+#ifndef NXP_FEATURES_H
+#define NXP_FEATURES_H
+
+#define STRMAX_1 40
+#define STRMAX_2 100
+#define FW_DLL_ROOT_DIR "/system/vendor/firmware/"
+#define FW_DLL_EXTENSION ".so"
+
+#define FW_MOBILE_MAJOR_NUMBER_PN553 0x01
+#define FW_MOBILE_MAJOR_NUMBER_PN551 0x05
+#define FW_MOBILE_MAJOR_NUMBER_PN48AD 0x01
+
+#define NFA_EE_MAX_EE_SUPPORTED 4
+
+#define JCOP_VER_3_1    1
+#define JCOP_VER_3_2    2
+#define JCOP_VER_3_3    3
+#define JCOP_VER_4_0    4
+
+typedef enum {
+    pn547C2 = 0x01,
+    pn65T,
+    pn548C2,
+    pn66T,
+    pn551,
+    pn67T,
+    pn553,
+    pn80T,
+    pn557,
+    pn81T
+}tNFC_chipType;
+
+/*
+ * TODO renaming
+ * */
+typedef struct {
+    /*Flags common to all chip types*/
+    uint8_t _NXP_NFCC_EMPTY_DATA_PACKET                     : 1;
+    uint8_t _GEMALTO_SE_SUPPORT                             : 1;
+    uint8_t _NFCC_I2C_READ_WRITE_IMPROVEMENT                : 1;
+    uint8_t _NFCC_MIFARE_TIANJIN                            : 1;
+    uint8_t _NFCC_MW_RCVRY_BLK_FW_DNLD                      : 1;
+    uint8_t _NFCC_DYNAMIC_DUAL_UICC                         : 1;
+    uint8_t _NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH              : 1;
+    uint8_t _NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH           : 1;
+    uint8_t _NFCC_FW_WA                                     : 1;
+    uint8_t _NFCC_FORCE_NCI1_0_INIT                         : 1;
+    uint8_t _NFCC_ROUTING_BLOCK_BIT                         : 1;
+    uint8_t _NFCC_SPI_FW_DOWNLOAD_SYNC                      : 1;
+    uint8_t _HW_ANTENNA_LOOP4_SELF_TEST                     : 1;
+    uint8_t _NFCEE_REMOVED_NTF_RECOVERY                     : 1;
+    uint8_t _NFCC_FORCE_FW_DOWNLOAD                         : 1;
+    uint8_t _UICC_CREATE_CONNECTIVITY_PIPE                  : 1;
+    uint8_t _NFCC_AID_MATCHING_PLATFORM_CONFIG              : 1;
+    uint8_t _NFCC_ROUTING_BLOCK_BIT_PROP                    : 1;
+    uint8_t _NXP_NFC_UICC_ETSI12                            : 1;
+    uint8_t _NFA_EE_MAX_EE_SUPPORTED                        : 3;
+}tNfc_nfccFeatureList;
+/*
+ * TODO renaming
+ * */
+typedef struct {
+    uint8_t _ESE_EXCLUSIVE_WIRED_MODE                    : 2;
+    uint8_t _ESE_WIRED_MODE_RESUME                       : 2;
+    uint8_t _ESE_WIRED_MODE_TIMEOUT                      : 2;
+    uint8_t _ESE_PN67T_RESET                             : 2;
+    uint8_t _ESE_APDU_GATE_RESET                         : 2;
+    uint8_t _ESE_WIRED_MODE_DISABLE_DISCOVERY            : 1;
+    uint8_t _LEGACY_APDU_GATE                            : 1;
+    uint8_t _TRIPLE_MODE_PROTECTION                      : 1;
+    uint8_t _ESE_FELICA_CLT                              : 1;
+    uint8_t _WIRED_MODE_STANDBY_PROP                     : 1;
+    uint8_t _WIRED_MODE_STANDBY                          : 1;
+    uint8_t _ESE_DUAL_MODE_PRIO_SCHEME                   : 2;
+    uint8_t _ESE_FORCE_ENABLE                            : 1;
+    uint8_t _ESE_RESET_METHOD                            : 1;
+    uint8_t _EXCLUDE_NV_MEM_DEPENDENCY                   : 1;
+    uint8_t _ESE_ETSI_READER_ENABLE                      : 1;
+    uint8_t _ESE_SVDD_SYNC                               : 1;
+    uint8_t _NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION  : 1;
+    uint8_t _ESE_JCOP_DWNLD_PROTECTION                   : 1;
+    uint8_t _UICC_HANDLE_CLEAR_ALL_PIPES                 : 1;
+    uint8_t _GP_CONTINOUS_PROCESSING                     : 1;
+    uint8_t _ESE_DWP_SPI_SYNC_ENABLE                     : 1;
+    uint8_t _ESE_ETSI12_PROP_INIT                        : 1;
+    uint8_t _ESE_WIRED_MODE_PRIO                         : 1;
+    uint8_t _ESE_UICC_EXCLUSIVE_WIRED_MODE               : 1;
+    uint8_t _ESE_POWER_MODE                              : 1;
+    uint8_t _ESE_P73_ISO_RST                             : 1;
+    uint8_t _BLOCK_PROPRIETARY_APDU_GATE                 : 1;
+    uint8_t _JCOP_WA_ENABLE                              : 1;
+    uint8_t _NXP_LDR_SVC_VER_2                           : 1;
+    uint8_t _NXP_ESE_VER                                 : 3;
+}tNfc_eseFeatureList;
+/*
+ * TODO renaming
+ * */
+typedef struct {
+    uint8_t _NFCC_RESET_RSP_LEN;
+}tNfc_platformFeatureList;
+
+typedef struct {
+    uint8_t _NCI_INTERFACE_UICC_DIRECT;
+    uint8_t _NCI_INTERFACE_ESE_DIRECT;
+    uint8_t _NCI_PWR_LINK_PARAM_CMD_SIZE;
+    uint8_t _NCI_EE_PWR_LINK_ALWAYS_ON;
+    uint8_t _NFA_EE_MAX_AID_ENTRIES;
+    uint8_t _NFC_NXP_AID_MAX_SIZE_DYN : 1;
+    uint8_t _FW_LIB_PATH[STRMAX_2];
+    uint8_t _PLATFORM_LIB_PATH[STRMAX_2];
+    uint8_t _PKU_LIB_PATH[STRMAX_2];
+    uint16_t _PHDNLDNFC_USERDATA_EEPROM_OFFSET;
+    uint16_t _PHDNLDNFC_USERDATA_EEPROM_LEN;
+    uint8_t  _FW_MOBILE_MAJOR_NUMBER;
+}tNfc_nfcMwFeatureList;
+/*
+ * TODO renaming
+ * */
+typedef struct {
+    uint8_t nfcNxpEse : 1;
+    tNFC_chipType chipType;
+    tNfc_nfccFeatureList nfccFL;
+    tNfc_eseFeatureList eseFL;
+    tNfc_platformFeatureList platformFL;
+    tNfc_nfcMwFeatureList nfcMwFL;
+}tNfc_featureList;
+
+extern tNfc_featureList nfcFL;
+
+#define CONFIGURE_FEATURELIST(chipType) {                                   \
+        nfcFL.chipType = chipType;                                          \
+        nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN = true;                     \
+        if(chipType == pn81T) {                                             \
+            nfcFL.chipType = pn557;                                         \
+        }                                                                   \
+        else if(chipType == pn80T) {                                        \
+            nfcFL.chipType = pn553;                                         \
+        }                                                                   \
+        else if(chipType == pn67T) {                                        \
+            nfcFL.chipType = pn551;                                         \
+        }                                                                   \
+        else if(chipType == pn66T) {                                        \
+            nfcFL.chipType = pn548C2;                                       \
+        }                                                                   \
+        else if(chipType == pn65T) {                                        \
+            nfcFL.chipType = pn547C2;                                       \
+        }                                                                   \
+        if ((chipType == pn65T) || (chipType == pn66T) ||                   \
+                (chipType == pn67T) || (chipType == pn80T) ||               \
+                (chipType == pn81T)) {                                      \
+            nfcFL.nfcNxpEse = true;                                         \
+            CONFIGURE_FEATURELIST_NFCC_WITH_ESE(chipType)                   \
+        } \
+        else {                                                              \
+            nfcFL.nfcNxpEse = false;                                        \
+            CONFIGURE_FEATURELIST_NFCC(chipType)                            \
+        }                                                                   \
+        \
+        \
+}
+
+#define CONFIGURE_FEATURELIST_NFCC_WITH_ESE(chipType) {                     \
+        nfcFL.nfccFL._NXP_NFCC_EMPTY_DATA_PACKET = true;                    \
+        nfcFL.nfccFL._GEMALTO_SE_SUPPORT = true;                            \
+        \
+        \
+        nfcFL.eseFL._ESE_EXCLUSIVE_WIRED_MODE = 1;                          \
+        nfcFL.eseFL._ESE_WIRED_MODE_RESUME = 2;                             \
+        nfcFL.eseFL._ESE_PN67T_RESET = 1;                                   \
+        nfcFL.eseFL._ESE_APDU_GATE_RESET = 2;                               \
+        nfcFL.eseFL._NXP_ESE_VER = JCOP_VER_4_0;                            \
+        nfcFL.eseFL._NXP_LDR_SVC_VER_2 = true;                              \
+        \
+        \
+        if (chipType == pn81T) {                                            \
+            CONFIGURE_FEATURELIST_NFCC(pn557)                               \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true;                 \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 4;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_FELICA_CLT = true;                             \
+            nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME =                        \
+            nfcFL.eseFL._ESE_WIRED_MODE_RESUME;                             \
+            nfcFL.eseFL._ESE_RESET_METHOD = true;                           \
+            nfcFL.eseFL._ESE_POWER_MODE = true;                             \
+            nfcFL.eseFL._ESE_P73_ISO_RST = true;                            \
+            nfcFL.eseFL._WIRED_MODE_STANDBY = true;                         \
+            nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
+            nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
+            nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = true;                  \
+            nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = true;                \
+            nfcFL.eseFL._GP_CONTINOUS_PROCESSING = false;                   \
+            nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
+            nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true;                       \
+        }                                                                   \
+        if (chipType == pn80T) {                                            \
+            CONFIGURE_FEATURELIST_NFCC(pn553)                               \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 4;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_FELICA_CLT = true;                             \
+            nfcFL.eseFL._WIRED_MODE_STANDBY = true;                         \
+            nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME =                        \
+            nfcFL.eseFL._ESE_WIRED_MODE_RESUME;                             \
+            nfcFL.eseFL._ESE_RESET_METHOD = true;                           \
+            nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
+            nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
+            nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = true;                  \
+            nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = true;                \
+            nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
+            nfcFL.eseFL._ESE_POWER_MODE = true;                             \
+            nfcFL.eseFL._ESE_P73_ISO_RST = true;                            \
+            \
+            \
+            nfcFL.nfcMwFL._NCI_PWR_LINK_PARAM_CMD_SIZE = 0x02;              \
+            nfcFL.nfcMwFL._NCI_EE_PWR_LINK_ALWAYS_ON = 0x01;                \
+        }                                                                   \
+        else if (chipType == pn67T)                                         \
+        {                                                                   \
+            CONFIGURE_FEATURELIST_NFCC(pn551)                               \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
+            \
+            \
+            nfcFL.eseFL._TRIPLE_MODE_PROTECTION = true;                     \
+            nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = true;                    \
+            nfcFL.eseFL._ESE_FORCE_ENABLE = true;                           \
+            nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
+            nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
+            nfcFL.eseFL._LEGACY_APDU_GATE = true;                           \
+            nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = true; \
+            nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
+        }                                                                   \
+        else if (chipType == pn66T)                                         \
+        {                                                                   \
+            CONFIGURE_FEATURELIST_NFCC(pn548C2)                             \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
+            \
+            \
+            nfcFL.eseFL._TRIPLE_MODE_PROTECTION = true;                     \
+            nfcFL.eseFL._WIRED_MODE_STANDBY = true;                         \
+            nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = true;                    \
+            nfcFL.eseFL._ESE_FORCE_ENABLE = true;                           \
+            nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true;                     \
+            nfcFL.eseFL._ESE_SVDD_SYNC = true;                              \
+            nfcFL.eseFL._LEGACY_APDU_GATE = true;                           \
+            nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = true; \
+            nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true;                    \
+        }                                                                   \
+        else if (chipType == pn65T)                                         \
+        {                                                                   \
+            CONFIGURE_FEATURELIST_NFCC(pn547C2)                             \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
+            nfcFL.eseFL._ESE_WIRED_MODE_DISABLE_DISCOVERY = true;           \
+            nfcFL.eseFL._LEGACY_APDU_GATE = true;                           \
+        }                                                                   \
+}
+
+
+#define CONFIGURE_FEATURELIST_NFCC(chipType) {                              \
+        nfcFL.eseFL._ESE_WIRED_MODE_TIMEOUT = 3;                            \
+        nfcFL.eseFL._ESE_WIRED_MODE_DISABLE_DISCOVERY = false;              \
+        nfcFL.eseFL._LEGACY_APDU_GATE = false;                              \
+        nfcFL.eseFL._TRIPLE_MODE_PROTECTION = false;                        \
+        nfcFL.eseFL._ESE_FELICA_CLT = false;                                \
+        nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = false;                       \
+        nfcFL.eseFL._WIRED_MODE_STANDBY = false;                            \
+        nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME =                            \
+        nfcFL.eseFL._ESE_WIRED_MODE_TIMEOUT;                                \
+        nfcFL.eseFL._ESE_FORCE_ENABLE = false;                              \
+        nfcFL.eseFL._ESE_RESET_METHOD = false;                              \
+        nfcFL.eseFL._ESE_ETSI_READER_ENABLE = false;                        \
+        nfcFL.eseFL._ESE_SVDD_SYNC = false;                                 \
+        nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = false;    \
+        nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = false;                     \
+        nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = false;                   \
+        nfcFL.eseFL._GP_CONTINOUS_PROCESSING = false;                       \
+        nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = false;                       \
+        nfcFL.eseFL._ESE_ETSI12_PROP_INIT = false;                          \
+        nfcFL.eseFL._ESE_WIRED_MODE_PRIO = false;                           \
+        nfcFL.eseFL._ESE_UICC_EXCLUSIVE_WIRED_MODE = false;                 \
+        nfcFL.eseFL._ESE_POWER_MODE = false;                                \
+        nfcFL.eseFL._ESE_P73_ISO_RST = false;                               \
+        nfcFL.eseFL._BLOCK_PROPRIETARY_APDU_GATE = false;                   \
+        nfcFL.eseFL._JCOP_WA_ENABLE = true;                                 \
+        nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = false;                     \
+        nfcFL.nfccFL._NXP_NFC_UICC_ETSI12 = false;                          \
+        nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                    \
+        \
+        \
+        nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0;                           \
+        \
+        \
+        nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x00;                    \
+        nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x00;                     \
+        nfcFL.nfcMwFL._NCI_PWR_LINK_PARAM_CMD_SIZE = 0x02;                  \
+        nfcFL.nfcMwFL._NCI_EE_PWR_LINK_ALWAYS_ON = 0x01;                    \
+        nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x023CU;          \
+        nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C80U;             \
+        nfcFL.nfcMwFL._FW_MOBILE_MAJOR_NUMBER =                             \
+        FW_MOBILE_MAJOR_NUMBER_PN48AD;                                      \
+        \
+        \
+        if (chipType == pn557)                                              \
+        {                                                                   \
+            nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;           \
+            nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = false;                      \
+            nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = true;                 \
+            nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = true;                    \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false;        \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = true;      \
+            nfcFL.nfccFL._NFCC_FW_WA = true;                                \
+            nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                   \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true;                 \
+            nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = false;               \
+            nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                \
+            nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = true;                    \
+            nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = true;             \
+            nfcFL.nfccFL._NXP_NFC_UICC_ETSI12 = false;                      \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true;                       \
+            nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = true;                  \
+            \
+            \
+            nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x10U;                   \
+            \
+            \
+        }                                                                   \
+        else if (chipType == pn553)                                         \
+        {                                                                   \
+            nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;           \
+            nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = false;                      \
+            nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = true;                 \
+            nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = true;                    \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false;        \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = true;      \
+            nfcFL.nfccFL._NFCC_FW_WA = true;                                \
+            nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = true;                    \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = true;                    \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true;                 \
+            nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = false;               \
+            nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                \
+            nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = true;                    \
+            nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = true;             \
+            nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = false;        \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = false;              \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true;                       \
+            nfcFL.eseFL._JCOP_WA_ENABLE = false;                            \
+            nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = true;                  \
+            \
+            \
+            nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x10U;                   \
+            \
+            \
+            nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82;                \
+            nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83;                 \
+            \
+            \
+            SRTCPY_FW("libpn553tc_fw", "libpn553tc_fw_platform",            \
+                    "libpn553tc_fw_pku")                                    \
+            \
+            \
+            nfcFL.nfcMwFL._FW_MOBILE_MAJOR_NUMBER =                         \
+            FW_MOBILE_MAJOR_NUMBER_PN553;                                   \
+            \
+            \
+        }                                                                   \
+        else if (chipType == pn551)                                         \
+        {                                                                   \
+            nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;           \
+            nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true;                       \
+            nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false;                \
+            nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = false;                   \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = true;         \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false;     \
+            nfcFL.nfccFL._NFCC_FW_WA = false;                               \
+            nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                   \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false;                   \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                \
+            nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true;                \
+            nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                \
+            nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false;                   \
+            nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false;            \
+            nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true;         \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = true;               \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_FORCE_ENABLE = true;                           \
+            \
+            \
+            nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x11U;                   \
+            \
+            \
+            nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82;                \
+            nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83;                 \
+            \
+            \
+            SRTCPY_FW("libpn551_fw", "libpn551_fw_platform",                \
+                    "libpn551_fw_pku")                                      \
+            \
+            \
+            nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x02BCU;      \
+            nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C00U;         \
+            nfcFL.nfcMwFL._FW_MOBILE_MAJOR_NUMBER =                         \
+            FW_MOBILE_MAJOR_NUMBER_PN551;                                   \
+            \
+            \
+        }                                                                   \
+        else if (chipType == pn548C2)                                       \
+        {                                                                   \
+            nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true;           \
+            nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true;                       \
+            nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false;                \
+            nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = false;                   \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = true;         \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false;     \
+            nfcFL.nfccFL._NFCC_FW_WA = false;                               \
+            nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                   \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false;                   \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                \
+            nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true;                \
+            nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                \
+            nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false;                   \
+            nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false;            \
+            nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true;         \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = true;               \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2;                      \
+            \
+            \
+            nfcFL.eseFL._ESE_FORCE_ENABLE = true;                           \
+            nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true;                       \
+            \
+            \
+            nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82;                \
+            nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83;                 \
+            \
+            \
+            SRTCPY_FW("libpn548ad_fw", "libpn548ad_fw_platform",            \
+                    "libpn548ad_fw_pku")                                    \
+            \
+            \
+            nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x02BCU;      \
+            nfcFL.nfcMwFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C00U;         \
+            \
+            \
+        }                                                                   \
+        else if(chipType == pn547C2)                                        \
+        {                                                                   \
+            nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = false;          \
+            nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true;                       \
+            nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false;                \
+            nfcFL.nfccFL._NFCC_DYNAMIC_DUAL_UICC = false;                   \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false;        \
+            nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false;     \
+            nfcFL.nfccFL._NFCC_FW_WA = false;                               \
+            nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false;                   \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false;                   \
+            nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false;                \
+            nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true;                \
+            nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true;                \
+            nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false;                   \
+            nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false;            \
+            nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true;         \
+            nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = false;              \
+            nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2;                      \
+            \
+            \
+            nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x81;                \
+            nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x82;                 \
+            \
+            \
+            SRTCPY_FW("libpn547_fw", "libpn547_fw_platform",                \
+                    "libpn547_fw_pku")                                      \
+            \
+            \
+        }                                                                   \
+}
+#ifdef __cplusplus
+#define SRTCPY_FW(str1,str2,str3)
+#else
+#define SRTCPY_FW(str1, str2,str3)                                                      \
+        snprintf(nfcFL.nfcMwFL._FW_LIB_PATH, STRMAX_2, "%s%s%s",                        \
+                FW_DLL_ROOT_DIR, str1, FW_DLL_EXTENSION);                               \
+                snprintf(nfcFL.nfcMwFL._PLATFORM_LIB_PATH, STRMAX_2, "%s%s%s",          \
+                        FW_DLL_ROOT_DIR, str2, FW_DLL_EXTENSION);                       \
+                        snprintf(nfcFL.nfcMwFL._PKU_LIB_PATH, STRMAX_2, "%s%s%s",       \
+                                FW_DLL_ROOT_DIR, str3, FW_DLL_EXTENSION);
+#endif
+#endif
diff --git a/src/hal/include/nci_defs.h b/src/hal/include/nci_defs.h
index 0e9ba18..1b7e99e 100644
--- a/src/hal/include/nci_defs.h
+++ b/src/hal/include/nci_defs.h
@@ -273,7 +273,7 @@
 #define NCI_MSG_NFCEE_DISCOVER 0
 #define NCI_MSG_NFCEE_MODE_SET 1
 #define NCI_MSG_NFCEE_STATUS   2
-#if (NXP_EXTNS == TRUE) && (NXP_WIRED_MODE_STANDBY == true)
+#if (NXP_EXTNS == TRUE)
 #define NCI_MSG_NFCEE_PWR_LNK_CTRL 3
 #define NCI_MSG_NFCEE_POWER_LINK_CTRL 4
 #endif
@@ -361,6 +361,12 @@
 #define NCI_RF_PARAM_ID_B_DATA_EX_PARAM \
   0x03 /* B Data Exchange config param  \
           */
+/****************************************************
+ * NCI NFCEE status
+ ****************************************************/
+#define NCI_NFCEE_STS_UNRECOVERABLE_ERROR 0x00
+#define NCI_NFCEE_STS_INIT_STARTED        0x01
+#define NCI_NFCEE_STS_INIT_COMPLETED      0x02
 
 #define NCI_NFCEE_INTERFACE_APDU 0x00
 #define NCI_NFCEE_INTERFACE_HCI_ACCESS 0x01
@@ -443,13 +449,7 @@
 #define NCI_INTERFACE_FIRST_VS 0x80
 #if (NXP_EXTNS == TRUE)
 #define NCI_INTERFACE_MIFARE 0x80
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-#define NCI_INTERFACE_UICC_DIRECT 0x82
-#define NCI_INTERFACE_ESE_DIRECT 0x83
-#else
-#define NCI_INTERFACE_UICC_DIRECT 0x81
-#define NCI_INTERFACE_ESE_DIRECT 0x82
-#endif
+
 #endif
 typedef uint8_t tNCI_INTF_TYPE;
 
@@ -471,14 +471,6 @@
 #define NCI_ROUTE_QUAL_SHORT_SELECT 0x20 /* AID matching is allowed when the SELECT AID is shorter */
 #define NCI_ROUTE_QUAL_BLOCK_ROUTE  0x40 /* AID is blocked in unsupported power mode */
 /**********************************************
- * NCI RF Management / PWR AND LINK CTRl Group Params
- **********************************************/
-#if (NXP_EXTNS == TRUE) && (NXP_WIRED_MODE_STANDBY == true)
-#define NCI_PWR_LINK_PARAM_CMD_SIZE 0x02 /*nfcee id, nfcee_pwr_link_cfg*/
-#define NCI_EE_PWR_LINK_ALWAYS_ON 0x01   /*NFCEE Power Supply always On*/
-#endif
-
-/**********************************************
  * Supported Protocols
  **********************************************/
 #define NCI_PROTOCOL_UNKNOWN 0x00
diff --git a/src/hal/include/nfc_hal_api.h b/src/hal/include/nfc_hal_api.h
index e34e042..ac873c8 100644
--- a/src/hal/include/nfc_hal_api.h
+++ b/src/hal/include/nfc_hal_api.h
@@ -132,6 +132,7 @@
     uint16_t            fwUpdateInf;
     uint16_t            fwDwnldStatus;
     uint16_t            fwMwVerStatus;
+    uint8_t             chipType;
 }outputData_t;
 
 /*
@@ -189,7 +190,8 @@
     HAL_NFC_IOCTL_REL_SVDD_WAIT,
     HAL_NFC_IOCTL_SET_JCP_DWNLD_ENABLE,
     HAL_NFC_IOCTL_SET_JCP_DWNLD_DISABLE,
-    HAL_NFC_IOCTL_SET_NFC_SERVICE_PID
+    HAL_NFC_IOCTL_SET_NFC_SERVICE_PID,
+    HAL_NFC_IOCTL_GET_FEATURE_LIST
 };
 
 typedef uint8_t tHAL_NFC_STATUS;
diff --git a/src/hal/include/nfc_types.h b/src/hal/include/nfc_types.h
index 6ba5efc..acd9126 100644
--- a/src/hal/include/nfc_types.h
+++ b/src/hal/include/nfc_types.h
@@ -18,7 +18,7 @@
 
 #ifndef NFC_TYPES_H
 #define NFC_TYPES_H
-
+#include "Nxp_Features.h"
 /****************************************************************************
 ** NFC_HDR header definition for NFC messages
 *****************************************************************************/
diff --git a/src/include/NXP_ESE_Features.h b/src/include/NXP_ESE_Features.h
deleted file mode 100755
index 0adbe72..0000000
--- a/src/include/NXP_ESE_Features.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (C) 2012-2016 NXP Semiconductors
- *
- * 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.
- */
-
-/*
- * NXP ESE features macros definitions
- */
-
-#ifndef NXP_ESE_FEATURES_H
-#define NXP_ESE_FEATURES_H
-
-/** Dual/Triple mode priority schemes **/
-#define NXP_ESE_EXCLUSIVE_WIRED_MODE 1
-#define NXP_ESE_WIRED_MODE_RESUME 2
-#define NXP_ESE_WIRED_MODE_TIMEOUT 3
-
-/*Chip ID specific macros as per configurations file*/
-#define CHIP_ID_PN547C2 0x01
-#define CHIP_ID_PN65T 0x02
-#define CHIP_ID_PN548AD 0x03
-#define CHIP_ID_PN66T 0x04
-#define CHIP_ID_PN551 0x05
-#define CHIP_ID_PN67T 0x06
-#define CHIP_ID_PN553 0x07
-#define CHIP_ID_PN80T 0x08
-#define CHIP_ID_PN557 0x09
-#define CHIP_ID_PN81T 0x0A
-
-
-#if (NFC_NXP_ESE == TRUE)
-// Reset Schemes
-#define NXP_ESE_PN67T_RESET 1
-#define NXP_ESE_APDU_GATE_RESET 2
-
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
-
-#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY true
-#define NXP_LEGACY_APDU_GATE true
-
-#elif((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
-
-#define NFC_NXP_TRIPLE_MODE_PROTECTION true
-#define NXP_ESE_FELICA_CLT false
-#define NXP_WIRED_MODE_STANDBY_PROP true
-#define NXP_WIRED_MODE_STANDBY false
-// dual mode prio scheme
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
-// Reset scheme
-#define NXP_ESE_RESET_METHOD false
-#define NXP_ESE_ETSI_READER_ENABLE true
-#define NXP_ESE_SVDD_SYNC true
-#define NXP_LEGACY_APDU_GATE true
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION true
-#define NXP_ESE_JCOP_DWNLD_PROTECTION false
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES false
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE true
-#define NFC_NXP_ESE_ETSI12_PROP_INIT false
-
-#elif(NFC_NXP_CHIP_TYPE == PN553)
-
-#define NFC_NXP_TRIPLE_MODE_PROTECTION false
-#define NXP_ESE_FELICA_CLT true
-#define NXP_ESE_WIRED_MODE_PRIO false
-#define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE false  // UICC exclusive wired mode
-// dual mode prio scheme
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_RESUME
-// Reset scheme
-#define NXP_ESE_RESET_METHOD true
-#define NXP_ESE_POWER_MODE true
-#define NXP_ESE_P73_ISO_RST true
-#define NXP_BLOCK_PROPRIETARY_APDU_GATE false
-#define NXP_WIRED_MODE_STANDBY true
-#define NXP_WIRED_MODE_STANDBY_PROP false
-#define NXP_ESE_ETSI_READER_ENABLE true
-#define NXP_ESE_SVDD_SYNC true
-#define NXP_LEGACY_APDU_GATE false
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION false
-#define NXP_ESE_JCOP_DWNLD_PROTECTION true
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES true
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE true
-#define NFC_NXP_ESE_ETSI12_PROP_INIT true
-
-#elif(NFC_NXP_CHIP_TYPE == PN557)
-
-#define NFC_NXP_TRIPLE_MODE_PROTECTION false
-#define NXP_ESE_FELICA_CLT true
-#define NXP_ESE_WIRED_MODE_PRIO false
-#define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE false  // UICC exclusive wired mode
-// dual mode prio scheme
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_RESUME
-// Reset scheme
-#define NXP_ESE_RESET_METHOD true
-#define NXP_ESE_POWER_MODE true
-#define NXP_ESE_P73_ISO_RST true
-#define NXP_BLOCK_PROPRIETARY_APDU_GATE false
-#define NXP_WIRED_MODE_STANDBY true
-#define NXP_WIRED_MODE_STANDBY_PROP false
-#define NXP_ESE_ETSI_READER_ENABLE true
-#define NXP_ESE_SVDD_SYNC true
-#define NXP_LEGACY_APDU_GATE false
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION false
-#define NXP_ESE_JCOP_DWNLD_PROTECTION true
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES true
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE true
-#define NFC_NXP_ESE_ETSI12_PROP_INIT true
-
-#endif
-
-#else /*Else of #if(NFC_NXP_ESE == TRUE)*/
-
-#if (NFC_NXP_CHIP_TYPE == PN547C2)
-#define NXP_ESE_WIRED_MODE_DISABLE_DISCOVERY false
-#define NXP_LEGACY_APDU_GATE false
-#endif
-
-#if ((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551))
-a
-#define NFC_NXP_TRIPLE_MODE_PROTECTION false
-#define NXP_WIRED_MODE_STANDBY_PROP false
-#define NXP_ESE_FELICA_CLT false
-// Reset scheme
-#define NXP_ESE_RESET_METHOD false
-#define NXP_ESE_ETSI_READER_ENABLE false
-#define NXP_ESE_SVDD_SYNC false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE false
-#define NXP_LEGACY_APDU_GATE false
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION false
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
-#define NXP_ESE_JCOP_DWNLD_PROTECTION false
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES false
-#define NFC_NXP_ESE_ETSI12_PROP_INIT false
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-
-#elif(NFC_NXP_CHIP_TYPE == PN553)
-
-#define NFC_NXP_TRIPLE_MODE_PROTECTION false
-#define NXP_ESE_FELICA_CLT false
-#define NXP_ESE_WIRED_MODE_PRIO \
-  false  // eSE wired mode prio over UICC wired mode
-#define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE false  // UICC exclusive wired mode
-// Reset scheme
-#define NXP_ESE_RESET_METHOD false
-#define NXP_ESE_POWER_MODE false
-#define NXP_ESE_P73_ISO_RST false
-#define NXP_BLOCK_PROPRIETARY_APDU_GATE false
-#define NXP_WIRED_MODE_STANDBY false
-#define NXP_ESE_ETSI_READER_ENABLE false
-#define NXP_ESE_SVDD_SYNC false
-#define NXP_LEGACY_APDU_GATE false
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE false
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
-#define NXP_ESE_JCOP_DWNLD_PROTECTION false
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES false
-#define NFC_NXP_ESE_ETSI12_PROP_INIT true
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-
-#elif(NFC_NXP_CHIP_TYPE == PN557)
-
-#define NFC_NXP_TRIPLE_MODE_PROTECTION false
-#define NXP_ESE_FELICA_CLT false
-#define NXP_ESE_WIRED_MODE_PRIO \
-  false  // eSE wired mode prio over UICC wired mode
-#define NXP_ESE_UICC_EXCLUSIVE_WIRED_MODE false  // UICC exclusive wired mode
-// Reset scheme
-#define NXP_ESE_RESET_METHOD false
-#define NXP_ESE_POWER_MODE false
-#define NXP_ESE_P73_ISO_RST false
-#define NXP_BLOCK_PROPRIETARY_APDU_GATE false
-#define NXP_WIRED_MODE_STANDBY false
-#define NXP_ESE_ETSI_READER_ENABLE false
-#define NXP_ESE_SVDD_SYNC false
-#define NXP_LEGACY_APDU_GATE false
-#define NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION false
-#define NXP_ESE_DWP_SPI_SYNC_ENABLE false
-#define NXP_ESE_DUAL_MODE_PRIO_SCHEME NXP_ESE_WIRED_MODE_TIMEOUT
-#define NXP_ESE_JCOP_DWNLD_PROTECTION false
-#define NXP_UICC_HANDLE_CLEAR_ALL_PIPES false
-#define NFC_NXP_ESE_ETSI12_PROP_INIT true
-#define NFC_NXP_GP_CONTINOUS_PROCESSING false
-
-#endif
-
-#endif /*End of #if(NFC_NXP_ESE == TRUE)*/
-#endif /*End of #ifndef NXP_ESE_FEATURES_H */
diff --git a/src/include/NXP_NFCC_Features.h b/src/include/NXP_NFCC_Features.h
deleted file mode 100644
index 240c01e..0000000
--- a/src/include/NXP_NFCC_Features.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2012-2016 NXP Semiconductors
- *
- * 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.
- */
-
-/*
- * NXP NFCC features macros definitions
- */
-
-#ifndef NXP_NFCC_FEATURES_H
-#define NXP_NFCC_FEATURES_H
-/*Flags common to all chip types*/
-#define NXP_NFCC_EMPTY_DATA_PACKET true
-#define GEMALTO_SE_SUPPORT true
-
-#if (NFC_NXP_CHIP_TYPE == PN553)
-#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT true
-#define NXP_NFCC_MIFARE_TIANJIN false
-#define NXP_NFCC_MW_RCVRY_BLK_FW_DNLD true
-#define NXP_NFCC_DYNAMIC_DUAL_UICC true
-#define NXP_NFCC_FW_WA true
-#define NXP_NFCC_FORCE_NCI1_0_INIT true
-#define NXP_NFCC_ROUTING_BLOCK_BIT true
-#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH false
-#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH true
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC true
-#define NXP_HW_ANTENNA_LOOP4_SELF_TEST false
-#define NXP_NFCEE_REMOVED_NTF_RECOVERY true
-#define NXP_NFCC_FORCE_FW_DOWNLOAD true
-#define NXP_UICC_CREATE_CONNECTIVITY_PIPE true
-#define NXP_NFC_UICC_ETSI12 false
-#if (NFC_NXP_ESE == TRUE)
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC true
-#define NFA_EE_MAX_EE_SUPPORTED 4
-#else
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#endif
-
-#elif (NFC_NXP_CHIP_TYPE == PN557)
-
-#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT true
-#define NXP_NFCC_MIFARE_TIANJIN false
-#define NXP_NFCC_MW_RCVRY_BLK_FW_DNLD true
-#define NXP_NFCC_DYNAMIC_DUAL_UICC true
-#define NXP_NFCC_FW_WA true
-#define NXP_NFCC_FORCE_NCI1_0_INIT false
-#define NXP_NFCC_ROUTING_BLOCK_BIT true
-#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH false
-#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH true
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC true
-#define NXP_HW_ANTENNA_LOOP4_SELF_TEST false
-#define NXP_NFCEE_REMOVED_NTF_RECOVERY true
-#define NXP_NFCC_FORCE_FW_DOWNLOAD true
-#define NXP_UICC_CREATE_CONNECTIVITY_PIPE true
-#define NXP_NFC_UICC_ETSI12 false
-#if (NFC_NXP_ESE == TRUE)
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC true
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#else
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#endif
-#define NXP_NFCC_LISTEN_ROUTING_TABLE_ORDER true
-#elif(NFC_NXP_CHIP_TYPE == PN551)
-#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT true
-#define NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG true
-#define NXP_NFCC_DYNAMIC_DUAL_UICC false
-#define NXP_NFCC_ROUTING_BLOCK_BIT_PROP true
-#define NXP_NFCC_MIFARE_TIANJIN true
-#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH true
-#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH false
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC false
-#define NXP_HW_ANTENNA_LOOP4_SELF_TEST true
-#define NXP_NFCEE_REMOVED_NTF_RECOVERY true
-#define NXP_NFCC_FORCE_FW_DOWNLOAD false
-#define NXP_UICC_CREATE_CONNECTIVITY_PIPE false
-#if (NFC_NXP_ESE == TRUE)
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#else
-#define NFA_EE_MAX_EE_SUPPORTED 2
-#endif
-#elif(NFC_NXP_CHIP_TYPE == PN548C2)
-#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT true
-#define NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG true
-#define NXP_NFCC_DYNAMIC_DUAL_UICC false
-#define NXP_NFCC_ROUTING_BLOCK_BIT_PROP true
-#define NXP_NFCC_MIFARE_TIANJIN true
-#define NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH true
-#define NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH false
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC false
-#define NXP_HW_ANTENNA_LOOP4_SELF_TEST true
-#define NXP_NFCEE_REMOVED_NTF_RECOVERY true
-#define NXP_NFCC_FORCE_FW_DOWNLOAD false
-#define NXP_UICC_CREATE_CONNECTIVITY_PIPE false
-#if (NFC_NXP_ESE == TRUE)
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#else
-#define NFA_EE_MAX_EE_SUPPORTED 2
-#endif
-#elif(NFC_NXP_CHIP_TYPE == PN547C2)
-#define NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT false
-#define NXP_NFCC_AID_MATCHING_PLATFORM_CONFIG true
-#define NXP_NFCC_MIFARE_TIANJIN true
-#define NXP_NFCC_SPI_FW_DOWNLOAD_SYNC false
-#define NXP_HW_ANTENNA_LOOP4_SELF_TEST true
-#define NXP_NFCEE_REMOVED_NTF_RECOVERY true
-#define NXP_NFCC_FORCE_FW_DOWNLOAD false
-#define NXP_UICC_CREATE_CONNECTIVITY_PIPE false
-#if (NFC_NXP_ESE == TRUE)
-#define NFA_EE_MAX_EE_SUPPORTED 3
-#else
-#define NFA_EE_MAX_EE_SUPPORTED 2
-#endif
-#endif
-#endif /* end of #ifndef NXP_NFCC_FEATURES_H */
diff --git a/src/include/NXP_Platform_Features.h b/src/include/NXP_Platform_Features.h
deleted file mode 100755
index e1fd56d..0000000
--- a/src/include/NXP_Platform_Features.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2012-2016 NXP Semiconductors
- *
- * 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.
- */
-
-/*
- * NXP Platform specific features macros definitions
- */
-
-#ifndef NXP_PLATFORM_FEATURES_H
-#define NXP_PLATFORM_FEATURES_H
-
-#if (NFC_NXP_CHIP_TYPE == PN557)
-#undef NXP_NFCC_RESET_RSP_LEN
-#define NXP_NFCC_RESET_RSP_LEN (0x10U)
-#endif
-
-#if (NFC_NXP_CHIP_TYPE == PN553)
-#undef NXP_NFCC_RESET_RSP_LEN
-#define NXP_NFCC_RESET_RSP_LEN (0x10U)
-#endif
-
-#if (NFC_NXP_CHIP_TYPE == PN551)
-#undef NXP_NFCC_RESET_RSP_LEN
-#define NXP_NFCC_RESET_RSP_LEN (0x11U)
-#endif
-
-#if (NFC_NXP_CHIP_TYPE == PN548C2)
-#undef NXP_NFCC_RESET_RSP_LEN
-#define NXP_NFCC_RESET_RSP_LEN (0x11U)
-#endif
-
-#endif /* end of #ifndef NXP_PLATFORM_FEATURES_H */
diff --git a/src/include/NfcAdaptation.h b/src/include/NfcAdaptation.h
index 5dad245..60aa1f8 100644
--- a/src/include/NfcAdaptation.h
+++ b/src/include/NfcAdaptation.h
@@ -116,6 +116,7 @@
     void    signal();
     static  NfcAdaptation* mpInstance;
     static  ThreadMutex sLock;
+    static ThreadMutex sIoctlLock;
     ThreadCondVar    mCondVar;
     tHAL_NFC_ENTRY   mHalEntryFuncs; // function pointers for HAL entry points
     static nfc_nci_device_t* mHalDeviceContext;
@@ -126,6 +127,7 @@
     static tHAL_NFC_DATA_CBACK* mHalDataCallback;
     static ThreadCondVar mHalOpenCompletedEvent;
     static ThreadCondVar mHalCloseCompletedEvent;
+    static ThreadCondVar mHalIoctlEvent;
 #if(NXP_EXTNS == TRUE)
     pthread_t mThreadId;
     static ThreadCondVar mHalCoreResetCompletedEvent;
diff --git a/src/include/OverrideLog.h b/src/include/OverrideLog.h
deleted file mode 100644
index 2bceba2..0000000
--- a/src/include/OverrideLog.h
+++ /dev/null
@@ -1,115 +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.
- *
- ******************************************************************************/
-/******************************************************************************
- *
- *  The original Work has been changed by NXP Semiconductors.
- *
- *  Copyright (C) 2015 NXP Semiconductors
- *
- *  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.
- *
- ******************************************************************************/
-/******************************************************************************
- *
- *  Override the Android logging macro(s) from
- *  /system/core/include/cutils/log.h. This header must be the first header
- *  included by a *.cpp file so the original Android macro can be replaced.
- *  Do not include this header in another header, because that will create
- *  unnecessary dependency.
- *
- ******************************************************************************/
-#pragma once
-
-//Override Android's ALOGD macro by adding a boolean expression.
-#define ALOGD(...) ((void)ALOGD_IF(appl_trace_level>=BT_TRACE_LEVEL_DEBUG, __VA_ARGS__))
-
-
-#include <cutils/log.h> //define Android logging macros
-#include "bt_types.h"
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-extern unsigned char appl_trace_level;
-extern UINT32 ScrProtocolTraceFlag;
-
-#if(NXP_EXTNS == TRUE)
-extern unsigned char appl_dta_mode_flag; //defined for run time DTA mode selection
-#endif
-
-
-/*******************************************************************************
-**
-** Function:        initializeGlobalAppLogLevel
-**
-** Description:     Initialize and get global logging level from .conf or
-**                  Android property nfc.app_log_level.  The Android property
-**                  overrides .conf variable.
-**
-** Returns:         Global log level:
-**                  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)
-**
-*******************************************************************************/
-unsigned char initializeGlobalAppLogLevel ();
-UINT32 initializeProtocolLogLevel ();
-
-#if (NXP_EXTNS == TRUE)
-/*******************************************************************************
-**
-** Function:        initializeGlobalDtaMode
-**
-** Description:     Initialize and get global DTA mode from .conf
-**
-** Returns:         none:
-**
-*******************************************************************************/
-void initializeGlobalAppDtaMode ();
-
-/*******************************************************************************
-**
-** Function:        enableDisableAppLevel
-**
-** Description:      This function can be used to enable/disable application
-**                   trace  logs
-**
-** Returns:         none:
-**
-*******************************************************************************/
-void enableDisableAppLevel(UINT8 type);
-#endif
-#ifdef __cplusplus
-}
-#endif
diff --git a/src/include/bt_target.h b/src/include/bt_target.h
deleted file mode 100644
index 769bcee..0000000
--- a/src/include/bt_target.h
+++ /dev/null
@@ -1,3981 +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_TARGET_H
-#define BT_TARGET_H
-
-#include "data_types.h"
-
-#ifdef BUILDCFG
-#include "buildcfg.h"
-#endif
-
-/* Include common GKI definitions used by this platform */
-#include "gki_target.h"
-
-#include "bt_types.h"   /* This must be defined AFTER buildcfg.h */
-#include "dyn_mem.h"    /* defines static and/or dynamic memory for components */
-
-/* #define BYPASS_AVDATATRACE */
-
-/******************************************************************************
-**
-** Platform-Specific
-**
-******************************************************************************/
-
-#ifndef BT_BRCM_VS_INCLUDED
-#define BT_BRCM_VS_INCLUDED             TRUE
-#endif
-
-/* set to FALSE unless using Zeevo */
-#ifndef ZEEVO_CTRL_DEFINED
-#define ZEEVO_CTRL_DEFINED FALSE
-#endif
-
-/* Supporting GPS shared transport */
-#ifndef GPS_INCLUDED
-#define GPS_INCLUDED               TRUE
-#endif
-
-/* API macros for simulator */
-
-#define BTAPI
-
-#ifndef BTE_BSE_WRAPPER
-#ifdef  BTE_SIM_APP
-#undef  BTAPI
-#define BTAPI         __declspec(dllexport)
-#endif
-#endif
-
-#define BT_API          BTAPI
-#define BTU_API         BTAPI
-#define A2D_API         BTAPI
-#define VDP_API         BTAPI
-#define AVDT_API        BTAPI
-#define AVCT_API        BTAPI
-#define AVRC_API        BTAPI
-#define BIP_API         BTAPI
-#define BNEP_API        BTAPI
-#define BPP_API         BTAPI
-#define BTM_API         BTAPI
-#define CTP_API         BTAPI
-#define DUN_API         BTAPI
-#define FTP_API         BTAPI
-#define GAP_API         BTAPI
-#define GOEP_API        BTAPI
-#define HCI_API         BTAPI
-#define HCRP_API        BTAPI
-#define HID_API         BTAPI
-#define HFP_API         BTAPI
-#define HSP2_API        BTAPI
-#define ICP_API         BTAPI
-#define L2C_API         BTAPI
-#define OBX_API         BTAPI
-#define OPP_API         BTAPI
-#define PAN_API         BTAPI
-#define RFC_API         BTAPI
-#define RPC_API         BTAPI
-#define SDP_API         BTAPI
-#define SPP_API         BTAPI
-#define TCS_API         BTAPI
-#define XML_API         BTAPI
-#define BTA_API         BTAPI
-#define SBC_API         BTAPI
-#define LPM_API         BTAPI
-#define AMP_API         BTAPI
-#define MCE_API         BTAPI
-#define MCA_API         BTAPI
-#define GATT_API        BTAPI
-#define SMP_API         BTAPI
-
-
-/******************************************************************************
-**
-** GKI Buffer Pools
-**
-******************************************************************************/
-
-/* Receives HCI events from the lower-layer. */
-#ifndef HCI_CMD_POOL_ID
-#define HCI_CMD_POOL_ID             GKI_POOL_ID_2
-#endif
-
-#ifndef HCI_CMD_POOL_BUF_SIZE
-#define HCI_CMD_POOL_BUF_SIZE       GKI_BUF2_SIZE
-#endif
-
-/* Receives ACL data packets from thelower-layer. */
-#ifndef HCI_ACL_POOL_ID
-#define HCI_ACL_POOL_ID             GKI_POOL_ID_3
-#endif
-
-#ifndef HCI_ACL_POOL_BUF_SIZE
-#define HCI_ACL_POOL_BUF_SIZE       GKI_BUF3_SIZE
-#endif
-
-/* Maximum number of buffers available for ACL receive data. */
-#ifndef HCI_ACL_BUF_MAX
-#define HCI_ACL_BUF_MAX             GKI_BUF3_MAX
-#endif
-
-/* Receives SCO data packets from the lower-layer. */
-#ifndef HCI_SCO_POOL_ID
-#define HCI_SCO_POOL_ID             GKI_POOL_ID_6
-#endif
-
-/* Not used. */
-#ifndef HCI_DATA_DESCR_POOL_ID
-#define HCI_DATA_DESCR_POOL_ID      GKI_POOL_ID_0
-#endif
-
-/* Sends SDP data packets. */
-#ifndef SDP_POOL_ID
-#define SDP_POOL_ID                 GKI_POOL_ID_2
-#endif
-
-/* Sends RFCOMM command packets. */
-#ifndef RFCOMM_CMD_POOL_ID
-#define RFCOMM_CMD_POOL_ID          GKI_POOL_ID_2
-#endif
-
-#ifndef RFCOMM_CMD_POOL_BUF_SIZE
-#define RFCOMM_CMD_POOL_BUF_SIZE    GKI_BUF2_SIZE
-#endif
-
-/* Sends RFCOMM data packets. */
-#ifndef RFCOMM_DATA_POOL_ID
-#define RFCOMM_DATA_POOL_ID         GKI_POOL_ID_3
-#endif
-
-#ifndef RFCOMM_DATA_POOL_BUF_SIZE
-#define RFCOMM_DATA_POOL_BUF_SIZE   GKI_BUF3_SIZE
-#endif
-
-/* Sends L2CAP packets to the peer and HCI messages to the controller. */
-#ifndef L2CAP_CMD_POOL_ID
-#define L2CAP_CMD_POOL_ID           GKI_POOL_ID_2
-#endif
-
-/* Sends L2CAP segmented packets in ERTM mode */
-#ifndef L2CAP_FCR_TX_POOL_ID
-#define L2CAP_FCR_TX_POOL_ID        HCI_ACL_POOL_ID
-#endif
-
-/* Receives L2CAP segmented packets in ERTM mode */
-#ifndef L2CAP_FCR_RX_POOL_ID
-#define L2CAP_FCR_RX_POOL_ID        HCI_ACL_POOL_ID
-#endif
-
-/* Used by BTM when it sends HCI commands to the controller. */
-#ifndef BTM_CMD_POOL_ID
-#define BTM_CMD_POOL_ID             GKI_POOL_ID_2
-#endif
-
-/* Sends TCS messages. */
-#ifndef TCS_MSG_POOL_ID
-#define TCS_MSG_POOL_ID             GKI_POOL_ID_2
-#endif
-
-#ifndef OBX_CMD_POOL_SIZE
-#define OBX_CMD_POOL_SIZE           GKI_BUF2_SIZE
-#endif
-
-#ifndef OBX_LRG_DATA_POOL_SIZE
-#define OBX_LRG_DATA_POOL_SIZE      GKI_BUF4_SIZE
-#endif
-
-#ifndef OBX_LRG_DATA_POOL_ID
-#define OBX_LRG_DATA_POOL_ID        GKI_POOL_ID_4
-#endif
-
-/* Used for CTP discovery database. */
-#ifndef CTP_SDP_DB_POOL_ID
-#define CTP_SDP_DB_POOL_ID          GKI_POOL_ID_3
-#endif
-
-/* Used for CTP data exchange feature. */
-#ifndef CTP_DATA_EXCHG_POOL_ID
-#define CTP_DATA_EXCHG_POOL_ID      GKI_POOL_ID_2
-#endif
-
-/* Used to send data to L2CAP. */
-#ifndef GAP_DATA_POOL_ID
-#define GAP_DATA_POOL_ID            GKI_POOL_ID_3
-#endif
-
-/* Used for SPP inquiry and discovery databases. */
-#ifndef SPP_DB_POOL_ID
-#define SPP_DB_POOL_ID              GKI_POOL_ID_3
-#endif
-
-#ifndef SPP_DB_SIZE
-#define SPP_DB_SIZE                 GKI_BUF3_SIZE
-#endif
-
-/* HCRP protocol and internal commands. */
-#ifndef HCRP_CMD_POOL_ID
-#define HCRP_CMD_POOL_ID            GKI_POOL_ID_2
-#endif
-
-#ifndef HCRP_CMD_POOL_SIZE
-#define HCRP_CMD_POOL_SIZE          GKI_BUF2_SIZE
-#endif
-
-#ifndef BIP_EVT_POOL_SIZE
-#define BIP_EVT_POOL_SIZE           GKI_BUF3_SIZE
-#endif
-
-#ifndef BIP_DB_SIZE
-#define BIP_DB_SIZE                 GKI_BUF3_SIZE
-#endif
-
-
-/* BNEP data and protocol messages. */
-#ifndef BNEP_POOL_ID
-#define BNEP_POOL_ID                GKI_POOL_ID_3
-#endif
-
-/* RPC pool for temporary trace message buffers. */
-#ifndef RPC_SCRATCH_POOL_ID
-#define RPC_SCRATCH_POOL_ID         GKI_POOL_ID_2
-#endif
-
-/* RPC scratch buffer size (not related to RPC_SCRATCH_POOL_ID) */
-#ifndef RPC_SCRATCH_BUF_SIZE
-#define RPC_SCRATCH_BUF_SIZE        GKI_BUF3_SIZE
-#endif
-
-/* RPC pool for protocol messages */
-#ifndef RPC_MSG_POOL_ID
-#define RPC_MSG_POOL_ID             GKI_POOL_ID_3
-#endif
-
-#ifndef RPC_MSG_POOL_SIZE
-#define RPC_MSG_POOL_SIZE           GKI_BUF3_SIZE
-#endif
-
-/* AVDTP pool for protocol messages */
-#ifndef AVDT_CMD_POOL_ID
-#define AVDT_CMD_POOL_ID            GKI_POOL_ID_2
-#endif
-
-/* AVDTP pool size for media packets in case of fragmentation */
-#ifndef AVDT_DATA_POOL_SIZE
-#define AVDT_DATA_POOL_SIZE         GKI_BUF3_SIZE
-#endif
-
-#ifndef PAN_POOL_ID
-#define PAN_POOL_ID                 GKI_POOL_ID_3
-#endif
-
-/* UNV pool for read/write serialization */
-#ifndef UNV_MSG_POOL_ID
-#define UNV_MSG_POOL_ID             GKI_POOL_ID_2
-#endif
-
-#ifndef UNV_MSG_POOL_SIZE
-#define UNV_MSG_POOL_SIZE           GKI_BUF2_SIZE
-#endif
-
-/* AVCTP pool for protocol messages */
-#ifndef AVCT_CMD_POOL_ID
-#define AVCT_CMD_POOL_ID            GKI_POOL_ID_1
-#endif
-
-#ifndef AVCT_META_CMD_POOL_ID
-#define AVCT_META_CMD_POOL_ID       GKI_POOL_ID_2
-#endif
-
-/* AVRCP pool for protocol messages */
-#ifndef AVRC_CMD_POOL_ID
-#define AVRC_CMD_POOL_ID            GKI_POOL_ID_1
-#endif
-
-/* AVRCP pool size for protocol messages */
-#ifndef AVRC_CMD_POOL_SIZE
-#define AVRC_CMD_POOL_SIZE          GKI_BUF1_SIZE
-#endif
-
-/* AVRCP Metadata pool for protocol messages */
-#ifndef AVRC_META_CMD_POOL_ID
-#define AVRC_META_CMD_POOL_ID       GKI_POOL_ID_2
-#endif
-
-/* AVRCP Metadata pool size for protocol messages */
-#ifndef AVRC_META_CMD_POOL_SIZE
-#define AVRC_META_CMD_POOL_SIZE     GKI_BUF2_SIZE
-#endif
-
-
-/* AVRCP buffer size for browsing channel messages */
-#ifndef AVRC_BROWSE_POOL_SIZE
-#define AVRC_BROWSE_POOL_SIZE     GKI_MAX_BUF_SIZE
-#endif
-
-/*  HDP buffer size for the Pulse Oximeter  */
-#ifndef BTA_HL_LRG_DATA_POOL_SIZE
-#define BTA_HL_LRG_DATA_POOL_SIZE      GKI_BUF7_SIZE
-#endif
-
-#ifndef BTA_HL_LRG_DATA_POOL_ID
-#define BTA_HL_LRG_DATA_POOL_ID        GKI_POOL_ID_7
-#endif
-
-/* GATT Server Database pool ID */
-#ifndef GATT_DB_POOL_ID
-#define GATT_DB_POOL_ID                 GKI_POOL_ID_8
-#endif
-
-
-/******************************************************************************
-**
-** Lower Layer Interface
-**
-******************************************************************************/
-
-/* Sends ACL data received over HCI to the upper stack. */
-#ifndef HCI_ACL_DATA_TO_UPPER
-#define HCI_ACL_DATA_TO_UPPER(p)    {((BT_HDR *)p)->event = BT_EVT_TO_BTU_HCI_ACL; GKI_send_msg (BTU_TASK, BTU_HCI_RCV_MBOX, p);}
-#endif
-
-/* Sends SCO data received over HCI to the upper stack. */
-#ifndef HCI_SCO_DATA_TO_UPPER
-#define HCI_SCO_DATA_TO_UPPER(p)    {((BT_HDR *)p)->event = BT_EVT_TO_BTU_HCI_SCO; GKI_send_msg (BTU_TASK, BTU_HCI_RCV_MBOX, p);}
-#endif
-
-/* Sends an HCI event received over HCI to theupper stack. */
-#ifndef HCI_EVT_TO_UPPER
-#define HCI_EVT_TO_UPPER(p)         {((BT_HDR *)p)->event = BT_EVT_TO_BTU_HCI_EVT; GKI_send_msg (BTU_TASK, BTU_HCI_RCV_MBOX, p);}
-#endif
-
-/* HCI 4 wire power management protocol. */
-#ifndef HCILL_INCLUDED
-#define HCILL_INCLUDED              FALSE
-#endif
-
-/* Macro for allocating buffer for HCI commands */
-#ifndef HCI_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 HCI_GET_CMD_BUF(paramlen)    ((BT_HDR *)GKI_getpoolbuf (HCI_CMD_POOL_ID))
-#else
-/* Allocate smallest possible buffer (for platforms with limited RAM) */
-#define HCI_GET_CMD_BUF(paramlen)    ((BT_HDR *)GKI_getbuf ((UINT16)(BT_HDR_SIZE + HCIC_PREAMBLE_SIZE + (paramlen))))
-#endif
-#endif  /* HCI_GET_CMD_BUF */
-
-/******************************************************************************
-**
-** HCI Services (H4)
-**
-******************************************************************************/
-#ifndef HCISU_H4_INCLUDED
-#define HCISU_H4_INCLUDED               FALSE
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-BT_API extern void bte_ncisu_send (BT_HDR *p_pkt, UINT16 event);
-BT_API extern void bte_hcisu_send (BT_HDR *p_msg, UINT16 event);
-#if (HCISU_H4_INCLUDED == TRUE)
-BT_API extern void bte_hcisu_lp_allow_bt_device_sleep (void);
-BT_API extern void bte_hcisu_lp_wakeup_host (void);
-BT_API extern void bte_hcisu_lp_h4ibss_evt(UINT8 *p, UINT8 evt_len);
-#endif
-
-/* HCILL API for the applications */
-typedef void (tHCILL_SLEEP_ACK)(void);
-BT_API extern void HCILL_GoToSleep( tHCILL_SLEEP_ACK *sl_ack_fn);
-typedef void (tHCILL_STATE_CBACK)(BOOLEAN is_sleep);
-BT_API extern void HCILL_RegState( tHCILL_STATE_CBACK *p_cback);
-#ifdef __cplusplus
-}
-#endif
-
-/* Sends ACL data received from the upper stack to the BD/EDR HCI transport. */
-#ifndef HCI_ACL_DATA_TO_LOWER
-#define HCI_ACL_DATA_TO_LOWER(p)    bte_hcisu_send((BT_HDR *)(p), BT_EVT_TO_LM_HCI_ACL);
-#endif
-
-#ifndef HCI_BLE_ACL_DATA_TO_LOWER
-#define HCI_BLE_ACL_DATA_TO_LOWER(p)    bte_hcisu_send((BT_HDR *)(p), (UINT16)(BT_EVT_TO_LM_HCI_ACL|LOCAL_BLE_CONTROLLER_ID));
-#endif
-
-/* Sends ACL data received from the upper stack to the AMP HCI transport. */
-#ifndef HCI_AMP_DATA_TO_LOWER
-#define HCI_AMP_DATA_TO_LOWER(p,x)    bte_hcisu_send((BT_HDR *)(p), (UINT16)(BT_EVT_TO_LM_HCI_ACL|((UINT16)(x))));
-#endif
-
-/* Sends SCO data received from the upper stack to the HCI transport. */
-#ifndef HCI_SCO_DATA_TO_LOWER
-#define HCI_SCO_DATA_TO_LOWER(p)    bte_hcisu_send((BT_HDR *)(p), BT_EVT_TO_LM_HCI_SCO);
-#endif
-
-/* Sends an HCI command received from the upper stack to the BD/EDR HCI transport. */
-#ifndef HCI_CMD_TO_LOWER
-#define HCI_CMD_TO_LOWER(p)         bte_hcisu_send((BT_HDR *)(p), BT_EVT_TO_LM_HCI_CMD);
-#endif
-
-/* Sends an HCI command received from the upper stack to the AMP HCI transport. */
-#ifndef HCI_CMD_TO_AMP
-#define HCI_CMD_TO_AMP(x,p)         bte_hcisu_send((BT_HDR *)(p), (UINT16)(BT_EVT_TO_LM_HCI_CMD|((UINT16)(x))));
-#endif
-
-/* Sends an LM Diagnosic command received from the upper stack to the HCI transport. */
-#ifndef HCI_LM_DIAG_TO_LOWER
-#define HCI_LM_DIAG_TO_LOWER(p)     bte_hcisu_send((BT_HDR *)(p), BT_EVT_TO_LM_DIAG);
-#endif
-
-/* Send HCISU a message to allow BT sleep */
-#ifndef HCI_LP_ALLOW_BT_DEVICE_SLEEP
-#if (HCISU_H4_INCLUDED == TRUE)
-#define HCI_LP_ALLOW_BT_DEVICE_SLEEP()       bte_hcisu_lp_allow_bt_device_sleep()
-#else
-#define HCI_LP_ALLOW_BT_DEVICE_SLEEP()       HCILP_AllowBTDeviceSleep()
-#endif
-#endif
-
-/* Send HCISU a message to wakeup host */
-#ifndef HCI_LP_WAKEUP_HOST
-#if (HCISU_H4_INCLUDED == TRUE)
-#define HCI_LP_WAKEUP_HOST()        bte_hcisu_lp_wakeup_host()
-#else
-#define HCI_LP_WAKEUP_HOST()        HCILP_WakeupHost()
-#endif
-#endif
-
-/* Send HCISU the received H4IBSS event from controller */
-#ifndef HCI_LP_RCV_H4IBSS_EVT
-#if (HCISU_H4_INCLUDED == TRUE)
-#define HCI_LP_RCV_H4IBSS_EVT(p1, p2)  bte_hcisu_lp_h4ibss_evt((UINT8*)(p1), (UINT8)(p2))
-#else
-#define HCI_LP_RCV_H4IBSS_EVT(p1, p2)  h4ibss_sleep_mode_evt((UINT8*)(p1), (UINT8)(p2))
-#endif
-#endif
-
-/* If nonzero, the upper-layer sends at most this number of HCI commands to the lower-layer. */
-#ifndef HCI_MAX_SIMUL_CMDS
-#define HCI_MAX_SIMUL_CMDS          0
-#endif
-
-/* Timeout for receiving response to HCI command */
-#ifndef BTU_CMD_CMPL_TIMEOUT
-#define BTU_CMD_CMPL_TIMEOUT        8
-#endif
-
-/* If TRUE, BTU task will check HCISU again when HCI command timer expires */
-#ifndef BTU_CMD_CMPL_TOUT_DOUBLE_CHECK
-#define BTU_CMD_CMPL_TOUT_DOUBLE_CHECK      FALSE
-#endif
-
-/* If TRUE, stack is compiled to include MM dual stack functionality */
-#ifndef BTU_DUAL_STACK_MM_INCLUDED
-#define BTU_DUAL_STACK_MM_INCLUDED     FALSE
-#endif
-
-/* If TRUE, stack is compiled to support Embedded Lite Stack in BT chip */
-#ifndef BTU_DUAL_STACK_BTC_INCLUDED
-#define BTU_DUAL_STACK_BTC_INCLUDED      FALSE
-#endif
-
-/* If TRUE, stack is compiled to support Embedded Lite Stack for AV SNK in BT chip */
-#ifndef BTU_BTC_SNK_INCLUDED
-#define BTU_BTC_SNK_INCLUDED        FALSE
-#endif
-
-/* If TRUE, stack is compiled as Lite Stack in Multimedia chip */
-/* If FALSE, stack is compiled as Full Stack in Baseband chip */
-#ifndef BTU_STACK_LITE_ENABLED
-#define BTU_STACK_LITE_ENABLED      FALSE
-#endif
-
-/* Transport pause time (BT slot(0.625ms) unit) when switching between BB and MM */
-/* FW is using a tick which is 20 slot unit so if timeout is between 0 to 20 slot */
-/* then actual timeout would be 0 to 12.5ms because it could be beteen ticks. */
-/* if timeout is between 20 to 40 slot then actual timeout would be 12.5 to 25ms */
-#ifndef BTU_DUAL_TRANSPORT_PAUSE_TIME
-#define BTU_DUAL_TRANSPORT_PAUSE_TIME     40
-#endif
-
-/* if UART baudrate is different between BB and MM, it will be updated during switching */
-#ifndef BTU_DUAL_TRANSPORT_BB_BAUDRATE
-#define BTU_DUAL_TRANSPORT_BB_BAUDRATE      115200
-#endif
-
-#ifndef BTU_DUAL_TRANSPORT_MM_BAUDRATE
-#define BTU_DUAL_TRANSPORT_MM_BAUDRATE      921600
-#endif
-
-/* If TRUE, stack is compiled to include the multi-av feature (A2DP packets are duplicated inside controller) */
-#ifndef BTU_MULTI_AV_INCLUDED
-#define BTU_MULTI_AV_INCLUDED       FALSE
-#endif
-
-/* Use 2 second for low-resolution systems, override to 1 for high-resolution systems */
-#ifndef BT_1SEC_TIMEOUT
-#define BT_1SEC_TIMEOUT             (2)
-#endif
-
-/* Quick Timer */
-/* minimum should have 100 millisecond resolution for eL2CAP */
-/* if HCILP_INCLUDED is TRUE     then it should have 100 millisecond resolution */
-/* if SLIP_INCLUDED is TRUE      then it should have 10 millisecond resolution  */
-/* if BRCM_USE_DELAY is FALSE then it should have 10 millisecond resolution  */
-/* if none of them is included then QUICK_TIMER_TICKS_PER_SEC is set to 0 to exclude quick timer */
-#ifndef QUICK_TIMER_TICKS_PER_SEC
-#define QUICK_TIMER_TICKS_PER_SEC   100       /* 10ms timer */
-#endif
-
-/******************************************************************************
-**
-** BTM
-**
-******************************************************************************/
-/* if set to TRUE, stack will automatically send an HCI reset at start-up. To be
-set to FALSE for advanced start-up / shut-down procedures using USER_HW_ENABLE_API
-and USER_HW_DISABLE_API macros */
-#ifndef BTM_AUTOMATIC_HCI_RESET
-#define BTM_AUTOMATIC_HCI_RESET      TRUE
-#endif
-
-/* Cancel Inquiry on incoming SSP - Work around code for a FW issue (CQ#167446). */
-#ifndef BTM_NO_SSP_ON_INQUIRY
-#define BTM_NO_SSP_ON_INQUIRY       FALSE
-#endif
-
-/* Include the implemenation needed by Pre-Lisbon controller (2.0_EDR or older) */
-#ifndef BTM_PRE_LISBON_INCLUDED
-#define BTM_PRE_LISBON_INCLUDED     TRUE
-#endif
-
-/* Includes SCO if TRUE */
-#ifndef BTM_SCO_INCLUDED
-#define BTM_SCO_INCLUDED            TRUE       /* TRUE includes SCO code */
-#endif
-
-/* Includes SCO if TRUE */
-#ifndef BTM_SCO_HCI_INCLUDED
-#define BTM_SCO_HCI_INCLUDED            FALSE       /* TRUE includes SCO over HCI code */
-#endif
-
-/* Includes WBS if TRUE */
-#ifndef BTM_WBS_INCLUDED
-#define BTM_WBS_INCLUDED            FALSE       /* TRUE includes WBS code */
-#endif
-
-/* Includes PCM2 support if TRUE */
-#ifndef BTM_PCM2_INCLUDED
-#define BTM_PCM2_INCLUDED           FALSE
-#endif
-
-/* If FALSE, AFH channel automatically adjusted based on AMP channel in use */
-/* Set TRUE, if want to bypass AFH channel automatic adjustment and use */
-/* BTA_DM_API_SET_AFH_CHANNELS_ API */
-
-#ifndef BTM_BYPASS_AMP_AUTO_AFH
-#define BTM_BYPASS_AMP_AUTO_AFH     FALSE
-#endif
-
-
-/**************************
-** Initial SCO TX credit
-*************************/
-/* max TX SCO data packet size */
-#ifndef BTM_SCO_DATA_SIZE_MAX
-#define BTM_SCO_DATA_SIZE_MAX       240
-#endif
-
-/* maximum BTM buffering capacity */
-#ifndef BTM_SCO_MAX_BUF_CAP
-#define BTM_SCO_MAX_BUF_CAP     (BTM_SCO_INIT_XMIT_CREDIT * 4)
-#endif
-
-/* The size in bytes of the BTM inquiry database. */
-#ifndef BTM_INQ_DB_SIZE
-#define BTM_INQ_DB_SIZE             12
-#endif
-
-/* This is set to always try to acquire the remote device name. */
-#ifndef BTM_INQ_GET_REMOTE_NAME
-#define BTM_INQ_GET_REMOTE_NAME     FALSE
-#endif
-
-/* The inquiry duration in 1.28 second units when auto inquiry is enabled. */
-#ifndef BTM_DEFAULT_INQ_DUR
-#define BTM_DEFAULT_INQ_DUR         5
-#endif
-
-/* The inquiry mode when auto inquiry is enabled. */
-#ifndef BTM_DEFAULT_INQ_MODE
-#define BTM_DEFAULT_INQ_MODE        BTM_GENERAL_INQUIRY
-#endif
-
-/* The default periodic inquiry maximum delay when auto inquiry is enabled, in 1.28 second units. */
-#ifndef BTM_DEFAULT_INQ_MAX_DELAY
-#define BTM_DEFAULT_INQ_MAX_DELAY   30
-#endif
-
-/* The default periodic inquiry minimum delay when auto inquiry is enabled, in 1.28 second units. */
-#ifndef BTM_DEFAULT_INQ_MIN_DELAY
-#define BTM_DEFAULT_INQ_MIN_DELAY   20
-#endif
-
-/* TRUE if controller does not support inquiry event filtering. */
-#ifndef BTM_BYPASS_EVENT_FILTERING
-#define BTM_BYPASS_EVENT_FILTERING  FALSE
-#endif
-
-/* TRUE if inquiry filtering is desired from BTM. */
-#ifndef BTM_USE_INQ_RESULTS_FILTER
-#define BTM_USE_INQ_RESULTS_FILTER  TRUE
-#endif
-
-/* The default scan mode */
-#ifndef BTM_DEFAULT_SCAN_TYPE
-#define BTM_DEFAULT_SCAN_TYPE       BTM_SCAN_TYPE_INTERLACED
-#endif
-
-/* Should connections to unknown devices be allowed when not discoverable? */
-#ifndef BTM_ALLOW_CONN_IF_NONDISCOVER
-#define BTM_ALLOW_CONN_IF_NONDISCOVER   FALSE
-#endif
-
-/* When connectable mode is set to TRUE, the device will respond to paging. */
-#ifndef BTM_IS_CONNECTABLE
-#define BTM_IS_CONNECTABLE          FALSE
-#endif
-
-/* Sets the Page_Scan_Window:  the length of time that the device is performing a page scan. */
-#ifndef BTM_DEFAULT_CONN_WINDOW
-#define BTM_DEFAULT_CONN_WINDOW     0x0012
-#endif
-
-/* Sets the Page_Scan_Activity:  the interval between the start of two consecutive page scans. */
-#ifndef BTM_DEFAULT_CONN_INTERVAL
-#define BTM_DEFAULT_CONN_INTERVAL   0x0800
-#endif
-
-/* This is set to automatically perform inquiry scan on startup. */
-#ifndef BTM_IS_DISCOVERABLE
-#define BTM_IS_DISCOVERABLE         FALSE
-#endif
-
-/* When automatic inquiry scan is enabled, this sets the discovery mode. */
-#ifndef BTM_DEFAULT_DISC_MODE
-#define BTM_DEFAULT_DISC_MODE       BTM_GENERAL_DISCOVERABLE
-#endif
-
-/* When automatic inquiry scan is enabled, this sets the inquiry scan window. */
-#ifndef BTM_DEFAULT_DISC_WINDOW
-#define BTM_DEFAULT_DISC_WINDOW     0x0012
-#endif
-
-/* When automatic inquiry scan is enabled, this sets the inquiry scan interval. */
-#ifndef BTM_DEFAULT_DISC_INTERVAL
-#define BTM_DEFAULT_DISC_INTERVAL   0x0800
-#endif
-
-/* Number of milliseconds to delay BTU task startup upon device initialization. */
-#ifndef BTU_STARTUP_DELAY
-#define BTU_STARTUP_DELAY           0
-#endif
-
-/* Whether BTA is included in BTU task. */
-#ifndef BTU_BTA_INCLUDED
-#define BTU_BTA_INCLUDED            FALSE
-#endif
-
-/* Number of seconds to wait to send an HCI Reset command upon device initialization. */
-#ifndef BTM_FIRST_RESET_DELAY
-#define BTM_FIRST_RESET_DELAY       0
-#endif
-
-/* The number of seconds to wait for controller module to reset after issuing an HCI Reset command. */
-#ifndef BTM_AFTER_RESET_TIMEOUT
-#define BTM_AFTER_RESET_TIMEOUT     0
-#endif
-
-/* The default class of device. */
-#ifndef BTM_INIT_CLASS_OF_DEVICE
-#define BTM_INIT_CLASS_OF_DEVICE    "\x00\x1F\x00"
-#endif
-
-/* The number of SCO links. */
-#ifndef BTM_MAX_SCO_LINKS
-#define BTM_MAX_SCO_LINKS           3
-#endif
-
-/* The preferred type of SCO links (2-eSCO, 0-SCO). */
-#ifndef BTM_DEFAULT_SCO_MODE
-#define BTM_DEFAULT_SCO_MODE        2
-#endif
-
-/* The number of security records for peer devices. */
-#ifndef BTM_SEC_MAX_DEVICE_RECORDS
-#define BTM_SEC_MAX_DEVICE_RECORDS  8
-#endif
-
-/* The number of security records for services. */
-#ifndef BTM_SEC_MAX_SERVICE_RECORDS
-#define BTM_SEC_MAX_SERVICE_RECORDS 24
-#endif
-
-/* If True, force a retrieval of remote device name for each bond in case it's changed */
-#ifndef BTM_SEC_FORCE_RNR_FOR_DBOND
-#define BTM_SEC_FORCE_RNR_FOR_DBOND  TRUE
-#endif
-
-/* Maximum device name length used in btm database. */
-#ifndef BTM_MAX_REM_BD_NAME_LEN
-#define BTM_MAX_REM_BD_NAME_LEN     20
-#endif
-
-/* Maximum local device name length stored btm database.
-  '0' disables storage of the local name in BTM */
-#ifndef BTM_MAX_LOC_BD_NAME_LEN
-#define BTM_MAX_LOC_BD_NAME_LEN     31
-#endif
-
-/* TRUE if default string is used, FALSE if device name is set in the application */
-#ifndef BTM_USE_DEF_LOCAL_NAME
-#define BTM_USE_DEF_LOCAL_NAME      FALSE
-#endif
-
-/* Fixed Default String (Ignored if BTM_USE_DEF_LOCAL_NAME is FALSE) */
-#ifndef BTM_DEF_LOCAL_NAME
-#define BTM_DEF_LOCAL_NAME      ""
-#endif
-
-/* Maximum service name stored with security authorization (0 if not needed) */
-#ifndef BTM_SEC_SERVICE_NAME_LEN
-#define BTM_SEC_SERVICE_NAME_LEN    BT_MAX_SERVICE_NAME_LEN
-#endif
-
-/* Maximum number of pending security callback */
-#ifndef BTM_SEC_MAX_CALLBACKS
-#define BTM_SEC_MAX_CALLBACKS       7
-#endif
-
-/* Maximum length of the service name. */
-#ifndef BT_MAX_SERVICE_NAME_LEN
-#define BT_MAX_SERVICE_NAME_LEN     21
-#endif
-
-/* ACL buffer size in HCI Host Buffer Size command. */
-#ifndef BTM_ACL_BUF_SIZE
-#define BTM_ACL_BUF_SIZE            0
-#endif
-
-/* This is set to use the BTM power manager. */
-#ifndef BTM_PWR_MGR_INCLUDED
-#define BTM_PWR_MGR_INCLUDED        TRUE
-#endif
-
-/* The maximum number of clients that can register with the power manager. */
-#ifndef BTM_MAX_PM_RECORDS
-#define BTM_MAX_PM_RECORDS          2
-#endif
-
-/* This is set to show debug trace messages for the power manager. */
-#ifndef BTM_PM_DEBUG
-#define BTM_PM_DEBUG                FALSE
-#endif
-
-/* This is set to TRUE if link is to be unparked due to BTM_CreateSCO API. */
-#ifndef BTM_SCO_WAKE_PARKED_LINK
-#define BTM_SCO_WAKE_PARKED_LINK    TRUE
-#endif
-
-/* May be set to the the name of a function used for vendor specific chip initialization */
-#ifndef BTM_APP_DEV_INIT
-/* #define BTM_APP_DEV_INIT         myInitFunction() */
-#endif
-
-/* This is set to TRUE if the busy level change event is desired. (replace ACL change event) */
-#ifndef BTM_BUSY_LEVEL_CHANGE_INCLUDED
-#define BTM_BUSY_LEVEL_CHANGE_INCLUDED  TRUE
-#endif
-
-/* If the user does not respond to security process requests within this many seconds,
- * a negative response would be sent automatically.
- * It's recommended to use a value between 30 and OBX_TIMEOUT_VALUE
- * 30 is LMP response timeout value */
-#ifndef BTM_SEC_TIMEOUT_VALUE
-#define BTM_SEC_TIMEOUT_VALUE           35
-#endif
-
-/* Maximum number of callbacks that can be registered using BTM_RegisterForVSEvents */
-#ifndef BTM_MAX_VSE_CALLBACKS
-#define BTM_MAX_VSE_CALLBACKS           6
-#endif
-
-/* Number of streams for dual stack */
-#ifndef BTM_SYNC_INFO_NUM_STR
-#define BTM_SYNC_INFO_NUM_STR           2
-#endif
-
-/* Number of streams for dual stack in BT Controller */
-#ifndef BTM_SYNC_INFO_NUM_STR_BTC
-#define BTM_SYNC_INFO_NUM_STR_BTC       2
-#endif
-
-/******************************************
-**    Lisbon Features
-*******************************************/
-/* This is set to TRUE if the server Extended Inquiry Response feature is desired. */
-/* server sends EIR to client */
-#ifndef BTM_EIR_SERVER_INCLUDED
-#define BTM_EIR_SERVER_INCLUDED         TRUE
-#endif
-
-/* This is set to TRUE if the client Extended Inquiry Response feature is desired. */
-/* client inquiry to server */
-#ifndef BTM_EIR_CLIENT_INCLUDED
-#define BTM_EIR_CLIENT_INCLUDED         TRUE
-#endif
-
-/* This is set to TRUE if the FEC is required for EIR packet. */
-#ifndef BTM_EIR_DEFAULT_FEC_REQUIRED
-#define BTM_EIR_DEFAULT_FEC_REQUIRED    TRUE
-#endif
-
-/* User defined UUID look up table */
-#ifndef BTM_EIR_UUID_LKUP_TBL
-#endif
-
-/* The IO capability of the local device (for Simple Pairing) */
-#ifndef BTM_LOCAL_IO_CAPS
-#define BTM_LOCAL_IO_CAPS               BTM_IO_CAP_IO
-#endif
-
-/* The default MITM Protection Requirement (for Simple Pairing)
- * Possible values are BTM_AUTH_SP_YES or BTM_AUTH_SP_NO */
-#ifndef BTM_DEFAULT_AUTH_REQ
-#define BTM_DEFAULT_AUTH_REQ            BTM_AUTH_SP_NO
-#endif
-
-/* The default MITM Protection Requirement for dedicated bonding using Simple Pairing
- * Possible values are BTM_AUTH_AP_YES or BTM_AUTH_AP_NO */
-#ifndef BTM_DEFAULT_DD_AUTH_REQ
-#define BTM_DEFAULT_DD_AUTH_REQ         BTM_AUTH_AP_YES
-#endif
-
-/* Include Out-of-Band implementation for Simple Pairing */
-#ifndef BTM_OOB_INCLUDED
-#define BTM_OOB_INCLUDED                TRUE
-#endif
-
-/* TRUE to include Sniff Subrating */
-#ifndef BTM_SSR_INCLUDED
-#define BTM_SSR_INCLUDED                TRUE
-#endif
-
-/*************************
-** End of Lisbon Features
-**************************/
-
-/* This is set to use the BTM TBFC Supported. */
-#ifndef BTM_TBFC_INCLUDED
-#define BTM_TBFC_INCLUDED               FALSE
-#endif
-
-/* TRUE to include bi-directionnal TBFC */
-#ifndef BTM_BI_DIR_TBFC_INCLUDED
-#define BTM_BI_DIR_TBFC_INCLUDED        FALSE
-#endif
-
-/* TRUE to include CLB (ConnectionLess Slave Broadcast) */
-#ifndef BTM_CLB_INCLUDED
-#define BTM_CLB_INCLUDED                FALSE
-#endif
-
-/* TRUE to include CLB Rx (ConnectionLess Broadcast Reception) */
-#ifndef BTM_CLB_RX_INCLUDED
-#define BTM_CLB_RX_INCLUDED             FALSE
-#endif
-
-/* Used for conformance testing ONLY */
-#ifndef BTM_BLE_CONFORMANCE_TESTING
-#define BTM_BLE_CONFORMANCE_TESTING     FALSE
-#endif
-
-
-/******************************************************************************
-**
-** L2CAP
-**
-******************************************************************************/
-
-/* The maximum number of simultaneous links that L2CAP can support. */
-#ifndef MAX_L2CAP_LINKS
-#define MAX_L2CAP_LINKS             4
-#endif
-
-/* The maximum number of simultaneous channels that L2CAP can support. */
-#ifndef MAX_L2CAP_CHANNELS
-#define MAX_L2CAP_CHANNELS          10
-#endif
-
-/* The maximum number of simultaneous applications that can register with L2CAP. */
-#ifndef MAX_L2CAP_CLIENTS
-#define MAX_L2CAP_CLIENTS           8
-#endif
-
-/* The number of seconds of link inactivity before a link is disconnected. */
-#ifndef L2CAP_LINK_INACTIVITY_TOUT
-#define L2CAP_LINK_INACTIVITY_TOUT  3
-#endif
-
-/* The number of seconds of link inactivity after bonding before a link is disconnected. */
-#ifndef L2CAP_BONDING_TIMEOUT
-#define L2CAP_BONDING_TIMEOUT       3
-#endif
-
-/* The time from the HCI connection complete to disconnect if no channel is established. */
-#ifndef L2CAP_LINK_STARTUP_TOUT
-#define L2CAP_LINK_STARTUP_TOUT     60
-#endif
-
-/* The L2CAP MTU; must be in accord with the HCI ACL pool size. */
-#ifndef L2CAP_MTU_SIZE
-#define L2CAP_MTU_SIZE              1691
-#endif
-
-/* The L2CAP MPS over Bluetooth; must be in accord with the FCR tx pool size and ACL down buffer size. */
-#ifndef L2CAP_MPS_OVER_BR_EDR
-#define L2CAP_MPS_OVER_BR_EDR       1010
-#endif
-
-/* The L2CAP MPS over AMP; must be in accord with the FCR tx pool size and ACL down buffer size. */
-#ifndef L2CAP_MPS_OVER_AMP
-#define L2CAP_MPS_OVER_AMP          1480
-#endif
-
-/* This is set to enable host flow control. */
-#ifndef L2CAP_HOST_FLOW_CTRL
-#define L2CAP_HOST_FLOW_CTRL        FALSE
-#endif
-
-/* If host flow control enabled, this is the number of buffers the controller can have unacknowledged. */
-#ifndef L2CAP_HOST_FC_ACL_BUFS
-#define L2CAP_HOST_FC_ACL_BUFS      20
-#endif
-
-/* The percentage of the queue size allowed before a congestion event is sent to the L2CAP client (typically 120%). */
-#ifndef L2CAP_FWD_CONG_THRESH
-#define L2CAP_FWD_CONG_THRESH       120
-#endif
-
-/* This is set to enable L2CAP to  take the ACL link out of park mode when ACL data is to be sent. */
-#ifndef L2CAP_WAKE_PARKED_LINK
-#define L2CAP_WAKE_PARKED_LINK      TRUE
-#endif
-
-/* Whether link wants to be the master or the slave. */
-#ifndef L2CAP_DESIRED_LINK_ROLE
-#define L2CAP_DESIRED_LINK_ROLE     HCI_ROLE_SLAVE
-#endif
-
-/* Include Non-Flushable Packet Boundary Flag feature of Lisbon */
-#ifndef L2CAP_NON_FLUSHABLE_PB_INCLUDED
-#define L2CAP_NON_FLUSHABLE_PB_INCLUDED     TRUE
-#endif
-
-/* max queued Multi-AV packets per link including controller */
-#ifndef L2CAP_MULTI_AV_TOTAL_QUEUED_BUF
-#define L2CAP_MULTI_AV_TOTAL_QUEUED_BUF     6
-#endif
-
-/* max links supported by Multi-AV feature */
-#ifndef L2CAP_MAX_MULTI_AV_CID
-#define L2CAP_MAX_MULTI_AV_CID              5
-#endif
-
-/* Minimum number of ACL credit for high priority link */
-#ifndef L2CAP_HIGH_PRI_MIN_XMIT_QUOTA
-#define L2CAP_HIGH_PRI_MIN_XMIT_QUOTA       4
-#endif
-
-/* used for monitoring HCI ACL credit management */
-#ifndef L2CAP_HCI_FLOW_CONTROL_DEBUG
-#define L2CAP_HCI_FLOW_CONTROL_DEBUG        TRUE
-#endif
-
-/* Used for calculating transmit buffers off of */
-#ifndef L2CAP_NUM_XMIT_BUFFS
-#define L2CAP_NUM_XMIT_BUFFS                HCI_ACL_BUF_MAX
-#endif
-
-/* Unicast Connectionless Data */
-#ifndef L2CAP_UCD_INCLUDED
-#define L2CAP_UCD_INCLUDED                  FALSE
-#endif
-
-/* Unicast Connectionless Data MTU */
-#ifndef L2CAP_UCD_MTU
-#define L2CAP_UCD_MTU                       L2CAP_MTU_SIZE
-#endif
-
-/* Unicast Connectionless Data Idle Timeout */
-#ifndef L2CAP_UCD_IDLE_TIMEOUT
-#define L2CAP_UCD_IDLE_TIMEOUT              2
-#endif
-
-/* Unicast Connectionless Data Idle Timeout */
-#ifndef L2CAP_UCD_CH_PRIORITY
-#define L2CAP_UCD_CH_PRIORITY               L2CAP_CHNL_PRIORITY_MEDIUM
-#endif
-
-/* Max clients on Unicast Connectionless Data */
-#ifndef L2CAP_MAX_UCD_CLIENTS
-#define L2CAP_MAX_UCD_CLIENTS               5
-#endif
-
-/* Used for features using fixed channels; set to zero if no fixed channels supported (AMP, BLE, etc.) */
-/* Excluding L2CAP signaling channel and UCD */
-#ifndef L2CAP_NUM_FIXED_CHNLS
-#define L2CAP_NUM_FIXED_CHNLS               4
-#endif
-
-/* First fixed channel supported; 3 if AMP supported */
-#ifndef L2CAP_FIRST_FIXED_CHNL
-#define L2CAP_FIRST_FIXED_CHNL              3
-#endif
-
-#ifndef L2CAP_LAST_FIXED_CHNL
-#define L2CAP_LAST_FIXED_CHNL           (L2CAP_FIRST_FIXED_CHNL + L2CAP_NUM_FIXED_CHNLS - 1)
-#endif
-
-/* Round Robin service channels in link */
-#ifndef L2CAP_ROUND_ROBIN_CHANNEL_SERVICE
-#define L2CAP_ROUND_ROBIN_CHANNEL_SERVICE   TRUE
-#endif
-
-/* Reconfig after move channel between BR/EDR and AMP */
-#ifndef L2CAP_MOVE_CH_RECONFIG_INCLUDED
-#define L2CAP_MOVE_CH_RECONFIG_INCLUDED     FALSE
-#endif
-
-/* Initiate reconfig after move channel between BR/EDR and AMP */
-#ifndef L2CAP_MOVE_CH_RECONFIG_INTITIATOR
-#define L2CAP_MOVE_CH_RECONFIG_INTITIATOR   FALSE
-#endif
-
-/* Adjust our monitor timeout in ms plus peer's processing time on class 2 AMP controller */
-#ifndef L2CAP_AMP_ADJUST_MONITOR_TOUT
-#define L2CAP_AMP_ADJUST_MONITOR_TOUT       500
-#endif
-
-/* Adjust our retrans timeout in ms plus peer's processing time on class 2 AMP controller */
-#ifndef L2CAP_AMP_ADJUST_RETRANS_TOUT
-#define L2CAP_AMP_ADJUST_RETRANS_TOUT       500
-#endif
-
-/* Default local device's processing time (ms) */
-#ifndef L2CAP_AMP_PROCESSING_TIME
-#define L2CAP_AMP_PROCESSING_TIME           500
-#endif
-
-/* Used for calculating transmit buffers off of */
-#ifndef L2CAP_NUM_XMIT_BUFFS
-#define L2CAP_NUM_XMIT_BUFFS                HCI_ACL_BUF_MAX
-#endif
-
-/* Used for features using fixed channels; set to zero if no fixed channels supported (AMP, BLE, etc.) */
-#ifndef L2CAP_NUM_FIXED_CHNLS
-#define L2CAP_NUM_FIXED_CHNLS               1
-#endif
-
-/* First fixed channel supported; 3 if AMP supported */
-#ifndef L2CAP_FIRST_FIXED_CHNL
-#define L2CAP_FIRST_FIXED_CHNL              3
-#endif
-
-#ifndef L2CAP_LAST_FIXED_CHNL
-#define L2CAP_LAST_FIXED_CHNL           (L2CAP_FIRST_FIXED_CHNL + L2CAP_NUM_FIXED_CHNLS - 1)
-#endif
-
-/* used for monitoring eL2CAP data flow */
-#ifndef L2CAP_ERTM_STATS
-#define L2CAP_ERTM_STATS                    FALSE
-#endif
-
-/* USED FOR FCR TEST ONLY:  When TRUE generates bad tx and rx packets */
-#ifndef L2CAP_CORRUPT_ERTM_PKTS
-#define L2CAP_CORRUPT_ERTM_PKTS             FALSE
-#endif
-
-/* Used for conformance testing ONLY:  When TRUE lets scriptwrapper overwrite info response */
-#ifndef L2CAP_CONFORMANCE_TESTING
-#define L2CAP_CONFORMANCE_TESTING           FALSE
-#endif
-
-/******************************************************************************
-**
-** AMP
-**
-******************************************************************************/
-
-#ifndef AMP_INCLUDED
-#define AMP_INCLUDED            FALSE
-#endif
-
-/* TRUE if AMP includes debug functionality. */
-#ifndef AMP_DEBUG
-#define AMP_DEBUG               FALSE
-#endif
-
-/* Maximum number of simultaneous remote AMP Hosts in system */
-#ifndef AMP_MAX_REMOTE_HOSTS
-#define AMP_MAX_REMOTE_HOSTS    MAX_L2CAP_LINKS
-#endif
-
-/* Maximum number of simultaneous remote AMP controllers in system (BR/EDR excluded) */
-#ifndef AMP_MAX_REMOTE_CTRLS
-#define AMP_MAX_REMOTE_CTRLS    2
-#endif
-
-/* Maximum number of UUIDs per remote AMP host */
-#ifndef AMP_MAX_UUIDS_PER_REM_HOST
-#define AMP_MAX_UUIDS_PER_REM_HOST  4
-#endif
-
-/* Maximum number of simultaneous local AMP controllers in system (BR/EDR excluded) */
-#ifndef AMP_MAX_LOCAL_CTRLS
-#define AMP_MAX_LOCAL_CTRLS     1
-#endif
-
-/* Maximum number of simultaneous Physical Links in system */
-#ifndef AMP_MAX_PHYS_LINKS
-#define AMP_MAX_PHYS_LINKS      1
-#endif
-
-/* The maximum number of simultaneous AMP logical links that L2CAP can support. */
-#ifndef AMP_MAX_L2C_LOG_LINKS
-#define AMP_MAX_L2C_LOG_LINKS   (MAX_L2CAP_LINKS * 2)
-#endif
-
-/* The number of seconds of link inactivity on AMP fixed channel before the ACL is disconnected. */
-#ifndef AMP_L2C_INACTIVITY_TIMER
-#define AMP_L2C_INACTIVITY_TIMER    7
-#endif
-
-#ifndef AMP_NUM_ALWAYS_PRESENT_LOC_CTRLRS
-#define AMP_NUM_ALWAYS_PRESENT_LOC_CTRLRS       AMP_MAX_LOCAL_CTRLS
-#endif
-
-/* If this is non-zero value then l2cap overwrites total ACL credit on AMP. */
-/* This temporarily needs until number in dhd driver is finalized */
-#ifndef AMP_TOTAL_NUM_BLOCKS
-#define AMP_TOTAL_NUM_BLOCKS        0
-#endif
-
-/****************************
-** AMP Autoswitch Constants
-*****************************/
-/* AMP physical link inactivity timeout
-** This is started when the last logical channel got disconnected */
-#ifndef AMP_PHYS_LINK_INACT_DISC_TOUT
-#define AMP_PHYS_LINK_INACT_DISC_TOUT               20
-#endif
-
-/* interval between the moments to check if auto-switch ready connections
-** on this AMP controller have to be moved to BR/EDR and if yes - to
-** start to move the connections */
-#ifndef AMP_AS_TOUT_ON_AMP
-#define AMP_AS_TOUT_ON_AMP                          1
-#endif
-
-/* on timeout all auto-switch ready connections
-** have to be moved from BR/EDR to AMP */
-#ifndef AMP_AS_TOUT_ON_BR_EDR
-#define AMP_AS_TOUT_ON_BR_EDR                       1
-#endif
-
-/* min time to stay on BR/EDR after auto-switch from AMP
-** (during this time conditions to switch from BR/EDR to
-** AMP are ignored) */
-#ifndef AMP_AS_TOUT_NO_MOVE_TO_AMP
-#define AMP_AS_TOUT_NO_MOVE_TO_AMP                  4
-#endif
-
-/* TRUE means that "tout to check throughput on BR/EDR"
-** is restarted after "no move to AMP" timer expires,
-** i.e. move from BR/EDR will start not earlier than
-**  AMP_AS_TOUT_NO_MOVE_TO_AMP + AMP_AS_TOUT_ON_BR_EDR
-** FALSE means that "tout no move to AMP" and "tout
-** to check throughput on BR/EDR" run in parallel, i.e.
-** connections can be moved from BR/EDR any moment after
-** "tout no move to AMP" expires. */
-#ifndef AMP_AS_TOUT_ON_BR_EDR_AFTER_NO_MOVE_TO_AMP
-#define AMP_AS_TOUT_ON_BR_EDR_AFTER_NO_MOVE_TO_AMP  TRUE
-#endif
-
-/* Until the number of packets sent to L2CAP is <= than this
-** value preparations for auto-switch BR/EDR->AMP do not start.
-** If the number of packets sent to L2CAP falls to this
-** value preparations for auto-switch BR/EDR->AMP stop. */
-#ifndef AMP_AS_THRESHOLD_ON_BR_EDR
-#define AMP_AS_THRESHOLD_ON_BR_EDR                  3
-#endif
-
-/* the number of counters used to collect throughput data
-** on AMP controller. Check for auto-switch conditions starts
-** AMP_AMP_AS_COUNT_ARRAY_SIZE * AMP_AS_TOUT_ON_AMP
-** sec after the first auto-switch ready connection is moved
-** to this controller */
-#ifndef AMP_AMP_AS_COUNT_ARRAY_SIZE
-#define AMP_AMP_AS_COUNT_ARRAY_SIZE                 10
-#endif
-
-/* meaning: flow spec modify is never sent to controller
-**          best effort logical link is created with all
-**          parameters sent to unknown...*/
-#ifndef AMP_SIMPLISTIC_AGGREGATION
-#define AMP_SIMPLISTIC_AGGREGATION  TRUE
-#endif
-
-/* meaning: auto-switch ready connections start move
-** BR/EDR->AMP after throughput to remote host passes
-** some threshold in bytes (as opposite to move that
-** starts if during some time the number of UNACKED
-** L2CAP packets to remote host stays bigger than some
-** threshold) */
-#ifndef AMP_AUTO_SW_TO_AMP_BY_THROUGHPUT
-#define AMP_AUTO_SW_TO_AMP_BY_THROUGHPUT TRUE
-#endif
-
-/* the number of counters used to collect throughput data
-** on BR/EDR controller. Check for auto-switch conditions starts
-** AMP_BR_EDR_AS_COUNT_ARRAY_SIZE * AMP_AS_TOUT_ON_BR_EDR
-** sec after the first auto-switch ready connection is moved
-** to this controller */
-#ifndef AMP_BR_EDR_AS_COUNT_ARRAY_SIZE
-#define AMP_BR_EDR_AS_COUNT_ARRAY_SIZE              7
-#endif
-
-/* if it takes more than this amount of time to transfer object on BR/EDR
-** application(BTA) will initiate to AMP connection. */
-#ifndef AMP_AS_TRANSFER_TIME_ON_BR_EDR
-#define AMP_AS_TRANSFER_TIME_ON_BR_EDR              5
-#endif
-
-
-#ifndef AMP_RFC_TEST
-#define AMP_RFC_TEST            FALSE
-#endif
-
-
-/******************************************************************************
-**
-** BLE
-**
-******************************************************************************/
-
-#ifndef BLE_INCLUDED
-#define BLE_INCLUDED            FALSE
-#endif
-
-#ifndef LOCAL_BLE_CONTROLLER_ID
-#define LOCAL_BLE_CONTROLLER_ID         (AMP_MAX_LOCAL_CTRLS + 1)
-#endif
-
-#ifndef BTM_BLE_PRIVACY_SPT
-#define BTM_BLE_PRIVACY_SPT         FALSE
-#endif
-
-#ifndef BTM_PERIPHERAL_ENABLED
-#define BTM_PERIPHERAL_ENABLED     FALSE
-#endif
-
-#ifndef HID_LE_INCLUDED
-#define HID_LE_INCLUDED         FALSE
-#endif
-
-#ifndef BLE_BRCM_INCLUDED
-#define BLE_BRCM_INCLUDED         FALSE
-#endif
-
-#ifndef BTM_DUMO_ADDR_CENTRAL_ENABLED
-#define BTM_DUMO_ADDR_CENTRAL_ENABLED         FALSE
-#endif
-
-
-/******************************************************************************
-**
-** ATT/GATT Protocol/Profile Settings
-**
-******************************************************************************/
-#ifndef ATT_DEBUG
-#define ATT_DEBUG           FALSE
-#endif
-
-#ifndef GATT_MAX_SR_PROFILES
-#define GATT_MAX_SR_PROFILES        32 /* max is 32 */
-#endif
-
-#ifndef GATT_MAX_APPS
-#define GATT_MAX_APPS            10 /* note: 2 apps used internally GATT and GAP */
-#endif
-
-#ifndef GATT_MAX_PHY_CHANNEL
-#define GATT_MAX_PHY_CHANNEL        4 /* limited by the BLE controller upto 15 */
-#endif
-
-/* Used for conformance testing ONLY */
-#ifndef GATT_CONFORMANCE_TESTING
-#define GATT_CONFORMANCE_TESTING           FALSE
-#endif
-
-/* number of background connection device allowence, ideally to be the same as WL size
-*/
-#ifndef GATT_MAX_BG_CONN_DEV
-#define GATT_MAX_BG_CONN_DEV        32
-#endif
-
-/******************************************************************************
-**
-** SMP
-**
-******************************************************************************/
-#ifndef SMP_INCLUDED
-#define SMP_INCLUDED         FALSE
-#endif
-
-#ifndef SMP_DEBUG
-#define SMP_DEBUG            FALSE
-#endif
-
-#ifndef SMP_DEFAULT_AUTH_REQ
-#define SMP_DEFAULT_AUTH_REQ    SMP_AUTH_NB_ENC_ONLY
-#endif
-
-#ifndef SMP_MAX_ENC_KEY_SIZE
-#define SMP_MAX_ENC_KEY_SIZE    16
-#endif
-
-#ifndef SMP_MIN_ENC_KEY_SIZE
-#define SMP_MIN_ENC_KEY_SIZE    7
-#endif
-
-/* Used for conformance testing ONLY */
-#ifndef SMP_CONFORMANCE_TESTING
-#define SMP_CONFORMANCE_TESTING           FALSE
-#endif
-
-/******************************************************************************
-**
-** SDP
-**
-******************************************************************************/
-
-/* This is set to enable SDP server functionality. */
-#ifndef SDP_SERVER_ENABLED
-#define SDP_SERVER_ENABLED          TRUE
-#endif
-
-/* The maximum number of SDP records the server can support. */
-#ifndef SDP_MAX_RECORDS
-#define SDP_MAX_RECORDS             20
-#endif
-
-/* The maximum number of attributes in each record. */
-#ifndef SDP_MAX_REC_ATTR
-#define SDP_MAX_REC_ATTR            25
-#endif
-
-#ifndef SDP_MAX_PAD_LEN
-#define SDP_MAX_PAD_LEN             350
-#endif
-
-/* The maximum length, in bytes, of an attribute. */
-#ifndef SDP_MAX_ATTR_LEN
-#define SDP_MAX_ATTR_LEN            256
-#endif
-
-/* The maximum number of attribute filters supported by SDP databases. */
-#ifndef SDP_MAX_ATTR_FILTERS
-#define SDP_MAX_ATTR_FILTERS        12
-#endif
-
-/* The maximum number of UUID filters supported by SDP databases. */
-#ifndef SDP_MAX_UUID_FILTERS
-#define SDP_MAX_UUID_FILTERS        3
-#endif
-
-/* This is set to enable SDP client functionality. */
-#ifndef SDP_CLIENT_ENABLED
-#define SDP_CLIENT_ENABLED          TRUE
-#endif
-
-/* The maximum number of record handles retrieved in a search. */
-#ifndef SDP_MAX_DISC_SERVER_RECS
-#define SDP_MAX_DISC_SERVER_RECS    21
-#endif
-
-/* The size of a scratchpad buffer, in bytes, for storing the response to an attribute request. */
-#ifndef SDP_MAX_LIST_BYTE_COUNT
-#define SDP_MAX_LIST_BYTE_COUNT     1000
-#endif
-
-/* The maximum number of parameters in an SDP protocol element. */
-#ifndef SDP_MAX_PROTOCOL_PARAMS
-#define SDP_MAX_PROTOCOL_PARAMS     2
-#endif
-
-/* The maximum number of simultaneous client and server connections. */
-#ifndef SDP_MAX_CONNECTIONS
-#define SDP_MAX_CONNECTIONS         4
-#endif
-
-/* The MTU size for the L2CAP configuration. */
-#ifndef SDP_MTU_SIZE
-#define SDP_MTU_SIZE                256
-#endif
-
-/* The flush timeout for the L2CAP configuration. */
-#ifndef SDP_FLUSH_TO
-#define SDP_FLUSH_TO                0xFFFF
-#endif
-
-/* The name for security authorization. */
-#ifndef SDP_SERVICE_NAME
-#define SDP_SERVICE_NAME            "Service Discovery"
-#endif
-
-/* The security level for BTM. */
-#ifndef SDP_SECURITY_LEVEL
-#define SDP_SECURITY_LEVEL          BTM_SEC_NONE
-#endif
-
-/******************************************************************************
-**
-** RFCOMM
-**
-******************************************************************************/
-
-#ifndef RFCOMM_INCLUDED
-#define RFCOMM_INCLUDED             FALSE
-#endif
-
-/* The maximum number of ports supported. */
-#ifndef MAX_RFC_PORTS
-#define MAX_RFC_PORTS               5
-#endif
-
-/* The maximum simultaneous links to different devices. */
-#ifndef MAX_BD_CONNECTIONS
-#define MAX_BD_CONNECTIONS          1
-#endif
-
-/* The port receive queue low watermark level, in bytes. */
-#ifndef PORT_RX_LOW_WM
-#define PORT_RX_LOW_WM              5000
-#endif
-
-/* The port receive queue high watermark level, in bytes. */
-#ifndef PORT_RX_HIGH_WM
-#define PORT_RX_HIGH_WM             8000
-#endif
-
-/* The port receive queue critical watermark level, in bytes. */
-#ifndef PORT_RX_CRITICAL_WM
-#define PORT_RX_CRITICAL_WM         12000
-#endif
-
-/* The port receive queue low watermark level, in number of buffers. */
-#ifndef PORT_RX_BUF_LOW_WM
-#define PORT_RX_BUF_LOW_WM          8
-#endif
-
-/* The port receive queue high watermark level, in number of buffers. */
-#ifndef PORT_RX_BUF_HIGH_WM
-#define PORT_RX_BUF_HIGH_WM         16
-#endif
-
-/* The port receive queue critical watermark level, in number of buffers. */
-#ifndef PORT_RX_BUF_CRITICAL_WM
-#define PORT_RX_BUF_CRITICAL_WM     22
-#endif
-
-/* The port transmit queue high watermark level, in bytes. */
-#ifndef PORT_TX_HIGH_WM
-#define PORT_TX_HIGH_WM             8000
-#endif
-
-/* The port transmit queue critical watermark level, in bytes. */
-#ifndef PORT_TX_CRITICAL_WM
-#define PORT_TX_CRITICAL_WM         10000
-#endif
-
-/* The port transmit queue high watermark level, in number of buffers. */
-#ifndef PORT_TX_BUF_HIGH_WM
-#define PORT_TX_BUF_HIGH_WM         16
-#endif
-
-/* The port transmit queue high watermark level, in number of buffers. */
-#ifndef PORT_TX_BUF_CRITICAL_WM
-#define PORT_TX_BUF_CRITICAL_WM     22
-#endif
-
-/* The RFCOMM multiplexer preferred flow control mechanism. */
-#ifndef PORT_FC_DEFAULT
-#define PORT_FC_DEFAULT             PORT_FC_CREDIT
-#endif
-
-/* The maximum number of credits receiver sends to peer when using credit-based flow control. */
-#ifndef PORT_CREDIT_RX_MAX
-#define PORT_CREDIT_RX_MAX          16
-#endif
-
-/* The credit low watermark level. */
-#ifndef PORT_CREDIT_RX_LOW
-#define PORT_CREDIT_RX_LOW          8
-#endif
-
-/* if application like BTA, Java or script test engine is running on other than BTU thread, */
-/* PORT_SCHEDULE_LOCK shall be defined as GKI_sched_lock() or GKI_disable() */
-#ifndef PORT_SCHEDULE_LOCK
-#define PORT_SCHEDULE_LOCK          GKI_disable()
-#endif
-
-/* if application like BTA, Java or script test engine is running on other than BTU thread, */
-/* PORT_SCHEDULE_LOCK shall be defined as GKI_sched_unlock() or GKI_enable() */
-#ifndef PORT_SCHEDULE_UNLOCK
-#define PORT_SCHEDULE_UNLOCK        GKI_enable()
-#endif
-
-/******************************************************************************
-**
-** TCS
-**
-******************************************************************************/
-
-#ifndef TCS_INCLUDED
-#define TCS_INCLUDED                FALSE
-#endif
-
-/* If set to TRUE, gives lean TCS state machine configuration. */
-#ifndef TCS_LEAN
-#define TCS_LEAN                    FALSE
-#endif
-
-/* To include/exclude point-to-multipoint broadcast SETUP configuration. */
-#ifndef TCS_BCST_SETUP_INCLUDED
-#define TCS_BCST_SETUP_INCLUDED     TRUE
-#endif
-
-/* To include/exclude supplementary services. */
-#ifndef TCS_SUPP_SVCS_INCLUDED
-#define TCS_SUPP_SVCS_INCLUDED      TRUE
-#endif
-
-/* To include/exclude WUG master role. */
-#ifndef TCS_WUG_MASTER_INCLUDED
-#define TCS_WUG_MASTER_INCLUDED     TRUE
-#endif
-
-/* To include/exclude WUG member role. */
-#ifndef TCS_WUG_MEMBER_INCLUDED
-#define TCS_WUG_MEMBER_INCLUDED     TRUE
-#endif
-
-/* Maximum number of WUG members. */
-#ifndef TCS_MAX_WUG_MEMBERS
-#define TCS_MAX_WUG_MEMBERS         7
-#endif
-
-/* Widcomm specific acknowledgement message to ensure fast and robust operation of WUG FIMA procedure. */
-#ifndef TCS_WUG_LISTEN_ACPT_ACK_INCLUDED
-#define TCS_WUG_LISTEN_ACPT_ACK_INCLUDED TRUE
-#endif
-
-/* The number of simultaneous calls supported. */
-#ifndef TCS_MAX_NUM_SIMUL_CALLS
-#define TCS_MAX_NUM_SIMUL_CALLS     3
-#endif
-
-/* The number of devices the device can connect to. */
-#ifndef TCS_MAX_NUM_ACL_CONNS
-#define TCS_MAX_NUM_ACL_CONNS       7
-#endif
-
-/* The maximum length, in bytes, of the company specific information element. */
-#ifndef TCS_MAX_CO_SPEC_LEN
-#define TCS_MAX_CO_SPEC_LEN         40
-#endif
-
-/* The maximum length, in bytes, of the audio control information element . */
-#ifndef TCS_MAX_AUDIO_CTL_LEN
-#define TCS_MAX_AUDIO_CTL_LEN       40
-#endif
-
-/* (Dis)allow EDR ESCO */
-#ifndef TCS_AUDIO_USE_ESCO_EDR
-#define TCS_AUDIO_USE_ESCO_EDR      FALSE
-#endif
-
-/******************************************************************************
-**
-** OBX
-**
-******************************************************************************/
-#ifndef OBX_INCLUDED
-#define OBX_INCLUDED               FALSE
-#endif
-
-#ifndef OBX_CLIENT_INCLUDED
-#define OBX_CLIENT_INCLUDED        TRUE
-#endif
-
-#ifndef OBX_SERVER_INCLUDED
-#define OBX_SERVER_INCLUDED        TRUE
-#endif
-
-/* TRUE to include OBEX authentication/MD5 test code */
-#ifndef OBX_MD5_TEST_INCLUDED
-#define OBX_MD5_TEST_INCLUDED       FALSE
-#endif
-
-/* The timeout value (in seconds) for reliable sessions to remain in suspend. 0xFFFFFFFF for no timeout event. */
-#ifndef OBX_SESS_TIMEOUT_VALUE
-#define OBX_SESS_TIMEOUT_VALUE      600
-#endif
-
-/* The idle timeout value. 0 for no timeout event. */
-#ifndef OBX_TIMEOUT_VALUE
-#define OBX_TIMEOUT_VALUE           60
-#endif
-
-/* Timeout value used for disconnect */
-#ifndef OBX_DISC_TOUT_VALUE
-#define OBX_DISC_TOUT_VALUE         5
-#endif
-
-/* The maximum number of registered servers. */
-#ifndef OBX_NUM_SERVERS
-#define OBX_NUM_SERVERS             12
-#endif
-
-/* The maximum number of sessions for all registered servers.
- * (must be equal or bigger than OBX_NUM_SERVERS) */
-#ifndef OBX_NUM_SR_SESSIONS
-#define OBX_NUM_SR_SESSIONS         26
-#endif
-
-/* The maximum number of sessions per registered server.
- * must be less than MAX_BD_CONNECTIONS */
-#ifndef OBX_MAX_SR_SESSION
-#define OBX_MAX_SR_SESSION          4
-#endif
-
-/* The maximum number of suspended sessions per registered servers. */
-#ifndef OBX_MAX_SUSPEND_SESSIONS
-#define OBX_MAX_SUSPEND_SESSIONS    4
-#endif
-
-/* The maximum number of active clients. */
-#ifndef OBX_NUM_CLIENTS
-#define OBX_NUM_CLIENTS             8
-#endif
-
-/* The maximum length of OBEX target header.*/
-#ifndef OBX_MAX_TARGET_LEN
-#define OBX_MAX_TARGET_LEN          16
-#endif
-
-/* The maximum length of authentication challenge realm.*/
-#ifndef OBX_MAX_REALM_LEN
-#define OBX_MAX_REALM_LEN           30
-#endif
-
-/* The maximum of GKI buffer queued at OBX before flow control L2CAP */
-#ifndef OBX_MAX_RX_QUEUE_COUNT
-#define OBX_MAX_RX_QUEUE_COUNT      3
-#endif
-
-/* This option is application when OBEX over L2CAP is in use
-   Pool ID where to reassemble the SDU.
-   This Pool will allow buffers to be used that are larger than
-   the L2CAP_MAX_MTU. */
-#ifndef OBX_USER_RX_POOL_ID
-#define OBX_USER_RX_POOL_ID     OBX_LRG_DATA_POOL_ID
-#endif
-
-/* This option is application when OBEX over L2CAP is in use
-   Pool ID where to hold the SDU.
-   This Pool will allow buffers to be used that are larger than
-   the L2CAP_MAX_MTU. */
-#ifndef OBX_USER_TX_POOL_ID
-#define OBX_USER_TX_POOL_ID     OBX_LRG_DATA_POOL_ID
-#endif
-
-/* This option is application when OBEX over L2CAP is in use
-GKI Buffer Pool ID used to hold MPS segments during SDU reassembly
-*/
-#ifndef OBX_FCR_RX_POOL_ID
-#define OBX_FCR_RX_POOL_ID      HCI_ACL_POOL_ID
-#endif
-
-/* This option is application when OBEX over L2CAP is in use
-GKI Buffer Pool ID used to hold MPS segments used in (re)transmissions.
-L2CAP_DEFAULT_ERM_POOL_ID is specified to use the HCI ACL data pool.
-Note:  This pool needs to have enough buffers to hold two times the window size negotiated
- in the L2CA_SetFCROptions (2 * tx_win_size)  to allow for retransmissions.
- The size of each buffer must be able to hold the maximum MPS segment size passed in
- L2CA_SetFCROptions plus BT_HDR (8) + HCI preamble (4) + L2CAP_MIN_OFFSET (11 - as of BT 2.1 + EDR Spec).
-*/
-#ifndef OBX_FCR_TX_POOL_ID
-#define OBX_FCR_TX_POOL_ID      HCI_ACL_POOL_ID
-#endif
-
-/* This option is application when OBEX over L2CAP is in use
-Size of the transmission window when using enhanced retransmission mode. Not used
-in basic and streaming modes. Range: 1 - 63
-This is used when AMP_INCLUDED == FALSE
-*/
-#ifndef OBX_FCR_OPT_TX_WINDOW_SIZE_BR_EDR
-#define OBX_FCR_OPT_TX_WINDOW_SIZE_BR_EDR       20
-#endif
-
-/* This option is application when OBEX over L2CAP is in use
-Size of the transmission window when using enhanced retransmission mode. Not used
-in basic and streaming modes. Range: 1 - 63
-This is used when AMP_INCLUDED == TRUE
-*/
-#ifndef OBX_FCR_OPT_TX_WINDOW_SIZE_AMP
-#define OBX_FCR_OPT_TX_WINDOW_SIZE_AMP          45
-#endif
-
-/* This option is application when OBEX over L2CAP is in use
-Number of transmission attempts for a single I-Frame before taking
-Down the connection. Used In ERTM mode only. Value is Ignored in basic and
-Streaming modes.
-Range: 0, 1-0xFF
-0 - infinite retransmissions
-1 - single transmission
-*/
-#ifndef OBX_FCR_OPT_MAX_TX_B4_DISCNT
-#define OBX_FCR_OPT_MAX_TX_B4_DISCNT    20
-#endif
-
-/* This option is application when OBEX over L2CAP is in use
-Retransmission Timeout
-Range: Minimum 2000 (2 secs) on BR/EDR when supporting PBF.
- */
-#ifndef OBX_FCR_OPT_RETX_TOUT
-#define OBX_FCR_OPT_RETX_TOUT           2000
-#endif
-
-/* This option is application when OBEX over L2CAP is in use
-Monitor Timeout
-Range: Minimum 12000 (12 secs) on BR/EDR when supporting PBF.
-*/
-#ifndef OBX_FCR_OPT_MONITOR_TOUT
-#define OBX_FCR_OPT_MONITOR_TOUT        12000
-#endif
-
-/******************************************************************************
-**
-** BNEP
-**
-******************************************************************************/
-
-#ifndef BNEP_INCLUDED
-#define BNEP_INCLUDED               FALSE
-#endif
-
-/* Protocol filtering is an optional feature. Bydefault it will be turned on */
-#ifndef BNEP_SUPPORTS_PROT_FILTERS
-#define BNEP_SUPPORTS_PROT_FILTERS          TRUE
-#endif
-
-/* Multicast filtering is an optional feature. Bydefault it will be turned on */
-#ifndef BNEP_SUPPORTS_MULTI_FILTERS
-#define BNEP_SUPPORTS_MULTI_FILTERS         TRUE
-#endif
-
-/* BNEP status API call is used mainly to get the L2CAP handle */
-#ifndef BNEP_SUPPORTS_STATUS_API
-#define BNEP_SUPPORTS_STATUS_API            TRUE
-#endif
-
-/* This is just a debug function */
-#ifndef BNEP_SUPPORTS_DEBUG_DUMP
-#define BNEP_SUPPORTS_DEBUG_DUMP            TRUE
-#endif
-
-#ifndef BNEP_SUPPORTS_ALL_UUID_LENGTHS
-#define BNEP_SUPPORTS_ALL_UUID_LENGTHS      TRUE    /* Otherwise it will support only 16bit UUIDs */
-#endif
-
-/*
-** When BNEP connection changes roles after the connection is established
-** we will do an authentication check again on the new role
-*/
-#ifndef BNEP_DO_AUTH_FOR_ROLE_SWITCH
-#define BNEP_DO_AUTH_FOR_ROLE_SWITCH        TRUE
-#endif
-
-
-/* Maximum number of protocol filters supported. */
-#ifndef BNEP_MAX_PROT_FILTERS
-#define BNEP_MAX_PROT_FILTERS       5
-#endif
-
-/* Maximum number of multicast filters supported. */
-#ifndef BNEP_MAX_MULTI_FILTERS
-#define BNEP_MAX_MULTI_FILTERS      5
-#endif
-
-/* Minimum MTU size. */
-#ifndef BNEP_MIN_MTU_SIZE
-#define BNEP_MIN_MTU_SIZE           L2CAP_MTU_SIZE
-#endif
-
-/* Preferred MTU size. */
-#ifndef BNEP_MTU_SIZE
-#define BNEP_MTU_SIZE               BNEP_MIN_MTU_SIZE
-#endif
-
-/* Maximum size of user data, in bytes.  */
-#ifndef BNEP_MAX_USER_DATA_SIZE
-#define BNEP_MAX_USER_DATA_SIZE     1500
-#endif
-
-/* Maximum number of buffers allowed in transmit data queue. */
-#ifndef BNEP_MAX_XMITQ_DEPTH
-#define BNEP_MAX_XMITQ_DEPTH        20
-#endif
-
-/* Maximum number BNEP of connections supported. */
-#ifndef BNEP_MAX_CONNECTIONS
-#define BNEP_MAX_CONNECTIONS        7
-#endif
-
-
-/******************************************************************************
-**
-** AVDTP
-**
-******************************************************************************/
-
-#ifndef AVDT_INCLUDED
-#define AVDT_INCLUDED               FALSE
-#endif
-
-/* Include reporting capability in AVDTP */
-#ifndef AVDT_REPORTING
-#define AVDT_REPORTING              TRUE
-#endif
-
-/* Include multiplexing capability in AVDTP */
-#ifndef AVDT_MULTIPLEXING
-#define AVDT_MULTIPLEXING           TRUE
-#endif
-
-/* Number of simultaneous links to different peer devices. */
-#ifndef AVDT_NUM_LINKS
-#define AVDT_NUM_LINKS              2
-#endif
-
-/* Number of simultaneous stream endpoints. */
-#ifndef AVDT_NUM_SEPS
-#define AVDT_NUM_SEPS               3
-#endif
-
-/* Number of transport channels setup per media stream(audio or video) */
-#ifndef AVDT_NUM_CHANNELS
-
-#if AVDT_REPORTING == TRUE
-/* signaling, media and reporting channels */
-#define AVDT_NUM_CHANNELS   3
-#else
-/* signaling and media channels */
-#define AVDT_NUM_CHANNELS   2
-#endif
-
-#endif
-
-/* Number of transport channels setup by AVDT for all media streams
- * AVDT_NUM_CHANNELS * Number of simultaneous streams.
- */
-#ifndef AVDT_NUM_TC_TBL
-#define AVDT_NUM_TC_TBL             6
-#endif
-
-
-/* Maximum size in bytes of the codec capabilities information element. */
-#ifndef AVDT_CODEC_SIZE
-#define AVDT_CODEC_SIZE             10
-#endif
-
-/* Maximum size in bytes of the content protection information element. */
-#ifndef AVDT_PROTECT_SIZE
-#define AVDT_PROTECT_SIZE           90
-#endif
-
-/* Maximum number of GKI buffers in the fragment queue (for video frames).
- * Must be less than the number of buffers in the buffer pool of size AVDT_DATA_POOL_SIZE */
-#ifndef AVDT_MAX_FRAG_COUNT
-#define AVDT_MAX_FRAG_COUNT         15
-#endif
-
-/******************************************************************************
-**
-** PAN
-**
-******************************************************************************/
-
-#ifndef PAN_INCLUDED
-#define PAN_INCLUDED                     FALSE
-#endif
-
-/* This will enable the PANU role */
-#ifndef PAN_SUPPORTS_ROLE_PANU
-#define PAN_SUPPORTS_ROLE_PANU              TRUE
-#endif
-
-/* This will enable the GN role */
-#ifndef PAN_SUPPORTS_ROLE_GN
-#define PAN_SUPPORTS_ROLE_GN                TRUE
-#endif
-
-/* This will enable the NAP role */
-#ifndef PAN_SUPPORTS_ROLE_NAP
-#define PAN_SUPPORTS_ROLE_NAP               TRUE
-#endif
-
-/* This is just for debugging purposes */
-#ifndef PAN_SUPPORTS_DEBUG_DUMP
-#define PAN_SUPPORTS_DEBUG_DUMP             TRUE
-#endif
-
-
-/* Maximum number of PAN connections allowed */
-#ifndef MAX_PAN_CONNS
-#define MAX_PAN_CONNS                    7
-#endif
-
-/* Default service name for NAP role */
-#ifndef PAN_NAP_DEFAULT_SERVICE_NAME
-#define PAN_NAP_DEFAULT_SERVICE_NAME    "Network Access Point Service"
-#endif
-
-/* Default service name for GN role */
-#ifndef PAN_GN_DEFAULT_SERVICE_NAME
-#define PAN_GN_DEFAULT_SERVICE_NAME     "Group Network Service"
-#endif
-
-/* Default service name for PANU role */
-#ifndef PAN_PANU_DEFAULT_SERVICE_NAME
-#define PAN_PANU_DEFAULT_SERVICE_NAME   "PAN User Service"
-#endif
-
-/* Default description for NAP role service */
-#ifndef PAN_NAP_DEFAULT_DESCRIPTION
-#define PAN_NAP_DEFAULT_DESCRIPTION     "Public NAP"
-#endif
-
-/* Default description for GN role service */
-#ifndef PAN_GN_DEFAULT_DESCRIPTION
-#define PAN_GN_DEFAULT_DESCRIPTION      "Widcomm GN"
-#endif
-
-/* Default description for PANU role service */
-#ifndef PAN_PANU_DEFAULT_DESCRIPTION
-#define PAN_PANU_DEFAULT_DESCRIPTION    "Laptop's PANU"
-#endif
-
-/* Default Security level for PANU role. */
-#ifndef PAN_PANU_SECURITY_LEVEL
-#define PAN_PANU_SECURITY_LEVEL          0
-#endif
-
-/* Default Security level for GN role. */
-#ifndef PAN_GN_SECURITY_LEVEL
-#define PAN_GN_SECURITY_LEVEL            0
-#endif
-
-/* Default Security level for NAP role. */
-#ifndef PAN_NAP_SECURITY_LEVEL
-#define PAN_NAP_SECURITY_LEVEL           0
-#endif
-
-
-
-
-/******************************************************************************
-**
-** GAP
-**
-******************************************************************************/
-
-#ifndef GAP_INCLUDED
-#define GAP_INCLUDED                FALSE
-#endif
-
-/* This is set to enable use of GAP L2CAP connections. */
-#ifndef GAP_CONN_INCLUDED
-#define GAP_CONN_INCLUDED           TRUE
-#endif
-
-/* This is set to enable posting event for data write */
-#ifndef GAP_CONN_POST_EVT_INCLUDED
-#define GAP_CONN_POST_EVT_INCLUDED  FALSE
-#endif
-
-/* The maximum number of simultaneous GAP L2CAP connections. */
-#ifndef GAP_MAX_CONNECTIONS
-#define GAP_MAX_CONNECTIONS         8
-#endif
-
-/******************************************************************************
-**
-** CTP
-**
-******************************************************************************/
-
-#ifndef CTP_INCLUDED
-#define CTP_INCLUDED                FALSE
-#endif
-
-/* To include CTP gateway functionality or not. */
-#ifndef CTP_GW_INCLUDED
-#define CTP_GW_INCLUDED             TRUE
-#endif
-
-/* The number of terminals supported. */
-#ifndef CTP_MAX_NUM_TLS
-#define CTP_MAX_NUM_TLS             7
-#endif
-
-/* If the controller can not support sniff mode when the SCO is up, set this to FALSE. */
-#ifndef CTP_USE_SNIFF_ON_SCO
-#define CTP_USE_SNIFF_ON_SCO        FALSE
-#endif
-
-/* When ACL link between TL and GW is idle for more than this amount of seconds, the ACL may be put to low power mode. */
-#ifndef CTP_TL_IDLE_TIMEOUT
-#define CTP_TL_IDLE_TIMEOUT         90
-#endif
-
-/* To include CTP terminal functionality or not. */
-#ifndef CTP_TL_INCLUDED
-#define CTP_TL_INCLUDED             TRUE
-#endif
-
-/* To include CTP device discovery functionality or not. */
-#ifndef CTP_DISCOVERY_INCLUDED
-#define CTP_DISCOVERY_INCLUDED      TRUE
-#endif
-
-/* set to TRUE for controllers that do not support multi-point */
-#ifndef CTP_TL_WAIT_DISC
-#define CTP_TL_WAIT_DISC            TRUE
-#endif
-
-/* The CTP inquiry database size. */
-#ifndef CTP_INQ_DB_SIZE
-#define CTP_INQ_DB_SIZE             CTP_DISC_REC_SIZE
-#endif
-
-/* The CTP discovery record size. */
-#ifndef CTP_DISC_REC_SIZE
-#define CTP_DISC_REC_SIZE           60
-#endif
-
-/* CTP TL would try to re-establish L2CAP channel after channel is disconnected for this amount of seconds. */
-#ifndef CTP_GUARD_LINK_LOST
-#define CTP_GUARD_LINK_LOST         1
-#endif
-
-/* The link policy bitmap. */
-#ifndef CTP_DEFAULT_LINK_POLICY
-#define CTP_DEFAULT_LINK_POLICY     0x000F
-#endif
-
-/* The minimum period interval used for the sniff and park modes. */
-#ifndef CTP_DEF_LOWPWR_MIN_PERIOD
-#define CTP_DEF_LOWPWR_MIN_PERIOD   0x100
-#endif
-
-/* The maximum period interval used for the sniff and park modes. */
-#ifndef CTP_DEF_LOWPWR_MAX_PERIOD
-#define CTP_DEF_LOWPWR_MAX_PERIOD   0x1E0
-#endif
-
-/* The number of baseband receive slot sniff attempts. */
-#ifndef CTP_DEF_LOWPWR_ATTEMPT
-#define CTP_DEF_LOWPWR_ATTEMPT      0x200
-#endif
-
-/* The number of baseband receive slots for sniff timeout. */
-#ifndef CTP_DEF_LOWPWR_TIMEOUT
-#define CTP_DEF_LOWPWR_TIMEOUT      0x200
-#endif
-
-/* This is set if CTP is to use park mode. */
-#ifndef CTP_PARK_INCLUDED
-#define CTP_PARK_INCLUDED           TRUE
-#endif
-
-/* This is set if CTP is to use sniff mode. */
-#ifndef CTP_SNIFF_INCLUDED
-#define CTP_SNIFF_INCLUDED          TRUE
-#endif
-
-/* To include CTP data exchange functionality or not. */
-#ifndef CTP_DATA_EXCHG_FEATURE
-#define CTP_DATA_EXCHG_FEATURE      FALSE
-#endif
-
-/* To include CTP GW intercom functionality or not. */
-#ifndef CTP_GW_INTERCOM_FEATURE
-#define CTP_GW_INTERCOM_FEATURE     FALSE
-#endif
-
-/* The MTU size for L2CAP channel. */
-#ifndef CTP_MTU_SIZE
-#define CTP_MTU_SIZE                200
-#endif
-
-/* The L2CAP PSM for the data exchange feature. */
-#ifndef CTP_DATA_EXCHG_PSM
-#define CTP_DATA_EXCHG_PSM          13
-#endif
-
-/* The flush timeout for L2CAP channels. */
-#ifndef CTP_FLUSH_TO
-#define CTP_FLUSH_TO                0xFFFF
-#endif
-
-/* The default service name for CTP. */
-#ifndef CTP_DEFAULT_SERVICE_NAME
-#define CTP_DEFAULT_SERVICE_NAME    "Cordless Telephony"
-#endif
-
-/* The CTP security level. */
-#ifndef CTP_SECURITY_LEVEL
-#define CTP_SECURITY_LEVEL          (BTM_SEC_IN_AUTHORIZE | BTM_SEC_IN_AUTHENTICATE | BTM_SEC_IN_ENCRYPT)
-#endif
-
-/* The number of lines to the external network. */
-#ifndef CTP_MAX_LINES
-#define CTP_MAX_LINES               1
-#endif
-
-/* Test if the number of resources in TCS is consistent with CTP setting. */
-#ifndef CTP_TEST_FULL_TCS
-#define CTP_TEST_FULL_TCS           TRUE
-#endif
-
-/* The default inquiry mode. */
-#ifndef CTP_DEFAULT_INQUIRY_MODE
-#define CTP_DEFAULT_INQUIRY_MODE    BTM_GENERAL_INQUIRY
-#endif
-
-/* The default inquiry duration. */
-#ifndef CTP_DEFAULT_INQ_DURATION
-#define CTP_DEFAULT_INQ_DURATION    4
-#endif
-
-/* The maximum number of inquiry responses. */
-#ifndef CTP_DEFAULT_INQ_MAX_RESP
-#define CTP_DEFAULT_INQ_MAX_RESP    3
-#endif
-
-/* When TL does not create another L2CAP channel within this period of time GW declares that it's "Connected Limited". */
-#ifndef CTP_TL_CONN_TIMEOUT
-#define CTP_TL_CONN_TIMEOUT         5
-#endif
-
-/* The delay for ACL to completely disconnect (for intercom) before sending the connect request to GW. */
-#ifndef CTP_RECONNECT_DELAY
-#define CTP_RECONNECT_DELAY         5
-#endif
-
-/* How many times to retry connection when it has failed. */
-#ifndef CTP_RETRY_ON_CONN_ERR
-#define CTP_RETRY_ON_CONN_ERR       5
-#endif
-
-/******************************************************************************
-**
-** ICP
-**
-******************************************************************************/
-
-#ifndef ICP_INCLUDED
-#define ICP_INCLUDED                FALSE
-#endif
-
-/* The ICP default MTU. */
-#ifndef ICP_MTU_SIZE
-#define ICP_MTU_SIZE                100
-#endif
-
-/* The ICP security level. */
-#ifndef ICP_SECURITY_LEVEL
-#define ICP_SECURITY_LEVEL          BTM_SEC_NONE
-#endif
-
-/* The default service name for ICP. */
-#ifndef ICP_DEFAULT_SERVICE_NAME
-#define ICP_DEFAULT_SERVICE_NAME    "Intercom"
-#endif
-
-/* The flush timeout for L2CAP channels. */
-#ifndef ICP_FLUSH_TO
-#define ICP_FLUSH_TO                0xFFFF
-#endif
-
-/******************************************************************************
-**
-** SPP
-**
-******************************************************************************/
-
-#ifndef SPP_INCLUDED
-#define SPP_INCLUDED                FALSE
-#endif
-
-/* The SPP default MTU. */
-#ifndef SPP_DEFAULT_MTU
-#define SPP_DEFAULT_MTU             127
-#endif
-
-/* The interval, in seconds, that a client tries to reconnect to a service. */
-#ifndef SPP_RETRY_CONN_INTERVAL
-#define SPP_RETRY_CONN_INTERVAL     1
-#endif
-
-/* The SPP discoverable mode: limited or general. */
-#ifndef SPP_DISCOVERABLE_MODE
-#define SPP_DISCOVERABLE_MODE       BTM_GENERAL_DISCOVERABLE
-#endif
-
-/* The maximum number of inquiry results returned in by inquiry procedure. */
-#ifndef SPP_DEF_INQ_MAX_RESP
-#define SPP_DEF_INQ_MAX_RESP        10
-#endif
-
-/* The SPP discovery record size. */
-#ifndef SPP_DISC_REC_SIZE
-#define SPP_DISC_REC_SIZE           60
-#endif
-
-#ifndef SPP_MAX_RECS_PER_DEVICE
-#define SPP_MAX_RECS_PER_DEVICE     (SPP_DB_SIZE / SPP_DISC_REC_SIZE)
-#endif
-
-/* Inquiry duration in 1.28 second units. */
-#ifndef SPP_DEF_INQ_DURATION
-#define SPP_DEF_INQ_DURATION        9
-#endif
-
-/* keep the raw data received from SDP server in database. */
-#ifndef SDP_RAW_DATA_INCLUDED
-#define SDP_RAW_DATA_INCLUDED       FALSE
-#endif
-
-/* TRUE, to allow JV to create L2CAP connection on SDP PSM. */
-#ifndef SDP_FOR_JV_INCLUDED
-#define SDP_FOR_JV_INCLUDED         FALSE
-#endif
-
-/* Inquiry duration in 1.28 second units. */
-#ifndef SDP_DEBUG
-#define SDP_DEBUG                   TRUE
-#endif
-
-/******************************************************************************
-**
-** HSP2, HFP
-**
-******************************************************************************/
-
-#ifndef HSP2_INCLUDED
-#define HSP2_INCLUDED               FALSE
-#endif
-
-/* Include the ability to perform inquiry for peer devices. */
-#ifndef HSP2_INQUIRY_INCLUDED
-#define HSP2_INQUIRY_INCLUDED       TRUE
-#endif
-
-/* Include Audio Gateway specific code. */
-#ifndef HSP2_AG_INCLUDED
-#define HSP2_AG_INCLUDED            TRUE
-#endif
-
-/* Include Headset Specific Code. */
-#ifndef HSP2_HS_INCLUDED
-#define HSP2_HS_INCLUDED            TRUE
-#endif
-
-/* Include the ability to open an SCO connection for In-Band Ringing. */
-#ifndef HSP2_IB_RING_INCLUDED
-#define HSP2_IB_RING_INCLUDED       TRUE
-#endif
-
-/* Include the ability to repeat a ring. */
-#ifndef HSP2_AG_REPEAT_RING
-#define HSP2_AG_REPEAT_RING         TRUE
-#endif
-
-#ifndef HSP2_APP_CLOSES_ON_CKPD
-#define HSP2_APP_CLOSES_ON_CKPD     FALSE
-#endif
-
-
-/* Include the ability to park a connection. */
-#ifndef HSP2_PARK_INCLUDED
-#define HSP2_PARK_INCLUDED          TRUE
-#endif
-
-/* Include HSP State Machine debug trace messages. */
-#ifndef HSP2_FSM_DEBUG
-#define HSP2_FSM_DEBUG              TRUE
-#endif
-
-/* The Module's Inquiry Scan Window. */
-#ifndef HSP2_INQ_SCAN_WINDOW
-#define HSP2_INQ_SCAN_WINDOW        0
-#endif
-
-/* The Module's Inquiry Scan Interval. */
-#ifndef HSP2_INQ_SCAN_INTERVAL
-#define HSP2_INQ_SCAN_INTERVAL      0
-#endif
-
-/* The Module's Page Scan Interval. */
-#ifndef HSP2_PAGE_SCAN_INTERVAL
-#define HSP2_PAGE_SCAN_INTERVAL     0
-#endif
-
-/* The Module's Page Scan Window. */
-#ifndef HSP2_PAGE_SCAN_WINDOW
-#define HSP2_PAGE_SCAN_WINDOW       0
-#endif
-
-/* The Park Mode's Minimum Beacon Period. */
-#ifndef HSP2_BEACON_MIN_PERIOD
-#define HSP2_BEACON_MIN_PERIOD      450
-#endif
-
-/* The Park Mode's Maximum Beacon Period. */
-#ifndef HSP2_BEACON_MAX_PERIOD
-#define HSP2_BEACON_MAX_PERIOD      500
-#endif
-
-/* The duration of the inquiry in seconds. */
-#ifndef HSP2_INQ_DURATION
-#define HSP2_INQ_DURATION           4
-#endif
-
-/* Maximum number of peer responses during an inquiry. */
-#ifndef HSP2_INQ_MAX_NUM_RESPS
-#define HSP2_INQ_MAX_NUM_RESPS      3
-#endif
-
-/* Maximum number of times to retry an inquiry prior to failure. */
-#ifndef HSP2_MAX_INQ_RETRY
-#define HSP2_MAX_INQ_RETRY          6
-#endif
-
-/* Maximum number of times to retry an RFCOMM connection prior to failure. */
-#ifndef HSP2_MAX_CONN_RETRY
-#define HSP2_MAX_CONN_RETRY         3
-#endif
-
-/* If the connect request failed for authentication reasons, do not retry */
-#ifndef HSP2_NO_RETRY_ON_AUTH_FAIL
-#define HSP2_NO_RETRY_ON_AUTH_FAIL  TRUE
-#endif
-
-/* Maximum number of characters in an HSP2 device name. */
-#ifndef HSP2_MAX_NAME_LEN
-#define HSP2_MAX_NAME_LEN           32
-#endif
-
-/* The minimum speaker and/or microphone gain setting. */
-#ifndef HSP2_MIN_GAIN
-#define HSP2_MIN_GAIN               0
-#endif
-
-/* The maximum speaker and/or microphone setting. */
-#ifndef HSP2_MAX_GAIN
-#define HSP2_MAX_GAIN               15
-#endif
-
-/* The default value to send on an AT+CKPD. */
-#ifndef HSP2_KEYPRESS_DEFAULT
-#define HSP2_KEYPRESS_DEFAULT       200
-#endif
-
-/* Maximum amount a data that can be received per RFCOMM frame. */
-#ifndef HSP2_MAX_RFC_READ_LEN
-#define HSP2_MAX_RFC_READ_LEN       128
-#endif
-
-/* The time in seconds to wait for completion of a partial AT command or response from the peer. */
-#ifndef HSP2_AT_TO_INTERVAL
-#define HSP2_AT_TO_INTERVAL         30
-#endif
-
-/* The time to wait before repeating a ring to a peer Headset. */
-#ifndef HSP2_REPEAT_RING_TO
-#define HSP2_REPEAT_RING_TO         4
-#endif
-
-/* Time to wait for a response for an AT command */
-#ifndef HSP2_AT_RSP_TO
-#define HSP2_AT_RSP_TO              20
-#endif
-
-/* SCO packet type(s) to use (bitmask: see spec), 0 - device default (recommended) */
-#ifndef HSP2_SCO_PKT_TYPES
-#define HSP2_SCO_PKT_TYPES          ((UINT16)0x0000)
-#endif
-
-/* The default settings of the SCO voice link. */
-#ifndef HSP2_DEFAULT_VOICE_SETTINGS
-#define HSP2_DEFAULT_VOICE_SETTINGS (HCI_INP_CODING_LINEAR | HCI_INP_DATA_FMT_2S_COMPLEMENT | HCI_INP_SAMPLE_SIZE_16BIT | HCI_AIR_CODING_FORMAT_CVSD)
-#endif
-
-#ifndef HSP2_MAX_AT_CMD_LENGTH
-#define HSP2_MAX_AT_CMD_LENGTH       16
-#endif
-
-#ifndef HSP2_MAX_AT_VAL_LENGTH
-#if (defined(HFP_INCLUDED) && HFP_INCLUDED == TRUE)
-#define HSP2_MAX_AT_VAL_LENGTH       310
-#else
-#define HSP2_MAX_AT_VAL_LENGTH       5
-#endif
-#endif
-
-
-#ifndef HSP2_SDP_DB_SIZE
-#define HSP2_SDP_DB_SIZE             300
-#endif
-
-
-/******************************************************************************
-**
-** HFP
-**
-******************************************************************************/
-
-#ifndef HFP_INCLUDED
-#define HFP_INCLUDED                FALSE
-#endif
-
-/* Include Audio Gateway specific code. */
-#ifndef HFP_AG_INCLUDED
-#define HFP_AG_INCLUDED             TRUE
-#endif
-
-/* Include Hand Free Specific Code. */
-#ifndef HFP_HF_INCLUDED
-#define HFP_HF_INCLUDED             TRUE
-#endif
-
-/* Use AT interface instead of full blown API */
-#ifndef AT_INTERFACE
-#define AT_INTERFACE            FALSE
-#endif
-
-/* HFP Manages SCO establishement for various procedures */
-#ifndef HFP_SCO_MGMT_INCLUDED
-#define HFP_SCO_MGMT_INCLUDED             TRUE
-#endif
-
-/* CCAP compliant features and behavior desired */
-#ifndef CCAP_COMPLIANCE
-#define CCAP_COMPLIANCE             TRUE
-#endif
-
-/* Caller ID string, part of +CLIP result code */
-#ifndef HFP_MAX_CLIP_INFO
-#define HFP_MAX_CLIP_INFO             45
-#endif
-
-#ifndef HFP_RPT_PEER_INFO_INCLUDED
-#define HFP_RPT_PEER_INFO_INCLUDED  TRUE  /* Reporting of peer features enabled */
-#endif
-
-/******************************************************************************
-**
-** HID
-**
-******************************************************************************/
-
-/* HID Device Role Included */
-#ifndef HID_DEV_INCLUDED
-#define HID_DEV_INCLUDED             FALSE
-#endif
-
-#ifndef HID_DEV_PM_INCLUDED
-#define HID_DEV_PM_INCLUDED         TRUE
-#endif
-
-/* The HID Device is a virtual cable */
-#ifndef HID_DEV_VIRTUAL_CABLE
-#define HID_DEV_VIRTUAL_CABLE       TRUE
-#endif
-
-/* The HID device initiates the reconnections */
-#ifndef HID_DEV_RECONN_INITIATE
-#define HID_DEV_RECONN_INITIATE     TRUE
-#endif
-
-/* THe HID device is normally connectable */
-#ifndef HID_DEV_NORMALLY_CONN
-#define HID_DEV_NORMALLY_CONN       FALSE
-#endif
-
-/* The device is battery powered */
-#ifndef HID_DEV_BATTERY_POW
-#define HID_DEV_BATTERY_POW         TRUE
-#endif
-
-/* Device is capable of waking up the host */
-#ifndef HID_DEV_REMOTE_WAKE
-#define HID_DEV_REMOTE_WAKE         TRUE
-#endif
-
-/* Device needs host to close SDP channel after SDP is over */
-#ifndef HID_DEV_SDP_DISABLE
-#define HID_DEV_SDP_DISABLE         TRUE
-#endif
-
-#ifndef HID_DEV_MTU_SIZE
-#define HID_DEV_MTU_SIZE                 64
-#endif
-
-#ifndef HID_DEV_FLUSH_TO
-#define HID_DEV_FLUSH_TO                 0xffff
-#endif
-
-#ifndef HID_DEV_PAGE_SCAN_WIN
-#define HID_DEV_PAGE_SCAN_WIN       (0)
-#endif
-
-#ifndef HID_DEV_PAGE_SCAN_INT
-#define HID_DEV_PAGE_SCAN_INT       (0)
-#endif
-
-#ifndef HID_DEV_MAX_CONN_RETRY
-#define HID_DEV_MAX_CONN_RETRY      (15)
-#endif
-
-#ifndef HID_DEV_REPAGE_WIN
-#define HID_DEV_REPAGE_WIN          (1)
-#endif
-
-#ifndef HID_DEV_SVC_NAME
-#define HID_DEV_SVC_NAME            "HID"
-#endif
-
-#ifndef HID_DEV_SVC_DESCR
-#define HID_DEV_SVC_DESCR           "3-button mouse and keyboard"
-#endif
-
-#ifndef HID_DEV_PROVIDER_NAME
-#define HID_DEV_PROVIDER_NAME       "Widcomm"
-#endif
-
-#ifndef HID_DEV_REL_NUM
-#define HID_DEV_REL_NUM             0x0100
-#endif
-
-#ifndef HID_DEV_PARSER_VER
-#define HID_DEV_PARSER_VER          0x0111
-#endif
-
-#ifndef HID_DEV_SUBCLASS
-#define HID_DEV_SUBCLASS            COD_MINOR_POINTING
-#endif
-
-#ifndef HID_DEV_COUNTRY_CODE
-#define HID_DEV_COUNTRY_CODE        0x33
-#endif
-
-#ifndef HID_DEV_SUP_TOUT
-#define HID_DEV_SUP_TOUT            0x8000
-#endif
-
-#ifndef HID_DEV_NUM_LANGS
-#define HID_DEV_NUM_LANGS           1
-#endif
-
-#ifndef HID_DEV_INACT_TIMEOUT
-#define HID_DEV_INACT_TIMEOUT       60
-#endif
-
-#ifndef HID_DEV_BUSY_MODE_PARAMS
-#define HID_DEV_BUSY_MODE_PARAMS    { 320, 160, 10, 20, HCI_MODE_ACTIVE }
-#endif
-
-#ifndef HID_DEV_IDLE_MODE_PARAMS
-#define HID_DEV_IDLE_MODE_PARAMS    { 320, 160, 10, 20, HCI_MODE_SNIFF }
-#endif
-
-#ifndef HID_DEV_SUSP_MODE_PARAMS
-#define HID_DEV_SUSP_MODE_PARAMS    { 640, 320,  0,    0, HCI_MODE_PARK }
-#endif
-
-#ifndef HID_DEV_MAX_DESCRIPTOR_SIZE
-#define HID_DEV_MAX_DESCRIPTOR_SIZE      128     /* Max descriptor size          */
-#endif
-
-#ifndef HID_DEV_LANGUAGELIST
-#define HID_DEV_LANGUAGELIST             {0x35, 0x06, 0x09, 0x04, 0x09, 0x09, 0x01, 0x00}
-#endif
-
-#ifndef HID_DEV_LINK_SUPERVISION_TO
-#define HID_DEV_LINK_SUPERVISION_TO      0x8000
-#endif
-
-#ifndef HID_CONTROL_POOL_ID
-#define HID_CONTROL_POOL_ID             2
-#endif
-
-#ifndef HID_INTERRUPT_POOL_ID
-#define HID_INTERRUPT_POOL_ID           2
-#endif
-
-#ifndef UCD_HID_INCLUDED
-#define UCD_HID_INCLUDED    FALSE
-#endif
-
-#ifndef BRR_HID_INCLUDED
-#define BRR_HID_INCLUDED    FALSE
-#endif
-
-/*************************************************************************
-** Definitions for Both HID-Host & Device
-*/
-#ifndef HID_MAX_SVC_NAME_LEN
-#define HID_MAX_SVC_NAME_LEN  32
-#endif
-
-#ifndef HID_MAX_SVC_DESCR_LEN
-#define HID_MAX_SVC_DESCR_LEN 32
-#endif
-
-#ifndef HID_MAX_PROV_NAME_LEN
-#define HID_MAX_PROV_NAME_LEN 32
-#endif
-
-/*************************************************************************
-** Definitions for HID-Host
-*/
-#ifndef  HID_HOST_INCLUDED
-#define HID_HOST_INCLUDED           FALSE
-#endif
-
-#ifndef HID_HOST_MAX_DEVICES
-#define HID_HOST_MAX_DEVICES        7
-#endif
-
-#ifndef HID_HOST_MTU
-#define HID_HOST_MTU                640
-#endif
-
-#ifndef HID_HOST_FLUSH_TO
-#define HID_HOST_FLUSH_TO                 0xffff
-#endif
-
-#ifndef HID_HOST_MAX_CONN_RETRY
-#define HID_HOST_MAX_CONN_RETRY     (15)
-#endif
-
-#ifndef HID_HOST_REPAGE_WIN
-#define HID_HOST_REPAGE_WIN          (2)
-#endif
-
-
-/******************************************************************************
-**
-** DUN and FAX
-**
-******************************************************************************/
-
-#ifndef DUN_INCLUDED
-#define DUN_INCLUDED                FALSE
-#endif
-
-
-/******************************************************************************
-**
-** GOEP
-**
-******************************************************************************/
-
-#ifndef GOEP_INCLUDED
-#define GOEP_INCLUDED               FALSE
-#endif
-
-/* This is set to enable GOEP non-blocking file system access functions. */
-#ifndef GOEP_FS_INCLUDED
-#define GOEP_FS_INCLUDED        TRUE
-#endif
-
-/* GOEP authentication key size. */
-#ifndef GOEP_MAX_AUTH_KEY_SIZE
-#define GOEP_MAX_AUTH_KEY_SIZE      16
-#endif
-
-/* Maximum size of the realm authentication string. */
-#ifndef GOEP_MAX_AUTH_REALM_SIZE
-#define GOEP_MAX_AUTH_REALM_SIZE    16
-#endif
-
-/* Realm Character Set */
-#ifndef GOEP_REALM_CHARSET
-#define GOEP_REALM_CHARSET          0       /* ASCII */
-#endif
-
-/* This is set to the maximum length of path name allowed in the system (_MAX_PATH). */
-#ifndef GOEP_MAX_PATH_SIZE
-#define GOEP_MAX_PATH_SIZE          255
-#endif
-
-/* Specifies whether or not client's user id is required during obex authentication */
-#ifndef GOEP_SERVER_USERID_REQUIRED
-#define GOEP_SERVER_USERID_REQUIRED FALSE
-#endif
-
-/* This is set to the maximum length of file name allowed in the system (_MAX_FNAME). */
-#ifndef GOEP_MAX_FILE_SIZE
-#define GOEP_MAX_FILE_SIZE          128
-#endif
-
-/* Character used as path separator */
-#ifndef GOEP_PATH_SEPARATOR
-#define GOEP_PATH_SEPARATOR         ((char) 0x5c)   /* 0x2f ('/'), or 0x5c ('\') */
-#endif
-
-/******************************************************************************
-**
-** OPP
-**
-******************************************************************************/
-
-#ifndef OPP_INCLUDED
-#define OPP_INCLUDED                FALSE
-#endif
-
-/* This is set to enable OPP client capabilities. */
-#ifndef OPP_CLIENT_INCLUDED
-#define OPP_CLIENT_INCLUDED         FALSE
-#endif
-
-/* This is set to enable OPP server capabilities. */
-#ifndef OPP_SERVER_INCLUDED
-#define OPP_SERVER_INCLUDED         FALSE
-#endif
-
-/* if the optional formating functions are to be included or not */
-#ifndef OPP_FORMAT_INCLUDED
-#define OPP_FORMAT_INCLUDED         FALSE
-#endif
-
-/* Maximum number of client sessions allowed by server */
-#ifndef OPP_MAX_SRVR_SESS
-#define OPP_MAX_SRVR_SESS           3
-#endif
-
-/******************************************************************************
-**
-** FTP
-**
-******************************************************************************/
-
-#ifndef FTP_INCLUDED
-#define FTP_INCLUDED                FALSE
-#endif
-
-/* This is set to enable FTP client capabilities. */
-#ifndef FTP_CLIENT_INCLUDED
-#define FTP_CLIENT_INCLUDED         TRUE
-#endif
-
-/* This is set to enable FTP server capabilities. */
-#ifndef FTP_SERVER_INCLUDED
-#define FTP_SERVER_INCLUDED         TRUE
-#endif
-
-/******************************************************************************
-**
-** XML Parser
-**
-******************************************************************************/
-
-#ifndef XML_STACK_SIZE
-#define XML_STACK_SIZE             7
-#endif
-
-/******************************************************************************
-**
-** BPP Printer
-**
-******************************************************************************/
-#ifndef BPP_DEBUG
-#define BPP_DEBUG            FALSE
-#endif
-
-#ifndef BPP_INCLUDED
-#define BPP_INCLUDED                FALSE
-#endif
-
-#ifndef BPP_SND_INCLUDED
-#define BPP_SND_INCLUDED            FALSE
-#endif
-
-/* Maximum number of senders allowed to connect simultaneously
-** The maximum is 6 or (OBX_NUM_SERVERS / 2), whichever is smaller
-*/
-#ifndef BPP_PR_MAX_CON
-#define BPP_PR_MAX_CON         3
-#endif
-
-/* Service Name. maximum length: 248
-#ifndef BPP_SERVICE_NAME
-#define BPP_SERVICE_NAME            "Basic Printing"
-#endif
- */
-/* Document Format Supported. ASCII comma-delimited list of MIME type:version string
-#ifndef BPP_DOC_FORMAT_SUPPORTED
-#define BPP_DOC_FORMAT_SUPPORTED    "application/vnd.pwg-xhtml-print:1.0,application/vnd.hp-PCL:5E,application/PDF"
-#endif
-
-#ifndef BPP_DOC_FORMAT_SUPPORTED_LEN
-#define BPP_DOC_FORMAT_SUPPORTED_LEN    77
-#endif
- */
-/* Character repertoires.
-#ifndef BPP_CHARACTER_REPERTOIRES
-#define BPP_CHARACTER_REPERTOIRES {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}
-#endif
- */
-/* XHTML formats.
-#ifndef BPP_XHTML_PRINT_FORMATS
-#define BPP_XHTML_PRINT_FORMATS     "image/gif:89A,image/jpeg"
-#endif
-
-#ifndef BPP_XHTML_PRINT_FORMATS_LEN
-#define BPP_XHTML_PRINT_FORMATS_LEN 24
-#endif
- */
-/* Color supported.
-#ifndef BPP_COLOR_SUPORTED
-#define BPP_COLOR_SUPORTED          FALSE
-#endif
- */
-/* 1284 ID string. First 2 bytes are the length.
-#ifndef BPP_1284ID
-#define BPP_1284ID                  "\x00\x48MANUFACTURER:ACME Manufacturing;COMMAND SET:PCL,MPL;MODEL:LaserBeam \?;"
-#endif
-
-#ifndef BPP_1284ID_LEN
-#define BPP_1284ID_LEN              72
-#endif
- */
-/* Printer name.
-#ifndef BPP_PRINTER_NAME
-#define BPP_PRINTER_NAME            "My Printer"
-#endif
-
-#ifndef BPP_PRINTER_NAME_LEN
-#define BPP_PRINTER_NAME_LEN        10
-#endif
- */
-
-/* Printer location.
-#ifndef BPP_PRINTER_LOCATION
-#define BPP_PRINTER_LOCATION        "Hotel Lobby"
-#endif
-
-#ifndef BPP_PRINTER_LOCATION_LEN
-#define BPP_PRINTER_LOCATION_LEN    11
-#endif
- */
-/* Duplex printing supported.
-#ifndef BPP_DUPLEX_SUPPORTED
-#define BPP_DUPLEX_SUPPORTED        TRUE
-#endif
- */
-
-/* Media types supported.
-#ifndef BPP_MEDIA_TYPES_SUPPORTED
-#define BPP_MEDIA_TYPES_SUPPORTED   "stationary,continuous-long,photographic-high-gloss,cardstock"
-#endif
-
-#ifndef BPP_MEDIA_TYPES_SUPPORTED_LEN
-#define BPP_MEDIA_TYPES_SUPPORTED_LEN   60
-#endif
- */
-/* Maximum media with supported.
-#ifndef BPP_MAX_MEDIA_WIDTH
-#define BPP_MAX_MEDIA_WIDTH         205
-#endif
- */
-/* Maximum media length supported.
-#ifndef BPP_MAX_MEDIA_LENGTH
-#define BPP_MAX_MEDIA_LENGTH        285
-#endif
- */
-/* the maximum string len for the media size of medium loaded */
-#ifndef BPP_MEDIA_SIZE_LEN
-#define BPP_MEDIA_SIZE_LEN          33
-#endif
-
-/* Debug Trace the SOAP object, if TRUE */
-#ifndef BPP_TRACE_XML
-#define BPP_TRACE_XML               TRUE
-#endif
-
-/* in case that the SOAP object does not all come in one OBEX packet,
- * this size of data may be kept in the BPP control block for continuing parsing.
- * The maximum is the size of the biggest GKI buffer (GKI_MAX_BUF_SIZE) */
-#ifndef BPP_SOAP_KEEP_SIZE
-#define BPP_SOAP_KEEP_SIZE          200
-#endif
-
-
-/******************************************************************************
-**
-** BIP
-**
-******************************************************************************/
-#ifndef BIP_INCLUDED
-#define BIP_INCLUDED                FALSE
-#endif
-
-/* TRUE to include imaging initiator */
-#ifndef BIP_INITR_INCLUDED
-#define BIP_INITR_INCLUDED          FALSE
-#endif
-
-/* TRUE to include imaging responder */
-#ifndef BIP_RSPDR_INCLUDED
-#define BIP_RSPDR_INCLUDED          FALSE
-#endif
-
-/* TRUE to include image push feature */
-#ifndef BIP_PUSH_INCLUDED
-#define BIP_PUSH_INCLUDED           TRUE
-#endif
-
-/* TRUE to include image pull feature */
-#ifndef BIP_PULL_INCLUDED
-#define BIP_PULL_INCLUDED           TRUE
-#endif
-
-/* TRUE to include advanced image printing feature */
-#ifndef BIP_PRINTING_INCLUDED
-#define BIP_PRINTING_INCLUDED       TRUE
-#endif
-
-/* TRUE to include automatic archive feature */
-#ifndef BIP_ARCHIVE_INCLUDED
-#define BIP_ARCHIVE_INCLUDED        TRUE
-#endif
-
-/* TRUE to include remote camera feature */
-#ifndef BIP_CAMERA_INCLUDED
-#define BIP_CAMERA_INCLUDED         TRUE
-#endif
-
-/* TRUE to include remote display feature */
-#ifndef BIP_DISPLAY_INCLUDED
-#define BIP_DISPLAY_INCLUDED        TRUE
-#endif
-
-/* TRUE to include sanity check code for API functions */
-#ifndef BIP_SANITY_CHECKS
-#define BIP_SANITY_CHECKS           TRUE
-#endif
-
-/* TRUE to show the received XML object in trace for conformance tests */
-#ifndef BIP_TRACE_XML
-#define BIP_TRACE_XML               TRUE
-#endif
-
-/* in case that the received XML object is not complete, the XML parser state machine needs
- * to keep a copy of the data from the last '<'
- * This macro specifies the maximun amount of data for this purpose */
-#ifndef BIP_XML_CARRY_OVER_LEN
-#define BIP_XML_CARRY_OVER_LEN      100
-#endif
-
-/* minimum 4, maximum is 255. The value should be set to the maximum size of encoding string + 1. JPEG2000.
- * If vendor specific format is supported, it might be bigger than 9 */
-#ifndef BIP_IMG_ENCODE_SIZE
-#define BIP_IMG_ENCODE_SIZE         9
-#endif
-
-/* MIME type: text/plain */
-#ifndef BIP_TYPE_SIZE
-#define BIP_TYPE_SIZE               20
-#endif
-
-/* example: iso-8895-1 */
-#ifndef BIP_CHARSET_SIZE
-#define BIP_CHARSET_SIZE            10
-#endif
-
-/* friendly name */
-#ifndef BIP_FNAME_SIZE
-#define BIP_FNAME_SIZE              20
-#endif
-
-/* service name */
-#ifndef BIP_SNAME_SIZE
-#define BIP_SNAME_SIZE              60
-#endif
-
-/* temporary storage file name(for file system access, may include path) */
-#ifndef BIP_TEMP_NAME_SIZE
-#define BIP_TEMP_NAME_SIZE          200
-#endif
-
-/* image file name */
-#ifndef BIP_IMG_NAME_SIZE
-#define BIP_IMG_NAME_SIZE           200
-#endif
-
-/* attachment file name */
-#ifndef BIP_ATT_NAME_SIZE
-#define BIP_ATT_NAME_SIZE           200
-#endif
-
-/* object (image, attachment, thumbnail) file name (may be used for file system) */
-#ifndef BIP_OBJ_NAME_SIZE
-#define BIP_OBJ_NAME_SIZE           200
-#endif
-
-
-
-/******************************************************************************
-**
-** HCRP
-**
-******************************************************************************/
-
-#ifndef HCRP_INCLUDED
-#define HCRP_INCLUDED               FALSE
-#endif
-
-/* This is set to enable server. */
-#ifndef HCRP_SERVER_INCLUDED
-#define HCRP_SERVER_INCLUDED       FALSE
-#endif
-
-/* This is set to enable client. */
-#ifndef HCRP_CLIENT_INCLUDED
-#define HCRP_CLIENT_INCLUDED        FALSE
-#endif
-
-/* TRUE enables the notification option of the profile. */
-#ifndef HCRP_NOTIFICATION_INCLUDED
-#define HCRP_NOTIFICATION_INCLUDED  TRUE
-#endif
-
-/* TRUE enables the vendor specific option of the profile. */
-#ifndef HCRP_VENDOR_SPEC_INCLUDED
-#define HCRP_VENDOR_SPEC_INCLUDED   TRUE
-#endif
-
-/* TRUE enables state machine traces. */
-#ifndef HCRP_FSM_DEBUG
-#define HCRP_FSM_DEBUG              FALSE
-#endif
-
-/* TRUE enables protocol message traces. */
-#ifndef HCRP_PROTO_DEBUG
-#define HCRP_PROTO_DEBUG            FALSE
-#endif
-
-/* Maximum length used to store the service name (Minimum 1). */
-#ifndef HCRP_MAX_SERVICE_NAME_LEN
-#define HCRP_MAX_SERVICE_NAME_LEN   32
-#endif
-
-/* Maximum length used to store the device name (Minimum 1). */
-#ifndef HCRP_MAX_DEVICE_NAME_LEN
-#define HCRP_MAX_DEVICE_NAME_LEN    32
-#endif
-
-/* Maximum length of device location (Minimum 1) */
-#ifndef HCRP_MAX_DEVICE_LOC_LEN
-#define HCRP_MAX_DEVICE_LOC_LEN     32
-#endif
-
-/* Maximum length used to store the friendly name (Minimum 1). */
-#ifndef HCRP_MAX_FRIENDLY_NAME_LEN
-#define HCRP_MAX_FRIENDLY_NAME_LEN  32
-#endif
-
-/* Maximum length used to store the 1284 id string (Minimum 2 byte length field). */
-#ifndef HCRP_MAX_SDP_1284_ID_LEN
-#define HCRP_MAX_SDP_1284_ID_LEN    128
-#endif
-
-/* Maximum length for parameters to be processed for vendor specific commands. */
-#ifndef HCRP_MAX_VEND_SPEC_LEN
-#define HCRP_MAX_VEND_SPEC_LEN      4
-#endif
-
-/* Number of seconds to wait for 2nd GAP to open. */
-#ifndef HCRP_OPEN_CHAN_TOUT
-#define HCRP_OPEN_CHAN_TOUT         5
-#endif
-
-/* Number of seconds to wait for 2nd GAP to close. */
-#ifndef HCRP_CLOSE_CHAN_TOUT
-#define HCRP_CLOSE_CHAN_TOUT        3
-#endif
-
-/* Number of seconds to wait for the application to respond to a protocol request. */
-#ifndef HCRP_APPL_RSP_TOUT
-#define HCRP_APPL_RSP_TOUT          5
-#endif
-
-/* Number of seconds to wait for the peer device to respond to a protocol request. */
-#ifndef HCRP_CMD_RSP_TOUT
-#define HCRP_CMD_RSP_TOUT           7
-#endif
-
-/* Number of seconds between subsequent credit requests to the server when the send watermark has been exceeded. */
-#ifndef HCRP_CREDIT_REQ_UPDATES
-#define HCRP_CREDIT_REQ_UPDATES     1
-#endif
-
-/* Maximum number of results to return in a HCRP_FindServices search. */
-#ifndef HCRP_MAX_SEARCH_RESULTS
-#define HCRP_MAX_SEARCH_RESULTS     1
-#endif
-
-/* Maximum number of bytes to be reserved for searching for the client's notification record. */
-#ifndef HCRP_MAX_NOTIF_DISC_BUF
-#define HCRP_MAX_NOTIF_DISC_BUF     300
-#endif
-
-/* Maximum number of clients the server will allow to be registered for notifications. */
-#ifndef HCRP_MAX_NOTIF_CLIENTS
-#define HCRP_MAX_NOTIF_CLIENTS      3
-#endif
-
-/* Spec says minimum of two notification retries. */
-#ifndef HCRP_NOTIF_NUM_RETRIES
-#define HCRP_NOTIF_NUM_RETRIES      4
-#endif
-
-/*************************************************************************
-** Definitions for Multi-Client Server HCRP
-** Note: Many of the above HCRP definitions are also used
-** Maximum number of clients allowed to connect simultaneously
-** Must be less than ((GAP_MAX_CONNECTIONS - 1) / 2)
-*/
-#ifndef HCRPM_MAX_CLIENTS
-#define HCRPM_MAX_CLIENTS           3
-#endif
-
-
-/******************************************************************************
-**
-** PAN
-**
-******************************************************************************/
-
-#ifndef PAN_INCLUDED
-#define PAN_INCLUDED                FALSE
-#endif
-
-
-/******************************************************************************
-**
-** SAP
-**
-******************************************************************************/
-
-#ifndef SAP_SERVER_INCLUDED
-#define SAP_SERVER_INCLUDED         FALSE
-#endif
-
-
-/*************************************************************************
- * A2DP Definitions
- */
-#ifndef A2D_INCLUDED
-#define A2D_INCLUDED            FALSE
-#endif
-
-/* TRUE to include SBC utility functions */
-#ifndef A2D_SBC_INCLUDED
-#define A2D_SBC_INCLUDED        A2D_INCLUDED
-#endif
-
-/* TRUE to include MPEG-1,2 (mp3) utility functions */
-#ifndef A2D_M12_INCLUDED
-#define A2D_M12_INCLUDED        A2D_INCLUDED
-#endif
-
-/* TRUE to include MPEG-2,4 (aac) utility functions */
-#ifndef A2D_M24_INCLUDED
-#define A2D_M24_INCLUDED        A2D_INCLUDED
-#endif
-
-/*************************************************************************
- * VDP Definitions
- */
-#ifndef VDP_INCLUDED
-#define VDP_INCLUDED            FALSE
-#endif
-
-/******************************************************************************
-**
-** AVCTP
-**
-******************************************************************************/
-
-#ifndef AVCT_INCLUDED
-#define AVCT_INCLUDED               FALSE
-#endif
-
-/* Number of simultaneous ACL links to different peer devices. */
-#ifndef AVCT_NUM_LINKS
-#define AVCT_NUM_LINKS              2
-#endif
-
-/* Number of simultaneous AVCTP connections. */
-#ifndef AVCT_NUM_CONN
-#define AVCT_NUM_CONN               3
-#endif
-
-/* TRUE to support the browsing channel. */
-#ifndef AVCT_BROWSE_INCLUDED
-#define AVCT_BROWSE_INCLUDED        TRUE
-#endif
-
-/* Pool ID where to reassemble the SDU.
-   This Pool allows buffers to be used that are larger than
-   the L2CAP_MAX_MTU. */
-#ifndef AVCT_BR_USER_RX_POOL_ID
-#define AVCT_BR_USER_RX_POOL_ID     HCI_ACL_POOL_ID
-#endif
-
-/* Pool ID where to hold the SDU.
-   This Pool allows buffers to be used that are larger than
-   the L2CAP_MAX_MTU. */
-#ifndef AVCT_BR_USER_TX_POOL_ID
-#define AVCT_BR_USER_TX_POOL_ID     HCI_ACL_POOL_ID
-#endif
-
-/*
-GKI Buffer Pool ID used to hold MPS segments during SDU reassembly
-*/
-#ifndef AVCT_BR_FCR_RX_POOL_ID
-#define AVCT_BR_FCR_RX_POOL_ID      HCI_ACL_POOL_ID
-#endif
-
-/*
-GKI Buffer Pool ID used to hold MPS segments used in (re)transmissions.
-L2CAP_DEFAULT_ERM_POOL_ID is specified to use the HCI ACL data pool.
-Note:  This pool needs to have enough buffers to hold two times the window size negotiated
- in the tL2CAP_FCR_OPTIONS (2 * tx_win_size)  to allow for retransmissions.
- The size of each buffer must be able to hold the maximum MPS segment size passed in
- tL2CAP_FCR_OPTIONS plus BT_HDR (8) + HCI preamble (4) + L2CAP_MIN_OFFSET (11 - as of BT 2.1 + EDR Spec).
-*/
-#ifndef AVCT_BR_FCR_TX_POOL_ID
-#define AVCT_BR_FCR_TX_POOL_ID      HCI_ACL_POOL_ID
-#endif
-
-/* AVCTP Browsing channel FCR Option:
-Size of the transmission window when using enhanced retransmission mode. Not used
-in basic and streaming modes. Range: 1 - 63
-*/
-#ifndef AVCT_BR_FCR_OPT_TX_WINDOW_SIZE
-#define AVCT_BR_FCR_OPT_TX_WINDOW_SIZE      10
-#endif
-
-/* AVCTP Browsing channel FCR Option:
-Number of transmission attempts for a single I-Frame before taking
-Down the connection. Used In ERTM mode only. Value is Ignored in basic and
-Streaming modes.
-Range: 0, 1-0xFF
-0 - infinite retransmissions
-1 - single transmission
-*/
-#ifndef AVCT_BR_FCR_OPT_MAX_TX_B4_DISCNT
-#define AVCT_BR_FCR_OPT_MAX_TX_B4_DISCNT    20
-#endif
-
-/* AVCTP Browsing channel FCR Option: Retransmission Timeout
-The AVRCP specification set a value in the range of 300 - 2000 ms
-Timeout (in msecs) to detect Lost I-Frames. Only used in Enhanced retransmission mode.
-Range: Minimum 2000 (2 secs) when supporting PBF.
- */
-#ifndef AVCT_BR_FCR_OPT_RETX_TOUT
-#define AVCT_BR_FCR_OPT_RETX_TOUT           2000
-#endif
-
-/* AVCTP Browsing channel FCR Option: Monitor Timeout
-The AVRCP specification set a value in the range of 300 - 2000 ms
-Timeout (in msecs) to detect Lost S-Frames. Only used in Enhanced retransmission mode.
-Range: Minimum 12000 (12 secs) when supporting PBF.
-*/
-#ifndef AVCT_BR_FCR_OPT_MONITOR_TOUT
-#define AVCT_BR_FCR_OPT_MONITOR_TOUT        12000
-#endif
-
-/******************************************************************************
-**
-** AVRCP
-**
-******************************************************************************/
-
-#ifndef AVRC_INCLUDED
-#define AVRC_INCLUDED               FALSE
-#endif
-
-/* TRUE to support AVRCP 1.3 - Metadata. */
-#ifndef AVRC_METADATA_INCLUDED
-#define AVRC_METADATA_INCLUDED      TRUE
-#endif
-
-/* TRUE to support AVRCP 1.4 - Advanced Control. */
-#ifndef AVRC_ADV_CTRL_INCLUDED
-#define AVRC_ADV_CTRL_INCLUDED      TRUE
-#endif
-
-/******************************************************************************
-**
-** MCAP
-**
-******************************************************************************/
-#ifndef MCA_INCLUDED
-#define MCA_INCLUDED                FALSE
-#endif
-
-/* TRUE to support Clock Synchronization OpCodes */
-#ifndef MCA_SYNC_INCLUDED
-#define MCA_SYNC_INCLUDED           FALSE
-#endif
-
-/* The MTU size for the L2CAP configuration on control channel. 48 is the minimal */
-#ifndef MCA_CTRL_MTU
-#define MCA_CTRL_MTU    60
-#endif
-
-/* The maximum number of registered MCAP instances. */
-#ifndef MCA_NUM_REGS
-#define MCA_NUM_REGS    3
-#endif
-
-/* The maximum number of control channels (to difference devices) per registered MCAP instances. */
-#ifndef MCA_NUM_LINKS
-#define MCA_NUM_LINKS   3
-#endif
-
-/* The maximum number of MDEP (including HDP echo) per registered MCAP instances. */
-#ifndef MCA_NUM_DEPS
-#define MCA_NUM_DEPS    3
-#endif
-
-/* The maximum number of MDL link per control channel. */
-#ifndef MCA_NUM_MDLS
-#define MCA_NUM_MDLS    4
-#endif
-
-/* Pool ID where to reassemble the SDU. */
-#ifndef MCA_USER_RX_POOL_ID
-#define MCA_USER_RX_POOL_ID     HCI_ACL_POOL_ID
-#endif
-
-/* Pool ID where to hold the SDU. */
-#ifndef MCA_USER_TX_POOL_ID
-#define MCA_USER_TX_POOL_ID     HCI_ACL_POOL_ID
-#endif
-
-/*
-GKI Buffer Pool ID used to hold MPS segments during SDU reassembly
-*/
-#ifndef MCA_FCR_RX_POOL_ID
-#define MCA_FCR_RX_POOL_ID      HCI_ACL_POOL_ID
-#endif
-
-/*
-GKI Buffer Pool ID used to hold MPS segments used in (re)transmissions.
-L2CAP_DEFAULT_ERM_POOL_ID is specified to use the HCI ACL data pool.
-Note:  This pool needs to have enough buffers to hold two times the window size negotiated
- in the tL2CAP_FCR_OPTIONS (2 * tx_win_size)  to allow for retransmissions.
- The size of each buffer must be able to hold the maximum MPS segment size passed in
- tL2CAP_FCR_OPTIONS plus BT_HDR (8) + HCI preamble (4) + L2CAP_MIN_OFFSET (11 - as of BT 2.1 + EDR Spec).
-*/
-#ifndef MCA_FCR_TX_POOL_ID
-#define MCA_FCR_TX_POOL_ID      HCI_ACL_POOL_ID
-#endif
-
-/* MCAP control channel FCR Option:
-Size of the transmission window when using enhanced retransmission mode.
-1 is defined by HDP specification for control channel.
-*/
-#ifndef MCA_FCR_OPT_TX_WINDOW_SIZE
-#define MCA_FCR_OPT_TX_WINDOW_SIZE      1
-#endif
-
-/* MCAP control channel FCR Option:
-Number of transmission attempts for a single I-Frame before taking
-Down the connection. Used In ERTM mode only. Value is Ignored in basic and
-Streaming modes.
-Range: 0, 1-0xFF
-0 - infinite retransmissions
-1 - single transmission
-*/
-#ifndef MCA_FCR_OPT_MAX_TX_B4_DISCNT
-#define MCA_FCR_OPT_MAX_TX_B4_DISCNT    20
-#endif
-
-/* MCAP control channel FCR Option: Retransmission Timeout
-The AVRCP specification set a value in the range of 300 - 2000 ms
-Timeout (in msecs) to detect Lost I-Frames. Only used in Enhanced retransmission mode.
-Range: Minimum 2000 (2 secs) when supporting PBF.
- */
-#ifndef MCA_FCR_OPT_RETX_TOUT
-#define MCA_FCR_OPT_RETX_TOUT           2000
-#endif
-
-/* MCAP control channel FCR Option: Monitor Timeout
-The AVRCP specification set a value in the range of 300 - 2000 ms
-Timeout (in msecs) to detect Lost S-Frames. Only used in Enhanced retransmission mode.
-Range: Minimum 12000 (12 secs) when supporting PBF.
-*/
-#ifndef MCA_FCR_OPT_MONITOR_TOUT
-#define MCA_FCR_OPT_MONITOR_TOUT        12000
-#endif
-
-/* MCAP control channel FCR Option: Maximum PDU payload size.
-The maximum number of payload octets that the local device can receive in a single PDU.
-*/
-#ifndef MCA_FCR_OPT_MPS_SIZE
-#define MCA_FCR_OPT_MPS_SIZE            1000
-#endif
-
-/* Shared transport */
-#ifndef NFC_SHARED_TRANSPORT_ENABLED
-#define NFC_SHARED_TRANSPORT_ENABLED    FALSE
-#endif
-
-/******************************************************************************
-**
-** SER
-**
-******************************************************************************/
-
-#ifndef SER_INCLUDED
-#define SER_INCLUDED                FALSE
-#endif
-
-/* Task which runs the serial application. */
-#ifndef SER_TASK
-#define SER_TASK                    BTE_APPL_TASK
-#endif
-
-/* Mailbox used by serial application. */
-#ifndef SER_MBOX
-#define SER_MBOX                    TASK_MBOX_1
-#endif
-
-/* Mailbox mask. */
-#ifndef SER_MBOX_MASK
-#define SER_MBOX_MASK               TASK_MBOX_1_EVT_MASK
-#endif
-
-/* TX path application event. */
-#ifndef SER_TX_PATH_APPL_EVT
-#define SER_TX_PATH_APPL_EVT        EVENT_MASK(APPL_EVT_3)
-#endif
-
-/* RX path application event. */
-#ifndef SER_RX_PATH_APPL_EVT
-#define SER_RX_PATH_APPL_EVT        EVENT_MASK(APPL_EVT_4)
-#endif
-
-/******************************************************************************
-**
-** HCI Services
-**
-******************************************************************************/
-/* Event mask reserved for handling HCIS events HCISU_TASK */
-#ifndef HCISU_EVT_MASK
-#define HCISU_EVT_MASK              EVENT_MASK(APPL_EVT_0)
-#endif
-
-/* MBox reserved for handling HCIS events HCISU_TASK */
-#ifndef HCISU_MBOX
-#define HCISU_MBOX                  TASK_MBOX_2
-#endif
-
-/* MBox event mask reserved for handling HCIS events HCISU_TASK */
-#ifndef HCISU_MBOX_EVT_MASK
-#define HCISU_MBOX_EVT_MASK         TASK_MBOX_2_EVT_MASK
-#endif
-
-/* Timer reserved for handling HCIS events HCISU_TASK */
-#ifndef HCISU_TIMER
-#define HCISU_TIMER                 TIMER_2
-#endif
-
-/* Timer event mask reserved for handling HCIS events HCISU_TASK */
-#ifndef HCISU_TIMER_EVT_MASK
-#define HCISU_TIMER_EVT_MASK        TIMER_2_EVT_MASK
-#endif
-
-/******************************************************************************
-**
-** HCI UART
-**
-******************************************************************************/
-#ifndef BAUDRATE_UPDATE_ENCODED_INCLUDED
-#define BAUDRATE_UPDATE_ENCODED_INCLUDED    FALSE
-#endif
-
-/******************************************************************************
-**
-** HCI Services (H5 3 wired uart), H4 plus SLIP enabled
-**
-******************************************************************************/
-#ifndef SLIP_INCLUDED
-#define SLIP_INCLUDED                   TRUE
-#endif
-
-#ifndef SLIP_STATIS_INCLUDED
-#define SLIP_STATIS_INCLUDED            TRUE
-#endif
-
-#ifndef SLIP_SW_FLOW_CTRL
-#define SLIP_SW_FLOW_CTRL               TRUE
-#endif
-
-#ifndef BT_TRACE_SLIP
-#define BT_TRACE_SLIP                   FALSE
-#endif
-
-#ifndef SLIP_HOST_SLIDING_WINDOW_SIZE
-#define SLIP_HOST_SLIDING_WINDOW_SIZE   7
-#endif
-
-#ifndef SLIP_MAX_RETRANSMIT
-#define SLIP_MAX_RETRANSMIT             10
-#endif
-
-/* time (in ms) interval between WAKEUP messages */
-#ifndef SLIP_WAKEUP_INTERVAL
-#define SLIP_WAKEUP_INTERVAL            10
-#endif
-
-/* max trial to send WAKEUP messages up to 255 */
-#ifndef SLIP_MAX_WAKEUP_TRIAL
-#define SLIP_MAX_WAKEUP_TRIAL           10
-#endif
-
-/*
-The H5 work around sequence will be:
-
-1. controller sends CONFIG with configuration field. (This is not spec compliance.
-   Controller shall not have configuration field. This initiates work around.)
-2. host ignore the configuration field.
-3. Host sends CONFIG with configuration field.
-4. controller reponse CONFIG_RESPONSE with configuration field. This shall be the
-   final configuration both FW and STACK use. (spec compliance).
-5. Host copied the configuration field over and sent CONFIG_RESPONSE with this
-   configuration field (workaround)
-*/
-
-#ifndef SLIP_CONFIG_FIELD_WORK_AROUND_INCLUDED
-#define SLIP_CONFIG_FIELD_WORK_AROUND_INCLUDED       TRUE
-#endif
-
-/******************************************************************************
-**
-** Sleep Mode (Low Power Mode)
-**
-******************************************************************************/
-#ifndef HCILP_INCLUDED
-#define HCILP_INCLUDED                  TRUE
-#endif
-
-/* sleep mode
-
-    0: disable
-    1: UART with Host wake/BT wake out of band signals
-    4: H4IBSS, UART with in band signal without Host/BT wake
-    9: H5 with in band signal of SLIP without Host/BT wake
-*/
-#ifndef HCILP_SLEEP_MODE
-#define HCILP_SLEEP_MODE                (0)
-#endif
-
-/* Host Stack Idle Threshold in 300ms or 25ms, it depends on controller
-
-  In sleep mode 1, this is the number of firmware loops executed with no activity
-    before the Host wake line is deasserted. Activity includes HCI traffic excluding
-    certain sleep mode commands and the presence of SCO connections if the
-    "Allow Host Sleep During SCO" flag is not set to 1. Each count of this
-    parameter is roughly equivalent to 300ms or 25ms.
-
-  Not applicable for sleep mode 4(H4IBSS) and 9(H5)
-*/
-#ifndef HCILP_IDLE_THRESHOLD
-#define HCILP_IDLE_THRESHOLD             (1)
-#endif
-
-/* Host Controller Idle Threshold in 300ms or 25ms, it depends on controller
-
-    This is the number of firmware loops executed with no activity before the HC is
-    considered idle. Depending on the mode, HC may then attempt to sleep.
-    Activity includes HCI traffic excluding certain sleep mode commands and
-    the presence of ACL/SCO connections.
-
-  Not applicable for sleep mode 4(H4IBSS)
-*/
-#ifndef HCILP_HC_IDLE_THRESHOLD
-#define HCILP_HC_IDLE_THRESHOLD          (1)
-#endif
-
-/* GPIO for BT_WAKE signal */
-/* Not applicable for sleep mode 4(H4IBSS) and 9(H5) */
-#ifndef HCILP_BT_WAKE_GPIO
-#define HCILP_BT_WAKE_GPIO              UPIO_GENERAL1
-#endif
-
-/* GPIO for HOST_WAKE signal */
-/* Not applicable for sleep mode 4(H4IBSS) and 9(H5) */
-#ifndef HCILP_HOST_WAKE_GPIO
-#define HCILP_HOST_WAKE_GPIO            UPIO_GENERAL2
-#endif
-
-/* BT_WAKE Polarity - 0=Active Low, 1= Active High */
-/* Not applicable for sleep mode 4(H4IBSS) and 9(H5) */
-#ifndef HCILP_BT_WAKE_POLARITY
-#define HCILP_BT_WAKE_POLARITY          0
-#endif
-
-/* HOST_WAKE Polarity - 0=Active Low, 1= Active High */
-/* Not applicable for sleep mode 4(H4IBSS) and 9(H5) */
-#ifndef HCILP_HOST_WAKE_POLARITY
-#define HCILP_HOST_WAKE_POLARITY        0
-#endif
-
-/* HCILP_ALLOW_HOST_SLEEP_DURING_SCO
-
-    When this flag is set to 0, the host is not allowed to sleep while
-    an SCO is active. In sleep mode 1, the device will keep the host
-    wake line asserted while an SCO is active.
-    When this flag is set to 1, the host can sleep while an SCO is active.
-    This flag should only be set to 1 if SCO traffic is directed to the PCM interface.
-
-    Not applicable for sleep mode 4(H4IBSS) and 9(H5)
-*/
-#ifndef HCILP_ALLOW_HOST_SLEEP_DURING_SCO
-#define HCILP_ALLOW_HOST_SLEEP_DURING_SCO       1
-#endif
-
-/* HCILP_COMBINE_SLEEP_MODE_AND_LPM
-
-    In Mode 0, always set byte 7 to 0. In sleep mode 1, device always
-    requires permission to sleep between scans / periodic inquiries regardless
-    of the setting of this byte. In sleep mode 1, if byte is set, device must
-    have "permission" to sleep during the low power modes of sniff, hold, and park.
-    If byte is not set, device can sleep without permission during these modes.
-    Permission to sleep in Mode 1 is obtained if the BT_WAKE signal is not asserted.
-
-    Not applicable for sleep mode 4(H4IBSS) and 9(H5)
-*/
-#ifndef HCILP_COMBINE_SLEEP_MODE_AND_LPM
-#define HCILP_COMBINE_SLEEP_MODE_AND_LPM        1
-#endif
-
-/* HCILP_ENABLE_UART_TXD_TRI_STATE
-
-    When set to 0, the device will not tristate its UART TX line before going to sleep.
-    When set to 1, the device will tristate its UART TX line before going to sleep.
-
-    Not applicable for sleep mode 4(H4IBSS) and 9(H5)
-*/
-#ifndef HCILP_ENABLE_UART_TXD_TRI_STATE
-#define HCILP_ENABLE_UART_TXD_TRI_STATE        0
-#endif
-
-/* HCILP_PULSED_HOST_WAKE
-
-    Not applicable for sleep mode 4(H4IBSS) and 9(H5)
-*/
-#ifndef HCILP_PULSED_HOST_WAKE
-#define HCILP_PULSED_HOST_WAKE        0
-#endif
-
-/* HCILP_SLEEP_GUARD_TIME
-
-    Only for sleep mode 4(H4IBSS)
-    Time in 12.5ms between starting to monitor controller's CTS and raising its RTS
-*/
-#ifndef HCILP_SLEEP_GUARD_TIME
-#define HCILP_SLEEP_GUARD_TIME                 5
-#endif
-
-/* HCILP_WAKEUP_GUARD_TIME
-
-    Only for sleep mode 4(H4IBSS)
-    Time in 12.5ms between starting to monitor controller's CTS and lowering its RTS
-*/
-#ifndef HCILP_WAKEUP_GUARD_TIME
-#define HCILP_WAKEUP_GUARD_TIME                 5
-#endif
-
-/* HCILP_TXD_CONFIG
-
-    Only for sleep mode 4(H4IBSS)
-    0: controller's TXD stays low in sleep mode
-    1: controller's TXD stays high in sleep mode (default)
-*/
-#ifndef HCILP_TXD_CONFIG
-#define HCILP_TXD_CONFIG                        1
-#endif
-
-/* HCILP_BT_WAKE_IDLE_TIMEOUT
-
-    host's idle time in ms before initiating sleep procedure
-*/
-#ifndef HCILP_BT_WAKE_IDLE_TIMEOUT
-#define HCILP_BT_WAKE_IDLE_TIMEOUT              50
-#endif
-
-#ifndef H4IBSS_INCLUDED
-#define H4IBSS_INCLUDED                 FALSE  /* !!!! Android must use FALSE */
-#endif
-
-/* display H4IBSS state and event in text */
-#ifndef H4IBSS_DEBUG
-#define H4IBSS_DEBUG                    TRUE
-#endif
-
-/* time interval before going into sleep after having sent or received SLEEP_REQ_ACK */
-/* Valid range is 20 - 50 ms */
-#ifndef H4IBSS_SLEEP_GUARD_TIME
-#define H4IBSS_SLEEP_GUARD_TIME         (40)
-#endif
-
-/* timeout(msec) to wait for response of sleep request */
-#ifndef H4IBSS_SLEEP_REQ_RESP_TIME
-#define H4IBSS_SLEEP_REQ_RESP_TIME      (50)
-#endif
-
-/******************************************************************************
-**
-** RPC
-**
-******************************************************************************/
-
-#ifndef RPC_INCLUDED
-#define RPC_INCLUDED                FALSE
-#endif
-
-/* RPCT task mailbox ID for messages coming from rpcgen code. */
-#ifndef RPCT_MBOX
-#define RPCT_MBOX                   TASK_MBOX_0
-#endif
-
-/* RPCT task event for mailbox. */
-#ifndef RPCT_RPC_MBOX_EVT
-#define RPCT_RPC_MBOX_EVT           TASK_MBOX_0_EVT_MASK
-#endif
-
-/* RPCT task event from driver indicating RX data is ready. */
-#ifndef RPCT_RX_READY_EVT
-#define RPCT_RX_READY_EVT           APPL_EVT_0
-#endif
-
-/* RPCT task event from driver indicating data TX is done. */
-#ifndef RPCT_TX_DONE_EVT
-#define RPCT_TX_DONE_EVT            APPL_EVT_1
-#endif
-
-/* RPCT task event indicating data is in the circular buffer. */
-#ifndef RPCT_UCBUF_EVT
-#define RPCT_UCBUF_EVT              APPL_EVT_2
-#endif
-
-/* Task ID of RPCGEN task. */
-#ifndef RPCGEN_TASK
-#define RPCGEN_TASK                 BTU_TASK
-#endif
-
-/* RPCGEN task event for messages coming from RPCT. */
-#ifndef RPCGEN_MSG_EVT
-#define RPCGEN_MSG_EVT              TASK_MBOX_1_EVT_MASK
-#endif
-
-#ifndef RPCGEN_MSG_MBOX
-#define RPCGEN_MSG_MBOX             TASK_MBOX_1
-#endif
-
-/* Size of circular buffer used to store diagnostic messages. */
-#ifndef RPCT_UCBUF_SIZE
-#define RPCT_UCBUF_SIZE             2000
-#endif
-
-/******************************************************************************
-**
-** SAP - Sample ICP and HSP applications
-**
-******************************************************************************/
-
-#ifndef SAP_INCLUDED
-#define SAP_INCLUDED                FALSE
-#endif
-
-#ifndef ICA_INCLUDED
-#define ICA_INCLUDED                FALSE
-#endif
-
-#ifndef HSA_HS_INCLUDED
-#define HSA_HS_INCLUDED             FALSE
-#endif
-
-#ifndef HSA_AG_INCLUDED
-#define HSA_AG_INCLUDED             FALSE
-#endif
-
-#ifndef MMI_INCLUDED
-#define MMI_INCLUDED                FALSE
-#endif
-
-/* MMI task event from driver indicating RX data is ready. */
-#ifndef MMI_RX_READY_EVT
-#define MMI_RX_READY_EVT           APPL_EVT_0
-#endif
-
-/******************************************************************************
-**
-** APPL - Application Task
-**
-******************************************************************************/
-/* When TRUE indicates that an application task is to be run */
-#ifndef APPL_INCLUDED
-#define APPL_INCLUDED                FALSE
-#endif
-
-/* When TRUE remote terminal code included (RPC MUST be included) */
-#ifndef RSI_INCLUDED
-#define RSI_INCLUDED                FALSE
-#endif
-
-
-
-#define L2CAP_FEATURE_REQ_ID      73
-#define L2CAP_FEATURE_RSP_ID     173
-
-
-#define L2CAP_ENHANCED_FEATURES   0
-
-
-
-/* Use gki_delay for patch ram */
-#ifndef BRCM_USE_DELAY
-#if ( SLIP_INCLUDED == TRUE )
-/* H5 need to be initialized after sending download mini driver HCI command */
-#define BRCM_USE_DELAY           FALSE
-#else
-#define BRCM_USE_DELAY           TRUE
-#endif
-#endif
-
-/******************************************************************************
-**
-** BTA
-**
-******************************************************************************/
-/* BTA EIR canned UUID list (default is dynamic) */
-#ifndef BTA_EIR_CANNED_UUID_LIST
-#define BTA_EIR_CANNED_UUID_LIST FALSE
-#endif
-
-/* Number of supported customer UUID in EIR */
-#ifndef BTA_EIR_SERVER_NUM_CUSTOM_UUID
-#define BTA_EIR_SERVER_NUM_CUSTOM_UUID     8
-#endif
-
-/* MIP A2DP Feature enabled */
-#ifndef BTA_MIP_INCLUDED
-#define BTA_MIP_INCLUDED   FALSE
-#endif
-
-/* No 3D sync profile debug by default */
-#ifndef BTA_3DS_DEBUG
-#define BTA_3DS_DEBUG FALSE
-#endif
-/******************************************************************************
-**
-** BTE
-**
-******************************************************************************/
-#ifndef BTE_PLATFORM_IDLE
-#define BTE_PLATFORM_IDLE
-#endif
-
-#ifndef BTE_IDLE_TASK_INCLUDED
-#define BTE_IDLE_TASK_INCLUDED TRUE
-#endif
-
-#ifndef BTE_PLATFORM_INITHW
-#define BTE_PLATFORM_INITHW
-#endif
-
-#ifndef BTE_BTA_CODE_INCLUDED
-#define BTE_BTA_CODE_INCLUDED FALSE
-#endif
-
-
-/******************************************************************************
-**
-** BTTRC
-**
-******************************************************************************/
-/* Whether to parse and display traces-> Platform specific implementation */
-#ifndef BTTRC_DISP
-#define BTTRC_DISP        BTTRC_DispOnInsight
-#endif
-
-/******************************************************************************
-**
-** Tracing:  Include trace header file here.
-**
-******************************************************************************/
-
-#include "bt_trace.h"
-
-#endif /* BT_TARGET_H */
diff --git a/src/include/btu_api.h b/src/include/btu_api.h
deleted file mode 100644
index 83c7d87..0000000
--- a/src/include/btu_api.h
+++ /dev/null
@@ -1,20 +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 BTU_API_H
-#define BTU_API_H
-#endif /* BTU_APU_H */
diff --git a/src/include/config.h b/src/include/config.h
index 44aeaaa..40185cc 100644
--- a/src/include/config.h
+++ b/src/include/config.h
@@ -57,6 +57,7 @@
 #define NAME_SCREEN_OFF_POWER_STATE "SCREEN_OFF_POWER_STATE"
 #define NAME_PREINIT_DSP_CFG "PREINIT_DSP_CFG"
 #define NAME_DTA_START_CFG "DTA_START_CFG"
+#define NAME_NXP_NFC_CHIP "NXP_NFC_CHIP"
 #if (NXP_EXTNS != TRUE)
 #define NAME_TRANSPORT_DRIVER "TRANSPORT_DRIVER"
 #define NAME_POWER_CONTROL_DRIVER "POWER_CONTROL_DRIVER"
@@ -100,10 +101,9 @@
 #define NAME_HOST_LISTEN_TECH_MASK "HOST_LISTEN_TECH_MASK"
 #define NAME_DEFAULT_FELICA_CLT_ROUTE "DEFAULT_FELICA_CLT_ROUTE"
 #define NAME_DEFAULT_FELICA_CLT_PWR_STATE "DEFAULT_FELICA_CLT_PWR_STATE"
+#define NAME_NXP_ESE_LISTEN_TECH_MASK "NXP_ESE_LISTEN_TECH_MASK"
 #endif
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 #define NAME_DEFAULT_OFFHOST_ROUTE "DEFAULT_OFFHOST_ROUTE"
-#endif
 #define NAME_SNOOZE_MODE_CFG "SNOOZE_MODE_CFG"
 #define NAME_NFA_DM_DISC_DURATION_POLL "NFA_DM_DISC_DURATION_POLL"
 #define NAME_SPD_DEBUG "SPD_DEBUG"
@@ -131,6 +131,8 @@
 #define NAME_NFA_POLL_BAIL_OUT_MODE "NFA_POLL_BAIL_OUT_MODE"
 #define NAME_NFA_PROPRIETARY_CFG "NFA_PROPRIETARY_CFG"
 #if (NXP_EXTNS == TRUE)
+#define NAME_NXP_ESE_LISTEN_TECH_MASK   "NXP_ESE_LISTEN_TECH_MASK"
+#define NAME_NXP_WM_MAX_WTX_COUNT       "NXP_WM_MAX_WTX_COUNT"
 #define NAME_NXP_NFCC_STANDBY_TIMEOUT "NXP_NFCC_STANDBY_TIMEOUT"
 #define NAME_NXP_CP_TIMEOUT "NXP_CP_TIMEOUT"
 #define NAME_NXP_CORE_SCRN_OFF_AUTONOMOUS_ENABLE \
@@ -138,23 +140,13 @@
 #define NAME_NXP_ALLOW_WIRED_IN_MIFARE_DESFIRE_CLT \
   "NXP_ALLOW_WIRED_IN_MIFARE_DESFIRE_CLT"
 #define NAME_NXP_NFCC_RF_FIELD_EVENT_TIMEOUT "NXP_NFCC_RF_FIELD_EVENT_TIMEOUT"
-#if (NXP_NFCC_ROUTING_BLOCK_BIT == true)
-#define NAME_NXP_PROP_BLACKLIST_ROUTING "NXP_PROP_BLACKLIST_ROUTING"
-#endif
-#if (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_TIMEOUT)
+#define NAME_NFA_BLOCK_ROUTE "NFA_BLOCK_ROUTE"
 #define NAME_NXP_MIFARE_DESFIRE_DISABLE "NXP_MIFARE_DESFIRE_DISABLE"
-#endif
-#if (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true)
 #define NAME_NXP_DUAL_UICC_ENABLE "NXP_DUAL_UICC_ENABLE"
-#endif
 #define NAME_NXP_DEFAULT_NFCEE_TIMEOUT "NXP_DEFAULT_NFCEE_TIMEOUT"
 #define NAME_NXP_DEFAULT_NFCEE_DISC_TIMEOUT "NXP_DEFAULT_NFCEE_DISC_TIMEOUT"
-#if (NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true)
 #define NAME_NXP_NFCC_PASSIVE_LISTEN_TIMEOUT "NXP_NFCC_PASSIVE_LISTEN_TIMEOUT"
-#endif
-#if (NXP_ESE_JCOP_DWNLD_PROTECTION == true)
 #define NAME_OS_DOWNLOAD_TIMEOUT_VALUE "OS_DOWNLOAD_TIMEOUT_VALUE"
-#endif
 #define NAME_NXP_HCEF_CMD_RSP_TIMEOUT_VALUE "NXP_HCEF_CMD_RSP_TIMEOUT_VALUE"
 #endif
 
@@ -162,7 +154,6 @@
 
 // default configuration
 #define default_transport "/dev/bcm2079x"
-#define default_storage_location "/data/nfc"
 
 struct tUART_CONFIG {
   int m_iBaudrate;  // 115200
diff --git a/src/include/dyn_mem.h b/src/include/dyn_mem.h
deleted file mode 100644
index 9e605d5..0000000
--- a/src/include/dyn_mem.h
+++ /dev/null
@@ -1,194 +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
-
-#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.
-*/
-#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/src/include/hcidefs.h b/src/include/hcidefs.h
deleted file mode 100644
index 1cb8e49..0000000
--- a/src/include/hcidefs.h
+++ /dev/null
@@ -1,2606 +0,0 @@
-/******************************************************************************
- *
- *  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.
- *  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))
-
-/*
-**  Definitions 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)
-/* 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_RECEIVE_SYNC_TRAIN
-
-/* 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_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)
-#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)
-
-#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)
-
-
-/* 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_READ_SYNC_TRAIN_PARAM
-
-
-/* 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_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_LOCAL_SUPPORTED_CODECS
-
-
-/* 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)
-
-/* 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_SET_TRIGGERED_CLOCK_CAPTURE
-
-/* 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
-
-
-/*
-**  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
-#define HCI_SET_TRIGGERED_CLOCK_CAPTURE_EVT 0x4E
-
-
-
-/* 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
-
-/* 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_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
-*/
-#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
-
-/* 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
-
-/*
-** 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
-*/
-
-/* 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)
-*/
-#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
-#define HCI_EIR_3D_SYNC_TYPE                 BT_EIR_3D_SYNC_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
-
-/*  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
-*/
-#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_COMMAND   1
-#define HCIT_TYPE_ACL_DATA  2
-#define HCIT_TYPE_SCO_DATA  3
-#define HCIT_TYPE_EVENT     4
-#define HCIT_TYPE_LM_DIAG   7
-#define HCIT_TYPE_NFC       16
-
-#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_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)
-/*
-** 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
-
-/* 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
-
-#define HCI_FEATURES_KNOWN(x) ((x[0] | x[1] | x[2] | x[3] | x[4] | x[5] | x[6] | x[7]) != 0)
-
-/*
-**   LMP features encoding - page 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)
-
-#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)
-
-#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
-#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)
-
-#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
-#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)
-
-/*
-**   LMP 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)
-
-#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)
-
-/*
-**   LMP 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)
-
-/*
-**   LE features encoding - page 0 (the only page for now)
-*/
-#define HCI_LE_FEATURE_LE_ENCRYPTION_MASK       0x01
-#define HCI_LE_FEATURE_LE_ENCRYPTION_OFF        0
-#define HCI_LE_ENCRYPTION_SUPPORTED(x) ((x)[HCI_LE_FEATURE_LE_ENCRYPTION_OFF] & HCI_LE_FEATURE_LE_ENCRYPTION_MASK)
-
-
-/*
-**   Local Supported Commands encoding
-*/
-#define HCI_NUM_SUPP_COMMANDS_BYTES           64
-
-/* Supported Commands Byte 0 */
-#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)
-
-/* Supported Commands Byte 1 */
-#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)
-
-/* Supported Commands Byte 2 */
-#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)
-
-/* Supported Commands Byte 3, bits 2-7 reserved */
-#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)
-
-/* Supported Commands Byte 4, bit 0 reserved */
-#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)
-
-/* Supported Commands Byte 5 */
-#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)
-
-/* Supported Commands Byte 6 */
-#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)
-
-/* Supported Commands Byte 7 */
-#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)
-
-/* Supported Commands Byte 8, bits 4-5 are reserved in the specs but are successfully used in our host/controller */
-#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)
-
-/* Supported Commands Byte 9 */
-#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)
-
-/* Supported Commands Byte 10 */
-#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)
-
-/* Supported Commands Byte 11 */
-#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)
-
-/* Supported Commands Byte 12, bits 2-3 reserved */
-#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)
-
-/* Supported Commands Byte 13, bits 4-7 reserved */
-#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)
-
-/* Supported Commands Byte 14, bits 0-2 and 4 reserved */
-#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)
-
-/* Supported Commands Byte 15 */
-#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)
-
-/* Supported Commands Byte 16, bits 6-7 reserved */
-#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)
-
-/* Supported Commands Byte 17, bit 3 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)
-
-/* Supported Commands Byte 18, bits 4-7 reserved */
-#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)
-
-/* Supported Commands Byte 19 */
-#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, bits 0-1 and 5-7 reserved */
-#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, bits 3-4 reserved */
-#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, bits 1, 7 reserved */
-#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)
-
-#define HCI_SUPP_COMMANDS_READ_LE_HOST_SUPPORT_MASK   0x20
-#define HCI_SUPP_COMMANDS_READ_LE_HOST_SUPPORT_OFF    24
-#define HCI_READ_LE_HOST_SUPPORT_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_READ_LE_HOST_SUPPORT_OFF] & HCI_SUPP_COMMANDS_READ_LE_HOST_SUPPORT_MASK)
-
-#define HCI_SUPP_COMMANDS_WRITE_LE_HOST_SUPPORT_MASK   0x20
-#define HCI_SUPP_COMMANDS_WRITE_LE_HOST_SUPPORT_OFF    24
-#define HCI_WRITE_LE_HOST_SUPPORT_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_WRITE_LE_HOST_SUPPORT_OFF] & HCI_SUPP_COMMANDS_WRITE_LE_HOST_SUPPORT_MASK)
-
-/* Supported Commands Byte 25, bit 3 reserved */
-#define HCI_SUPP_COMMANDS_LE_SET_EVENT_MASK_MASK   0x01
-#define HCI_SUPP_COMMANDS_LE_SET_EVENT_MASK_OFF    25
-#define HCI_LE_SET_EVENT_MASK_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_SET_EVENT_MASK_OFF] & HCI_SUPP_COMMANDS_LE_SET_EVENT_MASK_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_READ_BUFFER_SIZE_MASK   0x02
-#define HCI_SUPP_COMMANDS_LE_READ_BUFFER_SIZE_OFF    25
-#define HCI_LE_READ_BUFFER_SIZE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_READ_BUFFER_SIZE_OFF] & HCI_SUPP_COMMANDS_LE_READ_BUFFER_SIZE_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_READ_LOCAL_SUPPORTED_FEATURES_MASK   0x04
-#define HCI_SUPP_COMMANDS_LE_READ_LOCAL_SUPPORTED_FEATURES_OFF    25
-#define HCI_LE_READ_LOCAL_SUPPORTED_FEATURES_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_READ_LOCAL_SUPPORTED_FEATURES_OFF] & HCI_SUPP_COMMANDS_LE_READ_LOCAL_SUPPORTED_FEATURES_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_SET_RANDOM_ADDRESS_MASK   0x10
-#define HCI_SUPP_COMMANDS_LE_SET_RANDOM_ADDRESS_OFF    25
-#define HCI_LE_SET_RANDOM_ADDRESS_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_SET_RANDOM_ADDRESS_OFF] & HCI_SUPP_COMMANDS_LE_SET_RANDOM_ADDRESS_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_SET_ADVERTISING_PARAMETERS_MASK   0x20
-#define HCI_SUPP_COMMANDS_LE_SET_ADVERTISING_PARAMETERS_OFF    25
-#define HCI_LE_SET_ADVERTISING_PARAMETERS_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_SET_ADVERTISING_PARAMETERS_OFF] & HCI_SUPP_COMMANDS_LE_SET_ADVERTISING_PARAMETERS_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_READ_ADVERTISING_CHANNEL_TX_POWER_MASK   0x40
-#define HCI_SUPP_COMMANDS_LE_READ_ADVERTISING_CHANNEL_TX_POWER_OFF    25
-#define HCI_LE_READ_ADVERTISING_CHANNEL_TX_POWER_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_READ_ADVERTISING_CHANNEL_TX_POWER_OFF] & HCI_SUPP_COMMANDS_LE_READ_ADVERTISING_CHANNEL_TX_POWER_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_SET_ADVERTISING_DATA_MASK   0x80
-#define HCI_SUPP_COMMANDS_LE_SET_ADVERTISING_DATA_OFF    25
-#define HCI_LE_SET_ADVERTISING_DATA_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_SET_ADVERTISING_DATA_OFF] & HCI_SUPP_COMMANDS_LE_SET_ADVERTISING_DATA_MASK)
-
-/* Supported Commands Byte 26 */
-#define HCI_SUPP_COMMANDS_LE_SET_SCAN_RESPONSE_DATA_MASK   0x01
-#define HCI_SUPP_COMMANDS_LE_SET_SCAN_RESPONSE_DATA_OFF    26
-#define HCI_LE_SET_SCAN_RESPONSE_DATA_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_SET_SCAN_RESPONSE_DATA_OFF] & HCI_SUPP_COMMANDS_LE_SET_SCAN_RESPONSE_DATA_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_SET_ADVERTISE_ENABLE_MASK   0x02
-#define HCI_SUPP_COMMANDS_LE_SET_ADVERTISE_ENABLE_OFF    26
-#define HCI_LE_SET_ADVERTISE_ENABLE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_SET_ADVERTISE_ENABLE_OFF] & HCI_SUPP_COMMANDS_LE_SET_ADVERTISE_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_SET_SCAN_PARAMETERS_MASK   0x04
-#define HCI_SUPP_COMMANDS_LE_SET_SCAN_PARAMETERS_OFF    26
-#define HCI_LE_SET_SCAN_PARAMETERS_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_SET_SCAN_PARAMETERS_OFF] & HCI_SUPP_COMMANDS_LE_SET_SCAN_PARAMETERS_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_SET_SCAN_ENABLE_MASK   0x08
-#define HCI_SUPP_COMMANDS_LE_SET_SCAN_ENABLE_OFF    26
-#define HCI_LE_SET_SCAN_ENABLE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_SET_SCAN_ENABLE_OFF] & HCI_SUPP_COMMANDS_LE_SET_SCAN_ENABLE_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_CREATE_CONNECTION_MASK   0x10
-#define HCI_SUPP_COMMANDS_LE_CREATE_CONNECTION_OFF    26
-#define HCI_LE_CREATE_CONNECTION_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_CREATE_CONNECTION_OFF] & HCI_SUPP_COMMANDS_LE_CREATE_CONNECTION_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_CREATE_CONNECTION_CANCEL_MASK   0x20
-#define HCI_SUPP_COMMANDS_LE_CREATE_CONNECTION_CANCEL_OFF    26
-#define HCI_LE_CREATE_CONNECTION_CANCEL_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_CREATE_CONNECTION_CANCEL_OFF] & HCI_SUPP_COMMANDS_LE_CREATE_CONNECTION_CANCEL_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_READ_WHITE_LIST_SIZE_MASK   0x40
-#define HCI_SUPP_COMMANDS_LE_READ_WHITE_LIST_SIZE_OFF    26
-#define HCI_LE_READ_WHITE_LIST_SIZE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_READ_WHITE_LIST_SIZE_OFF] & HCI_SUPP_COMMANDS_LE_READ_WHITE_LIST_SIZE_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_CLEAR_WHITE_LIST_MASK   0x80
-#define HCI_SUPP_COMMANDS_LE_CLEAR_WHITE_LIST_OFF    26
-#define HCI_LE_CLEAR_WHITE_LIST_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_CLEAR_WHITE_LIST_OFF] & HCI_SUPP_COMMANDS_LE_CLEAR_WHITE_LIST_MASK)
-
-/* Supported Commands Byte 27 */
-#define HCI_SUPP_COMMANDS_LE_ADD_DEVICE_TO_WHITE_LIST_MASK   0x01
-#define HCI_SUPP_COMMANDS_LE_ADD_DEVICE_TO_WHITE_LIST_OFF    27
-#define HCI_LE_ADD_DEVICE_TO_WHITE_LIST_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_ADD_DEVICE_TO_WHITE_LIST_OFF] & HCI_SUPP_COMMANDS_LE_ADD_DEVICE_TO_WHITE_LIST_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_REMOVE_DEVICE_FROM_WHITE_LIST_MASK   0x02
-#define HCI_SUPP_COMMANDS_LE_REMOVE_DEVICE_FROM_WHITE_LIST_OFF    27
-#define HCI_LE_REMOVE_DEVICE_FROM_WHITE_LIST_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_REMOVE_DEVICE_FROM_WHITE_LIST_OFF] & HCI_SUPP_COMMANDS_LE_REMOVE_DEVICE_FROM_WHITE_LIST_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_CONNECTION_UPDATE_MASK   0x04
-#define HCI_SUPP_COMMANDS_LE_CONNECTION_UPDATE_OFF    27
-#define HCI_LE_CONNECTION_UPDATE_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_CONNECTION_UPDATE_OFF] & HCI_SUPP_COMMANDS_LE_CONNECTION_UPDATE_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_SET_HOST_CHANNEL_CLASSIFICATION_MASK   0x08
-#define HCI_SUPP_COMMANDS_LE_SET_HOST_CHANNEL_CLASSIFICATION_OFF    27
-#define HCI_LE_SET_HOST_CHANNEL_CLASSIFICATION_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_SET_HOST_CHANNEL_CLASSIFICATION_OFF] & HCI_SUPP_COMMANDS_LE_SET_HOST_CHANNEL_CLASSIFICATION_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_READ_CHANNEL_MAP_MASK   0x10
-#define HCI_SUPP_COMMANDS_LE_READ_CHANNEL_MAP_OFF    27
-#define HCI_LE_READ_CHANNEL_MAP_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_READ_CHANNEL_MAP_OFF] & HCI_SUPP_COMMANDS_LE_READ_CHANNEL_MAP_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_READ_REMOTE_USED_FEATURES_MASK   0x20
-#define HCI_SUPP_COMMANDS_LE_READ_REMOTE_USED_FEATURES_OFF    27
-#define HCI_LE_READ_REMOTE_USED_FEATURES_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_READ_REMOTE_USED_FEATURES_OFF] & HCI_SUPP_COMMANDS_LE_READ_REMOTE_USED_FEATURES_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_ENCRYPT_MASK   0x40
-#define HCI_SUPP_COMMANDS_LE_ENCRYPT_OFF    27
-#define HCI_LE_ENCRYPT_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_ENCRYPT_OFF] & HCI_SUPP_COMMANDS_LE_ENCRYPT_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_RAND_MASK   0x80
-#define HCI_SUPP_COMMANDS_LE_RAND_OFF    27
-#define HCI_LE_RAND_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_RAND_OFF] & HCI_SUPP_COMMANDS_LE_RAND_MASK)
-
-
-/* Supported Commands Byte 28, bit 7 reserved */
-#define HCI_SUPP_COMMANDS_LE_START_ENCRYPTION_MASK   0x01
-#define HCI_SUPP_COMMANDS_LE_START_ENCRYPTION_OFF    28
-#define HCI_LE_START_ENCRYPTION_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_START_ENCRYPTION_OFF] & HCI_SUPP_COMMANDS_LE_START_ENCRYPTION_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_LONG_TERM_KEY_REQUEST_REPLY_MASK   0x02
-#define HCI_SUPP_COMMANDS_LE_LONG_TERM_KEY_REQUEST_REPLY_OFF    28
-#define HCI_LE_LONG_TERM_KEY_REQUEST_REPLY_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_LONG_TERM_KEY_REQUEST_REPLY_OFF] & HCI_SUPP_COMMANDS_LE_LONG_TERM_KEY_REQUEST_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY_MASK   0x04
-#define HCI_SUPP_COMMANDS_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY_OFF    28
-#define HCI_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY_OFF] & HCI_SUPP_COMMANDS_LE_LONG_TERM_KEY_REQUEST_NEGATIVE_REPLY_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_READ_SUPPORTED_STATES_MASK   0x08
-#define HCI_SUPP_COMMANDS_LE_READ_SUPPORTED_STATES_OFF    28
-#define HCI_LE_READ_SUPPORTED_STATES_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_READ_SUPPORTED_STATES_OFF] & HCI_SUPP_COMMANDS_LE_READ_SUPPORTED_STATES_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_RECEIVER_TEST_MASK   0x10
-#define HCI_SUPP_COMMANDS_LE_RECEIVER_TEST_OFF    28
-#define HCI_LE_RECEIVER_TEST_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_RECEIVER_TEST_OFF] & HCI_SUPP_COMMANDS_LE_RECEIVER_TEST_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_TRANSMITTER_TEST_MASK   0x20
-#define HCI_SUPP_COMMANDS_LE_TRANSMITTER_TEST_OFF    28
-#define HCI_LE_TRANSMITTER_TEST_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_TRANSMITTER_TEST_OFF] & HCI_SUPP_COMMANDS_LE_TRANSMITTER_TEST_MASK)
-
-#define HCI_SUPP_COMMANDS_LE_TEST_END_MASK   0x40
-#define HCI_SUPP_COMMANDS_LE_TEST_END_OFF    28
-#define HCI_LE_TEST_END_SUPPORTED(x)   ((x)[HCI_SUPP_COMMANDS_LE_TEST_END_OFF] & HCI_SUPP_COMMANDS_LE_TEST_END_MASK)
-
-/* Supported Commands Byte 29, bits 0-2 reserved */
-#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 */
-#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
-*/
-#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
-
-#endif
diff --git a/src/include/nfc_target.h b/src/include/nfc_target.h
index 48e92ed..c7ca261 100644
--- a/src/include/nfc_target.h
+++ b/src/include/nfc_target.h
@@ -51,11 +51,6 @@
 #include "bt_trace.h"
 #endif
 
-#if (NXP_EXTNS == TRUE)
-#include <NXP_NFCC_Features.h>
-#include <NXP_ESE_Features.h>
-#endif
-
 #ifndef USERIAL_DEBUG
 #define USERIAL_DEBUG false
 #endif
@@ -677,19 +672,15 @@
 #endif
 
 /* Maximum number of AID entries per target_handle  */
-#ifndef NFA_EE_MAX_AID_ENTRIES
 #if (NXP_EXTNS == TRUE)
 #define NFA_EE_MIN_AID_SIZE (5)
 #define NFA_EE_MIN_AID_ENTRY_SIZE (NFA_EE_MIN_AID_SIZE + 4)
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
+
 #define NFA_EE_MAX_AID_ENTRIES (50)
 #else
-#define NFA_EE_MAX_AID_ENTRIES (20)
-#endif
-#else
 #define NFA_EE_MAX_AID_ENTRIES (10)
 #endif
-#endif
+
 #define NFA_EE_MAX_APDU_PATTERN_ENTRIES (5)
 /* Maximum number of callback functions can be registered through
  * NFA_EeRegister() */
diff --git a/src/nfa/ce/nfa_ce_act.c b/src/nfa/ce/nfa_ce_act.c
old mode 100755
new mode 100644
index 9b4882b..8b9c563
--- a/src/nfa/ce/nfa_ce_act.c
+++ b/src/nfa/ce/nfa_ce_act.c
@@ -387,10 +387,11 @@
   /* For NCI draft 22+, the polarity of NFC_PMID_LF_T3T_FLAGS2 is flipped */
   t3t_flags2_mask = ~t3t_flags2_mask;
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  NFA_TRACE_DEBUG0(" LF_T3T_FLAGS swap for NCI specification compliance");
-  t3t_flags2_mask = ((t3t_flags2_mask >> 8) | (t3t_flags2_mask << 8));
-#endif
+
+  if(nfcFL.chipType != pn547C2) {
+      NFA_TRACE_DEBUG0(" LF_T3T_FLAGS swap for NCI specification compliance");
+      t3t_flags2_mask = ((t3t_flags2_mask >> 8) | (t3t_flags2_mask << 8));
+  }
 
   UINT8_TO_STREAM(p_params, NFC_PMID_LF_T3T_FLAGS2);      /* type */
   UINT8_TO_STREAM(p_params, NCI_PARAM_LEN_LF_T3T_FLAGS2); /* length */
@@ -891,8 +892,8 @@
          sizeof(tNFC_ACTIVATE_DEVT));
 
 #if (NXP_EXTNS == TRUE)
-  if (p_cb->activation_params.intf_param.type == NCI_INTERFACE_UICC_DIRECT ||
-      p_cb->activation_params.intf_param.type == NCI_INTERFACE_ESE_DIRECT) {
+  if (p_cb->activation_params.intf_param.type == nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT ||
+      p_cb->activation_params.intf_param.type == nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT) {
     memcpy(&(conn_evt.activated.activate_ntf), &p_cb->activation_params,
            sizeof(tNFC_ACTIVATE_DEVT));
     for (i = 0; i < NFA_CE_LISTEN_INFO_IDX_INVALID; i++) {
diff --git a/src/nfa/dm/nfa_dm_act.c b/src/nfa/dm/nfa_dm_act.c
index 5672dd5..f49cd30 100644
--- a/src/nfa/dm/nfa_dm_act.c
+++ b/src/nfa/dm/nfa_dm_act.c
@@ -338,7 +338,7 @@
 
   switch (event) {
     case NFC_ENABLE_REVT: /* 0  Enable event */
-
+        nfa_ee_max_ee_cfg = nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED;
       /* NFC stack enabled. Enable nfa sub-systems */
       if (p_data->enable.status == NFC_STATUS_OK) {
         if (nfa_ee_max_ee_cfg != 0) {
@@ -421,23 +421,27 @@
     case NFC_EE_ACTION_REVT:      /* EE Action notification */
     case NFC_NFCEE_MODE_SET_REVT: /* NFCEE Mode Set response */
 #if (NXP_EXTNS == TRUE)
-    case NFC_NFCEE_MODE_SET_INFO:
-#if (NXP_WIRED_MODE_STANDBY == true)
     case NFC_NFCEE_PWR_LNK_CTRL_REVT:
+        if(!nfcFL.eseFL._WIRED_MODE_STANDBY) {
+            break;
+        }
+    case NFC_NFCEE_MODE_SET_INFO:
 #endif
-#endif
+    case NFC_NFCEE_STATUS_REVT:
     case NFC_SET_ROUTING_REVT: /* Configure Routing response */
       nfa_ee_proc_evt(event, p_data);
       break;
 
     case NFC_EE_DISCOVER_REQ_REVT: /* EE Discover Req notification */
-#if ((NFC_NXP_ESE == TRUE) && (NXP_EXTNS == TRUE) && \
-     (NXP_ESE_ETSI_READER_ENABLE != true) &&         \
-     (NXP_ESE_DWP_SPI_SYNC_ENABLE != true))
-      if (nfa_dm_is_active() &&
-          (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_DISCOVERY)) {
-        nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_IDLE);
-      }
+#if(NXP_EXTNS == TRUE)
+        if((nfcFL.nfcNxpEse) &&
+                (!nfcFL.eseFL._ESE_ETSI_READER_ENABLE) &&
+                (!nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE)) {
+            if (nfa_dm_is_active() &&
+                    (nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_DISCOVERY)) {
+                nfa_dm_rf_deactivate(NFA_DEACTIVATE_TYPE_IDLE);
+            }
+        }
 #endif
       nfa_ee_proc_evt(event, p_data);
       break;
@@ -505,27 +509,27 @@
 
     case NFC_NFCC_TIMEOUT_REVT:
 #if (NXP_EXTNS == TRUE)
-      if (p_data->status == NFC_STATUS_FAILED) {
-        dm_cback_data.status = p_data->status;
-        (*nfa_dm_cb.p_dm_cback)(NFA_DM_NFCC_TIMEOUT_EVT, &dm_cback_data);
-      } else {
+        if (p_data->status == NFC_STATUS_FAILED) {
+            dm_cback_data.status = p_data->status;
+            (*nfa_dm_cb.p_dm_cback)(NFA_DM_NFCC_TIMEOUT_EVT, &dm_cback_data);
+        }
+        else if (nfcFL.nfcNxpEse &&
+                nfcFL.eseFL._ESE_ETSI_READER_ENABLE) {
+            conn_evt.status = p_data->status;
+            nfa_dm_conn_cback_event_notify(NFA_RECOVERY_EVT, &conn_evt);
+        }
 #endif
-#if ((NFC_NXP_ESE == TRUE) && (NXP_ESE_ETSI_READER_ENABLE == true))
-        conn_evt.status = p_data->status;
-        nfa_dm_conn_cback_event_notify(NFA_RECOVERY_EVT, &conn_evt);
-#endif
-#if (NXP_EXTNS == TRUE)
-      }
-#endif
-      break;
+        break;
 
     case NFC_NFCC_TRANSPORT_ERR_REVT:
       NFA_TRACE_DEBUG1("flags:0x%08x", nfa_dm_cb.flags);
-#if (NXP_EXTNS == TRUE && NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true)
-      if (p_data->status == NFC_STATUS_FAILED) {
-        dm_cback_data.status = p_data->status;
+#if (NXP_EXTNS == TRUE)
+      if(nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT) {
+          if (p_data->status == NFC_STATUS_FAILED) {
+              dm_cback_data.status = p_data->status;
+          }
+          dm_cback_evt = NFA_DM_NFCC_TRANSPORT_ERR_EVT;
       }
-      dm_cback_evt = NFA_DM_NFCC_TRANSPORT_ERR_EVT;
 #else
       dm_cback_evt = (event == NFC_NFCC_TIMEOUT_REVT)
                          ? NFA_DM_NFCC_TIMEOUT_EVT
@@ -1189,12 +1193,12 @@
 
   NFA_TRACE_DEBUG0("nfa_dm_act_enable_listening ()");
 
-  nfa_dm_cb.flags &= (~NFA_DM_FLAGS_LISTEN_DISABLED
-#if (NXP_EXTNS == TRUE && \
-     NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true)
-                      & ~NFA_DM_FLAGS_PASSIVE_LISTEN_DISABLED
+  nfa_dm_cb.flags &= ~NFA_DM_FLAGS_LISTEN_DISABLED;
+#if (NXP_EXTNS == TRUE)
+  if(nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION) {
+      nfa_dm_cb.flags &= ~NFA_DM_FLAGS_PASSIVE_LISTEN_DISABLED;
+  }
 #endif
-                      );
   evt_data.status = NFA_STATUS_OK;
   nfa_dm_conn_cback_event_notify(NFA_LISTEN_ENABLED_EVT, &evt_data);
 
@@ -1223,8 +1227,7 @@
   return (true);
 }
 
-#if (NXP_EXTNS == TRUE && \
-     NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true)
+#if (NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
 ** Function         nfa_dm_act_disable_passive_listening
@@ -1235,6 +1238,10 @@
 **
 *******************************************************************************/
 bool nfa_dm_act_disable_passive_listening(tNFA_DM_MSG* p_data) {
+    if(!nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION) {
+        NFA_TRACE_DEBUG0("NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION feature is not available!!");
+        return false;
+    }
   tNFA_CONN_EVT_DATA evt_data;
 
   NFA_TRACE_DEBUG0("nfa_dm_act_disable_passive_listening ()");
@@ -2065,9 +2072,14 @@
     case NFC_NFCC_POWER_OFF_REVT:
       return "NFC_NFCC_POWER_OFF_REVT";
 
-#if ((NXP_EXTNS == TRUE) && (NXP_WIRED_MODE_STANDBY == true))
+    case NFC_NFCEE_STATUS_REVT:
+        return "NFC_NFCEE_STATUS_REVT";
+
+#if (NXP_EXTNS == TRUE)
     case NFC_NFCEE_PWR_LNK_CTRL_REVT:
-      return "NFC_NFCEE_PWR_LNK_CTRL_REVT";
+        if(nfcFL.eseFL._WIRED_MODE_STANDBY) {
+            return "NFC_NFCEE_PWR_LNK_CTRL_REVT";
+        }
 #endif
     default:
       return "unknown revt";
diff --git a/src/nfa/dm/nfa_dm_api.c b/src/nfa/dm/nfa_dm_api.c
index ea41f36..e7ab5e9 100644
--- a/src/nfa/dm/nfa_dm_api.c
+++ b/src/nfa/dm/nfa_dm_api.c
@@ -102,6 +102,7 @@
 #else
   NFC_Init(p_hal_entry_tbl);
 #endif
+  nfa_ee_max_ee_cfg == nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED;
 }
 
 /*******************************************************************************
@@ -605,7 +606,6 @@
 }
 
 #if (NXP_EXTNS == TRUE)
-#if (NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true)
 /*******************************************************************************
 **
 ** Function         NFA_DisablePassiveListening
@@ -625,6 +625,12 @@
 **
 *******************************************************************************/
 tNFA_STATUS NFA_DisablePassiveListening(void) {
+    NFA_TRACE_API0("NFA_DisablePassiveListening ()");
+    if(!nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION) {
+        NFA_TRACE_DEBUG0(" NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION"
+                " feature is not available!!");
+        return (NFA_STATUS_FAILED);
+    }
   NFC_HDR* p_msg;
 
   NFA_TRACE_API0("NFA_DisablePassiveListening ()");
@@ -639,9 +645,7 @@
 
   return (NFA_STATUS_FAILED);
 }
-#endif
 
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
 /*******************************************************************************
 **
 ** Function:        NFA_SetPreferredUiccId
@@ -654,10 +658,15 @@
 **
 *******************************************************************************/
 void NFA_SetPreferredUiccId(uint8_t uicc_id) {
-  nfa_dm_cb.selected_uicc_id = uicc_id;
+    NFA_TRACE_API0("NFA_SetPreferredUiccId ()");
+    if(!nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) {
+        NFA_TRACE_DEBUG0("NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH"
+                " feature is not available!!");
+        return;
+    }
+    nfa_dm_cb.selected_uicc_id = uicc_id;
 }
 #endif
-#endif
 
 /*******************************************************************************
 **
@@ -1033,15 +1042,14 @@
   NFA_TRACE_API1("NFA_SendRawFrame () data_len:%d", data_len);
 
 /* Validate parameters */
-#if (NXP_NFCC_EMPTY_DATA_PACKET == true)
-  if (((data_len == 0) || (p_raw_data == NULL)) &&
-      (!(nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_ACTIVE &&
-         nfa_dm_cb.disc_cb.activated_protocol == NFA_PROTOCOL_T3T)))
-#else
-  if ((data_len == 0) || (p_raw_data == NULL))
-#endif
-    return (NFA_STATUS_INVALID_PARAM);
-
+  if ((nfcFL.nfccFL._NXP_NFCC_EMPTY_DATA_PACKET &&
+          (((data_len == 0) || (p_raw_data == NULL)) &&
+                  (!(nfa_dm_cb.disc_cb.disc_state == NFA_DM_RFST_LISTEN_ACTIVE &&
+                          nfa_dm_cb.disc_cb.activated_protocol ==
+                                  NFA_PROTOCOL_T3T)))) ||
+          ((data_len == 0) || (p_raw_data == NULL))) {
+      return (NFA_STATUS_INVALID_PARAM);
+  }
   size = NFC_HDR_SIZE + NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE + data_len;
   p_msg = (NFC_HDR*)GKI_getbuf(size);
   if (p_msg != NULL) {
@@ -1051,13 +1059,14 @@
     p_msg->len = data_len;
 
     p = (uint8_t*)(p_msg + 1) + p_msg->offset;
-#if (NXP_NFCC_EMPTY_DATA_PACKET == true)
-    if (p_raw_data != NULL) {
-      memcpy(p, p_raw_data, data_len);
+    if (nfcFL.nfccFL._NXP_NFCC_EMPTY_DATA_PACKET) {
+        if (p_raw_data != NULL) {
+            memcpy(p, p_raw_data, data_len);
+        }
     }
-#else
-    memcpy(p, p_raw_data, data_len);
-#endif
+    else {
+        memcpy(p, p_raw_data, data_len);
+    }
 
     nfa_sys_sendmsg(p_msg);
 
@@ -1251,7 +1260,6 @@
   NFC_HDR* p_msg;
 
   NFA_TRACE_API1("NFA_PowerOffSleepState () start_stop=%d", start_stop);
-
   if (nfa_dm_cb.flags & NFA_DM_FLAGS_SETTING_PWR_MODE) {
     NFA_TRACE_ERROR0(
         "NFA_PowerOffSleepState (): NFA DM is busy to update power mode");
@@ -1503,7 +1511,6 @@
   return mwVer;
 }
 
-#if (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true)
 /*******************************************************************************
 **
 ** Function:        NFA_ResetNfcc
@@ -1515,6 +1522,12 @@
 **
 *******************************************************************************/
 tNFA_STATUS NFA_ResetNfcc() {
+    NFA_TRACE_DEBUG0("NFA_ResetNfcc()");
+    if(!nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH) {
+        NFA_TRACE_DEBUG0("NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH"
+                " feature is not available!!");
+        return (NFA_STATUS_FAILED);
+    }
   tNFA_STATUS status = NFA_STATUS_FAILED;
   status = nfc_ncif_reset_nfcc();
   return status;
@@ -1533,6 +1546,12 @@
 **
 *******************************************************************************/
 void NFA_EE_HCI_Control(bool flagEnable) {
+    NFA_TRACE_DEBUG0("NFA_EE_HCI_Control()");
+    if(!nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH) {
+        NFA_TRACE_DEBUG0("NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH"
+                " feature is not available!!");
+        return;
+    }
   uint8_t id[2] = {NFA_ID_HCI, NFA_ID_EE};
   uint8_t i = 0;
   if (!flagEnable) {
@@ -1565,7 +1584,6 @@
   }
 }
 #endif
-#endif
 
 /*******************************************************************************
 **
diff --git a/src/nfa/dm/nfa_dm_cfg.c b/src/nfa/dm/nfa_dm_cfg.c
index ec19331..2101855 100644
--- a/src/nfa/dm/nfa_dm_cfg.c
+++ b/src/nfa/dm/nfa_dm_cfg.c
@@ -133,4 +133,4 @@
 };
 
 tNFA_PROPRIETARY_CFG* p_nfa_proprietary_cfg =
-    (tNFA_PROPRIETARY_CFG*)&nfa_proprietary_cfg;
\ No newline at end of file
+    (tNFA_PROPRIETARY_CFG*)&nfa_proprietary_cfg;
diff --git a/src/nfa/dm/nfa_dm_discover.c b/src/nfa/dm/nfa_dm_discover.c
index 301d0fc..13593eb 100644
--- a/src/nfa/dm/nfa_dm_discover.c
+++ b/src/nfa/dm/nfa_dm_discover.c
@@ -111,7 +111,7 @@
     200; /* timeout value 2 sec waiting for deactivate ntf */
 #endif
 
-#if (NFC_NXP_ESE == TRUE && (NXP_ESE_ETSI_READER_ENABLE == true))
+#if (NXP_EXTNS == TRUE)
 bool etsi_reader_in_progress = false;
 #endif
 /*******************************************************************************
@@ -145,9 +145,9 @@
         dm_disc_mask);
     dm_disc_mask &= ~NFA_DM_DISC_MASK_NFC_DEP;
   }
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true))
-  if (nfa_dm_cb.flags & NFA_DM_FLAGS_PASSIVE_LISTEN_DISABLED) {
+#if (NXP_EXTNS == TRUE)
+  if (nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION &&
+          (nfa_dm_cb.flags & NFA_DM_FLAGS_PASSIVE_LISTEN_DISABLED)) {
     NFA_TRACE_DEBUG1(
         "nfa_dm_get_rf_discover_config () passive listen disabled, rm listen "
         "from 0x%x",
@@ -1052,21 +1052,18 @@
 **
 *******************************************************************************/
 static void nfa_dm_disc_deact_ntf_timeout_cback(TIMER_LIST_ENT* p_tle) {
-  (void)p_tle;
+    (void)p_tle;
 
-  NFA_TRACE_ERROR0("nfa_dm_disc_deact_ntf_timeout_cback()");
-#if ((NFC_NXP_ESE == TRUE) && (NXP_ESE_ETSI_READER_ENABLE == true))
-  if (nfc_cb.num_disc_maps == 1) {
-    NFC_TRACE_ERROR0("reset Nfc..!!");
-    etsi_reader_in_progress = true;
-    nfc_ncif_cmd_timeout();
+    NFA_TRACE_ERROR0("nfa_dm_disc_deact_ntf_timeout_cback()");
+    if (nfcFL.nfcNxpEse && nfcFL.eseFL._ESE_ETSI_READER_ENABLE &&
+            (nfc_cb.num_disc_maps == 1)) {
+        NFC_TRACE_ERROR0("reset Nfc..!!");
+        etsi_reader_in_progress = true;
+        nfc_ncif_cmd_timeout();
 
-  } else {
-#endif
-    nfa_dm_disc_force_to_idle();
-#if ((NFC_NXP_ESE == TRUE) && (NXP_ESE_ETSI_READER_ENABLE == true))
-  }
-#endif
+    } else {
+        nfa_dm_disc_force_to_idle();
+    }
 }
 
 /*******************************************************************************
@@ -1156,6 +1153,7 @@
   unsigned long fwdEnable = 0x00;
   unsigned long hostListenMask = 0x00;
   unsigned long uiccListenMask = 0x00;
+  unsigned long eseListenMask  = 0x00;
   unsigned long p2pListenMask = 0x00;
 
   NFA_TRACE_DEBUG0("nfa_dm_start_rf_discover (): enter");
@@ -1307,6 +1305,11 @@
       NFA_TRACE_DEBUG2("%s:UICC_LISTEN_TECH_MASK = 0x0%X;", __func__,
                        uiccListenMask);
     }
+    if (GetNumValue(NAME_NXP_ESE_LISTEN_TECH_MASK, &eseListenMask,
+                    sizeof(eseListenMask))) {
+      NFA_TRACE_DEBUG2("%s:NXP_ESE_LISTEN_TECH_MASK = 0x0%X;", __func__,
+                       eseListenMask);
+    }
     if (GetNumValue(NAME_P2P_LISTEN_TECH_MASK, &p2pListenMask,
                     sizeof(p2pListenMask))) {
       NFA_TRACE_DEBUG2("%s:P2P_LISTEN_TECH_MASK = 0x0%X;", __func__,
@@ -1359,19 +1362,19 @@
   }
 #if (NXP_EXTNS == TRUE)
   NFA_TRACE_DEBUG1("dm_disc_mask before masking = 0x%x", dm_disc_mask);
-  if (((hostListenMask & 0x1) == 0x0) && ((uiccListenMask & 0x1) == 0x0)) {
+  if (((hostListenMask & 0x1) == 0x0) && ((uiccListenMask & 0x1) == 0x0) && ((eseListenMask & 0x1) == 0x0)) {
     NFA_TRACE_DEBUG0(
         "nfa_dm_start_rf_discover (): try removing A passive listen for "
         "ISO-DEP");
     dm_disc_mask &= ~(NFA_DM_DISC_MASK_LA_ISO_DEP);
   }
-  if (((hostListenMask & 0x2) == 0x0) && ((uiccListenMask & 0x2) == 0x0)) {
+  if (((hostListenMask & 0x2) == 0x0) && ((uiccListenMask & 0x2) == 0x0) && ((eseListenMask & 0x2) == 0x0)) {
     NFA_TRACE_DEBUG0(
         "nfa_dm_start_rf_discover (): try removing B passive listen for "
         "ISO-DEP");
     dm_disc_mask &= ~(NFA_DM_DISC_MASK_LB_ISO_DEP);
   }
-  if (((hostListenMask & 0x4) == 0x0) && ((uiccListenMask & 0x4) == 0x0)) {
+  if (((hostListenMask & 0x4) == 0x0) && ((uiccListenMask & 0x4) == 0x0) && ((eseListenMask & 0x4) == 0x0)) {
     NFA_TRACE_DEBUG0(
         "nfa_dm_start_rf_discover (): try removing F passive listen for T3T");
     dm_disc_mask &= ~(NFA_DM_DISC_MASK_LF_T3T);
@@ -1587,8 +1590,8 @@
    * 1. Pass this info to JNI as START_READER_EVT.
    * return (NFA_STATUS_OK)
    */
-  if (p_data->activate.intf_param.type == NCI_INTERFACE_UICC_DIRECT ||
-      p_data->activate.intf_param.type == NCI_INTERFACE_ESE_DIRECT) {
+  if (p_data->activate.intf_param.type == nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT ||
+      p_data->activate.intf_param.type == nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT) {
     for (xx = 0; xx < NFA_DM_DISC_NUM_ENTRIES; xx++) {
       if ((nfa_dm_cb.disc_cb.entry[xx].in_use)
 #if (NXP_EXTNS != TRUE)
@@ -2311,9 +2314,9 @@
          * set new state NFA_DM_RFST_POLL_ACTIVE
          * */
         else if (p_data->nfc_discover.activate.intf_param.type ==
-                     NCI_INTERFACE_UICC_DIRECT ||
+                nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT ||
                  p_data->nfc_discover.activate.intf_param.type ==
-                     NCI_INTERFACE_ESE_DIRECT) {
+                         nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT) {
           nfa_dm_disc_new_state(NFA_DM_RFST_POLL_ACTIVE);
         }
 #endif
@@ -3354,7 +3357,7 @@
     NFA_TRACE_DEBUG1("nfa_dm_p2p_prio_logic event_type = 0x%x", event_type);
 
 #if (NXP_EXTNS == TRUE)
-    if (type == NCI_INTERFACE_UICC_DIRECT || type == NCI_INTERFACE_ESE_DIRECT) {
+    if (type == nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT || type == nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT) {
       NFA_TRACE_DEBUG0("Disable the p2p prio logic RDR_SWP");
       return true;
     }
diff --git a/src/nfa/dm/nfa_dm_main.c b/src/nfa/dm/nfa_dm_main.c
index fb04f68..688de0e 100644
--- a/src/nfa/dm/nfa_dm_main.c
+++ b/src/nfa/dm/nfa_dm_main.c
@@ -83,8 +83,7 @@
     nfa_dm_act_disable_polling,      /* NFA_DM_API_DISABLE_POLLING_EVT       */
     nfa_dm_act_enable_listening,     /* NFA_DM_API_ENABLE_LISTENING_EVT      */
     nfa_dm_act_disable_listening,    /* NFA_DM_API_DISABLE_LISTENING_EVT     */
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true))
+#if (NXP_EXTNS == TRUE)
     nfa_dm_act_disable_passive_listening, /* NFA_DM_API_DISABLE_PASSIVE_LISTENING_EVT
                                              */
 #endif
@@ -593,8 +592,7 @@
     case NFA_DM_API_DISABLE_LISTENING_EVT:
       return "NFA_DM_API_DISABLE_LISTENING_EVT";
 
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true))
+#if (NXP_EXTNS == TRUE)
     case NFA_DM_API_DISABLE_PASSIVE_LISTENING_EVT:
       return "NFA_DM_API_DISABLE_PASSIVE_LISTENING_EVT";
 #endif
diff --git a/src/nfa/ee/nfa_ee_act.c b/src/nfa/ee/nfa_ee_act.c
index 39b52b1..2b46d69 100644
--- a/src/nfa/ee/nfa_ee_act.c
+++ b/src/nfa/ee/nfa_ee_act.c
@@ -37,9 +37,7 @@
 #if (NXP_EXTNS == TRUE)
 #include "nfa_hci_int.h"
 #endif
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 #include <config.h>
-#endif
 
 /* the de-bounce timer:
  * The NFA-EE API functions are called to set the routing and VS configuration.
@@ -59,6 +57,28 @@
 
 /* the following 2 tables convert the protocol mask in API and control block to
  * the command for NFCC */
+static void add_route_tech_proto_tlv(uint8_t** pp, uint8_t tlv_type,
+                                     uint8_t nfcee_id, uint8_t pwr_cfg,
+                                     uint8_t tech_proto) {
+  *(*pp)++ = tlv_type;
+  *(*pp)++ = 3;
+  *(*pp)++ = nfcee_id;
+  *(*pp)++ = pwr_cfg;
+  *(*pp)++ = tech_proto;
+}
+
+static void add_route_aid_tlv(uint8_t** pp, uint8_t* pa, uint8_t aid_rt_loc,
+                              uint8_t pwr_cfg, uint8_t tag) {
+  pa++;                /* EMV tag */
+  uint8_t len = *pa++; /* aid_len */
+  *(*pp)++ = tag;
+  *(*pp)++ = len + 2;
+  *(*pp)++ = aid_rt_loc;
+  *(*pp)++ = pwr_cfg;
+  /* copy the AID */
+  memcpy(*pp, pa, len);
+  *pp += len;
+}
 const uint8_t nfa_ee_proto_mask_list[NFA_EE_NUM_PROTO] = {
     NFA_PROTOCOL_MASK_T1T, NFA_PROTOCOL_MASK_T2T, NFA_PROTOCOL_MASK_T3T,
     NFA_PROTOCOL_MASK_ISO_DEP, NFA_PROTOCOL_MASK_NFC_DEP
@@ -77,7 +97,7 @@
 #endif
 };
 
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_LISTEN_ROUTE_TBL_OPTIMIZATION == TRUE))
+#if (NXP_EXTNS == TRUE)
 static uint8_t* proto_route_buff;
 static uint8_t* tech_route_buff;
 static uint8_t* proto_pp;
@@ -99,15 +119,15 @@
 bool gNfaProvisionMode =
     false; /* to know if device is set to provision mode or not */
 uint8_t nfa_ee_ce_p61_active = 0x00;
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 static uint16_t max_routing_table_size;
 static uint16_t max_aid_config_length;
 static uint16_t max_aid_entries;
 #endif
-#endif
 
 static void nfa_ee_report_discover_req_evt(void);
 static void nfa_ee_build_discover_req_evt(tNFA_EE_DISCOVER_REQ* p_evt_data);
+void nfa_ee_check_set_routing(uint16_t new_size, int* p_max_len, uint8_t* p,
+                              int* p_cur_offset);
 /*******************************************************************************
 **
 ** Function         nfa_ee_trace_aid
@@ -123,19 +143,16 @@
   int xx, yy = 0;
   char buff[100];
 
-    buff[0] = 0;
-    if (aid_len > NFA_MAX_AID_LEN)
-    {
-        NFA_TRACE_ERROR2 ("aid_len: %d exceeds max(%d)", aid_len, NFA_MAX_AID_LEN);
-        len = NFA_MAX_AID_LEN;
-    }
-    for (xx = 0; xx < len; xx++)
-    {
-        yy +=  snprintf (&buff[yy], 100, "%02x ", *p);
-        p++;
-    }
-    NFA_TRACE_DEBUG4 ("%s id:0x%x len=%d aid:%s", p_str, id, aid_len, buff);
-
+  buff[0] = 0;
+  if (aid_len > NFA_MAX_AID_LEN) {
+    NFA_TRACE_ERROR2("aid_len: %d exceeds max(%d)", aid_len, NFA_MAX_AID_LEN);
+    len = NFA_MAX_AID_LEN;
+  }
+  for (xx = 0; xx < len; xx++) {
+    yy += snprintf(&buff[yy], 100, "%02x ", *p);
+    p++;
+  }
+  NFA_TRACE_DEBUG4("%s id:0x%x len=%d aid:%s", p_str, id, aid_len, buff);
 }
 
 /*******************************************************************************
@@ -330,6 +347,223 @@
   return lmrt_size;
 }
 
+static void nfa_ee_add_tech_route_to_ecb(tNFA_EE_ECB* p_cb, uint8_t* pp,
+                                         uint8_t* p, uint8_t* ps,
+                                         int* p_cur_offset) {
+  uint8_t num_tlv = *ps;
+
+  /* add the Technology based routing */
+  for (int xx = 0; xx < NFA_EE_NUM_TECH; xx++) {
+    uint8_t power_cfg = 0;
+    if (p_cb->tech_switch_on & nfa_ee_tech_mask_list[xx])
+      power_cfg |= NCI_ROUTE_PWR_STATE_ON;
+    if (p_cb->tech_switch_off & nfa_ee_tech_mask_list[xx])
+      power_cfg |= NCI_ROUTE_PWR_STATE_SWITCH_OFF;
+    if (p_cb->tech_battery_off & nfa_ee_tech_mask_list[xx])
+      power_cfg |= NCI_ROUTE_PWR_STATE_BATT_OFF;
+    if (power_cfg & NCI_ROUTE_PWR_STATE_ON) {
+       if (p_cb->tech_screen_lock & nfa_ee_tech_mask_list[xx])
+          power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
+       if (p_cb->tech_screen_off & nfa_ee_tech_mask_list[xx])
+          power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
+       if (p_cb->tech_screen_off_lock & nfa_ee_tech_mask_list[xx])
+          power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
+       }
+    if (power_cfg) {
+      add_route_tech_proto_tlv(&pp, NFC_ROUTE_TAG_TECH, p_cb->nfcee_id,
+                               power_cfg, nfa_ee_tech_list[xx]);
+      num_tlv++;
+      if (power_cfg != NCI_ROUTE_PWR_STATE_ON)
+        nfa_ee_cb.ee_cfged |= NFA_EE_CFGED_OFF_ROUTING;
+    }
+  }
+
+  /* update the num_tlv and current offset */
+  uint8_t entry_size = (uint8_t)(pp - p);
+  *p_cur_offset += entry_size;
+  *ps = num_tlv;
+}
+
+static void nfa_ee_add_proto_route_to_ecb(tNFA_EE_ECB* p_cb, uint8_t* pp,
+                                          uint8_t* p, uint8_t* ps,
+                                          int* p_cur_offset) {
+  uint8_t num_tlv = *ps;
+
+  /* add the Protocol based routing */
+  for (int xx = 0; xx < NFA_EE_NUM_PROTO; xx++) {
+    uint8_t power_cfg = 0, proto_tag = 0;
+    if (p_cb->proto_switch_on & nfa_ee_proto_mask_list[xx])
+      power_cfg |= NCI_ROUTE_PWR_STATE_ON;
+    if (p_cb->proto_switch_off & nfa_ee_proto_mask_list[xx])
+      power_cfg |= NCI_ROUTE_PWR_STATE_SWITCH_OFF;
+    if (p_cb->proto_battery_off & nfa_ee_proto_mask_list[xx])
+      power_cfg |= NCI_ROUTE_PWR_STATE_BATT_OFF;
+    if (power_cfg) {
+      /* Applying Route Block for ISO DEP Protocol, so that AIDs
+       * which are not in the routing table can also be blocked */
+      if (nfa_ee_proto_mask_list[xx] == NFA_PROTOCOL_MASK_ISO_DEP||nfa_ee_proto_mask_list[xx] == NFC_PROTOCOL_MASK_ISO7816) {
+        proto_tag = NFC_ROUTE_TAG_PROTO | nfa_ee_cb.route_block_control;
+
+        /* Enable screen on lock power state for ISO-DEP protocol to
+           enable HCE screen lock */
+       if (p_cb->nfcee_id == NFC_DH_ID)
+          power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
+      else
+      {
+        if (p_cb->proto_screen_lock & nfa_ee_proto_mask_list[xx])
+           power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
+        if (p_cb->proto_screen_off & nfa_ee_proto_mask_list[xx])
+           power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
+        if (p_cb->proto_screen_off_lock & nfa_ee_proto_mask_list[xx])
+           power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
+       }
+      } else {
+        proto_tag = NFC_ROUTE_TAG_PROTO;
+      }
+
+      add_route_tech_proto_tlv(&pp, proto_tag, p_cb->nfcee_id, power_cfg,
+                               nfa_ee_proto_list[xx]);
+      num_tlv++;
+      if (power_cfg != NCI_ROUTE_PWR_STATE_ON)
+        nfa_ee_cb.ee_cfged |= NFA_EE_CFGED_OFF_ROUTING;
+    }
+  }
+
+  /* add NFC-DEP routing to HOST */
+  if (p_cb->nfcee_id == NFC_DH_ID) {
+    add_route_tech_proto_tlv(&pp, NFC_ROUTE_TAG_PROTO, NFC_DH_ID,
+                             NCI_ROUTE_PWR_STATE_ON, NFC_PROTOCOL_NFC_DEP);
+
+    num_tlv++;
+    NFA_TRACE_DEBUG1("%s - NFC DEP added for DH!!!", __func__);
+  }
+  /* update the num_tlv and current offset */
+  uint8_t entry_size = (uint8_t)(pp - p);
+  *p_cur_offset += entry_size;
+  *ps = num_tlv;
+}
+
+static void nfa_ee_add_aid_route_to_ecb(tNFA_EE_ECB* p_cb, uint8_t* pp,
+                                        uint8_t* p, uint8_t* ps,
+                                        int* p_cur_offset, int* p_max_len) {
+  uint8_t num_tlv = *ps;
+
+  /* add the AID routing */
+  if (p_cb->aid_entries) {
+    int start_offset = 0;
+    for (int xx = 0; xx < p_cb->aid_entries; xx++) {
+      /* remember the beginning of this AID routing entry, just in case we
+       * need to put it in next command */
+      uint8_t route_qual = 0;
+      uint8_t* p_start = pp;
+      /* add one AID entry */
+      if (p_cb->aid_rt_info[xx] & NFA_EE_AE_ROUTE) {
+        uint8_t* pa = &p_cb->aid_cfg[start_offset];
+
+        NFA_TRACE_DEBUG2("%s -  p_cb->aid_info%x", __func__,
+                         p_cb->aid_info[xx]);
+        if (p_cb->aid_info[xx] & NCI_ROUTE_QUAL_LONG_SELECT) {
+          NFA_TRACE_DEBUG2("%s - %x", __func__,
+                           p_cb->aid_info[xx] & NCI_ROUTE_QUAL_LONG_SELECT);
+          route_qual |= NCI_ROUTE_QUAL_LONG_SELECT;
+        }
+        if (p_cb->aid_info[xx] & NCI_ROUTE_QUAL_SHORT_SELECT) {
+          NFA_TRACE_DEBUG2("%s - %x", __func__,
+                           p_cb->aid_info[xx] & NCI_ROUTE_QUAL_SHORT_SELECT);
+          route_qual |= NCI_ROUTE_QUAL_SHORT_SELECT;
+        }
+
+        uint8_t tag =
+            NFC_ROUTE_TAG_AID | nfa_ee_cb.route_block_control | route_qual;
+            if(nfa_ee_is_active(p_cb->aid_rt_loc[xx]|NFA_HANDLE_GROUP_EE)) {
+                add_route_aid_tlv(&pp, pa, p_cb->aid_rt_loc[xx], p_cb->aid_pwr_cfg[xx], tag);
+                num_tlv++;
+            } else {
+                NFA_TRACE_DEBUG2("%s -  ignoring route loc%x", __func__,p_cb->aid_rt_loc[xx]);
+            }
+      }
+      start_offset += p_cb->aid_len[xx];
+      uint8_t new_size = (uint8_t)(pp - p_start);
+      nfa_ee_check_set_routing(new_size, p_max_len, ps, p_cur_offset);
+      if (*ps == 0 && (num_tlv > 0x00)) {
+        /* just sent routing command, update local */
+        *ps = 1;
+        num_tlv = *ps;
+        *p_cur_offset = new_size;
+        pp = ps + 1;
+        p = pp;
+        memcpy(p, p_start, new_size);
+        pp += new_size;
+      } else {
+        /* add the new entry */
+        *ps = num_tlv;
+        *p_cur_offset += new_size;
+      }
+    }
+  } else {
+    NFA_TRACE_DEBUG1("%s - No AID entries available", __func__);
+  }
+}
+static void nfa_ee_add_apdu_route_to_ecb(tNFA_EE_ECB* p_cb, uint8_t* pp,
+                                        uint8_t* p, uint8_t* ps,
+                                        int* p_cur_offset, int* p_max_len) {
+    uint8_t num_tlv = *ps, len;
+    uint16_t tlv_size;
+    tlv_size = (uint8_t)*p_cur_offset;
+    int start_offset, xx;
+    uint8_t  *pa;
+    uint8_t* p_start;
+    uint8_t new_size;
+    uint8_t max_tlv;
+
+    /* add the AID routing */
+          if (p_cb->apdu_pattern_entries) {
+            start_offset = 0;
+            for (xx = 0; xx < p_cb->apdu_pattern_entries; xx++) {
+                p_start = pp;
+                /* add one APDU entry */
+                if (p_cb->apdu_rt_info[xx] & NFA_EE_AE_ROUTE) {
+                    num_tlv++;
+                    pa = &p_cb->apdu_cfg[start_offset];
+                    pa++;        /* EMV tag */
+                    len = *pa++; /* apdu_len */
+                    *pp++ = NFC_ROUTE_TAG_APDU;
+                    *pp++ = len + 2;
+                    *pp++ = (p_cb->apdu_rt_info[xx] >> NFA_EE_APDU_ROUTE_MASK);
+                    NFA_TRACE_DEBUG1("nfa_ee_route_add_one_ecb_by_route_order p_cb->apdu_rt_info[xx] %x", p_cb->apdu_rt_info[xx]);
+                    *pp++ = p_cb->apdu_pwr_cfg[xx];
+                    /* copy the APDU */
+                    memcpy(pp, pa, len);
+                    pp += len;
+                }
+                start_offset += p_cb->apdu_len[xx];
+                new_size = (uint8_t)(pp - p_start);
+                NFA_TRACE_DEBUG1("nfa_ee_route_add_one_ecb_by_route_order --before num_tlv:- %d", num_tlv);
+                NFA_TRACE_DEBUG1("nfa_ee_route_add_one_ecb_by_route_order --before new_size:- %d",new_size);
+                nfa_ee_check_set_routing(new_size, p_max_len, ps, p_cur_offset);
+                if (*ps == 0) {
+                  /* just sent routing command, update local */
+                  *ps = 1;
+                   num_tlv = *ps;
+                   *p_cur_offset = new_size;
+                   pp = ps + 1;
+                   p = pp;
+                   tlv_size = (uint8_t)*p_cur_offset;
+                   max_tlv = (uint8_t)((*p_max_len > NFA_EE_ROUT_MAX_TLV_SIZE)
+                                        ? NFA_EE_ROUT_MAX_TLV_SIZE
+                                        : *p_max_len);
+                   memcpy(p, p_start, new_size);
+                   pp += new_size;
+                   } else {
+                    /* add the new entry */
+                     *ps = num_tlv;
+                     *p_cur_offset += new_size;
+                }
+            }
+            NFA_TRACE_DEBUG1("nfa_ee_route_add_one_ecb_by_route_order --num_tlv:- %d", num_tlv);
+            NFA_TRACE_DEBUG1("nfa_ee_route_add_one_ecb_by_route_order --new_size:- %d",new_size);
+          }
+}
 /*******************************************************************************
 **
 ** Function         nfa_ee_conn_cback
@@ -412,7 +646,7 @@
   uint32_t xx;
   int total_len = 0;
   tNFA_EE_ECB* p_cb = nfa_ee_cb.ecb;
-  for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) {
+  for (xx = 0; xx < nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) {
     total_len += nfa_ee_find_total_aid_len(p_cb, 0);
     total_len += (p_cb->aid_entries * 2); /*Adding tag/len */
   }
@@ -507,7 +741,7 @@
     if (p_ecb->apdu_pattern_entries) {
       offset = 0;
       for (xx = 0; xx < p_ecb->apdu_pattern_entries; xx++) {
-        if ((p_ecb->apdu_cfg[offset + apdu_len_offset] == apdu_len) &&
+        if (((p_ecb->apdu_cfg[offset + apdu_len_offset]/2) == apdu_len) &&
             (memcmp(&p_ecb->apdu_cfg[offset + apdu_len_offset + 1], p_apdu,
                     apdu_len) == 0)) {
           p_ret = p_ecb;
@@ -637,43 +871,55 @@
       }
     }
   }
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-  max_routing_table_size = nfc_ncif_getMaxRoutingTableSize();
-  if (max_routing_table_size <
-      (NFA_EE_TOTAL_TECH_ROUTE_SIZE + NFA_EE_TOTAL_PROTO_ROUTE_SIZE)) {
-    max_routing_table_size = NFA_EE_ROUT_BUF_SIZE;
+
+#if (NXP_EXTNS == TRUE)
+  if((nfcFL.chipType != pn547C2) &&
+          (nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN == true)) {
+      max_routing_table_size = nfc_ncif_getMaxRoutingTableSize();
+      if (max_routing_table_size <
+              (NFA_EE_TOTAL_TECH_ROUTE_SIZE + NFA_EE_TOTAL_PROTO_ROUTE_SIZE)) {
+          max_routing_table_size = NFA_EE_ROUT_BUF_SIZE;
+      }
+      max_aid_config_length = nfa_ee_find_max_aid_config_length();
+      max_aid_entries = max_aid_config_length / NFA_EE_MIN_AID_ENTRY_SIZE;
+      NFA_TRACE_DEBUG3(
+              "max_routing_table_size = %d max_aid_config_length: %d and "
+              "max_aid_entries: %d",
+              max_routing_table_size, max_aid_config_length, max_aid_entries);
+      /* Dynamic ecb allocation based on max aid entry calculated from max. routing
+       * table size( from core_init rsp )*/
+      for (xx = 0; xx < NFA_EE_NUM_ECBS; xx++) {
+          nfa_ee_cb.ecb[xx].aid_len = GKI_getbuf(max_aid_entries);
+          nfa_ee_cb.ecb[xx].aid_pwr_cfg = GKI_getbuf(max_aid_entries);
+          nfa_ee_cb.ecb[xx].aid_rt_info = GKI_getbuf(max_aid_entries);
+          nfa_ee_cb.ecb[xx].aid_rt_loc = GKI_getbuf(max_aid_entries);
+          nfa_ee_cb.ecb[xx].aid_info    = GKI_getbuf(max_aid_entries);
+          nfa_ee_cb.ecb[xx].aid_cfg = GKI_getbuf(max_aid_config_length);
+          if ((NULL != nfa_ee_cb.ecb[xx].aid_len) &&
+                  (NULL != nfa_ee_cb.ecb[xx].aid_pwr_cfg) &&
+                  (NULL != nfa_ee_cb.ecb[xx].aid_rt_info) &&
+                  (NULL != nfa_ee_cb.ecb[xx].aid_rt_loc) &&
+                  (NULL != nfa_ee_cb.ecb[xx].aid_info) &&
+                  (NULL != nfa_ee_cb.ecb[xx].aid_cfg)) {
+              memset(nfa_ee_cb.ecb[xx].aid_len, 0, max_aid_entries);
+              memset(nfa_ee_cb.ecb[xx].aid_pwr_cfg, 0, max_aid_entries);
+              memset(nfa_ee_cb.ecb[xx].aid_rt_info, 0, max_aid_entries);
+              memset(nfa_ee_cb.ecb[xx].aid_rt_loc, 0, max_aid_entries);
+              memset(nfa_ee_cb.ecb[xx].aid_info, 0, max_aid_entries);
+              memset(nfa_ee_cb.ecb[xx].aid_cfg, 0, max_aid_config_length);
+          } else {
+              NFA_TRACE_ERROR0("GKI_getbuf allocation for ECB failed !");
+          }
+      }
   }
-  max_aid_config_length = nfa_ee_find_max_aid_config_length();
-  max_aid_entries = max_aid_config_length / NFA_EE_MIN_AID_ENTRY_SIZE;
-  NFA_TRACE_DEBUG3(
-      "max_routing_table_size = %d max_aid_config_length: %d and "
-      "max_aid_entries: %d",
-      max_routing_table_size, max_aid_config_length, max_aid_entries);
-  /* Dynamic ecb allocation based on max aid entry calculated from max. routing
-   * table size( from core_init rsp )*/
-  for (xx = 0; xx < NFA_EE_NUM_ECBS; xx++) {
-    nfa_ee_cb.ecb[xx].aid_len = GKI_getbuf(max_aid_entries);
-    nfa_ee_cb.ecb[xx].aid_pwr_cfg = GKI_getbuf(max_aid_entries);
-    nfa_ee_cb.ecb[xx].aid_rt_info = GKI_getbuf(max_aid_entries);
-    nfa_ee_cb.ecb[xx].aid_rt_loc  = GKI_getbuf(max_aid_entries);
-    nfa_ee_cb.ecb[xx].aid_info    = GKI_getbuf(max_aid_entries);
-    nfa_ee_cb.ecb[xx].aid_cfg = GKI_getbuf(max_aid_config_length);
-    if ((NULL != nfa_ee_cb.ecb[xx].aid_len) &&
-        (NULL != nfa_ee_cb.ecb[xx].aid_pwr_cfg) &&
-        (NULL != nfa_ee_cb.ecb[xx].aid_rt_info) &&
-        (NULL != nfa_ee_cb.ecb[xx].aid_rt_loc) &&
-        (NULL != nfa_ee_cb.ecb[xx].aid_info) &&
-        (NULL != nfa_ee_cb.ecb[xx].aid_cfg)) {
-      memset(nfa_ee_cb.ecb[xx].aid_len, 0, max_aid_entries);
-      memset(nfa_ee_cb.ecb[xx].aid_pwr_cfg, 0, max_aid_entries);
-      memset(nfa_ee_cb.ecb[xx].aid_rt_info, 0, max_aid_entries);
-      memset(nfa_ee_cb.ecb[xx].aid_rt_loc, 0, max_aid_entries);
-      memset(nfa_ee_cb.ecb[xx].aid_info, 0, max_aid_entries);
-      memset(nfa_ee_cb.ecb[xx].aid_cfg, 0, max_aid_config_length);
-    } else {
-      NFA_TRACE_ERROR0("GKI_getbuf allocation for ECB failed !");
-    }
+  else {
+      for (xx = 0; xx < NFA_EE_NUM_ECBS; xx++) {
+          nfa_ee_cb.ecb[xx].aid_len = nfa_ee_cb.ecb[xx].aid_len_stat;
+          nfa_ee_cb.ecb[xx].aid_pwr_cfg = nfa_ee_cb.ecb[xx].aid_pwr_cfg_stat;
+          nfa_ee_cb.ecb[xx].aid_rt_info = nfa_ee_cb.ecb[xx].aid_rt_info_stat;
+          nfa_ee_cb.ecb[xx].aid_rt_loc = nfa_ee_cb.ecb[xx].aid_rt_loc_stat;
+          nfa_ee_cb.ecb[xx].aid_cfg = nfa_ee_cb.ecb[xx].aid_cfg_stat;
+      }
   }
 #endif
 
@@ -696,8 +942,7 @@
 *******************************************************************************/
 void nfa_ee_api_deregister(tNFA_EE_MSG* p_data) {
   tNFA_EE_CBACK* p_cback = NULL;
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if (NXP_EXTNS == TRUE)
   int index = p_data->deregister.index, xx = 0;
 #else
   int index = p_data->deregister.index;
@@ -705,22 +950,37 @@
   tNFA_EE_CBACK_DATA evt_data = {0};
 
   NFA_TRACE_DEBUG0("nfa_ee_api_deregister");
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-  for (xx = 0; xx < NFA_EE_NUM_ECBS; xx++) {
-    GKI_freebuf(nfa_ee_cb.ecb[xx].aid_len);
-    GKI_freebuf(nfa_ee_cb.ecb[xx].aid_pwr_cfg);
-    GKI_freebuf(nfa_ee_cb.ecb[xx].aid_rt_info);
-    GKI_freebuf(nfa_ee_cb.ecb[xx].aid_rt_loc);
-    GKI_freebuf(nfa_ee_cb.ecb[xx].aid_info);
-    GKI_freebuf(nfa_ee_cb.ecb[xx].aid_cfg);
+#if (NXP_EXTNS == TRUE)
+  if((nfcFL.chipType != pn547C2) &&
+          (nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN == true)) {
+      for (xx = 0; xx < NFA_EE_NUM_ECBS; xx++) {
+          GKI_freebuf(nfa_ee_cb.ecb[xx].aid_len);
+          GKI_freebuf(nfa_ee_cb.ecb[xx].aid_pwr_cfg);
+          GKI_freebuf(nfa_ee_cb.ecb[xx].aid_rt_info);
+          GKI_freebuf(nfa_ee_cb.ecb[xx].aid_rt_loc);
+          GKI_freebuf(nfa_ee_cb.ecb[xx].aid_info);
+          GKI_freebuf(nfa_ee_cb.ecb[xx].aid_cfg);
+      }
   }
 #endif
   p_cback = nfa_ee_cb.p_ee_cback[index];
   nfa_ee_cb.p_ee_cback[index] = NULL;
   if (p_cback) (*p_cback)(NFA_EE_DEREGISTER_EVT, &evt_data);
 }
-
+/*******************************************************************************
+**
+** Function         nfa_ee_api_power_link_set
+**
+** Description      process power link command request
+**
+** Returns          void
+**
+*******************************************************************************/
+void nfa_ee_api_power_link_set(tNFA_EE_MSG* p_data) {
+    tNFA_EE_ECB* p_cb = p_data->cfg_hdr.p_cb;
+    NFC_Nfcee_PwrLinkCtrl(p_data->pwr_lnk_ctrl_set.nfcee_id, p_data->pwr_lnk_ctrl_set.cfg_value);
+    return;
+}
 /*******************************************************************************
 **
 ** Function         nfa_ee_api_mode_set
@@ -756,7 +1016,11 @@
       && (p_cb->ee_status != NFA_EE_STATUS_REMOVED)
 #endif
           )
+#if (NXP_EXTNS == TRUE)
+    p_cb->ee_status = NFA_EE_STATUS_ACTIVE;
+#else
     p_cb->ee_status = NFA_EE_STATUS_PENDING | NFA_EE_STATUS_ACTIVE;
+#endif
   else {
 #if (NXP_EXTNS == TRUE)
     if (p_cb->ee_status != NFA_EE_STATUS_REMOVED)
@@ -940,6 +1204,8 @@
 #if (NXP_EXTNS == TRUE)
   tNFA_EE_ECB* dh_ecb = NULL;
   uint8_t aid_info = p_add->aid_info;
+  uint16_t aid_config_length_max = 0;
+  uint16_t aid_entries_max = 0;
 #endif
   tNFA_EE_ECB* p_chk_cb;
   uint8_t* p, *p_start;
@@ -997,21 +1263,27 @@
 
     /* make sure the control block has enough room to hold this entry */
     len_needed = p_add->aid_len + 2; /* tag/len */
-
+    if((nfcFL.chipType != pn547C2) &&
+            (nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN == true)) {
+        aid_config_length_max = max_aid_config_length;
+        aid_entries_max = max_aid_entries;
+    }
+    else{
+        aid_config_length_max = NFA_EE_MAX_AID_CFG_LEN_STAT;
+        aid_entries_max = nfcFL.nfcMwFL._NFA_EE_MAX_AID_ENTRIES;
+    }
     if ((len_needed + len) >
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-        max_aid_config_length
+#if (NXP_EXTNS == TRUE)
+    aid_config_length_max
 #else
-        NFA_EE_MAX_AID_CFG_LEN
+    NFA_EE_MAX_AID_CFG_LEN
 #endif
         ) {
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
+#if (NXP_EXTNS == TRUE)
       NFA_TRACE_ERROR3(
           "Exceed capacity: (len_needed:%d + len:%d) > "
           "max_aid_config_length:%d",
-          len_needed, len, max_aid_config_length);
+          len_needed, len, aid_config_length_max);
 #else
       NFA_TRACE_ERROR3(
           "Exceed capacity: (len_needed:%d + len:%d) > "
@@ -1021,11 +1293,7 @@
       evt_data.status = NFA_STATUS_BUFFER_FULL;
     }
 #if (NXP_EXTNS == TRUE)
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-    else if (dh_ecb->aid_entries < max_aid_entries)
-#else
-    else if (dh_ecb->aid_entries < NFA_EE_MAX_AID_ENTRIES)
-#endif
+    else if (dh_ecb->aid_entries < aid_entries_max)
 #else
     else if (p_cb->aid_entries < NFA_EE_MAX_AID_ENTRIES)
 #endif
@@ -1065,12 +1333,11 @@
 #endif
       }
     } else {
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-      NFA_TRACE_ERROR1("Exceed NFA_EE_MAX_AID_ENTRIES:%d", max_aid_entries);
+#if (NXP_EXTNS == TRUE)
+            NFA_TRACE_ERROR1("Exceed NFA_EE_MAX_AID_ENTRIES:%d", aid_entries_max);
 #else
-      NFA_TRACE_ERROR1("Exceed NFA_EE_MAX_AID_ENTRIES:%d",
-                       NFA_EE_MAX_AID_ENTRIES);
+        NFA_TRACE_ERROR1("Exceed NFA_EE_MAX_AID_ENTRIES:%d",
+                NFA_EE_MAX_AID_ENTRIES);
 #endif
       evt_data.status = NFA_STATUS_BUFFER_FULL;
     }
@@ -1159,36 +1426,50 @@
                        p_data->rm_aid.aid_len)) {
     uint32_t xx;
     tNFA_EE_ECB* p_cb = nfa_ee_cb.ecb;
-    for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) {
-#if ((NXP_EXTNS == TRUE) &&                                               \
-     (((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && \
-      (NFC_NXP_AID_MAX_SIZE_DYN == TRUE)))
-      memset(&p_cb->aid_cfg[0], 0x00, max_aid_config_length);
-      memset(&p_cb->aid_len[0], 0x00, max_aid_entries);
-      memset(&p_cb->aid_pwr_cfg[0], 0x00, max_aid_entries);
-      memset(&p_cb->aid_rt_info[0], 0x00, max_aid_entries);
-      memset(&p_cb->aid_info[0], 0x00, max_aid_entries);
+    for (xx = 0; xx < nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) {
+#if (NXP_EXTNS == TRUE)
+        if((nfcFL.chipType != pn547C2) &&
+                (nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN == true)) {
+            memset(&p_cb->aid_cfg[0], 0x00, max_aid_config_length);
+            memset(&p_cb->aid_len[0], 0x00, max_aid_entries);
+            memset(&p_cb->aid_pwr_cfg[0], 0x00, max_aid_entries);
+            memset(&p_cb->aid_info[0], 0x00, max_aid_entries);
+            memset(&p_cb->aid_rt_info[0], 0x00, max_aid_entries);
+        }
+        else {
+            memset(&p_cb->aid_cfg[0], 0x00, sizeof(p_cb->aid_cfg));
+            memset(&p_cb->aid_len[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+            memset(&p_cb->aid_pwr_cfg[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+            memset(&p_cb->aid_rt_info[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+        }
 #else
-      memset(&p_cb->aid_cfg[0], 0x00, sizeof(p_cb->aid_cfg));
-      memset(&p_cb->aid_len[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
-      memset(&p_cb->aid_pwr_cfg[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
-      memset(&p_cb->aid_rt_info[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
-      memset(&p_cb->aid_info[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+        memset(&p_cb->aid_cfg[0], 0x00, sizeof(p_cb->aid_cfg));
+        memset(&p_cb->aid_len[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+        memset(&p_cb->aid_pwr_cfg[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+        memset(&p_cb->aid_rt_info[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+        memset(&p_cb->aid_info[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
 #endif
-      p_cb->aid_entries = 0;
-      nfa_ee_cb.ee_cfged |= nfa_ee_ecb_to_mask(p_cb);
+        p_cb->aid_entries = 0;
+        nfa_ee_cb.ee_cfged |= nfa_ee_ecb_to_mask(p_cb);
     }
 
     tNFA_EE_ECB* p_ecb = &nfa_ee_cb.ecb[NFA_EE_CB_4_DH];
 
-#if ((NXP_EXTNS == TRUE) &&                                               \
-     (((NFC_NXP_CHIP_TYPE == PN548C2) || (NFC_NXP_CHIP_TYPE == PN551)) && \
-      (NFC_NXP_AID_MAX_SIZE_DYN == TRUE)))
-    memset(&p_ecb->aid_cfg[0], 0x00, max_aid_config_length);
-    memset(&p_ecb->aid_len[0], 0x00, max_aid_entries);
-    memset(&p_ecb->aid_pwr_cfg[0], 0x00, max_aid_entries);
-    memset(&p_ecb->aid_rt_info[0], 0x00, max_aid_entries);
-    memset(&p_ecb->aid_info[0], 0x00, max_aid_entries);
+#if (NXP_EXTNS == TRUE)
+    if((nfcFL.chipType != pn547C2) &&
+            (nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN == true)) {
+        memset(&p_ecb->aid_cfg[0], 0x00, max_aid_config_length);
+        memset(&p_ecb->aid_len[0], 0x00, max_aid_entries);
+        memset(&p_ecb->aid_pwr_cfg[0], 0x00, max_aid_entries);
+        memset(&p_ecb->aid_info[0], 0x00, max_aid_entries);
+        memset(&p_ecb->aid_rt_info[0], 0x00, max_aid_entries);
+    }
+    else {
+        memset(&p_ecb->aid_cfg[0], 0x00, sizeof(p_ecb->aid_cfg));
+        memset(&p_ecb->aid_len[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+        memset(&p_ecb->aid_pwr_cfg[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+        memset(&p_ecb->aid_rt_info[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+    }
 #else
     memset(&p_ecb->aid_cfg[0], 0x00, sizeof(p_ecb->aid_cfg));
     memset(&p_ecb->aid_len[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
@@ -1253,9 +1534,11 @@
     if (p_chk_cb == p_cb) {
       p_cb->apdu_rt_info[entry] |= NFA_EE_AE_ROUTE;
       new_size = nfa_ee_total_lmrt_size();
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-      if (new_size > max_aid_config_length) {
+#if (NXP_EXTNS == TRUE)
+      if (((nfcFL.chipType != pn547C2) &&
+              nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN) && new_size > max_aid_config_length ||
+              ((nfcFL.chipType == pn547C2) &&
+                      !nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN) && (new_size > NFC_GetLmrtSize())) {
 #else
       if (new_size > NFC_GetLmrtSize()) {
 #endif
@@ -1285,19 +1568,29 @@
     len_needed = p_add->apdu_len + p_add->mask_len + 2 + 2; /*tag/len/apdu_mask/apdu/power_state/nfceeid*/
 
     if ((len_needed + aid_len + apdu_len) >
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-        max_aid_config_length
+#if (NXP_EXTNS == TRUE)
+    ((((nfcFL.chipType != pn547C2) &&
+            nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN) && max_aid_config_length) ||
+            (((nfcFL.chipType == pn547C2) &&
+                    !nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN) && NFC_GetLmrtSize()))
 #else
         NFC_GetLmrtSize()
 #endif
         ||((dh_ecb->size_apdu + p_add->apdu_len + p_add->mask_len + 2) >= NFA_EE_TOTAL_APDU_PATTERN_SIZE)) {
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-      NFA_TRACE_ERROR4(
-          "Exceed capacity: (len_needed:%d + len:%d) > "
-          "max_aid_config_length:%d",
-          len_needed, aid_len,apdu_len, max_aid_config_length);
+#if (NXP_EXTNS == TRUE)
+        if((nfcFL.chipType != pn547C2) &&
+                nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN) {
+            NFA_TRACE_ERROR4(
+                    "Exceed capacity: (len_needed:%d + len:%d) > "
+                    "max_aid_config_length:%d",
+                    len_needed, aid_len,apdu_len, max_aid_config_length);
+        }
+        else {
+            NFA_TRACE_ERROR4(
+                    "Exceed capacity: (len_needed:%d + len:%d) > "
+                    "NFA_EE_TOTAL_APDU_PATTERN_SIZE:%d",
+                    len_needed, aid_len,apdu_len, NFA_EE_TOTAL_APDU_PATTERN_SIZE);
+        }
 #else
       NFA_TRACE_ERROR4(
           "Exceed capacity: (len_needed:%d + len:%d) > "
@@ -1317,13 +1610,13 @@
         apdu_len = nfa_ee_find_total_apdu_len(dh_ecb, 0);
         // Always use single apdu_cfg buffer to keep the apdu order intact.
         dh_ecb->apdu_pwr_cfg[dh_ecb->apdu_pattern_entries] = p_add->power_state;
-        dh_ecb->apdu_rt_info[dh_ecb->apdu_pattern_entries] = NFA_EE_AE_ROUTE | (p_cb->nfcee_id << 8);
+        dh_ecb->apdu_rt_info[dh_ecb->apdu_pattern_entries] = NFA_EE_AE_ROUTE;
+        dh_ecb->apdu_rt_loc[dh_ecb->apdu_pattern_entries] = p_cb->nfcee_id;
         p = dh_ecb->apdu_cfg + apdu_len;
 #else
-            memset(&p_cb->aid_cfg[0],0x00, sizeof(p_cb->aid_cfg));
-            memset(&p_cb->aid_len[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
-            memset(&p_cb->aid_pwr_cfg[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
-            memset(&p_cb->aid_rt_info[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+        p_cb->apdu_pwr_cfg[p_cb->apdu_pattern_entries] = p_add->power_state;
+        p_cb->apdu_rt_info[p_cb->apdu_pattern_entries] = NFA_EE_AE_ROUTE;
+        p = p_cb->apdu_cfg + apdu_len;
 #endif
 
         p_start = p;
@@ -1337,10 +1630,7 @@
 #if (NXP_EXTNS == TRUE)
         dh_ecb->apdu_len[dh_ecb->apdu_pattern_entries++] = (uint8_t)(p - p_start);
 #else
-        memset(&p_ecb->aid_cfg[0],0x00, sizeof(p_ecb->aid_cfg));
-        memset(&p_ecb->aid_len[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
-        memset(&p_ecb->aid_pwr_cfg[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
-        memset(&p_ecb->aid_rt_info[0], 0x00, NFA_EE_MAX_AID_ENTRIES);
+        p_cb->apdu_len[p_cb->apdu_pattern_entries++] = (uint8_t)(p - p_start);
 #endif
     }
     else
@@ -1409,7 +1699,9 @@
       GKI_shiftup(&p_cb->apdu_pwr_cfg[entry], &p_cb->apdu_pwr_cfg[entry + 1],
                  rest_len);
       GKI_shiftup(&p_cb->apdu_rt_info[entry], &p_cb->apdu_rt_info[entry + 1],
-                      rest_len * 2);
+                      rest_len);
+      GKI_shiftup(&p_cb->apdu_rt_loc[entry], &p_cb->apdu_rt_loc[entry + 1],
+                      rest_len);
     }
     /* else the last entry, just reduce the apdu_entries by 1 */
     p_cb->apdu_pattern_entries--;
@@ -1429,6 +1721,7 @@
         memset(&nfa_ee_cb.ecb[xx].apdu_len[0], 0x00, NFA_EE_MAX_APDU_PATTERN_ENTRIES);
         memset(&nfa_ee_cb.ecb[xx].apdu_pwr_cfg[0], 0x00, NFA_EE_MAX_APDU_PATTERN_ENTRIES);
         memset(&nfa_ee_cb.ecb[xx].apdu_rt_info[0], 0x00, NFA_EE_MAX_APDU_PATTERN_ENTRIES);
+        memset(&nfa_ee_cb.ecb[xx].apdu_rt_loc[0], 0x00, NFA_EE_MAX_APDU_PATTERN_ENTRIES);
         nfa_ee_cb.ecb[xx].apdu_pattern_entries = 0;
         nfa_ee_cb.ecb[xx].ecb_flags |= NFA_EE_ECB_FLAGS_APDU;
         nfa_ee_cb.ee_cfged |= nfa_ee_ecb_to_mask(&nfa_ee_cb.ecb[xx]);
@@ -1579,6 +1872,10 @@
   tNFA_EE_ECB* p_cb = p_data->disconnect.p_cb;
   tNFA_EE_CBACK_DATA evt_data = {0};
 
+#if(NXP_EXTNS == TRUE)
+  nfa_ee_cb.ee_flags |= NFA_EE_HCI_CONN_CLOSE;
+#endif
+
   if (p_cb->conn_st == NFA_EE_CONN_ST_CONN) {
     p_cb->conn_st = NFA_EE_CONN_ST_DISC;
     NFC_ConnClose(p_cb->conn_id);
@@ -1626,20 +1923,20 @@
       p_cback = nfa_ee_cb.p_ee_disc_cback;
       nfa_ee_cb.p_ee_disc_cback = NULL;
       evt_data.status = NFA_STATUS_OK;
-      evt_data.ee_discover.num_ee = NFA_EE_MAX_EE_SUPPORTED;
+      evt_data.ee_discover.num_ee = nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED;
       NFA_EeGetInfo(&evt_data.ee_discover.num_ee, evt_data.ee_discover.ee_info);
       nfa_ee_report_event(p_cback, NFA_EE_DISCOVER_EVT, &evt_data);
     }
 #if (NXP_EXTNS == TRUE)
-#if (NXP_NFCEE_REMOVED_NTF_RECOVERY == true)
-    else {
+    else if(nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY == true) {
       evt_data.status = NFA_STATUS_OK;
-      evt_data.ee_discover.num_ee = NFA_EE_MAX_EE_SUPPORTED;
+      evt_data.ee_discover.num_ee = nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED;
       NFA_AllEeGetInfo(&evt_data.ee_discover.num_ee,
                        evt_data.ee_discover.ee_info);
       nfa_ee_report_event(NULL, NFA_EE_DISCOVER_EVT, &evt_data);
     }
-#endif
+    if (nfa_ee_cb.p_enable_cback)
+                (*nfa_ee_cb.p_enable_cback) (NFA_EE_MODE_SET_COMPLETE);
 #endif
   }
 }
@@ -1682,7 +1979,7 @@
   tNFA_EE_ECB* p_cb;
   tNFA_EE_ECB* p_cb_n, *p_cb_end;
   int xx, num_removed = 0;
-  int first_removed = NFA_EE_MAX_EE_SUPPORTED;
+  int first_removed = nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED;
 
   p_cb = nfa_ee_cb.ecb;
   for (xx = 0; xx < nfa_ee_cb.cur_ee; xx++, p_cb++) {
@@ -1690,7 +1987,7 @@
         (p_cb->ee_status & NFA_EE_STATUS_RESTORING)) {
       p_cb->nfcee_id = NFA_EE_INVALID;
       num_removed++;
-      if (first_removed == NFA_EE_MAX_EE_SUPPORTED) first_removed = xx;
+      if (first_removed == nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED) first_removed = xx;
     }
   }
 
@@ -1753,8 +2050,8 @@
         /* if this is initiated by api function,
          * check if the number of NFCEE expected is more than what's currently
          * in CB */
-        if (num_nfcee > NFA_EE_MAX_EE_SUPPORTED)
-          num_nfcee = NFA_EE_MAX_EE_SUPPORTED;
+        if (num_nfcee > nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED)
+          num_nfcee = nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED;
         if (nfa_ee_cb.cur_ee < num_nfcee) {
           p_cb = &nfa_ee_cb.ecb[nfa_ee_cb.cur_ee];
           for (xx = nfa_ee_cb.cur_ee; xx < num_nfcee; xx++, p_cb++) {
@@ -1780,9 +2077,9 @@
 
   if (p_evt->status == NFC_STATUS_OK) {
     nfa_ee_cb.num_ee_expecting = p_evt->num_nfcee;
-    if (nfa_ee_cb.num_ee_expecting > NFA_EE_MAX_EE_SUPPORTED) {
+    if (nfa_ee_cb.num_ee_expecting > nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED) {
       NFA_TRACE_ERROR2("NFA-EE num_ee_expecting:%d > max:%d",
-                       nfa_ee_cb.num_ee_expecting, NFA_EE_MAX_EE_SUPPORTED);
+                       nfa_ee_cb.num_ee_expecting, nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED);
     }
   }
   nfa_ee_report_disc_done(notify_enable_done);
@@ -1825,7 +2122,7 @@
   }
   switch (nfa_ee_cb.em_state) {
     case NFA_EE_EM_STATE_INIT:
-      if (nfa_ee_cb.cur_ee < NFA_EE_MAX_EE_SUPPORTED) {
+      if (nfa_ee_cb.cur_ee < nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED) {
         /* the cb can collect up to NFA_EE_MAX_EE_SUPPORTED ee_info */
         p_cb = &nfa_ee_cb.ecb[nfa_ee_cb.cur_ee++];
       }
@@ -1926,7 +2223,7 @@
 #if (NXP_EXTNS == TRUE)
       if (nfa_dm_is_active()) {
         evt_data.status = p_cb->ee_status;
-        evt_data.ee_discover.num_ee = NFA_EE_MAX_EE_SUPPORTED;
+        evt_data.ee_discover.num_ee = nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED;
         NFA_EeGetInfo(&evt_data.ee_discover.num_ee,
                       evt_data.ee_discover.ee_info);
         nfa_ee_report_event(NULL, NFA_EE_DISCOVER_EVT, &evt_data);
@@ -1971,6 +2268,29 @@
 
 /*******************************************************************************
 **
+** Function         nfa_ee_nci_nfcee_status_ntf
+**
+** Description      Process the callback for NFCEE status notification
+**
+** Returns          void
+**
+*******************************************************************************/
+void nfa_ee_nci_nfcee_status_ntf(tNFA_EE_MSG* p_data) {
+  tNFC_NFCEE_STATUS_REVT* p_ee = p_data->nfcee_status_ntf.p_data;
+  NFA_TRACE_DEBUG3(
+      "nfa_ee_nci_nfcee_status_ntf() em_state:%d, nfcee_id:%d nfcee_status:%d",
+      nfa_ee_cb.em_state, p_ee->nfcee_id, p_ee->status);
+  tNFA_EE_ECB* p_cb = nfa_ee_find_ecb(p_ee->nfcee_id);
+  if(p_ee->status == NFC_NFCEE_STS_UNRECOVERABLE_ERROR) {
+    if(p_cb != NULL) {
+        if (nfa_ee_cb.p_enable_cback)
+                    (*nfa_ee_cb.p_enable_cback) (NFA_EE_RECOVERY);
+    }
+  }
+}
+
+/*******************************************************************************
+**
 ** Function         nfa_ee_check_restore_complete
 **
 ** Description      Check if restore the NFA-EE related configuration to the
@@ -2086,7 +2406,6 @@
   nfa_ee_report_event(NULL, NFA_EE_DISCOVER_REQ_EVT, (void*)&evt_data);
 }
 #if (NXP_EXTNS == TRUE)
-#if (NXP_WIRED_MODE_STANDBY == true)
 /*******************************************************************************
 **
 ** Function         nfa_ee_nci_pwr_link_ctrl_rsp
@@ -2097,16 +2416,20 @@
 **
 *******************************************************************************/
 void nfa_ee_nci_pwr_link_ctrl_rsp(tNFA_EE_MSG* p_data) {
-  tNFA_EE_ECB* p_cb;
-  tNFA_EE_PWR_LNK_CTRL pwr_lnk_ctrl;
-  tNFC_NFCEE_EE_PWR_LNK_REVT* p_rsp = p_data->pwr_lnk_ctrl_rsp.p_data;
-  pwr_lnk_ctrl.status = p_rsp->status;
-  NFA_TRACE_DEBUG1(" nfa_ee_nci_pwr_link_ctrl_rsp: status = %d ",
-                   pwr_lnk_ctrl.status);
-  nfa_ee_report_event(NULL, NFA_EE_PWR_LINK_CTRL_EVT,
-                      (tNFA_EE_CBACK_DATA*)&pwr_lnk_ctrl);
+    NFA_TRACE_DEBUG0(" nfa_ee_nci_pwr_link_ctrl_rsp()");
+    if(nfcFL.eseFL._WIRED_MODE_STANDBY != true) {
+        NFA_TRACE_DEBUG0(" WIRED_MODE_STANDBY() not available. Returning");
+        return;
+    }
+    tNFA_EE_ECB* p_cb;
+    tNFA_EE_PWR_LNK_CTRL pwr_lnk_ctrl;
+    tNFC_NFCEE_EE_PWR_LNK_REVT* p_rsp = p_data->pwr_lnk_ctrl_rsp.p_data;
+    pwr_lnk_ctrl.status = p_rsp->status;
+    NFA_TRACE_DEBUG1(" nfa_ee_nci_pwr_link_ctrl_rsp: status = %d ",
+            pwr_lnk_ctrl.status);
+    nfa_ee_report_event(NULL, NFA_EE_PWR_LINK_CTRL_EVT,
+            (tNFA_EE_CBACK_DATA*)&pwr_lnk_ctrl);
 }
-#endif
 /*******************************************************************************
 **
 ** Function         nfa_ee_nci_set_mode_info
@@ -2329,6 +2652,10 @@
         p_cb->conn_st = NFA_EE_CONN_ST_NONE;
         p_cb->p_ee_cback = NULL;
         p_cb->conn_id = 0;
+
+#if(NXP_EXTNS == TRUE)
+        nfa_ee_cb.ee_flags &= ~NFA_EE_HCI_CONN_CLOSE;
+#endif
         if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_DISABLING) {
           if (nfa_ee_cb.ee_flags & NFA_EE_FLAG_WAIT_DISCONN) {
             if (nfa_ee_cb.num_ee_expecting) {
@@ -2656,23 +2983,7 @@
   uint8_t* p_start;
   uint8_t new_size;
   tNFA_STATUS status = NFA_STATUS_OK;
-#if (NXP_NFCC_ROUTING_BLOCK_BIT == true)
-  uint8_t route_blacklist_mask = 0x00;
-  long retlen = 0;
-  NFA_TRACE_DEBUG1("NAME_NXP_PROP_BLACKLIST_ROUTING enter=0x%x",
-                   route_blacklist_mask);
-  if (GetNumValue(NAME_NXP_PROP_BLACKLIST_ROUTING, (void*)&retlen,
-                  sizeof(retlen))) {
-    if (retlen == 0x01) {
-      route_blacklist_mask = NFA_EE_NXP_ROUTE_BLOCK_BIT;
-      NFA_TRACE_DEBUG1("NAME_NXP_PROP_BLACKLIST_ROUTING change=0x%x",
-                       route_blacklist_mask);
-    } else {
-      NFA_TRACE_DEBUG1("NAME_NXP_PROP_BLACKLIST_ROUTING exit=0x%x",
-                       route_blacklist_mask);
-    }
-  }
-#endif
+
   nfa_ee_check_set_routing(p_cb->size_mask, p_max_len, ps, p_cur_offset);
   max_tlv = (uint8_t)((*p_max_len > NFA_EE_ROUT_MAX_TLV_SIZE)
                           ? NFA_EE_ROUT_MAX_TLV_SIZE
@@ -2710,10 +3021,7 @@
         if(p_cb->aid_info[xx] & NCI_ROUTE_QUAL_SHORT_SELECT)
           route_qual |= NCI_ROUTE_QUAL_SHORT_SELECT;
         *pp = NFC_ROUTE_TAG_AID | route_qual;
-#if (NXP_NFCC_ROUTING_BLOCK_BIT == true)
-          *pp |= route_blacklist_mask;
-#endif
-        pp++;
+         pp++;
         *pp++ = len + 2;
         *pp++ = p_cb->aid_rt_loc[xx];
         *pp++ = p_cb->aid_pwr_cfg[xx];
@@ -2756,37 +3064,28 @@
       power_cfg |= NCI_ROUTE_PWR_STATE_BATT_OFF;
 
     if (power_cfg != 0x00) {
-#if ((NFC_NXP_CHIP_TYPE == PN547C2))
-      if (p_cb->nfcee_id == NFC_DH_ID)
-        power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
-      else
-#endif
-      {
-        if (p_cb->proto_screen_lock & nfa_ee_proto_mask_list[xx])
-          power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
-        if (p_cb->proto_screen_off & nfa_ee_proto_mask_list[xx])
-          power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
-        if (p_cb->proto_screen_off_lock & nfa_ee_proto_mask_list[xx])
-            power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
-      }
+        if ((nfcFL.chipType == pn547C2) && (p_cb->nfcee_id == NFC_DH_ID)) {
+            power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
+        }
+        else {
+            if (p_cb->proto_screen_lock & nfa_ee_proto_mask_list[xx])
+                power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
+            if (p_cb->proto_screen_off & nfa_ee_proto_mask_list[xx])
+                power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
+            if (p_cb->proto_screen_off_lock & nfa_ee_proto_mask_list[xx])
+                power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
+        }
     }
     if (power_cfg) {
-      *proto_pp = NFC_ROUTE_TAG_PROTO;
-#if (NXP_NFCC_ROUTING_BLOCK_BIT == true)
-      /*Setting blocking bit for ISO-DEP and ISO7816 protocol only*/
-      if (nfa_ee_proto_list[xx] == NFC_PROTOCOL_ISO_DEP ||
-          nfa_ee_proto_list[xx] == NFC_PROTOCOL_ISO7816) {
-        *proto_pp |= route_blacklist_mask;
-      }
-#endif
-      proto_pp++;
-      *proto_pp++ = 3;
-      *proto_pp++ = p_cb->nfcee_id;
-      *proto_pp++ = power_cfg;
-      *proto_pp++ = nfa_ee_proto_list[xx];
-      proto_tlv_ctr++;
-      if (power_cfg != NCI_ROUTE_PWR_STATE_ON)
-        nfa_ee_cb.ee_cfged |= NFA_EE_CFGED_OFF_ROUTING;
+        *proto_pp = NFC_ROUTE_TAG_PROTO;
+        proto_pp++;
+        *proto_pp++ = 3;
+        *proto_pp++ = p_cb->nfcee_id;
+        *proto_pp++ = power_cfg;
+        *proto_pp++ = nfa_ee_proto_list[xx];
+        proto_tlv_ctr++;
+        if (power_cfg != NCI_ROUTE_PWR_STATE_ON)
+            nfa_ee_cb.ee_cfged |= NFA_EE_CFGED_OFF_ROUTING;
     }
   }
 
@@ -2882,32 +3181,24 @@
 #if (NXP_EXTNS == TRUE)
 
     if (power_cfg != 0x00) {
-#if ((NFC_NXP_CHIP_TYPE == PN547C2))
-      /* Blocking codes to enable protocol routing to host when screen is off.*/
-      if (p_cb->nfcee_id == NFC_DH_ID)
-        power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
-      else
-#endif
-      {
-        if (p_cb->proto_screen_lock & nfa_ee_proto_mask_list[xx])
-          power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
-        if (p_cb->proto_screen_off & nfa_ee_proto_mask_list[xx])
-          power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
-        if (p_cb->proto_screen_off_lock & nfa_ee_proto_mask_list[xx])
-            power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
-      }
+        /* Blocking codes to enable protocol routing to host when screen is off.*/
+        if ((nfcFL.chipType == pn547C2) && (p_cb->nfcee_id == NFC_DH_ID)) {
+            power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
+        }
+        else
+        {
+            if (p_cb->proto_screen_lock & nfa_ee_proto_mask_list[xx])
+                power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
+            if (p_cb->proto_screen_off & nfa_ee_proto_mask_list[xx])
+                power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
+            if (p_cb->proto_screen_off_lock & nfa_ee_proto_mask_list[xx])
+                power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
+        }
     }
 #endif
 
     if (power_cfg) {
       *pp = NFC_ROUTE_TAG_PROTO;
-#if (NXP_NFCC_ROUTING_BLOCK_BIT == true)
-      /*Setting blocking bit for ISO-DEP and ISO7816 protocol only*/
-      if (nfa_ee_proto_list[xx] == NFC_PROTOCOL_ISO_DEP ||
-          nfa_ee_proto_list[xx] == NFC_PROTOCOL_ISO7816) {
-        *pp |= route_blacklist_mask;
-      }
-#endif
       *pp++;
       *pp++ = 3;
       *pp++ = p_cb->nfcee_id;
@@ -2971,11 +3262,7 @@
         if(p_cb->aid_info[xx] & NCI_ROUTE_QUAL_SHORT_SELECT)
           route_qual |= NCI_ROUTE_QUAL_SHORT_SELECT;
         *pp = NFC_ROUTE_TAG_AID | route_qual;
-#if (NXP_NFCC_ROUTING_BLOCK_BIT == true)
-          // This aid is for exact match.
-          *pp |= (route_blacklist_mask);
-#endif
-          pp++;
+         pp++;
 #else
         *pp++ = NFC_ROUTE_TAG_AID;
 #endif
@@ -3089,284 +3376,41 @@
 ** Returns          NFA_STATUS_OK, if ok to continue
 **
 *******************************************************************************/
-void nfa_ee_route_add_one_ecb_by_route_order(tNFA_EE_ECB* p_cb,int rout_type ,int* p_max_len,
-                                      bool more, uint8_t* ps,
-                                      int* p_cur_offset) {
-  uint8_t *p, *pa;
-  uint16_t tlv_size;
-  uint8_t num_tlv, len;
-  int xx;
-  int start_offset;
-  uint8_t power_cfg = 0;
-  uint8_t* pp = ps + *p_cur_offset;
-  uint8_t entry_size;
-  uint8_t max_tlv;
-  uint8_t* p_start;
-  uint8_t new_size;
-#if (NXP_NFCC_ROUTING_BLOCK_BIT == true)
-  uint8_t route_blacklist_mask = 0x00;
-  long retlen = 0;
-  NFA_TRACE_DEBUG1("NAME_NXP_PROP_BLACKLIST_ROUTING enter=0x%x",
-                   route_blacklist_mask);
-  if (GetNumValue(NAME_NXP_PROP_BLACKLIST_ROUTING, (void*)&retlen,
-                  sizeof(retlen))) {
-    if (retlen == 0x01) {
-      route_blacklist_mask = NFA_EE_NXP_ROUTE_BLOCK_BIT;
-      NFA_TRACE_DEBUG1("NAME_NXP_PROP_BLACKLIST_ROUTING change=0x%x",
-                       route_blacklist_mask);
-    } else {
-      NFA_TRACE_DEBUG1("NAME_NXP_PROP_BLACKLIST_ROUTING exit=0x%x",
-                       route_blacklist_mask);
+void nfa_ee_route_add_one_ecb_by_route_order(tNFA_EE_ECB* p_cb, int rout_type,
+                                             int* p_max_len, bool more,
+                                             uint8_t* ps, int* p_cur_offset) {
+  nfa_ee_check_set_routing(p_cb->size_mask, p_max_len, ps, p_cur_offset);
+
+  /* use the first byte of the buffer (ps) to keep the num_tlv */
+  uint8_t num_tlv = *ps;
+  NFA_TRACE_DEBUG6(
+      "%s - max_len:%d, cur_offset:%d, more:%d, num_tlv:%d,rout_type:- %d",
+      __func__, *p_max_len, *p_cur_offset, more, num_tlv, rout_type);
+  uint8_t* pp = ps + 1 + *p_cur_offset;
+  uint8_t* p = pp;
+  uint16_t tlv_size = (uint8_t)*p_cur_offset;
+
+  switch (rout_type) {
+    case NCI_ROUTE_ORDER_TECHNOLOGY: {
+      nfa_ee_add_tech_route_to_ecb(p_cb, pp, p, ps, p_cur_offset);
+    } break;
+
+    case NCI_ROUTE_ORDER_PROTOCOL: {
+      nfa_ee_add_proto_route_to_ecb(p_cb, pp, p, ps, p_cur_offset);
+    } break;
+    case NCI_ROUTE_ORDER_AID: {
+      nfa_ee_add_aid_route_to_ecb(p_cb, pp, p, ps, p_cur_offset, p_max_len);
+    } break;
+        case NCI_ROUTE_ORDER_PATTERN: {
+        nfa_ee_add_apdu_route_to_ecb(p_cb, pp, p, ps, p_cur_offset, p_max_len);
+    } break;
+    default: {
+      NFA_TRACE_DEBUG2("%s -  Route type - NA:- %d", __func__, rout_type);
     }
   }
-#endif
-  nfa_ee_check_set_routing(p_cb->size_mask, p_max_len, ps, p_cur_offset);
-  max_tlv = (uint8_t)((*p_max_len > NFA_EE_ROUT_MAX_TLV_SIZE)
-                          ? NFA_EE_ROUT_MAX_TLV_SIZE
-                          : *p_max_len);
-  /* use the first byte of the buffer (ps) to keep the num_tlv */
+
+  /* update the total number of entries */
   num_tlv = *ps;
-  NFA_TRACE_DEBUG6(
-      "nfa_ee_route_add_one_ecb_by_route_order max_len:%d, max_tlv:%d, cur_offset:%d, "
-      "more:%d, num_tlv:%d,rout_type:- %d",
-      *p_max_len, max_tlv, *p_cur_offset, more, num_tlv, rout_type);
-  pp = ps + 1 + *p_cur_offset;
-  p = pp;
-  tlv_size = (uint8_t)*p_cur_offset;
-    switch (rout_type)
-    {
-        case NCI_ROUTE_ORDER_TECHNOLOGY:
-        {
-            /* add the Technology based routing */
-          for (xx = 0; xx < NFA_EE_NUM_TECH; xx++) {
-            power_cfg = 0;
-            if (p_cb->tech_switch_on & nfa_ee_tech_mask_list[xx])
-                power_cfg |= NCI_ROUTE_PWR_STATE_ON;
-            if (p_cb->tech_switch_off & nfa_ee_tech_mask_list[xx])
-                power_cfg |= NCI_ROUTE_PWR_STATE_SWITCH_OFF;
-            if (p_cb->tech_battery_off & nfa_ee_tech_mask_list[xx])
-                power_cfg |= NCI_ROUTE_PWR_STATE_BATT_OFF;
-            if (power_cfg & NCI_ROUTE_PWR_STATE_ON) {
-              if (p_cb->tech_screen_lock & nfa_ee_tech_mask_list[xx])
-                power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
-              if (p_cb->tech_screen_off & nfa_ee_tech_mask_list[xx])
-                power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
-              if (p_cb->tech_screen_off_lock & nfa_ee_tech_mask_list[xx])
-                  power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
-            }
-            if (power_cfg) {
-                *pp++ = NFC_ROUTE_TAG_TECH;
-                *pp++ = 3;
-                *pp++ = p_cb->nfcee_id;
-                *pp++ = power_cfg;
-                *pp++ = nfa_ee_tech_list[xx];
-                num_tlv++;
-                if (power_cfg != NCI_ROUTE_PWR_STATE_ON)
-                    nfa_ee_cb.ee_cfged |= NFA_EE_CFGED_OFF_ROUTING;
-            }
-        }
-        /* update the num_tlv and current offset */
-        entry_size = (uint8_t)(pp - p);
-        *p_cur_offset += entry_size;
-        *ps = num_tlv;
-        }
-        break;
-
-        case NCI_ROUTE_ORDER_PROTOCOL:
-        {
-            /* add the Protocol based routing */
-            for (xx = 0; xx < NFA_EE_NUM_PROTO; xx++) {
-            power_cfg = 0;
-            if (p_cb->proto_switch_on & nfa_ee_proto_mask_list[xx])
-                power_cfg |= NCI_ROUTE_PWR_STATE_ON;
-            if (p_cb->proto_switch_off & nfa_ee_proto_mask_list[xx])
-                power_cfg |= NCI_ROUTE_PWR_STATE_SWITCH_OFF;
-            if (p_cb->proto_battery_off & nfa_ee_proto_mask_list[xx])
-                power_cfg |= NCI_ROUTE_PWR_STATE_BATT_OFF;
-            if (power_cfg != 0x00) {
-              if (p_cb->nfcee_id == NFC_DH_ID)
-                power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
-              else
-              {
-                if (p_cb->proto_screen_lock & nfa_ee_proto_mask_list[xx])
-                  power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
-                if (p_cb->proto_screen_off & nfa_ee_proto_mask_list[xx])
-                  power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_UNLOCK();
-                if (p_cb->proto_screen_off_lock & nfa_ee_proto_mask_list[xx])
-                    power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_OFF_LOCK();
-              }
-            }
-            if (power_cfg) {
-              /* Route Block/Screen Lock power state is only applicable for
-               * ISO DEP Protocol*/
-              if(nfa_ee_proto_mask_list[xx] == NFA_PROTOCOL_MASK_ISO_DEP || nfa_ee_proto_mask_list[xx] == NFC_PROTOCOL_MASK_ISO7816)
-              {
-#if (NXP_NFCC_ROUTING_BLOCK_BIT == true)
-                *pp++ = NFC_ROUTE_TAG_PROTO | route_blacklist_mask;
-#else
-                *pp++ = NFC_ROUTE_TAG_PROTO;
-#endif
-                power_cfg |= NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
-              }
-              else
-              {
-                *pp++ = NFC_ROUTE_TAG_PROTO;
-              }
-
-              *pp++ = 3;
-              *pp++ = p_cb->nfcee_id;
-              *pp++ = power_cfg;
-              *pp++ = nfa_ee_proto_list[xx];
-              num_tlv++;
-              if (power_cfg != NCI_ROUTE_PWR_STATE_ON)
-                nfa_ee_cb.ee_cfged |= NFA_EE_CFGED_OFF_ROUTING;
-            }
-          }
-
-            /* add NFC-DEP routing to HOST */
-            if ((p_cb->nfcee_id == NFC_DH_ID) &&
-                !(nfa_ee_cb.ee_flags & NFA_EE_FLAG_CFG_NFC_DEP)) {
-              nfa_ee_cb.ee_flags |= NFA_EE_FLAG_CFG_NFC_DEP;
-              *pp++ = NFC_ROUTE_TAG_PROTO;
-              *pp++ = 3;
-              *pp++ = NFC_DH_ID;
-              *pp++ = NCI_ROUTE_PWR_STATE_ON;
-              if (gNfaProvisionMode) {
-                /* only if device is in provision mode, set power state to screen locked
-                 */
-                *proto_pp++ = NCI_ROUTE_PWR_STATE_ON | NCI_ROUTE_PWR_STATE_SCREEN_ON_LOCK();
-              } else {
-                *proto_pp++ = NCI_ROUTE_PWR_STATE_ON;
-              }
-              *pp++ = NFC_PROTOCOL_NFC_DEP;
-              num_tlv++;
-              NFA_TRACE_DEBUG0("nfa_ee_route_add_one_ecb_by_route_order --- NFC DEP added for DH!!!");
-            }
-            /* update the num_tlv and current offset */
-            entry_size = (uint8_t)(pp - p);
-            *p_cur_offset += entry_size;
-            *ps = num_tlv;
-          }
-        break;
-        case NCI_ROUTE_ORDER_AID:
-        {
-            /* add the AID routing */
-            if (p_cb->aid_entries) {
-                start_offset = 0;
-                for (xx = 0; xx < p_cb->aid_entries; xx++) {
-                /* remember the beginning of this AID routing entry, just in case we need
-                * to put it in next command */
-                  uint8_t route_qual = 0;
-                p_start = pp;
-                /* add one AID entry */
-                if (p_cb->aid_rt_info[xx] & NFA_EE_AE_ROUTE) {
-                    num_tlv++;
-                    pa = &p_cb->aid_cfg[start_offset];
-                    pa++;        /* EMV tag */
-                    len = *pa++; /* aid_len */
-                    NFA_TRACE_DEBUG1(
-                        "nfa_ee_route_add_one_ecb_by_route_order p_cb->aid_info%x",p_cb->aid_info[xx]);
-                    if(p_cb->aid_info[xx] & NCI_ROUTE_QUAL_LONG_SELECT) {
-                        NFA_TRACE_DEBUG1(
-                            "nfa_ee_route_add_one_ecb_by_route_ordersuraj %x",p_cb->aid_info[xx] & NCI_ROUTE_QUAL_LONG_SELECT);
-                        route_qual |= NCI_ROUTE_QUAL_LONG_SELECT;
-                    }
-                    if(p_cb->aid_info[xx] & NCI_ROUTE_QUAL_SHORT_SELECT) {
-                        NFA_TRACE_DEBUG1(
-                            "nfa_ee_route_add_one_ecb_by_route_ordersuraj2 %x",p_cb->aid_info[xx] & NCI_ROUTE_QUAL_SHORT_SELECT);
-                      route_qual |= NCI_ROUTE_QUAL_SHORT_SELECT;
-                    }
-#if (NXP_NFCC_ROUTING_BLOCK_BIT == true)
-                    *pp++ = NFC_ROUTE_TAG_AID | route_blacklist_mask | route_qual;
-#else
-                    *pp++ = NFC_ROUTE_TAG_AID | route_qual;
-#endif
-                    *pp++ = len + 2;
-                    *pp++ = p_cb->aid_rt_loc[xx];
-                    *pp++ = p_cb->aid_pwr_cfg[xx];
-                    /* copy the AID */
-                    memcpy(pp, pa, len);
-                    pp += len;
-                }
-                start_offset += p_cb->aid_len[xx];
-                new_size = (uint8_t)(pp - p_start);
-                nfa_ee_check_set_routing(new_size, p_max_len, ps, p_cur_offset);
-                if (*ps == 0) {
-                    /* just sent routing command, update local */
-                    *ps = 1;
-                    num_tlv = *ps;
-                    *p_cur_offset = new_size;
-                    pp = ps + 1;
-                    p = pp;
-                    tlv_size = (uint8_t)*p_cur_offset;
-                    max_tlv = (uint8_t)((*p_max_len > NFA_EE_ROUT_MAX_TLV_SIZE)
-                                        ? NFA_EE_ROUT_MAX_TLV_SIZE
-                                        : *p_max_len);
-                    memcpy(p, p_start, new_size);
-                    pp += new_size;
-                    } else {
-                    /* add the new entry */
-                    *ps = num_tlv;
-                    *p_cur_offset += new_size;
-                    }
-                }
-            }
-            else
-            {
-                NFA_TRACE_DEBUG0("nfa_ee_route_add_one_ecb_by_route_order --- No AID Enteries Available");
-            }
-        }
-        break;
-        case NCI_ROUTE_ORDER_PATTERN:
-          /* add the AID routing */
-          if (p_cb->apdu_pattern_entries) {
-            start_offset = 0;
-            for (xx = 0; xx < p_cb->apdu_pattern_entries; xx++) {
-                p_start = pp;
-                /* add one AID entry */
-                if (p_cb->apdu_rt_info[xx] & NFA_EE_AE_ROUTE) {
-                    num_tlv++;
-                    pa = &p_cb->apdu_cfg[start_offset];
-                    pa++;        /* EMV tag */
-                    len = *pa++; /* aid_len */
-                    *pp++ = NFC_ROUTE_TAG_APDU;
-                    *pp++ = len + 2;
-                    *pp++ = (p_cb->apdu_rt_info[xx] >> NFA_EE_APDU_ROUTE_MASK);
-                    *pp++ = p_cb->aid_pwr_cfg[xx];
-                    /* copy the AID */
-                    memcpy(pp, pa, len);
-                    pp += len;
-                }
-            }
-            start_offset += p_cb->aid_len[xx];
-            new_size = (uint8_t)(pp - p_start);
-            nfa_ee_check_set_routing(new_size, p_max_len, ps, p_cur_offset);
-            if (*ps == 0) {
-              /* just sent routing command, update local */
-              *ps = 1;
-               num_tlv = *ps;
-               *p_cur_offset = new_size;
-               pp = ps + 1;
-               p = pp;
-               tlv_size = (uint8_t)*p_cur_offset;
-               max_tlv = (uint8_t)((*p_max_len > NFA_EE_ROUT_MAX_TLV_SIZE)
-                                    ? NFA_EE_ROUT_MAX_TLV_SIZE
-                                    : *p_max_len);
-               memcpy(p, p_start, new_size);
-               pp += new_size;
-               } else {
-                /* add the new entry */
-                 *ps = num_tlv;
-                 *p_cur_offset += new_size;
-            }
-          }
-        break;
-        default:
-        {
-            NFA_TRACE_DEBUG1("nfa_ee_route_add_one_ecb_by_route_order -- Rout type- NA:- %d", rout_type);
-        }
-        break;
-    }
 
   tlv_size = nfa_ee_total_lmrt_size();
   if (tlv_size) {
@@ -3386,9 +3430,8 @@
       } else {
         nfa_ee_cb.ee_cfg_sts &= ~NFA_EE_STS_PREV_ROUTING;
       }
-      NFA_TRACE_DEBUG2(
-          "nfa_ee_route_add_one_ecb_by_route_order: set routing num_tlv:%d tlv_size:%d",
-          num_tlv, tlv_size);
+      NFA_TRACE_DEBUG3("%s : set routing num_tlv:%d tlv_size:%d", __func__,
+                       num_tlv, tlv_size);
       if (NFC_SetRouting(more, num_tlv, (uint8_t)(*p_cur_offset), ps + 1) ==
           NFA_STATUS_OK) {
         nfa_ee_cb.wait_rsp++;
@@ -3538,8 +3581,9 @@
   tNFA_EE_ECB* p_cb;
   uint8_t* p = NULL;
   bool more = true;
+  bool check = true;
   uint8_t last_active = NFA_EE_INVALID;
-  int max_len, len;
+  int max_len;
   tNFA_STATUS status = NFA_STATUS_FAILED;
   int cur_offset;
   uint8_t max_tlv;
@@ -3549,12 +3593,17 @@
 #endif
   (void)p_data;
 
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_CHIP_TYPE != PN547C2) && \
-     (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-  NFA_TRACE_DEBUG1("max supported routing table size: %d",
-                   max_routing_table_size);
-  /* update routing table: DH and the activated NFCEEs */
-  p = (uint8_t*)GKI_getbuf(max_routing_table_size);
+#if (NXP_EXTNS == TRUE)
+  if((nfcFL.chipType != pn547C2) &&
+          (nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN == true)) {
+      NFA_TRACE_DEBUG1("max supported routing table size: %d",
+              max_routing_table_size);
+      /* update routing table: DH and the activated NFCEEs */
+      p = (uint8_t*)GKI_getbuf(max_routing_table_size);
+  }
+  else {
+      p = (uint8_t*)GKI_getbuf(NFA_EE_ROUT_BUF_SIZE_STAT);
+  }
 #else
   /* update routing table: DH and the activated NFCEEs */
   p = (uint8_t*)GKI_getbuf(NFA_EE_ROUT_BUF_SIZE);
@@ -3605,13 +3654,12 @@
     }
   }
   if (last_active == NFA_EE_INVALID) {
-    more = false;
+     check = false;
   }
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
-  find_and_resolve_tech_conflict();
-#endif
-  /* add the routing for DH first */
-  status = NFA_STATUS_OK;
+  if(nfcFL.chipType != pn547C2) {
+      find_and_resolve_tech_conflict();
+  }
+
   max_len = NFC_GetLmrtSize();
   max_tlv =
       (uint8_t)((max_len > NFA_EE_ROUT_MAX_TLV_SIZE) ? NFA_EE_ROUT_MAX_TLV_SIZE
@@ -3619,44 +3667,22 @@
   cur_offset = 0;
   /* use the first byte of the buffer (p) to keep the num_tlv */
   *p = 0;
-#if(NXP_NFCC_LISTEN_ROUTING_TABLE_ORDER == true)
-  for (rt = NCI_ROUTE_ORDER_AID; rt <= NCI_ROUTE_ORDER_TECHNOLOGY; rt++) {
-      /* add the routing entries for NFCEEs */
-      p_cb = &nfa_ee_cb.ecb[0];
-      for (xx = 0; (xx < nfa_ee_cb.cur_ee) && more; xx++, p_cb++) {
-          if (p_cb->ee_status == NFC_NFCEE_STATUS_ACTIVE) {
-              NFA_TRACE_DEBUG0("nfa_ee_lmrt_to_nfcc --add the routing for NFCEEs!!");
-              nfa_ee_route_add_one_ecb_by_route_order(p_cb,rt, &max_len, more, p, &cur_offset);
-          }
-      }
-      if (rt == NCI_ROUTE_ORDER_TECHNOLOGY) more = false;
-      /* add the routing entries for DH */
-      NFA_TRACE_DEBUG0("nfa_ee_lmrt_to_nfcc --add the routing for DH!!");
-      nfa_ee_route_add_one_ecb_by_route_order(&nfa_ee_cb.ecb[NFA_EE_CB_4_DH],rt, &max_len,
-              more, p, &cur_offset);
-  }
-#else
-  status = nfa_ee_route_add_one_ecb(&nfa_ee_cb.ecb[NFA_EE_CB_4_DH], &max_len,
-                                    more, p, &cur_offset);
-
-  /* add only what is supported by NFCC. report overflow */
-  if (status == NFA_STATUS_OK) {
-    /* add the routing for NFCEEs */
+  for (int rt = NCI_ROUTE_ORDER_AID; rt <= NCI_ROUTE_ORDER_TECHNOLOGY; rt++) {
+    /* add the routing entries for NFCEEs */
     p_cb = &nfa_ee_cb.ecb[0];
-    for (xx = 0; (xx < nfa_ee_cb.cur_ee) && more; xx++, p_cb++) {
-      len = 0;
-      if (p_cb->ee_status == NFC_NFCEE_STATUS_ACTIVE) {
-        NFA_TRACE_DEBUG2("nfcee_id:0x%x, last_active: 0x%x", p_cb->nfcee_id,
-                         last_active);
-        if (last_active == p_cb->nfcee_id) more = false;
-        status = nfa_ee_route_add_one_ecb(p_cb, &max_len, more, p, &cur_offset);
-        if (status != NFA_STATUS_OK) {
-          more = false;
-        }
+  for (xx = 0; (xx < nfa_ee_cb.cur_ee) && check; xx++, p_cb++) {
+    if (p_cb->ee_status == NFC_NFCEE_STATUS_ACTIVE) {
+        NFA_TRACE_DEBUG1("%s --add the routing for NFCEEs!!", __func__);
+        nfa_ee_route_add_one_ecb_by_route_order(p_cb, rt, &max_len, more, p,
+                                                &cur_offset);
       }
     }
+    if (rt == NCI_ROUTE_ORDER_TECHNOLOGY) more = false;
+    /* add the routing entries for DH */
+    NFA_TRACE_DEBUG1("%s --add the routing for DH!!", __func__);
+    nfa_ee_route_add_one_ecb_by_route_order(&nfa_ee_cb.ecb[NFA_EE_CB_4_DH], rt,
+                                            &max_len, more, p, &cur_offset);
   }
-#endif
 #if (NXP_EXTNS == TRUE)
   nfa_ee_cb.ee_flags &= ~NFA_EE_FLAG_CFG_NFC_DEP;
   evt_data.status = status;
@@ -3681,7 +3707,6 @@
 #endif /* - Routing entries optimization */
 }
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 /*******************************************************************************
 **
 ** Function         find_and_resolve_tech_conflict
@@ -3694,6 +3719,9 @@
 *******************************************************************************/
 
 void find_and_resolve_tech_conflict() {
+    if(nfcFL.chipType == pn547C2) {
+        NFA_TRACE_DEBUG1("%s: chipType : pn547C2. Returning", __func__);
+    }
   int yy, xx;
   tNFA_EE_ECB* p_cb = nfa_ee_cb.ecb;
   uint8_t techA_found = 0, techF_found = 0;
@@ -3705,7 +3733,7 @@
   NFA_TRACE_DEBUG1("%s:Enter", __func__);
 
   // Finding the Technology and nfcee_id supported
-  for (yy = 0; yy < NFA_EE_MAX_EE_SUPPORTED; yy++, p_cb++) {
+  for (yy = 0; yy < nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED; yy++, p_cb++) {
     for (xx = 0; xx < 3; xx++) {
       if ((p_cb->tech_switch_on & nfa_ee_tech_mask_list[xx]) ==
           NFA_TECHNOLOGY_MASK_A) {
@@ -3781,7 +3809,7 @@
     }
 
     p_cb = nfa_ee_cb.ecb;
-    for (yy = 0; yy < NFA_EE_MAX_EE_SUPPORTED; yy++, p_cb++) {
+    for (yy = 0; yy < nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED; yy++, p_cb++) {
       if (p_cb->nfcee_id == ee_from_rm) {
         for (xx = 0; xx < 3; xx++) {
           if (((p_cb->tech_switch_on & nfa_ee_tech_mask_list[xx]) ==
@@ -3798,7 +3826,6 @@
     NFA_TRACE_DEBUG1("%s:Exit", __func__);
   }
 }
-#endif
 
 /*******************************************************************************
 **
@@ -3856,11 +3883,13 @@
   int len;
   len = nfa_all_ee_find_total_aid_len() + 2 /* tag/len */ +
         2 /*route/power state*/;
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-  return len < max_aid_config_length ? len : max_aid_config_length;
-#else
-  return len < NFA_EE_MAX_AID_CFG_LEN ? len : NFA_EE_MAX_AID_CFG_LEN;
-#endif
+  if((nfcFL.chipType != pn547C2) &&
+          (nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN == true)) {
+      return len < max_aid_config_length ? len : max_aid_config_length;
+  }
+  else {
+      return len < NFA_EE_MAX_AID_CFG_LEN_STAT ? len : NFA_EE_MAX_AID_CFG_LEN_STAT;
+  }
 }
 
 bool nfa_ee_nfeeid_active(uint8_t nfee_id) {
@@ -3878,7 +3907,6 @@
   return status;
 }
 
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 /*******************************************************************************
 **
 ** Function         nfa_ee_find_max_aid_config_length
@@ -3889,6 +3917,7 @@
 **
 *******************************************************************************/
 uint16_t nfa_ee_find_max_aid_config_length() {
+    NFA_TRACE_DEBUG0("nfa_ee_find_max_aid_config_length");
   /**
    * Max Routing Table Size = 720
    * After allocating size for Technology based routing and Protocol based
@@ -3908,9 +3937,15 @@
    * BUFFER for future extensions = 15
    * TOTAL SIZE FOR AID = 675 - 15 = 660
    */
-
-  return (max_routing_table_size -
-          NFA_EE_TOTAL_PROTO_TECH_FUTURE_EXT_ROUTE_SIZE);
+    if((nfcFL.chipType != pn547C2) &&
+            (nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN == true)) {
+        return (max_routing_table_size -
+                NFA_EE_TOTAL_PROTO_TECH_FUTURE_EXT_ROUTE_SIZE);
+    }
+    else{
+        NFA_TRACE_DEBUG0("Not allowed for chip type. Returning");
+        return 0;
+    }
 }
 
 /*******************************************************************************
@@ -3923,9 +3958,16 @@
 **
 *******************************************************************************/
 uint16_t nfa_ee_api_get_max_aid_config_length() {
-  NFA_TRACE_DEBUG1("nfa_ee_api_get_max_aid_config_length: %d",
-                   max_aid_config_length);
-  return max_aid_config_length;
+    NFA_TRACE_DEBUG0("nfa_ee_api_get_max_aid_config_length");
+    if((nfcFL.chipType != pn547C2) &&
+            (nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN == true)) {
+        NFA_TRACE_DEBUG1("nfa_ee_api_get_max_aid_config_length: %d",
+                max_aid_config_length);
+        return max_aid_config_length;
+    }
+    else{
+        NFA_TRACE_DEBUG0("Not allowed for chip type. Returning");
+        return 0;
+    }
 }
 #endif
-#endif
diff --git a/src/nfa/ee/nfa_ee_api.c b/src/nfa/ee/nfa_ee_api.c
index 7081089..0768366 100644
--- a/src/nfa/ee/nfa_ee_api.c
+++ b/src/nfa/ee/nfa_ee_api.c
@@ -307,7 +307,37 @@
 
   return status;
 }
+/*******************************************************************************
+**
+** Function         NFA_SendPowerLinkCommand
+**
+** Description      This function is called to send an NCI Vendor Specific
+**                  command to NFCC.
+**
+**                  nfcee_id             - The NFCEE id.
+**                  cfg_value            - The config value
+**
+** Returns          NFA_STATUS_OK if successfully initiated
+**                  NFA_STATUS_FAILED otherwise
+**
+*******************************************************************************/
+tNFA_STATUS NFA_SendPowerLinkCommand(uint8_t nfcee_id, uint8_t cfg_value) {
+  tNFA_EE_API_POWER_LINK_EVT* p_msg;
 
+  NFA_TRACE_API1("NFA_SendPowerLinkCommand() nfcee_id=0x%x", nfcee_id);
+
+  if ((p_msg = (tNFA_EE_API_POWER_LINK_EVT*)GKI_getbuf(sizeof(tNFA_EE_API_POWER_LINK_EVT))) != NULL) {
+    p_msg->hdr.event = NFA_EE_NCI_PWR_LNK_CTRL_SET_EVT;
+    p_msg->nfcee_id= nfcee_id;
+    p_msg->cfg_value = cfg_value;
+
+    nfa_sys_sendmsg(p_msg);
+
+    return (NFA_STATUS_OK);
+  }
+
+  return (NFA_STATUS_FAILED);
+}
 /*******************************************************************************
 **
 ** Function         NFA_EeModeSet
@@ -553,19 +583,22 @@
   uint16_t size = sizeof(tNFA_EE_API_ADD_AID) + aid_len;
   uint8_t nfcee_id = (uint8_t)(ee_handle & 0xFF);
   tNFA_EE_ECB* p_cb;
-
   NFA_TRACE_API1("NFA_EeAddAidRouting(): handle:<0x%x>", ee_handle);
   p_cb = nfa_ee_find_ecb(nfcee_id);
 
   /* validate parameters - make sure the AID is in valid length range */
-  if ((p_cb == NULL) || (aid_len == 0) || (p_aid == NULL) ||
-      (aid_len < NFA_MIN_AID_LEN) || (aid_len > NFA_MAX_AID_LEN)) {
+  if ((p_cb == NULL) || ((NFA_GetNCIVersion() == NCI_VERSION_2_0) && (aid_len != 0) && (p_aid == NULL)) ||
+          ((NFA_GetNCIVersion() != NCI_VERSION_2_0) &&
+                  ((aid_len == 0) || (p_aid == NULL) || (aid_len < NFA_MIN_AID_LEN))) ||
+                  (aid_len > NFA_MAX_AID_LEN)) {
     NFA_TRACE_ERROR1("Bad ee_handle or AID (len=%d)", aid_len);
     status = NFA_STATUS_INVALID_PARAM;
   } else {
     p_msg = (tNFA_EE_API_ADD_AID*)GKI_getbuf(size);
     if (p_msg != NULL) {
-      NFA_TRACE_DEBUG2("aid:<%02x%02x>", p_aid[0], p_aid[1]);
+        if(p_aid != NULL) {
+            NFA_TRACE_DEBUG2("aid:<%02x%02x>", p_aid[0], p_aid[1]);
+        }
       p_msg->hdr.event = NFA_EE_API_ADD_AID_EVT;
       p_msg->nfcee_id = nfcee_id;
       p_msg->p_cb = p_cb;
@@ -575,8 +608,9 @@
 #if (NXP_EXTNS == TRUE)
       p_msg->aid_info = aidInfo;
 #endif
+      if(p_aid != NULL) {
       memcpy(p_msg->p_aid, p_aid, aid_len);
-
+      }
       nfa_sys_sendmsg(p_msg);
 
       status = NFA_STATUS_OK;
@@ -711,11 +745,13 @@
 **
 *******************************************************************************/
 uint16_t NFA_GetAidTableSize() {
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-  return nfa_ee_api_get_max_aid_config_length();
-#else
-  return NFA_EE_MAX_AID_CFG_LEN;
-#endif
+    if((nfcFL.chipType != pn547C2) &&
+            (nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN == true)) {
+        return nfa_ee_api_get_max_aid_config_length();
+    }
+    else {
+        return NFA_EE_MAX_AID_CFG_LEN_STAT;
+    }
 }
 
 /*******************************************************************************
@@ -729,13 +765,15 @@
 **
 *******************************************************************************/
 uint16_t NFA_GetRemainingAidTableSize() {
-  uint16_t size = 0;
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-  size = nfa_ee_api_get_max_aid_config_length() - nfa_ee_lmrt_size();
-#else
-  size = NFA_EE_MAX_AID_CFG_LEN - nfa_ee_lmrt_size();
-#endif
-  return size;
+    uint16_t size = 0;
+    if((nfcFL.chipType != pn547C2) &&
+            (nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN == true)) {
+        size = nfa_ee_api_get_max_aid_config_length() - nfa_ee_lmrt_size();
+    }
+    else {
+        size = NFA_EE_MAX_AID_CFG_LEN_STAT - nfa_ee_lmrt_size();
+    }
+    return size;
 }
 /*******************************************************************************
 **
diff --git a/src/nfa/ee/nfa_ee_main.c b/src/nfa/ee/nfa_ee_main.c
index 21eefef..da58a54 100644
--- a/src/nfa/ee/nfa_ee_main.c
+++ b/src/nfa/ee/nfa_ee_main.c
@@ -45,6 +45,7 @@
 #include "nfa_sys_int.h"
 #include "nfa_dm_int.h"
 #include "nfa_ee_int.h"
+#include "config.h"
 
 extern void nfa_ee_vs_cback(tNFC_VS_EVT event, NFC_HDR* p_data);
 /*****************************************************************************
@@ -89,10 +90,9 @@
     nfa_ee_nci_mode_set_rsp,  /* NFA_EE_NCI_MODE_SET_RSP_EVT  */
 #if (NXP_EXTNS == TRUE)
     nfa_ee_nci_set_mode_info, /* NFA_EE_NCI_MODE_SET_INFO*/
-#if (NXP_WIRED_MODE_STANDBY == true)
+	nfa_ee_api_power_link_set, /* NFA_EE_NCI_PWR_LNK_CTRL_SET_EVT */
     nfa_ee_nci_pwr_link_ctrl_rsp, /*NFA_EE_NCI_PWR_LNK_CTRL_RSP_EVT*/
 #endif
-#endif
     nfa_ee_nci_conn,         /* NFA_EE_NCI_CONN_EVT          */
     nfa_ee_nci_conn,         /* NFA_EE_NCI_DATA_EVT          */
     nfa_ee_nci_action_ntf,   /* NFA_EE_NCI_ACTION_NTF_EVT    */
@@ -102,7 +102,8 @@
     nfa_ee_discv_timeout,    /* NFA_EE_DISCV_TIMEOUT_EVT     */
     nfa_ee_lmrt_to_nfcc,      /* NFA_EE_CFG_TO_NFCC_EVT       */
     nfa_ee_api_add_apdu,       /* NFA_EE_API_ADD_AID_EVT       */
-    nfa_ee_api_remove_apdu    /* NFA_EE_API_REMOVE_AID_EVT    */
+    nfa_ee_api_remove_apdu,    /* NFA_EE_API_REMOVE_AID_EVT    */
+    nfa_ee_nci_nfcee_status_ntf        /*NFA_EE_NCI_NFCEE_STATUS_NTF_EVT*/
 };
 
 /*******************************************************************************
@@ -147,6 +148,22 @@
 **
 *******************************************************************************/
 void nfa_ee_sys_enable(void) {
+
+  unsigned long retlen = 0;
+
+  NFA_TRACE_DEBUG1("%s", __func__);
+
+  nfa_ee_cb.route_block_control = 0x00;
+
+  if (GetNumValue(NAME_NFA_BLOCK_ROUTE, (void*)&retlen, sizeof(retlen))) {
+    if ((retlen == 0x01) && ((NFC_GetNCIVersion() == NCI_VERSION_2_0)
+        || (nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT == true))) {
+      nfa_ee_cb.route_block_control = NCI_ROUTE_QUAL_BLOCK_ROUTE;
+      NFA_TRACE_DEBUG1("nfa_ee_cb.route_block_control=0x%x",
+                       nfa_ee_cb.route_block_control);
+    }
+  }
+
   if (nfa_ee_max_ee_cfg) {
     /* collect NFCEE information */
     NFC_NfceeDiscover(true);
@@ -238,7 +255,7 @@
   if (nfcc_power_mode == NFA_DM_PWR_MODE_FULL) {
     if (nfa_ee_max_ee_cfg) {
       p_cb = nfa_ee_cb.ecb;
-      for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) {
+      for (xx = 0; xx < nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) {
         p_cb->ee_old_status = 0;
         if (xx >= nfa_ee_cb.cur_ee) p_cb->nfcee_id = NFA_EE_INVALID;
 
@@ -298,7 +315,7 @@
   nfa_ee_cb.ee_flags &= ~NFA_EE_FLAG_WAIT_HCI;
 
   p_cb = nfa_ee_cb.ecb;
-  for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) {
+  for (xx = 0; xx < nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) {
     /* NCI spec says: An NFCEE_DISCOVER_NTF that contains a Protocol type of
      * "HCI Access"
      * SHALL NOT contain any other additional Protocol
@@ -365,12 +382,16 @@
     case NFC_NFCEE_MODE_SET_INFO:
       int_event = NFA_EE_NCI_MODE_SET_INFO;
       break;
-#if (NXP_WIRED_MODE_STANDBY == true)
     case NFC_NFCEE_PWR_LNK_CTRL_REVT: /* 6  NFCEE PWR LNK CTRL response */
-      int_event = NFA_EE_NCI_PWR_LNK_CTRL_RSP_EVT;
+        if(nfcFL.eseFL._WIRED_MODE_STANDBY) {
+            int_event = NFA_EE_NCI_PWR_LNK_CTRL_RSP_EVT;
+        }
       break;
 #endif
-#endif
+
+    case NFC_NFCEE_STATUS_REVT:
+      int_event = NFA_EE_NCI_NFCEE_STATUS_NTF_EVT;
+      break;
   }
 
   NFA_TRACE_DEBUG2("nfa_ee_proc_evt: event=0x%02x int_event:0x%x", event,
@@ -421,7 +442,7 @@
     p_ret = &nfa_ee_cb.ecb[NFA_EE_CB_4_DH];
   } else {
     p_cb = nfa_ee_cb.ecb;
-    for (xx = 0; xx < NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) {
+    for (xx = 0; xx < nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED; xx++, p_cb++) {
       if (nfcee_id == p_cb->nfcee_id) {
         p_ret = p_cb;
         break;
@@ -490,8 +511,20 @@
       if (nfa_sys_is_graceful_disable()) {
         /* Disconnect NCI connection on graceful shutdown */
         msg.disconnect.p_cb = p_cb;
+#if(NXP_EXTNS == TRUE)
+        if(p_cb->conn_id == 0x03){
+            msg.conn.conn_id = p_cb->conn_id;
+            msg.conn.event = NFC_CONN_CLOSE_CEVT;
+            nfa_ee_nci_conn(&msg);
+        }
+        else{
+            nfa_ee_api_disconnect (&msg);
+            nfa_ee_cb.num_ee_expecting++;
+        }
+#else
         nfa_ee_api_disconnect(&msg);
         nfa_ee_cb.num_ee_expecting++;
+#endif
       } else {
         /* fake NFA_EE_DISCONNECT_EVT on ungraceful shutdown */
         msg.conn.conn_id = p_cb->conn_id;
@@ -516,6 +549,22 @@
   if (nfa_ee_cb.em_state == NFA_EE_EM_STATE_DISABLED)
     nfa_sys_deregister(NFA_ID_EE);
 }
+#if(NXP_EXTNS == TRUE)
+/*******************************************************************************
+**
+** Function         nfa_ee_connectionClosed
+**
+** Description      Check if EE's HCI connection is closed or not
+**
+** Returns          EE connection closed status
+**
+*******************************************************************************/
+uint8_t nfa_ee_connectionClosed(void)
+{
+
+  return (!(nfa_ee_cb.ee_flags & NFA_EE_HCI_CONN_CLOSE));
+}
+#endif
 
 /*******************************************************************************
 **
@@ -620,10 +669,15 @@
 #if (NXP_EXTNS == TRUE)
     case NFA_EE_NCI_MODE_SET_INFO:
       return "NFA_EE_NCI_MODE_SET_INFO";
-#if (NXP_WIRED_MODE_STANDBY == true)
+	case NFA_EE_NCI_PWR_LNK_CTRL_SET_EVT:
+      return "NFA_EE_NCI_PWR_LNK_CTRL_SET_EVT,";
     case NFA_EE_NCI_PWR_LNK_CTRL_RSP_EVT:
-      return "NCI_PWR_LNK_CTRL";
-#endif
+        if(nfcFL.eseFL._WIRED_MODE_STANDBY) {
+            return "NCI_PWR_LNK_CTRL";
+        }
+        else {
+            return "Unknown";
+        }
 #endif
     case NFA_EE_NCI_CONN_EVT:
       return "NCI_CONN";
diff --git a/src/nfa/hci/nfa_hci_act.c b/src/nfa/hci/nfa_hci_act.c
index c426350..6718a1d 100644
--- a/src/nfa/hci/nfa_hci_act.c
+++ b/src/nfa/hci/nfa_hci_act.c
@@ -1,5 +1,5 @@
 /******************************************************************************
- *  Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ *  Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
  *  Not a Contribution.
  *
  *  Copyright (C) 2015 NXP Semiconductors
@@ -90,6 +90,8 @@
 static void nfa_hci_read_num_nfcee_config_cb(uint8_t event, uint16_t param_len,
                                              uint8_t* p_param);
 static tNFA_STATUS nfa_hci_poll_session_id(uint8_t host_type);
+static void nfa_hci_get_pipe_state_cb(uint8_t event, uint16_t param_len, uint8_t* p_param);
+static void nfa_hci_update_pipe_status(uint8_t gateId, uint8_t pipeId);
 #endif
 
 /*******************************************************************************
@@ -1264,22 +1266,26 @@
       if ((dest_gate == NFA_HCI_IDENTITY_MANAGEMENT_GATE) ||
           (dest_gate == NFA_HCI_LOOP_BACK_GATE)
 #if (NXP_EXTNS == TRUE)
-#ifdef GEMALTO_SE_SUPPORT
-          || (dest_gate == NFC_HCI_DEFAULT_DEST_GATE) ||
-          (dest_gate == NFA_HCI_CONNECTIVITY_GATE)
-#endif
+          || ((nfcFL.nfccFL._GEMALTO_SE_SUPPORT) && ((dest_gate == NFC_HCI_DEFAULT_DEST_GATE) ||
+          (dest_gate == NFA_HCI_CONNECTIVITY_GATE)))
 #endif
               )
-#if ((NXP_EXTNS == TRUE) && (NXP_BLOCK_PROPRIETARY_APDU_GATE == true))
-        if (dest_gate == NFC_HCI_DEFAULT_DEST_GATE) {
-          response = NFA_HCI_ANY_E_NOK;
-        } else {
-          response = nfa_hciu_add_pipe_to_static_gate(dest_gate, pipe,
-                                                      source_host, source_gate);
-        }
+#if (NXP_EXTNS == TRUE)
+          if(nfcFL.eseFL._BLOCK_PROPRIETARY_APDU_GATE) {
+              if (dest_gate == NFC_HCI_DEFAULT_DEST_GATE) {
+                  response = NFA_HCI_ANY_E_NOK;
+              } else {
+                  response = nfa_hciu_add_pipe_to_static_gate(dest_gate, pipe,
+                          source_host, source_gate);
+              }
+          }
+          else{
+              response = nfa_hciu_add_pipe_to_static_gate(dest_gate, pipe,
+                      source_host, source_gate);
+          }
 #else
-        response = nfa_hciu_add_pipe_to_static_gate(dest_gate, pipe,
-                                                    source_host, source_gate);
+    response = nfa_hciu_add_pipe_to_static_gate(dest_gate, pipe,
+            source_host, source_gate);
 #endif
       else {
         if ((pgate = nfa_hciu_find_gate_by_gid(dest_gate)) != NULL) {
@@ -1861,6 +1867,7 @@
                                  uint16_t data_len) {
   tNFA_HCI_DYN_PIPE* p_pipe = nfa_hciu_find_pipe_by_pid(pipe_id);
   tNFA_HCI_DYN_GATE* p_gate;
+  tNFA_HCI_EVT_DATA  evt_data;
 
   if (p_pipe == NULL) {
     /* Invalid pipe ID */
@@ -1868,6 +1875,14 @@
     if (nfa_hci_cb.type == NFA_HCI_COMMAND_TYPE)
       nfa_hciu_send_msg(pipe_id, NFA_HCI_RESPONSE_TYPE, NFA_HCI_ANY_E_NOK, 0,
                         NULL);
+#if(NXP_EXTNS == TRUE)
+    if(nfa_hci_cb.hci_state == NFA_HCI_STATE_NFCEE_ENABLE){
+      nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
+      evt_data.config_rsp_rcvd.status = NFA_STATUS_FAILED;
+      /*Notify failure*/
+      nfa_hciu_send_to_all_apps(NFA_HCI_CONFIG_DONE_EVT, &evt_data);
+    }
+#endif
     return;
   }
 #if (NXP_EXTNS == TRUE)
@@ -1883,8 +1898,8 @@
     nfa_hci_handle_connectivity_gate_pkt(p_data, data_len, p_pipe);
   }
 #if (NXP_EXTNS == TRUE)
-#ifdef GEMALTO_SE_SUPPORT
-  else if (p_pipe->local_gate == NFC_HCI_DEFAULT_DEST_GATE) {
+  else if ((nfcFL.nfccFL._GEMALTO_SE_SUPPORT) &&
+          (p_pipe->local_gate == NFC_HCI_DEFAULT_DEST_GATE)) {
     /* Check if data packet is a command, response or event */
     p_gate = nfa_hci_cb.cfg.dyn_gates;
     p_gate->gate_owner = 0x0800;
@@ -1906,7 +1921,6 @@
     }
   }
 #endif
-#endif
   else {
     p_gate = nfa_hciu_find_gate_by_gid(p_pipe->local_gate);
     if (p_gate == NULL) {
@@ -2450,6 +2464,7 @@
   uint8_t pipeId = 0;
   bool bCreatepipe = false;
   NFA_TRACE_DEBUG0("nfa_hci_api_config_nfcee - enter!!");
+
   nfa_hciu_set_nfceeid_config_mask(NFA_HCI_SET_CONFIG_EVENT, hostId);
   if ((nfa_hci_cb.host_controller_version == NFA_HCI_CONTROLLER_VERSION_12) &&
       (nfa_hci_cb.hci_state == NFA_HCI_STATE_NFCEE_ENABLE)) {
@@ -2457,22 +2472,11 @@
     if ((nfa_hci_api_IspipePresent(hostId, NFA_HCI_ETSI12_APDU_GATE) ==
          false)) {
       nfa_hci_cb.current_nfcee = hostId;
-      if ((nfa_hci_api_IspipePresent(
-               hostId, NFA_HCI_IDENTITY_MANAGEMENT_GATE) == false)) {
-        NFA_TRACE_DEBUG0("nfa_hci_api_config_nfcee - creating Id pipe!!!");
-        nfa_hciu_send_create_pipe_cmd(NFA_HCI_IDENTITY_MANAGEMENT_GATE,
-                                      nfa_hci_cb.current_nfcee,
-                                      NFA_HCI_IDENTITY_MANAGEMENT_GATE);
-        return (NFA_STATUS_OK);
-      } else {
-        NFA_TRACE_DEBUG0(
-            "nfa_hci_api_config_nfcee - Pipe is already present just open!!!");
-        if (nfa_hci_api_GetpipeId(hostId, NFA_HCI_IDENTITY_MANAGEMENT_GATE,
-                                  &pipeId) == true) {
-          nfa_hciu_send_open_pipe_cmd(pipeId);
-          return (NFA_STATUS_OK);
-        }
-      }
+      NFA_TRACE_DEBUG0 ("nfa_hci_api_config_nfcee - creating APDU gate pipe!!!");
+      nfa_hciu_alloc_gate(NFA_HCI_ETSI12_APDU_GATE, NFA_HANDLE_GROUP_HCI);
+      nfa_hciu_send_create_pipe_cmd (NFA_HCI_ETSI12_APDU_GATE, nfa_hci_cb.current_nfcee, NFA_HCI_ETSI12_APDU_GATE);
+
+      return (NFA_STATUS_OK);
     } else {
       status = NFA_STATUS_OK;
       NFA_TRACE_DEBUG0(
@@ -2529,6 +2533,7 @@
   tNFA_STATUS status = NFA_STATUS_OK;
   uint8_t p_data[NFA_MAX_HCI_CMD_LEN];
   uint8_t* p = p_data, *parm_len, *num_param;
+
   memset(p_data, 0, sizeof(p_data));
   NCI_MSG_BLD_HDR0(p, NCI_MT_CMD, NCI_GID_CORE);
   NCI_MSG_BLD_HDR1(p, NCI_MSG_CORE_GET_CONFIG);
@@ -2541,17 +2546,11 @@
   UINT8_TO_STREAM(p, NXP_NFC_PARAM_ID_SWP2);
   (*num_param)++;
 
-#if (NXP_NFCC_DYNAMIC_DUAL_UICC == true)
-  UINT8_TO_STREAM(p, NXP_NFC_SET_CONFIG_PARAM_EXT);
-  UINT8_TO_STREAM(p, NXP_NFC_PARAM_ID_SWP1A);
-  (*num_param)++;
-#endif
-
-#if (NXP_NFCEE_NDEF_ENABLE == true)
-  UINT8_TO_STREAM(p, NXP_NFC_SET_CONFIG_PARAM_EXT);
-  UINT8_TO_STREAM(p, NXP_NFC_PARAM_ID_NDEF_NFCEE);
-  (*num_param)++;
-#endif
+  if ((nfcFL.chipType == pn551) || (nfcFL.chipType == pn553) || (nfcFL.chipType == pn557)) {
+      UINT8_TO_STREAM(p, NXP_NFC_SET_CONFIG_PARAM_EXT);
+      UINT8_TO_STREAM(p, NXP_NFC_PARAM_ID_SWP1A);
+      (*num_param)++;
+  }
 
   *parm_len = (p - num_param);
   if (*num_param != 0x00) {
@@ -3010,6 +3009,9 @@
       nfa_hci_cb.pipe_in_use);
 #endif
   if (nfa_hci_cb.inst != NFA_HCI_ANY_OK) {
+
+    nfa_sys_stop_timer(&nfa_hci_cb.timer);
+
     nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
     /* Send NFA_HCI_CMD_SENT_EVT to notify failure */
     if ((nfa_hci_cb.cmd_sent == NFA_HCI_ANY_GET_PARAMETER) &&
@@ -3172,7 +3174,11 @@
       // display atr and read first parameter on APDU Gate
       NFA_TRACE_DEBUG0(
           "nfa_hci_handle_Nfcee_dynpipe_rsp - ATR received read APDU Size!!!");
-      nfa_hciu_send_get_param_cmd(pipeId, NFA_HCI_MAX_C_APDU_SIZE_INDEX);
+      NFA_TRACE_DEBUG0 (
+          "nfa_hci_handle_Nfcee_dynpipe_rsp - ETSI12 init complete");
+      evt_data.admin_rsp_rcvd.status = NFA_STATUS_OK;
+      nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
+      nfa_hciu_send_to_all_apps(NFA_HCI_CONFIG_DONE_EVT, &evt_data);
     }
   }
 }
@@ -3228,4 +3234,152 @@
   }
   return status;
 }
+
+/*******************************************************************************
+**
+** Function         nfa_hci_getApduAndConnectivity_PipeStatus
+**
+** Description      API to retrieve APDU & Connectivity pipe created status from
+**                  FirmWare
+**
+** Returns          If NCI command is SUCCESS/FAILED
+**
+*******************************************************************************/
+tNFA_STATUS nfa_hci_getApduAndConnectivity_PipeStatus()
+{
+    tNFA_STATUS         status = NFA_STATUS_OK;
+    uint8_t p_data[NFA_MAX_HCI_CMD_LEN];
+    uint8_t *p = p_data, *parm_len , *num_param;
+    memset(p_data, 0, sizeof(p_data));
+    NCI_MSG_BLD_HDR0 (p, NCI_MT_CMD, NCI_GID_CORE);
+    NCI_MSG_BLD_HDR1 (p, NCI_MSG_CORE_GET_CONFIG);
+    parm_len  = p++;
+    num_param = p++;
+    UINT8_TO_STREAM (p, NXP_NFC_SET_CONFIG_PARAM_EXT);
+    UINT8_TO_STREAM (p, NXP_NFC_ESE_APDU_PIPE_STATUS);
+    (*num_param)++;
+    UINT8_TO_STREAM (p, NXP_NFC_SET_CONFIG_PARAM_EXT);
+    UINT8_TO_STREAM (p, NXP_NFC_ESE_CONN_PIPE_STATUS);
+    (*num_param)++;
+
+    *parm_len = (p - num_param);
+    if(*num_param != 0x00)
+    {
+        status = nfa_hciu_send_raw_cmd(p-p_data, p_data, nfa_hci_get_pipe_state_cb);
+    }
+    NFA_TRACE_DEBUG1 ("nfa_hci_getApduConnectivity_PipeStatus %x",*num_param);
+
+    return status;
+}
+
+/*******************************************************************************
+**
+** Function         nfa_hci_get_pipe_state_cb
+**
+** Description      Callback API to retrieve APDU & Connectivity pipe created
+**                  status from FirmWare
+**
+** Returns          None
+**
+*******************************************************************************/
+static void nfa_hci_get_pipe_state_cb(uint8_t event, uint16_t param_len, uint8_t* p_param)
+{
+    uint8_t num_param_id         = 0x00, xx;
+    uint8_t NFA_PARAM_ID_INDEX   = 0x04;
+    uint8_t param_id1 = 0x00;
+    uint8_t param_id2 = 0x00;
+    uint8_t status    = 0x00;
+
+    nfa_sys_stop_timer (&nfa_hci_cb.timer);
+    p_param += NFA_PARAM_ID_INDEX;
+    STREAM_TO_UINT8(num_param_id , p_param);
+    while(num_param_id > 0x00)
+    {
+        STREAM_TO_UINT8(param_id1 , p_param);
+        STREAM_TO_UINT8(param_id2 , p_param);
+        p_param++;
+        STREAM_TO_UINT8(status    , p_param);
+        if(param_id1 == NXP_NFC_SET_CONFIG_PARAM_EXT
+                && param_id2 == NXP_NFC_ESE_APDU_PIPE_STATUS)
+        {
+            /*Update eSE APDU pipe status*/
+            if(status == 1)
+            {
+                /*UINT8 local_gate, UINT8 pipe_id, UINT8 dest_host, UINT8 dest_gate*/
+                if(!nfa_hci_api_IspipePresent(NFA_HCI_HOST_ID_ESE, NFA_HCI_ETSI12_APDU_GATE))
+                {
+                    nfa_hci_update_pipe_status(NFA_HCI_ETSI12_APDU_GATE, NFA_HCI_APDU_PIPE);
+                    if(nfa_hciu_find_gate_by_gid (NFA_HCI_ETSI12_APDU_GATE) == NULL)
+                    {
+                        tNFA_HCI_DYN_GATE   *pg;
+                        int                 xx;
+                        for (xx = 0, pg = nfa_hci_cb.cfg.dyn_gates; xx < NFA_HCI_MAX_GATE_CB; xx++, pg++)
+                        {
+                            if (pg->gate_id == 0)
+                            {
+                                /* Found a free gate control block */
+                                pg->gate_id       = NFA_HCI_ETSI12_APDU_GATE;
+                                pg->gate_owner    = NFA_HANDLE_GROUP_HCI;
+                                pg->pipe_inx_mask = 0;
+
+                                NFA_TRACE_DEBUG2 ("nfa_hci_alloc_apdu_gate id:%d  app_handle: 0x%04x",
+                                NFA_HCI_ETSI12_APDU_GATE, NFA_HANDLE_GROUP_HCI);
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+            else
+            {
+                nfa_hciu_release_pipe (NFA_HCI_APDU_PIPE);
+            }
+        }
+        else if(param_id1 == NXP_NFC_SET_CONFIG_PARAM_EXT
+                && param_id2 == NXP_NFC_ESE_CONN_PIPE_STATUS)
+        {
+            /*Update eSE Connectivity pipe status*/
+            if(status == 1)
+            {
+                if(!nfa_hci_api_IspipePresent(NFA_HCI_HOST_ID_ESE, NFA_HCI_CONNECTIVITY_GATE))
+                {
+                    nfa_hci_update_pipe_status(NFA_HCI_CONNECTIVITY_GATE, NFA_HCI_CONN_ESE_PIPE);
+                }
+            }
+            else
+            {
+                nfa_hciu_release_pipe (NFA_HCI_CONN_ESE_PIPE);
+            }
+        }
+        num_param_id--;
+    }
+}
+
+/*******************************************************************************
+**
+** Function         nfa_hci_update_pipe_status
+**
+** Description      API to update APDU & Connectivity pipe hci_cfg status
+**
+** Returns          None
+**
+*******************************************************************************/
+static void nfa_hci_update_pipe_status(uint8_t gateId, uint8_t pipeId)
+{
+    uint8_t count = 0;
+    nfa_hciu_add_pipe_to_static_gate(gateId, pipeId, NFA_HCI_HOST_ID_ESE, gateId);
+
+    /*Set the pipe status HCI_OPENED*/
+    for (count = 0;count < NFA_HCI_MAX_PIPE_CB;count++)
+    {
+        if(((nfa_hci_cb.cfg.dyn_pipes[count].dest_host) == NFA_HCI_HOST_ID_ESE) &&
+        ((nfa_hci_cb.cfg.dyn_pipes[count].dest_gate) == gateId)
+        &&((nfa_hci_cb.cfg.dyn_pipes[count].local_gate) == gateId))
+        {
+            NFA_TRACE_DEBUG1 ("Set the pipe state to open  -- %d !!!",nfa_hci_cb.cfg.dyn_pipes[count].pipe_id);
+            nfa_hci_cb.cfg.dyn_pipes[count].pipe_state = NFA_HCI_PIPE_OPENED;
+            break;
+        }
+    }
+}
 #endif
diff --git a/src/nfa/hci/nfa_hci_api.c b/src/nfa/hci/nfa_hci_api.c
index 34f8c71..0c499c7 100644
--- a/src/nfa/hci/nfa_hci_api.c
+++ b/src/nfa/hci/nfa_hci_api.c
@@ -899,8 +899,9 @@
   }
 
   if ((gate <= NFA_HCI_LAST_HOST_SPECIFIC_GATE)
-#if (NXP_EXTNS == TRUE && (NXP_UICC_CREATE_CONNECTIVITY_PIPE == true))
-      && (gate != NFA_HCI_CONNECTIVITY_GATE)
+#if (NXP_EXTNS == TRUE)
+      && ((nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE) &&
+              (gate != NFA_HCI_CONNECTIVITY_GATE))
 #endif
           ) {
     NFA_TRACE_API1("NFA_HciAddStaticPipe (): Invalid Gate:0x%02x", gate);
@@ -1005,7 +1006,7 @@
       break;
   }
 }
-#if ((NXP_EXTNS == TRUE) && (NXP_NFCC_MW_RCVRY_BLK_FW_DNLD == true))
+#if (NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
 ** Function         NFA_MW_Fwdnlwd_Recovery
@@ -1018,15 +1019,19 @@
 **
 *******************************************************************************/
 bool NFA_MW_Fwdnlwd_Recovery(bool mw_fwdnld_recovery) {
-  if (mw_fwdnld_recovery) {
-    MW_RCVRY_FW_DNLD_ALLOWED = true;
-  } else {
-    MW_RCVRY_FW_DNLD_ALLOWED = false;
-  }
-  return mw_fwdnld_recovery;
+    if(!nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD) {
+        NFA_TRACE_API0("NFA_MW_Fwdnlwd_Recovery"
+                "  NFCC_MW_RCVRY_BLK_FW_DNLD not available. Returning");
+        return false;
+    }
+    if (mw_fwdnld_recovery) {
+        MW_RCVRY_FW_DNLD_ALLOWED = true;
+    } else {
+        MW_RCVRY_FW_DNLD_ALLOWED = false;
+    }
+    return mw_fwdnld_recovery;
 }
-#endif
-#if (NXP_EXTNS == TRUE)
+
 /*******************************************************************************
 **
 ** Function         NFA_HciW4eSETransaction_Complete
diff --git a/src/nfa/hci/nfa_hci_main.c b/src/nfa/hci/nfa_hci_main.c
index 4ab90d8..56399fd 100644
--- a/src/nfa/hci/nfa_hci_main.c
+++ b/src/nfa/hci/nfa_hci_main.c
@@ -236,7 +236,9 @@
         /*received mode set Ntf */
         NFA_TRACE_DEBUG1("nfa_hci_ee_info_cback (): %d  nfa_hci_cb.hci_state", nfa_hci_cb.hci_state);
         if ((nfa_hci_cb.hci_state == NFA_HCI_STATE_WAIT_NETWK_ENABLE) ||
-            (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)) {
+            (nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE_NETWK_ENABLE)||
+            (nfa_hci_cb.hci_state == NFA_HCI_STATE_EE_RECOVERY)
+            ) {
             /* Discovery operation is complete, retrieve discovery result */
           NFA_EeGetInfo(&nfa_hci_cb.num_nfcee, nfa_hci_cb.ee_info);
           nfa_hci_enable_one_nfcee();
@@ -246,6 +248,22 @@
             nfa_hci_api_config_nfcee(nfa_hci_cb.current_nfcee);
         }
       break;
+    case NFA_EE_RECOVERY:
+        /*NFCEE recovery in progress*/
+        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_DM_RFST_DISCOVERY == nfa_dm_cb.disc_cb.disc_state)
+            nfa_hci_cb.nfcee_cfg.discovery_stopped = nfa_dm_act_stop_rf_discovery(NULL);
+          if(NFC_NfceeDiscover(true) == NFC_STATUS_FAILED){
+            if(nfa_hci_cb.nfcee_cfg.discovery_stopped == true) {
+              nfa_dm_act_start_rf_discovery(NULL);
+              nfa_hci_cb.nfcee_cfg.discovery_stopped = false;
+            }
+          } else {
+              nfa_hci_cb.hci_state = NFA_HCI_STATE_EE_RECOVERY;
+          }
+        }
+        break;
   }
 }
 
@@ -263,7 +281,6 @@
 
   /* initialize control block */
   memset(&nfa_hci_cb, 0, sizeof(tNFA_HCI_CB));
-
   nfa_hci_cb.hci_state = NFA_HCI_STATE_STARTUP;
   nfa_hci_cb.num_nfcee = NFA_HCI_MAX_HOST_IN_NETWORK;
 #if (NXP_EXTNS == TRUE)
@@ -661,7 +678,6 @@
   tNFA_HCI_EVT_DATA evt_data;
 
   NFA_TRACE_EVENT1("nfa_hci_startup_complete (): Status: %u", status);
-
   nfa_sys_stop_timer(&nfa_hci_cb.timer);
 
   if ((nfa_hci_cb.hci_state == NFA_HCI_STATE_RESTORE) ||
@@ -672,9 +688,16 @@
 #if (NXP_EXTNS == TRUE)
   else if (nfa_hci_cb.hci_state == NFA_HCI_STATE_NFCEE_ENABLE) {
     nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
-    evt_data.admin_rsp_rcvd.status = status;
-    evt_data.admin_rsp_rcvd.NoHostsPresent = 0;
-    nfa_hciu_send_to_all_apps(NFA_HCI_HOST_TYPE_LIST_READ_EVT, &evt_data);
+
+    if(nfa_hci_cb.cmd_sent == NFA_HCI_ANY_GET_PARAMETER &&
+      nfa_hci_cb.param_in_use == NFA_HCI_HOST_LIST_INDEX){
+
+        evt_data.admin_rsp_rcvd.NoHostsPresent = 0;
+    }
+    else{
+      evt_data.admin_rsp_rcvd.status = status;
+      nfa_hciu_send_to_all_apps (NFA_HCI_CONFIG_DONE_EVT, &evt_data);
+    }
     return;
   }
 #endif
@@ -693,21 +716,26 @@
     nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
 #if (NXP_EXTNS == TRUE)
     nfa_hci_handle_nfcee_config_evt(NFA_HCI_GET_NUM_NFCEE_CONFIGURED);
-#if (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true)
-    nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
-    NFA_TRACE_EVENT0("hci_state = NFA_HCI_STATE_IDLE");
-    if ((nfa_sys_cb.enable_cplt_flags == nfa_sys_cb.enable_cplt_mask) &&
-        (!(nfa_sys_cb.p_enable_cback))) {
-      if ((nfa_dm_cb.p_dm_cback))
-        (*nfa_dm_cb.p_dm_cback)(NFA_DM_EE_HCI_ENABLE, NULL);
+    if(nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH) {
+        nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
+        NFA_TRACE_EVENT0("hci_state = NFA_HCI_STATE_IDLE");
+        if ((nfa_sys_cb.enable_cplt_flags == nfa_sys_cb.enable_cplt_mask) &&
+                (!(nfa_sys_cb.p_enable_cback))) {
+            if ((nfa_dm_cb.p_dm_cback))
+                (*nfa_dm_cb.p_dm_cback)(NFA_DM_EE_HCI_ENABLE, NULL);
+        }
     }
 #endif
-#endif
   } else {
 #if (NXP_EXTNS == TRUE)
        nfa_hci_handle_nfcee_config_evt(NFA_HCI_NFCEE_CONFIG_COMPLETE);
 #endif
     nfa_hci_cb.hci_state = NFA_HCI_STATE_DISABLED;
+#if (NXP_EXTNS == true)
+    if(nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY == false) {
+      nfa_hci_getApduAndConnectivity_PipeStatus();
+    }
+#endif
   }
 }
 
@@ -734,12 +762,20 @@
     }
   }
 
-  if(xx == nfa_hci_cb.num_nfcee)
-  {
-    nfa_hci_cb.w4_nfcee_enable = false;
-    nfa_hciu_send_get_param_cmd(NFA_HCI_ADMIN_PIPE,NFA_HCI_HOST_LIST_INDEX);
+  if(xx == nfa_hci_cb.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)) {
+      nfa_hci_cb.w4_nfcee_enable = 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_EE_RECOVERY) {
+        nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
+        if (true == nfa_hci_cb.nfcee_cfg.discovery_stopped) {
+          nfa_hci_cb.nfcee_cfg.discovery_stopped = false;
+          nfa_dm_act_start_rf_discovery(NULL);
+        }
+    }
   }
- }
+}
 
 /*******************************************************************************
 **
@@ -758,6 +794,8 @@
   uint8_t count = 0;
   bool found = false;
 
+  nfa_ee_max_ee_cfg = nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED;
+
   if (HCI_LOOPBACK_DEBUG) {
       /* First step in initialization is to open the admin pipe */
       nfa_hciu_send_open_pipe_cmd(NFA_HCI_ADMIN_PIPE);
@@ -830,6 +868,13 @@
         found = true;
         if (ee_info[count].ee_status == NFA_EE_STATUS_INACTIVE) {
           NFC_NfceeModeSet(target_handle, NFC_MODE_ACTIVATE);
+          /*HCI network is Inactive wait*/
+                nfa_hci_cb.w4_hci_netwk_init = true;
+            }
+            else
+            {
+                /*HCI network is already active*/
+                nfa_hci_cb.w4_hci_netwk_init = false;
         }
       }
       count++;
@@ -906,25 +951,34 @@
   char buff[VERBOSE_BUFF_SIZE];
   static bool is_first_chain_pkt = true;
 #endif
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
-  if (event == NFC_HCI_RESTART_TIMER) {
-    if (nfa_hci_cb.IsHciTimerChanged) {
-      nfa_sys_start_timer(&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT,
-                          NFA_HCI_DWP_RSP_WAIT_TIMEOUT);
-      nfa_hci_cb.IsHciTimerChanged = false;
-    } else if (nfa_hci_cb.IsWiredSessionAborted) {
-      nfa_sys_start_timer(&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT,
-                          NFA_HCI_DWP_SESSION_ABORT_TIMEOUT);
-      nfa_hci_cb.IsWiredSessionAborted = false;
-    } else {
-      nfa_sys_start_timer(&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT,
-                          nfa_hci_cb.hciResponseTimeout);
-    }
-    return;
+#if (NXP_EXTNS == TRUE)
+  if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+      if (event == NFC_HCI_RESTART_TIMER) {
+          if (nfa_hci_cb.IsHciTimerChanged) {
+              nfa_sys_start_timer(&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT,
+                      NFA_HCI_DWP_RSP_WAIT_TIMEOUT);
+              nfa_hci_cb.IsHciTimerChanged = false;
+          } else if (nfa_hci_cb.IsWiredSessionAborted) {
+              nfa_sys_start_timer(&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT,
+                      NFA_HCI_DWP_SESSION_ABORT_TIMEOUT);
+              nfa_hci_cb.IsWiredSessionAborted = false;
+          } else {
+              nfa_sys_start_timer(&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT,
+                      nfa_hci_cb.hciResponseTimeout);
+          }
+          return;
+      }
   }
 #endif
   if (event == NFC_CONN_CREATE_CEVT) {
+#if(NXP_EXTNS == TRUE)
+    tNFA_EE_MSG p_msgdata;
+    p_msgdata.conn.conn_id = conn_id;
+    p_msgdata.conn.event = event;
+    p_msgdata.conn.p_data = p_data;
+    nfa_ee_nci_conn(&p_msgdata);
+#endif
     nfa_hci_cb.conn_id = conn_id;
     nfa_hci_cb.buff_size = p_data->conn_create.buff_size;
 
@@ -932,6 +986,12 @@
       nfa_hci_cb.w4_hci_netwk_init = true;
       nfa_hciu_alloc_gate(NFA_HCI_CONNECTIVITY_GATE, 0);
     }
+#if(NXP_EXTNS == TRUE)
+    if (nfa_hci_cb.hci_state == NFA_HCI_STATE_DISABLED){
+      nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
+      return;
+    }
+#endif
 
     if (nfa_hci_cb.cfg.admin_gate.pipe01_state == NFA_HCI_PIPE_CLOSED) {
       /* First step in initialization/restore is to open the admin pipe */
@@ -948,13 +1008,21 @@
 #endif
     }
   } else if (event == NFC_CONN_CLOSE_CEVT) {
-    nfa_hci_cb.conn_id = 0;
-    nfa_hci_cb.hci_state = NFA_HCI_STATE_DISABLED;
-    /* deregister message handler on NFA SYS */
-    nfa_sys_deregister(NFA_ID_HCI);
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true))
-    if (nfa_dm_cb.p_dm_cback)
-      (*nfa_dm_cb.p_dm_cback)(NFA_DM_EE_HCI_DISABLE, NULL);
+      nfa_hci_cb.conn_id = 0;
+      nfa_hci_cb.hci_state = NFA_HCI_STATE_DISABLED;
+#if(NXP_EXTNS == TRUE)
+      if(nfa_ee_connectionClosed())
+#endif
+      /* deregister message handler on NFA SYS */
+        nfa_sys_deregister (NFA_ID_HCI);
+      NFA_TRACE_DEBUG0("NFC_CONN_CLOSE_CEVT handled");
+
+#if(NXP_EXTNS == TRUE)
+      tNFA_EE_MSG p_msgdata;
+      p_msgdata.conn.conn_id = conn_id;
+      p_msgdata.conn.event = event;
+      p_msgdata.conn.p_data = p_data;
+      nfa_ee_nci_conn(&p_msgdata);
 #endif
   }
 
@@ -986,10 +1054,8 @@
 
   if (nfa_hci_cb.assembling_flags & NFA_HCI_FL_CONN_PIPE) {
     if (pipe == NFA_HCI_CONN_ESE_PIPE || (pipe == NFA_HCI_CONN_UICC_PIPE)
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
-        || (pipe == NFA_HCI_CONN_UICC2_PIPE)
-#endif
-            ) {
+        || ((nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) &&
+                (pipe == NFA_HCI_CONN_UICC2_PIPE))) {
       is_assembling_on_current_pipe = 1;
     }
   } else if (nfa_hci_cb.assembling_flags & NFA_HCI_FL_APDU_PIPE) {
@@ -1009,15 +1075,13 @@
 
 #if (NXP_EXTNS == TRUE)
     if (pipe == NFA_HCI_CONN_ESE_PIPE || (pipe == NFA_HCI_CONN_UICC_PIPE)
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
-        || (pipe == NFA_HCI_CONN_UICC2_PIPE)
-#endif
-            ) {
-      nfa_hci_cb.type_evt = nfa_hci_cb.type;
-      nfa_hci_cb.inst_evt = nfa_hci_cb.inst;
+        || ((nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) &&
+                (pipe == NFA_HCI_CONN_UICC2_PIPE))) {
+        nfa_hci_cb.type_evt = nfa_hci_cb.type;
+        nfa_hci_cb.inst_evt = nfa_hci_cb.inst;
     } else if (pipe == NFA_HCI_APDU_PIPE) {
-      nfa_hci_cb.type_msg = nfa_hci_cb.type;
-      nfa_hci_cb.inst_msg = nfa_hci_cb.inst;
+        nfa_hci_cb.type_msg = nfa_hci_cb.type;
+        nfa_hci_cb.inst_msg = nfa_hci_cb.inst;
     }
 #endif
     if (pkt_len != 0) pkt_len--;
@@ -1051,15 +1115,13 @@
 
           p = nfa_hci_cb.p_msg_data;
         } else if ((pipe == NFA_HCI_CONN_UICC_PIPE) ||
-                   (pipe == NFA_HCI_CONN_ESE_PIPE)
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
-                   || (pipe == NFA_HCI_CONN_UICC2_PIPE)
-#endif
-                       ) {
-          nfa_hci_cb.assembling_flags &= ~NFA_HCI_FL_CONN_PIPE;
-          nfa_hci_cb.assembly_failed_flags &= ~NFA_HCI_FL_CONN_PIPE;
+                (pipe == NFA_HCI_CONN_ESE_PIPE)
+                || ((nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) &&
+                        (pipe == NFA_HCI_CONN_UICC2_PIPE))) {
+            nfa_hci_cb.assembling_flags &= ~NFA_HCI_FL_CONN_PIPE;
+            nfa_hci_cb.assembly_failed_flags &= ~NFA_HCI_FL_CONN_PIPE;
 
-          p = nfa_hci_cb.p_evt_data;
+            p = nfa_hci_cb.p_evt_data;
         }
 #else
         nfa_hci_assemble_msg(p, pkt_len);
@@ -1071,13 +1133,11 @@
 #if (NXP_EXTNS == TRUE)
     uint8_t is_assembly_failed_on_current_pipe = 0;
     if (nfa_hci_cb.assembly_failed_flags & NFA_HCI_FL_CONN_PIPE) {
-      if ((pipe == NFA_HCI_CONN_ESE_PIPE) || (pipe == NFA_HCI_CONN_UICC_PIPE)
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
-          || (pipe == NFA_HCI_CONN_UICC2_PIPE)
-#endif
-              ) {
-        is_assembly_failed_on_current_pipe = 1;
-      }
+        if ((pipe == NFA_HCI_CONN_ESE_PIPE) || (pipe == NFA_HCI_CONN_UICC_PIPE)
+                || ((nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) &&
+                        (pipe == NFA_HCI_CONN_UICC2_PIPE))) {
+            is_assembly_failed_on_current_pipe = 1;
+        }
     } else if (nfa_hci_cb.assembly_failed_flags & NFA_HCI_FL_APDU_PIPE) {
       if (pipe == NFA_HCI_APDU_PIPE) {
         is_assembly_failed_on_current_pipe = 1;
@@ -1116,11 +1176,9 @@
         p = nfa_hci_cb.p_msg_data;
         pkt_len = nfa_hci_cb.msg_len;
       } else if ((pipe == NFA_HCI_CONN_UICC_PIPE) ||
-                 (pipe == NFA_HCI_CONN_ESE_PIPE)
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
-                 || (pipe == NFA_HCI_CONN_UICC2_PIPE)
-#endif
-                     ) {
+              (pipe == NFA_HCI_CONN_ESE_PIPE)
+              || ((nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) &&
+                      (pipe == NFA_HCI_CONN_UICC2_PIPE))) {
         nfa_hci_cb.assembling_flags &= ~NFA_HCI_FL_CONN_PIPE;
         nfa_hci_cb.assembly_failed_flags &= ~NFA_HCI_FL_CONN_PIPE;
 
@@ -1136,15 +1194,13 @@
 
 #if (NXP_EXTNS == TRUE)
   if (pipe == NFA_HCI_CONN_ESE_PIPE || (pipe == NFA_HCI_CONN_UICC_PIPE)
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
-      || (pipe == NFA_HCI_CONN_UICC2_PIPE)
-#endif
-          ) {
-    nfa_hci_cb.type = nfa_hci_cb.type_evt;
-    nfa_hci_cb.inst = nfa_hci_cb.inst_evt;
+          || ((nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) &&
+                  (pipe == NFA_HCI_CONN_UICC2_PIPE))) {
+      nfa_hci_cb.type = nfa_hci_cb.type_evt;
+      nfa_hci_cb.inst = nfa_hci_cb.inst_evt;
   } else if (pipe == NFA_HCI_APDU_PIPE) {
-    nfa_hci_cb.type = nfa_hci_cb.type_msg;
-    nfa_hci_cb.inst = nfa_hci_cb.inst_msg;
+      nfa_hci_cb.type = nfa_hci_cb.type_msg;
+      nfa_hci_cb.inst = nfa_hci_cb.inst_msg;
   }
 #endif
 
@@ -1220,18 +1276,16 @@
         nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
       }
     } else {
-      if (!((pipe == NFA_HCI_CONN_UICC_PIPE || pipe == NFA_HCI_CONN_ESE_PIPE
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
-             || pipe == NFA_HCI_CONN_UICC2_PIPE
-#endif
-             ) &&
-            (nfa_hci_cb.inst_evt == NFA_HCI_EVT_TRANSACTION ||
-             nfa_hci_cb.inst_evt == NFA_HCI_EVT_CONNECTIVITY))) {
-        /*Stop timer and goto IDLE state when pipe is not connectivity but event
-         * received is connectivity*/
-        nfa_sys_stop_timer(&nfa_hci_cb.timer);
-        nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
-      }
+        if (!((pipe == NFA_HCI_CONN_UICC_PIPE || pipe == NFA_HCI_CONN_ESE_PIPE
+                || ((nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) &&
+                        (pipe == NFA_HCI_CONN_UICC2_PIPE))) &&
+                (nfa_hci_cb.inst_evt == NFA_HCI_EVT_TRANSACTION ||
+                        nfa_hci_cb.inst_evt == NFA_HCI_EVT_CONNECTIVITY))) {
+            /*Stop timer and goto IDLE state when pipe is not connectivity but event
+             * received is connectivity*/
+            nfa_sys_stop_timer(&nfa_hci_cb.timer);
+            nfa_hci_cb.hci_state = NFA_HCI_STATE_IDLE;
+        }
     }
 #else
     nfa_sys_stop_timer(&nfa_hci_cb.timer);
@@ -1309,6 +1363,11 @@
                   NFA_HCI_SESSION_ID_LEN))) ||
         (!(memcmp(nfa_hci_cb.cfg.admin_gate.session_id, reset_session,
                   NFA_HCI_SESSION_ID_LEN)))) {
+#if (NXP_EXTNS == TRUE)
+      if(nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY == true) {
+        nfa_hci_getApduAndConnectivity_PipeStatus();
+      }
+#endif
       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 */
@@ -1447,7 +1506,7 @@
               p_buf->len = 2;
               NFC_SendData(nfa_hci_cb.conn_id, p_buf);
               nfa_sys_start_timer(&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT,
-                                  10000);
+                                  3000);
               nfa_hci_cb.hci_state = NFA_HCI_STATE_WAIT_RSP;
             }
             nfa_hci_cb.IsChainedPacket = false;
@@ -1592,19 +1651,17 @@
   if ((pipe >= NFA_HCI_FIRST_DYNAMIC_PIPE) &&
       (nfa_hci_cb.type == NFA_HCI_EVENT_TYPE)) {
 #if (NXP_EXTNS == TRUE)
-    if (pipe == NFA_HCI_CONN_ESE_PIPE || pipe == NFA_HCI_CONN_UICC_PIPE
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
-        || (pipe == NFA_HCI_CONN_UICC2_PIPE)
-#endif
-            ) {
-      /* Connectivity or transaction events are received
-       * from SE. will be assembled and sent to application.
-       * */
-      nfa_hci_cb.assembling_flags |= NFA_HCI_FL_CONN_PIPE;
-      nfa_hci_cb.p_evt_data = nfa_hci_cb.evt_data;
-      nfa_hci_cb.max_evt_len = NFA_MAX_HCI_EVENT_LEN;
-      return;
-    } else if (pipe == NFA_HCI_APDU_PIPE) {
+      if (pipe == NFA_HCI_CONN_ESE_PIPE || pipe == NFA_HCI_CONN_UICC_PIPE
+              || ((nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) &&
+                      (pipe == NFA_HCI_CONN_UICC2_PIPE))) {
+          /* Connectivity or transaction events are received
+           * from SE. will be assembled and sent to application.
+           * */
+          nfa_hci_cb.assembling_flags |= NFA_HCI_FL_CONN_PIPE;
+          nfa_hci_cb.p_evt_data = nfa_hci_cb.evt_data;
+          nfa_hci_cb.max_evt_len = NFA_MAX_HCI_EVENT_LEN;
+          return;
+      } else if (pipe == NFA_HCI_APDU_PIPE) {
       /* Here APDU response is received, for the APDU
        * sent from JNI layer using transceive.
        * */
@@ -1690,10 +1747,8 @@
       nfa_hci_cb.msg_len += data_len;
     }
   } else if ((pipe == NFA_HCI_CONN_ESE_PIPE) || (pipe == NFA_HCI_CONN_UICC_PIPE)
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
-             || (pipe == NFA_HCI_CONN_UICC2_PIPE)
-#endif
-                 ) {
+          || ((nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH) &&
+                  (pipe == NFA_HCI_CONN_UICC2_PIPE))) {
     if ((nfa_hci_cb.evt_len + data_len) > nfa_hci_cb.max_evt_len) {
       /* Fill the buffer as much it can hold */
       NFA_TRACE_ERROR1(
@@ -1768,32 +1823,34 @@
         break;
 
       case NFA_HCI_RSP_TIMEOUT_EVT:
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_ESE == TRUE))
-#if (JCOP_WA_ENABLE == TRUE)
-        if (nfa_ee_ce_p61_completed != 0) {
-          NFA_TRACE_EVENT0(
-              "nfa_hci_evt_hdlr Restart timer expired for wired transceive");
-          nfa_ee_ce_p61_completed = 0;
-        } else {
-          uint32_t p61_access_status = 0x0000;
-          if (NFC_GetP61Status((void*)&p61_access_status) < 0) {
-            NFA_TRACE_EVENT0(
-                "nfa_hci_evt_hdlr : Check dual mode : NFC_GetP61Status failed");
-          } else {
-            if (((p61_access_status == 0x400) ||
-                 (p61_access_status == 0x1000)) &&
-                (NFA_check_p61_CL_Activated() != 0)) {
-              NFA_TRACE_EVENT0(
-                  "nfa_hci_evt_hdlr Restart timer for wired transceive");
-              nfa_sys_start_timer(&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT,
-                                  NFA_HCI_WTX_RESP_TIMEOUT);
-              /*situation occurred*/
-              nfa_ee_ce_p61_completed = 1;
-              break;
-            }
+#if (NXP_EXTNS == TRUE)
+          if(nfcFL.nfcNxpEse) {
+              if(nfcFL.eseFL._JCOP_WA_ENABLE) {
+                  if (nfa_ee_ce_p61_completed != 0) {
+                      NFA_TRACE_EVENT0(
+                              "nfa_hci_evt_hdlr Restart timer expired for wired transceive");
+                      nfa_ee_ce_p61_completed = 0;
+                  } else {
+                      uint32_t p61_access_status = 0x0000;
+                      if (NFC_GetP61Status((void*)&p61_access_status) < 0) {
+                          NFA_TRACE_EVENT0(
+                                  "nfa_hci_evt_hdlr : Check dual mode : NFC_GetP61Status failed");
+                      } else {
+                          if (((p61_access_status == 0x400) ||
+                                  (p61_access_status == 0x1000)) &&
+                                  (NFA_check_p61_CL_Activated() != 0)) {
+                              NFA_TRACE_EVENT0(
+                                      "nfa_hci_evt_hdlr Restart timer for wired transceive");
+                              nfa_sys_start_timer(&nfa_hci_cb.timer, NFA_HCI_RSP_TIMEOUT_EVT,
+                                      NFA_HCI_WTX_RESP_TIMEOUT);
+                              /*situation occurred*/
+                              nfa_ee_ce_p61_completed = 1;
+                              break;
+                          }
+                      }
+                  }
+              }
           }
-        }
-#endif
 #endif
         nfa_hci_rsp_timeout((tNFA_HCI_EVENT_DATA*)p_msg);
         break;
diff --git a/src/nfa/include/nfa_api.h b/src/nfa/include/nfa_api.h
index 91a6298..e2f23f2 100644
--- a/src/nfa/include/nfa_api.h
+++ b/src/nfa/include/nfa_api.h
@@ -60,7 +60,7 @@
 #define NFA_MAX_AID_LEN NFC_MAX_AID_LEN
 #define NFA_MIN_AID_LEN 5 /* per NCI specification */
 /* Result of NFA_SetPowerSubState */
-#define NFA_DM_SET_POWER_SUB_STATE_EVT 11
+#define NFA_DM_SET_POWER_SUB_STATE_EVT 13
 /* NFA API return status codes */
 /* Command succeeded    */
 #define NFA_STATUS_OK NCI_STATUS_OK
@@ -241,13 +241,11 @@
 #define NFA_DM_SET_ROUTE_CONFIG_REVT 9
 /* Result of NFA_GetRouting         */
 #define NFA_DM_GET_ROUTE_CONFIG_REVT 10
-
-#if (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true)
 /*Status when EE HCI subsystems disabled*/
 #define NFA_DM_EE_HCI_DISABLE 11
 /*Status when EE HCI susbsystems enabled*/
 #define NFA_DM_EE_HCI_ENABLE 12
-#endif
+
 /* Reader over SWP Events*/
 #define NFA_RD_SWP_READER_REQUESTED 0
 #define NFA_RD_SWP_READER_START 1
@@ -478,11 +476,9 @@
 /* Activated intf for updating the   tech variables */
 #define NFA_ACTIVATED_UPDATE_EVT 41
 #define NFA_RECOVERY_EVT 42 /*Recovery*/
-#if (NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true)
 /* Passive Listening disabled event */
 #define NFA_PASSIVE_LISTEN_DISABLED_EVT 44
 #endif
-#endif
 /* NFC deactivation type */
 #define NFA_DEACTIVATE_TYPE_IDLE NFC_DEACTIVATE_TYPE_IDLE
 #define NFA_DEACTIVATE_TYPE_SLEEP NFC_DEACTIVATE_TYPE_SLEEP
@@ -1146,8 +1142,7 @@
 *******************************************************************************/
 extern tNFA_STATUS NFA_DisableListening(void);
 
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true))
+#if (NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
 ** Function         NFA_DisablePassiveListening
@@ -1643,12 +1638,9 @@
 +*******************************************************************************/
 extern bool NFA_checkNfcStateBusy();
 
-#if (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true)
 extern void NFA_EE_HCI_Control(bool mode);
 extern tNFA_STATUS NFA_ResetNfcc();
-#endif
 
-#if (NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH == true)
 /*******************************************************************************
 **
 ** Function:        NFA_SetPreferredUiccId
@@ -1661,7 +1653,6 @@
 **
 *******************************************************************************/
 extern void NFA_SetPreferredUiccId(uint8_t uicc_id);
-#endif
 
 #endif
 
diff --git a/src/nfa/include/nfa_cho_api.h b/src/nfa/include/nfa_cho_api.h
deleted file mode 100644
index 3722adc..0000000
--- a/src/nfa/include/nfa_cho_api.h
+++ /dev/null
@@ -1,372 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2014 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 public interface file for NFA Connection Handover,
- *  Broadcom's NFC application layer for mobile phones.
- *
- ******************************************************************************/
-#ifndef NFA_CHO_API_H
-#define NFA_CHO_API_H
-
-#include "nfa_api.h"
-#include "ndef_utils.h"
-
-/*****************************************************************************
-**  Constants and data types
-*****************************************************************************/
-
-/* Handover version */
-#define NFA_CHO_VERSION             0x12    /* version 1.2 */
-#define NFA_CHO_GET_MAJOR_VERSION(x) ((UINT8)(x) >> 4)
-#define NFA_CHO_GET_MINOR_VERSION(x) ((UINT8)(x) & 0x0F)
-
-/*
-** NFA Connection Handover callback events
-*/
-#define NFA_CHO_REG_EVT             0x00    /* Registered                       */
-#define NFA_CHO_ACTIVATED_EVT       0x01    /* LLCP link activated              */
-#define NFA_CHO_DEACTIVATED_EVT     0x02    /* LLCP link deactivated            */
-#define NFA_CHO_CONNECTED_EVT       0x03    /* data link connected              */
-#define NFA_CHO_DISCONNECTED_EVT    0x04    /* data link disconnected           */
-#define NFA_CHO_REQUEST_EVT         0x05    /* AC information in "Hr" record    */
-#define NFA_CHO_SELECT_EVT          0x06    /* AC information in "Hs" record    */
-#define NFA_CHO_SEL_ERR_EVT         0x07    /* Received select with error       */
-#define NFA_CHO_TX_FAIL_EVT         0x08    /* Cannot send message to peer      */
-
-typedef UINT8 tNFA_CHO_EVT;
-
-/*
-** Data for NFA_CHO_ACTIVATED_EVT
-*/
-typedef struct
-{
-    BOOLEAN         is_initiator;   /* TRUE if local LLCP is initiator */
-} tNFA_CHO_ACTIVATED;
-
-/* NFA Connection Handover Carrier Power State */
-#define NFA_CHO_CPS_INACTIVE        0x00    /* Carrier is currently off         */
-#define NFA_CHO_CPS_ACTIVE          0x01    /* Carrier is currently on          */
-#define NFA_CHO_CPS_ACTIVATING      0x02    /* Activating carrier               */
-#define NFA_CHO_CPS_UNKNOWN         0x03    /* Unknown                          */
-
-typedef UINT8 tNFA_CHO_CPS;
-
-/* Data for Alternative Carrier Information */
-typedef struct
-{
-    tNFA_CHO_CPS        cps;            /* carrier power state                      */
-    UINT8               num_aux_data;   /* number of Auxiliary NDEF records         */
-} tNFA_CHO_AC_INFO;
-
-/* Device Role of Handover */
-#define NFA_CHO_ROLE_REQUESTER  0
-#define NFA_CHO_ROLE_SELECTOR   1
-#define NFA_CHO_ROLE_UNDECIDED  2
-
-typedef UINT8 tNFA_CHO_ROLE_TYPE;
-
-/*
-** Data for NFA_CHO_CONNECTED_EVT
-*/
-typedef struct
-{
-    tNFA_CHO_ROLE_TYPE  initial_role;   /* NFA_CHO_ROLE_REQUESTER if local initiated */
-                                        /* NFA_CHO_ROLE_SELECTOR if remote initiated */
-} tNFA_CHO_CONNECTED;
-
-/* Disconnected reason */
-#define NFA_CHO_DISC_REASON_API_REQUEST         0
-#define NFA_CHO_DISC_REASON_ALEADY_CONNECTED    1
-#define NFA_CHO_DISC_REASON_CONNECTION_FAIL     2
-#define NFA_CHO_DISC_REASON_PEER_REQUEST        3
-#define NFA_CHO_DISC_REASON_LINK_DEACTIVATED    4
-#define NFA_CHO_DISC_REASON_TIMEOUT             5
-#define NFA_CHO_DISC_REASON_UNKNOWN_MSG         6
-#define NFA_CHO_DISC_REASON_INVALID_MSG         7
-#define NFA_CHO_DISC_REASON_SEMANTIC_ERROR      8
-#define NFA_CHO_DISC_REASON_INTERNAL_ERROR      9
-
-typedef UINT8 tNFA_CHO_DISC_REASON;
-
-/*
-** Data for NFA_CHO_DISCONNECTED_EVT
-*/
-typedef struct
-{
-    tNFA_CHO_DISC_REASON    reason;     /* disconnected reason */
-} tNFA_CHO_DISCONNECTED;
-
-/* Reference ID */
-typedef struct
-{
-    UINT8               ref_len;
-    UINT8               ref_name[NFA_CHO_MAX_REF_NAME_LEN];
-} tNFA_CHO_REF_ID;
-
-/* Alternative Carrier records including carrier power state, carrier data reference and aux data reference */
-typedef struct
-{
-    tNFA_CHO_CPS        cps;                                      /* carrier power state    */
-    tNFA_CHO_REF_ID     carrier_data_ref;                         /* carrier data reference */
-    UINT8               aux_data_ref_count;                       /* number of aux data     */
-    tNFA_CHO_REF_ID     aux_data_ref[NFA_CHO_MAX_AUX_DATA_COUNT]; /* aux data reference     */
-} tNFA_CHO_AC_REC;
-
-/*
-** Data for NFA_CHO_REQUEST_EVT
-** Application may receive it while waiting for NFA_CHO_SELECT_EVT because of handover collision.
-*/
-typedef struct
-{
-    tNFA_STATUS         status;
-    UINT8               num_ac_rec;                     /* number of Alternative Carrier records*/
-    tNFA_CHO_AC_REC     ac_rec[NFA_CHO_MAX_AC_INFO];    /* Alternative Carrier records          */
-    UINT8               *p_ref_ndef;                    /* pointer of NDEF including AC records */
-    UINT32              ref_ndef_len;                   /* length of NDEF                       */
-} tNFA_CHO_REQUEST;
-
-/*
-** Data for NFA_CHO_SELECT_EVT
-*/
-typedef struct
-{
-    tNFA_STATUS         status;
-    UINT8               num_ac_rec;                     /* number of Alternative Carrier records*/
-    tNFA_CHO_AC_REC     ac_rec[NFA_CHO_MAX_AC_INFO];    /* Alternative Carrier records          */
-    UINT8               *p_ref_ndef;                    /* pointer of NDEF including AC records */
-    UINT32              ref_ndef_len;                   /* length of NDEF                       */
-} tNFA_CHO_SELECT;
-
-/* Error reason */
-#define NFA_CHO_ERROR_TEMP_MEM  0x01
-#define NFA_CHO_ERROR_PERM_MEM  0x02
-#define NFA_CHO_ERROR_CARRIER   0x03
-
-/*
-** Data for NFA_CHO_SEL_ERR_EVT
-*/
-typedef struct
-{
-    UINT8               error_reason;   /* Error reason          */
-    UINT32              error_data;     /* Error Data per reason */
-} tNFA_CHO_SEL_ERR;
-
-/* Union of all Connection Handover callback structures */
-typedef union
-{
-    tNFA_STATUS             status;         /* NFA_CHO_REG_EVT          */
-                                            /* NFA_CHO_DEACTIVATED_EVT  */
-                                            /* NFA_CHO_TX_FAIL_EVT      */
-    tNFA_CHO_ACTIVATED      activated;      /* NFA_CHO_ACTIVATED_EVT    */
-    tNFA_CHO_CONNECTED      connected;      /* NFA_CHO_CONNECTED_EVT    */
-    tNFA_CHO_DISCONNECTED   disconnected;   /* NFA_CHO_DISCONNECTED_EVT */
-    tNFA_CHO_SELECT         select;         /* NFA_CHO_SELECT_EVT       */
-    tNFA_CHO_REQUEST        request;        /* NFA_CHO_REQUEST_EVT      */
-    tNFA_CHO_SEL_ERR        sel_err;        /* NFA_CHO_SEL_ERR_EVT      */
-} tNFA_CHO_EVT_DATA;
-
-/* NFA Connection Handover callback */
-typedef void (tNFA_CHO_CBACK) (tNFA_CHO_EVT event, tNFA_CHO_EVT_DATA *p_data);
-
-/*****************************************************************************
-**  External Function Declarations
-*****************************************************************************/
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*******************************************************************************
-**
-** 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
-**
-*******************************************************************************/
-NFC_API extern tNFA_STATUS NFA_ChoRegister (BOOLEAN        enable_server,
-                                            tNFA_CHO_CBACK *p_cback);
-
-/*******************************************************************************
-**
-** 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
-**
-*******************************************************************************/
-NFC_API extern tNFA_STATUS NFA_ChoDeregister (void);
-
-/*******************************************************************************
-**
-** 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.
-**
-** Returns          NFA_STATUS_OK if successfully initiated
-**                  NFA_STATUS_FAILED otherwise
-**
-*******************************************************************************/
-NFC_API extern tNFA_STATUS NFA_ChoConnect (void);
-
-/*******************************************************************************
-**
-** 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
-**
-*******************************************************************************/
-NFC_API extern tNFA_STATUS NFA_ChoDisconnect (void);
-
-/*******************************************************************************
-**
-** 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
-**
-*******************************************************************************/
-NFC_API extern tNFA_STATUS NFA_ChoSendHr (UINT8             num_ac_info,
-                                          tNFA_CHO_AC_INFO *p_ac_info,
-                                          UINT8            *p_ndef,
-                                          UINT32            ndef_len);
-
-/*******************************************************************************
-**
-** 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
-**
-*******************************************************************************/
-NFC_API extern tNFA_STATUS NFA_ChoSendHs (UINT8             num_ac_info,
-                                          tNFA_CHO_AC_INFO *p_ac_info,
-                                          UINT8            *p_ndef,
-                                          UINT32            ndef_len);
-
-/*******************************************************************************
-**
-** 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
-**
-*******************************************************************************/
-NFC_API extern tNFA_STATUS NFA_ChoSendSelectError (UINT8  error_reason,
-                                                   UINT32 error_data);
-
-/*******************************************************************************
-**
-** 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
-**
-*******************************************************************************/
-NFC_API extern UINT8 NFA_ChoSetTraceLevel (UINT8 new_level);
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
-
-#define NFA_CHO_TEST_VERSION    0x01
-#define NFA_CHO_TEST_RANDOM     0x02
-/*******************************************************************************
-**
-** Function         NFA_ChoSetTestParam
-**
-** Description      This function is called to set test parameters.
-**
-*******************************************************************************/
-NFC_API extern void NFA_ChoSetTestParam (UINT8  test_enable,
-                                         UINT8  test_version,
-                                         UINT16 test_random_number);
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* NFA_CHO_API_H */
diff --git a/src/nfa/include/nfa_ee_api.h b/src/nfa/include/nfa_ee_api.h
index 195db4c..787c15f 100644
--- a/src/nfa/include/nfa_ee_api.h
+++ b/src/nfa/include/nfa_ee_api.h
@@ -61,9 +61,6 @@
 extern uint8_t nfa_ee_ce_route_strict_disable;
 extern uint8_t nfa_ee_ce_p61_active;
 #define NFA_EE_AE_NXP_PREFIX_MATCH (0x10)
-#if (NXP_NFCC_ROUTING_BLOCK_BIT == true)
-#define NFA_EE_NXP_ROUTE_BLOCK_BIT (0x40)
-#endif
 #endif
 
 /* NFA EE callback events */
@@ -94,10 +91,8 @@
   NFA_EE_NO_CB_ERR_EVT, /* Error - Can not find control block or wrong state */
 #if (NXP_EXTNS == TRUE)
   NFA_EE_SET_MODE_INFO_EVT,
-#if (NXP_WIRED_MODE_STANDBY == true)
   NFA_EE_PWR_LINK_CTRL_EVT, /* NFCEE Pwr and link cotnrol command Evt */
 #endif
-#endif
   NFA_EE_ADD_APDU_EVT,  /* The status for adding an APDU pattern to a routing table entry*/
   NFA_EE_REMOVE_APDU_EVT /* The status for removing an APDU pattern from a routing table */
 };
@@ -167,8 +162,7 @@
   NFCC_DEACTIVATED_NTF,
   NFCC_ACTION_NTF,
   NFCC_CE_DATA_EVT,
-#if (NXP_EXTNS == TRUE && \
-     NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true)
+#if (NXP_EXTNS == TRUE)
   NFCC_RF_TIMEOUT_EVT
 #endif
 } tNFCC_EVTS_NTF;
@@ -249,13 +243,11 @@
   tNFA_STATUS status;
   uint8_t nfcee_id;
 } tNFA_EE_SET_MODE_INFO;
-#if (NXP_WIRED_MODE_STANDBY == true)
 typedef struct {
   tNFA_STATUS status;       /* NFA_STATUS_OK is successful  */
   tNFA_EE_STATUS ee_status; /* The NFCEE status             */
 } tNFA_EE_PWR_LNK_CTRL;
 #endif
-#endif
 typedef struct {
   tNFA_HANDLE ee_handle;          /* Handle of MFCEE      */
   tNFA_NFC_PROTOCOL la_protocol;  /* Listen A protocol    */
@@ -303,10 +295,8 @@
   tNFA_EE_MODE_SET mode_set;
 #if (NXP_EXTNS == TRUE)
   tNFA_EE_SET_MODE_INFO ee_set_mode_info;
-#if (NXP_WIRED_MODE_STANDBY == true)
   tNFA_EE_PWR_LNK_CTRL pwr_lnk_ctrl;
 #endif
-#endif
   tNFA_EE_INFO new_ee;
   tNFA_EE_DISCOVER_REQ discover_req;
 } tNFA_EE_CBACK_DATA;
@@ -397,7 +387,18 @@
 **
 *******************************************************************************/
 extern tNFA_STATUS NFA_EeDeregister(tNFA_EE_CBACK* p_cback);
-
+/*******************************************************************************
+**
+** Function         NFA_SendPowerLinkCommand
+**
+** Description      This function sends the power link control command
+**
+** Returns          NFA_STATUS_OK if successfully initiated
+**                  NFA_STATUS_FAILED otherwise
+**                  NFA_STATUS_INVALID_PARAM If bad parameter
+**
+*******************************************************************************/
+extern tNFA_STATUS NFA_SendPowerLinkCommand(uint8_t nfcee_id, uint8_t cfg_value);
 /*******************************************************************************
 **
 ** Function         NFA_EeModeSet
diff --git a/src/nfa/include/nfa_hci_api.h b/src/nfa/include/nfa_hci_api.h
index b94bb6f..c7ec22b 100644
--- a/src/nfa/include/nfa_hci_api.h
+++ b/src/nfa/include/nfa_hci_api.h
@@ -672,7 +672,7 @@
 extern tNFA_STATUS NFA_HciAddStaticPipe(tNFA_HANDLE hci_handle, uint8_t host,
                                         uint8_t gate, uint8_t pipe);
 
-#if ((NXP_EXTNS == TRUE) && (NXP_NFCC_MW_RCVRY_BLK_FW_DNLD == true))
+#if (NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
 ** Function         NFA_MW_Fwdnlwd_Recovery
diff --git a/src/nfa/include/nfa_hci_defs.h b/src/nfa/include/nfa_hci_defs.h
index 9715c3e..c245023 100644
--- a/src/nfa/include/nfa_hci_defs.h
+++ b/src/nfa/include/nfa_hci_defs.h
@@ -48,10 +48,8 @@
 #define NFA_HCI_LOOP_BACK_GATE 0x04
 #define NFA_HCI_IDENTITY_MANAGEMENT_GATE 0x05
 #if (NXP_EXTNS == TRUE)
-#ifdef GEMALTO_SE_SUPPORT
 #define NFC_HCI_DEFAULT_DEST_GATE 0XF0
 #endif
-#endif
 
 #define NFA_HCI_FIRST_HOST_SPECIFIC_GENERIC_GATE 0x10
 #define NFA_HCI_LAST_HOST_SPECIFIC_GENERIC_GATE 0xEF
diff --git a/src/nfa/int/nfa_cho_int.h b/src/nfa/int/nfa_cho_int.h
deleted file mode 100644
index eaeebf5..0000000
--- a/src/nfa/int/nfa_cho_int.h
+++ /dev/null
@@ -1,292 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2010-2014 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 private interface file for the NFA Connection Handover.
- *
- ******************************************************************************/
-#ifndef NFA_CHO_INT_H
-#define NFA_CHO_INT_H
-
-#if (defined (NFA_CHO_INCLUDED) && (NFA_CHO_INCLUDED==TRUE))
-#include "llcp_api.h"
-#include "llcp_defs.h"
-#include "nfa_cho_api.h"
-
-/*****************************************************************************
-**  Constants and data types
-*****************************************************************************/
-
-/* NFA Connection Handover state */
-enum
-{
-    NFA_CHO_ST_DISABLED,        /* Application has not registered      */
-    NFA_CHO_ST_IDLE,            /* No data link connection             */
-    NFA_CHO_ST_W4_CC,           /* Waiting for connection confirm      */
-    NFA_CHO_ST_CONNECTED,       /* Data link connected                 */
-
-    NFA_CHO_ST_MAX
-};
-
-typedef UINT8 tNFA_CHO_STATE;
-
-/* NFA Connection Handover substate in NFA_CHO_ST_CONNECTED */
-enum
-{
-    NFA_CHO_SUBSTATE_W4_LOCAL_HR,   /* Waiting for Hs record from local     */
-    NFA_CHO_SUBSTATE_W4_LOCAL_HS,   /* Waiting for Hs record from local     */
-    NFA_CHO_SUBSTATE_W4_REMOTE_HR,  /* Waiting for Hr record from remote    */
-    NFA_CHO_SUBSTATE_W4_REMOTE_HS,  /* Waiting for Hs record from remote    */
-
-    NFA_CHO_SUBSTATE_MAX
-};
-
-typedef UINT8 tNFA_CHO_SUBSTATE;
-
-/* Handover Message receiving status for SAR */
-#define NFA_CHO_RX_NDEF_COMPLETE    0   /* received complete NDEF message */
-#define NFA_CHO_RX_NDEF_TEMP_MEM    1   /* Cannot process due to temporary memory constraint */
-#define NFA_CHO_RX_NDEF_PERM_MEM    2   /* Cannot process due to permanent memory constraint */
-#define NFA_CHO_RX_NDEF_INCOMPLTE   3   /* Need more date       */
-#define NFA_CHO_RX_NDEF_INVALID     4   /* Invalid NDEF message */
-
-typedef UINT8 tNFA_CHO_RX_NDEF_STATUS;
-
-/* Handover Message Type */
-#define NFA_CHO_MSG_UNKNOWN         0   /* Unknown Message           */
-#define NFA_CHO_MSG_HR              1   /* Handover Request Message  */
-#define NFA_CHO_MSG_HS              2   /* Handover Select Message   */
-#define NFA_CHO_MSG_BT_OOB          3   /* Simplified BT OOB message */
-#define NFA_CHO_MSG_WIFI            4   /* Simplified WIFI message   */
-
-typedef UINT8 tNFA_CHO_MSG_TYPE;
-
-/* Timeout */
-#define NFA_CHO_TIMEOUT_FOR_HS          1000    /* ms, waiting for Hs record */
-#define NFA_CHO_TIMEOUT_FOR_RETRY       1000    /* ms, retry because of temp memory constrain */
-#define NFA_CHO_TIMEOUT_SEGMENTED_HR    500     /* ms, waiting for next segmented Hr */
-
-#define NFA_CHO_EXCLUDING_PAYLOAD_ID    0xFF    /* don't include payload ID string */
-
-/* NFA Connection Handover internal events */
-enum
-{
-    NFA_CHO_API_REG_EVT     = NFA_SYS_EVT_START (NFA_ID_CHO), /* NFA_ChoRegister () */
-    NFA_CHO_API_DEREG_EVT,            /* NFA_ChoDeregister ()       */
-    NFA_CHO_API_CONNECT_EVT,          /* NFA_ChoConnect ()          */
-    NFA_CHO_API_DISCONNECT_EVT,       /* NFA_ChoDisconnect ()       */
-    NFA_CHO_API_SEND_HR_EVT,          /* NFA_ChoSendHr ()           */
-    NFA_CHO_API_SEND_HS_EVT,          /* NFA_ChoSendHs ()           */
-    NFA_CHO_API_SEL_ERR_EVT,          /* NFA_ChoSendSelectError ()  */
-
-    NFA_CHO_RX_HANDOVER_MSG_EVT,      /* Received Handover Message  */
-
-    NFA_CHO_LLCP_CONNECT_IND_EVT,     /* LLCP_SAP_EVT_CONNECT_IND       */
-    NFA_CHO_LLCP_CONNECT_RESP_EVT,    /* LLCP_SAP_EVT_CONNECT_RESP      */
-    NFA_CHO_LLCP_DISCONNECT_IND_EVT,  /* LLCP_SAP_EVT_DISCONNECT_IND    */
-    NFA_CHO_LLCP_DISCONNECT_RESP_EVT, /* LLCP_SAP_EVT_DISCONNECT_RESP   */
-    NFA_CHO_LLCP_CONGEST_EVT,         /* LLCP_SAP_EVT_CONGEST           */
-    NFA_CHO_LLCP_LINK_STATUS_EVT,     /* LLCP_SAP_EVT_LINK_STATUS       */
-
-    NFA_CHO_NDEF_TYPE_HANDLER_EVT,    /* Callback event from NDEF Type handler */
-    NFA_CHO_TIMEOUT_EVT,              /* Timeout event              */
-
-    NFA_CHO_LAST_EVT
-};
-
-typedef UINT16 tNFA_CHO_INT_EVT;
-
-/* data type for NFA_CHO_API_REG_EVT */
-typedef struct
-{
-    BT_HDR              hdr;
-    BOOLEAN             enable_server;
-    tNFA_CHO_CBACK     *p_cback;
-} tNFA_CHO_API_REG;
-
-/* data type for NFA_CHO_API_DEREG_EVT */
-typedef BT_HDR tNFA_CHO_API_DEREG;
-
-/* data type for NFA_CHO_API_CONNECT_EVT */
-typedef BT_HDR tNFA_CHO_API_CONNECT;
-
-/* data type for NFA_CHO_API_DISCONNECT_EVT */
-typedef BT_HDR tNFA_CHO_API_DISCONNECT;
-
-/* data type for NFA_CHO_API_SEND_HR_EVT */
-typedef struct
-{
-    BT_HDR              hdr;
-    UINT8               num_ac_info;
-    tNFA_CHO_AC_INFO   *p_ac_info;
-    UINT8              *p_ndef;
-    UINT32              max_ndef_size;
-    UINT32              cur_ndef_size;
-} tNFA_CHO_API_SEND_HR;
-
-/* data type for NFA_CHO_API_SEND_HS_EVT */
-typedef struct
-{
-    BT_HDR              hdr;
-    UINT8               num_ac_info;
-    tNFA_CHO_AC_INFO   *p_ac_info;
-    UINT8              *p_ndef;
-    UINT32              max_ndef_size;
-    UINT32              cur_ndef_size;
-} tNFA_CHO_API_SEND_HS;
-
-/* data type for NFA_CHO_API_STOP_EVT */
-typedef BT_HDR tNFA_CHO_API_STOP;
-
-/* data type for NFA_CHO_API_SEL_ERR_EVT */
-typedef struct
-{
-    BT_HDR              hdr;
-    UINT8               error_reason;
-    UINT32              error_data;
-} tNFA_CHO_API_SEL_ERR;
-
-/* data type for NFA_CHO_NDEF_TYPE_HANDLER_EVT */
-typedef struct
-{
-    BT_HDR              hdr;
-    tNFA_NDEF_EVT       event;
-    tNFA_NDEF_EVT_DATA  data;
-} tNFA_CHO_NDEF_TYPE_HDLR_EVT;
-
-/* union of all event data types */
-typedef union
-{
-    BT_HDR                      hdr;                /* NFA_CHO_TIMEOUT_EVT        */
-    tNFA_CHO_API_REG            api_reg;            /* NFA_CHO_API_REG_EVT        */
-    tNFA_CHO_API_DEREG          api_dereg;          /* NFA_CHO_API_DEREG_EVT      */
-    tNFA_CHO_API_CONNECT        api_connect;        /* NFA_CHO_API_CONNECT_EVT    */
-    tNFA_CHO_API_DISCONNECT     api_disconnect;     /* NFA_CHO_API_DISCONNECT_EVT */
-    tNFA_CHO_API_SEND_HR        api_send_hr;        /* NFA_CHO_API_SEND_HR_EVT    */
-    tNFA_CHO_API_SEND_HS        api_send_hs;        /* NFA_CHO_API_SEND_HS_EVT    */
-    tNFA_CHO_API_SEL_ERR        api_sel_err;        /* NFA_CHO_API_SEL_ERR_EVT    */
-    tNFA_CHO_NDEF_TYPE_HDLR_EVT ndef_type_hdlr;     /* NFA_CHO_NDEF_TYPE_HANDLER_EVT */
-    tLLCP_SAP_CBACK_DATA        llcp_cback_data;    /* LLCP callback data         */
-} tNFA_CHO_INT_EVENT_DATA;
-
-/*****************************************************************************
-**  control block
-*****************************************************************************/
-
-#define NFA_CHO_FLAGS_LLCP_ACTIVATED    0x01
-#define NFA_CHO_FLAGS_CLIENT_ONLY       0x02    /* Handover server is not enabled       */
-#define NFA_CHO_FLAGS_CONN_COLLISION    0x04    /* collision when creating data link    */
-
-/* NFA Connection Handover control block */
-typedef struct
-{
-    tNFA_CHO_STATE      state;                  /* main state                           */
-    tNFA_CHO_SUBSTATE   substate;               /* substate in connected state          */
-    TIMER_LIST_ENT      timer;                  /* timer for rx handover message        */
-
-    UINT8               server_sap;             /* SAP for local handover server        */
-    UINT8               client_sap;             /* SAP for connection to remote handover server */
-    UINT8               local_sap;              /* SSAP for connection, either server_sap or client_sap */
-    UINT8               remote_sap;             /* DSAP for connection                  */
-
-    UINT8               flags;                  /* internal flags                       */
-    tNFA_CHO_DISC_REASON disc_reason;           /* disconnection reason                 */
-
-    tNFA_HANDLE         hs_ndef_type_handle;    /* handle for HS NDEF Type handler      */
-    tNFA_HANDLE         bt_ndef_type_handle;    /* handle for BT OOB NDEF Type handler  */
-    tNFA_HANDLE         wifi_ndef_type_handle;  /* handle for WiFi NDEF Type handler    */
-
-    UINT16              local_link_miu;         /* MIU of local LLCP                    */
-    UINT16              remote_miu;             /* peer's MIU of data link connection   */
-    BOOLEAN             congested;              /* TRUE if data link is congested       */
-
-    UINT8               collision_local_sap;    /* SSAP for collision connection        */
-    UINT8               collision_remote_sap;   /* DSAP for collision connection        */
-    UINT16              collision_remote_miu;   /* peer's MIU of collision  connection  */
-    BOOLEAN             collision_congested;    /* TRUE if collision connection is congested */
-
-    UINT16              tx_random_number;       /* it has been sent in Hr for collision */
-
-    UINT8              *p_tx_ndef_msg;          /* allocate buffer for tx NDEF msg      */
-    UINT32              tx_ndef_cur_size;       /* current size of NDEF message         */
-    UINT32              tx_ndef_sent_size;      /* transmitted size of NDEF message     */
-
-    UINT8              *p_rx_ndef_msg;          /* allocate buffer for rx NDEF msg      */
-    UINT32              rx_ndef_buf_size;       /* allocate buffer size for rx NDEF msg */
-    UINT32              rx_ndef_cur_size;       /* current rx size of NDEF message      */
-
-    tNFA_CHO_CBACK     *p_cback;                /* callback registered by application   */
-
-    UINT8               trace_level;
-
-#if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
-    UINT8               test_enabled;
-    UINT8               test_version;
-    UINT16              test_random_number;
-#endif
-} tNFA_CHO_CB;
-
-/*****************************************************************************
-**  External variables
-*****************************************************************************/
-
-/* NFA Connection Handover control block */
-#if NFA_DYNAMIC_MEMORY == FALSE
-extern tNFA_CHO_CB nfa_cho_cb;
-#else
-extern tNFA_CHO_CB *nfa_cho_cb_ptr;
-#define nfa_cho_cb (*nfa_cho_cb_ptr)
-#endif
-
-/*****************************************************************************
-**  External functions
-*****************************************************************************/
-/* nfa_cho_main.c */
-void nfa_cho_init (void);
-
-/* nfa_cho_sm.c */
-void nfa_cho_sm_llcp_cback (tLLCP_SAP_CBACK_DATA *p_data);
-void nfa_cho_sm_execute (tNFA_CHO_INT_EVT event, tNFA_CHO_INT_EVENT_DATA *p_evt_data);
-
-/* nfa_cho_util.c */
-void nfa_cho_proc_ndef_type_handler_evt (tNFA_CHO_INT_EVENT_DATA *p_evt_data);
-tNFA_STATUS nfa_cho_proc_api_reg (tNFA_CHO_INT_EVENT_DATA *p_evt_data);
-void        nfa_cho_proc_api_dereg (void);
-tNFA_STATUS nfa_cho_create_connection (void);
-void nfa_cho_process_disconnection (tNFA_CHO_DISC_REASON disc_reason);
-void nfa_cho_notify_tx_fail_evt (tNFA_STATUS status);
-
-tNFA_STATUS nfa_cho_send_handover_msg (void);
-tNFA_CHO_RX_NDEF_STATUS nfa_cho_read_ndef_msg (UINT8 local_sap, UINT8 remote_sap);
-tNFA_CHO_RX_NDEF_STATUS nfa_cho_reassemble_ho_msg (UINT8 local_sap, UINT8 remote_sap);
-
-tNFA_STATUS nfa_cho_send_hr (tNFA_CHO_API_SEND_HR *p_api_send_hr);
-tNFA_STATUS nfa_cho_send_hs (tNFA_CHO_API_SEND_HS *p_api_select);
-tNFA_STATUS nfa_cho_send_hs_error (UINT8 error_reason, UINT32 error_data);
-
-void nfa_cho_proc_hr (UINT32 length, UINT8 *p_ndef_msg);
-void nfa_cho_proc_hs (UINT32 length, UINT8 *p_ndef_msg);
-void nfa_cho_proc_simplified_format (UINT32 length, UINT8 *p_ndef_msg);
-
-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);
-#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 c31d9a2..6eede26 100644
--- a/src/nfa/int/nfa_dm_int.h
+++ b/src/nfa/int/nfa_dm_int.h
@@ -64,8 +64,7 @@
   NFA_DM_API_DISABLE_POLLING_EVT,
   NFA_DM_API_ENABLE_LISTENING_EVT,
   NFA_DM_API_DISABLE_LISTENING_EVT,
-#if (NXP_EXTNS == TRUE && \
-     NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true)
+#if (NXP_EXTNS == TRUE)
   NFA_DM_API_DISABLE_PASSIVE_LISTENING_EVT,
 #endif
   NFA_DM_API_PAUSE_P2P_EVT,
@@ -335,8 +334,7 @@
 #define NFA_DM_DISC_MASK_L_LEGACY 0x10000000
 #define NFA_DM_DISC_MASK_LISTEN 0xFFFF0000
 #define NFA_DM_DISC_MASK_NFC_DEP 0x0C481848
-#if (NXP_EXTNS == TRUE && \
-     NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true)
+#if (NXP_EXTNS == TRUE)
 #define NFA_DM_DISC_MASK_ACTIVE_LISTEN 0xFF00FFFF
 #endif
 
@@ -475,8 +473,7 @@
 #define NFA_DM_FLAGS_P2P_PAUSED 0x00002000
 /* Power Off Sleep                                                      */
 #define NFA_DM_FLAGS_POWER_OFF_SLEEP 0x00008000
-#if (NXP_EXTNS == TRUE && \
-     NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true)
+#if (NXP_EXTNS == TRUE)
 /* NFA_DisablePassiveListening() is called and engaged                  */
 #define NFA_DM_FLAGS_PASSIVE_LISTEN_DISABLED 0x00010000
 #endif
@@ -652,8 +649,7 @@
 bool nfa_dm_act_disable_polling(tNFA_DM_MSG* p_data);
 bool nfa_dm_act_enable_listening(tNFA_DM_MSG* p_data);
 bool nfa_dm_act_disable_listening(tNFA_DM_MSG* p_data);
-#if (NXP_EXTNS == TRUE && \
-     NXP_NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION == true)
+#if (NXP_EXTNS == TRUE)
 bool nfa_dm_act_disable_passive_listening(tNFA_DM_MSG* p_data);
 #endif
 bool nfa_dm_act_pause_p2p(tNFA_DM_MSG* p_data);
@@ -727,7 +723,7 @@
 char* nfa_dm_nfc_revt_2_str(tNFC_RESPONSE_EVT event);
 #endif
 
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true))
+#if (NXP_EXTNS == TRUE)
 tNFC_STATUS nfc_ncif_reset_nfcc();
 #endif
 #endif /* NFA_DM_INT_H */
diff --git a/src/nfa/int/nfa_ee_int.h b/src/nfa/int/nfa_ee_int.h
index 48f6523..547dd7a 100644
--- a/src/nfa/int/nfa_ee_int.h
+++ b/src/nfa/int/nfa_ee_int.h
@@ -85,10 +85,9 @@
   NFA_EE_NCI_MODE_SET_RSP_EVT,
 #if (NXP_EXTNS == TRUE)
   NFA_EE_NCI_MODE_SET_INFO,
-#if (NXP_WIRED_MODE_STANDBY == true)
+  NFA_EE_NCI_PWR_LNK_CTRL_SET_EVT,
   NFA_EE_NCI_PWR_LNK_CTRL_RSP_EVT,
 #endif
-#endif
   NFA_EE_NCI_CONN_EVT,
   NFA_EE_NCI_DATA_EVT,
   NFA_EE_NCI_ACTION_NTF_EVT,
@@ -100,6 +99,7 @@
   NFA_EE_CFG_TO_NFCC_EVT,
   NFA_EE_API_ADD_APDU_EVT,
   NFA_EE_API_REMOVE_APDU_EVT,
+  NFA_EE_NCI_NFCEE_STATUS_NTF_EVT,
   NFA_EE_MAX_EVT
 };
 
@@ -130,11 +130,8 @@
 };
 typedef uint8_t tNFA_EE_CONN_ST;
 #if (NXP_EXTNS == TRUE)
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 #define NFA_EE_ROUT_BUF_SIZE 720
-#else
-#define NFA_EE_ROUT_BUF_SIZE 200
-#endif
+#define NFA_EE_ROUT_BUF_SIZE_STAT 200
 #else
 #define NFA_EE_ROUT_BUF_SIZE 540
 #endif
@@ -155,7 +152,6 @@
 #define NFA_EE_PROTO_ROUTE_ENTRY_SIZE 5
 #define NFA_EE_TECH_ROUTE_ENTRY_SIZE 5
 
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 /**
  * Max Routing Table Size = 720
  * After allocating size for Technology based routing and Protocol based
@@ -185,9 +181,7 @@
    NFA_EE_BUFFER_FUTURE_EXT)
 #define NFA_EE_MAX_AID_CFG_LEN \
   (NFA_EE_ROUT_BUF_SIZE - NFA_EE_TOTAL_PROTO_TECH_FUTURE_EXT_ROUTE_SIZE)
-#else
-#define NFA_EE_MAX_AID_CFG_LEN (160)
-#endif
+#define NFA_EE_MAX_AID_CFG_LEN_STAT (160)
 #else
 #define NFA_EE_MAX_AID_CFG_LEN (510)
 #endif
@@ -220,6 +214,7 @@
 /* part of tNFA_EE_STATUS; for internal use only  */
 /* waiting for restore to full power mode to complete */
 #define NFA_EE_STATUS_RESTORING 0x20
+
 /* this bit is in ee_status for internal use only */
 #define NFA_EE_STATUS_INT_MASK 0x20
 
@@ -262,7 +257,8 @@
  */
   uint8_t apdu_len[NFA_EE_MAX_APDU_PATTERN_ENTRIES]; /* the actual lengths in apdu_cfg */
   uint8_t apdu_pwr_cfg[NFA_EE_MAX_APDU_PATTERN_ENTRIES]; /* power configuration of this APDU Pattern entry */
-  uint16_t apdu_rt_info[NFA_EE_MAX_APDU_PATTERN_ENTRIES]; /* route/vs info for this APDU PATTERN entry */
+  uint8_t apdu_rt_info[NFA_EE_MAX_APDU_PATTERN_ENTRIES]; /* route/vs info for this APDU PATTERN entry */
+  uint8_t apdu_rt_loc[NFA_EE_MAX_APDU_PATTERN_ENTRIES];/* route location info for this APDU Pattern entry */
   uint8_t apdu_cfg[NFA_EE_TOTAL_APDU_PATTERN_SIZE];     /* routing entries based on APDU PATTERN */
   uint8_t apdu_pattern_entries;   /* The number of APDU PATTERN entries in aid_cfg */
 /* Each AID entry has an ssociated aid_len, aid_pwr_cfg, aid_rt_info.
@@ -272,23 +268,20 @@
  * entry
  */
 #if (NXP_EXTNS == TRUE)
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
   uint8_t* aid_len;     /* the actual lengths in aid_cfg */
   uint8_t* aid_pwr_cfg; /* power configuration of this AID entry */
   uint8_t* aid_rt_info; /* route/vs info for this AID entry */
   uint8_t* aid_rt_loc;  /* route location info for this AID entry */
   uint8_t* aid_cfg;     /* routing entries based on AID */
   uint8_t* aid_info;    /* AID info prefix/subset routing */
-#else
-  uint8_t aid_rt_loc[NFA_EE_MAX_AID_ENTRIES]; /* route location info for this
-                                                 AID entry */
-  uint8_t aid_len[NFA_EE_MAX_AID_ENTRIES]; /* the actual lengths in aid_cfg */
-  uint8_t aid_pwr_cfg[NFA_EE_MAX_AID_ENTRIES]; /* power configuration of this
-                                                  AID entry */
-  uint8_t aid_rt_info[NFA_EE_MAX_AID_ENTRIES]; /* route/vs info for this AID
-                                                  entry */
-  uint8_t aid_cfg[NFA_EE_MAX_AID_CFG_LEN];     /* routing entries based on AID */
-#endif
+  uint8_t aid_rt_loc_stat[NFA_EE_MAX_AID_ENTRIES]; /* route location info for this
+                                                    AID entry */
+  uint8_t aid_len_stat[NFA_EE_MAX_AID_ENTRIES]; /* the actual lengths in aid_cfg */
+  uint8_t aid_pwr_cfg_stat[NFA_EE_MAX_AID_ENTRIES]; /* power configuration of this
+                                                     AID entry */
+  uint8_t aid_rt_info_stat[NFA_EE_MAX_AID_ENTRIES]; /* route/vs info for this AID
+                                                     entry */
+  uint8_t aid_cfg_stat[NFA_EE_MAX_AID_CFG_LEN];     /* routing entries based on AID */
 #else
   uint8_t aid_len[NFA_EE_MAX_AID_ENTRIES]; /* the actual lengths in aid_cfg */
   uint8_t aid_pwr_cfg[NFA_EE_MAX_AID_ENTRIES]; /* power configuration of this
@@ -350,6 +343,12 @@
   uint8_t nfcee_id;
   uint8_t mode;
 } tNFA_EE_API_MODE_SET;
+/* data type for NFA_EE_API_POWER_LINK_EVT */
+typedef struct {
+  NFC_HDR hdr;
+  uint8_t nfcee_id;
+  uint8_t cfg_value;
+} tNFA_EE_API_POWER_LINK_EVT;
 
 /* data type for NFA_EE_API_SET_TECH_CFG_EVT */
 typedef struct {
@@ -490,14 +489,13 @@
   NFC_HDR hdr;
   tNFC_NFCEE_MODE_SET_INFO* p_data;
 } tNFA_EE_NCI_SET_MODE_INFO;
+
 /* data type for NFA_EE_NCI_MODE_SET_RSP_EVT */
-#if (NXP_WIRED_MODE_STANDBY == true)
 typedef struct {
   NFC_HDR hdr;
   tNFC_NFCEE_EE_PWR_LNK_REVT* p_data;
 } tNFA_EE_NCI_PWR_LNK_CTRL;
 #endif
-#endif
 
 /* data type for NFA_EE_NCI_WAIT_RSP_EVT */
 typedef struct {
@@ -526,6 +524,12 @@
   tNFC_EE_DISCOVER_REQ_REVT* p_data;
 } tNFA_EE_NCI_DISC_REQ;
 
+/* data type for NFA_EE_NCI_NFCEE_STATUS_EVT */
+typedef struct {
+  NFC_HDR hdr;
+  tNFC_NFCEE_STATUS_REVT* p_data;
+} tNFA_EE_NCI_NFCEE_STATUS_NTF;
+
 /* union of all event data types */
 typedef union {
   NFC_HDR hdr;
@@ -549,14 +553,14 @@
   tNFA_EE_NCI_MODE_SET mode_set_rsp;
 #if (NXP_EXTNS == TRUE)
   tNFA_EE_NCI_SET_MODE_INFO mode_set_info;
-#if (NXP_WIRED_MODE_STANDBY == true)
+  tNFA_EE_API_POWER_LINK_EVT pwr_lnk_ctrl_set;
   tNFA_EE_NCI_PWR_LNK_CTRL pwr_lnk_ctrl_rsp;
 #endif
-#endif
   tNFA_EE_NCI_WAIT_RSP wait_rsp;
   tNFA_EE_NCI_CONN conn;
   tNFA_EE_NCI_ACTION act;
   tNFA_EE_NCI_DISC_REQ disc_req;
+  tNFA_EE_NCI_NFCEE_STATUS_NTF nfcee_status_ntf;
 } tNFA_EE_MSG;
 
 /* type for State Machine (SM) action functions */
@@ -596,6 +600,9 @@
 /* set this bit when NFC-DEP is configured in the routing table */
 #define NFA_EE_FLAG_CFG_NFC_DEP 0x05
 #endif
+#if(NXP_EXTNS == TRUE)
+#define NFA_EE_HCI_CONN_CLOSE  0x8
+#endif
 typedef uint8_t tNFA_EE_FLAGS;
 
 /* NFCEE DISCOVER in progress       */
@@ -609,12 +616,14 @@
 #if (NXP_EXTNS == TRUE)
 /* received NFCEE_MODE_SET NTF  */
 #define NFA_EE_MODE_SET_NTF 0x04
+#define NFA_EE_RECOVERY 0x05
 #endif
+
 typedef uint8_t tNFA_EE_DISC_STS;
 
 typedef void(tNFA_EE_ENABLE_DONE_CBACK)(tNFA_EE_DISC_STS status);
 
-#if ((NXP_EXTNS == TRUE) && (NXP_UICC_HANDLE_CLEAR_ALL_PIPES == true))
+#if (NXP_EXTNS == TRUE)
 typedef void(tNFA_EE_CLEAR_ALL_PIPES_CBACK)(uint8_t source_host);
 #endif
 
@@ -628,11 +637,9 @@
   tNFA_EE_ENABLE_DONE_CBACK*
       p_enable_cback; /* callback to notify on enable done*/
 #if (NXP_EXTNS == TRUE)
-#if (NXP_UICC_HANDLE_CLEAR_ALL_PIPES == true)
   tNFA_EE_CLEAR_ALL_PIPES_CBACK*
       p_clear_all_pipes_cback; /* callback to notify UICC CAP */
 #endif
-#endif
   tNFA_EE_EM_STATE em_state; /* NFA-EE state initialized or not  */
   uint8_t wait_rsp;          /* num of NCI rsp expected (update) */
   uint8_t num_ee_expecting;  /* number of ee_info still expecting*/
@@ -643,6 +650,7 @@
   tNFA_EE_FLAGS ee_flags;    /* flags                            */
   uint8_t nfcee_id;
   uint8_t mode;
+  uint8_t route_block_control; /* controls route block feature   */
 } tNFA_EE_CB;
 
 /* Order of Routing entries in Routing Table */
@@ -686,6 +694,7 @@
 uint8_t NFA_check_p61_CL_Activated();
 uint16_t nfa_ee_find_max_aid_config_length();
 uint16_t nfa_ee_api_get_max_aid_config_length();
+extern uint8_t nfa_ee_connectionClosed();
 #endif
 uint8_t nfa_ee_ecb_to_mask(tNFA_EE_ECB* p_cb);
 void nfa_ee_restore_one_ecb(tNFA_EE_ECB* p_cb);
@@ -696,6 +705,7 @@
 void nfa_ee_api_register(tNFA_EE_MSG* p_data);
 void nfa_ee_api_deregister(tNFA_EE_MSG* p_data);
 void nfa_ee_api_mode_set(tNFA_EE_MSG* p_data);
+void nfa_ee_api_power_link_set(tNFA_EE_MSG* p_data);
 void nfa_ee_api_set_tech_cfg(tNFA_EE_MSG* p_data);
 void nfa_ee_api_set_proto_cfg(tNFA_EE_MSG* p_data);
 void nfa_ee_api_add_aid(tNFA_EE_MSG* p_data);
@@ -713,10 +723,9 @@
 extern void nfa_hci_conn_cback(uint8_t conn_id, tNFC_CONN_EVT event,
                                tNFC_CONN* p_data);
 void nfa_ee_nci_set_mode_info(tNFA_EE_MSG* p_data);
-#if (NXP_WIRED_MODE_STANDBY == true)
 void nfa_ee_nci_pwr_link_ctrl_rsp(tNFA_EE_MSG* p_data);
 #endif
-#endif
+void nfa_ee_nci_nfcee_status_ntf(tNFA_EE_MSG* p_data);
 void nfa_ee_nci_wait_rsp(tNFA_EE_MSG* p_data);
 void nfa_ee_nci_conn(tNFA_EE_MSG* p_data);
 void nfa_ee_nci_action_ntf(tNFA_EE_MSG* p_data);
diff --git a/src/nfa/int/nfa_hci_int.h b/src/nfa/int/nfa_hci_int.h
index 0142dfc..66f3cb3 100644
--- a/src/nfa/int/nfa_hci_int.h
+++ b/src/nfa/int/nfa_hci_int.h
@@ -39,7 +39,7 @@
 #define NFA_HCI_DEBUG_ON 0x01
 #define NFA_HCI_DEBUG_OFF 0x00
 
-#if ((NXP_EXTNS == TRUE) && (NXP_NFCC_MW_RCVRY_BLK_FW_DNLD == true))
+#if (NXP_EXTNS == TRUE)
 bool MW_RCVRY_FW_DNLD_ALLOWED;
 #endif
 /*****************************************************************************
@@ -110,6 +110,7 @@
 #if (NXP_EXTNS == TRUE)
 /* HCI is waiting for NFCEE initialization */
 #define NFA_HCI_STATE_NFCEE_ENABLE 0x09
+#define NFA_HCI_STATE_EE_RECOVERY 0x0A
 #endif
 
 #if (NXP_EXTNS == TRUE)
@@ -613,10 +614,9 @@
 extern void nfa_hciu_set_nfceeid_poll_mask(uint8_t event, uint8_t host_id);
 extern bool nfa_hciu_check_any_host_reset_pending();
 extern tNFA_STATUS nfa_hci_api_config_nfcee(uint8_t hostId);
-#if (NXP_UICC_HANDLE_CLEAR_ALL_PIPES == true)
+extern tNFA_STATUS nfa_hci_getApduAndConnectivity_PipeStatus();
 void nfa_hci_handle_clear_all_pipes_evt(uint8_t source_host);
 #endif
-#endif
 
 /* Action functions in nfa_hci_act.c
 */
diff --git a/src/nfa/rw/nfa_rw_act.c b/src/nfa/rw/nfa_rw_act.c
index 71c97fb..2f34910 100644
--- a/src/nfa/rw/nfa_rw_act.c
+++ b/src/nfa/rw/nfa_rw_act.c
@@ -951,7 +951,11 @@
         tag_params.t3t.p_system_codes = NULL;
       }
 
+#if(NXP_EXTNS == TRUE)
+      nfa_dm_notify_activation_status(p_rw_data->status, &tag_params);
+#else
       nfa_dm_notify_activation_status(NFA_STATUS_OK, &tag_params);
+#endif
       break;
 
     case RW_T3T_FORMAT_CPLT_EVT: /* Format completed */
diff --git a/src/nfc/include/nci_hmsgs.h b/src/nfc/include/nci_hmsgs.h
index 549bc6f..4df6cce 100644
--- a/src/nfc/include/nci_hmsgs.h
+++ b/src/nfc/include/nci_hmsgs.h
@@ -82,7 +82,7 @@
 uint8_t nci_snd_discover_map_cmd(uint8_t num, tNCI_DISCOVER_MAPS* p_maps);
 uint8_t nci_snd_t3t_polling(uint16_t system_code, uint8_t rc, uint8_t tsn);
 uint8_t nci_snd_parameter_update_cmd(uint8_t* p_param_tlvs, uint8_t tlv_size);
-#if (NXP_EXTNS == TRUE) && (NXP_WIRED_MODE_STANDBY == true)
+#if (NXP_EXTNS == TRUE)
 uint8_t nci_snd_pwr_nd_lnk_ctrl_cmd(uint8_t nfcee_id, uint8_t cfg_value);
 #endif
 #if ((NFC_NFCEE_INCLUDED == true) && (NFC_RW_ONLY == false))
diff --git a/src/nfc/include/nfc_api.h b/src/nfc/include/nfc_api.h
index abe37cc..40935a8 100644
--- a/src/nfc/include/nfc_api.h
+++ b/src/nfc/include/nfc_api.h
@@ -50,11 +50,7 @@
 #include "nfc_hal_api.h"
 #include "gki.h"
 #include "vendor_cfg.h"
-#if (NXP_EXTNS == TRUE)
-#include <NXP_NFCC_Features.h>
-#include <NXP_ESE_Features.h>
-#include <NXP_Platform_Features.h>
-#endif
+
 /* NFC application return status codes */
 /* Command succeeded    */
 #define NFC_STATUS_OK NCI_STATUS_OK
@@ -114,16 +110,16 @@
 #define NXP_EN_PN66T 0
 #define NXP_EN_PN551 0
 #define NXP_EN_PN67T 0
-#define NXP_EN_PN553 0
-#define NXP_EN_PN80T 0
+#define NXP_EN_PN553 1
+#define NXP_EN_PN80T 1
 #define NXP_EN_PN553_MR1 0
 #define NXP_EN_PN81A     0
 #define NXP_EN_PN553_MR2 0
-#define NXP_EN_PN557     1
-#define NXP_EN_PN81T     1
+#define NXP_EN_PN557     0
+#define NXP_EN_PN81T     0
 #define NXP_ANDROID_VER (8U)        /* NXP android version */
-#define NFC_NXP_MW_VERSION_MAJ (0U) /* MW Major Version */
-#define NFC_NXP_MW_VERSION_MIN (9U) /* MW Minor Version */
+#define NFC_NXP_MW_VERSION_MAJ (0x01) /* MW Major Version */
+#define NFC_NXP_MW_VERSION_MIN (0x00) /* MW Minor Version */
 #endif
 /* 0xE0 ~0xFF are proprietary status codes */
 /* Command started successfully                     */
@@ -179,6 +175,8 @@
 #define NXP_NFC_PROP_MAX_CMD_BUF_SIZE ((unsigned char)0x40)
 #define NXP_NFC_SET_MSB(x) (x |= 0x80)
 #define NXP_NFC_RESET_MSB(x) (x &= 0x7F)
+#define NXP_NFC_ESE_CONN_PIPE_STATUS  ((unsigned char)0x22)
+#define NXP_NFC_ESE_APDU_PIPE_STATUS  ((unsigned char)0x23)
 /**********************************************
  * NFC Config Parameter IDs defined by NXP NFC
  **********************************************/
@@ -305,15 +303,13 @@
 #define NFC_FIRST_REVT 0x5000
 #define NFC_FIRST_CEVT 0x6000
 #define NFC_FIRST_TEVT 0x8000
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+#if (NXP_EXTNS == TRUE)
 void nfc_ncif_onWiredModeHold_timeout();
 void nfc_ncif_allow_dwp_transmission();
 void nfc_ncif_modeSet_Ntf_timeout();
 void nfc_ncif_modeSet_rsp_timeout();
 void nfc_ncif_resume_dwp_wired_mode();
 void nfc_ncif_pwr_link_rsp_timeout();
-#endif
 /* the events reported on tNFC_RESPONSE_CBACK */
 enum {
   NFC_ENABLE_REVT = NFC_FIRST_REVT, /* 0  Enable event                  */
@@ -356,9 +352,7 @@
 #if (NXP_EXTNS == TRUE)
   NFC_RF_WTX_CEVT, /* 6  received rf wtx */
 #endif
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
   NFC_RF_TRANSMISSION_ERROR, /* 7 CE Error events */
-#endif
   NFC_HCI_RESTART_TIMER
 };
 typedef uint16_t tNFC_CONN_EVT;
@@ -413,7 +407,6 @@
   uint8_t nfcee_id;
 } tNFC_NFCEE_MODE_SET_INFO;
 
-#if (NXP_ESE_JCOP_DWNLD_PROTECTION == true)
 #define ESE_STATE_JCOP_DWNLD                                      \
   0x8000 /* Depicts the state of Jcop download to be matched with \
             P61_STATE_JCP_DWNLD                                   \
@@ -427,7 +420,6 @@
   JCP_DWP_DWNLD_COMPLETE = 0x8080, /* jcop download complete */
 } jcop_dwnld_state_t;
 #endif
-#endif
 
 /* the data type associated with NFC_NFCEE_DISCOVER_REVT */
 typedef struct {
@@ -458,6 +450,10 @@
   uint8_t info[NFC_MAX_EE_INFO];
 } tNFC_NFCEE_TLV;
 
+#define NFC_NFCEE_STS_UNRECOVERABLE_ERROR   NCI_NFCEE_STS_UNRECOVERABLE_ERROR
+#define NFC_NFCEE_STS_INIT_STARTED          NCI_NFCEE_STS_INIT_STARTED
+#define NFC_NFCEE_STS_INIT_COMPLETED        NCI_NFCEE_STS_INIT_COMPLETED
+
 /* NFCEE connected and inactive */
 #define NFC_NFCEE_STATUS_INACTIVE NCI_NFCEE_STS_CONN_INACTIVE
 /* NFCEE connected and active   */
@@ -469,6 +465,7 @@
 #define NFC_NFCEE_STS_TRANSMISSION_ERROR     NCI_NFCEE_STS_TRANSMISSION_ERROR
 #define NFC_NFCEE_STS_PROTOCOL_ERROR         NCI_NFCEE_STS_PROTOCOL_ERROR
 #define NFC_NFCEE_STS_TIMEOUT_ERROR          NCI_NFCEE_STS_TIMEOUT_ERROR
+
 typedef struct {
   tNFC_STATUS status;    /* The event status - place holder  */
   uint8_t nfcee_id;      /* NFCEE ID                         */
@@ -580,7 +577,6 @@
 #if (NXP_EXTNS == TRUE)
 #define NFC_PROTOCOL_ISO7816 \
   NCI_PROTOCOL_ISO7816 /*ISO7816 -AID default Routing */
-#define NFC_PROTOCOL_ISO7816 NCI_PROTOCOL_ISO7816
 #define NFC_PROTOCOL_T3BT NCI_PROTOCOL_T3BT
 #endif
 #define NFC_PROTOCOL_B_PRIME NCI_PROTOCOL_B_PRIME
@@ -733,10 +729,8 @@
   tNFC_NFCEE_MODE_SET_REVT mode_set;
 #if (NXP_EXTNS == TRUE)
   tNFC_NFCEE_MODE_SET_INFO mode_set_info;
-#if (NXP_WIRED_MODE_STANDBY == true)
   tNFC_NFCEE_EE_PWR_LNK_REVT pwr_lnk_ctrl;
 #endif
-#endif
   tNFC_NFCEE_PL_CONTROL_REVT  pl_control;
   tNFC_NFCEE_STATUS_REVT  nfcee_status;
   tNFC_RF_FIELD_REVT rf_field;
@@ -988,6 +982,10 @@
 #define NFC_RF_PARAM_SOS_REQUIRED 0x00     /* SoS required */
 #define NFC_RF_PARAM_SOS_NOT_REQUIRED 0x01 /* SoS not required */
 
+#if (NXP_EXTNS == TRUE)
+#define NFA_EE_MAX_EE_SUPPORTED_DEFAULT 0x04
+#endif
+
 typedef struct {
   bool include_rf_tech_mode; /* true if including RF Tech and Mode update    */
   tNFC_RF_TECH_N_MODE rf_tech_n_mode; /* RF tech and mode */
@@ -1497,7 +1495,6 @@
 extern tNFC_STATUS NFC_SendNxpNciCommand(NFC_HDR* p_data,
                                          tNFC_VS_CBACK* p_cback);
 
-#if (NXP_ESE_JCOP_DWNLD_PROTECTION)
 /*******************************************************************************
 **
 ** Function         NFC_SetP61Status
@@ -1510,7 +1507,6 @@
 *******************************************************************************/
 extern int32_t NFC_SetP61Status(void* pdata, jcop_dwnld_state_t isJcopState);
 #endif
-#endif
 
 /*******************************************************************************
 **
@@ -1540,6 +1536,17 @@
 *******************************************************************************/
 extern uint8_t NFC_SetTraceLevel(uint8_t new_level);
 
+/*******************************************************************************
+**
+** Function         NFC_GetChipType
+**
+** Description      Gets the chipType
+**
+** Returns          ChipType
+**
+*******************************************************************************/
+tNFC_chipType NFC_GetChipType();
+
 #if (BT_TRACE_VERBOSE == true)
 /*******************************************************************************
 **
@@ -1588,7 +1595,6 @@
 **
 *******************************************************************************/
 void NFC_EnableDisableHalLog(uint8_t type);
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 /*******************************************************************************
 **
 ** Function         nfc_ncif_getMaxRoutingTableSize
@@ -1600,9 +1606,7 @@
 **
 *******************************************************************************/
 extern uint16_t nfc_ncif_getMaxRoutingTableSize();
-#endif
-#if (NFC_NXP_ESE == TRUE)
-#if (NXP_EXTNS == TRUE) && (NXP_WIRED_MODE_STANDBY == true)
+
 /*******************************************************************************
 **
 ** Function         NFC_Nfcee_PwrLinkCtrl
@@ -1621,7 +1625,6 @@
 **
 *******************************************************************************/
 extern tNFC_STATUS NFC_Nfcee_PwrLinkCtrl(uint8_t nfcee_id, uint8_t cfg_value);
-#endif
 
 /*******************************************************************************
 **
@@ -1688,8 +1691,28 @@
 **
 *******************************************************************************/
 int32_t NFC_EnableWired(void* pdata);
-
-#if ((NFC_NXP_ESE_VER == JCOP_VER_3_1) || (NFC_NXP_ESE_VER == JCOP_VER_3_2))
+/*******************************************************************************
+**
+** Function         NFC_SetNfcServicePid
+**
+** Description      This function request to pn54x driver to
+**                  update NFC service process ID for signalling.
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+int32_t NFC_SetNfcServicePid();
+/*******************************************************************************
+**
+** Function         NFC_ResetNfcServicePid
+**
+** Description      This function request to pn54x driver to
+**                  reset NFC service process ID for signalling.
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+int32_t NFC_ResetNfcServicePid();
 /*******************************************************************************
 **
 ** Function         NFC_GetEseAccess
@@ -1715,9 +1738,6 @@
 *******************************************************************************/
 int32_t NFC_RelEseAccess(void* pdata);
 
-#endif
-
-#if (NXP_ESE_SVDD_SYNC == true)
 /*******************************************************************************
 **
 ** Function         NFC_RelSvddWait
@@ -1729,10 +1749,18 @@
 **
 *******************************************************************************/
 int32_t NFC_RelSvddWait(void* pdata);
-#endif
 
-#endif
-#if (NXP_EXTNS == TRUE)
+/*******************************************************************************
+**
+** Function         NFC_GetChipType
+**
+** Description      Returns currently selected chip type
+**
+** Returns          chipType
+**
+*******************************************************************************/
+tNFC_chipType NFC_GetChipType();
+
 /*******************************************************************************
 **
 ** Function         NFC_Queue_Is_empty
diff --git a/src/nfc/int/nfc_int.h b/src/nfc/int/nfc_int.h
index 5bc859b..5835632 100644
--- a/src/nfc/int/nfc_int.h
+++ b/src/nfc/int/nfc_int.h
@@ -53,7 +53,6 @@
 #ifdef __cplusplus
 extern "C" {
 #endif
-
 /****************************************************************************
  ** Internal NFC constants and definitions
  ****************************************************************************/
@@ -101,8 +100,7 @@
 #define NFC_TTYPE_VS_BASE 200
 /* time out for modeSet notification */
 #define NFC_SETMODE_NTF_TIMEOUT     2
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+#if (NXP_EXTNS == TRUE)
 /* Added for sending fave pwr link response to JNI since pwrlink cmd has been
                                                   ignored due to RF CE session
    */
@@ -134,7 +132,7 @@
   I2C_FRAGMENATATION_ENABLED, /*i2c fragmentation_enabled           */
   I2C_FRAGMENTATION_DISABLED  /*i2c_fragmentation_disabled          */
 };
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true))
+#if (NXP_EXTNS == TRUE)
 /*Get or Set swp activation state for UICC*/
 typedef enum {
   GET_UICC_CONFIG = 0x01, /*get swp activation state for UICC  */
@@ -414,9 +412,7 @@
 #if (NXP_EXTNS == TRUE)
 extern uint8_t nfc_ncif_retransmit_data(tNFC_CONN_CB* p_cb, NFC_HDR* p_data);
 extern tNFC_STATUS nfc_ncif_store_FWVersion(uint8_t* p_buf);
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 extern tNFC_STATUS nfc_ncif_set_MaxRoutingTableSize(uint8_t* p_buf);
-#endif
 extern void nfc_ncif_proc_isodep_nak_presence_check_status (uint8_t status, bool is_ntf);
 extern void nfc_ncif_update_window(void);
 extern void nfc_ncif_empty_cmd_queue();
diff --git a/src/nfc/nci/nci_hmsgs.c b/src/nfc/nci/nci_hmsgs.c
index 41b9d42..913fe15 100644
--- a/src/nfc/nci/nci_hmsgs.c
+++ b/src/nfc/nci/nci_hmsgs.c
@@ -358,7 +358,7 @@
   nfc_ncif_send_cmd(p);
   return (NCI_STATUS_OK);
 }
-#if (NXP_EXTNS == TRUE) && (NXP_WIRED_MODE_STANDBY == true)
+#if (NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
 ** Function         nci_snd_pwr_nd_lnk_ctrl_cmd
@@ -371,31 +371,37 @@
 **
 *******************************************************************************/
 uint8_t nci_snd_pwr_nd_lnk_ctrl_cmd(uint8_t nfcee_id, uint8_t cfg_value) {
+    NFC_TRACE_DEBUG0("nci_snd_pwr_nd_lnk_ctrl_cmd() Enter ");
+    if(!nfcFL.eseFL._WIRED_MODE_STANDBY) {
+        NFC_TRACE_DEBUG0("WIRED_MODE_STANDBY not available. Returning");
+        return (NCI_STATUS_FAILED);
+    }
   NFC_HDR* p;
   uint8_t* pp;
-#if (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME)
-  if (nfc_cb.bBlkPwrlinkAndModeSetCmd) {
-    NFC_TRACE_DEBUG0("pwr link cmd ignored due to RF session");
-    nfc_cb.pwr_link_cmd.bPwrLinkCmdRequested = true;
-    nfc_cb.pwr_link_cmd.param = cfg_value;
-    nfc_start_quick_timer(&nfc_cb.nci_wait_pwrLinkRsp_timer,
-                          NFC_TTYPE_PWR_LINK_RSP,
-                          ((uint32_t)100) * QUICK_TIMER_TICKS_PER_SEC / 1000);
-    return (NCI_STATUS_OK);
+  if (nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+      if (nfc_cb.bBlkPwrlinkAndModeSetCmd) {
+          NFC_TRACE_DEBUG0("pwr link cmd ignored due to RF session");
+          nfc_cb.pwr_link_cmd.bPwrLinkCmdRequested = true;
+          nfc_cb.pwr_link_cmd.param = cfg_value;
+          nfc_start_quick_timer(&nfc_cb.nci_wait_pwrLinkRsp_timer,
+                  NFC_TTYPE_PWR_LINK_RSP,
+                  ((uint32_t)100) * QUICK_TIMER_TICKS_PER_SEC / 1000);
+          return (NCI_STATUS_OK);
+      }
   }
-#endif
-  if ((p = NCI_GET_CMD_BUF(NCI_PWR_LINK_PARAM_CMD_SIZE)) == NULL)
+  if ((p = NCI_GET_CMD_BUF(nfcFL.nfcMwFL._NCI_PWR_LINK_PARAM_CMD_SIZE)) == NULL)
     return (NCI_STATUS_FAILED);
 
   p->event = BT_EVT_TO_NFC_NCI;
-  p->len = NCI_MSG_HDR_SIZE + NCI_PWR_LINK_PARAM_CMD_SIZE;
+  p->len = NCI_MSG_HDR_SIZE + nfcFL.nfcMwFL._NCI_PWR_LINK_PARAM_CMD_SIZE;
   p->offset = NCI_MSG_OFFSET_SIZE;
   p->layer_specific = 0;
   pp = (uint8_t*)(p + 1) + p->offset;
 
   NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_EE_MANAGE);
   NCI_MSG_BLD_HDR1(pp, NCI_MSG_NFCEE_PWR_LNK_CTRL);
-  UINT8_TO_STREAM(pp, NCI_PWR_LINK_PARAM_CMD_SIZE);
+  UINT8_TO_STREAM(pp, nfcFL.nfcMwFL._NCI_PWR_LINK_PARAM_CMD_SIZE);
   UINT8_TO_STREAM(pp, nfcee_id);
   UINT8_TO_STREAM(pp, cfg_value);
 
@@ -416,18 +422,17 @@
 uint8_t nci_snd_nfcee_mode_set(uint8_t nfcee_id, uint8_t nfcee_mode) {
   NFC_HDR* p;
   uint8_t* pp;
-
-#if (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME)
-  if ((nfc_cb.bBlkPwrlinkAndModeSetCmd) && (NFCEE_ID_ESE == nfcee_id)) {
-    NFC_TRACE_DEBUG0("mode set cmd ignored due to RF session");
-    nfc_start_quick_timer(&nfc_cb.nci_wait_pwrLinkRsp_timer,
-                          NFC_TTYPE_SET_MODE_RSP,
-                          ((uint32_t)100) * QUICK_TIMER_TICKS_PER_SEC / 1000);
-    nfc_cb.bSetmodeOnReq = true;
-    return NCI_STATUS_OK;
+  if (nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+      if ((nfc_cb.bBlkPwrlinkAndModeSetCmd) && (NFCEE_ID_ESE == nfcee_id)) {
+          NFC_TRACE_DEBUG0("mode set cmd ignored due to RF session");
+          nfc_start_quick_timer(&nfc_cb.nci_wait_pwrLinkRsp_timer,
+                  NFC_TTYPE_SET_MODE_RSP,
+                  ((uint32_t)100) * QUICK_TIMER_TICKS_PER_SEC / 1000);
+          nfc_cb.bSetmodeOnReq = true;
+          return NCI_STATUS_OK;
+      }
   }
-#endif
-
   p = NCI_GET_CMD_BUF(NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET);
   if (p == NULL) return (NCI_STATUS_FAILED);
 
diff --git a/src/nfc/nci/nci_hrcv.c b/src/nfc/nci/nci_hrcv.c
index 6ed0b49..c99048e 100644
--- a/src/nfc/nci/nci_hrcv.c
+++ b/src/nfc/nci/nci_hrcv.c
@@ -326,9 +326,8 @@
   tNFC_NFCEE_PL_CONTROL_REVT  pl_control;
 #if (NXP_EXTNS == TRUE)
   tNFC_NFCEE_MODE_SET_INFO mode_set_info;
-#if (NXP_WIRED_MODE_STANDBY == true)
   tNFC_NFCEE_EE_PWR_LNK_REVT pwr_lnk_ctrl;
-#endif
+
 #endif
   void* p_evt = NULL;
   tNFC_RESPONSE_EVT event = NFC_NFCEE_INFO_REVT;
@@ -371,27 +370,31 @@
       }
       break;
 
-#if (NXP_EXTNS == TRUE) && (NXP_WIRED_MODE_STANDBY == true)
+#if (NXP_EXTNS == TRUE)
     case NCI_MSG_NFCEE_PWR_LNK_CTRL:
-      p_evt = (tNFC_RESPONSE*)&pwr_lnk_ctrl;
-      pwr_lnk_ctrl.status = *pp;
-      pwr_lnk_ctrl.nfcee_id = 0;
-      event = NFC_NFCEE_PWR_LNK_CTRL_REVT;
-      pwr_lnk_ctrl.nfcee_id = *p_old++;
-#if (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME)
-      if (nfc_cb.bIssueModeSetCmd) {
-        NFC_TRACE_DEBUG0("mode set cmd send after pwrlink cmd");
-        nfc_cb.bSetmodeOnReq = true;
-        nci_snd_nfcee_mode_set(NFCEE_ID_ESE, NFC_MODE_ACTIVATE);
-        nfc_start_timer(&nfc_cb.nci_wait_setMode_Ntf_timer,
-                        (uint16_t)NFC_TYPE_NCI_WAIT_SETMODE_NTF,
-                        NFC_NCI_SETMODE_NTF_TIMEOUT);
-        nfc_cb.bIssueModeSetCmd = false;
-      } else {
-        nfc_cb.bIssueModeSetCmd = false;
-      }
+        if(nfcFL.eseFL._WIRED_MODE_STANDBY) {
+            p_evt = (tNFC_RESPONSE*)&pwr_lnk_ctrl;
+            pwr_lnk_ctrl.status = *pp;
+            pwr_lnk_ctrl.nfcee_id = 0;
+            event = NFC_NFCEE_PWR_LNK_CTRL_REVT;
+            pwr_lnk_ctrl.nfcee_id = *p_old++;
+            if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+                    nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+                if (nfc_cb.bIssueModeSetCmd) {
+                    NFC_TRACE_DEBUG0("mode set cmd send after pwrlink cmd");
+                    nfc_cb.bSetmodeOnReq = true;
+                    nci_snd_nfcee_mode_set(NFCEE_ID_ESE, NFC_MODE_ACTIVATE);
+                    nfc_start_timer(&nfc_cb.nci_wait_setMode_Ntf_timer,
+                            (uint16_t)NFC_TYPE_NCI_WAIT_SETMODE_NTF,
+                            NFC_NCI_SETMODE_NTF_TIMEOUT);
+                    nfc_cb.bIssueModeSetCmd = false;
+                } else {
+                    nfc_cb.bIssueModeSetCmd = false;
+                }
+            }
+            break;
+        }
 #endif
-      break;
     case NCI_MSG_NFCEE_POWER_LINK_CTRL:
         p_evt                   = (tNFC_RESPONSE *) &pl_control;
         pl_control.status        = *pp;
@@ -399,7 +402,6 @@
         pl_control.pl_control    = *p_old++;
         event               = NFC_NFCEE_PL_CONTROL_REVT;
         break;
-#endif
     default:
       p_cback = NULL;
       NFC_TRACE_ERROR1("unknown opcode:0x%x", op_code);
@@ -490,39 +492,39 @@
   }
 #if (NXP_EXTNS == TRUE)
   else if (op_code == NCI_MSG_NFCEE_MODE_SET) {
-    NFC_TRACE_DEBUG2("nci_proc_ee_management_ntf status:0x%x, nfceeid:0x%x",
-                     *pp, *(pp + 1));
-    nfc_stop_timer(&nfc_cb.nci_wait_setMode_Ntf_timer);
-    if(nfc_cb.nci_version != NCI_VERSION_2_0)
-    {
-      p_evt = (tNFC_RESPONSE*)&mode_set_info;
-      event = NFC_NFCEE_MODE_SET_INFO;
-      ee_status = *pp++;
-      mode_set_info.nfcee_id = *pp++;
-      mode_set_info.status = ee_status;
-    }
-    else
-    {
-        NFC_TRACE_DEBUG2("nci_proc_ee_management_last ntf mode:0x%x, nfceeid:0x%x",
-        		mode_set.mode, mode_set.nfcee_id);
-      p_evt   = (tNFC_RESPONSE *) &mode_set;
-      mode_set.status = *pp;
-      /*mode_set.nfcee_id = *p_old++;
+      NFC_TRACE_DEBUG2("nci_proc_ee_management_ntf status:0x%x, nfceeid:0x%x",
+              *pp, *(pp + 1));
+      nfc_stop_timer(&nfc_cb.nci_wait_setMode_Ntf_timer);
+      if(nfc_cb.nci_version != NCI_VERSION_2_0)
+      {
+          p_evt = (tNFC_RESPONSE*)&mode_set_info;
+          event = NFC_NFCEE_MODE_SET_INFO;
+          ee_status = *pp++;
+          mode_set_info.nfcee_id = *pp++;
+          mode_set_info.status = ee_status;
+      }
+      else
+      {
+          NFC_TRACE_DEBUG2("nci_proc_ee_management_last ntf mode:0x%x, nfceeid:0x%x",
+                  mode_set.mode, mode_set.nfcee_id);
+          p_evt   = (tNFC_RESPONSE *) &mode_set;
+          mode_set.status = *pp;
+          /*mode_set.nfcee_id = *p_old++;
       mode_set.mode = *p_old++;*/
-      mode_set.nfcee_id = nfa_ee_cb.nfcee_id;
-      mode_set.mode = nfa_ee_cb.mode;
-      event   = NFC_NFCEE_MODE_SET_REVT;
-      nfc_cb.flags  &= ~NFC_FL_WAIT_MODE_SET_NTF;
-      nfc_stop_timer(&nfc_cb.nci_setmode_ntf_timer);
-    }
-#if (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME)
-    if ((nfc_cb.bBlockWiredMode) && (nfc_cb.bSetmodeOnReq)) {
-      nfc_cb.bSetmodeOnReq = false;
-      nfc_cb.bBlockWiredMode = false;
-      nfc_cb.bCeActivatedeSE = false;
-      nfc_ncif_allow_dwp_transmission();
-    }
-#endif
+          mode_set.nfcee_id = nfa_ee_cb.nfcee_id;
+          mode_set.mode = nfa_ee_cb.mode;
+          event   = NFC_NFCEE_MODE_SET_REVT;
+          nfc_cb.flags  &= ~NFC_FL_WAIT_MODE_SET_NTF;
+          nfc_stop_timer(&nfc_cb.nci_setmode_ntf_timer);
+      }
+      if ((nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+              nfcFL.eseFL._ESE_WIRED_MODE_RESUME) &&
+              ((nfc_cb.bBlockWiredMode) && (nfc_cb.bSetmodeOnReq))) {
+          nfc_cb.bSetmodeOnReq = false;
+          nfc_cb.bBlockWiredMode = false;
+          nfc_cb.bCeActivatedeSE = false;
+          nfc_ncif_allow_dwp_transmission();
+      }
   }
 #endif
   else if (op_code == NCI_MSG_NFCEE_STATUS) {
diff --git a/src/nfc/nfc/nfc_ee.c b/src/nfc/nfc/nfc_ee.c
index f398d5f..e26ac8c 100644
--- a/src/nfc/nfc/nfc_ee.c
+++ b/src/nfc/nfc/nfc_ee.c
@@ -47,6 +47,10 @@
 **
 *******************************************************************************/
 tNFC_STATUS NFC_NfceeDiscover(bool discover) {
+  if(nfc_cb.flags & NFC_FL_WAIT_MODE_SET_NTF) {
+    NFC_TRACE_ERROR1("mode set ntf pending ,not allowing nfcee_discover %d", discover);
+    return NFC_STATUS_FAILED;
+  }
   return nci_snd_nfcee_discover((uint8_t)(
       discover ? NCI_DISCOVER_ACTION_ENABLE : NCI_DISCOVER_ACTION_DISABLE));
 }
diff --git a/src/nfc/nfc/nfc_main.c b/src/nfc/nfc/nfc_main.c
index 141c337..0d05a13 100644
--- a/src/nfc/nfc/nfc_main.c
+++ b/src/nfc/nfc/nfc_main.c
@@ -43,7 +43,7 @@
 #include "rw_int.h"
 #include "ce_int.h"
 #include "nfa_sys.h"
-
+#include <config.h>
 #if (NFC_RW_ONLY == FALSE)
 #include "ce_api.h"
 #include "ce_int.h"
@@ -72,13 +72,12 @@
 tNFC_CB nfc_cb;
 uint8_t i2c_fragmentation_enabled = 0xff;
 
+tNfc_featureList nfcFL;
+static tNFC_chipType chipType = 0;
 #if (NFC_RW_ONLY == FALSE)
 #if (NXP_EXTNS == TRUE)
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
 #define NFC_NUM_INTERFACE_MAP 3
-#else
-#define NFC_NUM_INTERFACE_MAP 2
-#endif
+#define NFC_NUM_INTERFACE_MAP_STAT 2
 #else
 #define NFC_NUM_INTERFACE_MAP 2
 #endif
@@ -86,6 +85,7 @@
 #define NFC_NUM_INTERFACE_MAP 1
 #endif
 
+static void NFC_GetFeatureList();
 static const tNCI_DISCOVER_MAPS nfc_interface_mapping[NFC_NUM_INTERFACE_MAP] = {
     /* Protocols that use Frame Interface do not need to be included in the
        interface mapping */
@@ -98,12 +98,23 @@
      NCI_INTERFACE_NFC_DEP}
 #endif
 #if (NXP_EXTNS == TRUE)
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
     ,
     /* This mapping is for Felica on DH  */
     {NCI_PROTOCOL_T3T, NCI_INTERFACE_MODE_LISTEN, NCI_INTERFACE_FRAME}
 
 #endif
+};
+
+static const tNCI_DISCOVER_MAPS nfc_interface_mapping_stat[NFC_NUM_INTERFACE_MAP_STAT] = {
+    /* Protocols that use Frame Interface do not need to be included in the
+       interface mapping */
+    {NCI_PROTOCOL_ISO_DEP, NCI_INTERFACE_MODE_POLL_N_LISTEN,
+     NCI_INTERFACE_ISO_DEP}
+#if (NFC_RW_ONLY == FALSE)
+    ,
+    /* this can not be set here due to 2079xB0 NFCC issues */
+    {NCI_PROTOCOL_NFC_DEP, NCI_INTERFACE_MODE_POLL_N_LISTEN,
+     NCI_INTERFACE_NFC_DEP}
 #endif
 };
 
@@ -654,7 +665,7 @@
 #else
   NFC_TRACE_DEBUG2("nfc_main_hal_cback event: 0x%x, status=%d", event, status);
 #endif
-#if ((NXP_EXTNS == TRUE) && (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true))
+#if (NXP_EXTNS == TRUE)
   tNFC_RESPONSE eventData;
 #endif
   switch (event) {
@@ -665,6 +676,7 @@
       */
       if (nfc_cb.nfc_state == NFC_STATE_W4_HAL_OPEN) {
         if (status == HAL_NFC_STATUS_OK) {
+            NFC_GetFeatureList();
           /* Notify NFC_TASK that NCI tranport is initialized */
           GKI_send_event(NFC_TASK, NFC_TASK_EVT_TRANSPORT_READY);
         } else {
@@ -679,21 +691,22 @@
     case HAL_NFC_REQUEST_CONTROL_EVT:
     case HAL_NFC_RELEASE_CONTROL_EVT:
     case HAL_NFC_ERROR_EVT:
-#if ((NXP_EXTNS == TRUE) && (NXP_NFCC_I2C_READ_WRITE_IMPROVEMENT == true))
+#if (NXP_EXTNS == TRUE)
     case HAL_NFC_POST_MIN_INIT_CPLT_EVT:
-
-      if (status == HAL_NFC_STATUS_ERR_CMD_TIMEOUT) {
-        eventData.status = (tNFC_STATUS)NFC_STATUS_FAILED;
-        /* Notify app of transport error */
-        if (nfc_cb.p_resp_cback) {
-          (*nfc_cb.p_resp_cback)(NFC_NFCC_TIMEOUT_REVT, &eventData);
-          /* if enabling NFC, notify upper layer of failure after closing HAL*/
-          if (nfc_cb.nfc_state < NFC_STATE_IDLE) {
-            nfc_enabled(NFC_STATUS_FAILED, NULL);
-          }
+        if( nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT) {
+            if (status == HAL_NFC_STATUS_ERR_CMD_TIMEOUT) {
+                eventData.status = (tNFC_STATUS)NFC_STATUS_FAILED;
+                /* Notify app of transport error */
+                if (nfc_cb.p_resp_cback) {
+                    (*nfc_cb.p_resp_cback)(NFC_NFCC_TIMEOUT_REVT, &eventData);
+                    /* if enabling NFC, notify upper layer of failure after closing HAL*/
+                    if (nfc_cb.nfc_state < NFC_STATE_IDLE) {
+                        nfc_enabled(NFC_STATUS_FAILED, NULL);
+                    }
+                }
+                break;
+            }
         }
-        break;
-      }
 #endif
       nfc_main_post_hal_evt(event, status);
       break;
@@ -784,23 +797,6 @@
   }
 #endif
   nfc_cb.p_hal->open(nfc_main_hal_cback, nfc_main_hal_data_cback);
-
-#if (NFC_NXP_ESE == TRUE)
-  {  /*Access to ESE from SPI & I2C is managed by sending signals from I2C
-     drivers to NFC service. This requires NFC Service PID to be registered
-     Assumption: This functions is invoked by NFC Service*/
-    tNFC_STATUS setPidStatus = NFC_STATUS_OK;
-    nfc_nci_IoctlInOutData_t inpOutData;
-    inpOutData.inp.data.nfcServicePid = getpid();
-    setPidStatus = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_SET_NFC_SERVICE_PID,(void*)&inpOutData);
-    if (setPidStatus == NFC_STATUS_OK) {
-      NFC_TRACE_API0("nfc service set pid done");
-    } else {
-      NFC_TRACE_API0("nfc service set pid failed");
-    }
-  }
-#endif
-
   return (NFC_STATUS_OK);
 }
 
@@ -839,19 +835,19 @@
     nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_SET_BOOT_MODE, (void*)&inpOutData);
   }
 #endif
-#if (NFC_NXP_ESE == TRUE)
-  {
-    tNFC_STATUS setPidStatus = NFC_STATUS_OK;
-    nfc_nci_IoctlInOutData_t inpOutData;
-    inpOutData.inp.data.nfcServicePid = 0;
-    setPidStatus = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_SET_NFC_SERVICE_PID,(void*)&inpOutData);
-    if (setPidStatus == NFC_STATUS_OK) {
-      NFC_TRACE_API0("nfc service set pid done");
-    } else {
-      NFC_TRACE_API0("nfc service set pid failed");
-    }
+
+  if(nfcFL.nfcNxpEse) {
+      tNFC_STATUS setPidStatus = NFC_STATUS_OK;
+      nfc_nci_IoctlInOutData_t inpOutData;
+      inpOutData.inp.data.nfcServicePid = 0;
+      setPidStatus = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_SET_NFC_SERVICE_PID,(void*)&inpOutData);
+      if (setPidStatus == NFC_STATUS_OK) {
+          NFC_TRACE_API0("nfc service set pid done");
+      } else {
+          NFC_TRACE_API0("nfc service set pid failed");
+      }
   }
-#endif
+
   /* Close transport and clean up */
   nfc_task_shutdown_nfcc();
 
@@ -891,7 +887,14 @@
   nfc_cb.nfc_state = NFC_STATE_NONE;
   nfc_cb.nci_cmd_window = NCI_MAX_CMD_WINDOW;
   nfc_cb.nci_wait_rsp_tout = NFC_CMD_CMPL_TIMEOUT;
+
+  if(nfcFL.chipType != pn547C2) {
   nfc_cb.p_disc_maps = nfc_interface_mapping;
+  }
+  else {
+      nfc_cb.p_disc_maps = nfc_interface_mapping_stat;
+  }
+
   nfc_cb.num_disc_maps = NFC_NUM_INTERFACE_MAP;
   nfc_cb.trace_level = NFC_INITIAL_TRACE_LEVEL;
   nfc_cb.nci_ctrl_size = NCI_CTRL_INIT_SIZE;
@@ -1026,17 +1029,21 @@
   for (xx = 0; xx < num_disc_maps; xx++) {
     is_supported = false;
     if (p_maps[xx].intf_type > NCI_INTERFACE_MAX) {
-      for (yy = 0; yy < NFC_NFCC_MAX_NUM_VS_INTERFACE; yy++) {
-#if (NXP_NFCC_FW_WA == true)
-        if ((nfc_cb.vs_interface[yy] == p_maps[xx].intf_type) ||
-            (NCI_INTERFACE_ESE_DIRECT == p_maps[xx].intf_type))
-#else
-          if (nfc_cb.vs_interface[yy] == p_maps[xx].intf_type)
-#endif
-          is_supported = true;
-      }
-      NFC_TRACE_DEBUG3("[%d]: vs intf_type:0x%x is_supported:%d", xx,
-                       p_maps[xx].intf_type, is_supported);
+        for (yy = 0; yy < NFC_NFCC_MAX_NUM_VS_INTERFACE; yy++) {
+            if(nfcFL.nfccFL._NFCC_FW_WA) {
+                if ((nfc_cb.vs_interface[yy] == p_maps[xx].intf_type) ||
+                        (nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT == p_maps[xx].intf_type)) {
+                    is_supported = true;
+                }
+            }
+            else {
+                if (nfc_cb.vs_interface[yy] == p_maps[xx].intf_type) {
+                    is_supported = true;
+                }
+            }
+        }
+        NFC_TRACE_DEBUG3("[%d]: vs intf_type:0x%x is_supported:%d", xx,
+                p_maps[xx].intf_type, is_supported);
     } else {
       intf_mask = (1 << (p_maps[xx].intf_type));
       if ((intf_mask & nfc_cb.nci_interfaces)) {
@@ -1056,9 +1063,9 @@
       NFC_TRACE_WARNING1(
           "NFC_DiscoveryMap interface=0x%x is not supported by NFCC",
           p_maps[xx].intf_type);
-#if (NFC_NXP_CHIP_TYPE != PN547C2)
+      if(nfcFL.chipType != pn547C2) {
           return NFC_STATUS_FAILED;
-#endif
+      }
     }
   }
 
@@ -1558,7 +1565,7 @@
 
 int get_i2c_fragmentation_enabled() { return i2c_fragmentation_enabled; }
 
-#if ((NFC_NXP_ESE == TRUE) && (NXP_EXTNS == TRUE))
+#if (NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
 ** Function         NFC_ReqWiredAccess
@@ -1570,6 +1577,12 @@
 **
 *******************************************************************************/
 int32_t NFC_ReqWiredAccess(void* pdata) {
+    NFC_TRACE_API0("NFC_ReqWiredAccess");
+
+    if(!nfcFL.nfcNxpEse) {
+        NFC_TRACE_API0("nfcNxpEse is not available.. Returning");
+        return -1;
+    }
   nfc_nci_IoctlInOutData_t inpOutData;
   int32_t status;
   status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P61_WIRED_MODE, &inpOutData);
@@ -1645,7 +1658,6 @@
   return status;
 }
 #if (NXP_EXTNS == TRUE)
-#if (NXP_WIRED_MODE_STANDBY == true)
 /*******************************************************************************
 +**
 ** Function         NFC_Nfcee_PwrLinkCtrl
@@ -1664,10 +1676,14 @@
 **
 *******************************************************************************/
 tNFC_STATUS NFC_Nfcee_PwrLinkCtrl(uint8_t nfcee_id, uint8_t cfg_value) {
+    if(!nfcFL.eseFL._WIRED_MODE_STANDBY) {
+        NFC_TRACE_API0("NFC_Nfcee_PwrLinkCtrl :"
+                "WIRED_MODE_STANDBY is not available.. Returning");
+        return NFC_STATUS_FAILED;
+    }
   return nci_snd_pwr_nd_lnk_ctrl_cmd(nfcee_id, cfg_value);
 }
-#endif
-#if (NXP_ESE_JCOP_DWNLD_PROTECTION == true)
+
 /*******************************************************************************
 **
 ** Function         NFC_SetP61Status
@@ -1679,6 +1695,11 @@
 **
 *******************************************************************************/
 int32_t NFC_SetP61Status(void* pdata, jcop_dwnld_state_t isJcopState) {
+    if(!nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION) {
+        NFC_TRACE_API0("NFC_SetP61Status :"
+                "ESE_JCOP_DWNLD_PROTECTION is not available.. Returning");
+        return -1;
+    }
   nfc_nci_IoctlInOutData_t inpOutData;
   int32_t status;
   if (isJcopState == JCP_DWNLD_START)
@@ -1691,7 +1712,6 @@
   return isJcopState;
 }
 #endif
-#endif
 
 /*******************************************************************************
 **
@@ -1711,7 +1731,6 @@
   return status;
 }
 
-#if ((NFC_NXP_ESE_VER == JCOP_VER_3_1) || (NFC_NXP_ESE_VER == JCOP_VER_3_2))
 /*******************************************************************************
 **
 ** Function         NFC_GetEseAccess
@@ -1724,11 +1743,18 @@
 **
 *******************************************************************************/
 int32_t NFC_GetEseAccess(void* pdata) {
-  nfc_nci_IoctlInOutData_t inpOutData;
-  int32_t status;
-  inpOutData.inp.data.timeoutMilliSec = *(uint32_t*)pdata;
-  status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P61_GET_ACCESS, &inpOutData);
-  return status;
+    int32_t status;
+    if((nfcFL.eseFL._NXP_ESE_VER != JCOP_VER_3_1) &&
+            (nfcFL.eseFL._NXP_ESE_VER != JCOP_VER_3_2)) {
+        NFC_TRACE_API0("NFC_GetEseAccess NXP_ESE_VER !="
+                "JCOP_VER_3_1 or JCOP_VER_3_2 . Returning");
+        return status;
+    }
+    nfc_nci_IoctlInOutData_t inpOutData;
+
+    inpOutData.inp.data.timeoutMilliSec = *(uint32_t*)pdata;
+    status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P61_GET_ACCESS, &inpOutData);
+    return status;
 }
 /*******************************************************************************
 **
@@ -1741,15 +1767,20 @@
 **
 *******************************************************************************/
 int32_t NFC_RelEseAccess(void* pdata) {
-  nfc_nci_IoctlInOutData_t inpOutData;
-  int32_t status;
-  status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P61_REL_ACCESS, &inpOutData);
-  *(tNFC_STATUS*)pdata = inpOutData.out.data.status;
-  return status;
-}
-#endif
+    int32_t status;
+    if((nfcFL.eseFL._NXP_ESE_VER != JCOP_VER_3_1) &&
+            (nfcFL.eseFL._NXP_ESE_VER != JCOP_VER_3_2)) {
+        NFC_TRACE_API0("NFC_RelEseAccess NXP_ESE_VER !="
+                "JCOP_VER_3_1 or JCOP_VER_3_2 . Returning");
+        return status;
+    }
+    nfc_nci_IoctlInOutData_t inpOutData;
 
-#if (NXP_ESE_SVDD_SYNC == true)
+    status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_P61_REL_ACCESS, &inpOutData);
+    *(tNFC_STATUS*)pdata = inpOutData.out.data.status;
+    return status;
+}
+
 /*******************************************************************************
 **
 ** Function         NFC_RelSvddWait
@@ -1761,18 +1792,21 @@
 **
 *******************************************************************************/
 int32_t NFC_RelSvddWait(void* pdata) {
+    if(!nfcFL.eseFL._ESE_SVDD_SYNC) {
+        NFC_TRACE_API0("NFC_RelSvddWait :"
+                "ESE_SVDD_SYNC is not available.. Returning");
+        return -1;
+    }
   nfc_nci_IoctlInOutData_t inpOutData;
   int32_t status;
   status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_REL_SVDD_WAIT, &inpOutData);
   *(tNFC_STATUS*)pdata = inpOutData.out.data.status;
   return status;
 }
-#endif
 
 #endif
 
 #if (NXP_EXTNS == TRUE)
-
 /*******************************************************************************
 **
 ** Function         NFC_EnableDisableHalLog
@@ -1788,6 +1822,54 @@
     nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_DISABLE_HAL_LOG, &inpOutData);
   }
 }
+
+/*******************************************************************************
+**
+** Function         NFC_SetNfcServicePid
+**
+** Description      This function request to pn54x driver to
+**                  update NFC service process ID for signalling.
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+int32_t NFC_SetNfcServicePid() {
+    tNFC_STATUS setPidStatus = NFC_STATUS_OK;
+    nfc_nci_IoctlInOutData_t inpOutData;
+    inpOutData.inp.data.nfcServicePid = getpid();
+    setPidStatus = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_SET_NFC_SERVICE_PID,
+                                       (void*)&inpOutData);
+    if (setPidStatus == NFC_STATUS_OK) {
+      NFC_TRACE_API0("nfc service set pid done");
+    } else {
+      NFC_TRACE_API0("nfc service set pid failed");
+    }
+  return setPidStatus;
+}
+/*******************************************************************************
+**
+** Function         NFC_ResetNfcServicePid
+**
+** Description      This function request to pn54x driver to
+**                  update NFC service process ID for signalling.
+**
+** Returns          0 if api call success, else -1
+**
+*******************************************************************************/
+int32_t NFC_ResetNfcServicePid()
+{
+    tNFC_STATUS setPidStatus = NFC_STATUS_OK;
+    nfc_nci_IoctlInOutData_t inpOutData;
+    inpOutData.inp.data.nfcServicePid = 0;
+    setPidStatus = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_SET_NFC_SERVICE_PID,
+                                       (void*)&inpOutData);
+    if (setPidStatus == NFC_STATUS_OK) {
+      NFC_TRACE_API0("nfc service set pid done");
+    } else {
+      NFC_TRACE_API0("nfc service set pid failed");
+    }
+    return setPidStatus;
+}
 #endif
 /*******************************************************************************
 **
@@ -1835,6 +1917,46 @@
         (*p_cback) (NFC_HCI_CONN_ID, NFC_CONN_CREATE_CEVT, &evt_data);
     }
 }
+
+/*******************************************************************************
+ **
+ ** Function         NFC_GetFeatureList
+ **
+ ** Description      Gets the chipType from hal which is already configured
+ **                  during init time.
+ **                  Initializes featureList based onChipType
+ **
+ ** Returns          Nothing
+ *******************************************************************************/
+void NFC_GetFeatureList() {
+    NFC_TRACE_API0("NFC_GetFeatureList() Enter");
+    tNFC_STATUS status = NFC_STATUS_FAILED;
+    nfc_nci_IoctlInOutData_t inpOutData;
+    status = nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_GET_FEATURE_LIST,
+            (void*)&inpOutData);
+    if(status == NFC_STATUS_OK) {
+        chipType = (tNFC_chipType)inpOutData.out.data.chipType;
+        NFC_TRACE_API1("NFC_GetFeatureList ()chipType = %d", chipType);
+
+    }else{
+        chipType = pn553;
+    }
+    CONFIGURE_FEATURELIST(chipType);
+    NFC_TRACE_API1("NFC_GetFeatureList ()chipType = %d", chipType);
+
+}
+
+/*******************************************************************************
+ **
+ ** Function         NFC_GetChipType
+ **
+ ** Description      Gets the chipType initialized during bootup
+ **
+ *******************************************************************************/
+tNFC_chipType NFC_GetChipType() {
+    return chipType;
+}
+
 #if (BT_TRACE_VERBOSE == true)
 /*******************************************************************************
 **
diff --git a/src/nfc/nfc/nfc_ncif.c b/src/nfc/nfc/nfc_ncif.c
index c48ac36..0ef276b 100644
--- a/src/nfc/nfc/nfc_ncif.c
+++ b/src/nfc/nfc/nfc_ncif.c
@@ -68,21 +68,14 @@
 // Global Structure varibale for FW Version
 static tNFC_FW_VERSION nfc_fw_version;
 static uint8_t gScreenState = 0x0;  // SCREEN ON UNLOCKED
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 static uint16_t maxRoutingTableSize;
-#endif
 uint8_t sListenActivated;
 extern tNFA_CE_CB nfa_ce_cb;
 bool core_reset_init_num_buff = false;
 uint8_t nfcc_dh_conn_id = 0xFF;
 extern void nfa_hci_rsp_timeout(tNFA_HCI_EVENT_DATA* p_evt_data);
-#endif
-
-#if ((NFC_NXP_ESE == TRUE) && (NXP_ESE_ETSI_READER_ENABLE == true))
 void disc_deact_ntf_timeout_handler(tNFC_RESPONSE_EVT event);
 extern bool etsi_reader_in_progress;
-#endif
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true))
 void uicc_eeprom_get_config(uint8_t* config_resp);
 void uicc_eeprom_set_config(uint8_t* config_resp);
 #endif
@@ -165,16 +158,17 @@
     buffer[1] = Last NFCC NCI RF State, 0:IDLE 1:DISCOVERY
     buffer[2] = Length of discovery command to be sent as a part of recovery.
     buffer[3~34] = Last Discovery command(including phase data).(32 byte)
-    buffer[35] = Length of last command.
-    buffer[36~254] = Last Command /or Last Command including Data.
-    buffer[255] = Last screen state
+    buffer[35] = Indicator 0: No command to be sent after Recovery 1: Command available to be sent after recovery
+    buffer[36~294] = Last Command /or Last Command including Data.
+    buffer[295] = Last screen state
     */
     uint8_t* buffer = NULL;
     tNFC_CONN_CB* p_cb = NULL;
-    uint16_t bufflen = 0x100;
+    uint16_t bufflen = 36 + 258 + 2; //Initial data + max command size + 1 extra buffer + 1 screenState
     uint16_t fw_dwnld_status = NFC_STATUS_FAILED;
     tNFC_STATUS status = NFC_STATUS_FAILED;
     tNFC_FWUpdate_Info_t fw_update_inf;
+    nfc_nci_IoctlInOutData_t inpOutData;
 
     /*Stop the command timeout timer*/
     nfc_stop_timer(&nfc_cb.nci_wait_rsp_timer);
@@ -191,7 +185,7 @@
     buffer[0] = 0x01;
 
     /*Set the last screen state*/
-    buffer[255] = gScreenState;
+    buffer[295] = gScreenState;
 
     NFC_TRACE_DEBUG1("MW last RF discovery flags 0x%x",
                      nfa_dm_cb.disc_cb.disc_flags);
@@ -199,17 +193,29 @@
                      nfa_dm_cb.disc_cb.disc_state);
 
     if (nfc_cb.nfc_state == NFC_STATE_CORE_INIT) {
-#if ((NXP_EXTNS == TRUE) && (NXP_NFCC_MW_RCVRY_BLK_FW_DNLD == true))
-      NFC_TRACE_DEBUG0(
-          "MW recovery should abort FW download checking at time of "
-          "cmd_timeout");
+#if (NXP_EXTNS == TRUE)
+        if(nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD) {
+            NFC_TRACE_DEBUG0(
+                    "MW recovery should abort FW download checking at time of "
+                    "cmd_timeout");
+        }
+        else {
+            NFC_TRACE_DEBUG0("Force FW Download !");
+            nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_CHECK_FLASH_REQ, &inpOutData);
+            fw_update_inf = *(tNFC_FWUpdate_Info_t*)&inpOutData.out.data.fwUpdateInf;
+            nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_FW_DWNLD, &inpOutData);
+            fw_dwnld_status = inpOutData.out.data.fwDwnldStatus;
+            NFC_TRACE_DEBUG1("FW Download 0x%x", fw_dwnld_status);
+            if (fw_dwnld_status != NFC_STATUS_OK)
+                nfc_enabled(NFC_STATUS_FAILED, NULL);
+        }
 #else
-      NFC_TRACE_DEBUG0("Force FW Download !");
-      nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_CHECK_FLASH_REQ, &fw_update_inf);
-      nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_FW_DWNLD, &fw_dwnld_status);
-      NFC_TRACE_DEBUG1("FW Download 0x%x", fw_dwnld_status);
-      if (fw_dwnld_status != NFC_STATUS_OK)
-        nfc_enabled(NFC_STATUS_FAILED, NULL);
+        NFC_TRACE_DEBUG0("Force FW Download !");
+        nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_CHECK_FLASH_REQ, &fw_update_inf);
+        nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_FW_DWNLD, &fw_dwnld_status);
+        NFC_TRACE_DEBUG1("FW Download 0x%x", fw_dwnld_status);
+        if (fw_dwnld_status != NFC_STATUS_OK)
+            nfc_enabled(NFC_STATUS_FAILED, NULL);
 #endif
     }
     /*Prepare the DISCOVERY command*/
@@ -268,18 +274,17 @@
                 (nfc_cb.last_cmd_buf[0] == 0x01 &&
                  nfc_cb.last_cmd_buf[1] == 0x00)) /*DEACTIVATE TO IDLE*/
                ) {
-      /*Set the length of last command*/
-      buffer[35] = nfc_cb.cmd_size + 3; /*HDR(2) + Length(1) + Cmd data(n)*/
+        /*Set indicating last command is available to be sent after recovery*/
+        buffer[35] = 0x01;
+
       /*Copy the last HEADER*/
       memcpy(&buffer[36], nfc_cb.last_hdr, NFC_SAVED_HDR_SIZE);
       /*Copy the last command*/
       memcpy(&buffer[38], nfc_cb.last_cmd_buf, nfc_cb.cmd_size + 1);
     } else /*either CORE_RESET or CORE_INIT was the last command*/
     {
-      /*full length of command*/
-      buffer[35] =
-          2 + 1 + nfc_cb.cmd_size; /*HDR(2) + Length(1) + Command data size(n)*/
-
+        /*Set indicating last command is available to be sent after recovery*/
+      buffer[35] = 0x01;
       memcpy(&buffer[36], nfc_cb.last_hdr, NFC_SAVED_HDR_SIZE);
 
       buffer[38] = nfc_cb.cmd_size; /*Length of last command*/
@@ -288,7 +293,6 @@
         memcpy(&buffer[39], nfc_cb.last_cmd, NFC_SAVED_CMD_SIZE);
       else
         buffer[35] = 0x00; /*last command was CORE_INIT*/
-
       if (nfc_cb.last_hdr[0] == 0x20 && nfc_cb.last_hdr[1] == 0x00)
         buffer[0] = 2; /*indicate last command was CORE_RESET*/
       else if (nfc_cb.last_hdr[0] == 0x20 && nfc_cb.last_hdr[1] == 0x01)
@@ -321,9 +325,10 @@
       }
     }
     NFC_TRACE_DEBUG3(
-        "nfc_ncif_cmd_timeout(): Indicator:0x%X disc cmd len:0x%X last cmd "
-        "len:0x%X",
-        buffer[0], buffer[2], buffer[35]);
+        "nfc_ncif_cmd_timeout(): Indicator:0x%02X disc cmd len:0x%02X last cmd "
+        "len:0x%02X",
+        buffer[0], buffer[2], buffer[38]);
+
     nfc_cb.p_hal->core_initialized(bufflen, buffer);
     if (buffer != NULL) free(buffer);
     NFC_TRACE_DEBUG0("nfc_ncif_cmd_timeout(): exit");
@@ -450,11 +455,12 @@
     GKI_enqueue(&p_cb->tx_q, p_data);
   }
 
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
-  if ((nfc_cb.bBlockWiredMode) && (p_cb->conn_id == NFC_NFCEE_CONN_ID)) {
-    /* CE is activated on UICC hence return simply without sedning data */
-    return (NCI_STATUS_OK);
+#if (NXP_EXTNS == TRUE)
+  if ((nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) &&
+          ((nfc_cb.bBlockWiredMode) && (p_cb->conn_id == NFC_NFCEE_CONN_ID))) {
+      /* CE is activated on UICC hence return simply without sedning data */
+      return (NCI_STATUS_OK);
   }
 #endif
 
@@ -503,14 +509,15 @@
     NCI_DATA_PBLD_HDR(pp, pbf, hdr0, ulen);
     if (p_cb->num_buff != NFC_CONN_NO_FC) p_cb->num_buff--;
 
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
-    if (p_cb->conn_id == NFC_NFCEE_CONN_ID) {
-      nfc_cb.temp_data = (NFC_HDR*)temp_buff;
-      nfc_cb.temp_data->offset = p->offset;
-      pTemp = (uint8_t*)(nfc_cb.temp_data + 1) + nfc_cb.temp_data->offset;
-      nfc_cb.temp_data->len = p->len;
-      memcpy(pTemp, (uint8_t*)(p + 1) + (p->offset), p->len);
+#if (NXP_EXTNS == TRUE)
+    if ((nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+            nfcFL.eseFL._ESE_WIRED_MODE_RESUME) &&
+            (p_cb->conn_id == NFC_NFCEE_CONN_ID)) {
+        nfc_cb.temp_data = (NFC_HDR*)temp_buff;
+        nfc_cb.temp_data->offset = p->offset;
+        pTemp = (uint8_t*)(nfc_cb.temp_data + 1) + nfc_cb.temp_data->offset;
+        nfc_cb.temp_data->len = p->len;
+        memcpy(pTemp, (uint8_t*)(p + 1) + (p->offset), p->len);
     }
 #endif
 
@@ -780,34 +787,31 @@
       /* make sure this is the RSP we are waiting for before updating the
        * command window */
       if ((old_gid != gid) || (old_oid != oid)) {
-#if (NFC_NXP_ESE == TRUE && (NXP_ESE_ETSI_READER_ENABLE == true))
-        if (((gid == NCI_GID_RF_MANAGE) && (oid == NCI_MSG_RF_DISCOVER)) &&
-            (etsi_reader_in_progress == true)) {
-          NFC_TRACE_DEBUG0("Changing disc_state and disc_flags");
-          nfa_dm_cb.disc_cb.disc_state = NFA_DM_RFST_IDLE;
-          nfa_dm_cb.disc_cb.disc_flags &=
-              ~(NFA_DM_DISC_FLAGS_W4_NTF | NFA_DM_DISC_FLAGS_STOPPING);
-          nfa_dm_cb.disc_cb.disc_flags |=
-              (NFA_DM_DISC_FLAGS_W4_RSP | NFA_DM_DISC_FLAGS_NOTIFY |
-               NFA_DM_DISC_FLAGS_ENABLED);
-          disc_deact_ntf_timeout_handler(NFC_NFCC_TIMEOUT_REVT);
-        } else {
-#endif
-          /*no response after the deactivate command, handling the error
-           * scenario after the recovery*/
-          if ((gid == NCI_GID_RF_MANAGE) && (oid == NCI_MSG_RF_DISCOVER) &&
-              (nfc_cb.nci_cmd_window == 0)) {
-            NFC_TRACE_DEBUG0("resetting the nci_cmd_window");
-            nfc_cb.nci_cmd_window++;
+          if ((nfcFL.nfcNxpEse && nfcFL.eseFL._ESE_ETSI_READER_ENABLE) &&
+                  ((gid == NCI_GID_RF_MANAGE) && (oid == NCI_MSG_RF_DISCOVER)) &&
+                  (etsi_reader_in_progress == true)) {
+              NFC_TRACE_DEBUG0("Changing disc_state and disc_flags");
+              nfa_dm_cb.disc_cb.disc_state = NFA_DM_RFST_IDLE;
+              nfa_dm_cb.disc_cb.disc_flags &=
+                      ~(NFA_DM_DISC_FLAGS_W4_NTF | NFA_DM_DISC_FLAGS_STOPPING);
+              nfa_dm_cb.disc_cb.disc_flags |=
+                      (NFA_DM_DISC_FLAGS_W4_RSP | NFA_DM_DISC_FLAGS_NOTIFY |
+                              NFA_DM_DISC_FLAGS_ENABLED);
+              disc_deact_ntf_timeout_handler(NFC_NFCC_TIMEOUT_REVT);
           } else {
-            NFC_TRACE_ERROR2(
-                "nfc_ncif_process_event unexpected rsp: gid:0x%x, oid:0x%x",
-                gid, oid);
-            return true;
+              /*no response after the deactivate command, handling the error
+               * scenario after the recovery*/
+              if ((gid == NCI_GID_RF_MANAGE) && (oid == NCI_MSG_RF_DISCOVER) &&
+                      (nfc_cb.nci_cmd_window == 0)) {
+                  NFC_TRACE_DEBUG0("resetting the nci_cmd_window");
+                  nfc_cb.nci_cmd_window++;
+              } else {
+                  NFC_TRACE_ERROR2(
+                          "nfc_ncif_process_event unexpected rsp: gid:0x%x, oid:0x%x",
+                          gid, oid);
+                  return true;
+              }
           }
-#if ((NFC_NXP_ESE == TRUE) && (NXP_ESE_ETSI_READER_ENABLE == true))
-        }
-#endif
       }
 
       switch (gid) {
@@ -940,10 +944,11 @@
 void nfc_ncif_event_status(tNFC_RESPONSE_EVT event, uint8_t status) {
   tNFC_RESPONSE evt_data;
 
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
-  if ((status == NFC_STATUS_WIRED_SESSION_ABORTED) ||
-      (status == NFC_STATUS_DWP_APDU_DROPPPED)) {
+#if (NXP_EXTNS == TRUE)
+  if ((nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) &&
+          ((status == NFC_STATUS_WIRED_SESSION_ABORTED) ||
+                  (status == NFC_STATUS_DWP_APDU_DROPPPED))) {
     tNFC_CONN_CB* p_cb;
     nfc_cb.bBlockWiredMode = true;
     nfc_cb.bBlkPwrlinkAndModeSetCmd = true;
@@ -963,6 +968,7 @@
     }
     if (status == NFC_STATUS_WIRED_SESSION_ABORTED) {
       nfc_cb.bIsDwpResPending = true;
+      nfa_hci_cb.IsWiredSessionAborted = true;
     }
     nfa_sys_stop_timer(&nfa_hci_cb.timer);
     if (p_cb && p_cb->p_cback)
@@ -1008,25 +1014,27 @@
 void nfc_ncif_proc_rf_field_ntf(uint8_t rf_status) {
   NFC_TRACE_DEBUG0("nfc_ncif_proc_rf_field_ntf");
   tNFC_RESPONSE evt_data;
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
-  if (rf_status == 0x01) {
-    NFC_TRACE_DEBUG0("nfc_ncif_proc_rf_field_ntf ON_EVT");
-    nfc_cb.bBlockWiredMode = true;
-    nfc_cb.bBlkPwrlinkAndModeSetCmd = true;
-    nfc_stop_timer(&nfc_cb.nci_wait_setMode_Ntf_timer); /* stop mode set Ntf
+#if (NXP_EXTNS == TRUE)
+  if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+      if (rf_status == 0x01) {
+          NFC_TRACE_DEBUG0("nfc_ncif_proc_rf_field_ntf ON_EVT");
+          nfc_cb.bBlockWiredMode = true;
+          nfc_cb.bBlkPwrlinkAndModeSetCmd = true;
+          nfc_stop_timer(&nfc_cb.nci_wait_setMode_Ntf_timer); /* stop mode set Ntf
                                                            timer if it is
                                                            allready started */
-    nfc_start_timer(&nfc_cb.rf_filed_event_timeout_timer,
-                    (uint16_t)(NFC_TTYPE_NCI_WAIT_RF_FIELD_NTF),
-                    NFC_NCI_RFFIELD_EVT_TIMEOUT);
-  } else {
-    nfc_stop_timer(&nfc_cb.rf_filed_event_timeout_timer);
-    if (nfc_cb.bBlockWiredMode) {
-      nfc_start_timer(&nfc_cb.rf_filed_event_timeout_timer,
+          nfc_start_timer(&nfc_cb.rf_filed_event_timeout_timer,
+                  (uint16_t)(NFC_TTYPE_NCI_WAIT_RF_FIELD_NTF),
+                  NFC_NCI_RFFIELD_EVT_TIMEOUT);
+      } else {
+          nfc_stop_timer(&nfc_cb.rf_filed_event_timeout_timer);
+          if (nfc_cb.bBlockWiredMode) {
+              nfc_start_timer(&nfc_cb.rf_filed_event_timeout_timer,
                       (uint16_t)(NFC_TTYPE_NCI_WAIT_RF_FIELD_NTF),
                       NFC_NCI_RFFIELD_EVT_TIMEOUT);
-    }
+          }
+      }
   }
 #endif
 
@@ -1038,8 +1046,7 @@
 }
 #endif
 
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+#if (NXP_EXTNS == TRUE)
 /*******************************************************************************
 **
 ** Function         nfc_ncif_allow_dwp_transmission
@@ -1052,6 +1059,12 @@
 **
 *******************************************************************************/
 void nfc_ncif_allow_dwp_transmission() {
+    NFC_TRACE_DEBUG0("nfc_ncif_allow_dwp_transmission Enter");
+    if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME !=
+            nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+        NFC_TRACE_DEBUG0("DUAL_MODE_PRIO_SCHEME != WIRED_MODE_RESUME. Returning");
+        return;
+    }
   tNFC_RESPONSE evt_data;
   tNFC_CONN_CB* p_cb;
   NFC_TRACE_DEBUG2("nfc_ncif_allow_dwp_transmission %d, %d ",
@@ -1096,6 +1109,11 @@
 *******************************************************************************/
 void nfc_ncif_onWiredModeHold_timeout() {
   NFC_TRACE_DEBUG0("nfc_ncif_onWiredModeHold_timeout");
+  if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME !=
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+      NFC_TRACE_DEBUG0("DUAL_MODE_PRIO_SCHEME != WIRED_MODE_RESUME. Returning");
+      return;
+  }
   if (nfc_cb.bBlockWiredMode) {
     nfc_ncif_resume_dwp_wired_mode();
   }
@@ -1112,6 +1130,11 @@
 *******************************************************************************/
 void nfc_ncif_resume_dwp_wired_mode() {
   NFC_TRACE_DEBUG0("nfc_ncif_resume_dwp_wired_mode");
+  if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME !=
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+      NFC_TRACE_DEBUG0("DUAL_MODE_PRIO_SCHEME != WIRED_MODE_RESUME. Returning");
+      return;
+  }
   tNFC_CONN_CB* p_cb;
   p_cb = nfc_find_conn_cb_by_conn_id(nfa_hci_cb.conn_id);
   nfc_cb.bBlkPwrlinkAndModeSetCmd = false;
@@ -1147,6 +1170,11 @@
 *******************************************************************************/
 void nfc_ncif_modeSet_Ntf_timeout() {
   NFC_TRACE_DEBUG0("nfc_ncif_modeSet_Ntf_timeout");
+  if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME !=
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+      NFC_TRACE_DEBUG0("DUAL_MODE_PRIO_SCHEME != WIRED_MODE_RESUME. Returning");
+      return;
+  }
   if (nfc_cb.bBlockWiredMode) {
     nfc_cb.bBlockWiredMode = false;
     nfc_cb.bCeActivatedeSE = false;
@@ -1165,6 +1193,11 @@
 *******************************************************************************/
 void nfc_ncif_modeSet_rsp_timeout() {
   NFC_TRACE_DEBUG0("nfc_ncif_modeSet_rsp_timeout");
+  if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME !=
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+      NFC_TRACE_DEBUG0("DUAL_MODE_PRIO_SCHEME != WIRED_MODE_RESUME. Returning");
+      return;
+  }
   tNFC_NFCEE_MODE_SET_REVT mode_set_info;
   tNFC_RESPONSE_CBACK* p_cback = nfc_cb.p_resp_cback;
   tNFC_NFCEE_INFO_REVT nfcee_info;
@@ -1192,6 +1225,11 @@
 *******************************************************************************/
 void nfc_ncif_pwr_link_rsp_timeout() {
   NFC_TRACE_DEBUG0("nfc_ncif_pwr_link_rsp_timeout");
+  if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME !=
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+      NFC_TRACE_DEBUG0("DUAL_MODE_PRIO_SCHEME != WIRED_MODE_RESUME. Returning");
+      return;
+  }
   tNFC_RESPONSE_CBACK* p_cback = nfc_cb.p_resp_cback;
   tNFC_NFCEE_EE_PWR_LNK_REVT pwr_lnk_ctrl;
   tNFC_NFCEE_INFO_REVT nfcee_info;
@@ -1498,12 +1536,11 @@
                     (uint16_t)(NFC_TTYPE_LISTEN_ACTIVATION), 2);
   }
 
-#if (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME)
-  if (nfc_cb.bBlockWiredMode) {
-    nfc_stop_timer(&nfc_cb.rf_filed_event_timeout_timer);
+  if ((nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) && nfc_cb.bBlockWiredMode) {
+      nfc_stop_timer(&nfc_cb.rf_filed_event_timeout_timer);
   }
 #endif
-#endif
 
   /* just in case the interface reports activation parameters not defined in the
    * NCI spec */
@@ -1608,11 +1645,11 @@
   }
 #if (NFC_RW_ONLY == FALSE)
   else if (evt_data.activate.intf_param.type == NCI_INTERFACE_NFC_DEP) {
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
-    if (nfc_cb.bBlockWiredMode) {
-      nfc_ncif_resume_dwp_wired_mode();
-    }
+#if (NXP_EXTNS == TRUE)
+      if ((nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+              nfcFL.eseFL._ESE_WIRED_MODE_RESUME) && nfc_cb.bBlockWiredMode) {
+          nfc_ncif_resume_dwp_wired_mode();
+      }
 #endif
     /* Make max payload of NCI aligned to max payload of NFC-DEP for better
      * performance */
@@ -1674,8 +1711,8 @@
    * 1. Do not activate tag for this NTF.
    * 2. Pass this info to JNI as START_READER_EVT.
    */
-  else if (evt_data.activate.intf_param.type == NCI_INTERFACE_UICC_DIRECT ||
-           evt_data.activate.intf_param.type == NCI_INTERFACE_ESE_DIRECT) {
+  else if (evt_data.activate.intf_param.type == nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT ||
+           evt_data.activate.intf_param.type == nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT) {
     NFC_TRACE_DEBUG1("nfc_ncif_proc_activate:interface type  %x",
                      evt_data.activate.intf_param.type);
   }
@@ -1709,6 +1746,9 @@
   tNFC_DISCOVER evt_data;
   tNFC_DEACTIVATE_DEVT* p_deact;
   tNFC_CONN_CB* p_cb = &nfc_cb.conn_cb[NFC_RF_CONN_ID];
+#if (NXP_EXTNS == TRUE)
+    tRW_T3T_CB *p_t3tcb = &rw_cb.tcb.t3t;
+#endif
   void* p_data;
 
   nfc_set_state(NFC_STATE_IDLE);
@@ -1729,6 +1769,12 @@
     (*p_cb->p_cback)(NFC_RF_CONN_ID, NFC_DEACTIVATE_CEVT, (tNFC_CONN*)p_deact);
 
 #if (NXP_EXTNS == TRUE)
+    if (p_t3tcb->poll_timer.in_use)
+    {
+        NFC_TRACE_DEBUG1 ("%s: stopping t3t polling timer", __func__);
+        nfc_stop_quick_timer (&p_t3tcb->poll_timer);
+    }
+
   if ((nfc_cb.flags & (NFC_FL_DISCOVER_PENDING | NFC_FL_CONTROL_REQUESTED)) &&
       (deact_type == NFC_DEACTIVATE_TYPE_DISCOVERY) && (is_ntf == true)) {
     NFC_TRACE_DEBUG0(
@@ -1774,21 +1820,6 @@
         evt_data.act_data.param.aid.len_aid = data_len;
         STREAM_TO_ARRAY(evt_data.act_data.param.aid.aid, p, data_len);
         break;
-#if ((NXP_EXTNS == TRUE) && (NXP_NFCC_PROP_ACTN_NTF == true))
-      case NCI_EE_TRIG_RF_PROT_PROP_RSP_NTF:
-      case NCI_EE_TRIG_RF_TECH_PROP_RSP_NTF:
-        if (data_len > NFC_MAX_AID_LEN) data_len = NFC_MAX_AID_LEN;
-        NFC_TRACE_DEBUG1("AID len = %d", data_len);
-        evt_data.act_data.param.aid.len_aid = data_len;
-        STREAM_TO_ARRAY(evt_data.act_data.param.aid.aid, p, data_len);
-        plen = plen - data_len;
-        if ((plen != 0) && (*p++ == NCI_EE_TRIG_PROP_RSP_NTF)) {
-          evt_data.act_data.nfcee_act_ntf.len_data = *p++;
-          STREAM_TO_ARRAY(&evt_data.act_data.nfcee_act_ntf.data, p,
-                          evt_data.act_data.nfcee_act_ntf.len_data);
-        }
-        break;
-#endif
       case NCI_EE_TRIG_RF_PROTOCOL:
         evt_data.act_data.param.protocol = *p++;
         break;
@@ -1822,30 +1853,36 @@
           data_len -= ulen;
         }
         break;
-#if ((NXP_EXTNS == TRUE) && (NXP_NFCC_PROP_ACTN_NTF == true))
-      case NCI_EE_TRIG_PROP_RSP_NTF:
-        NFC_TRACE_DEBUG1("NCI_EE_TRIG_PROP_APP Data len = %d", data_len);
-        evt_data.act_data.nfcee_act_ntf.len_data = data_len;
-        STREAM_TO_ARRAY(&evt_data.act_data.nfcee_act_ntf.data, p, data_len);
-        break;
-#endif
     }
 
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
-    nfc_stop_timer(&nfc_cb.rf_filed_event_timeout_timer);
-    tNFC_CONN_CB* p_cb;
-    p_cb = nfc_find_conn_cb_by_conn_id(nfa_hci_cb.conn_id);
-    if (evt_data.nfcee_id != 0xC0) {
-      nfc_cb.bBlockWiredMode = true;
-      nfc_cb.bBlkPwrlinkAndModeSetCmd = true;
-    } else {
-      if (evt_data.act_data.trigger == NCI_EE_TRIG_RF_TECHNOLOGY) {
-        nfc_cb.bBlockWiredMode = true;
-      } else if (nfc_cb.bBlockWiredMode) {
-        nfc_cb.bCeActivatedeSE = true;
-        nfc_ncif_resume_dwp_wired_mode();
-      }
+#if (NXP_EXTNS == TRUE)
+    if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+            nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+        nfc_stop_timer(&nfc_cb.rf_filed_event_timeout_timer);
+        tNFC_CONN_CB* p_cb;
+        p_cb = nfc_find_conn_cb_by_conn_id(nfa_hci_cb.conn_id);
+        if (evt_data.nfcee_id != 0xC0) {
+            nfc_cb.bBlockWiredMode = true;
+            nfc_cb.bBlkPwrlinkAndModeSetCmd = true;
+            if (!nfc_cb.bIsDwpResPending && nfa_hci_cb.assembling) {
+                    /* To faster transceive time out when CE is activated with UICC during
+                     * chained response being received*/
+                    NFC_TRACE_DEBUG0("restarted hci timer during chained response");
+                    nfa_hci_cb.IsWiredSessionAborted = true;
+                    nfa_sys_stop_timer(&nfa_hci_cb.timer);
+                    if (p_cb && p_cb->p_cback)
+                      (*p_cb->p_cback)(nfa_hci_cb.conn_id, NFC_HCI_RESTART_TIMER,
+                              (tNFC_CONN*)&evt_data);
+            }
+        } else {
+            if (evt_data.act_data.trigger == NCI_EE_TRIG_RF_TECHNOLOGY) {
+                nfc_cb.bBlockWiredMode = true;
+            } else if (nfc_cb.bBlockWiredMode) {
+                nfc_cb.bCeActivatedeSE = true;
+                nfc_ncif_resume_dwp_wired_mode();
+            }
+            nfc_main_flush_cmd_queue();
+        }
     }
 #endif
     (*p_cback)(NFC_EE_ACTION_REVT, (tNFC_RESPONSE*)&evt_data);
@@ -2037,91 +2074,96 @@
 
   if (is_ntf) {
 #if (NXP_EXTNS == TRUE)
-#if (NXP_NFCC_FORCE_NCI1_0_INIT == true)
-    if (status == 0x02) {
-      NFC_TRACE_DEBUG2(
-          "CORE_RESET_NTF 2 reason Command Received status nfc_state : 0x%x : "
-          "0x%x",
-          status, nfc_cb.nfc_state);
-      wait_for_ntf = false;
-      status = NCI_STATUS_OK;
-    } else if (status == 0x00) {
-      NFC_TRACE_DEBUG2(
-          "CORE_RESET_NTF 2 reason Unrecoverable Error status nfc_state : 0x%x "
-          ": 0x%x",
-          status, nfc_cb.nfc_state);
-      core_reset_init_num_buff = true;
-      nfc_ncif_cmd_timeout();
-    } else {
-      NFC_TRACE_DEBUG1("CORE_RESET_NTF 1 nfc_state :0x%x ", nfc_cb.nfc_state);
-      NFC_TRACE_DEBUG1("CORE_RESET_NTF 1 status :0x%x ", status);
-      core_reset_init_num_buff = true;
-      nfc_ncif_cmd_timeout();
-    }
-#else
-    NFC_TRACE_DEBUG1("reset notification nfc_state :0x%x ", nfc_cb.nfc_state);
-    NFC_TRACE_DEBUG1("reset notification!!:0x%x ", status);
-
-    if(status == NCI2_0_RESET_TRIGGER_TYPE_CORE_RESET_CMD_RECEIVED ||
-       status == NCI2_0_RESET_TRIGGER_TYPE_POWERED_ON) {
-        NFC_TRACE_DEBUG2 ("CORE_RESET_NTF Received status nfc_state : 0x%x : 0x%x",
-        status ,nfc_cb.nfc_state);
-        nfc_stop_timer(&nfc_cb.nci_wait_rsp_timer);
-        p++;
-       STREAM_TO_UINT8(nfc_cb.nci_version, p);
-       NFC_TRACE_ERROR1(" CORE_RESET_NTF nci_version%x", nfc_cb.nci_version);
-       status = NCI_STATUS_OK;
-      } else {
-       core_reset_init_num_buff = true;
-       /* CORE_RESET_NTF received error case , trigger recovery*/
-       NFC_TRACE_DEBUG2 ("CORE_RESET_NTF Received status nfc_state : 0x%x : 0x%x",
-         status ,nfc_cb.nfc_state);
-       nfc_ncif_cmd_timeout();
-       status = NCI_STATUS_FAILED;
-     }
-#endif
-  } else {
-#if (NXP_NFCC_FORCE_NCI1_0_INIT == true)
-    if ((*p_len) == NCI_CORE_RESET_RSP_LEN(NCI_VERSION_1_0)) {
-            nfc_cb.nci_version = NCI_VERSION_1_0;
-    }
-    NFC_TRACE_DEBUG1("CORE_RESET_RSP 2 nfc_state :0x%x ", nfc_cb.nfc_state);
-    len = *(--temp);  // extract the no of params in reset response
-    if (nfc_cb.flags & (NFC_FL_RESTARTING | NFC_FL_POWER_CYCLE_NFCC)) {
-      nfc_reset_all_conn_cbs();
-    }
-    if (len == 0x01)  // If response length is 01 means NCI2.0
-    {
-      wait_for_ntf = true;
-    }
-#else
-
-    NFC_TRACE_DEBUG1 ("CORE_RESET_RSP len :0x%x ", *p_len);
-    if ((*p_len) == NCI_CORE_RESET_RSP_LEN(NCI_VERSION_2_0)) {
-      wait_for_ntf = true;
-    }
-    else if ((*p_len) == NCI_CORE_RESET_RSP_LEN(NCI_VERSION_1_0)) {
-      nfc_cb.nci_version = NCI_VERSION_1_0;
-    }
-
-    NFC_TRACE_DEBUG1("reset response nfc_state :0x%x ", nfc_cb.nfc_state);
-    if (nfc_cb.flags & (NFC_FL_RESTARTING | NFC_FL_POWER_CYCLE_NFCC)) {
-      nfc_reset_all_conn_cbs();
-    }
-#if 0
-    /*Check NCI version only in case of reset rsp*/
-    if (!is_ntf && status == NCI_STATUS_OK) {
-      if ((*p) != NCI_VERSION) {
-        NFC_TRACE_ERROR2("NCI version mismatch!!:0x%02x != 0x%02x ",
-                         NCI_VERSION, *p);
-        if ((*p) < NCI_VERSION_0_F) {
-          NFC_TRACE_ERROR0("NFCC version is too old");
-          status = NCI_STATUS_FAILED;
-        }
+      if(nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT) {
+          if (status == 0x02) {
+              NFC_TRACE_DEBUG2(
+                      "CORE_RESET_NTF 2 reason Command Received status nfc_state : 0x%x : "
+                      "0x%x",
+                      status, nfc_cb.nfc_state);
+              wait_for_ntf = false;
+              status = NCI_STATUS_OK;
+          } else if (status == 0x00) {
+              NFC_TRACE_DEBUG2(
+                      "CORE_RESET_NTF 2 reason Unrecoverable Error status nfc_state : 0x%x "
+                      ": 0x%x",
+                      status, nfc_cb.nfc_state);
+              core_reset_init_num_buff = true;
+              if(nfa_dm_is_active())
+                  nfc_ncif_cmd_timeout();
+          } else {
+              NFC_TRACE_DEBUG1("CORE_RESET_NTF 1 nfc_state :0x%x ", nfc_cb.nfc_state);
+              NFC_TRACE_DEBUG1("CORE_RESET_NTF 1 status :0x%x ", status);
+              core_reset_init_num_buff = true;
+              if(nfa_dm_is_active())
+                  nfc_ncif_cmd_timeout();
+          }
       }
-    }
+      else {
+          NFC_TRACE_DEBUG1("reset notification nfc_state :0x%x ", nfc_cb.nfc_state);
+          NFC_TRACE_DEBUG1("reset notification!!:0x%x ", status);
+
+          if(status == NCI2_0_RESET_TRIGGER_TYPE_CORE_RESET_CMD_RECEIVED ||
+                  status == NCI2_0_RESET_TRIGGER_TYPE_POWERED_ON) {
+              NFC_TRACE_DEBUG2 ("CORE_RESET_NTF Received status nfc_state : 0x%x : 0x%x",
+                      status ,nfc_cb.nfc_state);
+              nfc_stop_timer(&nfc_cb.nci_wait_rsp_timer);
+              p++;
+              STREAM_TO_UINT8(nfc_cb.nci_version, p);
+              NFC_TRACE_ERROR1(" CORE_RESET_NTF nci_version%x", nfc_cb.nci_version);
+              status = NCI_STATUS_OK;
+          } else {
+              core_reset_init_num_buff = true;
+              /* CORE_RESET_NTF received error case , trigger recovery*/
+              NFC_TRACE_DEBUG2 ("CORE_RESET_NTF Received status nfc_state : 0x%x : 0x%x",
+                      status ,nfc_cb.nfc_state);
+              if(nfa_dm_is_active())
+                  nfc_ncif_cmd_timeout();
+              status = NCI_STATUS_FAILED;
+          }
+      }
+  } else {
+      if(nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT) {
+          if ((*p_len) == NCI_CORE_RESET_RSP_LEN(NCI_VERSION_1_0)) {
+              nfc_cb.nci_version = NCI_VERSION_1_0;
+          }
+          NFC_TRACE_DEBUG1("CORE_RESET_RSP 2 nfc_state :0x%x ", nfc_cb.nfc_state);
+          len = *(--temp);  // extract the no of params in reset response
+          if (nfc_cb.flags & (NFC_FL_RESTARTING | NFC_FL_POWER_CYCLE_NFCC)) {
+              nfc_reset_all_conn_cbs();
+          }
+          if (len == 0x01)  // If response length is 01 means NCI2.0
+          {
+              wait_for_ntf = true;
+          }
+      }
+      else {
+
+          NFC_TRACE_DEBUG1 ("CORE_RESET_RSP len :0x%x ", *p_len);
+          if ((*p_len) == NCI_CORE_RESET_RSP_LEN(NCI_VERSION_2_0)) {
+              wait_for_ntf = true;
+          }
+          else if ((*p_len) == NCI_CORE_RESET_RSP_LEN(NCI_VERSION_1_0)) {
+              nfc_cb.nci_version = NCI_VERSION_1_0;
+          }
+
+          NFC_TRACE_DEBUG1("reset response nfc_state :0x%x ", nfc_cb.nfc_state);
+          if (nfc_cb.flags & (NFC_FL_RESTARTING | NFC_FL_POWER_CYCLE_NFCC)) {
+              nfc_reset_all_conn_cbs();
+          }
+#if 0
+          /*Check NCI version only in case of reset rsp*/
+          if (!is_ntf && status == NCI_STATUS_OK) {
+              if ((*p) != NCI_VERSION) {
+                  NFC_TRACE_ERROR2("NCI version mismatch!!:0x%02x != 0x%02x ",
+                          NCI_VERSION, *p);
+                  if ((*p) < NCI_VERSION_0_F) {
+                      NFC_TRACE_ERROR0("NFCC version is too old");
+                      status = NCI_STATUS_FAILED;
+                  }
+              }
+          }
 #endif
-#endif
+      }
   }
 #else
     NFC_TRACE_ERROR1("reset notification!!:0x%x ", status);
@@ -2155,37 +2197,46 @@
 
   if (status == NCI_STATUS_OK) {
 #if (NXP_EXTNS == TRUE)
-#if (NXP_NFCC_FORCE_NCI1_0_INIT == true)
-    if (!wait_for_ntf) {
-      NFC_TRACE_DEBUG0("Got CORE_RESET_NTF 2 sending CORE_INIT_CMD 1");
-      nci_snd_core_init(NCI_VERSION_1_0);
-    } else {
-      NFC_TRACE_DEBUG0("Waiting for CORE_RESET_NTF 2 reason CMD received");
-      /* start NFC command-timeout timer */
-      nfc_start_timer(&nfc_cb.nci_wait_rsp_timer,
+      if(nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT) {
+          if (!wait_for_ntf) {
+              NFC_TRACE_DEBUG0("Got CORE_RESET_NTF 2 sending CORE_INIT_CMD 1");
+              nci_snd_core_init(NCI_VERSION_1_0);
+          } else {
+              NFC_TRACE_DEBUG0("Waiting for CORE_RESET_NTF 2 reason CMD received");
+              /* start NFC command-timeout timer */
+              nfc_start_timer(&nfc_cb.nci_wait_rsp_timer,
                       (uint16_t)(NFC_TTYPE_NCI_WAIT_RSP),
                       nfc_cb.nci_wait_rsp_tout);
-    }
-#else
-    if(wait_for_ntf == true) {
-      /* reset version reported by NFCC is NCI2.0 , start a timer for 2000ms to
-       * wait for NTF*/
-      nfc_start_timer (&nfc_cb.nci_wait_rsp_timer, (uint16_t)(NFC_TTYPE_NCI_WAIT_RSP),
-        nfc_cb.nci_wait_rsp_tout);
-    } else {
-      if(nfc_cb.nci_version == NCI_VERSION_1_0)
-        nci_snd_core_init(NCI_VERSION_1_0);
-      else
-        nci_snd_core_init(NCI_VERSION_2_0);
+          }
       }
-#endif
+      else {
+          if(wait_for_ntf == true) {
+              /* reset version reported by NFCC is NCI2.0 , start a timer for 2000ms to
+               * wait for NTF*/
+              nfc_start_timer (&nfc_cb.nci_wait_rsp_timer, (uint16_t)(NFC_TTYPE_NCI_WAIT_RSP),
+                      nfc_cb.nci_wait_rsp_tout);
+          } else {
+              if(nfc_cb.nci_version == NCI_VERSION_1_0)
+                  nci_snd_core_init(NCI_VERSION_1_0);
+              else
+                  nci_snd_core_init(NCI_VERSION_2_0);
+          }
+      }
     NFC_TRACE_ERROR0("reset notification sending core init");
 #else
     nci_snd_core_init();
 #endif
   } else {
-    NFC_TRACE_ERROR0("Failed to reset NFCC");
-    nfc_enabled(status, NULL);
+    if(!core_reset_init_num_buff)
+        {
+            if(!nfa_dm_is_active())
+            {
+                status = NCI_STATUS_NOT_INITIALIZED;
+                NFC_Disable();
+            }
+            NFC_TRACE_ERROR0 ("Failed to reset NFCC");
+            nfc_enabled (status, NULL);
+        }
   }
 }
 
@@ -2269,9 +2320,7 @@
                       fw_mw_ver_status = NCI_STATUS_FAILED;
   tNFC_FWUpdate_Info_t fw_update_inf;
   uint8_t* init_rsp = NULL;
-#if (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true)
   uint8_t config_resp[16];
-#endif
   int i;
   memset(&fw_update_inf, 0x00, sizeof(tNFC_FWUpdate_Info_t));
 #endif
@@ -2280,15 +2329,14 @@
   status = *(p + NCI_MSG_HDR_SIZE);
 #if (NXP_EXTNS == TRUE)
   if (NCI_STATUS_OK == status) {
-#if (NXP_NFCC_MW_RCVRY_BLK_FW_DNLD == true)
     // MW_FW recovery disabling at time of sig/crash/die
     NFC_TRACE_DEBUG1("MW_RCVRY_FW_DNLD_ALLOWED  -> %d",
                      MW_RCVRY_FW_DNLD_ALLOWED);
-    if (NFC_STATE_CORE_INIT == nfc_cb.nfc_state &&
-        MW_RCVRY_FW_DNLD_ALLOWED == false)
-#else
-    if (NFC_STATE_CORE_INIT == nfc_cb.nfc_state)
-#endif
+    if (((nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD) &&
+            ((NFC_STATE_CORE_INIT == nfc_cb.nfc_state) &&
+                    (MW_RCVRY_FW_DNLD_ALLOWED == false))) ||
+            ((!nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD) &&
+                    (nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD)))
     {
       nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_CHECK_FLASH_REQ, &inpOutData);
       fw_update_inf = *(tNFC_FWUpdate_Info_t*)&inpOutData.out.data.fwUpdateInf;
@@ -2296,9 +2344,9 @@
                        fw_update_inf.fw_update_reqd);
 
       if (fw_update_inf.fw_update_reqd == true) {
-#if (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true)
-        uicc_eeprom_get_config(config_resp);
-#endif
+          if(nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH) {
+              uicc_eeprom_get_config(config_resp);
+          }
         nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_FW_DWNLD, &inpOutData);
         fw_dwnld_status = inpOutData.out.data.fwDwnldStatus;
         status = nfc_hal_nfcc_reset();
@@ -2323,9 +2371,9 @@
   else
   fw_status = NCI_STATUS_OK;
 
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
-  nfc_ncif_set_MaxRoutingTableSize(p);
-#endif
+  if((nfcFL.chipType != pn547C2) && nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN) {
+      nfc_ncif_set_MaxRoutingTableSize(p);
+  }
   nfc_cb.p_hal->ioctl(HAL_NFC_IOCTL_FW_MW_VER_CHECK, &inpOutData);
   fw_mw_ver_status = inpOutData.out.data.fwMwVerStatus;
 #endif
@@ -2338,10 +2386,10 @@
 #endif
       ) {
 #if (NXP_EXTNS == TRUE)
-    if (fw_dwnld_status == NCI_STATUS_OK) {
-#if (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true)
-      uicc_eeprom_set_config(config_resp);
-#endif
+      if (fw_dwnld_status == NCI_STATUS_OK) {
+          if(nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH) {
+              uicc_eeprom_set_config(config_resp);
+          }
     }
 #endif
 #if (NXP_EXTNS == TRUE)
@@ -2416,7 +2464,6 @@
                    nfc_fw_version.major_version, nfc_fw_version.minor_version);
   return status;
 }
-#if ((NFC_NXP_CHIP_TYPE != PN547C2) && (NFC_NXP_AID_MAX_SIZE_DYN == TRUE))
 /*******************************************************************************
 **
 ** Function         nfc_ncif_set_MaxRoutingTableSize
@@ -2427,6 +2474,14 @@
 **
 *******************************************************************************/
 tNFC_STATUS nfc_ncif_set_MaxRoutingTableSize(uint8_t* p_buf) {
+    NFC_TRACE_DEBUG0("nfc_ncif_set_MaxRoutingTableSize Enter");
+
+    if(!((nfcFL.chipType != pn547C2) && nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN)) {
+        NFC_TRACE_DEBUG0("chipType : pn547C2 or NFC_NXP_AID_MAX_SIZE_DYN"
+                " not available.. Returning");
+        return NFC_STATUS_FAILED;
+
+    }
   uint8_t status = NFC_STATUS_OK;
   int len = p_buf[2] + 2; /*include 2 byte header*/
   maxRoutingTableSize = p_buf[len - 8];
@@ -2447,8 +2502,15 @@
 ** Returns          uint16_t
 **
 *******************************************************************************/
-uint16_t nfc_ncif_getMaxRoutingTableSize() { return maxRoutingTableSize; }
-#endif
+uint16_t nfc_ncif_getMaxRoutingTableSize() {
+    if(!((nfcFL.chipType != pn547C2) && nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN)) {
+        NFC_TRACE_DEBUG0("getMaxRoutingTableSize : chipType : pn547C2 or "
+                "NFC_NXP_AID_MAX_SIZE_DYN not available.. Returning");
+        return 0;
+
+    }
+    return maxRoutingTableSize;
+}
 /*******************************************************************************
 **
 ** Function         nfc_ncif_getFWVersion
@@ -2596,15 +2658,22 @@
              }
               }
           }
+        }
         if((NFC_GetNCIVersion() == NCI_VERSION_2_0)&&(p_cb->act_protocol == NCI_PROTOCOL_15693))
         {
           p_evt->len--;
           p = (uint8_t*)(p_evt + 1);
           data_cevt.status = *(p + p_evt->offset + p_evt->len);
         }
-
-        }
       }
+#if(NXP_EXTNS == TRUE)
+        if(p_cb->act_protocol == NCI_PROTOCOL_15693)
+        {
+            p_evt->len--;
+            p = (uint8_t *) (p_evt + 1);
+            data_cevt.status = *(p + p_evt->offset + p_evt->len);
+        }
+#endif
       (*p_cb->p_cback)(p_cb->conn_id, NFC_DATA_CEVT, (void*)&data_cevt);
       p_evt = NULL;
     }
@@ -2636,9 +2705,10 @@
   NFC_TRACE_DEBUG3("nfc_ncif_proc_data 0x%02x%02x%02x", pp[0], pp[1], pp[2]);
   NCI_DATA_PRS_HDR(pp, pbf, cid, len);
   p_cb = nfc_find_conn_cb_by_conn_id(cid);
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
-  if ((p_cb) && (cid == NFC_RF_CONN_ID) && (nfc_cb.bBlockWiredMode)) {
+#if (NXP_EXTNS == TRUE)
+  if ((nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+          nfcFL.eseFL._ESE_WIRED_MODE_RESUME) &&
+          ((p_cb) && (cid == NFC_RF_CONN_ID) && (nfc_cb.bBlockWiredMode))) {
     nfc_ncif_resume_dwp_wired_mode();
   }
 #endif
@@ -2743,7 +2813,7 @@
   tNFC_NFCEE_MODE_SET_REVT    mode_set_info;
   tNFC_RESPONSE_CBACK  *p_cback = nfc_cb.p_resp_cback;
   tNFC_NFCEE_INFO_REVT nfcee_info;
-
+  nfc_cb.flags  &= ~NFC_FL_WAIT_MODE_SET_NTF;
   tNFC_RESPONSE_EVT event    = NFC_NFCEE_MODE_SET_REVT;
   mode_set_info.status        = NCI_STATUS_FAILED;
 
@@ -2889,6 +2959,8 @@
         case NCI_GID_EE_MANAGE:
           switch (oid) {
             case 0x00:
+            case 0x01:
+            /*FALL_THRU: NFCEE_MODE_SET_NTF*/
               stat = false;
               break;
             default:
@@ -2912,20 +2984,23 @@
 
 #endif
 
-#if ((NFC_NXP_ESE == TRUE) && (NXP_EXTNS == TRUE) && \
-     (NXP_ESE_ETSI_READER_ENABLE == true))
+#if (NXP_EXTNS == TRUE)
 void disc_deact_ntf_timeout_handler(tNFC_RESPONSE_EVT event) {
-  tNFC_RESPONSE evt_data;
-  etsi_reader_in_progress = false;
-  if (nfc_cb.p_resp_cback) {
-    evt_data.status = (tNFC_STATUS)NFC_STATUS_HW_TIMEOUT;
-    (*nfc_cb.p_resp_cback)(event, &evt_data);
-  }
+    if(!(nfcFL.nfcNxpEse && nfcFL.eseFL._ESE_ETSI_READER_ENABLE)) {
+        NFC_TRACE_DEBUG0("disc_deact_ntf_timeout_handler : nfcNxpEse or "
+                "ETSI_READER_ENABLE not available. Returning..");
+        return;
+    }
+    tNFC_RESPONSE evt_data;
+    etsi_reader_in_progress = false;
+    if (nfc_cb.p_resp_cback) {
+        evt_data.status = (tNFC_STATUS)NFC_STATUS_HW_TIMEOUT;
+        (*nfc_cb.p_resp_cback)(event, &evt_data);
+    }
 }
 #endif
 
 #if (NXP_EXTNS == TRUE)
-#if (NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH == true)
 /*******************************************************************************
 **
 ** Function:        nfc_ncif_reset_nfcc
@@ -2938,6 +3013,11 @@
 *******************************************************************************/
 tNFC_STATUS nfc_ncif_reset_nfcc() {
   NFC_TRACE_DEBUG1("%s : Enter", __func__);
+  if(!nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH) {
+      NFC_TRACE_DEBUG0("NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH"
+              " feature is not available!!");
+      return (NFA_STATUS_FAILED);
+  }
   nfc_nci_IoctlInOutData_t inpOutData;
   uint8_t status = NCI_STATUS_FAILED;
   int isfound, retry_count = 0;
@@ -3021,6 +3101,11 @@
 *******************************************************************************/
 void uicc_eeprom_get_config(uint8_t* config_resp) {
   NFC_TRACE_DEBUG1("%s : Enter", __func__);
+  if(!nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH) {
+      NFC_TRACE_DEBUG0("NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH"
+              " feature is not available!!");
+      return;
+  }
   uint8_t cmd_get_dualUicc_config[] = {0x20, 0x03, 0x03, 0x01, 0xA0, 0xEC};
   nfc_nci_IoctlInOutData_t inpOutData;
   int uicc_mode = 0;
@@ -3028,7 +3113,8 @@
   uint8_t config_status = NCI_STATUS_FAILED;
   uint8_t retry_count = 0;
 
-  if (GetNumValue(NAME_NXP_DUAL_UICC_ENABLE, &uicc_mode, sizeof(int))) {
+  if (GetNumValue(NAME_NXP_DUAL_UICC_ENABLE, &uicc_mode,
+          sizeof(int))) {
     NFC_TRACE_DEBUG1("NXP_DUAL_UICC_ENABLE : 0x%02x", uicc_mode);
 
   } else {
@@ -3065,6 +3151,11 @@
 *******************************************************************************/
 void uicc_eeprom_set_config(uint8_t* config_rsp) {
   NFC_TRACE_DEBUG1("%s : Enter", __func__);
+  if(!nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH) {
+      NFC_TRACE_DEBUG0("NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH"
+              " feature is not available!!");
+      return;
+  }
   uint8_t cmd_set_dualUicc_config[] = {0x20, 0x02, 0x05, 0x01,
                                        0xA0, 0xEC, 0x01, 0x11};
   nfc_nci_IoctlInOutData_t inpOutData;
@@ -3072,7 +3163,8 @@
   uint8_t config_status = NCI_STATUS_FAILED;
   uint8_t retry_count = 0;
 
-  if (GetNumValue(NAME_NXP_DUAL_UICC_ENABLE, &uicc_mode, sizeof(int))) {
+  if (GetNumValue(NAME_NXP_DUAL_UICC_ENABLE, &uicc_mode,
+          sizeof(int))) {
     NFC_TRACE_DEBUG1("NXP_DUAL_UICC_ENABLE : 0x%02x", uicc_mode);
 
   } else {
@@ -3102,4 +3194,3 @@
   }
 }
 #endif
-#endif
diff --git a/src/nfc/nfc/nfc_task.c b/src/nfc/nfc/nfc_task.c
index 740dbd3..e445bc8 100644
--- a/src/nfc/nfc/nfc_task.c
+++ b/src/nfc/nfc/nfc_task.c
@@ -150,16 +150,18 @@
         nfc_ncif_credit_ntf_timeout();
         break;
       }
-#if (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME)
-      case NFC_TYPE_NCI_WAIT_SETMODE_NTF: {
-        nfc_ncif_modeSet_Ntf_timeout();
-        break;
-      }
-      case NFC_TTYPE_NCI_WAIT_RF_FIELD_NTF: {
-        nfc_ncif_onWiredModeHold_timeout();
-        break;
-      }
-#endif
+      case NFC_TYPE_NCI_WAIT_SETMODE_NTF:
+          if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+                  nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+              nfc_ncif_modeSet_Ntf_timeout();
+          }
+          break;
+      case NFC_TTYPE_NCI_WAIT_RF_FIELD_NTF:
+          if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+                  nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+              nfc_ncif_onWiredModeHold_timeout();
+          }
+          break;
       case NFC_TTYPE_LISTEN_ACTIVATION: {
         extern uint8_t sListenActivated;
         sListenActivated = false;
@@ -318,14 +320,19 @@
         ce_t4t_process_timeout(p_tle);
         break;
 #endif
-#if ((NXP_EXTNS == TRUE) && \
-     (NXP_ESE_DUAL_MODE_PRIO_SCHEME == NXP_ESE_WIRED_MODE_RESUME))
+#if (NXP_EXTNS == TRUE)
       case NFC_TTYPE_PWR_LINK_RSP:
-        nfc_ncif_pwr_link_rsp_timeout();
-        break;
+          if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+                  nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+              nfc_ncif_pwr_link_rsp_timeout();
+          }
+          break;
       case NFC_TTYPE_SET_MODE_RSP:
-        nfc_ncif_modeSet_rsp_timeout();
-        break;
+          if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME ==
+                  nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+              nfc_ncif_modeSet_rsp_timeout();
+          }
+          break;
 #endif
       default:
         NFC_TRACE_DEBUG1(
@@ -353,6 +360,12 @@
 void nfc_task_shutdown_nfcc(void) {
   NFC_HDR* p_msg;
 
+#if (NXP_EXTNS == TRUE)
+ if(nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME == nfcFL.eseFL._ESE_WIRED_MODE_RESUME) {
+     nfc_stop_timer(&nfc_cb.rf_filed_event_timeout_timer);
+ }
+#endif
+
   /* Free any messages still in the mbox */
   while ((p_msg = (NFC_HDR*)GKI_read_mbox(NFC_MBOX_ID)) != NULL) {
     GKI_freebuf(p_msg);
diff --git a/src/nfc/nfc/nfc_utils.c b/src/nfc/nfc/nfc_utils.c
index 3fc8aa3..9176807 100644
--- a/src/nfc/nfc/nfc_utils.c
+++ b/src/nfc/nfc/nfc_utils.c
@@ -42,8 +42,10 @@
 tNFC_CONN_CB* nfc_alloc_conn_cb(tNFC_CONN_CBACK* p_cback) {
   int xx, max = NCI_MAX_CONN_CBS;
   tNFC_CONN_CB* p_conn_cb = NULL;
-#if ((NXP_EXTNS == TRUE) && (NFC_NXP_CHIP_TYPE != PN547C2))
-
+#if (NXP_EXTNS == TRUE)
+  if(nfcFL.chipType != pn547C2) {
+      NFC_CHECK_MAX_CONN();
+  }
 #else
   NFC_CHECK_MAX_CONN();
 #endif
diff --git a/src/nfc/tags/rw_i93.c b/src/nfc/tags/rw_i93.c
index 402187d..fbe09fc 100644
--- a/src/nfc/tags/rw_i93.c
+++ b/src/nfc/tags/rw_i93.c
@@ -2733,13 +2733,26 @@
 #endif
   (void)conn_id;
 
-  RW_TRACE_DEBUG1("rw_i93_data_cback () event = 0x%X", event);
+  if(p_data == NULL) {
+       RW_TRACE_ERROR0 ("rw_i93_data_cback (): p_data is NULL");
+       return;
+    }
 
-  if ((event == NFC_DEACTIVATE_CEVT) || (event == NFC_ERROR_CEVT)||
-          ((event == NFC_DATA_CEVT)&&(p_data->status != NFC_STATUS_OK))) {
+  RW_TRACE_DEBUG2 ("rw_i93_data_cback () event = 0x%X 0x%X", event, p_data->status);
+
+  if ((event == NFC_DEACTIVATE_CEVT) || (event == NFC_ERROR_CEVT)
+#if (NXP_EXTNS == TRUE)
+          || ((event == NFC_DATA_CEVT)&&(p_data->status != NFC_STATUS_OK))
+#endif
+    )
+  {
     nfc_stop_quick_timer(&p_i93->timer);
-
-    if (event == NFC_ERROR_CEVT) {
+#if(NXP_EXTNS == TRUE)
+        if ((event == NFC_ERROR_CEVT) || (p_data->status != NFC_STATUS_OK))
+#else
+    if (event == NFC_ERROR_CEVT)
+#endif
+    {
       if ((p_i93->retry_count < RW_MAX_RETRIES) && (p_i93->p_retry_cmd)) {
         p_i93->retry_count++;
 
diff --git a/src/nfc/tags/rw_t3t.c b/src/nfc/tags/rw_t3t.c
index b3fc09e..2f18030 100644
--- a/src/nfc/tags/rw_t3t.c
+++ b/src/nfc/tags/rw_t3t.c
@@ -338,10 +338,29 @@
 **
 *******************************************************************************/
 void rw_t3t_start_poll_timer(tRW_T3T_CB* p_cb) {
+  RW_TRACE_DEBUG1 ("%s: starting t3t poll timer", __func__);
   nfc_start_quick_timer(&p_cb->poll_timer, NFC_TTYPE_RW_T3T_RESPONSE,
                         RW_T3T_POLL_CMD_TIMEOUT_TICKS);
 }
 
+#if (NXP_EXTNS == TRUE)
+/*******************************************************************************
+**
+** Function         rw_t3t_stop_poll_timer
+**
+** Description      Stop the timer for T3T POLL Command
+**
+** Returns          none
+**
+*******************************************************************************/
+void rw_t3t_stop_poll_timer (tRW_T3T_CB *p_cb)
+{
+    RW_TRACE_DEBUG1 ("%s: stopping t3t poll timer", __func__);
+    if(p_cb->poll_timer.in_use)
+        nfc_stop_quick_timer (&p_cb->poll_timer);
+}
+#endif
+
 /*******************************************************************************
 **
 ** Function         rw_t3t_handle_nci_poll_ntf
@@ -358,7 +377,11 @@
   tRW_T3T_CB* p_cb = &rw_cb.tcb.t3t;
 
   /* stop timer for poll response */
-  nfc_stop_quick_timer(&p_cb->poll_timer);
+  #if (NXP_EXTNS == TRUE)
+    rw_t3t_stop_poll_timer (p_cb);
+  #else
+    nfc_stop_quick_timer(&p_cb->poll_timer);
+  #endif
 
   /* Stop t3t timer (if started) */
   if (p_cb->flags & RW_T3T_FL_W4_PRESENCE_CHECK_POLL_RSP) {
diff --git a/src/udrv/include/uamp_api.h b/src/udrv/include/uamp_api.h
deleted file mode 100644
index 9eb733c..0000000
--- a/src/udrv/include/uamp_api.h
+++ /dev/null
@@ -1,168 +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 serial definitions from WIDCOMM's Universal Embedded
- *  Drivers API.
- *
- ******************************************************************************/
-#ifndef UAMP_API_H
-#define UAMP_API_H
-
-/*****************************************************************************
-**  Constant and Type Definitions
-*****************************************************************************/
-
-/* UAMP identifiers */
-#define UAMP_ID_1   1
-#define UAMP_ID_2   2
-typedef UINT8 tUAMP_ID;
-
-/* UAMP event ids (used by UAMP_CBACK) */
-#define UAMP_EVT_RX_READY           0   /* Data from AMP controller is ready to be read */
-#define UAMP_EVT_CTLR_REMOVED       1   /* Controller removed */
-#define UAMP_EVT_CTLR_READY         2   /* Controller added/ready */
-typedef UINT8 tUAMP_EVT;
-
-
-/* UAMP Channels */
-#define UAMP_CH_HCI_CMD            0   /* HCI Command channel */
-#define UAMP_CH_HCI_EVT            1   /* HCI Event channel */
-#define UAMP_CH_HCI_DATA           2   /* HCI ACL Data channel */
-typedef UINT8 tUAMP_CH;
-
-/* tUAMP_EVT_DATA: union for event-specific data, used by UAMP_CBACK */
-typedef union {
-    tUAMP_CH channel;       /* UAMP_EVT_RX_READY: channel for which rx occured */
-} tUAMP_EVT_DATA;
-
-
-
-
-/*****************************************************************************
-**
-** Function:    UAMP_CBACK
-**
-** Description: Callback for events. Register callback using UAMP_Init.
-**
-** Parameters   amp_id:         AMP device identifier that generated the event
-**              amp_evt:        event id
-**              p_amp_evt_data: pointer to event-specific data
-**
-*****************************************************************************/
-typedef void (tUAMP_CBACK)(tUAMP_ID amp_id, tUAMP_EVT amp_evt, tUAMP_EVT_DATA *p_amp_evt_data);
-
-/*****************************************************************************
-**  external function declarations
-*****************************************************************************/
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*****************************************************************************
-**
-** Function:    UAMP_Init
-**
-** Description: Initialize UAMP driver
-**
-** Parameters   p_cback:    Callback function for UAMP event notification
-**
-*****************************************************************************/
-BT_API BOOLEAN UAMP_Init(tUAMP_CBACK *p_cback);
-
-
-/*****************************************************************************
-**
-** Function:    UAMP_Open
-**
-** Description: Open connection to local AMP device.
-**
-** Parameters   app_id: Application specific AMP identifer. This value
-**                      will be included in AMP messages sent to the
-**                      BTU task, to identify source of the message
-**
-*****************************************************************************/
-BT_API BOOLEAN UAMP_Open(tUAMP_ID amp_id);
-
-/*****************************************************************************
-**
-** Function:    UAMP_Close
-**
-** Description: Close connection to local AMP device.
-**
-** Parameters   app_id: Application specific AMP identifer.
-**
-*****************************************************************************/
-BT_API void UAMP_Close(tUAMP_ID amp_id);
-
-
-/*****************************************************************************
-**
-** Function:    UAMP_Write
-**
-** Description: Send buffer to AMP device.
-**
-**
-** Parameters:  app_id:     AMP identifer.
-**              p_buf:      pointer to buffer to write
-**              num_bytes:  number of bytes to write
-**              channel:    UAMP_CH_HCI_ACL, or UAMP_CH_HCI_CMD
-**
-** Returns:     number of bytes written
-**
-*****************************************************************************/
-BT_API UINT16 UAMP_Write(tUAMP_ID amp_id, UINT8 *p_buf, UINT16 num_bytes, tUAMP_CH channel);
-
-
-/*****************************************************************************
-**
-** Function:    UAMP_WriteBuf
-**
-** Description: Send GKI buffer to AMP device. Frees GKI buffer when done.
-**
-** Parameters   app_amp_id: AMP identifer (BTM_AMP_1, BTM_AMP_2, ...)
-**              p_msg:      message to send.
-**
-*****************************************************************************/
-BT_API UINT16 UAMP_WriteBuf(tUAMP_ID amp_id, BT_HDR *p_msg);
-
-
-/*****************************************************************************
-**
-** Function:    UAMP_Read
-**
-** Description: Read incoming data from AMP. Call after receiving a
-**              UAMP_EVT_RX_READY callback event.
-**
-** Parameters:  app_id:     AMP identifer.
-**              p_buf:      pointer to buffer for holding incoming AMP data
-**              buf_size:   size of p_buf
-**              channel:    UAMP_CH_HCI_ACL, or UAMP_CH_HCI_EVT
-**
-** Returns:     number of bytes read
-**
-*****************************************************************************/
-BT_API UINT16 UAMP_Read(tUAMP_ID amp_id, UINT8 *p_buf, UINT16 buf_size, tUAMP_CH channel);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* UAMP_API_H */
diff --git a/src/udrv/include/ucodec.h b/src/udrv/include/ucodec.h
deleted file mode 100644
index 6178fdc..0000000
--- a/src/udrv/include/ucodec.h
+++ /dev/null
@@ -1,385 +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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This file contains codec definitions from Widcomm's Universal Embedded
- *  Drivers API.
- *
- ******************************************************************************/
-
-#ifndef UCODEC_H
-#define UCODEC_H
-
-#include "bt_target.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*******************************************************************************
-** Codec APIs
-*******************************************************************************/
-
-/**** Codec IDs ****/
-#define UCODEC_ID_1             0
-#define UCODEC_ID_2             1
-#define UCODEC_ID_3             2
-#define UCODEC_ID_4             3
-#define UCODEC_NUMBER           4
-
-typedef UINT8 tUCODEC_ID;
-
-/**** Status ****/
-#define UCODEC_SUCCESS              0x00
-#define UCODEC_TX_DONE              0x01
-#define UCODEC_RX_READY             0x02
-#define UCODEC_FLOW_CTRL_ON         0x03
-#define UCODEC_FLOW_CTRL_OFF        0x04
-#define UCODEC_OVERFLOW             0x05
-#define UCODEC_UNSUPORTED_CNF       0x06
-#define UCODEC_WRONG_PARAM          0x07
-#define UCODEC_NOT_CONFIGURED       0x08
-#define UCODEC_OUT_OF_MEMORY        0x09
-#define UCODEC_GENERIC_ERROR        0x0a
-#define UCODEC_RECOVERABLE_ERROR    0x0b
-#define UCODEC_UNRECOVERABLE_ERROR  0x0c
-#define UCODEC_LOW_LEVEL_DRIVER_ERROR   (0x0d)
-
-typedef UINT8 tUCODEC_STATUS;
-
-/**** Media type ****/
-#define UCODEC_MEDIA_TYPE_AUDIO 0
-#define UCODEC_MEDIA_TYPE_VIDEO 1
-#define UCODEC_MEDIA_TYPE_MULTI 2
-
-typedef UINT8 tUCODEC_MEDIA_TYPE;
-
-/**** Audio Codec type ****/
-#define UCODEC_AUDIO_SBC        0
-#define UCODEC_AUDIO_M12_LAYER1 1   /* layer1 (mp1) */
-#define UCODEC_AUDIO_M12_LAYER2 2   /* layer2 (mp2) */
-#define UCODEC_AUDIO_M12_LAYER3 3   /* layer3 (mp3) */
-#define UCODEC_AUDIO_M24_2LC    4   /* MPEG-2 AAC LC */
-#define UCODEC_AUDIO_M24_4LC    5   /* MPEG-4 AAC LC */
-#define UCODEC_AUDIO_M24_4LTP   6   /* MPEG-4 AAC LTP */
-#define UCODEC_AUDIO_M24_4S     7   /* MPEG-4 AAC scalable */
-#define UCODEC_AUDIO_VOLUME     8   /* Volume settings */
-#define UCODEC_AUDIO_BALANCE    9   /* Balance settings */
-
-typedef UINT8 tUCODEC_AUDIO_FEAT_TYPE;
-
-/**** Video Codec type -> TODO ****/
-/*TBD*/
-
-typedef UINT8 tUCODEC_VIDEO_FEAT_TYPE;
-
-/**** SBC sample frequency ****/
-#define UCODEC_SBC_SMP_FREQ_16    0  /* 16 */
-#define UCODEC_SBC_SMP_FREQ_32    1  /* 23 */
-#define UCODEC_SBC_SMP_FREQ_44    2  /* 44.1 */
-#define UCODEC_SBC_SMP_FREQ_48    3  /* 48 */
-
-typedef UINT8 tUCODEC_SBC_SMP_FREQ;
-
-/**** SBC sample frequency ****/
-#define UCODEC_SBC_SUBBAND_4    4
-#define UCODEC_SBC_SUBBAND_8    8
-
-typedef UINT8 tUCODEC_SBC_SUBBAND;
-/**** Allocation method ****/
-#define UCODEC_SBC_ALLOC_MD_S   0   /* SNR */
-#define UCODEC_SBC_ALLOC_MD_L   1   /* loundess */
-
-typedef UINT8 tUCODEC_SBC_ALLOC_MD;
-
-/**** MPEG sample frequency ****/
-#define UCODEC_M12_SMP_FREQ_16    0   /* 16 */
-#define UCODEC_M12_SMP_FREQ_22    1   /* 22 */
-#define UCODEC_M12_SMP_FREQ_24    2  /* 24 */
-#define UCODEC_M12_SMP_FREQ_32    3  /* 32 */
-#define UCODEC_M12_SMP_FREQ_44    4  /* 44 */
-#define UCODEC_M12_SMP_FREQ_48    5  /* 48 */
-
-typedef UINT8 tUCODEC_M12_SMP_FREQ;
-
-/**** Channel mode ****/
-#define UCODEC_CHN_MONO            0
-#define UCODEC_CHN_DUAL            1
-#define UCODEC_CHN_STEREO          2
-#define UCODEC_CHN_JOINT_STEREO    3
-
-typedef UINT8 tUCODEC_CH_MODE;
-/**** Audio Codec type ****/
-#define UCODEC_M24_SMP_FREQ_8     0   /*  8 */
-#define UCODEC_M24_SMP_FREQ_11    1   /* 11 */
-#define UCODEC_M24_SMP_FREQ_12    2   /* 12 */
-#define UCODEC_M24_SMP_FREQ_16    3   /* 16 */
-#define UCODEC_M24_SMP_FREQ_22    4   /* 22.05 */
-#define UCODEC_M24_SMP_FREQ_24    5   /* 24 */
-#define UCODEC_M24_SMP_FREQ_32    6   /* 32 */
-#define UCODEC_M24_SMP_FREQ_44    7   /* 44.1 */
-#define UCODEC_M24_SMP_FREQ_48    8   /* 48 */
-#define UCODEC_M24_SMP_FREQ_64    9   /* 64 */
-#define UCODEC_M24_SMP_FREQ_88    10  /* 88 */
-#define UCODEC_M24_SMP_FREQ_96    11  /* 96 */
-
-typedef UINT8 tUCODEC_M24_SMP_FREQ;
-
-/**** Codec configuration structure ****/
-typedef struct tUCODEC_CNF_SBC_TAG
-{
-    tUCODEC_SBC_SMP_FREQ    SampleFreq;
-    tUCODEC_CH_MODE         ChannelMode;
-    UINT16                  Offset;     /* GKI buffer based offset for UCODEC_ReadBuf */
-    UINT16                  MtuSize;    /* Max buffer len for UCODEC_ReadBuf*/
-    UINT8                   PoolId;     /* GKI pool ID for UCODEC_ReadBuf */
-    UINT8                   NumBlock;   /* Number of block in block unit : 4 blocks 8 blocks 12 blocks 16 blocks are the possible value */
-    UINT8                   Subband;
-    tUCODEC_SBC_ALLOC_MD    AllocMthd;
-    UINT8                   MinBitPool;
-    UINT8                   MaxBitPool;
-} tUCODEC_CNF_SBC;
-
-typedef struct tUCODEC_CNF_M12_TAG
-{
-    tUCODEC_CH_MODE         ChannelMode; /* Mono, Dual, stereo, joint stereo */
-    tUCODEC_M12_SMP_FREQ    SampleFreq; /* Sample freq: 16, 22, 24, 32, 44, 48 */
-    UINT16                  BitRate;    /* Bit rate in bit per sec */
-    UINT16                  Offset;     /* GKI buffer based offset for UCODEC_ReadBuf */
-    UINT16                  MtuSize;    /* Max buffer len for UCODEC_ReadBuf*/
-    UINT8                   PoolId;     /* GKI pool ID for UCODEC_ReadBuf */
-    BOOLEAN                 VBR;        /* Variable Bit Rate */
-    BOOLEAN                 CRC_On;     /* CRC error detection */
-    BOOLEAN                 MPF;        /* Media payload format */
-} tUCODEC_CNF_M12;
-
-typedef struct tUCODEC_CNF_M24_TAG
-{
-    tUCODEC_M24_SMP_FREQ    SampleFreq; /* Sample freq: 8, 11, 12, 16, 22.05, 24, 32, 44.1, 48, 64, 88, 96 */
-    UINT32                  BitRate;    /* Bit rate */
-    UINT16                  Offset;     /* GKI buffer based offset for UCODEC_ReadBuf */
-    UINT16                  MtuSize;    /* Max buffer len for UCODEC_ReadBuf*/
-    UINT8                   PoolId;     /* GKI pool ID for UCODEC_ReadBuf */
-    UINT8                   Chanels;    /* 1 or 2 chanels */
-} tUCODEC_CNF_M24;
-
-
-typedef union tUCODEC_CODEC_TYPE_TAG
-{
-    tUCODEC_AUDIO_FEAT_TYPE AudioType;
-    tUCODEC_VIDEO_FEAT_TYPE VideoType;
-} tUCODEC_CODEC_TYPE;
-
-typedef union tUCODEC_FEATURE_TAG
-{
-    /* Add here the audio feature structure */
-    tUCODEC_CNF_SBC SBCConfig;
-    tUCODEC_CNF_M12 M12Config;
-    tUCODEC_CNF_M24 M24Config;
-    UINT8           Volume;     /* 0 to mute. 0xFF for the max volume */
-    UINT8           Balance;    /* 0->100% right, 255->100% left */
-    /* Add here the video feature structure */
-    /* TBD */
-} tUCODEC_FEATURE;
-
-typedef struct tUCODEC_CNF_TAG
-{
-    tUCODEC_MEDIA_TYPE  MediaType;
-    tUCODEC_CODEC_TYPE  Type;
-    tUCODEC_FEATURE     Feature;
-} tUCODEC_CNF;
-
-typedef struct tUCODEC_BUF_INFO_TAG
-{
-    UINT8       NumOfFrames;
-    UINT32      TimesStamp;
-} tUCODEC_BUF_INFO;
-
-
-/******************************************************************************
-**
-** Function         tUCODEC_CBACK_PTR
-**
-** Description      This call back report CODEC indication.
-**                  It report codec error as well as flow onfrol indication.
-**
-**                  Input : CodecId: Id of the codec that calls this call back.
-**                          Status: ->UCODEC_FLOW_CTRL_OFF if the Tx Q just
-**                                  went below the low watermark
-**                                  ->UCODEC_RX_READY if data are ready to be
-**                                  read. This olny hapens when the Rx Q was
-**                                  empty before receiving data.
-**                                  ->UCODEC_INTERNAL_ERROR if something went
-**                                  wrong with the driver
-**
-**                  Output Parameters : None
-**
-** Returns          None.
-**
-******************************************************************************/
-typedef void (* tUCODEC_CBACK_PTR)(tUCODEC_ID, tUCODEC_STATUS);
-
-/*******************************************************************************
-** Function Prototypes
-*******************************************************************************/
-
-/******************************************************************************
-**
-** Function         UCODEC_Init
-**
-** Description      Startup initialisation function. This function is called
-**                  before any orther function of UCODEC it initialize UCODEC
-**                  internal structure an the external codec.
-**
-**                  Input : CodecId: Id of the codec to perform the operation on.
-**
-**                  Output Parameters : None
-**
-** Returns          UCODEC_SUCCESS if The action was performed with sucess.
-**                  Error code else.
-**
-******************************************************************************/
-BT_API extern tUCODEC_STATUS    UCODEC_Init       (void *);
-
-/******************************************************************************
-**
-** Function         UCODEC_Configure
-**
-** Description      Initialise the CODEC for a particular stream.
-**
-**
-**                  Input : CodecId: Id of the codec to perform the operation on.
-**                          CbackPrt: Call back pointer for codec feedback.
-**                          pConfig: Pointer on a codec configuration structure.
-**
-**                  Output Parameters : None
-**
-** Returns          UCODEC_SUCCESS if The action was performed with sucess.
-**
-******************************************************************************/
-BT_API extern tUCODEC_STATUS    UCODEC_Configure  (tUCODEC_ID, tUCODEC_CBACK_PTR, tUCODEC_CNF *);
-
-/******************************************************************************
-**
-** Function         UCODEC_FlushTx
-**
-** Description      Fluch Tx buffer Q.
-**
-**                  Input : CodecId: Id of the codec to perform the operation on.
-**
-**                  Output Parameters : None
-**
-** Returns          UCODEC_SUCCESS if The action was performed with sucess.
-**                  Error code else.
-**
-******************************************************************************/
-BT_API extern tUCODEC_STATUS    UCODEC_FlushTx      (tUCODEC_ID);
-
-/******************************************************************************
-**
-** Function         UCODEC_FlushRx
-**
-** Description      Fluch Rx buffer Q.
-**
-**                  Input : CodecId: Id of the codec to perform the operation on.
-**
-**                  Output Parameters : None
-**
-** Returns          UCODEC_SUCCESS if The action was performed with sucess.
-**                  Error code else.
-**
-******************************************************************************/
-BT_API extern tUCODEC_STATUS    UCODEC_FlushRx      (tUCODEC_ID);
-
-/******************************************************************************
-**
-** Function         UCODEC_WriteBuf
-**
-** Description      Send a buffer to the codec.
-**
-**                  Input : CodecId: Id of the codec to perform the operation on.
-**                          pBuf: Pointer onto the GKI buffer to be send to the CODEC.
-**
-**                  Output Parameters : None
-**
-** Returns          UCODEC_SUCCESS if The action was performed with sucess.
-**                  UCODEC_FLOW_CTRL_ON if The codec buffer Q had reach a UCODEC_HIGH_WM
-**                                      watermark. The buffer is queued
-**                  UCODEC_OVERFLOW if The codec buffer Q had reach a critical
-**                                     watermark. The buffer is dropped.
-**
-******************************************************************************/
-BT_API extern tUCODEC_STATUS    UCODEC_WriteBuf   (tUCODEC_ID, BT_HDR *);
-
-/******************************************************************************
-**
-** Function         UCODEC_ReadBuf
-**
-** Description      Get a buffer from the codec.
-**
-**                  Input : CodecId: Id of the codec to perform the operation on.
-**
-**                  Output Parameters : None
-**
-** Returns          Pointer on the GKI buffer. NULL if the Rx Q is empty
-**
-******************************************************************************/
-BT_API extern tUCODEC_STATUS  UCODEC_ReadBuf    (tUCODEC_ID, BT_HDR **, tUCODEC_BUF_INFO *);
-
-/******************************************************************************
-**
-** Function         UCODEC_Close
-**
-** Description      This function is called to put the codec in low power mode
-**
-**
-**                  Input : CodecId: Id of the codec to perform the operation on.
-**
-**                  Output Parameters : None
-**
-** Returns          UCODEC_SUCCESS : The action was performed with sucess.
-**                  Error code else.
-**
-******************************************************************************/
-BT_API extern tUCODEC_STATUS   UCODEC_Close   (tUCODEC_ID);
-
-/******************************************************************************
-**
-** Function         UCODEC_Open
-**
-** Description      This function is called to resume the codec from low power
-**                  mode after UCODEC_Close had been called. It will put the
-**                  codec in the state it was before UCODEC_Close being called.
-**
-**                  Input : CodecId: Id of the codec to perform the operation on.
-**
-**                  Output Parameters : None
-**
-** Returns          UCODEC_SUCCESS : The action was performed with sucess.
-**                  Error code else.
-**
-******************************************************************************/
-BT_API extern tUCODEC_STATUS   UCODEC_Open     (tUCODEC_ID);
-
-#ifdef __cplusplus
-};
-#endif
-
-
-#endif /* UCODEC_H */
diff --git a/src/udrv/include/udac.h b/src/udrv/include/udac.h
deleted file mode 100644
index a2d7ab1..0000000
--- a/src/udrv/include/udac.h
+++ /dev/null
@@ -1,93 +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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  Definitions for UDAC driver
- *
- ******************************************************************************/
-#ifndef UDAC_H
-#define UDAC_H
-
-
-#define UDAC_GAIN_MAX     0x00FFF
-typedef UINT16 tUDAC_GAIN;
-
-/* API functions for DAC driver */
-
-
-/*****************************************************************************
-**
-** Function         DAC_Init
-**
-** Description
-**      Initialize the DAC subsystem
-**
-** Input parameters
-**      Nothing
-**
-** Output parameters
-**      Nothing
-**
-** Returns
-**      Nothing
-**
-*****************************************************************************/
-void UDAC_Init(void *p_cfg);
-
-
-/*****************************************************************************
-**
-** Function         DAC_Read
-**
-** Description
-**      Read current DAC gain
-**
-** Input parameters
-**      Nothing
-**
-** Output parameters
-**      Nothing
-**
-** Returns
-**      Current gain setting
-**
-*****************************************************************************/
-tUDAC_GAIN UDAC_Read(void);
-
-
-/*****************************************************************************
-**
-** Function         DAC_Set
-**
-** Description
-**      Set the DAC gain
-**
-** Input parameters
-**      gain        Gain setting
-**
-** Output parameters
-**      Nothing
-**
-** Returns
-**      Nothing
-**
-*****************************************************************************/
-void UDAC_Set(tUDAC_GAIN gain);
-
-#endif /* #ifndef UDAC_H */
diff --git a/src/udrv/include/uipc.h b/src/udrv/include/uipc.h
deleted file mode 100644
index 7a29645..0000000
--- a/src/udrv/include/uipc.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2007-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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  UIPC wrapper interface
- *
- ******************************************************************************/
-#ifndef UIPC_H
-#define UIPC_H
-
-#ifndef UDRV_API
-#define UDRV_API
-#endif
-
-
-#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   /* 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 */
-#define UIPC_CH_ID_7    8   /* Future usage */
-#define UIPC_CH_ID_8    9   /* Future usage */
-#define UIPC_CH_ID_9    10  /* Future usage */
-#define UIPC_CH_ID_10   11  /* Future usage */
-#define UIPC_CH_ID_11   12  /* Future usage */
-#define UIPC_CH_ID_12   13  /* Future usage */
-#define UIPC_CH_ID_13   14  /* Future usage */
-#define UIPC_CH_ID_14   15  /* Future usage */
-#define UIPC_CH_ID_15   16  /* Future usage */
-#define UIPC_CH_ID_16   17  /* Future usage */
-#define UIPC_CH_ID_17   18  /* Future usage */
-#define UIPC_CH_ID_18   19  /* Future usage */
-#define UIPC_CH_ID_19   20  /* Future usage */
-#define UIPC_CH_ID_20   21  /* Future usage */
-#define UIPC_CH_ID_21   22  /* Future usage */
-#define UIPC_CH_ID_22   23  /* Future usage */
-#define UIPC_CH_ID_23   24  /* Future usage */
-#define UIPC_CH_ID_24   25  /* Future usage */
-
-
-
-#define UIPC_CH_NUM 25
-
-typedef UINT8 tUIPC_CH_ID;
-
-
-typedef void (tUIPC_RCV_CBACK)(BT_HDR *p_msg); /* points to BT_HDR which describes event type and length of data; len contains the number of bytes of entire message (sizeof(BT_HDR) + offset + size of data) */
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-/*******************************************************************************
-**
-** Function         UIPC_Init
-**
-** Description      Initialize UIPC module
-**
-** Returns          void
-**
-*******************************************************************************/
-UDRV_API extern void UIPC_Init(void *);
-
-/*******************************************************************************
-**
-** Function         UIPC_Open
-**
-** Description      Open UIPC interface
-**
-** Returns          void
-**
-*******************************************************************************/
-UDRV_API extern BOOLEAN UIPC_Open(tUIPC_CH_ID ch_id, tUIPC_RCV_CBACK *p_cback);
-
-/*******************************************************************************
-**
-** Function         UIPC_Close
-**
-** Description      Close UIPC interface
-**
-** Returns          void
-**
-*******************************************************************************/
-UDRV_API extern void UIPC_Close(tUIPC_CH_ID ch_id);
-
-/*******************************************************************************
-**
-** Function         UIPC_SendBuf
-**
-** Description      Called to transmit a message over UIPC.
-**                  Message buffer will be freed by UIPC_SendBuf.
-**
-** Returns          void
-**
-*******************************************************************************/
-UDRV_API extern BOOLEAN UIPC_SendBuf(tUIPC_CH_ID ch_id, BT_HDR *p_msg);
-
-/*******************************************************************************
-**
-** Function         UIPC_Send
-**
-** Description      Called to transmit a message over UIPC.
-**
-** Returns          void
-**
-*******************************************************************************/
-UDRV_API extern BOOLEAN UIPC_Send(tUIPC_CH_ID ch_id, UINT16 msg_evt, UINT8 *p_buf, UINT16 msglen);
-
-/*******************************************************************************
-**
-** Function         UIPC_Read
-**
-** Description      Called to read a message from UIPC.
-**
-** Returns          void
-**
-*******************************************************************************/
-UDRV_API extern UINT32 UIPC_Read(tUIPC_CH_ID ch_id, UINT16 *p_msg_evt, UINT8 *p_buf, UINT32 len);
-
-/*******************************************************************************
-**
-** Function         UIPC_Ioctl
-**
-** Description      Called to control UIPC.
-**
-** Returns          void
-**
-*******************************************************************************/
-UDRV_API extern BOOLEAN UIPC_Ioctl(tUIPC_CH_ID ch_id, UINT32 request, void *param);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif  /* UIPC_H */
diff --git a/src/udrv/include/unv.h b/src/udrv/include/unv.h
deleted file mode 100644
index 7964021..0000000
--- a/src/udrv/include/unv.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/******************************************************************************
- *
- *  Copyright (C) 2002-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 NV definitions from WIDCOMM's Universal Embedded
- *  Drivers API.
- *
- ******************************************************************************/
-
-#ifndef UNV_H
-#define UNV_H
-
-#include "data_types.h"
-
-/*******************************************************************************
-** NV APIs
-*******************************************************************************/
-
-/**** Storage preferences ****/
-#define UNV_BLOCK         1
-#define UNV_BYTE          2
-#define UNV_NOPREF        3
-
-typedef UINT8 tUNV_STORAGE_PREF;
-
-/**** Status ****/
-#define UNV_REINIT      (-1)
-#define UNV_WRITELOCKED (-2)
-#define UNV_ERROR       (-3)
-
-typedef INT16 tUNV_STATUS;
-
-/* Prototype for function to restore defaults to a block */
-typedef void  (tUNV_DEFAULT_FUNC)(void);
-
-/*******************************************************************************
-** Function Prototypes
-*******************************************************************************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef UDRV_API
-#define UDRV_API
-#endif
-
-UDRV_API extern void        UNV_Init(void *);
-UDRV_API extern BOOLEAN     UNV_MapBlock(UINT16, tUNV_STORAGE_PREF, UINT16,
-                                         UINT16, UINT16 *, void *);
-UDRV_API extern BOOLEAN     UNV_ReadMap(UINT16, tUNV_STORAGE_PREF *, UINT16 *,
-                                        UINT16 *, UINT16 *);
-UDRV_API extern BOOLEAN     UNV_EraseBlock(UINT16);
-UDRV_API extern void        UNV_Default(UINT16);
-UDRV_API extern tUNV_STATUS UNV_Read(UINT16, UINT16, UINT16, UINT16, void *);
-UDRV_API extern tUNV_STATUS UNV_Write(UINT16, UINT16, UINT16, UINT16, void *);
-UDRV_API extern tUNV_STATUS UNV_ReadBlock(UINT16, UINT16, void *);
-UDRV_API extern tUNV_STATUS UNV_WriteBlock(UINT16, void *);
-UDRV_API extern UINT32      UNV_BytesRemaining(void);
-UDRV_API extern void        UNV_Consolidate(void);
-UDRV_API extern tUNV_STATUS UNV_ReadPtr(UINT16, UINT16, UINT8 **);
-UDRV_API extern tUNV_STATUS UNV_FreePtr(UINT16, UINT16);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* UNV_H */
diff --git a/src/udrv/include/usb.h b/src/udrv/include/usb.h
deleted file mode 100644
index c9ecda0..0000000
--- a/src/udrv/include/usb.h
+++ /dev/null
@@ -1,232 +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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This file contains serial definitions from WIDCOMM's Universal Embedded
- *  Drivers API.
- *
- ******************************************************************************/
-
-#ifndef USB_H
-#define USB_H
-
-/*******************************************************************************
-** Serial APIs
-*******************************************************************************/
-
-/**** port IDs ****/
-#define USB_PORT_1            0
-#define USB_PORT_2            1
-#define USB_PORT_3            2
-#define USB_PORT_4            3
-
-typedef UINT8 tUSB_PORT;
-
-/**** baud rates ****/
-#define USB_BAUD_300          0
-#define USB_BAUD_600          1
-#define USB_BAUD_1200         2
-#define USB_BAUD_2400         3
-#define USB_BAUD_9600         4
-#define USB_BAUD_19200        5
-#define USB_BAUD_57600        6
-#define USB_BAUD_115200       7
-#define USB_BAUD_230400       8
-#define USB_BAUD_460800       9
-#define USB_BAUD_921600       10
-#define USB_BAUD_AUTO         11
-
-/**** Data Format ****/
-
-/* Stop Bits */
-#define USB_STOPBITS_1        1
-#define USB_STOPBITS_1_5      (1<<1)
-#define USB_STOPBITS_2        (1<<2)
-
-/* Parity Bits */
-#define USB_PARITY_NONE       (1<<3)
-#define USB_PARITY_EVEN       (1<<4)
-#define USB_PARITY_ODD        (1<<5)
-
-/* Data Bits */
-#define USB_DATABITS_5        (1<<6)
-#define USB_DATABITS_6        (1<<7)
-#define USB_DATABITS_7        (1<<8)
-#define USB_DATABITS_8        (1<<9)
-
-
-/**** Flow Control ****/
-#define USB_FC_NONE           0
-#define USB_FC_HW             1
-#define USB_FC_SW             2
-
-/**** Data Buffering Mechanism ****/
-#define USB_BUF_BYTE          0
-#define USB_BUF_GKI           1
-
-/**** Signals ****/
-#define USB_SIG_RTSCTS        1
-#define USB_SIG_DSRDTR        (1<<1)
-#define USB_SIG_RI            (1<<2)
-#define USB_SIG_CD            (1<<3)
-#define USB_SIG_DTE_DEVICE    (1<<4)
-
-/**** Errors *****/
-#define USB_ERR_OVERRUN       1
-#define USB_ERR_PARITY        (1<<1)
-#define USB_ERR_FRAMING       (1<<2)
-#define USB_ERR_BREAK         (1<<3)
-
-/**** Serial Operations ****/
-#define USB_OP_FLUSH          0
-#define USB_OP_FLUSH_RX       1
-#define USB_OP_FLUSH_TX       2
-#define USB_OP_BREAK_OFF      3
-#define USB_OP_BREAK_ON       4
-#define USB_OP_BAUD_RD        5
-#define USB_OP_BAUD_WR        6
-#define USB_OP_FMT_RD         7
-#define USB_OP_FMT_WR         8
-#define USB_OP_SIG_RD         9
-#define USB_OP_SIG_WR         10
-#define USB_OP_FC_RD          11
-#define USB_OP_FC_WR          12
-
-typedef UINT8 tUSB_OP;
-
-
-/**** Serial feature types ****/
-#define USB_FEAT_PORT_1       0
-#define USB_FEAT_PORT_2       1
-#define USB_FEAT_PORT_3       2
-#define USB_FEAT_PORT_4       3
-#define USB_FEAT_BAUD_AUTO    4
-#define USB_FEAT_BAUD_300     5
-#define USB_FEAT_BAUD_600     6
-#define USB_FEAT_BAUD_1200    7
-#define USB_FEAT_BAUD_2400    8
-#define USB_FEAT_BAUD_9600    9
-#define USB_FEAT_BAUD_19200   10
-#define USB_FEAT_BAUD_57600   11
-#define USB_FEAT_BAUD_115200  12
-#define USB_FEAT_BAUD_230400  13
-#define USB_FEAT_BAUD_460800  14
-#define USB_FEAT_BAUD_921600  15
-#define USB_FEAT_STOPBITS_1   16
-#define USB_FEAT_STOPBITS_1_5 17
-#define USB_FEAT_STOPBITS_2   18
-#define USB_FEAT_PARITY_NONE  19
-#define USB_FEAT_PARITY_EVEN  20
-#define USB_FEAT_PARITY_ODD   21
-#define USB_FEAT_DATABITS_5   22
-#define USB_FEAT_DATABITS_6   23
-#define USB_FEAT_DATABITS_7   24
-#define USB_FEAT_DATABITS_8   25
-#define USB_FEAT_FC_NONE      26
-#define USB_FEAT_FC_HW        27
-#define USB_FEAT_FC_SW        28
-#define USB_FEAT_BUF_BYTE     29
-#define USB_FEAT_BUF_GKI      30
-#define USB_FEAT_SIG_RTS      31
-#define USB_FEAT_SIG_CTS      32
-#define USB_FEAT_SIG_DSR      33
-#define USB_FEAT_SIG_DTR      34
-#define USB_FEAT_SIG_RI       35
-#define USB_FEAT_SIG_CD       36
-#define USB_FEAT_OP_FLUSH     37
-#define USB_FEAT_OP_FLUSH_RX  38
-#define USB_FEAT_OP_FLUSH_TX  39
-#define USB_FEAT_OP_BREAK     40
-#define USB_FEAT_OP_BAUD_RD   41
-#define USB_FEAT_OP_BAUD_WR   42
-#define USB_FEAT_OP_FMT_RD    43
-#define USB_FEAT_OP_FMT_WR    44
-#define USB_FEAT_OP_SIG_RD    45
-#define USB_FEAT_OP_SIG_WR    46
-#define USB_FEAT_OP_FC_RD     47
-#define USB_FEAT_OP_FC_WR     48
-
-typedef UINT8 tUSB_FEATURE;
-
-
-/**** Event types ****/
-#define USB_RX_READY_EVT      0
-#define USB_TX_DONE_EVT       1
-#define USB_SIG_EVT           2
-#define USB_ERR_EVT           3
-
-typedef UINT8 tUSB_EVT;
-
-
-/* Structure used to configure serial port during open        */
-typedef struct
-{
-    UINT16 fmt;          /* Data format                       */
-    UINT8  baud;         /* Baud rate                         */
-    UINT8  fc;           /* Flow control                      */
-    UINT8  buf;          /* Data buffering mechanism          */
-    UINT8  pool;         /* GKI buffer pool for received data */
-    UINT16 size;         /* Size of GKI buffer pool           */
-    UINT16 offset;       /* Offset in GKI buffer pool         */
-} tUSB_OPEN_CFG;
-
-/* Union used to pass ioctl arguments */
-typedef union
-{
-    UINT16 fmt;
-    UINT8  baud;
-    UINT8  fc;
-    UINT8  sigs;
-} tUSB_IOCTL_DATA;
-
-
-/* Union to pass event data */
-typedef union
-{
-    UINT8 sigs;
-    UINT8 error;
-} tUSB_EVT_DATA;
-
-/* callback for events */
-typedef void (tUSB_CBACK)(tUSB_PORT, tUSB_EVT, tUSB_EVT_DATA *);
-
-
-/*******************************************************************************
-** Function Prototypes
-*******************************************************************************/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-UDRV_API extern void    USB_Init(void *);
-UDRV_API extern void    USB_Open(tUSB_PORT, tUSB_OPEN_CFG *, tUSB_CBACK *);
-UDRV_API extern void    USB_ReadBuf(tUSB_PORT, BT_HDR **);
-UDRV_API extern UINT16  USB_Read(tUSB_PORT, UINT8 *, UINT16);
-UDRV_API extern BOOLEAN USB_WriteBuf(tUSB_PORT, BT_HDR *);
-UDRV_API extern UINT16  USB_Write(tUSB_PORT, UINT8 *, UINT16);
-UDRV_API extern void    USB_Ioctl(tUSB_PORT, tUSB_OP, tUSB_IOCTL_DATA *);
-UDRV_API extern void    USB_Close(tUSB_PORT);
-UDRV_API extern BOOLEAN USB_Feature(tUSB_FEATURE);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USB_H */
diff --git a/src/udrv/include/utimer.h b/src/udrv/include/utimer.h
deleted file mode 100644
index a663ad7..0000000
--- a/src/udrv/include/utimer.h
+++ /dev/null
@@ -1,98 +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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This file contains timer definitions from WIDCOMM's Universal Embedded
- *  Drivers API.
- *
- ******************************************************************************/
-
-#ifndef UTIMER_H
-#define UTIMER_H
-
-/*******************************************************************************
-** Timer APIs
-*******************************************************************************/
-
-/**** Timer IDs ****/
-
-#define UTIMER_ID_1               0
-#define UTIMER_ID_2               1
-#define UTIMER_ID_3               2
-#define UTIMER_ID_4               3
-
-#define UTIMER_NUM_TIMERS         4     /* Number of timers supported */
-
-typedef UINT8 tUTIMER_ID;
-
-/**** Timer types ****/
-
-#define UTIMER_TYPE_PERIODIC      0
-#define UTIMER_TYPE_ONESHOT       1
-
-typedef UINT8 tUTIMER_TYPE;
-
-
-/**** Timer time ****/
-
-typedef UINT32 tUTIMER_TIME;
-
-
-/**** Timer configuration ****/
-
-typedef struct
-{
-    tUTIMER_TIME period;
-    tUTIMER_TYPE type;
-} tUTIMER_CFG;
-
-
-/**** Timer feature types ****/
-#define UTIMER_FEAT_ID_1          0
-#define UTIMER_FEAT_ID_2          1
-#define UTIMER_FEAT_ID_3          2
-#define UTIMER_FEAT_ID_4          3
-#define UTIMER_FEAT_TYPE_PERIODIC 4
-#define UTIMER_FEAT_TYPE_ONESHOT  5
-
-typedef UINT8 tUTIMER_FEATURE;
-
-
-/**** Callback for timer expiration ****/
-typedef void (tUTIMER_CBACK)(tUTIMER_ID);
-
-
-/*******************************************************************************
-** Function Prototypes
-*******************************************************************************/
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-UDRV_API extern void    UTIMER_Init(void *);
-UDRV_API extern void    UTIMER_Start(tUTIMER_ID, tUTIMER_CFG *, tUTIMER_CBACK *);
-UDRV_API extern void    UTIMER_Read(tUTIMER_ID, tUTIMER_TIME *);
-UDRV_API extern void    UTIMER_Stop(tUTIMER_ID);
-UDRV_API extern BOOLEAN UTIMER_Feature(tUTIMER_FEATURE);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* UTIMER_H */
diff --git a/src/udrv/include/uusb.h b/src/udrv/include/uusb.h
deleted file mode 100644
index 7a93920..0000000
--- a/src/udrv/include/uusb.h
+++ /dev/null
@@ -1,290 +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.
- *
- ******************************************************************************/
-
-/******************************************************************************
- *
- *  This file contains usb definitions from Widcomm's Universal Embedded
- *  Drivers API.
- *
- ******************************************************************************/
-
-#ifndef UUSB_H
-#define UUSB_H
-
-#include "bt_target.h"
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*******************************************************************************
-** Codec APIs
-*******************************************************************************/
-
-
-/**** Status ****/
-#define UUSB_SUCCESS                                  0
-#define UUSB_DRV_INVALID_PARM                         1   // Invalid parameter(s) passed to Driver
-#define UUSB_DRV_INVALID_STATE                        2   // Driver is not in correct state to accept
-#define UUSB_DRV_UNSUPPORTED_SETUP_REQ                3   // Unsupported SETUP request (use with tUSER_EP0_SETUP_CB)
-#define UUSB_DRV_NO_BUFFER_AVAILABLE                  4   // User cannot provide a Buffer (use with CB functions)
-
-typedef UINT8 tUUSB_STATUS;
-
-
-#define  UUSB_EP1   0
-#define  UUSB_EP2   1
-#define  UUSB_EP3   2
-#define  UUSB_EP4   3
-#define  UUSB_EP5   4
-#define  UUSB_EP6   5
-#define  UUSB_EP7   6
-
-typedef UINT8 tUUSB_EP_ID;
-
-typedef enum {
-  UUSB_EP_TYPE_CONTROL = 0,
-  UUSB_EP_TYPE_ISOCHRONOUS,
-  UUSB_EP_TYPE_BULK,
-  UUSB_EP_TYPE_INTERRUPT
-} tUUSB_EP_TYPE;
-
-typedef enum {
-  UUSB_DIR_OUT = 0,
-  UUSB_DIR_IN
-} tUUSB_EP_DIRECTION;
-
-typedef struct tUUSB_SETUP_PKTTag
-{
-/* Definition of "USBbmRequestType" */
-#define UUSB_DATA_PHASE_DIR      0x80    /* Mask to get data phase transfer direction */
-#define UUSB_HOST_TO_DEVICE      0x00    /* Data transfer directions */
-#define UUSB_DEVICE_TO_HOST      0x80    /* Data transfer directions */
-/* Types of requests */
-#define UUSB_REQUEST_TYPE       0x60    /* Mask to get request type */
-#define UUSB_STANDARD_REQUEST   0x00    /* Standard request */
-#define UUSB_CLASS_REQUEST      0x20    /* Class request */
-#define UUSB_VENDOR_REQUEST     0x40    /* Vendor request */
-  UINT8 bmRequestType;
-  UINT8 bRequest;
-  UINT16 wValue;
-  UINT16 wIndex;
-  UINT16 wLength;
-} tUUSB_SETUP_PKT;
-
-typedef union
-{
-#define UUSB_HEAD_SIZE (8)
-    UINT8           HeadBytes[UUSB_HEAD_SIZE];
-    tUUSB_SETUP_PKT Setup;
-} tSETUP_OR_HEAD;
-
-typedef struct
-{
-  UINT8        BufSize;
-  UINT8        NumBytesInBuf;
-  tSETUP_OR_HEAD Buf;
-} tUUSB_RX_HEAD;
-
-typedef enum
-{
-  UUSB_EP_DISABLE,
-  UUSB_EP_ENABLE,
-  UUSB_EP_STALL
-} tUUSB_EP_STATE;
-
-typedef UINT8 tEndPoint;
-
-#if 0
-#define  UUSB_ATTACHED      0
-#define  UUSB_POWERED       1
-#define  UUSB_DEFAULT       2
-#define  UUSB_ADDRESS       3
-#define  UUSB_CONFIGURED    4
-#define  UUSB_SUSPENDED     5
-
-typedef UINT8 tUUSB_BUS_STATE;
-#else
-typedef enum
-{
-  UUSB_ATTACHED,
-  UUSB_POWERED,
-  UUSB_DEFAULT,
-  UUSB_ADDRESS,
-  UUSB_CONFIGURED,
-  UUSB_SUSPENDED
-} tUUSB_BUS_STATE;
-#endif
-
-typedef enum _tUUSB_STANDART_REQ
-{
-    UUSB_GET_STATUS = 0,
-    UUSB_CLEAR_FEATURE,
-    UUSB_RESERVED1,
-    UUSB_SET_FEATURE,
-    UUSB_RESERVED2,
-    UUSB_SET_ADDRESS,
-    UUSB_GET_DESCRIPTOR,
-    UUSB_SET_DESCRIPTOR,
-    UUSB_GET_CONFIGURATION,
-    UUSB_SET_CONFIGURATION,
-    UUSB_GET_INTERFACE,
-    UUSB_SET_INTERFACE,
-    UUSB_TOTAL_sREQUEST,                /* Total number of Standard request */
-    UUSB_SYNCH_FRAME = 12
-} tUUSB_STANDART_REQ;
-
-
-typedef void (*tUUSB_STATE_CB)          (tUUSB_BUS_STATE State);
-typedef void (*tUUSB_PROT_COMPLETE_CB ) (UINT8 *pBuf,UINT16 NumBytesInBuf);
-
-typedef tUUSB_STATUS (*tUUSB_PROT_SETUP_CB ) (UINT8 **ppBuf,UINT16 *pBufSize);
-
-typedef void (*tUUSB_RX_START_CB )      (tUUSB_EP_ID EndPoint,
-                                        UINT8 **ppBuf,
-                                        UINT16 *pBufSize);
-
-typedef void (*tUUSB_RX_COMPLETE_CB )   (tUUSB_EP_ID EndPoint,
-                                        UINT8 *pRxBuf,
-                                        UINT16 NumBytesInBuf);
-
-typedef void (*tUUSB_TX_COMPLETE_CB )   (tUUSB_EP_ID EndPoint,
-                                        UINT8 *pRxBuf);
-/*******************************************************************************
-** Function Prototypes
-*******************************************************************************/
-
-/******************************************************************************
-**
-** Function         UCODEC_Init
-**
-** Description      Startup initialisation function. This function is called
-**                  before any orther function of UUSB it initialize UUSB
-**                  internal structure an the external hw.
-**
-**                  Input :
-**
-**                  Output Parameters :
-**
-** Returns          UUSB_SUCCESS if The action was performed with sucess.
-**                  Error code else.
-**
-******************************************************************************/
-BT_API extern tUUSB_STATUS    UUSB_Init    (tUUSB_PROT_SETUP_CB       userProtSetupCallBack,
-                                            tUUSB_PROT_COMPLETE_CB    userProtCompleteCallBack,
-                                            tUUSB_RX_START_CB         userRxStartCallBack,
-                                            tUUSB_STATE_CB            userStateCallBack,
-                                            tUUSB_TX_COMPLETE_CB      userTxCompleteCallBack,
-                                            tUUSB_RX_COMPLETE_CB      userRxCompleteCallBack);
-
-
-
-
-/******************************************************************************
-**
-** Function         UUSB_Start
-**
-** Description
-**
-**
-**
-**
-**
-** Returns          UUSB_SUCCESS if The action was performed with sucess.
-**
-******************************************************************************/
-BT_API extern tUUSB_STATUS    UUSB_Start  (void);
-
-/******************************************************************************
-**
-** Function         UUSB_Stop
-**
-** Description
-**
-**
-**
-**
-** Returns          UUSB_SUCCESS if The action was performed with sucess.
-**                  Error code else.
-**
-******************************************************************************/
-BT_API extern tUUSB_STATUS    UUSB_Stop      (void);
-
-/******************************************************************************
-**
-** Function         UUSB_SetEndPointCnf
-**
-** Description
-**
-**
-** Returns
-**
-******************************************************************************/
-BT_API extern tUUSB_STATUS    UUSB_SetEndPointCnf ( BOOLEAN         IsIN_EndPoint,
-                                                    tUUSB_EP_ID     EndPoint,
-                                                    UINT8           MaxPacketSize,
-                                                    tUUSB_EP_TYPE   EndPointType,
-                                                    tUUSB_RX_HEAD   *pRxHead,
-                                                    UINT16          RxTimeOut);
-
-
-/******************************************************************************
-**
-** Function         UUSB_SetEndPointState
-**
-** Description
-**
-**
-** Returns
-**
-******************************************************************************/
-BT_API extern tUUSB_STATUS UUSB_SetEndPointState (tUUSB_EP_ID    EndPoint,
-                                                    tUUSB_EP_STATE EndPointState);
-
-/******************************************************************************
-**
-** Function         UUSB_WriteEndPoint
-**
-** Description
-**
-**
-** Returns
-**
-******************************************************************************/
-BT_API extern tUUSB_STATUS UUSB_WriteEndPoint (tUUSB_EP_ID     EndPoint,
-                                                UINT16     Length,
-                                                UINT8*    pBuf);
-
-/******************************************************************************
-**
-** Function         UUSB_GenerateRemoteWakeUp
-**
-** Description
-**
-**
-** Returns
-**
-******************************************************************************/
-BT_API extern tUUSB_STATUS UUSB_GenerateRemoteWakeUp (void);
-
-#ifdef __cplusplus
-};
-#endif
-
-
-#endif /* UUSB_H */