1 /****************************************************************************** 2 * 3 * Copyright (C) 2009-2013 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) */ 35 enum 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 }; 48 typedef UINT8 tNFC_HAL_XTAL_INDEX; 49 50 /* Broadcom specific device initialization before sending NCI reset */ 51 52 typedef 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 61 typedef 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 86 typedef UINT8 tNFC_HAL_PRM_FORMAT; 87 88 /***************************************************************************** 89 ** Patch RAM Callback for event notificaton 90 *****************************************************************************/ 91 /* Events for tNFC_HAL_PRM_CBACK */ 92 enum 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 104 typedef void (tNFC_HAL_PRM_CBACK) (UINT8 event); 105 106 typedef UINT8 tNFC_HAL_NCI_EVT; /* MT + Opcode */ 107 typedef void (tNFC_HAL_NCI_CBACK) (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data); 108 109 #ifdef __cplusplus 110 extern "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 *******************************************************************************/ 122 void 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 *******************************************************************************/ 137 tHAL_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 *******************************************************************************/ 162 tHAL_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 *******************************************************************************/ 200 BOOLEAN 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 *******************************************************************************/ 223 BOOLEAN 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 *******************************************************************************/ 243 void 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 *******************************************************************************/ 266 tHAL_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 *******************************************************************************/ 278 void 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 *******************************************************************************/ 290 UINT8 HAL_NfcSetTraceLevel (UINT8 new_level); 291 292 293 #ifdef __cplusplus 294 } 295 #endif 296 297 #endif /* NFC_HAL_INT_API_H */ 298 299