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