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