• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  *  this file contains the NCI transport internal definitions and functions.
23  *
24  ******************************************************************************/
25 
26 #ifndef NFC_HAL_INT_H
27 #define NFC_HAL_INT_H
28 
29 #include "nfc_hal_target.h"
30 #include "gki.h"
31 #include "nci_defs.h"
32 #include "nfc_brcm_defs.h"
33 #include "nfc_hal_api.h"
34 #include "nfc_hal_int_api.h"
35 
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39 
40 /****************************************************************************
41 ** NFC HAL TASK transport definitions
42 ****************************************************************************/
43 /* NFC HAL Task event masks */
44 #define NFC_HAL_TASK_EVT_DATA_RDY               EVENT_MASK (APPL_EVT_0)
45 #define NFC_HAL_TASK_EVT_INITIALIZE             EVENT_MASK (APPL_EVT_5)
46 #define NFC_HAL_TASK_EVT_TERMINATE              EVENT_MASK (APPL_EVT_6)
47 #define NFC_HAL_TASK_EVT_POWER_CYCLE            EVENT_MASK (APPL_EVT_7)
48 
49 #define NFC_HAL_TASK_EVT_MBOX                   (TASK_MBOX_0_EVT_MASK)
50 
51 /* NFC HAL Task mailbox definitions */
52 #define NFC_HAL_TASK_MBOX                       (TASK_MBOX_0)
53 
54 /* NFC HAL Task Timer events */
55 #ifndef NFC_HAL_QUICK_TIMER_EVT_MASK
56 #define NFC_HAL_QUICK_TIMER_EVT_MASK            (TIMER_0_EVT_MASK)
57 #endif
58 
59 #ifndef NFC_HAL_QUICK_TIMER_ID
60 #define NFC_HAL_QUICK_TIMER_ID                  (TIMER_0)
61 #endif
62 
63 /* NFC HAL Task Timer types */
64 #define NFC_HAL_TTYPE_NCI_WAIT_RSP              0
65 #define NFC_HAL_TTYPE_POWER_CYCLE               1
66 #define NFC_HAL_TTYPE_NFCC_ENABLE               2
67 
68 /* NFC HAL Task Wait Response flag */
69 #define NFC_HAL_WAIT_RSP_CMD                    0x10    /* wait response on an NCI command                  */
70 #define NFC_HAL_WAIT_RSP_VSC                    0x20    /* wait response on an NCI vendor specific command  */
71 #define NFC_HAL_WAIT_RSP_PROP                   0x40    /* wait response on a proprietary command           */
72 #define NFC_HAL_WAIT_RSP_NONE                   0x00    /* not waiting for anything                         */
73 
74 typedef UINT8 tNFC_HAL_WAIT_RSP;
75 
76 #if (defined(NFC_HAL_HCI_INCLUDED) && (NFC_HAL_HCI_INCLUDED == TRUE))
77 
78 typedef UINT16 tNFC_HAL_HCI_EVT;
79 
80 #define NFC_HAL_HCI_PIPE_INFO_SIZE              5
81 
82 #define NFC_HAL_HCI_ANY_SET_PARAMETER           0x01
83 #define NFC_HAL_HCI_ANY_GET_PARAMETER           0x02
84 #define NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED 0x15
85 
86 #define NFC_HAL_HCI_SESSION_IDENTITY_INDEX      0x01
87 #define NFC_HAL_HCI_WHITELIST_INDEX             0x03
88 
89 #define NFC_HAL_HCI_ADMIN_PIPE                  0x01
90 #define NFC_HAL_HCI_HOST_ID_UICC0               0x02        /* Host ID for UICC 0 */
91 #define NFC_HAL_HCI_HOST_ID_UICC1               0x03        /* Host ID for UICC 1 */
92 #define NFC_HAL_HCI_HOST_ID_UICC2               0x04        /* Host ID for UICC 2 */
93 #define NFC_HAL_HCI_COMMAND_TYPE                0x00
94 #define NFC_HAL_HCI_RESPONSE_TYPE               0x02
95 
96 /* NFC HAL HCI responses */
97 #define NFC_HAL_HCI_ANY_OK                      0x00
98 
99 #endif
100 
101 /* Flag defintions for tNFC_HAL_NVM */
102 #define NFC_HAL_NVM_FLAGS_NO_NVM                0x01    /* No NVM available                     */
103 #define NFC_HAL_NVM_FLAGS_LPM_BAD               0x02    /* FPM patch in NVM failed CRC check    */
104 #define NFC_HAL_NVM_FLAGS_FPM_BAD               0x04    /* LPM patch in NVM failed CRC check    */
105 #define NFC_HAL_NVM_FLAGS_PATCH_PRESENT         0x08    /* Patch is present in NVM              */
106 
107 /* NFC HAL transport configuration */
108 typedef struct
109 {
110     BOOLEAN         shared_transport;           /* TRUE if using shared HCI/NCI transport */
111     UINT8           userial_baud;
112     UINT8           userial_fc;
113 } tNFC_HAL_TRANS_CFG;
114 
115 #ifdef TESTER
116 #define NFC_HAL_TRANS_CFG_QUALIFIER               /* For Insight, ncit_cfg is runtime-configurable */
117 #else
118 #define NFC_HAL_TRANS_CFG_QUALIFIER   const       /* For all other platforms, ncit_cfg is constant */
119 #endif
120 extern NFC_HAL_TRANS_CFG_QUALIFIER tNFC_HAL_TRANS_CFG nfc_hal_trans_cfg;
121 
122 /*****************************************************************************
123 * BT HCI definitions
124 *****************************************************************************/
125 #define BT_HDR      NFC_HDR
126 
127 /* Tranport message type */
128 #define HCIT_TYPE_COMMAND   0x01
129 #define HCIT_TYPE_EVENT     0x04
130 #define HCIT_TYPE_NFC       0x10
131 
132 /* Vendor-Specific BT HCI definitions */
133 #define HCI_SUCCESS                         0x00
134 #define HCI_GRP_VENDOR_SPECIFIC             (0x3F << 10)            /* 0xFC00 */
135 #define HCI_BRCM_WRITE_SLEEP_MODE           (0x0027 | HCI_GRP_VENDOR_SPECIFIC)
136 #define HCI_GRP_HOST_CONT_BASEBAND_CMDS     (0x03 << 10)            /* 0x0C00 */
137 #define HCI_RESET                           (0x0003 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
138 #define HCI_COMMAND_COMPLETE_EVT            0x0E
139 #define HCI_BRCM_WRITE_SLEEP_MODE_LENGTH    12
140 #define HCI_BRCM_UPDATE_BAUD_RATE_UNENCODED_LENGTH      0x06
141 #define HCIE_PREAMBLE_SIZE                  2
142 #define HCI_BRCM_PRE_SET_MEM                (0x000C | HCI_GRP_VENDOR_SPECIFIC)
143 #define HCI_BRCM_PRE_SET_MEM_LENGTH         10
144 #define HCI_BRCM_PRE_SET_MEM_TYPE           8
145 
146 /****************************************************************************
147 ** Internal constants and definitions
148 ****************************************************************************/
149 
150 /* NFC HAL receiving states */
151 enum
152 {
153     NFC_HAL_RCV_IDLE_ST,            /* waiting for packet type byte             */
154     NFC_HAL_RCV_NCI_MSG_ST,         /* waiting for the first byte of NCI header */
155     NFC_HAL_RCV_NCI_HDR_ST,         /* reading NCI header                       */
156     NFC_HAL_RCV_NCI_PAYLOAD_ST,     /* reading NCI payload                      */
157     NFC_HAL_RCV_BT_MSG_ST,          /* waiting for the first byte of BT header  */
158     NFC_HAL_RCV_BT_HDR_ST,          /* reading BT HCI header                    */
159     NFC_HAL_RCV_BT_PAYLOAD_ST       /* reading BT HCI payload                   */
160 };
161 
162 /* errors during NCI packet reassembly process */
163 #define NFC_HAL_NCI_RAS_TOO_BIG             0x01
164 #define NFC_HAL_NCI_RAS_ERROR               0x02
165 typedef UINT8 tNFC_HAL_NCI_RAS;
166 
167 /* NFC HAL power mode */
168 enum
169 {
170     NFC_HAL_POWER_MODE_FULL,            /* NFCC is full power mode      */
171     NFC_HAL_POWER_MODE_LAST
172 };
173 typedef UINT8 tNFC_HAL_POWER_MODE;
174 
175 
176 /* NFC HAL event for low power mode */
177 enum
178 {
179     NFC_HAL_LP_TX_DATA_EVT,                 /* DH is sending data to NFCC   */
180     NFC_HAL_LP_RX_DATA_EVT,                 /* DH received data from NFCC   */
181     NFC_HAL_LP_TIMEOUT_EVT,                 /* Timeout                      */
182     NFC_HAL_LP_LAST_EVT
183 };
184 typedef UINT8 tNFC_HAL_LP_EVT;
185 
186 #define NFC_HAL_ASSERT_NFC_WAKE      0x00   /* assert NFC_WAKE      */
187 #define NFC_HAL_DEASSERT_NFC_WAKE    0x01   /* deassert NFC_WAKE    */
188 
189 #define NFC_HAL_BT_HCI_CMD_HDR_SIZE     3   /* opcode (2) +  length (1)    */
190 #define NFC_HAL_CMD_TOUT            (2000)  /* timeout for NCI CMD (in ms) */
191 
192 #define NFC_HAL_SAVED_HDR_SIZE          (2)
193 #define NFC_HAL_SAVED_CMD_SIZE          (2)
194 
195 #ifndef NFC_HAL_DEBUG
196 #define NFC_HAL_DEBUG  TRUE
197 #endif
198 
199 #if (NFC_HAL_DEBUG == TRUE)
200 extern const char * const nfc_hal_init_state_str[];
201 #define NFC_HAL_SET_INIT_STATE(state)  HAL_TRACE_DEBUG3 ("init state: %d->%d(%s)", nfc_hal_cb.dev_cb.initializing_state, state, nfc_hal_init_state_str[state]); nfc_hal_cb.dev_cb.initializing_state = state;
202 #else
203 #define NFC_HAL_SET_INIT_STATE(state)  nfc_hal_cb.dev_cb.initializing_state = state;
204 #endif
205 
206 
207 /* NFC HAL - NFCC initializing state */
208 enum
209 {
210     NFC_HAL_INIT_STATE_IDLE,               /* Initialization is done                */
211     NFC_HAL_INIT_STATE_W4_XTAL_SET,        /* Waiting for crystal setting rsp       */
212     NFC_HAL_INIT_STATE_POST_XTAL_SET,      /* Waiting for reset ntf after xtal set  */
213     NFC_HAL_INIT_STATE_W4_NFCC_ENABLE,     /* Waiting for reset ntf atter REG_PU up */
214     NFC_HAL_INIT_STATE_W4_BUILD_INFO,      /* Waiting for build info rsp            */
215     NFC_HAL_INIT_STATE_W4_PATCH_INFO,      /* Waiting for patch info rsp            */
216     NFC_HAL_INIT_STATE_W4_APP_COMPLETE,    /* Waiting for complete from application */
217     NFC_HAL_INIT_STATE_W4_POST_INIT_DONE,  /* Waiting for complete of post init     */
218     NFC_HAL_INIT_STATE_W4_CONTROL_DONE,    /* Waiting for control release           */
219     NFC_HAL_INIT_STATE_W4_PREDISCOVER_DONE,/* Waiting for complete of prediscover   */
220     NFC_HAL_INIT_STATE_W4_NFCC_TURN_OFF,   /* Waiting for NFCC to turn OFF          */
221     NFC_HAL_INIT_STATE_CLOSING             /* Shutting down                         */
222 };
223 typedef UINT8 tNFC_HAL_INIT_STATE;
224 
225 /* NFC HAL - NFCC config items during post initialization */
226 enum
227 {
228     NFC_HAL_DM_CONFIG_LPTD,
229     NFC_HAL_DM_CONFIG_PLL_325,
230     NFC_HAL_DM_CONFIG_START_UP,
231     NFC_HAL_DM_CONFIG_I93_DATA_RATE,
232     NFC_HAL_DM_CONFIG_FW_FSM,
233     NFC_HAL_DM_CONFIG_START_UP_VSC,
234     NFC_HAL_DM_CONFIG_NONE
235 };
236 typedef UINT8 tNFC_HAL_DM_CONFIG;
237 
238 /* callback function prototype */
239 typedef struct
240 {
241     UINT16  opcode;
242     UINT16  param_len;
243     UINT8   *p_param_buf;
244 } tNFC_HAL_BTVSC_CPLT;
245 
246 typedef void (tNFC_HAL_BTVSC_CPLT_CBACK) (tNFC_HAL_BTVSC_CPLT *p1);
247 
248 #if (defined(NFC_HAL_HCI_INCLUDED) && (NFC_HAL_HCI_INCLUDED == TRUE))
249 
250 /* data type for NFC_HAL_HCI_RSP_NV_READ_EVT */
251 typedef struct
252 {
253     NFC_HDR           hdr;
254     UINT8             block;
255     UINT16            size;
256     tHAL_NFC_STATUS   status;
257 } tNFC_HAL_HCI_RSP_NV_READ_EVT;
258 
259 /* data type for NFC_HAL_HCI_RSP_NV_WRITE_EVT */
260 typedef struct
261 {
262     NFC_HDR           hdr;
263     tHAL_NFC_STATUS   status;
264 } tNFC_HAL_HCI_RSP_NV_WRITE_EVT;
265 
266 
267 /* union of all event data types */
268 typedef union
269 {
270     NFC_HDR                         hdr;
271     /* Internal events */
272     tNFC_HAL_HCI_RSP_NV_READ_EVT    nv_read;
273     tNFC_HAL_HCI_RSP_NV_WRITE_EVT   nv_write;
274 } tNFC_HAL_HCI_EVENT_DATA;
275 
276 #endif
277 /*****************************************************************************
278 ** Control block for NFC HAL
279 *****************************************************************************/
280 
281 /* Patch RAM Download Control block */
282 
283 /* PRM states */
284 enum
285 {
286     NFC_HAL_PRM_ST_IDLE,
287 
288     /* Secure patch download stated */
289     NFC_HAL_PRM_ST_SPD_COMPARE_VERSION,
290     NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER,
291     NFC_HAL_PRM_ST_SPD_DOWNLOADING,
292     NFC_HAL_PRM_ST_SPD_AUTHENTICATING,
293     NFC_HAL_PRM_ST_SPD_AUTH_DONE,
294     NFC_HAL_PRM_ST_W4_GET_VERSION
295 };
296 typedef UINT8 tNFC_HAL_PRM_STATE;
297 
298 /* Maximum number of patches (currently 2: LPM and FPM) */
299 #define NFC_HAL_PRM_MAX_PATCH_COUNT    2
300 #define NFC_HAL_PRM_PATCH_MASK_ALL     0xFFFFFFFF
301 #define NFC_HAL_PRM_MAX_CHIP_VER_LEN   8
302 
303 /* Structures for PRM Control Block */
304 typedef struct
305 {
306     UINT8               power_mode;
307     UINT16              len;
308 } tNFC_HAL_PRM_PATCHDESC;
309 
310 typedef struct
311 {
312     tNFC_HAL_PRM_STATE  state;                  /* download state */
313     UINT32              flags;                  /* internal flags */
314     UINT16              cur_patch_len_remaining;/* bytes remaining in patchfile to process     */
315     const UINT8*        p_cur_patch_data;       /* pointer to patch currently being downloaded */
316     UINT16              cur_patch_offset;       /* offset of next byte to process              */
317     UINT32              dest_ram;
318     TIMER_LIST_ENT      timer;                  /* Timer for patch download                    */
319     void               *p_param;                /* general purpose param for PRM               */
320     UINT8               param_idx;              /* information related to general purpose param*/
321 
322     /* Secure Patch Download */
323     UINT32              spd_patch_needed_mask;  /* Mask of patches that need to be downloaded */
324     UINT8               spd_patch_count;        /* Number of patches left to download */
325     UINT8               spd_cur_patch_idx;      /* Current patch being downloaded */
326 
327     tNFC_HAL_PRM_PATCHDESC spd_patch_desc[NFC_HAL_PRM_MAX_PATCH_COUNT];
328 
329     /* I2C-patch */
330     UINT8               *p_spd_patch;           /* pointer to spd patch             */
331     UINT16              spd_patch_len_remaining;/* patch length                     */
332     UINT16              spd_patch_offset;       /* offset of next byte to process   */
333 
334     tNFC_HAL_PRM_FORMAT format;                 /* format of patch ram              */
335     tNFC_HAL_PRM_CBACK  *p_cback;               /* Callback for download status notifications */
336     UINT32              patchram_delay;         /* the dealy after patch */
337 } tNFC_HAL_PRM_CB;
338 
339 /* Information about current patch in NVM */
340 typedef struct
341 {
342     UINT16              project_id;             /* Current project_id of patch in nvm       */
343     UINT16              ver_major;              /* Current major version of patch in nvm    */
344     UINT16              ver_minor;              /* Current minor version of patch in nvm    */
345     UINT16              fpm_size;               /* Current size of FPM patch in nvm         */
346     UINT16              lpm_size;               /* Current size of LPM patch in nvm         */
347     UINT8               flags;                  /* See NFC_HAL_NVM_FLAGS_* flag definitions */
348     UINT8               nvm_type;               /* Current NVM Type - UICC/EEPROM           */
349     UINT8               chip_ver[NFC_HAL_PRM_MAX_CHIP_VER_LEN]; /* patch chip version       */
350 } tNFC_HAL_NVM;
351 
352 /* Patch for I2C fix */
353 typedef struct
354 {
355     UINT8               *p_patch;               /* patch for i2c fix                */
356     UINT32              prei2c_delay;           /* the dealy after preI2C patch */
357     UINT16              len;                    /* i2c patch length                 */
358 } tNFC_HAL_PRM_I2C_FIX_CB;
359 
360 /* Control block for NCI transport */
361 typedef struct
362 {
363     UINT8               nci_ctrl_size;      /* Max size for NCI messages                              */
364     UINT8               rcv_state;          /* current rx state                                       */
365     UINT16              rcv_len;            /* bytes remaining to be received in current rx state     */
366     NFC_HDR             *p_rcv_msg;         /* buffer to receive NCI message                          */
367     NFC_HDR             *p_frag_msg;        /* fragmented NCI message; waiting for last fragment      */
368     NFC_HDR             *p_pend_cmd;        /* pending NCI message; waiting for NFCC state to be free */
369     tNFC_HAL_NCI_RAS    nci_ras;            /* nci reassembly error status                            */
370     TIMER_LIST_ENT      nci_wait_rsp_timer; /* Timer for waiting for nci command response             */
371     tNFC_HAL_WAIT_RSP   nci_wait_rsp;       /* nci wait response flag                                 */
372     UINT8               last_hdr[NFC_HAL_SAVED_HDR_SIZE];/* part of last NCI command header           */
373     UINT8               last_cmd[NFC_HAL_SAVED_CMD_SIZE];/* part of last NCI command payload          */
374     void                *p_vsc_cback;       /* the callback function for last VSC command             */
375 } tNFC_HAL_NCIT_CB;
376 
377 /* Control block for device initialization */
378 typedef struct
379 {
380     tNFC_HAL_INIT_STATE     initializing_state;     /* state of initializing NFCC               */
381 
382     UINT32                  brcm_hw_id;             /* BRCM NFCC HW ID                          */
383     tNFC_HAL_DM_CONFIG      next_dm_config;         /* next config in post initialization       */
384     UINT8                   next_startup_vsc;       /* next start-up VSC offset in post init    */
385 
386     tNFC_HAL_POWER_MODE     power_mode;             /* NFCC power mode                          */
387     UINT8                   snooze_mode;            /* current snooze mode                      */
388     UINT8                   new_snooze_mode;        /* next snooze mode after receiving cmpl    */
389     UINT8                   nfc_wake_active_mode;   /* NFC_HAL_LP_ACTIVE_LOW/HIGH               */
390     TIMER_LIST_ENT          lp_timer;               /* timer for low power mode                 */
391 
392 
393     tHAL_NFC_STATUS_CBACK   *p_prop_cback;          /* callback to notify complete of proprietary update */
394 } tNFC_HAL_DEV_CB;
395 
396 #if (defined(NFC_HAL_HCI_INCLUDED) && (NFC_HAL_HCI_INCLUDED == TRUE))
397 
398 /* data members for NFC_HAL-HCI */
399 typedef struct
400 {
401     TIMER_LIST_ENT          hci_timer;                /* Timer to avoid indefinitely waiting for response */
402     UINT8                   *p_hci_netwk_info_buf;    /* Buffer for reading HCI Network information */
403     UINT8                   *p_hci_netwk_dh_info_buf; /* Buffer for reading HCI Network DH information */
404     UINT8                   hci_netwk_config_block;   /* Rsp awaiting for hci network configuration block */
405     BOOLEAN                 b_wait_hcp_conn_create_rsp; /* Waiting for hcp connection create response */
406     BOOLEAN                 clear_all_pipes_to_uicc1; /* UICC1 was restarted for patch download */
407     BOOLEAN                 update_session_id;        /* Next response from NFCC is to Get Session id cmd */
408     BOOLEAN                 hci_fw_workaround;        /* HAL HCI Workaround need */
409     BOOLEAN                 hci_fw_validate_netwk_cmd;/* Flag to indicate if hci network ntf to validate */
410     UINT8                   hcp_conn_id;              /* NCI Connection id for HCP */
411     UINT8                   dh_session_id[1];         /* Byte 0 of DH Session ID */
412 } tNFC_HAL_HCI_CB;
413 
414 #endif
415 
416 #define NFC_HAL_FLAGS_NEED_DISABLE_VSC  0x01
417 typedef UINT8 tNFC_HAL_FLAGS;
418 
419 typedef struct
420 {
421     tHAL_NFC_CBACK          *p_stack_cback;     /* Callback for HAL event notification  */
422     tHAL_NFC_DATA_CBACK     *p_data_cback;      /* Callback for data event notification  */
423 
424     TIMER_LIST_Q            quick_timer_queue;  /* timer list queue                 */
425     TIMER_LIST_ENT          timer;              /* timer for NCI transport task     */
426 
427     tNFC_HAL_NCIT_CB        ncit_cb;            /* NCI transport */
428     tNFC_HAL_DEV_CB         dev_cb;             /* device initialization */
429     tNFC_HAL_NVM            nvm_cb;             /* Information about current patch in NVM */
430 
431     /* Patchram control block */
432     tNFC_HAL_PRM_CB         prm;
433     tNFC_HAL_PRM_I2C_FIX_CB prm_i2c;
434 
435 #if (defined(NFC_HAL_HCI_INCLUDED) && (NFC_HAL_HCI_INCLUDED == TRUE))
436     /* data members for NFC_HAL-HCI */
437     tNFC_HAL_HCI_CB         hci_cb;
438 #endif
439 
440     UINT8                   pre_discover_done;  /* TRUE, when the prediscover config is complete */
441     tNFC_HAL_FLAGS          hal_flags;
442     UINT8                   pre_set_mem_idx;
443 
444     UINT8                   max_rf_credits;     /* NFC Max RF data credits */
445     UINT8                   max_ee;             /* NFC Max number of NFCEE supported by NFCC */
446     UINT8                   trace_level;        /* NFC HAL trace level */
447 } tNFC_HAL_CB;
448 
449 /* Global NCI data */
450 #if NFC_DYNAMIC_MEMORY == FALSE
451 extern tNFC_HAL_CB   nfc_hal_cb;
452 #else
453 #define nfc_hal_cb (*nfc_hal_cb_ptr)
454 extern tNFC_HAL_CB *nfc_hal_cb_ptr;
455 #endif
456 extern UINT8 *p_nfc_hal_pre_discover_cfg;
457 /****************************************************************************
458 ** Internal nfc functions
459 ****************************************************************************/
460 
461 /* From nfc_hal_main.c */
462 UINT32 nfc_hal_main_task (UINT32 param);
463 void   nfc_hal_main_init (void);
464 void   nfc_hal_main_close (void);
465 void   nfc_hal_main_pre_init_done (tHAL_NFC_STATUS);
466 void   nfc_hal_main_exit_op_done (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
467 void   nfc_hal_main_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
468 void   nfc_hal_main_stop_quick_timer (TIMER_LIST_ENT *p_tle);
469 void   nfc_hal_main_send_error (tHAL_NFC_STATUS status);
470 void   nfc_hal_send_nci_msg_to_nfc_task (NFC_HDR * p_msg);
471 
472 /* nfc_hal_nci.c */
473 BOOLEAN nfc_hal_nci_receive_msg (UINT8 byte);
474 BOOLEAN nfc_hal_nci_preproc_rx_nci_msg (NFC_HDR *p_msg);
475 NFC_HDR* nfc_hal_nci_postproc_rx_nci_msg (void);
476 void    nfc_hal_nci_assemble_nci_msg (void);
477 void    nfc_hal_nci_add_nfc_pkt_type (NFC_HDR *p_msg);
478 void    nfc_hal_nci_send_cmd (NFC_HDR *p_buf);
479 void    nfc_hal_nci_cmd_timeout_cback (void *p_tle);
480 
481 /* nfc_hal_dm.c */
482 void nfc_hal_dm_init (void);
483 void nfc_hal_dm_set_xtal_freq_index (void);
484 void nfc_hal_dm_set_power_level_zero (void);
485 void nfc_hal_dm_send_get_build_info_cmd (void);
486 void nfc_hal_dm_proc_msg_during_init (NFC_HDR *p_msg);
487 void nfc_hal_dm_proc_msg_during_exit (NFC_HDR *p_msg);
488 void nfc_hal_dm_config_nfcc (void);
489 void nfc_hal_dm_send_nci_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_NCI_CBACK *p_cback);
490 void nfc_hal_dm_send_bt_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_BTVSC_CPLT_CBACK *p_cback);
491 void nfc_hal_dm_set_nfc_wake (UINT8 cmd);
492 void nfc_hal_dm_pre_init_nfcc (void);
493 void nfc_hal_dm_shutting_down_nfcc (void);
494 BOOLEAN nfc_hal_dm_power_mode_execute (tNFC_HAL_LP_EVT event);
495 void nfc_hal_dm_send_pend_cmd (void);
496 tHAL_NFC_STATUS nfc_hal_dm_set_config (UINT8 tlv_size, UINT8 *p_param_tlvs, tNFC_HAL_NCI_CBACK *p_cback);
497 BOOLEAN nfc_hal_dm_check_pre_set_mem (void);
498 tNFC_HAL_NCI_CBACK * nfc_hal_dm_got_vs_rsp (void);
499 
500 
501 /* nfc_hal_prm.c */
502 void nfc_hal_prm_spd_reset_ntf (UINT8 reset_reason, UINT8 reset_type);
503 void nfc_hal_prm_nci_command_complete_cback (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
504 void nfc_hal_prm_process_timeout (void *p_tle);
505 
506 #if (defined(NFC_HAL_HCI_INCLUDED) && (NFC_HAL_HCI_INCLUDED == TRUE))
507 /* nfc_hal_hci.c */
508 void nfc_hal_hci_enable (void);
509 void nfc_hal_hci_evt_hdlr (tNFC_HAL_HCI_EVENT_DATA *p_evt_data);
510 void nfc_hal_hci_handle_hci_netwk_info (UINT8 *p_data);
511 void nfc_hal_hci_handle_hcp_pkt_from_hc (UINT8 *p_data);
512 NFC_HDR* nfc_hal_hci_postproc_hcp (void);
513 BOOLEAN nfc_hal_hci_handle_hcp_pkt_to_hc (UINT8 *p_data);
514 void nfc_hal_hci_timeout_cback (void *p_tle);
515 void nfc_hal_hci_handle_build_info (UINT8 chipverlen, UINT8 *p_chipverstr);
516 #else
517 #define nfc_hal_hci_enable()    NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_IDLE);
518 #define nfc_hal_hci_handle_build_info(p,a)
519 #define nfc_hal_hci_evt_hdlr(p);
520 #endif
521 
522 
523 /* Define default NCI protocol trace function (if protocol tracing is enabled) */
524 #if (defined(NFC_HAL_TRACE_PROTOCOL) && (NFC_HAL_TRACE_PROTOCOL == TRUE))
525 #if !defined (DISP_NCI)
526 #define DISP_NCI    (DispNci)
527 void DispNci (UINT8 *p, UINT16 len, BOOLEAN is_recv);
528 #endif  /* DISP_NCI */
529 
530 /* For displaying vendor-specific HCI commands */
531 void DispHciCmd (BT_HDR *p_buf);
532 void DispHciEvt (BT_HDR *p_buf);
533 #endif /* NFC_HAL_TRACE_PROTOCOL */
534 
535 #ifdef __cplusplus
536 }
537 #endif
538 
539 #endif /* NFC_HAL_INT_H */
540