/****************************************************************************** * * Copyright (C) 2009-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. * ******************************************************************************/ /****************************************************************************** * * Internal NFC HAL API functions. * ******************************************************************************/ #ifndef NFC_HAL_INT_API_H #define NFC_HAL_INT_API_H /**************************************************************************** ** Device Configuration definitions ****************************************************************************/ #define NFC_HAL_PLL_325_SETCONFIG_PARAM_LEN (2 + NCI_PARAM_LEN_PLL325_CFG_PARAM) /* Crystal Frequency Index (in 1 KHz) */ enum { NFC_HAL_XTAL_INDEX_9600, NFC_HAL_XTAL_INDEX_13000, NFC_HAL_XTAL_INDEX_16200, NFC_HAL_XTAL_INDEX_19200, NFC_HAL_XTAL_INDEX_24000, NFC_HAL_XTAL_INDEX_26000, NFC_HAL_XTAL_INDEX_38400, NFC_HAL_XTAL_INDEX_52000, NFC_HAL_XTAL_INDEX_37400, NFC_HAL_XTAL_INDEX_MAX, NFC_HAL_XTAL_INDEX_SPECIAL = 0xFF }; typedef uint8_t tNFC_HAL_XTAL_INDEX; /* Broadcom specific device initialization before sending NCI reset */ typedef struct { uint32_t brcm_hw_id; uint16_t xtal_freq; uint8_t xtal_index; } tNFC_HAL_DEV_INIT_XTAL_CFG; #define NFC_HAL_DEV_INIT_MAX_XTAL_CFG 5 typedef struct { uint8_t num_xtal_cfg; tNFC_HAL_DEV_INIT_XTAL_CFG xtal_cfg[NFC_HAL_DEV_INIT_MAX_XTAL_CFG]; } tNFC_HAL_DEV_INIT_CFG; /***************************************************************************** ** Low Power Mode definitions *****************************************************************************/ /* Snooze mode disabled */ #define NFC_HAL_LP_SNOOZE_MODE_NONE NFC_SNOOZE_MODE_NONE /* Snooze mode for UART */ #define NFC_HAL_LP_SNOOZE_MODE_UART NFC_SNOOZE_MODE_UART /* Snooze mode for SPI/I2C */ #define NFC_HAL_LP_SNOOZE_MODE_SPI_I2C NFC_SNOOZE_MODE_SPI_I2C /* high to low voltage is asserting */ #define NFC_HAL_LP_ACTIVE_LOW NFC_SNOOZE_ACTIVE_LOW /* low to high voltage is asserting */ #define NFC_HAL_LP_ACTIVE_HIGH NFC_SNOOZE_ACTIVE_HIGH /***************************************************************************** ** Patch RAM Constants *****************************************************************************/ /* patch format type */ #define NFC_HAL_PRM_FORMAT_BIN 0x00 #define NFC_HAL_PRM_FORMAT_HCD 0x01 #define NFC_HAL_PRM_FORMAT_NCD 0x02 typedef uint8_t tNFC_HAL_PRM_FORMAT; /***************************************************************************** ** Patch RAM Callback for event notificaton *****************************************************************************/ /* Events for tNFC_HAL_PRM_CBACK */ enum { NFC_HAL_PRM_CONTINUE_EVT, NFC_HAL_PRM_COMPLETE_EVT, NFC_HAL_PRM_ABORT_EVT, NFC_HAL_PRM_ABORT_INVALID_PATCH_EVT, /* Patch is invalid (bad version, project id, or chip) */ NFC_HAL_PRM_ABORT_BAD_SIGNATURE_EVT, /* Patch has invalid signature */ NFC_HAL_PRM_SPD_GET_PATCHFILE_HDR_EVT, /* Secure Patch Download: request for patchfile header */ NFC_HAL_PRM_SPD_GET_NEXT_PATCH, /* Get first command of next patch in patchfile */ NFC_HAL_PRM_ABORT_NO_NVM_EVT /* nfc_hal_prm_nvm_required is TRUE and NVM is unavail */ }; typedef void(tNFC_HAL_PRM_CBACK)(uint8_t event); typedef uint8_t tNFC_HAL_NCI_EVT; /* MT + Opcode */ typedef void(tNFC_HAL_NCI_CBACK)(tNFC_HAL_NCI_EVT event, uint16_t data_len, uint8_t* p_data); #ifdef __cplusplus extern "C" { #endif /******************************************************************************* ** ** Function HAL_NfcPreInitDone ** ** Description Notify that pre-initialization of NFCC is complete ** ** Returns void ** *******************************************************************************/ void HAL_NfcPreInitDone(tHAL_NFC_STATUS status); /******************************************************************************* ** ** Function HAL_NfcReInit ** ** Description This function is called to restart initialization after ** REG_PU toggled because of failure to detect NVM type or ** download patchram. ** ** Note This function should be called only during the HAL init ** process ** ** Returns HAL_NFC_STATUS_OK if successfully initiated ** HAL_NFC_STATUS_FAILED otherwise ** *******************************************************************************/ tHAL_NFC_STATUS HAL_NfcReInit(void); /******************************************************************************* ** ** Function HAL_NfcSetSnoozeMode ** ** Description Set snooze mode ** snooze_mode ** NFC_HAL_LP_SNOOZE_MODE_NONE - Snooze mode disabled ** NFC_HAL_LP_SNOOZE_MODE_UART - Snooze mode for UART ** NFC_HAL_LP_SNOOZE_MODE_SPI_I2C - Snooze mode for SPI/I2C ** ** idle_threshold_dh/idle_threshold_nfcc ** Idle Threshold Host in 100ms unit ** ** nfc_wake_active_mode/dh_wake_active_mode ** NFC_HAL_LP_ACTIVE_LOW - high to low voltage is asserting ** NFC_HAL_LP_ACTIVE_HIGH - low to high voltage is ** asserting ** ** p_snooze_cback ** Notify status of operation ** ** Returns tHAL_NFC_STATUS ** *******************************************************************************/ tHAL_NFC_STATUS HAL_NfcSetSnoozeMode(uint8_t snooze_mode, uint8_t idle_threshold_dh, uint8_t idle_threshold_nfcc, uint8_t nfc_wake_active_mode, uint8_t dh_wake_active_mode, tHAL_NFC_STATUS_CBACK* p_snooze_cback); /******************************************************************************* ** ** Function HAL_NfcPrmDownloadStart ** ** Description Initiate patch download ** ** Input Params ** format_type patch format type ** (NFC_HAL_PRM_FORMAT_BIN, ** NFC_HAL_PRM_FORMAT_HCD, or ** NFC_HAL_PRM_FORMAT_NCD) ** ** dest_address destination adderess (needed for BIN format ** only) ** ** p_patchram_buf pointer to patchram buffer. If NULL, then ** app must call HAL_NfcPrmDownloadContinue ** when NFC_HAL_PRM_CONTINUE_EVT is received, ** to send the next segment of patchram ** ** patchram_len size of p_patchram_buf (if non-NULL) ** ** patchram_delay The delay after each patch. ** If the given value is less than the size of ** the patchram, the size of patchram is used ** instead. ** ** p_cback callback for download status ** ** ** Returns TRUE if successful, otherwise FALSE ** ** *******************************************************************************/ bool HAL_NfcPrmDownloadStart(tNFC_HAL_PRM_FORMAT format_type, uint32_t dest_address, uint8_t* p_patchram_buf, uint32_t patchram_len, uint32_t patchram_delay, tNFC_HAL_PRM_CBACK* p_cback); /******************************************************************************* ** ** Function HAL_NfcPrmDownloadContinue ** ** Description Send next segment of patchram to controller. Called when ** NFC_HAL_PRM_CONTINUE_EVT is received. ** ** Only needed if HAL_NfcPrmDownloadStart was called with ** p_patchram_buf=NULL ** ** Input Params p_patch_data pointer to patch data ** patch_data_len patch data len ** ** Returns TRUE if successful, otherwise FALSE ** *******************************************************************************/ bool HAL_NfcPrmDownloadContinue(uint8_t* p_patch_data, uint16_t patch_data_len); /******************************************************************************* ** ** Function HAL_NfcPrmSetI2cPatch ** ** Description Specify patchfile for BCM20791B3 I2C fix. This fix ** must be downloaded prior to initial patch download for I2C ** transport ** ** Input Params p_i2c_patchfile_buf: pointer to patch for i2c fix ** i2c_patchfile_len: length of patch ** prei2c_delay: the delay before downloading main patch ** if 0 is given, NFC_HAL_PRM_POST_I2C_FIX_DELAY ** is used instead. ** ** Returns Nothing ** ** *******************************************************************************/ void HAL_NfcPrmSetI2cPatch(uint8_t* p_i2c_patchfile_buf, uint16_t i2c_patchfile_len, uint32_t prei2c_delay); /******************************************************************************* ** ** Function HAL_NfcPrmSetSpdNciCmdPayloadSize ** ** Description Set Host-to-NFCC NCI message size for secure patch download ** ** This API must be called before calling ** HAL_NfcPrmDownloadStart. If the API is not called, then PRM ** will use the default message size. ** ** Typically, this API is only called for platforms that have ** message-size limitations in the transport/driver. ** ** Valid message size range: ** NFC_HAL_PRM_MIN_NCI_CMD_PAYLOAD_SIZE to 255. ** ** Returns HAL_NFC_STATUS_OK if successful ** HAL_NFC_STATUS_FAILED otherwise ** ** *******************************************************************************/ tHAL_NFC_STATUS HAL_NfcPrmSetSpdNciCmdPayloadSize(uint8_t max_payload_size); /******************************************************************************* ** ** Function HAL_NfcSetMaxRfDataCredits ** ** Description This function sets the maximum RF data credit for HAL. ** If 0, use the value reported from NFCC. ** ** Returns none ** *******************************************************************************/ void HAL_NfcSetMaxRfDataCredits(uint8_t max_credits); /******************************************************************************* ** ** Function HAL_NfcSetTraceLevel ** ** Description This function sets the trace level for HAL. If called with ** a value of 0xFF, it simply returns the current trace level. ** ** Returns The new or current trace level ** *******************************************************************************/ uint8_t HAL_NfcSetTraceLevel(uint8_t new_level); #ifdef __cplusplus } #endif #endif /* NFC_HAL_INT_API_H */