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