Merge 77f5e56399bc82e07feb59618b4fbfa7c49a2ea8 on remote branch

Change-Id: Ifb56b0a940032af3e3fadec2ee4b2da4eb65ad99
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..db3b79d 100644
--- a/halimpl/pn54x/libnfc-nxp-PN557_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN557_example.conf
@@ -17,7 +17,7 @@
 
 ###############################################################################
 # Nfc Device Node name
-NXP_NFC_DEV_NODE="/dev/pn553"
+NXP_NFC_DEV_NODE="/dev/nq-nci"
 
 ###############################################################################
 # Extension for Mifare reader enable
@@ -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
@@ -446,4 +450,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-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..66948fd 100644
--- a/halimpl/pn54x/libnfc-nxp-PN81T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN81T_example.conf
@@ -17,7 +17,7 @@
 
 ###############################################################################
 # Nfc Device Node name
-NXP_NFC_DEV_NODE="/dev/pn553"
+NXP_NFC_DEV_NODE="/dev/nq-nci"
 
 ###############################################################################
 # Extension for Mifare reader enable
@@ -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..acfe888 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]);
@@ -349,7 +353,6 @@
             config_id = CONFIG_GENERIC;
             break;
         case TARGET_MSM8952:
-        case TARGET_MSM8909:
             config_id = QRD_TYPE_DEFAULT;
             strlcpy(config_file, config_name_qrd, MAX_DATA_CONFIG_PATH_LEN);
             break;
@@ -357,7 +360,8 @@
         case TARGET_MSM8937:
         case TARGET_MSM8917:
         case TARGET_MSM8940:
-            if ((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX))) {
+        case TARGET_MSM8909:
+            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,8 @@
         case TARGET_MSM8937:
         case TARGET_MSM8917:
         case TARGET_MSM8940:
-            if ((!strncmp(nq_chipid, NQ220, PROPERTY_VALUE_MAX)) || (!strncmp(nq_chipid, NQ210, PROPERTY_VALUE_MAX))) {
+        case TARGET_MSM8909:
+            if (nq2xx_present) {
                 // NQ210 or NQ220
                 config_id = MTP_TYPE_DEFAULT;
                 strlcpy(config_file, config_name_mtp, MAX_DATA_CONFIG_PATH_LEN);
@@ -434,7 +439,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 +1067,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 */