Home | History | Annotate | Download | only in int
      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) */
     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     NFC_HAL_XTAL_INDEX_SPECIAL = 0xFF
     48 };
     49 typedef UINT8 tNFC_HAL_XTAL_INDEX;
     50 
     51 /* Broadcom specific device initialization before sending NCI reset */
     52 
     53 typedef 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 
     62 typedef 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
     87 typedef UINT8 tNFC_HAL_PRM_FORMAT;
     88 
     89 /*****************************************************************************
     90 **  Patch RAM Callback for event notificaton
     91 *****************************************************************************/
     92 /* Events for tNFC_HAL_PRM_CBACK */
     93 enum
     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 
    105 typedef void (tNFC_HAL_PRM_CBACK) (UINT8 event);
    106 
    107 typedef UINT8 tNFC_HAL_NCI_EVT;     /* MT + Opcode */
    108 typedef void (tNFC_HAL_NCI_CBACK) (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
    109 
    110 #ifdef __cplusplus
    111 extern "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 *******************************************************************************/
    123 void 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 *******************************************************************************/
    138 tHAL_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 *******************************************************************************/
    163 tHAL_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 *******************************************************************************/
    201 BOOLEAN 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 *******************************************************************************/
    224 BOOLEAN 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 *******************************************************************************/
    244 void 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 *******************************************************************************/
    267 tHAL_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 *******************************************************************************/
    279 void 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 *******************************************************************************/
    291 UINT8 HAL_NfcSetTraceLevel (UINT8 new_level);
    292 
    293 
    294 #ifdef __cplusplus
    295 }
    296 #endif
    297 
    298 #endif /* NFC_HAL_INT_API_H */
    299 
    300