nfc_brcm_defs.h revision a24be4f06674b2707b57904deaa0dff5a95823bd
1/******************************************************************************
2 *
3 *  Copyright (C) 2012-2014 Broadcom Corporation
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
20/******************************************************************************
21 *
22 *  This file contains the Broadcom-specific defintions that are shared
23 *  between HAL, nfc stack, adaptation layer and applications.
24 *
25 ******************************************************************************/
26
27#ifndef NFC_BRCM_DEFS_H
28#define NFC_BRCM_DEFS_H
29
30/*****************************************************************************
31** Broadcom HW ID definitions
32*****************************************************************************/
33#define BRCM_20791B3_ID             0x20791b03
34#define BRCM_20791B4_ID             0x20791b04
35#define BRCM_20791B5_ID             0x20791b05
36#define BRCM_43341B0_ID             0x43341b00
37#define BRCM_20795T1_ID             0x20795a01
38#define BRCM_20795A0_ID             0x20795a00
39
40#define BRCM_NFC_GEN_MASK           0xFFFFF000  /* HW generation mask */
41#define BRCM_NFC_REV_MASK           0x00000FFF  /* HW revision mask   */
42#define BRCM_NFC_20791_GEN          0x20791000
43#define BRCM_NFC_20791_GEN_MAX_EE   3           /* HCI access and 2 UICCs */
44#define BRCM_NFC_43341_GEN          0x43341000
45#define BRCM_NFC_43341_GEN_MAX_EE   3           /* HCI access and 2 UICCs */
46#define BRCM_NFC_20795_GEN          0x20795000
47#define BRCM_NFC_20795_GEN_MAX_EE   4           /* HCI access and 3 UICCs */
48
49/*****************************************************************************
50** Broadcom-specific NCI definitions
51*****************************************************************************/
52
53/**********************************************
54 * NCI Message Proprietary  Group       - F
55 **********************************************/
56#define NCI_MSG_TAG_SET_MEM             0x00
57#define NCI_MSG_TAG_GET_MEM             0x01
58#define NCI_MSG_T1T_SET_HR              0x02
59#define NCI_MSG_SET_CLF_REGISTERS       0x03
60#define NCI_MSG_GET_BUILD_INFO          0x04
61#define NCI_MSG_HCI_NETWK               0x05
62#define NCI_MSG_SET_FWFSM               0x06
63#define NCI_MSG_SET_UICCRDRF            0x07
64#define NCI_MSG_POWER_LEVEL             0x08
65#define NCI_MSG_FRAME_LOG               0x09
66#define NCI_MSG_UICC_READER_ACTION      0x0A
67#define NCI_MSG_SET_PPSE_RESPONSE       0x0B
68#define NCI_MSG_PRBS_SET                0x0C
69#define NCI_MSG_RESET_ALL_UICC_CFG      0x0D    /* reset HCI network/close all pipes (S,D) register */
70#define NCI_MSG_GET_NFCEE_INFO          0x0E
71#define NCI_MSG_DISABLE_INIT_CHECK      0x0F
72#define NCI_MSG_ANTENNA_SELF_TEST       0x10
73#define NCI_MSG_SET_MAX_PKT_SIZE        0x11
74#define NCI_MSG_NCIP_CLK_REQ_OR_CAR_DET 0x12
75#define NCI_MSG_NCIP_CONFIG_DBUART      0x13
76#define NCI_MSG_NCIP_ENABLE_DVT_DRIVER  0x14
77#define NCI_MSG_SET_ASWP                0x15
78#define NCI_MSG_ENCAPSULATE_NCI         0x16
79#define NCI_MSG_CONFIGURE_ARM_JTAG      0x17
80#define NCI_MSG_STATISTICS              0x18
81#define NCI_MSG_SET_DSP_TABLE           0x19
82#define NCI_MSG_GET_DSP_TABLE           0x1a
83#define NCI_MSG_READY_RX_CMD            0x1b
84#define NCI_MSG_GET_VBAT                0x1c
85#define NCI_MSG_GET_XTAL_INDEX_FROM_DH  0x1d
86#define NCI_MSG_SWP_LOG                 0x1e
87#define NCI_MSG_GET_PWRLEVEL            0x1f
88#define NCI_MSG_SET_VBAT_MONITOR        0x20
89#define NCI_MSG_SET_TINT_MODE           0x21
90#define NCI_MSG_ACCESS_APP              0x22
91#define NCI_MSG_SET_SECURE_MODE         0x23
92#define NCI_MSG_GET_NV_DEVICE           0x24
93#define NCI_MSG_LPTD                    0x25
94#define NCI_MSG_SET_CE4_AS_SNOOZE       0x26
95#define NCI_MSG_NFCC_SEND_HCI           0x27
96#define NCI_MSG_CE4_PATCH_DOWNLOAD_DONE 0x28
97#define NCI_MSG_EEPROM_RW               0x29
98#define NCI_MSG_GET_CLF_REGISTERS       0x2A
99#define NCI_MSG_RF_TEST                 0x2B
100#define NCI_MSG_DEBUG_PRINT             0x2C
101#define NCI_MSG_GET_PATCH_VERSION       0x2D
102#define NCI_MSG_SECURE_PATCH_DOWNLOAD   0x2E
103#define NCI_MSG_SPD_FORMAT_NVM          0x2F
104#define NCI_MSG_SPD_READ_NVM            0x30
105#define NCI_MSG_SWP_BIST                0x31
106#define NCI_MSG_WLESS_DBG_MODE          0x32
107#define NCI_MSG_I2C_REQ_POLARITY        0x33
108#define NCI_MSG_AID_FILTER              0x39
109
110
111/**********************************************
112 * Proprietary  NCI status codes
113 **********************************************/
114#define NCI_STATUS_SPD_ERROR_ORDER          0xE0
115#define NCI_STATUS_SPD_ERROR_DEST           0xE1
116#define NCI_STATUS_SPD_ERROR_PROJECTID      0xE2
117#define NCI_STATUS_SPD_ERROR_CHIPVER        0xE3
118#define NCI_STATUS_SPD_ERROR_MAJORVER       0xE4
119#define NCI_STATUS_SPD_ERROR_INVALID_PARAM  0xE5
120#define NCI_STATUS_SPD_ERROR_INVALID_SIG    0xE6
121#define NCI_STATUS_SPD_ERROR_NVM_CORRUPTED  0xE7
122#define NCI_STATUS_SPD_ERROR_PWR_MODE       0xE8
123#define NCI_STATUS_SPD_ERROR_MSG_LEN        0xE9
124#define NCI_STATUS_SPD_ERROR_PATCHSIZE      0xEA
125
126
127
128#define NCI_NV_DEVICE_NONE              0x00
129#define NCI_NV_DEVICE_EEPROM            0x08
130#define NCI_NV_DEVICE_UICC1             0x10
131
132/* The events reported on tNFC_VS_CBACK */
133/* The event is (NCI_NTF_BIT|oid) or (NCI_RSP_BIT|oid) */
134#define NFC_VS_HCI_NETWK_EVT            (NCI_NTF_BIT|NCI_MSG_HCI_NETWK)
135#define NFC_VS_HCI_NETWK_RSP            (NCI_RSP_BIT|NCI_MSG_HCI_NETWK)
136#define NFC_VS_UICC_READER_ACTION_EVT   (NCI_NTF_BIT|NCI_MSG_UICC_READER_ACTION)
137#define NFC_VS_POWER_LEVEL_RSP          (NCI_RSP_BIT|NCI_MSG_POWER_LEVEL)
138#define NFC_VS_GET_NV_DEVICE_EVT        (NCI_RSP_BIT|NCI_MSG_GET_NV_DEVICE)
139#define NFC_VS_LPTD_EVT                 (NCI_NTF_BIT|NCI_MSG_LPTD)
140#define NFC_VS_GET_BUILD_INFO_EVT       (NCI_RSP_BIT|NCI_MSG_GET_BUILD_INFO)
141#define NFC_VS_GET_PATCH_VERSION_EVT    (NCI_RSP_BIT|NCI_MSG_GET_PATCH_VERSION)
142#define NFC_VS_SEC_PATCH_DOWNLOAD_EVT   (NCI_RSP_BIT|NCI_MSG_SECURE_PATCH_DOWNLOAD)
143#define NFC_VS_SEC_PATCH_AUTH_EVT       (NCI_NTF_BIT|NCI_MSG_SECURE_PATCH_DOWNLOAD)
144
145#define NCI_GET_PATCH_VERSION_NVM_OFFSET    37
146
147
148#define NCI_NFCC_PIPE_INFO_NV_SIZE      24  /* Static and dynamic pipe id and status for each pipe to uicc0 and uicc1. */
149#define NCI_PERSONALITY_SLOT_SIZE       19
150#define NCI_DYNAMIC_PIPE_SIZE           8
151
152#define NCI_SWP_INTERFACE_TYPE          0xFF    /* Type of TLV in NCI_MSG_HCI_NETWK */
153#define NCI_HCI_GATE_TYPE               0xFE    /* Type of TLV in NCI_MSG_HCI_NETWK */
154
155/* Secure Patch Download definitions (patch type definitions) */
156#define NCI_SPD_TYPE_HEADER             0x00
157#define NCI_SPD_TYPE_SRAM               0x01
158#define NCI_SPD_TYPE_AON                0x02
159#define NCI_SPD_TYPE_PATCH_TABLE        0x03
160#define NCI_SPD_TYPE_SECURE_CONFIG      0x04
161#define NCI_SPD_TYPE_CONTROLLED_CONFIG  0x05
162#define NCI_SPD_TYPE_SIGNATURE          0x06
163#define NCI_SPD_TYPE_SIGCHEK            0x07
164
165/* Secure Patch Download definitions (NCI_SPD_TYPE_HEADER definitions) */
166#define NCI_SPD_HEADER_OFFSET_CHIPVERLEN    0x18
167#define NCI_SPD_HEADER_CHIPVER_LEN          16
168
169/* NVM Type (in GET_PATCH_VERSION RSP) */
170#define NCI_SPD_NVM_TYPE_NONE           0x00
171#define NCI_SPD_NVM_TYPE_EEPROM         0x01
172#define NCI_SPD_NVM_TYPE_UICC           0x02
173
174/**********************************************
175 * NCI NFCC proprietary features in octet 3
176 **********************************************/
177#define NCI_FEAT_SIGNED_PATCH           0x01000000
178
179/**********************************************
180 * NCI Interface Types
181 **********************************************/
182#define NCI_INTERFACE_VS_CALYPSO_CE     0x81
183#define NCI_INTERFACE_VS_T2T_CE         0x82    /* for Card Emulation side */
184#define NCI_INTERFACE_VS_15693          0x83    /* for both Reader/Writer and Card Emulation side */
185#define NCI_INTERFACE_VS_T1T_CE         0x84    /* for Card Emulation side */
186
187/**********************************************
188 * NCI Proprietary Parameter IDs
189 **********************************************/
190#define NCI_PARAM_ID_LA_FSDI            0xA0
191#define NCI_PARAM_ID_LB_FSDI            0xA1
192#define NCI_PARAM_ID_HOST_LISTEN_MASK   0xA2
193#define NCI_PARAM_ID_CHIP_TYPE          0xA3 /* NFCDEP */
194#define NCI_PARAM_ID_PA_ANTICOLL        0xA4
195#define NCI_PARAM_ID_CONTINUE_MODE      0xA5
196#define NCI_PARAM_ID_LBP                0xA6
197#define NCI_PARAM_ID_T1T_RDR_ONLY       0xA7
198#define NCI_PARAM_ID_LA_SENS_RES        0xA8
199#define NCI_PARAM_ID_PWR_SETTING_BITMAP 0xA9
200#define NCI_PARAM_ID_WI_NTF_ENABLE      0xAA
201#define NCI_PARAM_ID_LN_BITRATE         0xAB /* NFCDEP Listen Bitrate */
202#define NCI_PARAM_ID_LF_BITRATE         0xAC /* FeliCa */
203#define NCI_PARAM_ID_SWP_BITRATE_MASK   0xAD
204#define NCI_PARAM_ID_KOVIO              0xAE
205#define NCI_PARAM_ID_UICC_NTF_TO        0xAF
206#define NCI_PARAM_ID_NFCDEP             0xB0
207#define NCI_PARAM_ID_CLF_REGS_CFG       0xB1
208#define NCI_PARAM_ID_NFCDEP_TRANS_TIME  0xB2
209#define NCI_PARAM_ID_CREDIT_TIMER       0xB3
210#define NCI_PARAM_ID_CORRUPT_RX         0xB4
211#define NCI_PARAM_ID_ISODEP             0xB5
212#define NCI_PARAM_ID_LF_CONFIG          0xB6
213#define NCI_PARAM_ID_I93_DATARATE       0xB7
214#define NCI_PARAM_ID_CREDITS_THRESHOLD  0xB8
215#define NCI_PARAM_ID_TAGSNIFF_CFG       0xB9
216#define NCI_PARAM_ID_PA_FSDI            0xBA /* ISODEP */
217#define NCI_PARAM_ID_PB_FSDI            0xBB /* ISODEP */
218#define NCI_PARAM_ID_FRAME_INTF_RETXN   0xBC
219
220#define NCI_PARAM_ID_UICC_RDR_PRIORITY  0xBD
221#define NCI_PARAM_ID_GUARD_TIME         0xBE
222#define NCI_PARAM_ID_STDCONFIG          0xBF /* dont not use this config item */
223#define NCI_PARAM_ID_PROPCFG            0xC0 /* dont not use this config item  */
224#define NCI_PARAM_ID_MAXTRY2ACTIVATE    0xC1
225#define NCI_PARAM_ID_SWPCFG             0xC2
226#define NCI_PARAM_ID_CLF_LPM_CFG        0xC3
227#define NCI_PARAM_ID_DCLB               0xC4
228#define NCI_PARAM_ID_ACT_ORDER          0xC5
229#define NCI_PARAM_ID_DEP_DELAY_ACT      0xC6
230#define NCI_PARAM_ID_DH_PARITY_CRC_CTL  0xC7
231#define NCI_PARAM_ID_PREINIT_DSP_CFG    0xC8
232#define NCI_PARAM_ID_FW_WORKAROUND      0xC9
233#define NCI_PARAM_ID_RFU_CONFIG         0xCA
234#define NCI_PARAM_ID_EMVCO_ENABLE       0xCB
235#define NCI_PARAM_ID_ANTDRIVER_PARAM    0xCC
236#define NCI_PARAM_ID_PLL325_CFG_PARAM   0xCD
237#define NCI_PARAM_ID_OPNLP_ADPLL_ENABLE 0xCE
238#define NCI_PARAM_ID_CONFORMANCE_MODE   0xCF
239
240#define NCI_PARAM_ID_LPO_ON_OFF_ENABLE  0xD0
241#define NCI_PARAM_ID_FORCE_VANT         0xD1
242#define NCI_PARAM_ID_COEX_CONFIG        0xD2
243#define NCI_PARAM_ID_INTEL_MODE         0xD3
244
245#define NCI_PARAM_ID_AID                0xFF
246
247/**********************************************
248 * NCI Parameter ID Lens
249 **********************************************/
250#define NCI_PARAM_LEN_PWR_SETTING_BITMAP    3
251#define NCI_PARAM_LEN_HOST_LISTEN_MASK      2
252#define NCI_PARAM_LEN_PLL325_CFG_PARAM      14
253
254/**********************************************
255 * Snooze Mode
256 **********************************************/
257#define NFC_SNOOZE_MODE_NONE      0x00    /* Snooze mode disabled    */
258#define NFC_SNOOZE_MODE_UART      0x01    /* Snooze mode for UART    */
259#define NFC_SNOOZE_MODE_SPI_I2C   0x08    /* Snooze mode for SPI/I2C */
260
261#define NFC_SNOOZE_ACTIVE_LOW     0x00    /* high to low voltage is asserting */
262#define NFC_SNOOZE_ACTIVE_HIGH    0x01    /* low to high voltage is asserting */
263
264
265/**********************************************
266 * HCI definitions
267 **********************************************/
268#define NFC_HAL_HCI_SESSION_ID_LEN                  8
269#define NFC_HAL_HCI_SYNC_ID_LEN                     2
270
271/* HCI Network command definitions */
272#define NFC_HAL_HCI_NETWK_INFO_SIZE                 250
273#define NFC_HAL_HCI_NO_RW_MODE_NETWK_INFO_SIZE      184
274#define NFC_HAL_HCI_DH_NETWK_INFO_SIZE              111
275#define NFC_HAL_HCI_MIN_NETWK_INFO_SIZE             12
276#define NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE          11
277
278/* Card emulation RF Gate A definitions */
279#define NFC_HAL_HCI_CE_RF_A_UID_REG_LEN             10
280#define NFC_HAL_HCI_CE_RF_A_ATQA_RSP_CODE_LEN       2
281#define NFC_HAL_HCI_CE_RF_A_MAX_HIST_DATA_LEN       15
282#define NFC_HAL_HCI_CE_RF_A_MAX_DATA_RATE_LEN       3
283
284/* Card emulation RF Gate B definitions */
285#define NFC_HAL_HCI_CE_RF_B_PUPI_LEN                4
286#define NFC_HAL_HCI_CE_RF_B_ATQB_LEN                4
287#define NFC_HAL_HCI_CE_RF_B_HIGHER_LAYER_RSP_LEN    61
288#define NFC_HAL_HCI_CE_RF_B_MAX_DATA_RATE_LEN       3
289
290/* Card emulation RF Gate BP definitions */
291#define NFC_HAL_HCI_CE_RF_BP_MAX_PAT_IN_LEN         8
292#define NFC_HAL_HCI_CE_RF_BP_DATA_OUT_LEN           40
293
294/* Reader RF Gate A definitions */
295#define NFC_HAL_HCI_RD_RF_B_HIGHER_LAYER_DATA_LEN   61
296
297/* DH HCI Network command definitions */
298#define NFC_HAL_HCI_DH_MAX_DYN_PIPES                20
299
300/* Target handle for different host in the network */
301#define NFC_HAL_HCI_DH_TARGET_HANDLE                0xF2
302#define NFC_HAL_HCI_UICC0_TARGET_HANDLE             0xF3
303#define NFC_HAL_HCI_UICC1_TARGET_HANDLE             0xF4
304#define NFC_HAL_HCI_UICC2_TARGET_HANDLE             0xF5
305
306/* Card emulation RF Gate A registry information */
307typedef struct
308{
309    UINT8   pipe_id;                                                    /* if MSB is set then valid, 7 bits for Pipe ID             */
310    UINT8   mode;                                                       /* Type A card emulation enabled indicator, 0x02:enabled    */
311    UINT8   sak;
312    UINT8   uid_reg_len;
313    UINT8   uid_reg[NFC_HAL_HCI_CE_RF_A_UID_REG_LEN];
314    UINT8   atqa[NFC_HAL_HCI_CE_RF_A_ATQA_RSP_CODE_LEN];                /* ATQA response code */
315    UINT8   app_data_len;
316    UINT8   app_data[NFC_HAL_HCI_CE_RF_A_MAX_HIST_DATA_LEN];            /* 15 bytes optional storage for historic data, use 2 slots */
317    UINT8   fwi_sfgi;                                                   /* FRAME WAITING TIME, START-UP FRAME GUARD TIME            */
318    UINT8   cid_support;
319    UINT8   datarate_max[NFC_HAL_HCI_CE_RF_A_MAX_DATA_RATE_LEN];
320    UINT8   clt_support;
321} tNCI_HCI_CE_RF_A;
322
323/* Card emulation RF Gate B registry information */
324typedef struct
325{
326    UINT8   pipe_id;                                                    /* if MSB is set then valid, 7 bits for Pipe ID             */
327    UINT8   mode;                                                       /* Type B card emulation enabled indicator, 0x02:enabled    */
328    UINT8   pupi_len;
329    UINT8   pupi_reg[NFC_HAL_HCI_CE_RF_B_PUPI_LEN];
330    UINT8   afi;
331    UINT8   atqb[NFC_HAL_HCI_CE_RF_B_ATQB_LEN];                         /* 4 bytes ATQB application data                            */
332    UINT8   higherlayer_resp[NFC_HAL_HCI_CE_RF_B_HIGHER_LAYER_RSP_LEN]; /* 0~ 61 bytes ATRB_INF use 1~4 personality slots     */
333    UINT8   datarate_max[NFC_HAL_HCI_CE_RF_B_MAX_DATA_RATE_LEN];
334    UINT8   natrb;
335} tNCI_HCI_CE_RF_B;
336
337/* Card emulation RF Gate BP registry information */
338typedef struct
339{
340    UINT8   pipe_id;                                                    /* if MSB is set then valid, 7 bits for Pipe ID             */
341    UINT8   mode;                                                       /* Type B prime card emulation enabled indicator, 0x02:enabled */
342    UINT8   pat_in_len;
343    UINT8   pat_in[NFC_HAL_HCI_CE_RF_BP_MAX_PAT_IN_LEN];
344    UINT8   dat_out_len;
345    UINT8   dat_out[NFC_HAL_HCI_CE_RF_BP_DATA_OUT_LEN];                 /* ISO7816-3 <=64 byte, and other fields are 9 bytes        */
346    UINT8   natr;
347} tNCI_HCI_CE_RF_BP;
348
349/* Card emulation RF Gate F registry information */
350typedef struct
351{
352    UINT8   pipe_id;                                                    /* if MSB is set then valid, 7 bits for Pipe ID             */
353    UINT8   mode;                                                       /* Type F card emulation enabled indicator, 0x02:enabled    */
354    UINT8   speed_cap;
355    UINT8   clt_support;
356} tNCI_HCI_CE_RF_F;
357
358/* Reader RF Gate A registry information */
359typedef struct
360{
361    UINT8   pipe_id;                                                    /* if MSB is set then valid, 7 bits for Pipe ID             */
362    UINT8   datarate_max;
363} tNCI_HCI_RD_RF_A;
364
365/* Reader RF Gate B registry information */
366typedef struct
367{
368    UINT8   pipe_id;                                                    /* if MSB is set then valid, 7 bits for Pipe ID             */
369    UINT8   afi;
370    UINT8   hldata_len;
371    UINT8   high_layer_data[NFC_HAL_HCI_RD_RF_B_HIGHER_LAYER_DATA_LEN]; /* INF field in ATTRIB command                        */
372} tNCI_HCI_RD_RF_B;
373
374/* Dynamic pipe information */
375typedef struct
376{
377    UINT8   source_host;
378    UINT8   dest_host;
379    UINT8   source_gate;
380    UINT8   dest_gate;
381    UINT8   pipe_id;                                                    /* if MSB is set then valid, 7 bits for Pipe ID             */
382} tNCI_HCI_DYN_PIPE_INFO;
383
384/*************************************************************
385 * HCI Network CMD/NTF structure for UICC host in the network
386 *************************************************************/
387typedef struct
388{
389    UINT8                target_handle;
390    UINT8                session_id[NFC_HAL_HCI_SESSION_ID_LEN];
391    UINT8                sync_id[NFC_HAL_HCI_SYNC_ID_LEN];
392    UINT8                static_pipe_info;
393    tNCI_HCI_CE_RF_A     ce_rf_a;
394    tNCI_HCI_CE_RF_B     ce_rf_b;
395    tNCI_HCI_CE_RF_BP    ce_rf_bp;
396    tNCI_HCI_CE_RF_F     ce_rf_f;
397    tNCI_HCI_RD_RF_A     rw_rf_a;
398    tNCI_HCI_RD_RF_B     rw_rf_b;
399} tNCI_HCI_NETWK;
400
401/************************************************
402 * HCI Network CMD/NTF structure for Device host
403 ************************************************/
404typedef struct
405{
406    UINT8                   target_handle;
407    UINT8                   session_id[NFC_HAL_HCI_SESSION_ID_LEN];
408    UINT8                   static_pipe_info;
409    UINT8                   num_dyn_pipes;
410    tNCI_HCI_DYN_PIPE_INFO  dyn_pipe_info[NFC_HAL_HCI_DH_MAX_DYN_PIPES];
411} tNCI_HCI_NETWK_DH;
412
413#endif  /* NFC_BRCM_DEFS_H */
414