nfc_hal_int_api.h revision e9629bad30a9f478b336ab46b8e6e02f7f87af46
1/****************************************************************************** 2 * 3 * Copyright (C) 2009-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 * Internal NFC HAL API functions. 23 * 24 ******************************************************************************/ 25#ifndef NFC_HAL_INT_API_H 26#define NFC_HAL_INT_API_H 27 28/**************************************************************************** 29** Device Configuration definitions 30****************************************************************************/ 31 32#define NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN (2 + NCI_PARAM_LEN_PLL325_CFG_PARAM) 33 34/* Crystal Frequency Index (in 1 KHz) */ 35enum 36{ 37 NFC_HAL_XTAL_INDEX_9600, 38 NFC_HAL_XTAL_INDEX_13000, 39 NFC_HAL_XTAL_INDEX_16200, 40 NFC_HAL_XTAL_INDEX_19200, 41 NFC_HAL_XTAL_INDEX_24000, 42 NFC_HAL_XTAL_INDEX_26000, 43 NFC_HAL_XTAL_INDEX_38400, 44 NFC_HAL_XTAL_INDEX_52000, 45 NFC_HAL_XTAL_INDEX_37400, 46 NFC_HAL_XTAL_INDEX_MAX 47}; 48typedef UINT8 tNFC_HAL_XTAL_INDEX; 49 50/* Broadcom specific device initialization before sending NCI reset */ 51 52typedef struct 53{ 54 UINT32 brcm_hw_id; 55 UINT16 xtal_freq; 56 UINT8 xtal_index; 57} tNFC_HAL_DEV_INIT_XTAL_CFG; 58 59#define NFC_HAL_DEV_INIT_MAX_XTAL_CFG 5 60 61typedef struct 62{ 63 UINT8 num_xtal_cfg; 64 tNFC_HAL_DEV_INIT_XTAL_CFG xtal_cfg[NFC_HAL_DEV_INIT_MAX_XTAL_CFG]; 65} tNFC_HAL_DEV_INIT_CFG; 66 67/***************************************************************************** 68** Low Power Mode definitions 69*****************************************************************************/ 70 71#define NFC_HAL_LP_SNOOZE_MODE_NONE NFC_SNOOZE_MODE_NONE /* Snooze mode disabled */ 72#define NFC_HAL_LP_SNOOZE_MODE_UART NFC_SNOOZE_MODE_UART /* Snooze mode for UART */ 73#define NFC_HAL_LP_SNOOZE_MODE_SPI_I2C NFC_SNOOZE_MODE_SPI_I2C /* Snooze mode for SPI/I2C */ 74 75#define NFC_HAL_LP_ACTIVE_LOW NFC_SNOOZE_ACTIVE_LOW /* high to low voltage is asserting */ 76#define NFC_HAL_LP_ACTIVE_HIGH NFC_SNOOZE_ACTIVE_HIGH /* low to high voltage is asserting */ 77 78/***************************************************************************** 79** Patch RAM Constants 80*****************************************************************************/ 81 82/* patch format type */ 83#define NFC_HAL_PRM_FORMAT_BIN 0x00 84#define NFC_HAL_PRM_FORMAT_HCD 0x01 85#define NFC_HAL_PRM_FORMAT_NCD 0x02 86typedef UINT8 tNFC_HAL_PRM_FORMAT; 87 88/***************************************************************************** 89** Patch RAM Callback for event notificaton 90*****************************************************************************/ 91/* Events for tNFC_HAL_PRM_CBACK */ 92enum 93{ 94 NFC_HAL_PRM_CONTINUE_EVT, 95 NFC_HAL_PRM_COMPLETE_EVT, 96 NFC_HAL_PRM_ABORT_EVT, 97 NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT, /* Patch is invalid (bad version, project id, or chip) */ 98 NFC_HAL_PRM_ABORT_BAD_SIGNATURE_EVT, /* Patch has invalid signature */ 99 NFC_HAL_PRM_SPD_GET_PATCHFILE_HDR_EVT, /* Secure Patch Download: request for patchfile header */ 100 NFC_HAL_PRM_SPD_GET_NEXT_PATCH, /* Get first command of next patch in patchfile */ 101 NFC_HAL_PRM_ABORT_NO_NVM_EVT /* nfc_hal_prm_nvm_required is TRUE and NVM is unavail */ 102}; 103 104typedef void (tNFC_HAL_PRM_CBACK) (UINT8 event); 105 106typedef UINT8 tNFC_HAL_NCI_EVT; /* MT + Opcode */ 107typedef void (tNFC_HAL_NCI_CBACK) (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data); 108 109#ifdef __cplusplus 110extern "C" { 111#endif 112 113/******************************************************************************* 114** 115** Function HAL_NfcPreInitDone 116** 117** Description Notify that pre-initialization of NFCC is complete 118** 119** Returns void 120** 121*******************************************************************************/ 122void HAL_NfcPreInitDone (tHAL_NFC_STATUS status); 123 124/******************************************************************************* 125** 126** Function HAL_NfcReInit 127** 128** Description This function is called to restart initialization after REG_PU 129** toggled because of failure to detect NVM type or download patchram. 130** 131** Note This function should be called only during the HAL init process 132** 133** Returns HAL_NFC_STATUS_OK if successfully initiated 134** HAL_NFC_STATUS_FAILED otherwise 135** 136*******************************************************************************/ 137tHAL_NFC_STATUS HAL_NfcReInit (void); 138 139/******************************************************************************* 140** 141** Function HAL_NfcSetSnoozeMode 142** 143** Description Set snooze mode 144** snooze_mode 145** NFC_HAL_LP_SNOOZE_MODE_NONE - Snooze mode disabled 146** NFC_HAL_LP_SNOOZE_MODE_UART - Snooze mode for UART 147** NFC_HAL_LP_SNOOZE_MODE_SPI_I2C - Snooze mode for SPI/I2C 148** 149** idle_threshold_dh/idle_threshold_nfcc 150** Idle Threshold Host in 100ms unit 151** 152** nfc_wake_active_mode/dh_wake_active_mode 153** NFC_HAL_LP_ACTIVE_LOW - high to low voltage is asserting 154** NFC_HAL_LP_ACTIVE_HIGH - low to high voltage is asserting 155** 156** p_snooze_cback 157** Notify status of operation 158** 159** Returns tHAL_NFC_STATUS 160** 161*******************************************************************************/ 162tHAL_NFC_STATUS HAL_NfcSetSnoozeMode (UINT8 snooze_mode, 163 UINT8 idle_threshold_dh, 164 UINT8 idle_threshold_nfcc, 165 UINT8 nfc_wake_active_mode, 166 UINT8 dh_wake_active_mode, 167 tHAL_NFC_STATUS_CBACK *p_snooze_cback); 168 169/******************************************************************************* 170** 171** Function HAL_NfcPrmDownloadStart 172** 173** Description Initiate patch download 174** 175** Input Params 176** format_type patch format type 177** (NFC_HAL_PRM_FORMAT_BIN, NFC_HAL_PRM_FORMAT_HCD, or 178** NFC_HAL_PRM_FORMAT_NCD) 179** 180** dest_address destination adderess (needed for BIN format only) 181** 182** p_patchram_buf pointer to patchram buffer. If NULL, 183** then app must call HAL_NfcPrmDownloadContinue when 184** NFC_HAL_PRM_CONTINUE_EVT is received, to send the next 185** segment of patchram 186** 187** patchram_len size of p_patchram_buf (if non-NULL) 188** 189** patchram_delay The delay after each patch. 190** If the given value is less than the size of the patchram, 191** the size of patchram is used instead. 192** 193** p_cback callback for download status 194** 195** 196** Returns TRUE if successful, otherwise FALSE 197** 198** 199*******************************************************************************/ 200BOOLEAN HAL_NfcPrmDownloadStart (tNFC_HAL_PRM_FORMAT format_type, 201 UINT32 dest_address, 202 UINT8 *p_patchram_buf, 203 UINT32 patchram_len, 204 UINT32 patchram_delay, 205 tNFC_HAL_PRM_CBACK *p_cback); 206 207/******************************************************************************* 208** 209** Function HAL_NfcPrmDownloadContinue 210** 211** Description Send next segment of patchram to controller. Called when 212** NFC_HAL_PRM_CONTINUE_EVT is received. 213** 214** Only needed if HAL_NfcPrmDownloadStart was called with 215** p_patchram_buf=NULL 216** 217** Input Params p_patch_data pointer to patch data 218** patch_data_len patch data len 219** 220** Returns TRUE if successful, otherwise FALSE 221** 222*******************************************************************************/ 223BOOLEAN HAL_NfcPrmDownloadContinue (UINT8 *p_patch_data, 224 UINT16 patch_data_len); 225 226/******************************************************************************* 227** 228** Function HAL_NfcPrmSetI2cPatch 229** 230** Description Specify patchfile for BCM20791B3 I2C fix. This fix 231** must be downloaded prior to initial patch download for I2C 232** transport 233** 234** Input Params p_i2c_patchfile_buf: pointer to patch for i2c fix 235** i2c_patchfile_len: length of patch 236** prei2c_delay: the delay before downloading main patch 237** if 0 is given, NFC_HAL_PRM_POST_I2C_FIX_DELAY is used instead. 238** 239** Returns Nothing 240** 241** 242*******************************************************************************/ 243void HAL_NfcPrmSetI2cPatch (UINT8 *p_i2c_patchfile_buf, 244 UINT16 i2c_patchfile_len, UINT32 prei2c_delay); 245 246/******************************************************************************* 247** 248** Function HAL_NfcPrmSetSpdNciCmdPayloadSize 249** 250** Description Set Host-to-NFCC NCI message size for secure patch download 251** 252** This API must be called before calling HAL_NfcPrmDownloadStart. 253** If the API is not called, then PRM will use the default 254** message size. 255** 256** Typically, this API is only called for platforms that have 257** message-size limitations in the transport/driver. 258** 259** Valid message size range: NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE to 255. 260** 261** Returns HAL_NFC_STATUS_OK if successful 262** HAL_NFC_STATUS_FAILED otherwise 263** 264** 265*******************************************************************************/ 266tHAL_NFC_STATUS HAL_NfcPrmSetSpdNciCmdPayloadSize (UINT8 max_payload_size); 267 268/******************************************************************************* 269** 270** Function HAL_NfcSetMaxRfDataCredits 271** 272** Description This function sets the maximum RF data credit for HAL. 273** If 0, use the value reported from NFCC. 274** 275** Returns none 276** 277*******************************************************************************/ 278void HAL_NfcSetMaxRfDataCredits (UINT8 max_credits); 279 280/******************************************************************************* 281** 282** Function HAL_NfcSetTraceLevel 283** 284** Description This function sets the trace level for HAL. If called with 285** a value of 0xFF, it simply returns the current trace level. 286** 287** Returns The new or current trace level 288** 289*******************************************************************************/ 290UINT8 HAL_NfcSetTraceLevel (UINT8 new_level); 291 292 293#ifdef __cplusplus 294} 295#endif 296 297#endif /* NFC_HAL_INT_API_H */ 298 299