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