1 /****************************************************************************** 2 * 3 * Copyright 2018-2021 NXP 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19 #if (NXP_EXTNS == TRUE) 20 #include <stdint.h> 21 #else 22 #include <unistd.h> 23 #endif 24 #include <string> 25 #ifndef NXP_FEATURES_H 26 #define NXP_FEATURES_H 27 28 #define STRMAX_2 100 29 #define FW_MOBILE_MAJOR_NUMBER_PN553 0x01 30 #define FW_MOBILE_MAJOR_NUMBER_PN551 0x05 31 #define FW_MOBILE_MAJOR_NUMBER_PN48AD 0x01 32 #define FW_MOBILE_MAJOR_NUMBER_PN81A 0x02 33 #define FW_MOBILE_MAJOR_NUMBER_PN557 0x01 34 #define FW_MOBILE_MAJOR_NUMBER_SN100U 0x010 35 #define FW_MOBILE_MAJOR_NUMBER_SN220U 0x01 36 37 /*Including T4T NFCEE by incrementing 1*/ 38 #define NFA_EE_MAX_EE_SUPPORTED 5 39 40 #define JCOP_VER_3_1 1 41 #define JCOP_VER_3_2 2 42 #define JCOP_VER_3_3 3 43 #define JCOP_VER_4_0 4 44 #define JCOP_VER_5_0 5 45 #ifndef FW_LIB_ROOT_DIR 46 #if (defined(__arm64__) || defined(__aarch64__) || defined(_M_ARM64)) 47 #define FW_LIB_ROOT_DIR "/vendor/lib64/" 48 #else 49 #define FW_LIB_ROOT_DIR "/vendor/lib/" 50 #endif 51 #endif 52 #ifndef FW_BIN_ROOT_DIR 53 #define FW_BIN_ROOT_DIR "/vendor/firmware/" 54 #endif 55 #ifndef FW_LIB_EXTENSION 56 #define FW_LIB_EXTENSION ".so" 57 #endif 58 #ifndef FW_BIN_EXTENSION 59 #define FW_BIN_EXTENSION ".bin" 60 #endif 61 using namespace std; 62 typedef enum { 63 NFCC_DWNLD_WITH_VEN_RESET, 64 NFCC_DWNLD_WITH_NCI_CMD 65 } tNFCC_DnldType; 66 67 typedef enum { 68 DEFAULT_CHIP_TYPE = 0x00, 69 pn547C2 = 0x01, 70 pn65T, 71 pn548C2, 72 pn66T, 73 pn551, 74 pn67T, 75 pn553, 76 pn80T, 77 pn557, 78 pn81T, 79 sn100u, 80 sn220u 81 } tNFC_chipType; 82 83 typedef struct { 84 /*Flags common to all chip types*/ 85 uint8_t _NXP_NFCC_EMPTY_DATA_PACKET : 1; 86 uint8_t _GEMALTO_SE_SUPPORT : 1; 87 uint8_t _NFCC_I2C_READ_WRITE_IMPROVEMENT : 1; 88 uint8_t _NFCC_MIFARE_TIANJIN : 1; 89 uint8_t _NFCC_MW_RCVRY_BLK_FW_DNLD : 1; 90 uint8_t _NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH : 1; 91 uint8_t _NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH : 1; 92 uint8_t _NFCC_FW_WA : 1; 93 uint8_t _NFCC_FORCE_NCI1_0_INIT : 1; 94 uint8_t _NFCC_ROUTING_BLOCK_BIT : 1; 95 uint8_t _NFCC_SPI_FW_DOWNLOAD_SYNC : 1; 96 uint8_t _HW_ANTENNA_LOOP4_SELF_TEST : 1; 97 uint8_t _NFCEE_REMOVED_NTF_RECOVERY : 1; 98 uint8_t _NFCC_FORCE_FW_DOWNLOAD : 1; 99 uint8_t _UICC_CREATE_CONNECTIVITY_PIPE : 1; 100 uint8_t _NFCC_AID_MATCHING_PLATFORM_CONFIG : 1; 101 uint8_t _NFCC_ROUTING_BLOCK_BIT_PROP : 1; 102 uint8_t _NXP_NFC_UICC_ETSI12 : 1; 103 uint8_t _NFA_EE_MAX_EE_SUPPORTED : 3; 104 uint8_t _NFCC_DWNLD_MODE : 1; 105 } tNfc_nfccFeatureList; 106 107 typedef struct { 108 uint8_t _ESE_EXCLUSIVE_WIRED_MODE : 2; 109 uint8_t _ESE_WIRED_MODE_RESUME : 2; 110 uint8_t _ESE_WIRED_MODE_TIMEOUT : 2; 111 uint8_t _ESE_UICC_DUAL_MODE : 2; 112 uint8_t _ESE_PN67T_RESET : 2; 113 uint8_t _ESE_APDU_GATE_RESET : 2; 114 uint8_t _ESE_WIRED_MODE_DISABLE_DISCOVERY : 1; 115 uint8_t _LEGACY_APDU_GATE : 1; 116 uint8_t _TRIPLE_MODE_PROTECTION : 1; 117 uint8_t _ESE_FELICA_CLT : 1; 118 uint8_t _WIRED_MODE_STANDBY_PROP : 1; 119 uint8_t _WIRED_MODE_STANDBY : 1; 120 uint8_t _ESE_DUAL_MODE_PRIO_SCHEME : 2; 121 uint8_t _ESE_FORCE_ENABLE : 1; 122 uint8_t _ESE_RESET_METHOD : 1; 123 uint8_t _EXCLUDE_NV_MEM_DEPENDENCY : 1; 124 uint8_t _ESE_ETSI_READER_ENABLE : 1; 125 uint8_t _ESE_SVDD_SYNC : 1; 126 uint8_t _NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION : 1; 127 uint8_t _ESE_JCOP_DWNLD_PROTECTION : 1; 128 uint8_t _UICC_HANDLE_CLEAR_ALL_PIPES : 1; 129 uint8_t _GP_CONTINUOUS_PROCESSING : 1; 130 uint8_t _ESE_DWP_SPI_SYNC_ENABLE : 1; 131 uint8_t _ESE_ETSI12_PROP_INIT : 1; 132 uint8_t _ESE_WIRED_MODE_PRIO : 1; 133 uint8_t _ESE_UICC_EXCLUSIVE_WIRED_MODE : 1; 134 uint8_t _ESE_POWER_MODE : 1; 135 uint8_t _ESE_P73_ISO_RST : 1; 136 uint8_t _BLOCK_PROPRIETARY_APDU_GATE : 1; 137 uint8_t _JCOP_WA_ENABLE : 1; 138 uint8_t _NXP_LDR_SVC_VER_2 : 1; 139 uint8_t _NXP_ESE_VER : 3; 140 uint8_t _NXP_ESE_JCOP_OSU_UAI_ENABLED : 1; 141 uint8_t _NCI_NFCEE_PWR_LINK_CMD : 1; 142 } tNfc_eseFeatureList; 143 typedef struct { 144 uint8_t _NFCC_RESET_RSP_LEN; 145 } tNfc_platformFeatureList; 146 147 typedef struct { 148 uint8_t _NCI_INTERFACE_UICC_DIRECT; 149 uint8_t _NCI_INTERFACE_ESE_DIRECT; 150 uint8_t _NCI_PWR_LINK_PARAM_CMD_SIZE; 151 uint8_t _NCI_EE_PWR_LINK_ALWAYS_ON; 152 uint8_t _NFA_EE_MAX_AID_ENTRIES; 153 uint8_t _NFC_NXP_AID_MAX_SIZE_DYN : 1; 154 } tNfc_nfcMwFeatureList; 155 156 typedef struct { 157 uint8_t nfcNxpEse : 1; 158 tNFC_chipType chipType; 159 std::string _FW_LIB_PATH; 160 std::string _PLATFORM_LIB_PATH; 161 std::string _PKU_LIB_PATH; 162 std::string _FW_BIN_PATH; 163 uint16_t _PHDNLDNFC_USERDATA_EEPROM_OFFSET; 164 uint16_t _PHDNLDNFC_USERDATA_EEPROM_LEN; 165 uint8_t _FW_MOBILE_MAJOR_NUMBER; 166 tNfc_nfccFeatureList nfccFL; 167 tNfc_eseFeatureList eseFL; 168 tNfc_platformFeatureList platformFL; 169 tNfc_nfcMwFeatureList nfcMwFL; 170 } tNfc_featureList; 171 172 extern tNfc_featureList nfcFL; 173 174 #define CONFIGURE_FEATURELIST(chipType) \ 175 { \ 176 nfcFL.chipType = chipType; \ 177 if (chipType == pn81T) { \ 178 nfcFL.chipType = pn557; \ 179 } else if (chipType == pn80T) { \ 180 nfcFL.chipType = pn553; \ 181 } else if (chipType == pn67T) { \ 182 nfcFL.chipType = pn551; \ 183 } else if (chipType == pn66T) { \ 184 nfcFL.chipType = pn548C2; \ 185 } else if (chipType == pn65T) { \ 186 nfcFL.chipType = pn547C2; \ 187 } \ 188 if ((chipType == pn65T) || (chipType == pn66T) || (chipType == pn67T) || \ 189 (chipType == pn80T) || (chipType == pn81T) || (chipType == sn100u) || \ 190 (chipType == sn220u)) { \ 191 nfcFL.nfcNxpEse = true; \ 192 CONFIGURE_FEATURELIST_NFCC_WITH_ESE(chipType) \ 193 } else { \ 194 nfcFL.nfcNxpEse = false; \ 195 CONFIGURE_FEATURELIST_NFCC(chipType) \ 196 } \ 197 } 198 199 #define CONFIGURE_FEATURELIST_NFCC_WITH_ESE(chipType) \ 200 { \ 201 nfcFL.nfccFL._NXP_NFCC_EMPTY_DATA_PACKET = true; \ 202 nfcFL.nfccFL._GEMALTO_SE_SUPPORT = true; \ 203 \ 204 nfcFL.eseFL._ESE_EXCLUSIVE_WIRED_MODE = 1; \ 205 nfcFL.eseFL._ESE_WIRED_MODE_RESUME = 2; \ 206 nfcFL.eseFL._ESE_PN67T_RESET = 1; \ 207 nfcFL.eseFL._ESE_APDU_GATE_RESET = 2; \ 208 nfcFL.eseFL._NXP_ESE_VER = JCOP_VER_4_0; \ 209 nfcFL.eseFL._NXP_LDR_SVC_VER_2 = true; \ 210 nfcFL.eseFL._NXP_ESE_JCOP_OSU_UAI_ENABLED = false; \ 211 \ 212 nfcFL.eseFL._NCI_NFCEE_PWR_LINK_CMD = false; \ 213 nfcFL.nfcMwFL._NFC_NXP_AID_MAX_SIZE_DYN = true; \ 214 if (chipType == sn100u) { \ 215 CONFIGURE_FEATURELIST_NFCC(sn100u) \ 216 nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true; \ 217 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 5; \ 218 \ 219 nfcFL.eseFL._NCI_NFCEE_PWR_LINK_CMD = true; \ 220 nfcFL.eseFL._NXP_ESE_JCOP_OSU_UAI_ENABLED = true; \ 221 nfcFL.eseFL._ESE_FELICA_CLT = true; \ 222 nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME = \ 223 nfcFL.eseFL._ESE_UICC_DUAL_MODE; \ 224 nfcFL.eseFL._ESE_RESET_METHOD = true; \ 225 nfcFL.eseFL._ESE_POWER_MODE = false; \ 226 nfcFL.eseFL._ESE_P73_ISO_RST = true; \ 227 nfcFL.eseFL._WIRED_MODE_STANDBY = false; \ 228 nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true; \ 229 nfcFL.eseFL._ESE_SVDD_SYNC = false; \ 230 nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = true; \ 231 nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = true; \ 232 nfcFL.eseFL._GP_CONTINUOUS_PROCESSING = false; \ 233 nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = false; \ 234 nfcFL.eseFL._ESE_ETSI12_PROP_INIT = false; \ 235 nfcFL.eseFL._BLOCK_PROPRIETARY_APDU_GATE = false; \ 236 nfcFL.eseFL._LEGACY_APDU_GATE = true; \ 237 } \ 238 if (chipType == sn220u) { \ 239 CONFIGURE_FEATURELIST_NFCC(sn220u) \ 240 nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true; \ 241 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 4; \ 242 \ 243 nfcFL.eseFL._NCI_NFCEE_PWR_LINK_CMD = true; \ 244 nfcFL.eseFL._NXP_ESE_JCOP_OSU_UAI_ENABLED = true; \ 245 nfcFL.eseFL._ESE_FELICA_CLT = true; \ 246 nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME = \ 247 nfcFL.eseFL._ESE_UICC_DUAL_MODE; \ 248 nfcFL.eseFL._ESE_RESET_METHOD = true; \ 249 nfcFL.eseFL._ESE_POWER_MODE = false; \ 250 nfcFL.eseFL._ESE_P73_ISO_RST = true; \ 251 nfcFL.eseFL._WIRED_MODE_STANDBY = false; \ 252 nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true; \ 253 nfcFL.eseFL._ESE_SVDD_SYNC = false; \ 254 nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = true; \ 255 nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = true; \ 256 nfcFL.eseFL._GP_CONTINUOUS_PROCESSING = false; \ 257 nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = false; \ 258 nfcFL.eseFL._ESE_ETSI12_PROP_INIT = false; \ 259 nfcFL.eseFL._BLOCK_PROPRIETARY_APDU_GATE = false; \ 260 nfcFL.eseFL._LEGACY_APDU_GATE = true; \ 261 } \ 262 if (chipType == pn81T) { \ 263 CONFIGURE_FEATURELIST_NFCC(pn557) \ 264 nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true; \ 265 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 4; \ 266 \ 267 nfcFL.eseFL._ESE_FELICA_CLT = true; \ 268 nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME = \ 269 nfcFL.eseFL._ESE_WIRED_MODE_RESUME; \ 270 nfcFL.eseFL._ESE_RESET_METHOD = true; \ 271 nfcFL.eseFL._ESE_POWER_MODE = true; \ 272 nfcFL.eseFL._ESE_P73_ISO_RST = true; \ 273 nfcFL.eseFL._WIRED_MODE_STANDBY = true; \ 274 nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true; \ 275 nfcFL.eseFL._ESE_SVDD_SYNC = true; \ 276 nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = true; \ 277 nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = true; \ 278 nfcFL.eseFL._GP_CONTINUOUS_PROCESSING = false; \ 279 nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true; \ 280 nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true; \ 281 } \ 282 if (chipType == pn80T) { \ 283 CONFIGURE_FEATURELIST_NFCC(pn553) \ 284 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 4; \ 285 \ 286 nfcFL.eseFL._ESE_FELICA_CLT = true; \ 287 nfcFL.eseFL._WIRED_MODE_STANDBY = true; \ 288 nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME = \ 289 nfcFL.eseFL._ESE_WIRED_MODE_RESUME; \ 290 nfcFL.eseFL._ESE_RESET_METHOD = true; \ 291 nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true; \ 292 nfcFL.eseFL._ESE_SVDD_SYNC = true; \ 293 nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = true; \ 294 nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = true; \ 295 nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true; \ 296 nfcFL.eseFL._ESE_POWER_MODE = true; \ 297 nfcFL.eseFL._ESE_P73_ISO_RST = true; \ 298 \ 299 nfcFL.nfcMwFL._NCI_PWR_LINK_PARAM_CMD_SIZE = 0x02; \ 300 nfcFL.nfcMwFL._NCI_EE_PWR_LINK_ALWAYS_ON = 0x01; \ 301 } else if (chipType == pn67T) { \ 302 CONFIGURE_FEATURELIST_NFCC(pn551) \ 303 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3; \ 304 \ 305 nfcFL.eseFL._TRIPLE_MODE_PROTECTION = true; \ 306 nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = true; \ 307 nfcFL.eseFL._ESE_FORCE_ENABLE = true; \ 308 nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true; \ 309 nfcFL.eseFL._ESE_SVDD_SYNC = true; \ 310 nfcFL.eseFL._LEGACY_APDU_GATE = true; \ 311 nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = true; \ 312 nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true; \ 313 nfcFL.eseFL._NXP_ESE_VER = JCOP_VER_3_3; \ 314 } else if (chipType == pn66T) { \ 315 CONFIGURE_FEATURELIST_NFCC(pn548C2) \ 316 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3; \ 317 \ 318 nfcFL.eseFL._TRIPLE_MODE_PROTECTION = true; \ 319 nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = true; \ 320 nfcFL.eseFL._ESE_FORCE_ENABLE = true; \ 321 nfcFL.eseFL._ESE_ETSI_READER_ENABLE = true; \ 322 nfcFL.eseFL._ESE_SVDD_SYNC = true; \ 323 nfcFL.eseFL._LEGACY_APDU_GATE = true; \ 324 nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = true; \ 325 nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = true; \ 326 nfcFL.eseFL._NXP_ESE_VER = JCOP_VER_3_3; \ 327 } else if (chipType == pn65T) { \ 328 CONFIGURE_FEATURELIST_NFCC(pn547C2) \ 329 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3; \ 330 nfcFL.eseFL._ESE_WIRED_MODE_DISABLE_DISCOVERY = true; \ 331 nfcFL.eseFL._LEGACY_APDU_GATE = true; \ 332 } \ 333 } 334 335 #define CONFIGURE_FEATURELIST_NFCC(chipType) \ 336 { \ 337 nfcFL.eseFL._ESE_WIRED_MODE_TIMEOUT = 3; \ 338 nfcFL.eseFL._ESE_UICC_DUAL_MODE = 0; \ 339 nfcFL.eseFL._ESE_WIRED_MODE_DISABLE_DISCOVERY = false; \ 340 nfcFL.eseFL._LEGACY_APDU_GATE = false; \ 341 nfcFL.eseFL._TRIPLE_MODE_PROTECTION = false; \ 342 nfcFL.eseFL._ESE_FELICA_CLT = false; \ 343 nfcFL.eseFL._WIRED_MODE_STANDBY_PROP = false; \ 344 nfcFL.eseFL._WIRED_MODE_STANDBY = false; \ 345 nfcFL.eseFL._ESE_DUAL_MODE_PRIO_SCHEME = \ 346 nfcFL.eseFL._ESE_WIRED_MODE_TIMEOUT; \ 347 nfcFL.eseFL._ESE_FORCE_ENABLE = false; \ 348 nfcFL.eseFL._ESE_RESET_METHOD = false; \ 349 nfcFL.eseFL._ESE_ETSI_READER_ENABLE = false; \ 350 nfcFL.eseFL._ESE_SVDD_SYNC = false; \ 351 nfcFL.eseFL._NFCC_ESE_UICC_CONCURRENT_ACCESS_PROTECTION = false; \ 352 nfcFL.eseFL._ESE_JCOP_DWNLD_PROTECTION = false; \ 353 nfcFL.eseFL._UICC_HANDLE_CLEAR_ALL_PIPES = false; \ 354 nfcFL.eseFL._GP_CONTINUOUS_PROCESSING = false; \ 355 nfcFL.eseFL._ESE_DWP_SPI_SYNC_ENABLE = false; \ 356 nfcFL.eseFL._ESE_ETSI12_PROP_INIT = false; \ 357 nfcFL.eseFL._ESE_WIRED_MODE_PRIO = false; \ 358 nfcFL.eseFL._ESE_UICC_EXCLUSIVE_WIRED_MODE = false; \ 359 nfcFL.eseFL._ESE_POWER_MODE = false; \ 360 nfcFL.eseFL._ESE_P73_ISO_RST = false; \ 361 nfcFL.eseFL._BLOCK_PROPRIETARY_APDU_GATE = false; \ 362 nfcFL.eseFL._JCOP_WA_ENABLE = true; \ 363 nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = false; \ 364 nfcFL.nfccFL._NXP_NFC_UICC_ETSI12 = false; \ 365 nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false; \ 366 \ 367 nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0; \ 368 \ 369 nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x00; \ 370 nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x00; \ 371 nfcFL.nfcMwFL._NCI_PWR_LINK_PARAM_CMD_SIZE = 0x02; \ 372 nfcFL.nfcMwFL._NCI_EE_PWR_LINK_ALWAYS_ON = 0x01; \ 373 nfcFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x023CU; \ 374 nfcFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C80U; \ 375 nfcFL._FW_MOBILE_MAJOR_NUMBER = FW_MOBILE_MAJOR_NUMBER_PN48AD; \ 376 nfcFL.nfccFL._NFCC_DWNLD_MODE = NFCC_DWNLD_WITH_VEN_RESET; \ 377 \ 378 if (chipType == sn220u) { \ 379 nfcFL.nfccFL._NFCC_DWNLD_MODE = NFCC_DWNLD_WITH_NCI_CMD; \ 380 nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true; \ 381 nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = false; \ 382 nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = true; \ 383 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false; \ 384 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false; \ 385 nfcFL.nfccFL._NFCC_FW_WA = true; \ 386 nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false; \ 387 nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true; \ 388 nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = false; \ 389 nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true; \ 390 nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = true; \ 391 nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = true; \ 392 nfcFL.nfccFL._NXP_NFC_UICC_ETSI12 = false; \ 393 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3; \ 394 nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = false; \ 395 nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = false; \ 396 \ 397 nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true; \ 398 nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = true; \ 399 \ 400 nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x10U; \ 401 \ 402 nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82; \ 403 nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83; \ 404 nfcFL._FW_MOBILE_MAJOR_NUMBER = FW_MOBILE_MAJOR_NUMBER_SN220U; \ 405 SRTCPY_FW("libsn220u_fw", "libsn220u_fw_platform", "libsn220u_fw_pku") \ 406 STRCPY_FW_BIN("sn220u") \ 407 } \ 408 if (chipType == sn100u) { \ 409 nfcFL.nfccFL._NFCC_DWNLD_MODE = NFCC_DWNLD_WITH_NCI_CMD; \ 410 nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true; \ 411 nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = false; \ 412 nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = true; \ 413 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false; \ 414 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false; \ 415 nfcFL.nfccFL._NFCC_FW_WA = true; \ 416 nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false; \ 417 nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true; \ 418 nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = false; \ 419 nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true; \ 420 nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = true; \ 421 nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = true; \ 422 nfcFL.nfccFL._NXP_NFC_UICC_ETSI12 = false; \ 423 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3; \ 424 nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = false; \ 425 nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = false; \ 426 \ 427 nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true; \ 428 nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = true; \ 429 \ 430 nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x10U; \ 431 \ 432 nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82; \ 433 nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83; \ 434 nfcFL._FW_MOBILE_MAJOR_NUMBER = FW_MOBILE_MAJOR_NUMBER_SN100U; \ 435 SRTCPY_FW("libsn100u_fw", "libsn100u_fw_platform", "libsn100u_fw_pku") \ 436 STRCPY_FW_BIN("sn100u") \ 437 } \ 438 if (chipType == pn557) { \ 439 nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true; \ 440 nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = false; \ 441 nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = true; \ 442 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false; \ 443 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = true; \ 444 nfcFL.nfccFL._NFCC_FW_WA = true; \ 445 nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false; \ 446 nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true; \ 447 nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = false; \ 448 nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true; \ 449 nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = true; \ 450 nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = true; \ 451 nfcFL.nfccFL._NXP_NFC_UICC_ETSI12 = false; \ 452 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3; \ 453 \ 454 nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true; \ 455 nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = true; \ 456 \ 457 nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x10U; \ 458 \ 459 nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82; \ 460 nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83; \ 461 \ 462 SRTCPY_FW("libpn557_fw", "libpn557_fw_platform", "libpn557_fw_pku") \ 463 STRCPY_FW_BIN("pn557") \ 464 } else if (chipType == pn553) { \ 465 nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true; \ 466 nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = false; \ 467 nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = true; \ 468 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = true; \ 469 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = true; \ 470 nfcFL.nfccFL._NFCC_FW_WA = true; \ 471 nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = true; \ 472 nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = true; \ 473 nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = true; \ 474 nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = false; \ 475 nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true; \ 476 nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = true; \ 477 nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = true; \ 478 nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = false; \ 479 nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = false; \ 480 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 3; \ 481 \ 482 nfcFL.eseFL._ESE_ETSI12_PROP_INIT = true; \ 483 nfcFL.eseFL._JCOP_WA_ENABLE = false; \ 484 nfcFL.eseFL._EXCLUDE_NV_MEM_DEPENDENCY = true; \ 485 \ 486 nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x10U; \ 487 \ 488 nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82; \ 489 nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83; \ 490 \ 491 SRTCPY_FW("libpn553tc_fw", "libpn553tc_fw_platform", \ 492 "libpn553tc_fw_pku") \ 493 STRCPY_FW_BIN("pn553") \ 494 nfcFL._FW_MOBILE_MAJOR_NUMBER = FW_MOBILE_MAJOR_NUMBER_PN553; \ 495 \ 496 } else if (chipType == pn551) { \ 497 nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true; \ 498 nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true; \ 499 nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false; \ 500 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = true; \ 501 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false; \ 502 nfcFL.nfccFL._NFCC_FW_WA = false; \ 503 nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false; \ 504 nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false; \ 505 nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false; \ 506 nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true; \ 507 nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true; \ 508 nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false; \ 509 nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false; \ 510 nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true; \ 511 nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = true; \ 512 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2; \ 513 \ 514 nfcFL.eseFL._ESE_FORCE_ENABLE = true; \ 515 \ 516 nfcFL.platformFL._NFCC_RESET_RSP_LEN = 0x11U; \ 517 \ 518 nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82; \ 519 nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83; \ 520 \ 521 SRTCPY_FW("libpn551_fw", "libpn551_fw_platform", "libpn551_fw_pku") \ 522 \ 523 STRCPY_FW_BIN("pn551") \ 524 nfcFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x02BCU; \ 525 nfcFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C00U; \ 526 nfcFL._FW_MOBILE_MAJOR_NUMBER = FW_MOBILE_MAJOR_NUMBER_PN551; \ 527 \ 528 } else if (chipType == pn548C2) { \ 529 nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = true; \ 530 nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true; \ 531 nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false; \ 532 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = true; \ 533 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false; \ 534 nfcFL.nfccFL._NFCC_FW_WA = false; \ 535 nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false; \ 536 nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false; \ 537 nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false; \ 538 nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true; \ 539 nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true; \ 540 nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false; \ 541 nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false; \ 542 nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true; \ 543 nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = true; \ 544 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2; \ 545 \ 546 nfcFL.eseFL._ESE_FORCE_ENABLE = true; \ 547 \ 548 nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x82; \ 549 nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x83; \ 550 \ 551 SRTCPY_FW("libpn548ad_fw", "libpn548ad_fw_platform", \ 552 "libpn548ad_fw_pku") \ 553 \ 554 nfcFL._PHDNLDNFC_USERDATA_EEPROM_OFFSET = 0x02BCU; \ 555 nfcFL._PHDNLDNFC_USERDATA_EEPROM_LEN = 0x0C00U; \ 556 \ 557 } else if (chipType == pn547C2) { \ 558 nfcFL.nfccFL._NFCC_I2C_READ_WRITE_IMPROVEMENT = false; \ 559 nfcFL.nfccFL._NFCC_MIFARE_TIANJIN = true; \ 560 nfcFL.nfccFL._NFCC_MW_RCVRY_BLK_FW_DNLD = false; \ 561 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_EXT_SWITCH = false; \ 562 nfcFL.nfccFL._NFC_NXP_STAT_DUAL_UICC_WO_EXT_SWITCH = false; \ 563 nfcFL.nfccFL._NFCC_FW_WA = false; \ 564 nfcFL.nfccFL._NFCC_FORCE_NCI1_0_INIT = false; \ 565 nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT = false; \ 566 nfcFL.nfccFL._NFCC_SPI_FW_DOWNLOAD_SYNC = false; \ 567 nfcFL.nfccFL._HW_ANTENNA_LOOP4_SELF_TEST = true; \ 568 nfcFL.nfccFL._NFCEE_REMOVED_NTF_RECOVERY = true; \ 569 nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = false; \ 570 nfcFL.nfccFL._UICC_CREATE_CONNECTIVITY_PIPE = false; \ 571 nfcFL.nfccFL._NFCC_AID_MATCHING_PLATFORM_CONFIG = true; \ 572 nfcFL.nfccFL._NFCC_ROUTING_BLOCK_BIT_PROP = false; \ 573 nfcFL.nfccFL._NFA_EE_MAX_EE_SUPPORTED = 2; \ 574 \ 575 nfcFL.nfcMwFL._NCI_INTERFACE_UICC_DIRECT = 0x81; \ 576 nfcFL.nfcMwFL._NCI_INTERFACE_ESE_DIRECT = 0x82; \ 577 \ 578 SRTCPY_FW("libpn547_fw", "libpn547_fw_platform", "libpn547_fw_pku") \ 579 \ 580 } else if (chipType == DEFAULT_CHIP_TYPE) { \ 581 nfcFL.nfccFL._NFCC_FORCE_FW_DOWNLOAD = true; \ 582 } \ 583 } 584 #define STRCPY_FW_BIN(str) \ 585 { \ 586 nfcFL._FW_BIN_PATH.clear(); \ 587 nfcFL._FW_BIN_PATH.append(FW_BIN_ROOT_DIR); \ 588 nfcFL._FW_BIN_PATH.append(str); \ 589 nfcFL._FW_BIN_PATH.append(FW_BIN_EXTENSION); \ 590 } 591 #define SRTCPY_FW(str1, str2, str3) \ 592 { \ 593 nfcFL._FW_LIB_PATH.clear(); \ 594 nfcFL._FW_LIB_PATH.append(FW_LIB_ROOT_DIR); \ 595 nfcFL._FW_LIB_PATH.append(str1); \ 596 nfcFL._FW_LIB_PATH.append(FW_LIB_EXTENSION); \ 597 nfcFL._PLATFORM_LIB_PATH.clear(); \ 598 nfcFL._PLATFORM_LIB_PATH.append(FW_LIB_ROOT_DIR); \ 599 nfcFL._PLATFORM_LIB_PATH.append(str2); \ 600 nfcFL._PLATFORM_LIB_PATH.append(FW_LIB_EXTENSION); \ 601 nfcFL._PKU_LIB_PATH.clear(); \ 602 nfcFL._PKU_LIB_PATH.append(FW_LIB_ROOT_DIR); \ 603 nfcFL._PKU_LIB_PATH.append(str3); \ 604 nfcFL._PKU_LIB_PATH.append(FW_LIB_EXTENSION); \ 605 } 606 #endif 607