blob: 5385bb4e6c17d94767b7197491e60bc23ebbfdc8 [file] [log] [blame]
/******************************************************************************
*
* Copyright (C) 2009-2012 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
};
typedef UINT8 tNFC_HAL_XTAL_INDEX;
/* Broadcom specific device initialization before sending NCI reset */
#define NFC_HAL_DEV_INIT_FLAGS_SET_XTAL_FREQ 0x02 /* set crystal frequency */
typedef UINT8 tNFC_HAL_DEV_INIT_FLAGS;
typedef struct
{
tNFC_HAL_DEV_INIT_FLAGS flags;
UINT16 xtal_freq;
} tNFC_HAL_DEV_INIT_CFG;
/*****************************************************************************
** Low Power Mode definitions
*****************************************************************************/
#define NFC_HAL_LP_SNOOZE_MODE_NONE NFC_SNOOZE_MODE_NONE /* Snooze mode disabled */
#define NFC_HAL_LP_SNOOZE_MODE_UART NFC_SNOOZE_MODE_UART /* Snooze mode for UART */
#define NFC_HAL_LP_SNOOZE_MODE_SPI_I2C NFC_SNOOZE_MODE_SPI_I2C /* Snooze mode for SPI/I2C */
#define NFC_HAL_LP_ACTIVE_LOW NFC_SNOOZE_ACTIVE_LOW /* high to low voltage is asserting */
#define NFC_HAL_LP_ACTIVE_HIGH NFC_SNOOZE_ACTIVE_HIGH /* low to high voltage is asserting */
/*****************************************************************************
** 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 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 event);
typedef UINT8 tNFC_HAL_NCI_EVT; /* MT + Opcode */
typedef void (tNFC_HAL_NCI_CBACK) (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *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 send an RESET and GET_PATCH_VERSION
** command to NFCC.
**
** p_cback - The callback function to receive the command
** status
**
** 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 (tNFC_HAL_NCI_CBACK *p_cback);
/*******************************************************************************
**
** 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 snooze_mode,
UINT8 idle_threshold_dh,
UINT8 idle_threshold_nfcc,
UINT8 nfc_wake_active_mode,
UINT8 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
**
**
*******************************************************************************/
BOOLEAN HAL_NfcPrmDownloadStart (tNFC_HAL_PRM_FORMAT format_type,
UINT32 dest_address,
UINT8 *p_patchram_buf,
UINT32 patchram_len,
UINT32 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
**
*******************************************************************************/
BOOLEAN HAL_NfcPrmDownloadContinue (UINT8 *p_patch_data,
UINT16 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 *p_i2c_patchfile_buf,
UINT16 i2c_patchfile_len, UINT32 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 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 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 HAL_NfcSetTraceLevel (UINT8 new_level);
#ifdef __cplusplus
}
#endif
#endif /* NFC_HAL_INT_API_H */