Redefining NXP_DEFAULT_SE to support  combinations of secure elements
diff --git a/halimpl/pn54x/hal/phNxpNciHal.c b/halimpl/pn54x/hal/phNxpNciHal.c
index 111aec8..f11d46b 100644
--- a/halimpl/pn54x/hal/phNxpNciHal.c
+++ b/halimpl/pn54x/hal/phNxpNciHal.c
@@ -2522,6 +2522,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)))) {
@@ -2529,6 +2530,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);
@@ -2553,21 +2560,21 @@
     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;
diff --git a/halimpl/pn54x/libnfc-nxp-PN80T_example.conf b/halimpl/pn54x/libnfc-nxp-PN80T_example.conf
index 6b41827..a5392dc 100644
--- a/halimpl/pn54x/libnfc-nxp-PN80T_example.conf
+++ b/halimpl/pn54x/libnfc-nxp-PN80T_example.conf
@@ -118,6 +118,12 @@
 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
diff --git a/halimpl/pn54x/utils/phNxpConfig.cpp b/halimpl/pn54x/utils/phNxpConfig.cpp
index 5bb57ae..2908bca 100644
--- a/halimpl/pn54x/utils/phNxpConfig.cpp
+++ b/halimpl/pn54x/utils/phNxpConfig.cpp
@@ -703,6 +703,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 3c9714e..fcb1f25 100644
--- a/halimpl/pn54x/utils/phNxpConfig.h
+++ b/halimpl/pn54x/utils/phNxpConfig.h
@@ -105,7 +105,7 @@
 #define NAME_NXP_PROP_BLACKLIST_ROUTING "NXP_PROP_BLACKLIST_ROUTING"
 #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"
+#define NAME_NXP_ESE_LISTEN_TECH_MASK "NXP_ESE_LISTEN_TECH_MASK"
 #define NAME_NXP_SVDD_SYNC_OFF_DELAY "NXP_SVDD_SYNC_OFF_DELAY"
 #define NAME_NXP_CORE_PROP_SYSTEM_DEBUG    "NXP_CORE_PROP_SYSTEM_DEBUG"
 
diff --git a/src/adaptation/config.cpp b/src/adaptation/config.cpp
index 5f2cb3d..c3fb02b 100644
--- a/src/adaptation/config.cpp
+++ b/src/adaptation/config.cpp
@@ -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/include/config.h b/src/include/config.h
index 2e6cf2f..40185cc 100644
--- a/src/include/config.h
+++ b/src/include/config.h
@@ -101,6 +101,7 @@
 #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
 #define NAME_DEFAULT_OFFHOST_ROUTE "DEFAULT_OFFHOST_ROUTE"
 #define NAME_SNOOZE_MODE_CFG "SNOOZE_MODE_CFG"
@@ -130,6 +131,7 @@
 #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"
diff --git a/src/nfa/dm/nfa_dm_discover.c b/src/nfa/dm/nfa_dm_discover.c
index 823d877..13593eb 100644
--- a/src/nfa/dm/nfa_dm_discover.c
+++ b/src/nfa/dm/nfa_dm_discover.c
@@ -1153,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");
@@ -1304,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__,
@@ -1356,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);