/****************************************************************************** * * Copyright (C) 2012-2014 Broadcom Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ /****************************************************************************** * * This file contains the Broadcom-specific defintions that are shared * between HAL, nfc stack, adaptation layer and applications. * ******************************************************************************/ #ifndef NFC_BRCM_DEFS_H #define NFC_BRCM_DEFS_H /***************************************************************************** ** Broadcom HW ID definitions *****************************************************************************/ #define BRCM_20791B3_ID 0x20791b03 #define BRCM_20791B4_ID 0x20791b04 #define BRCM_20791B5_ID 0x20791b05 #define BRCM_43341B0_ID 0x43341b00 #define BRCM_20795T1_ID 0x20795a01 #define BRCM_20795A0_ID 0x20795a00 #define BRCM_20795A1_ID 0x20795a10 #define BRCM_NFC_GEN_MASK 0xFFFFF000 /* HW generation mask */ #define BRCM_NFC_REV_MASK 0x00000FFF /* HW revision mask */ #define BRCM_NFC_20791_GEN 0x20791000 #define BRCM_NFC_20791_GEN_MAX_EE 3 /* HCI access and 2 UICCs */ #define BRCM_NFC_43341_GEN 0x43341000 #define BRCM_NFC_43341_GEN_MAX_EE 3 /* HCI access and 2 UICCs */ #define BRCM_NFC_20795_GEN 0x20795000 #define BRCM_NFC_20795_GEN_MAX_EE 4 /* HCI access and 3 UICCs */ /***************************************************************************** ** Broadcom-specific NCI definitions *****************************************************************************/ /********************************************** * NCI Message Proprietary Group - F **********************************************/ #define NCI_MSG_TAG_SET_MEM 0x00 #define NCI_MSG_TAG_GET_MEM 0x01 #define NCI_MSG_T1T_SET_HR 0x02 #define NCI_MSG_SET_CLF_REGISTERS 0x03 #define NCI_MSG_GET_BUILD_INFO 0x04 #define NCI_MSG_HCI_NETWK 0x05 #define NCI_MSG_SET_FWFSM 0x06 #define NCI_MSG_SET_UICCRDRF 0x07 #define NCI_MSG_POWER_LEVEL 0x08 #define NCI_MSG_FRAME_LOG 0x09 #define NCI_MSG_UICC_READER_ACTION 0x0A #define NCI_MSG_SET_PPSE_RESPONSE 0x0B #define NCI_MSG_PRBS_SET 0x0C /* reset HCI network/close all pipes (S,D) register */ #define NCI_MSG_RESET_ALL_UICC_CFG 0x0D #define NCI_MSG_GET_NFCEE_INFO 0x0E #define NCI_MSG_DISABLE_INIT_CHECK 0x0F #define NCI_MSG_ANTENNA_SELF_TEST 0x10 #define NCI_MSG_SET_MAX_PKT_SIZE 0x11 #define NCI_MSG_NCIP_CLK_REQ_OR_CAR_DET 0x12 #define NCI_MSG_NCIP_CONFIG_DBUART 0x13 #define NCI_MSG_NCIP_ENABLE_DVT_DRIVER 0x14 #define NCI_MSG_SET_ASWP 0x15 #define NCI_MSG_ENCAPSULATE_NCI 0x16 #define NCI_MSG_CONFIGURE_ARM_JTAG 0x17 #define NCI_MSG_STATISTICS 0x18 #define NCI_MSG_SET_DSP_TABLE 0x19 #define NCI_MSG_GET_DSP_TABLE 0x1a #define NCI_MSG_READY_RX_CMD 0x1b #define NCI_MSG_GET_VBAT 0x1c #define NCI_MSG_GET_XTAL_INDEX_FROM_DH 0x1d #define NCI_MSG_SWP_LOG 0x1e #define NCI_MSG_GET_PWRLEVEL 0x1f #define NCI_MSG_SET_VBAT_MONITOR 0x20 #define NCI_MSG_SET_TINT_MODE 0x21 #define NCI_MSG_ACCESS_APP 0x22 #define NCI_MSG_SET_SECURE_MODE 0x23 #define NCI_MSG_GET_NV_DEVICE 0x24 #define NCI_MSG_LPTD 0x25 #define NCI_MSG_SET_CE4_AS_SNOOZE 0x26 #define NCI_MSG_NFCC_SEND_HCI 0x27 #define NCI_MSG_CE4_PATCH_DOWNLOAD_DONE 0x28 #define NCI_MSG_EEPROM_RW 0x29 #define NCI_MSG_GET_CLF_REGISTERS 0x2A #define NCI_MSG_RF_TEST 0x2B #define NCI_MSG_DEBUG_PRINT 0x2C #define NCI_MSG_GET_PATCH_VERSION 0x2D #define NCI_MSG_SECURE_PATCH_DOWNLOAD 0x2E #define NCI_MSG_SPD_FORMAT_NVM 0x2F #define NCI_MSG_SPD_READ_NVM 0x30 #define NCI_MSG_SWP_BIST 0x31 #define NCI_MSG_WLESS_DBG_MODE 0x32 #define NCI_MSG_I2C_REQ_POLARITY 0x33 #define NCI_MSG_AID_FILTER 0x39 /********************************************** * Proprietary NCI status codes **********************************************/ #define NCI_STATUS_SPD_ERROR_ORDER 0xE0 #define NCI_STATUS_SPD_ERROR_DEST 0xE1 #define NCI_STATUS_SPD_ERROR_PROJECTID 0xE2 #define NCI_STATUS_SPD_ERROR_CHIPVER 0xE3 #define NCI_STATUS_SPD_ERROR_MAJORVER 0xE4 #define NCI_STATUS_SPD_ERROR_INVALID_PARAM 0xE5 #define NCI_STATUS_SPD_ERROR_INVALID_SIG 0xE6 #define NCI_STATUS_SPD_ERROR_NVM_CORRUPTED 0xE7 #define NCI_STATUS_SPD_ERROR_PWR_MODE 0xE8 #define NCI_STATUS_SPD_ERROR_MSG_LEN 0xE9 #define NCI_STATUS_SPD_ERROR_PATCHSIZE 0xEA #define NCI_NV_DEVICE_NONE 0x00 #define NCI_NV_DEVICE_EEPROM 0x08 #define NCI_NV_DEVICE_UICC1 0x10 /* The events reported on tNFC_VS_CBACK */ /* The event is (NCI_NTF_BIT|oid) or (NCI_RSP_BIT|oid) */ #define NFC_VS_HCI_NETWK_EVT (NCI_NTF_BIT | NCI_MSG_HCI_NETWK) #define NFC_VS_HCI_NETWK_RSP (NCI_RSP_BIT | NCI_MSG_HCI_NETWK) #define NFC_VS_UICC_READER_ACTION_EVT (NCI_NTF_BIT | NCI_MSG_UICC_READER_ACTION) #define NFC_VS_POWER_LEVEL_RSP (NCI_RSP_BIT | NCI_MSG_POWER_LEVEL) #define NFC_VS_GET_NV_DEVICE_EVT (NCI_RSP_BIT | NCI_MSG_GET_NV_DEVICE) #define NFC_VS_LPTD_EVT (NCI_NTF_BIT | NCI_MSG_LPTD) #define NFC_VS_GET_BUILD_INFO_EVT (NCI_RSP_BIT | NCI_MSG_GET_BUILD_INFO) #define NFC_VS_GET_PATCH_VERSION_EVT (NCI_RSP_BIT | NCI_MSG_GET_PATCH_VERSION) #define NFC_VS_SEC_PATCH_DOWNLOAD_EVT \ (NCI_RSP_BIT | NCI_MSG_SECURE_PATCH_DOWNLOAD) #define NFC_VS_SEC_PATCH_AUTH_EVT (NCI_NTF_BIT | NCI_MSG_SECURE_PATCH_DOWNLOAD) #define NFC_VS_EEPROM_RW_EVT (NCI_RSP_BIT | NCI_MSG_EEPROM_RW) #define NCI_GET_PATCH_VERSION_NVM_OFFSET 37 /* Static and dynamic pipe id and status for each pipe to uicc0 and uicc1. */ #define NCI_NFCC_PIPE_INFO_NV_SIZE 24 #define NCI_PERSONALITY_SLOT_SIZE 19 #define NCI_DYNAMIC_PIPE_SIZE 8 /* Type of TLV in NCI_MSG_HCI_NETWK */ #define NCI_SWP_INTERFACE_TYPE 0xFF /* Type of TLV in NCI_MSG_HCI_NETWK */ #define NCI_HCI_GATE_TYPE 0xFE /* Secure Patch Download definitions (patch type definitions) */ #define NCI_SPD_TYPE_HEADER 0x00 #define NCI_SPD_TYPE_SRAM 0x01 #define NCI_SPD_TYPE_AON 0x02 #define NCI_SPD_TYPE_PATCH_TABLE 0x03 #define NCI_SPD_TYPE_SECURE_CONFIG 0x04 #define NCI_SPD_TYPE_CONTROLLED_CONFIG 0x05 #define NCI_SPD_TYPE_SIGNATURE 0x06 #define NCI_SPD_TYPE_SIGCHEK 0x07 /* Secure Patch Download definitions (NCI_SPD_TYPE_HEADER definitions) */ #define NCI_SPD_HEADER_OFFSET_CHIPVERLEN 0x18 #define NCI_SPD_HEADER_CHIPVER_LEN 16 /* NVM Type (in GET_PATCH_VERSION RSP) */ #define NCI_SPD_NVM_TYPE_NONE 0x00 #define NCI_SPD_NVM_TYPE_EEPROM 0x01 #define NCI_SPD_NVM_TYPE_UICC 0x02 /********************************************** * NCI NFCC proprietary features in octet 3 **********************************************/ #define NCI_FEAT_SIGNED_PATCH 0x01000000 /********************************************** * NCI Interface Types **********************************************/ #define NCI_INTERFACE_VS_MIFARE 0x80 #define NCI_INTERFACE_VS_CALYPSO_CE 0x81 #define NCI_INTERFACE_VS_T2T_CE 0x82 /* for Card Emulation side */ /* for both Reader/Writer and Card Emulation side */ #define NCI_INTERFACE_VS_15693 0x83 #define NCI_INTERFACE_VS_T1T_CE 0x84 /* for Card Emulation side */ /********************************************** * NCI Proprietary Parameter IDs **********************************************/ #define NCI_PARAM_ID_LA_FSDI 0xA0 #define NCI_PARAM_ID_LB_FSDI 0xA1 #define NCI_PARAM_ID_HOST_LISTEN_MASK 0xA2 #define NCI_PARAM_ID_CHIP_TYPE 0xA3 /* NFCDEP */ #define NCI_PARAM_ID_PA_ANTICOLL 0xA4 #define NCI_PARAM_ID_CONTINUE_MODE 0xA5 #define NCI_PARAM_ID_LBP 0xA6 #define NCI_PARAM_ID_T1T_RDR_ONLY 0xA7 #define NCI_PARAM_ID_LA_SENS_RES 0xA8 #define NCI_PARAM_ID_PWR_SETTING_BITMAP 0xA9 #define NCI_PARAM_ID_WI_NTF_ENABLE 0xAA #define NCI_PARAM_ID_LN_BITRATE 0xAB /* NFCDEP Listen Bitrate */ #define NCI_PARAM_ID_LF_BITRATE 0xAC /* FeliCa */ #define NCI_PARAM_ID_SWP_BITRATE_MASK 0xAD #define NCI_PARAM_ID_KOVIO 0xAE #define NCI_PARAM_ID_UICC_NTF_TO 0xAF #define NCI_PARAM_ID_NFCDEP 0xB0 #define NCI_PARAM_ID_CLF_REGS_CFG 0xB1 #define NCI_PARAM_ID_NFCDEP_TRANS_TIME 0xB2 #define NCI_PARAM_ID_CREDIT_TIMER 0xB3 #define NCI_PARAM_ID_CORRUPT_RX 0xB4 #define NCI_PARAM_ID_ISODEP 0xB5 #define NCI_PARAM_ID_LF_CONFIG 0xB6 #define NCI_PARAM_ID_I93_DATARATE 0xB7 #define NCI_PARAM_ID_CREDITS_THRESHOLD 0xB8 #define NCI_PARAM_ID_TAGSNIFF_CFG 0xB9 #define NCI_PARAM_ID_PA_FSDI 0xBA /* ISODEP */ #define NCI_PARAM_ID_PB_FSDI 0xBB /* ISODEP */ #define NCI_PARAM_ID_FRAME_INTF_RETXN 0xBC #define NCI_PARAM_ID_UICC_RDR_PRIORITY 0xBD #define NCI_PARAM_ID_GUARD_TIME 0xBE #define NCI_PARAM_ID_STDCONFIG 0xBF /* dont not use this config item */ /* dont not use this config item */ #define NCI_PARAM_ID_PROPCFG 0xC0 #define NCI_PARAM_ID_MAXTRY2ACTIVATE 0xC1 #define NCI_PARAM_ID_SWPCFG 0xC2 #define NCI_PARAM_ID_CLF_LPM_CFG 0xC3 #define NCI_PARAM_ID_DCLB 0xC4 #define NCI_PARAM_ID_ACT_ORDER 0xC5 #define NCI_PARAM_ID_DEP_DELAY_ACT 0xC6 #define NCI_PARAM_ID_DH_PARITY_CRC_CTL 0xC7 #define NCI_PARAM_ID_PREINIT_DSP_CFG 0xC8 #define NCI_PARAM_ID_FW_WORKAROUND 0xC9 #define NCI_PARAM_ID_RFU_CONFIG 0xCA #define NCI_PARAM_ID_EMVCO_ENABLE 0xCB #define NCI_PARAM_ID_ANTDRIVER_PARAM 0xCC #define NCI_PARAM_ID_PLL325_CFG_PARAM 0xCD #define NCI_PARAM_ID_OPNLP_ADPLL_ENABLE 0xCE #define NCI_PARAM_ID_CONFORMANCE_MODE 0xCF #define NCI_PARAM_ID_LPO_ON_OFF_ENABLE 0xD0 #define NCI_PARAM_ID_FORCE_VANT 0xD1 #define NCI_PARAM_ID_COEX_CONFIG 0xD2 #define NCI_PARAM_ID_INTEL_MODE 0xD3 #define NCI_PARAM_ID_AID 0xFF /********************************************** * NCI Parameter ID Lens **********************************************/ #define NCI_PARAM_LEN_PWR_SETTING_BITMAP 3 #define NCI_PARAM_LEN_HOST_LISTEN_MASK 2 #define NCI_PARAM_LEN_PLL325_CFG_PARAM 14 #define NCI_PARAM_LEN_POWER_LEVEL 6 /********************************************** * Snooze Mode **********************************************/ #define NFC_SNOOZE_MODE_NONE 0x00 /* Snooze mode disabled */ #define NFC_SNOOZE_MODE_UART 0x01 /* Snooze mode for UART */ #define NFC_SNOOZE_MODE_SPI_I2C 0x08 /* Snooze mode for SPI/I2C */ #define NFC_SNOOZE_ACTIVE_LOW 0x00 /* high to low voltage is asserting */ #define NFC_SNOOZE_ACTIVE_HIGH 0x01 /* low to high voltage is asserting */ /********************************************** * HCI definitions **********************************************/ #define NFC_HAL_HCI_SESSION_ID_LEN 8 #define NFC_HAL_HCI_SYNC_ID_LEN 2 /* HCI Network command definitions */ #define NFC_HAL_HCI_NETWK_INFO_SIZE 250 #define NFC_HAL_HCI_NO_RW_MODE_NETWK_INFO_SIZE 184 #define NFC_HAL_HCI_DH_NETWK_INFO_SIZE 111 #define NFC_HAL_HCI_MIN_NETWK_INFO_SIZE 12 #define NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE 11 /* Card emulation RF Gate A definitions */ #define NFC_HAL_HCI_CE_RF_A_UID_REG_LEN 10 #define NFC_HAL_HCI_CE_RF_A_ATQA_RSP_CODE_LEN 2 #define NFC_HAL_HCI_CE_RF_A_MAX_HIST_DATA_LEN 15 #define NFC_HAL_HCI_CE_RF_A_MAX_DATA_RATE_LEN 3 /* Card emulation RF Gate B definitions */ #define NFC_HAL_HCI_CE_RF_B_PUPI_LEN 4 #define NFC_HAL_HCI_CE_RF_B_ATQB_LEN 4 #define NFC_HAL_HCI_CE_RF_B_HIGHER_LAYER_RSP_LEN 61 #define NFC_HAL_HCI_CE_RF_B_MAX_DATA_RATE_LEN 3 /* Card emulation RF Gate BP definitions */ #define NFC_HAL_HCI_CE_RF_BP_MAX_PAT_IN_LEN 8 #define NFC_HAL_HCI_CE_RF_BP_DATA_OUT_LEN 40 /* Reader RF Gate A definitions */ #define NFC_HAL_HCI_RD_RF_B_HIGHER_LAYER_DATA_LEN 61 /* DH HCI Network command definitions */ #define NFC_HAL_HCI_DH_MAX_DYN_PIPES 20 /* Target handle for different host in the network */ #define NFC_HAL_HCI_DH_TARGET_HANDLE 0xF2 #define NFC_HAL_HCI_UICC0_TARGET_HANDLE 0xF3 #define NFC_HAL_HCI_UICC1_TARGET_HANDLE 0xF4 #define NFC_HAL_HCI_UICC2_TARGET_HANDLE 0xF5 /* Card emulation RF Gate A registry information */ typedef struct { uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */ uint8_t mode; /* Type A card emulation enabled indicator, 0x02:enabled */ uint8_t sak; uint8_t uid_reg_len; uint8_t uid_reg[NFC_HAL_HCI_CE_RF_A_UID_REG_LEN]; uint8_t atqa[NFC_HAL_HCI_CE_RF_A_ATQA_RSP_CODE_LEN]; /* ATQA response code */ uint8_t app_data_len; uint8_t app_data[NFC_HAL_HCI_CE_RF_A_MAX_HIST_DATA_LEN]; /* 15 bytes optional storage for historic data, use 2 slots */ uint8_t fwi_sfgi; /* FRAME WAITING TIME, START-UP FRAME GUARD TIME */ uint8_t cid_support; uint8_t datarate_max[NFC_HAL_HCI_CE_RF_A_MAX_DATA_RATE_LEN]; uint8_t clt_support; } tNCI_HCI_CE_RF_A; /* Card emulation RF Gate B registry information */ typedef struct { uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */ uint8_t mode; /* Type B card emulation enabled indicator, 0x02:enabled */ uint8_t pupi_len; uint8_t pupi_reg[NFC_HAL_HCI_CE_RF_B_PUPI_LEN]; uint8_t afi; uint8_t atqb[NFC_HAL_HCI_CE_RF_B_ATQB_LEN]; /* 4 bytes ATQB application data */ uint8_t higherlayer_resp [NFC_HAL_HCI_CE_RF_B_HIGHER_LAYER_RSP_LEN]; /* 0~ 61 bytes ATRB_INF use 1~4 personality slots */ uint8_t datarate_max[NFC_HAL_HCI_CE_RF_B_MAX_DATA_RATE_LEN]; uint8_t natrb; } tNCI_HCI_CE_RF_B; /* Card emulation RF Gate BP registry information */ typedef struct { uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */ uint8_t mode; /* Type B prime card emulation enabled indicator, 0x02:enabled */ uint8_t pat_in_len; uint8_t pat_in[NFC_HAL_HCI_CE_RF_BP_MAX_PAT_IN_LEN]; uint8_t dat_out_len; uint8_t dat_out[NFC_HAL_HCI_CE_RF_BP_DATA_OUT_LEN]; /* ISO7816-3 <=64 byte, and other fields are 9 bytes */ uint8_t natr; } tNCI_HCI_CE_RF_BP; /* Card emulation RF Gate F registry information */ typedef struct { uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */ uint8_t mode; /* Type F card emulation enabled indicator, 0x02:enabled */ uint8_t speed_cap; uint8_t clt_support; } tNCI_HCI_CE_RF_F; /* Reader RF Gate A registry information */ typedef struct { uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */ uint8_t datarate_max; } tNCI_HCI_RD_RF_A; /* Reader RF Gate B registry information */ typedef struct { uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */ uint8_t afi; uint8_t hldata_len; uint8_t high_layer_data[NFC_HAL_HCI_RD_RF_B_HIGHER_LAYER_DATA_LEN]; /* INF field in ATTRIB command */ } tNCI_HCI_RD_RF_B; /* Dynamic pipe information */ typedef struct { uint8_t source_host; uint8_t dest_host; uint8_t source_gate; uint8_t dest_gate; uint8_t pipe_id; /* if MSB is set then valid, 7 bits for Pipe ID */ } tNCI_HCI_DYN_PIPE_INFO; /************************************************************* * HCI Network CMD/NTF structure for UICC host in the network *************************************************************/ typedef struct { uint8_t target_handle; uint8_t session_id[NFC_HAL_HCI_SESSION_ID_LEN]; uint8_t sync_id[NFC_HAL_HCI_SYNC_ID_LEN]; uint8_t static_pipe_info; tNCI_HCI_CE_RF_A ce_rf_a; tNCI_HCI_CE_RF_B ce_rf_b; tNCI_HCI_CE_RF_BP ce_rf_bp; tNCI_HCI_CE_RF_F ce_rf_f; tNCI_HCI_RD_RF_A rw_rf_a; tNCI_HCI_RD_RF_B rw_rf_b; } tNCI_HCI_NETWK; /************************************************ * HCI Network CMD/NTF structure for Device host ************************************************/ typedef struct { uint8_t target_handle; uint8_t session_id[NFC_HAL_HCI_SESSION_ID_LEN]; uint8_t static_pipe_info; uint8_t num_dyn_pipes; tNCI_HCI_DYN_PIPE_INFO dyn_pipe_info[NFC_HAL_HCI_DH_MAX_DYN_PIPES]; } tNCI_HCI_NETWK_DH; #endif /* NFC_BRCM_DEFS_H */