nfc_hal_int.h revision 45e68232b8524aca5165dca28b994ec8c11593b1
16bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis/******************************************************************************
26bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *
36bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *  Copyright (C) 2009-2013 Broadcom Corporation
46bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *
56bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *  Licensed under the Apache License, Version 2.0 (the "License");
66bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *  you may not use this file except in compliance with the License.
76bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *  You may obtain a copy of the License at:
86bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *
96bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *  http://www.apache.org/licenses/LICENSE-2.0
106bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *
116bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *  Unless required by applicable law or agreed to in writing, software
126bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *  distributed under the License is distributed on an "AS IS" BASIS,
136bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
146bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *  See the License for the specific language governing permissions and
156bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *  limitations under the License.
166bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *
176bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis ******************************************************************************/
186bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis
1940d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose
205ac1df3e15f91ed663826faec7efe2462c18d98cAnna Zaks/******************************************************************************
216bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *
226bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *  this file contains the NCI transport internal definitions and functions.
236bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis *
2440d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose ******************************************************************************/
25964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose
26964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#ifndef NFC_HAL_INT_H
27964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#define NFC_HAL_INT_H
28964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose
29964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#include "nfc_hal_target.h"
30964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#include "gki.h"
31964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#include "nci_defs.h"
32964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#include "nfc_brcm_defs.h"
3340d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose#include "nfc_hal_api.h"
3440d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose#include "nfc_hal_int_api.h"
3540d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose
3640d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose#ifdef __cplusplus
3740d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Roseextern "C" {
3840d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose#endif
3940d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose
40964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose/****************************************************************************
41964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose** NFC HAL TASK transport definitions
42964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose****************************************************************************/
43964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose/* NFC HAL Task event masks */
44964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#define NFC_HAL_TASK_EVT_DATA_RDY               EVENT_MASK (APPL_EVT_0)
45964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#define NFC_HAL_TASK_EVT_INITIALIZE             EVENT_MASK (APPL_EVT_5)
46964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#define NFC_HAL_TASK_EVT_TERMINATE              EVENT_MASK (APPL_EVT_6)
47964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#define NFC_HAL_TASK_EVT_POWER_CYCLE            EVENT_MASK (APPL_EVT_7)
48964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose
4940d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose#define NFC_HAL_TASK_EVT_MBOX                   (TASK_MBOX_0_EVT_MASK)
5040d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose
5140d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose/* NFC HAL Task mailbox definitions */
5240d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose#define NFC_HAL_TASK_MBOX                       (TASK_MBOX_0)
5340d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose
5440d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose/* NFC HAL Task Timer events */
5540d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose#ifndef NFC_HAL_QUICK_TIMER_EVT_MASK
56964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#define NFC_HAL_QUICK_TIMER_EVT_MASK            (TIMER_0_EVT_MASK)
57964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#endif
58964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose
59964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#ifndef NFC_HAL_QUICK_TIMER_ID
60964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#define NFC_HAL_QUICK_TIMER_ID                  (TIMER_0)
61964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose#endif
62964490c0a8bd3398dc85d224a167ca9c35a36c85Jordan Rose
6340d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose/* NFC HAL Task Timer types */
6440d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose#define NFC_HAL_TTYPE_NCI_WAIT_RSP              0
6540d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose#define NFC_HAL_TTYPE_POWER_CYCLE               1
6640d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose#define NFC_HAL_TTYPE_NFCC_ENABLE               2
6740d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose
6840d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose/* NFC HAL Task Wait Response flag */
6940d8551890bc8454c4e0a28c9072c9c1d1dd588aJordan Rose#define NFC_HAL_WAIT_RSP_CMD                    0x10    /* wait response on an NCI command                  */
706bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis#define NFC_HAL_WAIT_RSP_VSC                    0x20    /* wait response on an NCI vendor specific command  */
716bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis#define NFC_HAL_WAIT_RSP_PROP                   0x40    /* wait response on a proprietary command           */
7257300760964904cc022a175643342f29f46b7e6bAnna Zaks#define NFC_HAL_WAIT_RSP_NONE                   0x00    /* not waiting for anything                         */
736bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis
7457300760964904cc022a175643342f29f46b7e6bAnna Zakstypedef UINT8 tNFC_HAL_WAIT_RSP;
7557300760964904cc022a175643342f29f46b7e6bAnna Zaks
7657300760964904cc022a175643342f29f46b7e6bAnna Zakstypedef UINT16 tNFC_HAL_HCI_EVT;
7757300760964904cc022a175643342f29f46b7e6bAnna Zaks
7857300760964904cc022a175643342f29f46b7e6bAnna Zaks
793f5e8d87dbf449d8b39fe96068415428594d370eAnna Zaks#define NFC_HAL_HCI_DH_TARGET_HANDLE            0xF2
803152b3cb5b6a2f797d0972c81a5eb3fd69c0d620Anna Zaks#define NFC_HAL_HCI_UICC0_TARGET_HANDLE         0xF3
81063e0887ad65d666d23ee3178436ad6507abbd1bAnna Zaks#define NFC_HAL_HCI_UICC1_TARGET_HANDLE         0xF4
826bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis
83514f2c9dcb9e04b52929c5b141a6fe88bd68b33fTed Kremenek#define NFC_HAL_HCI_SESSION_ID_LEN              0x08
84514f2c9dcb9e04b52929c5b141a6fe88bd68b33fTed Kremenek#define NFC_HAL_HCI_NETWK_INFO_SIZE             184
85514f2c9dcb9e04b52929c5b141a6fe88bd68b33fTed Kremenek#define NFC_HAL_HCI_DH_NETWK_INFO_SIZE          111
86514f2c9dcb9e04b52929c5b141a6fe88bd68b33fTed Kremenek#define NFC_HAL_HCI_MIN_NETWK_INFO_SIZE         12
878ff5c41f2bde7ebbe568b4c15e59f14b8befae66Anna Zaks#define NFC_HAL_HCI_MIN_DH_NETWK_INFO_SIZE      11
8818c66fdc3c4008d335885695fe36fb5353c5f672Ted Kremenek#define NFC_HAL_HCI_PIPE_INFO_SIZE              5
8918c66fdc3c4008d335885695fe36fb5353c5f672Ted Kremenek
90514f2c9dcb9e04b52929c5b141a6fe88bd68b33fTed Kremenek#define NFC_HAL_HCI_ANY_SET_PARAMETER           0x01
91514f2c9dcb9e04b52929c5b141a6fe88bd68b33fTed Kremenek#define NFC_HAL_HCI_ANY_GET_PARAMETER           0x02
928ff5c41f2bde7ebbe568b4c15e59f14b8befae66Anna Zaks#define NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED 0x15
9318c66fdc3c4008d335885695fe36fb5353c5f672Ted Kremenek
9457300760964904cc022a175643342f29f46b7e6bAnna Zaks#define NFC_HAL_HCI_WHITELIST_INDEX             0x03
953f5e8d87dbf449d8b39fe96068415428594d370eAnna Zaks
96514f2c9dcb9e04b52929c5b141a6fe88bd68b33fTed Kremenek#define NFC_HAL_HCI_ADMIN_PIPE                  0x01
97514f2c9dcb9e04b52929c5b141a6fe88bd68b33fTed Kremenek#define NFC_HAL_HCI_HOST_ID_UICC0               0x02        /* Host ID for UICC 0 */
98777d706547ebc751d998134774d9d5388fff8e02Anna Zaks#define NFC_HAL_HCI_HOST_ID_UICC1               0x03        /* Host ID for UICC 1 */
99777d706547ebc751d998134774d9d5388fff8e02Anna Zaks#define NFC_HAL_HCI_COMMAND_TYPE                0x00
100777d706547ebc751d998134774d9d5388fff8e02Anna Zaks#define NFC_HAL_HCI_RESPONSE_TYPE               0x02
1016bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis
1026bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis/* NFC HAL HCI responses */
1036bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis#define NFC_HAL_HCI_ANY_OK                      0x00
1046bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis
1056bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis/* Flag defintions for tNFC_HAL_NVM */
1066bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis#define NFC_HAL_NVM_FLAGS_NO_NVM                0x01    /* No NVM available                     */
1076bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis#define NFC_HAL_NVM_FLAGS_LPM_BAD               0x02    /* FPM patch in NVM failed CRC check    */
1086bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis#define NFC_HAL_NVM_FLAGS_FPM_BAD               0x04    /* LPM patch in NVM failed CRC check    */
1096bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis#define NFC_HAL_NVM_FLAGS_PATCH_PRESENT         0x08    /* Patch is present in NVM              */
1106bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis
1116bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis/* NFC HAL transport configuration */
1126bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidistypedef struct
1136bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis{
114255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek    BOOLEAN         shared_transport;           /* TRUE if using shared HCI/NCI transport */
115255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek    UINT8           userial_baud;
1167b73e0832b20af1f43601a3d19e76d02d9f4dce5Ted Kremenek    UINT8           userial_fc;
1177b73e0832b20af1f43601a3d19e76d02d9f4dce5Ted Kremenek} tNFC_HAL_TRANS_CFG;
118a2a860306e3697fcf7a12c5ba59551ca60578968Anna Zaks
119a2a860306e3697fcf7a12c5ba59551ca60578968Anna Zaks#ifdef TESTER
120a2a860306e3697fcf7a12c5ba59551ca60578968Anna Zaks#define NFC_HAL_TRANS_CFG_QUALIFIER               /* For Insight, ncit_cfg is runtime-configurable */
12139ac1876f6f9a1a8e0070f0df61036c7ba05202bAnna Zaks#else
1228bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek#define NFC_HAL_TRANS_CFG_QUALIFIER   const       /* For all other platforms, ncit_cfg is constant */
1236bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis#endif
12457300760964904cc022a175643342f29f46b7e6bAnna Zaksextern NFC_HAL_TRANS_CFG_QUALIFIER tNFC_HAL_TRANS_CFG nfc_hal_trans_cfg;
12557300760964904cc022a175643342f29f46b7e6bAnna Zaks
12657300760964904cc022a175643342f29f46b7e6bAnna Zaks/*****************************************************************************
12757300760964904cc022a175643342f29f46b7e6bAnna Zaks* BT HCI definitions
1285d0ea6d62e076c776ddad028c4eb615783be1323Anna Zaks*****************************************************************************/
1295d0ea6d62e076c776ddad028c4eb615783be1323Anna Zaks#define BT_HDR      NFC_HDR
13066c486f275531df6362b3511fc3af6563561801bTed Kremenek
13166c486f275531df6362b3511fc3af6563561801bTed Kremenek/* Tranport message type */
132ebae6d0209e1ec3d5ea14f9e63bd0d740218ed14Anna Zaks#define HCIT_TYPE_COMMAND   0x01
1335d0ea6d62e076c776ddad028c4eb615783be1323Anna Zaks#define HCIT_TYPE_EVENT     0x04
1346bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis#define HCIT_TYPE_NFC       0x10
1356bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis
1366bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis/* Vendor-Specific BT HCI definitions */
137461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks#define HCI_SUCCESS                         0x00
1384e4d08403ca5cfd4d558fa2936215d3a4e5a528dDavid Blaikie#define HCI_GRP_VENDOR_SPECIFIC             (0x3F << 10)            /* 0xFC00 */
1394e4d08403ca5cfd4d558fa2936215d3a4e5a528dDavid Blaikie#define HCI_BRCM_WRITE_SLEEP_MODE           (0x0027 | HCI_GRP_VENDOR_SPECIFIC)
140461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks#define HCI_GRP_HOST_CONT_BASEBAND_CMDS     (0x03 << 10)            /* 0x0C00 */
141461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks#define HCI_RESET                           (0x0003 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
142eeea7c44a6986752fedee1ef1bcef855db373872Anna Zaks#define HCI_COMMAND_COMPLETE_EVT            0x0E
14339ac1876f6f9a1a8e0070f0df61036c7ba05202bAnna Zaks#define HCI_BRCM_WRITE_SLEEP_MODE_LENGTH    12
14439ac1876f6f9a1a8e0070f0df61036c7ba05202bAnna Zaks#define HCI_BRCM_UPDATE_BAUD_RATE_UNENCODED_LENGTH      0x06
14539ac1876f6f9a1a8e0070f0df61036c7ba05202bAnna Zaks#define HCIE_PREAMBLE_SIZE                  2
146955cd444f445bcdbade1cdd3926254c8ee7890d8Anna Zaks
147955cd444f445bcdbade1cdd3926254c8ee7890d8Anna Zaks/****************************************************************************
148c7ecc43c33a21b82c49664910b19fcc1f555aa51Anna Zaks** Internal constants and definitions
149c7ecc43c33a21b82c49664910b19fcc1f555aa51Anna Zaks****************************************************************************/
150fadcd5d5bbe1bfc1c6b8d819cc2242f780a49fecAnna Zaks
151fadcd5d5bbe1bfc1c6b8d819cc2242f780a49fecAnna Zaks/* NFC HAL receiving states */
152fadcd5d5bbe1bfc1c6b8d819cc2242f780a49fecAnna Zaksenum
1536bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis{
1546bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    NFC_HAL_RCV_IDLE_ST,            /* waiting for packet type byte             */
1556bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    NFC_HAL_RCV_NCI_MSG_ST,         /* waiting for the first byte of NCI header */
1566bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    NFC_HAL_RCV_NCI_HDR_ST,         /* reading NCI header                       */
1576bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    NFC_HAL_RCV_NCI_PAYLOAD_ST,     /* reading NCI payload                      */
1586bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    NFC_HAL_RCV_BT_MSG_ST,          /* waiting for the first byte of BT header  */
1596bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    NFC_HAL_RCV_BT_HDR_ST,          /* reading BT HCI header                    */
1606bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    NFC_HAL_RCV_BT_PAYLOAD_ST       /* reading BT HCI payload                   */
1616bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis};
1626bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis
1636bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis/* errors during NCI packet reassembly process */
1646bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis#define NFC_HAL_NCI_RAS_TOO_BIG             0x01
1653f10e32b15e54f507aed90cb72d73c7acaa500bbAnna Zaks#define NFC_HAL_NCI_RAS_ERROR               0x02
1663f10e32b15e54f507aed90cb72d73c7acaa500bbAnna Zakstypedef UINT8 tNFC_HAL_NCI_RAS;
1673f10e32b15e54f507aed90cb72d73c7acaa500bbAnna Zaks
1683f10e32b15e54f507aed90cb72d73c7acaa500bbAnna Zaks/* NFC HAL power mode */
169eeea7c44a6986752fedee1ef1bcef855db373872Anna Zaksenum
17017a38e2636a8b1ce473fc6504c4b16cb09db29f4Jordy Rose{
17117a38e2636a8b1ce473fc6504c4b16cb09db29f4Jordy Rose    NFC_HAL_POWER_MODE_FULL,            /* NFCC is full power mode      */
17217a38e2636a8b1ce473fc6504c4b16cb09db29f4Jordy Rose    NFC_HAL_POWER_MODE_LAST
1736a93bd526c5136ee5a26871e829cf5a8548a1c6aAnna Zaks};
1746a93bd526c5136ee5a26871e829cf5a8548a1c6aAnna Zakstypedef UINT8 tNFC_HAL_POWER_MODE;
1756a93bd526c5136ee5a26871e829cf5a8548a1c6aAnna Zaks
1766a93bd526c5136ee5a26871e829cf5a8548a1c6aAnna Zaks
177063e0887ad65d666d23ee3178436ad6507abbd1bAnna Zaks/* NFC HAL event for low power mode */
178063e0887ad65d666d23ee3178436ad6507abbd1bAnna Zaksenum
179063e0887ad65d666d23ee3178436ad6507abbd1bAnna Zaks{
180063e0887ad65d666d23ee3178436ad6507abbd1bAnna Zaks    NFC_HAL_LP_TX_DATA_EVT,                 /* DH is sending data to NFCC   */
1813d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zaks    NFC_HAL_LP_RX_DATA_EVT,                 /* DH received data from NFCC   */
1823d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zaks    NFC_HAL_LP_TIMEOUT_EVT,                 /* Timeout                      */
1833d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zaks    NFC_HAL_LP_LAST_EVT
1843d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zaks};
1853d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zakstypedef UINT8 tNFC_HAL_LP_EVT;
1863d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zaks
1873d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zaks#define NFC_HAL_ASSERT_NFC_WAKE      0x00   /* assert NFC_WAKE      */
1883d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zaks#define NFC_HAL_DEASSERT_NFC_WAKE    0x01   /* deassert NFC_WAKE    */
1893d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zaks
1903d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zaks#define NFC_HAL_BT_HCI_CMD_HDR_SIZE     3   /* opcode (2) +  length (1)    */
1913d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zaks#define NFC_HAL_CMD_TOUT            (2000)  /* timeout for NCI CMD (in ms) */
1923d7c44e01d568e5d5c0fac9c6ccb3f080157ba19Anna Zaks
193c7ecc43c33a21b82c49664910b19fcc1f555aa51Anna Zaks#define NFC_HAL_SAVED_HDR_SIZE          (2)
194c7ecc43c33a21b82c49664910b19fcc1f555aa51Anna Zaks#define NFC_HAL_SAVED_CMD_SIZE          (2)
195c7ecc43c33a21b82c49664910b19fcc1f555aa51Anna Zaks
196c7ecc43c33a21b82c49664910b19fcc1f555aa51Anna Zaks#ifndef NFC_HAL_DEBUG
197c7ecc43c33a21b82c49664910b19fcc1f555aa51Anna Zaks#define NFC_HAL_DEBUG  TRUE
1980bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks#endif
1990bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks
2000bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks#if (NFC_HAL_DEBUG == TRUE)
201fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Roseextern const char * const nfc_hal_init_state_str[];
202fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose#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;
2030bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks#else
2040bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks#define NFC_HAL_SET_INIT_STATE(state)  nfc_hal_cb.dev_cb.initializing_state = state;
2050bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks#endif
2060bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks
207fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose
2080bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks/* NFC HAL - NFCC initializing state */
209fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Roseenum
210063e0887ad65d666d23ee3178436ad6507abbd1bAnna Zaks{
211063e0887ad65d666d23ee3178436ad6507abbd1bAnna Zaks    NFC_HAL_INIT_STATE_IDLE,               /* Initialization is done                */
2120bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks    NFC_HAL_INIT_STATE_W4_XTAL_SET,        /* Waiting for crystal setting rsp       */
2138ba721428af297e540fb40b176eeeea0ee010c1fAnna Zaks    NFC_HAL_INIT_STATE_POST_XTAL_SET,      /* Waiting for reset ntf after xtal set  */
2140bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks    NFC_HAL_INIT_STATE_W4_NFCC_ENABLE,     /* Waiting for reset ntf atter REG_PU up */
2150bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks    NFC_HAL_INIT_STATE_W4_BUILD_INFO,      /* Waiting for build info rsp            */
2160bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks    NFC_HAL_INIT_STATE_W4_PATCH_INFO,      /* Waiting for patch info rsp            */
2170bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks    NFC_HAL_INIT_STATE_W4_APP_COMPLETE,    /* Waiting for complete from application */
2180bd6b110e908892d4b5c8671a9f435a1d72ad16aAnna Zaks    NFC_HAL_INIT_STATE_W4_POST_INIT_DONE,  /* Waiting for complete of post init     */
2198bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek    NFC_HAL_INIT_STATE_W4_CONTROL_DONE,    /* Waiting for control release           */
220fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose    NFC_HAL_INIT_STATE_W4_PREDISCOVER_DONE,/* Waiting for complete of prediscover   */
221fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose    NFC_HAL_INIT_STATE_CLOSING             /* Shutting down                         */
222fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose};
2236bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidistypedef UINT8 tNFC_HAL_INIT_STATE;
2246bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis
225fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose/* NFC HAL - NFCC config items during post initialization */
2268ba721428af297e540fb40b176eeeea0ee010c1fAnna Zaksenum
227fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose{
228fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose    NFC_HAL_DM_CONFIG_LPTD,
229fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose    NFC_HAL_DM_CONFIG_PLL_325,
230fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose    NFC_HAL_DM_CONFIG_START_UP,
2316bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    NFC_HAL_DM_CONFIG_I93_DATA_RATE,
2326bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    NFC_HAL_DM_CONFIG_FW_FSM,
233063e0887ad65d666d23ee3178436ad6507abbd1bAnna Zaks    NFC_HAL_DM_CONFIG_START_UP_VSC,
234785950e59424dca7ce0081bebf13c0acd2c4fff6Jordan Rose    NFC_HAL_DM_CONFIG_NONE
23557300760964904cc022a175643342f29f46b7e6bAnna Zaks};
236785950e59424dca7ce0081bebf13c0acd2c4fff6Jordan Rosetypedef UINT8 tNFC_HAL_DM_CONFIG;
2376bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis
2386bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis/* callback function prototype */
239b805c8ff133ef0c62df032fa711d6b13c5afd7f4Anna Zakstypedef struct
240b805c8ff133ef0c62df032fa711d6b13c5afd7f4Anna Zaks{
241b805c8ff133ef0c62df032fa711d6b13c5afd7f4Anna Zaks    UINT16  opcode;
2420e12ebfd3ef9ad5d894466c6e4910ac5e6041034Anna Zaks    UINT16  param_len;
2439b0c749a20d0f7d0e63441d76baa15def3f37fdbAnna Zaks    UINT8   *p_param_buf;
2449b0c749a20d0f7d0e63441d76baa15def3f37fdbAnna Zaks} tNFC_HAL_BTVSC_CPLT;
2455ac1df3e15f91ed663826faec7efe2462c18d98cAnna Zaks
2465ac1df3e15f91ed663826faec7efe2462c18d98cAnna Zakstypedef void (tNFC_HAL_BTVSC_CPLT_CBACK) (tNFC_HAL_BTVSC_CPLT *p1);
2475ac1df3e15f91ed663826faec7efe2462c18d98cAnna Zaks
2485ac1df3e15f91ed663826faec7efe2462c18d98cAnna Zaks
2495ac1df3e15f91ed663826faec7efe2462c18d98cAnna Zaks/* data type for NFC_HAL_HCI_RSP_NV_READ_EVT */
2505ac1df3e15f91ed663826faec7efe2462c18d98cAnna Zakstypedef struct
2515ac1df3e15f91ed663826faec7efe2462c18d98cAnna Zaks{
2525ac1df3e15f91ed663826faec7efe2462c18d98cAnna Zaks    NFC_HDR           hdr;
2535ac1df3e15f91ed663826faec7efe2462c18d98cAnna Zaks    UINT8             block;
2549b0c749a20d0f7d0e63441d76baa15def3f37fdbAnna Zaks    UINT16            size;
2559b0c749a20d0f7d0e63441d76baa15def3f37fdbAnna Zaks    tHAL_NFC_STATUS   status;
2569b0c749a20d0f7d0e63441d76baa15def3f37fdbAnna Zaks} tNFC_HAL_HCI_RSP_NV_READ_EVT;
2579b0c749a20d0f7d0e63441d76baa15def3f37fdbAnna Zaks
2589b0c749a20d0f7d0e63441d76baa15def3f37fdbAnna Zaks/* data type for NFC_HAL_HCI_RSP_NV_WRITE_EVT */
2599b0c749a20d0f7d0e63441d76baa15def3f37fdbAnna Zakstypedef struct
2602f3017f9cbd3774f690c979410bfec38423d03afJordan Rose{
2612f3017f9cbd3774f690c979410bfec38423d03afJordan Rose    NFC_HDR           hdr;
2622f3017f9cbd3774f690c979410bfec38423d03afJordan Rose    tHAL_NFC_STATUS   status;
2632f3017f9cbd3774f690c979410bfec38423d03afJordan Rose} tNFC_HAL_HCI_RSP_NV_WRITE_EVT;
2642f3017f9cbd3774f690c979410bfec38423d03afJordan Rose
2652f3017f9cbd3774f690c979410bfec38423d03afJordan Rose
2662f3017f9cbd3774f690c979410bfec38423d03afJordan Rose/* union of all event data types */
2672f3017f9cbd3774f690c979410bfec38423d03afJordan Rosetypedef union
2682f3017f9cbd3774f690c979410bfec38423d03afJordan Rose{
2692f3017f9cbd3774f690c979410bfec38423d03afJordan Rose    NFC_HDR                         hdr;
2702f3017f9cbd3774f690c979410bfec38423d03afJordan Rose    /* Internal events */
2712f3017f9cbd3774f690c979410bfec38423d03afJordan Rose    tNFC_HAL_HCI_RSP_NV_READ_EVT    nv_read;
2720e12ebfd3ef9ad5d894466c6e4910ac5e6041034Anna Zaks    tNFC_HAL_HCI_RSP_NV_WRITE_EVT   nv_write;
273461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks} tNFC_HAL_HCI_EVENT_DATA;
274461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks
275461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks/*****************************************************************************
276461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks** Control block for NFC HAL
277461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks*****************************************************************************/
278461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks
279461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks/* Patch RAM Download Control block */
280461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks
281461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks/* PRM states */
282461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaksenum
283461af1e502c9bd88330bbf17d449a7593fc0d624Anna Zaks{
2846bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    NFC_HAL_PRM_ST_IDLE,
2858bef8238181a30e52dea380789a7e2d760eac532Ted Kremenek
28639ac1876f6f9a1a8e0070f0df61036c7ba05202bAnna Zaks    /* Secure patch download stated */
28739ac1876f6f9a1a8e0070f0df61036c7ba05202bAnna Zaks    NFC_HAL_PRM_ST_SPD_COMPARE_VERSION,
28839ac1876f6f9a1a8e0070f0df61036c7ba05202bAnna Zaks    NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER,
289c8bb3befcad8cd8fc9556bc265289b07dc3c94c8Anna Zaks    NFC_HAL_PRM_ST_SPD_DOWNLOADING,
290df95d146c13cf02e106b32b01d147577d6d6b5a1Anna Zaks    NFC_HAL_PRM_ST_SPD_AUTHENTICATING,
291df95d146c13cf02e106b32b01d147577d6d6b5a1Anna Zaks    NFC_HAL_PRM_ST_SPD_AUTH_DONE,
29257300760964904cc022a175643342f29f46b7e6bAnna Zaks    NFC_HAL_PRM_ST_W4_GET_VERSION
293fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose};
294fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rosetypedef UINT8 tNFC_HAL_PRM_STATE;
295fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose
296fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose/* Maximum number of patches (currently 2: LPM and FPM) */
297fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose#define NFC_HAL_PRM_MAX_PATCH_COUNT    2
298fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose#define NFC_HAL_PRM_PATCH_MASK_ALL     0xFFFFFFFF
299fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose
300fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rose/* Structures for PRM Control Block */
301fa06f0464a04bb7fce1fcfb3780d151bb029e00cJordan Rosetypedef struct
3026bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis{
3036bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    UINT8               power_mode;
3046bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    UINT16              len;
3056bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis} tNFC_HAL_PRM_PATCHDESC;
30657300760964904cc022a175643342f29f46b7e6bAnna Zaks
30757300760964904cc022a175643342f29f46b7e6bAnna Zakstypedef struct
30857300760964904cc022a175643342f29f46b7e6bAnna Zaks{
30957300760964904cc022a175643342f29f46b7e6bAnna Zaks    tNFC_HAL_PRM_STATE  state;                  /* download state */
31057300760964904cc022a175643342f29f46b7e6bAnna Zaks    UINT32              flags;                  /* internal flags */
31157300760964904cc022a175643342f29f46b7e6bAnna Zaks    UINT16              cur_patch_len_remaining;/* bytes remaining in patchfile to process     */
31257300760964904cc022a175643342f29f46b7e6bAnna Zaks    const UINT8*        p_cur_patch_data;       /* pointer to patch currently being downloaded */
31357300760964904cc022a175643342f29f46b7e6bAnna Zaks    UINT16              cur_patch_offset;       /* offset of next byte to process              */
3146bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    UINT32              dest_ram;
3156bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    TIMER_LIST_ENT      timer;                  /* Timer for patch download                    */
3166bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis
3176bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    /* Secure Patch Download */
3186bcb48dc67e417e0ecce803f28d13bbea2ee0243Argyrios Kyrtzidis    UINT32              spd_patch_needed_mask;  /* Mask of patches that need to be downloaded */
319    UINT8               spd_patch_count;        /* Number of patches left to download */
320    UINT8               spd_cur_patch_idx;      /* Current patch being downloaded */
321
322    tNFC_HAL_PRM_PATCHDESC spd_patch_desc[NFC_HAL_PRM_MAX_PATCH_COUNT];
323
324    /* I2C-patch */
325    UINT8               *p_spd_patch;           /* pointer to spd patch             */
326    UINT16              spd_patch_len_remaining;/* patch length                     */
327    UINT16              spd_patch_offset;       /* offset of next byte to process   */
328
329    tNFC_HAL_PRM_FORMAT format;                 /* format of patch ram              */
330    tNFC_HAL_PRM_CBACK  *p_cback;               /* Callback for download status notifications */
331    UINT32              patchram_delay;         /* the dealy after patch */
332} tNFC_HAL_PRM_CB;
333
334/* Information about current patch in NVM */
335typedef struct
336{
337    UINT16              project_id;             /* Current project_id of patch in nvm       */
338    UINT16              ver_major;              /* Current major version of patch in nvm    */
339    UINT16              ver_minor;              /* Current minor version of patch in nvm    */
340    UINT16              fpm_size;               /* Current size of FPM patch in nvm         */
341    UINT16              lpm_size;               /* Current size of LPM patch in nvm         */
342    UINT8               flags;                  /* See NFC_HAL_NVM_FLAGS_* flag definitions */
343    UINT8               nvm_type;               /* Current NVM Type - UICC/EEPROM           */
344} tNFC_HAL_NVM;
345
346/* Patch for I2C fix */
347typedef struct
348{
349    UINT8               *p_patch;               /* patch for i2c fix                */
350    UINT32              prei2c_delay;           /* the dealy after preI2C patch */
351    UINT16              len;                    /* i2c patch length                 */
352} tNFC_HAL_PRM_I2C_FIX_CB;
353
354/* Control block for NCI transport */
355typedef struct
356{
357    UINT8               nci_ctrl_size;      /* Max size for NCI messages                              */
358    UINT8               rcv_state;          /* current rx state                                       */
359    UINT16              rcv_len;            /* bytes remaining to be received in current rx state     */
360    NFC_HDR             *p_rcv_msg;         /* buffer to receive NCI message                          */
361    NFC_HDR             *p_frag_msg;        /* fragmented NCI message; waiting for last fragment      */
362    NFC_HDR             *p_pend_cmd;        /* pending NCI message; waiting for NFCC state to be free */
363    tNFC_HAL_NCI_RAS    nci_ras;            /* nci reassembly error status                            */
364    TIMER_LIST_ENT      nci_wait_rsp_timer; /* Timer for waiting for nci command response             */
365    tNFC_HAL_WAIT_RSP   nci_wait_rsp;       /* nci wait response flag                                 */
366    UINT8               last_hdr[NFC_HAL_SAVED_HDR_SIZE];/* part of last NCI command header           */
367    UINT8               last_cmd[NFC_HAL_SAVED_CMD_SIZE];/* part of last NCI command payload          */
368    void                *p_vsc_cback;       /* the callback function for last VSC command             */
369} tNFC_HAL_NCIT_CB;
370
371/* Control block for device initialization */
372typedef struct
373{
374    tNFC_HAL_INIT_STATE     initializing_state;     /* state of initializing NFCC               */
375
376    UINT32                  brcm_hw_id;             /* BRCM NFCC HW ID                          */
377    tNFC_HAL_DM_CONFIG      next_dm_config;         /* next config in post initialization       */
378    UINT8                   next_startup_vsc;       /* next start-up VSC offset in post init    */
379
380    tNFC_HAL_POWER_MODE     power_mode;             /* NFCC power mode                          */
381    UINT8                   snooze_mode;            /* current snooze mode                      */
382    UINT8                   new_snooze_mode;        /* next snooze mode after receiving cmpl    */
383    UINT8                   nfc_wake_active_mode;   /* NFC_HAL_LP_ACTIVE_LOW/HIGH               */
384    TIMER_LIST_ENT          lp_timer;               /* timer for low power mode                 */
385
386
387    tHAL_NFC_STATUS_CBACK   *p_prop_cback;          /* callback to notify complete of proprietary update */
388} tNFC_HAL_DEV_CB;
389
390/* data members for NFC_HAL-HCI */
391typedef struct
392{
393    TIMER_LIST_ENT          hci_timer;                /* Timer to avoid indefinitely waiting for response */
394    UINT8                   *p_hci_netwk_info_buf;    /* Buffer for reading HCI Network information */
395    UINT8                   *p_hci_netwk_dh_info_buf; /* Buffer for reading HCI Network DH information */
396    UINT8                   hci_netwk_config_block;   /* Rsp awaiting for hci network configuration block */
397    BOOLEAN                 b_wait_hcp_conn_create_rsp; /* Waiting for hcp connection create response */
398    BOOLEAN                 clear_all_pipes_to_uicc1; /* UICC1 was restarted for patch download */
399    BOOLEAN                 hci_fw_workaround;        /* HAL HCI Workaround need */
400    BOOLEAN                 hci_fw_validate_netwk_cmd;/* Flag to indicate if hci network ntf to validate */
401    UINT8                   hcp_conn_id;              /* NCI Connection id for HCP */
402} tNFC_HAL_HCI_CB;
403
404typedef struct
405{
406    tHAL_NFC_CBACK          *p_stack_cback;     /* Callback for HAL event notification  */
407    tHAL_NFC_DATA_CBACK     *p_data_cback;      /* Callback for data event notification  */
408
409    TIMER_LIST_Q            quick_timer_queue;  /* timer list queue                 */
410    TIMER_LIST_ENT          timer;              /* timer for NCI transport task     */
411
412    tNFC_HAL_NCIT_CB        ncit_cb;            /* NCI transport */
413    tNFC_HAL_DEV_CB         dev_cb;             /* device initialization */
414    tNFC_HAL_NVM            nvm_cb;             /* Information about current patch in NVM */
415
416    /* Patchram control block */
417    tNFC_HAL_PRM_CB         prm;
418    tNFC_HAL_PRM_I2C_FIX_CB prm_i2c;
419
420    /* data members for NFC_HAL-HCI */
421    tNFC_HAL_HCI_CB         hci_cb;
422
423    UINT8                   pre_discover_done;  /* TRUE, when the prediscover config is complete */
424
425    UINT8                   max_rf_credits;     /* NFC Max RF data credits */
426    UINT8                   trace_level;        /* NFC HAL trace level */
427} tNFC_HAL_CB;
428
429/* Global NCI data */
430#if NFC_DYNAMIC_MEMORY == FALSE
431extern tNFC_HAL_CB   nfc_hal_cb;
432#else
433#define nfc_hal_cb (*nfc_hal_cb_ptr)
434extern tNFC_HAL_CB *nfc_hal_cb_ptr;
435#endif
436extern UINT8 *p_nfc_hal_pre_discover_cfg;
437/****************************************************************************
438** Internal nfc functions
439****************************************************************************/
440
441/* From nfc_hal_main.c */
442UINT32 nfc_hal_main_task (UINT32 param);
443void   nfc_hal_main_init (void);
444void   nfc_hal_main_pre_init_done (tHAL_NFC_STATUS);
445void   nfc_hal_main_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
446void   nfc_hal_main_stop_quick_timer (TIMER_LIST_ENT *p_tle);
447void   nfc_hal_main_send_error (tHAL_NFC_STATUS status);
448void   nfc_hal_send_nci_msg_to_nfc_task (NFC_HDR * p_msg);
449
450/* nfc_hal_nci.c */
451BOOLEAN nfc_hal_nci_receive_msg (UINT8 byte);
452BOOLEAN nfc_hal_nci_preproc_rx_nci_msg (NFC_HDR *p_msg);
453NFC_HDR* nfc_hal_nci_postproc_rx_nci_msg (void);
454void    nfc_hal_nci_assemble_nci_msg (void);
455void    nfc_hal_nci_add_nfc_pkt_type (NFC_HDR *p_msg);
456void    nfc_hal_nci_send_cmd (NFC_HDR *p_buf);
457void    nfc_hal_nci_cmd_timeout_cback (void *p_tle);
458
459/* nfc_hal_dm.c */
460void nfc_hal_dm_init (void);
461void nfc_hal_dm_set_xtal_freq_index (void);
462void nfc_hal_dm_send_get_build_info_cmd (void);
463void nfc_hal_dm_proc_msg_during_init (NFC_HDR *p_msg);
464void nfc_hal_dm_config_nfcc (void);
465void nfc_hal_dm_send_nci_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_NCI_CBACK *p_cback);
466void nfc_hal_dm_send_bt_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_BTVSC_CPLT_CBACK *p_cback);
467void nfc_hal_dm_set_nfc_wake (UINT8 cmd);
468void nfc_hal_dm_pre_init_nfcc (void);
469void nfc_hal_dm_shutting_down_nfcc (void);
470BOOLEAN nfc_hal_dm_power_mode_execute (tNFC_HAL_LP_EVT event);
471void nfc_hal_dm_send_pend_cmd (void);
472tHAL_NFC_STATUS nfc_hal_dm_set_config (UINT8 tlv_size, UINT8 *p_param_tlvs, tNFC_HAL_NCI_CBACK *p_cback);
473
474/* nfc_hal_prm.c */
475void nfc_hal_prm_spd_reset_ntf (UINT8 reset_reason, UINT8 reset_type);
476void nfc_hal_prm_nci_command_complete_cback (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
477void nfc_hal_prm_process_timeout (void *p_tle);
478
479/* nfc_hal_hci.c */
480void nfc_hal_hci_enable (void);
481void nfc_hal_hci_evt_hdlr (tNFC_HAL_HCI_EVENT_DATA *p_evt_data);
482void nfc_hal_hci_handle_hci_netwk_info (UINT8 *p_data);
483void nfc_hal_hci_handle_hcp_pkt_from_hc (UINT8 *p_data);
484NFC_HDR* nfc_hal_hci_postproc_hcp (void);
485BOOLEAN nfc_hal_hci_handle_hcp_pkt_to_hc (UINT8 *p_data);
486void nfc_hal_hci_timeout_cback (void *p_tle);
487
488
489/* Define default NCI protocol trace function (if protocol tracing is enabled) */
490#if (defined(NFC_HAL_TRACE_PROTOCOL) && (NFC_HAL_TRACE_PROTOCOL == TRUE))
491#if !defined (DISP_NCI)
492#define DISP_NCI    (DispNci)
493void DispNci (UINT8 *p, UINT16 len, BOOLEAN is_recv);
494#endif  /* DISP_NCI */
495
496/* For displaying vendor-specific HCI commands */
497void DispHciCmd (BT_HDR *p_buf);
498void DispHciEvt (BT_HDR *p_buf);
499#endif /* NFC_HAL_TRACE_PROTOCOL */
500
501#ifdef __cplusplus
502}
503#endif
504
505#endif /* NFC_HAL_INT_H */
506