• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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