nfc_hal_int.h revision c6d8cda88d41587a86032d6cc778e920dab94cf8
183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/******************************************************************************
2a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *
383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com *  Copyright (C) 2009-2014 Broadcom Corporation
4a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *
5a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *  Licensed under the Apache License, Version 2.0 (the "License");
6a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *  you may not use this file except in compliance with the License.
783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com *  You may obtain a copy of the License at:
8a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *
9a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *  http://www.apache.org/licenses/LICENSE-2.0
10a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *
11a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *  Unless required by applicable law or agreed to in writing, software
12a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *  distributed under the License is distributed on an "AS IS" BASIS,
13a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14a7139f6586c9bb8452e4c648ce582f8fbc626740JesusFreke@JesusFreke.com *  See the License for the specific language governing permissions and
1583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com *  limitations under the License.
1683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com *
17128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com ******************************************************************************/
18128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com
19128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com
20128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com/******************************************************************************
21128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com *
22128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com *  this file contains the NCI transport internal definitions and functions.
23128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com *
24128e8279c3cf44cc1d1c8f263035ba8e4044d5c6JesusFreke@JesusFreke.com ******************************************************************************/
25bf95959ae43ddd003936a01dfaecc612a438d4b5Ben Gruver
2683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#ifndef NFC_HAL_INT_H
2783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_INT_H
2883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
2983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#include "nfc_hal_target.h"
3083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#include "gki.h"
3183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#include "nci_defs.h"
3283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#include "nfc_brcm_defs.h"
3383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#include "nfc_hal_api.h"
3483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#include "nfc_hal_int_api.h"
3583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
3683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#ifdef __cplusplus
3783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.comextern "C" {
3883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#endif
3983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
4083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/****************************************************************************
4183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com** NFC HAL TASK transport definitions
4283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com****************************************************************************/
4383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/* NFC HAL Task event masks */
4483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_TASK_EVT_DATA_RDY               EVENT_MASK (APPL_EVT_0)
4583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_TASK_EVT_INITIALIZE             EVENT_MASK (APPL_EVT_5)
4683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_TASK_EVT_TERMINATE              EVENT_MASK (APPL_EVT_6)
4783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_TASK_EVT_POWER_CYCLE            EVENT_MASK (APPL_EVT_7)
48e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver
4983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_TASK_EVT_MBOX                   (TASK_MBOX_0_EVT_MASK)
5083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
5183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/* NFC HAL Task mailbox definitions */
5283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_TASK_MBOX                       (TASK_MBOX_0)
5383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
5483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/* NFC HAL Task Timer events */
5583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#ifndef NFC_HAL_QUICK_TIMER_EVT_MASK
5683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_QUICK_TIMER_EVT_MASK            (TIMER_0_EVT_MASK)
57e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver#endif
5883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
5983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#ifndef NFC_HAL_QUICK_TIMER_ID
6083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_QUICK_TIMER_ID                  (TIMER_0)
6183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#endif
6283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
6383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/* NFC HAL Task Timer types */
6483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_TTYPE_NCI_WAIT_RSP              0
6583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_TTYPE_POWER_CYCLE               1
66e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver#define NFC_HAL_TTYPE_NFCC_ENABLE               2
67e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver
6883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/* NFC HAL Task Wait Response flag */
6983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_WAIT_RSP_CMD                    0x10    /* wait response on an NCI command                  */
7083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_WAIT_RSP_VSC                    0x20    /* wait response on an NCI vendor specific command  */
7183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_WAIT_RSP_PROP                   0x40    /* wait response on a proprietary command           */
7283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_WAIT_RSP_NONE                   0x00    /* not waiting for anything                         */
7383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
7483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.comtypedef UINT8 tNFC_HAL_WAIT_RSP;
7583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
76e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver#if (defined(NFC_HAL_HCI_INCLUDED) && (NFC_HAL_HCI_INCLUDED == TRUE))
7783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
7883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.comtypedef UINT16 tNFC_HAL_HCI_EVT;
7983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
8083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_PIPE_INFO_SIZE              5
8183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
8283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_ANY_SET_PARAMETER           0x01
8383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_ANY_GET_PARAMETER           0x02
8483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_ADM_NOTIFY_ALL_PIPE_CLEARED 0x15
85e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver
86e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver#define NFC_HAL_HCI_SESSION_IDENTITY_INDEX      0x01
8783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_WHITELIST_INDEX             0x03
8883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
8983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_ADMIN_PIPE                  0x01
9083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_HOST_ID_UICC0               0x02        /* Host ID for UICC 0 */
9183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_HOST_ID_UICC1               0x03        /* Host ID for UICC 1 */
9283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_HOST_ID_UICC2               0x04        /* Host ID for UICC 2 */
9383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_COMMAND_TYPE                0x00
9483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_RESPONSE_TYPE               0x02
9583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
9683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/* NFC HAL HCI responses */
9783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_HCI_ANY_OK                      0x00
9883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
99e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver#endif
100e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver
101e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver/* Flag defintions for tNFC_HAL_NVM */
102e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver#define NFC_HAL_NVM_FLAGS_NO_NVM                0x01    /* No NVM available                     */
103e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver#define NFC_HAL_NVM_FLAGS_LPM_BAD               0x02    /* FPM patch in NVM failed CRC check    */
104e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver#define NFC_HAL_NVM_FLAGS_FPM_BAD               0x04    /* LPM patch in NVM failed CRC check    */
105e8665c7a91f2af56de3124bd351b75dcc81fcf85Ben Gruver#define NFC_HAL_NVM_FLAGS_PATCH_PRESENT         0x08    /* Patch is present in NVM              */
10683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
10783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/* NFC HAL transport configuration */
10883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.comtypedef struct
10983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com{
11083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    BOOLEAN         shared_transport;           /* TRUE if using shared HCI/NCI transport */
11183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    UINT8           userial_baud;
11283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    UINT8           userial_fc;
11383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com} tNFC_HAL_TRANS_CFG;
11483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
11583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#ifdef TESTER
11683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_TRANS_CFG_QUALIFIER               /* For Insight, ncit_cfg is runtime-configurable */
11783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#else
11883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_TRANS_CFG_QUALIFIER   const       /* For all other platforms, ncit_cfg is constant */
11983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#endif
12083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.comextern NFC_HAL_TRANS_CFG_QUALIFIER tNFC_HAL_TRANS_CFG nfc_hal_trans_cfg;
12183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
12283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/*****************************************************************************
12383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com* BT HCI definitions
12483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com*****************************************************************************/
12583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define BT_HDR      NFC_HDR
12683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
12783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/* Tranport message type */
12883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCIT_TYPE_COMMAND   0x01
12983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCIT_TYPE_EVENT     0x04
13083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCIT_TYPE_NFC       0x10
13183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
13283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/* Vendor-Specific BT HCI definitions */
13383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCI_SUCCESS                         0x00
13483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCI_GRP_VENDOR_SPECIFIC             (0x3F << 10)            /* 0xFC00 */
13583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCI_BRCM_WRITE_SLEEP_MODE           (0x0027 | HCI_GRP_VENDOR_SPECIFIC)
13683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCI_GRP_HOST_CONT_BASEBAND_CMDS     (0x03 << 10)            /* 0x0C00 */
13783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCI_RESET                           (0x0003 | HCI_GRP_HOST_CONT_BASEBAND_CMDS)
13883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCI_COMMAND_COMPLETE_EVT            0x0E
13983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCI_BRCM_WRITE_SLEEP_MODE_LENGTH    12
14083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCI_BRCM_UPDATE_BAUD_RATE_UNENCODED_LENGTH      0x06
14183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCIE_PREAMBLE_SIZE                  2
14283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCI_BRCM_PRE_SET_MEM                (0x000C | HCI_GRP_VENDOR_SPECIFIC)
14383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCI_BRCM_PRE_SET_MEM_LENGTH         10
14483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define HCI_BRCM_PRE_SET_MEM_TYPE           8
14583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
14683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/****************************************************************************
14783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com** Internal constants and definitions
14883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com****************************************************************************/
14983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
15083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/* NFC HAL receiving states */
15183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.comenum
15283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com{
15383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    NFC_HAL_RCV_IDLE_ST,            /* waiting for packet type byte             */
15483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    NFC_HAL_RCV_NCI_MSG_ST,         /* waiting for the first byte of NCI header */
15583b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    NFC_HAL_RCV_NCI_HDR_ST,         /* reading NCI header                       */
15683b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    NFC_HAL_RCV_NCI_PAYLOAD_ST,     /* reading NCI payload                      */
15783b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    NFC_HAL_RCV_BT_MSG_ST,          /* waiting for the first byte of BT header  */
15883b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    NFC_HAL_RCV_BT_HDR_ST,          /* reading BT HCI header                    */
15983b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com    NFC_HAL_RCV_BT_PAYLOAD_ST       /* reading BT HCI payload                   */
16083b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com};
16183b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com
16283b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com/* errors during NCI packet reassembly process */
16383b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_NCI_RAS_TOO_BIG             0x01
16483b80f81d311b233188c281059aad4a9f5e8b4e6JesusFreke@JesusFreke.com#define NFC_HAL_NCI_RAS_ERROR               0x02
165typedef UINT8 tNFC_HAL_NCI_RAS;
166
167/* NFC HAL power mode */
168enum
169{
170    NFC_HAL_POWER_MODE_FULL,            /* NFCC is full power mode      */
171    NFC_HAL_POWER_MODE_LAST
172};
173typedef UINT8 tNFC_HAL_POWER_MODE;
174
175
176/* NFC HAL event for low power mode */
177enum
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};
184typedef 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)
200extern 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 */
208enum
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_CLOSING             /* Shutting down                         */
221};
222typedef UINT8 tNFC_HAL_INIT_STATE;
223
224/* NFC HAL - NFCC config items during post initialization */
225enum
226{
227    NFC_HAL_DM_CONFIG_LPTD,
228    NFC_HAL_DM_CONFIG_PLL_325,
229    NFC_HAL_DM_CONFIG_START_UP,
230    NFC_HAL_DM_CONFIG_I93_DATA_RATE,
231    NFC_HAL_DM_CONFIG_FW_FSM,
232    NFC_HAL_DM_CONFIG_START_UP_VSC,
233    NFC_HAL_DM_CONFIG_NONE
234};
235typedef UINT8 tNFC_HAL_DM_CONFIG;
236
237/* callback function prototype */
238typedef struct
239{
240    UINT16  opcode;
241    UINT16  param_len;
242    UINT8   *p_param_buf;
243} tNFC_HAL_BTVSC_CPLT;
244
245typedef void (tNFC_HAL_BTVSC_CPLT_CBACK) (tNFC_HAL_BTVSC_CPLT *p1);
246
247#if (defined(NFC_HAL_HCI_INCLUDED) && (NFC_HAL_HCI_INCLUDED == TRUE))
248
249/* data type for NFC_HAL_HCI_RSP_NV_READ_EVT */
250typedef struct
251{
252    NFC_HDR           hdr;
253    UINT8             block;
254    UINT16            size;
255    tHAL_NFC_STATUS   status;
256} tNFC_HAL_HCI_RSP_NV_READ_EVT;
257
258/* data type for NFC_HAL_HCI_RSP_NV_WRITE_EVT */
259typedef struct
260{
261    NFC_HDR           hdr;
262    tHAL_NFC_STATUS   status;
263} tNFC_HAL_HCI_RSP_NV_WRITE_EVT;
264
265
266/* union of all event data types */
267typedef union
268{
269    NFC_HDR                         hdr;
270    /* Internal events */
271    tNFC_HAL_HCI_RSP_NV_READ_EVT    nv_read;
272    tNFC_HAL_HCI_RSP_NV_WRITE_EVT   nv_write;
273} tNFC_HAL_HCI_EVENT_DATA;
274
275#endif
276/*****************************************************************************
277** Control block for NFC HAL
278*****************************************************************************/
279
280/* Patch RAM Download Control block */
281
282/* PRM states */
283enum
284{
285    NFC_HAL_PRM_ST_IDLE,
286
287    /* Secure patch download stated */
288    NFC_HAL_PRM_ST_SPD_COMPARE_VERSION,
289    NFC_HAL_PRM_ST_SPD_GET_PATCH_HEADER,
290    NFC_HAL_PRM_ST_SPD_DOWNLOADING,
291    NFC_HAL_PRM_ST_SPD_AUTHENTICATING,
292    NFC_HAL_PRM_ST_SPD_AUTH_DONE,
293    NFC_HAL_PRM_ST_W4_GET_VERSION
294};
295typedef UINT8 tNFC_HAL_PRM_STATE;
296
297/* Maximum number of patches (currently 2: LPM and FPM) */
298#define NFC_HAL_PRM_MAX_PATCH_COUNT    2
299#define NFC_HAL_PRM_PATCH_MASK_ALL     0xFFFFFFFF
300#define NFC_HAL_PRM_MAX_CHIP_VER_LEN   8
301
302/* Structures for PRM Control Block */
303typedef struct
304{
305    UINT8               power_mode;
306    UINT16              len;
307} tNFC_HAL_PRM_PATCHDESC;
308
309typedef struct
310{
311    tNFC_HAL_PRM_STATE  state;                  /* download state */
312    UINT32              flags;                  /* internal flags */
313    UINT16              cur_patch_len_remaining;/* bytes remaining in patchfile to process     */
314    const UINT8*        p_cur_patch_data;       /* pointer to patch currently being downloaded */
315    UINT16              cur_patch_offset;       /* offset of next byte to process              */
316    UINT32              dest_ram;
317    TIMER_LIST_ENT      timer;                  /* Timer for patch download                    */
318    void               *p_param;                /* general purpose param for PRM               */
319    UINT8               param_idx;              /* information related to general purpose param*/
320
321    /* Secure Patch Download */
322    UINT32              spd_patch_needed_mask;  /* Mask of patches that need to be downloaded */
323    UINT8               spd_patch_count;        /* Number of patches left to download */
324    UINT8               spd_cur_patch_idx;      /* Current patch being downloaded */
325
326    tNFC_HAL_PRM_PATCHDESC spd_patch_desc[NFC_HAL_PRM_MAX_PATCH_COUNT];
327
328    /* I2C-patch */
329    UINT8               *p_spd_patch;           /* pointer to spd patch             */
330    UINT16              spd_patch_len_remaining;/* patch length                     */
331    UINT16              spd_patch_offset;       /* offset of next byte to process   */
332
333    tNFC_HAL_PRM_FORMAT format;                 /* format of patch ram              */
334    tNFC_HAL_PRM_CBACK  *p_cback;               /* Callback for download status notifications */
335    UINT32              patchram_delay;         /* the dealy after patch */
336} tNFC_HAL_PRM_CB;
337
338/* Information about current patch in NVM */
339typedef struct
340{
341    UINT16              project_id;             /* Current project_id of patch in nvm       */
342    UINT16              ver_major;              /* Current major version of patch in nvm    */
343    UINT16              ver_minor;              /* Current minor version of patch in nvm    */
344    UINT16              fpm_size;               /* Current size of FPM patch in nvm         */
345    UINT16              lpm_size;               /* Current size of LPM patch in nvm         */
346    UINT8               flags;                  /* See NFC_HAL_NVM_FLAGS_* flag definitions */
347    UINT8               nvm_type;               /* Current NVM Type - UICC/EEPROM           */
348    UINT8               chip_ver[NFC_HAL_PRM_MAX_CHIP_VER_LEN]; /* patch chip version       */
349} tNFC_HAL_NVM;
350
351/* Patch for I2C fix */
352typedef struct
353{
354    UINT8               *p_patch;               /* patch for i2c fix                */
355    UINT32              prei2c_delay;           /* the dealy after preI2C patch */
356    UINT16              len;                    /* i2c patch length                 */
357} tNFC_HAL_PRM_I2C_FIX_CB;
358
359/* Control block for NCI transport */
360typedef struct
361{
362    UINT8               nci_ctrl_size;      /* Max size for NCI messages                              */
363    UINT8               rcv_state;          /* current rx state                                       */
364    UINT16              rcv_len;            /* bytes remaining to be received in current rx state     */
365    NFC_HDR             *p_rcv_msg;         /* buffer to receive NCI message                          */
366    NFC_HDR             *p_frag_msg;        /* fragmented NCI message; waiting for last fragment      */
367    NFC_HDR             *p_pend_cmd;        /* pending NCI message; waiting for NFCC state to be free */
368    tNFC_HAL_NCI_RAS    nci_ras;            /* nci reassembly error status                            */
369    TIMER_LIST_ENT      nci_wait_rsp_timer; /* Timer for waiting for nci command response             */
370    tNFC_HAL_WAIT_RSP   nci_wait_rsp;       /* nci wait response flag                                 */
371    UINT8               last_hdr[NFC_HAL_SAVED_HDR_SIZE];/* part of last NCI command header           */
372    UINT8               last_cmd[NFC_HAL_SAVED_CMD_SIZE];/* part of last NCI command payload          */
373    void                *p_vsc_cback;       /* the callback function for last VSC command             */
374} tNFC_HAL_NCIT_CB;
375
376/* Control block for device initialization */
377typedef struct
378{
379    tNFC_HAL_INIT_STATE     initializing_state;     /* state of initializing NFCC               */
380
381    UINT32                  brcm_hw_id;             /* BRCM NFCC HW ID                          */
382    tNFC_HAL_DM_CONFIG      next_dm_config;         /* next config in post initialization       */
383    UINT8                   next_startup_vsc;       /* next start-up VSC offset in post init    */
384
385    tNFC_HAL_POWER_MODE     power_mode;             /* NFCC power mode                          */
386    UINT8                   snooze_mode;            /* current snooze mode                      */
387    UINT8                   new_snooze_mode;        /* next snooze mode after receiving cmpl    */
388    UINT8                   nfc_wake_active_mode;   /* NFC_HAL_LP_ACTIVE_LOW/HIGH               */
389    TIMER_LIST_ENT          lp_timer;               /* timer for low power mode                 */
390
391
392    tHAL_NFC_STATUS_CBACK   *p_prop_cback;          /* callback to notify complete of proprietary update */
393} tNFC_HAL_DEV_CB;
394
395#if (defined(NFC_HAL_HCI_INCLUDED) && (NFC_HAL_HCI_INCLUDED == TRUE))
396
397/* data members for NFC_HAL-HCI */
398typedef struct
399{
400    TIMER_LIST_ENT          hci_timer;                /* Timer to avoid indefinitely waiting for response */
401    UINT8                   *p_hci_netwk_info_buf;    /* Buffer for reading HCI Network information */
402    UINT8                   *p_hci_netwk_dh_info_buf; /* Buffer for reading HCI Network DH information */
403    UINT8                   hci_netwk_config_block;   /* Rsp awaiting for hci network configuration block */
404    BOOLEAN                 b_wait_hcp_conn_create_rsp; /* Waiting for hcp connection create response */
405    BOOLEAN                 clear_all_pipes_to_uicc1; /* UICC1 was restarted for patch download */
406    BOOLEAN                 update_session_id;        /* Next response from NFCC is to Get Session id cmd */
407    BOOLEAN                 hci_fw_workaround;        /* HAL HCI Workaround need */
408    BOOLEAN                 hci_fw_validate_netwk_cmd;/* Flag to indicate if hci network ntf to validate */
409    UINT8                   hcp_conn_id;              /* NCI Connection id for HCP */
410    UINT8                   dh_session_id[1];         /* Byte 0 of DH Session ID */
411} tNFC_HAL_HCI_CB;
412
413#endif
414
415typedef struct
416{
417    tHAL_NFC_CBACK          *p_stack_cback;     /* Callback for HAL event notification  */
418    tHAL_NFC_DATA_CBACK     *p_data_cback;      /* Callback for data event notification  */
419
420    TIMER_LIST_Q            quick_timer_queue;  /* timer list queue                 */
421    TIMER_LIST_ENT          timer;              /* timer for NCI transport task     */
422
423    tNFC_HAL_NCIT_CB        ncit_cb;            /* NCI transport */
424    tNFC_HAL_DEV_CB         dev_cb;             /* device initialization */
425    tNFC_HAL_NVM            nvm_cb;             /* Information about current patch in NVM */
426
427    /* Patchram control block */
428    tNFC_HAL_PRM_CB         prm;
429    tNFC_HAL_PRM_I2C_FIX_CB prm_i2c;
430
431#if (defined(NFC_HAL_HCI_INCLUDED) && (NFC_HAL_HCI_INCLUDED == TRUE))
432    /* data members for NFC_HAL-HCI */
433    tNFC_HAL_HCI_CB         hci_cb;
434#endif
435
436    UINT8                   pre_discover_done;  /* TRUE, when the prediscover config is complete */
437    UINT8                   pre_set_mem_idx;
438
439    UINT8                   max_rf_credits;     /* NFC Max RF data credits */
440    UINT8                   max_ee;             /* NFC Max number of NFCEE supported by NFCC */
441    UINT8                   trace_level;        /* NFC HAL trace level */
442} tNFC_HAL_CB;
443
444/* Global NCI data */
445#if NFC_DYNAMIC_MEMORY == FALSE
446extern tNFC_HAL_CB   nfc_hal_cb;
447#else
448#define nfc_hal_cb (*nfc_hal_cb_ptr)
449extern tNFC_HAL_CB *nfc_hal_cb_ptr;
450#endif
451extern UINT8 *p_nfc_hal_pre_discover_cfg;
452/****************************************************************************
453** Internal nfc functions
454****************************************************************************/
455
456/* From nfc_hal_main.c */
457UINT32 nfc_hal_main_task (UINT32 param);
458void   nfc_hal_main_init (void);
459void   nfc_hal_main_pre_init_done (tHAL_NFC_STATUS);
460void   nfc_hal_main_start_quick_timer (TIMER_LIST_ENT *p_tle, UINT16 type, UINT32 timeout);
461void   nfc_hal_main_stop_quick_timer (TIMER_LIST_ENT *p_tle);
462void   nfc_hal_main_send_error (tHAL_NFC_STATUS status);
463void   nfc_hal_send_nci_msg_to_nfc_task (NFC_HDR * p_msg);
464
465/* nfc_hal_nci.c */
466BOOLEAN nfc_hal_nci_receive_msg (UINT8 byte);
467BOOLEAN nfc_hal_nci_preproc_rx_nci_msg (NFC_HDR *p_msg);
468NFC_HDR* nfc_hal_nci_postproc_rx_nci_msg (void);
469void    nfc_hal_nci_assemble_nci_msg (void);
470void    nfc_hal_nci_add_nfc_pkt_type (NFC_HDR *p_msg);
471void    nfc_hal_nci_send_cmd (NFC_HDR *p_buf);
472void    nfc_hal_nci_cmd_timeout_cback (void *p_tle);
473
474/* nfc_hal_dm.c */
475void nfc_hal_dm_init (void);
476void nfc_hal_dm_set_xtal_freq_index (void);
477void nfc_hal_dm_send_get_build_info_cmd (void);
478void nfc_hal_dm_proc_msg_during_init (NFC_HDR *p_msg);
479void nfc_hal_dm_config_nfcc (void);
480void nfc_hal_dm_send_nci_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_NCI_CBACK *p_cback);
481void nfc_hal_dm_send_bt_cmd (const UINT8 *p_data, UINT16 len, tNFC_HAL_BTVSC_CPLT_CBACK *p_cback);
482void nfc_hal_dm_set_nfc_wake (UINT8 cmd);
483void nfc_hal_dm_pre_init_nfcc (void);
484void nfc_hal_dm_shutting_down_nfcc (void);
485BOOLEAN nfc_hal_dm_power_mode_execute (tNFC_HAL_LP_EVT event);
486void nfc_hal_dm_send_pend_cmd (void);
487tHAL_NFC_STATUS nfc_hal_dm_set_config (UINT8 tlv_size, UINT8 *p_param_tlvs, tNFC_HAL_NCI_CBACK *p_cback);
488BOOLEAN nfc_hal_dm_check_pre_set_mem (void);
489
490
491/* nfc_hal_prm.c */
492void nfc_hal_prm_spd_reset_ntf (UINT8 reset_reason, UINT8 reset_type);
493void nfc_hal_prm_nci_command_complete_cback (tNFC_HAL_NCI_EVT event, UINT16 data_len, UINT8 *p_data);
494void nfc_hal_prm_process_timeout (void *p_tle);
495
496#if (defined(NFC_HAL_HCI_INCLUDED) && (NFC_HAL_HCI_INCLUDED == TRUE))
497/* nfc_hal_hci.c */
498void nfc_hal_hci_enable (void);
499void nfc_hal_hci_evt_hdlr (tNFC_HAL_HCI_EVENT_DATA *p_evt_data);
500void nfc_hal_hci_handle_hci_netwk_info (UINT8 *p_data);
501void nfc_hal_hci_handle_hcp_pkt_from_hc (UINT8 *p_data);
502NFC_HDR* nfc_hal_hci_postproc_hcp (void);
503BOOLEAN nfc_hal_hci_handle_hcp_pkt_to_hc (UINT8 *p_data);
504void nfc_hal_hci_timeout_cback (void *p_tle);
505void nfc_hal_hci_handle_build_info (UINT8 chipverlen, UINT8 *p_chipverstr);
506#else
507#define nfc_hal_hci_enable()    NFC_HAL_SET_INIT_STATE (NFC_HAL_INIT_STATE_IDLE);
508#define nfc_hal_hci_handle_build_info(p,a)
509#define nfc_hal_hci_evt_hdlr(p);
510#endif
511
512
513/* Define default NCI protocol trace function (if protocol tracing is enabled) */
514#if (defined(NFC_HAL_TRACE_PROTOCOL) && (NFC_HAL_TRACE_PROTOCOL == TRUE))
515#if !defined (DISP_NCI)
516#define DISP_NCI    (DispNci)
517void DispNci (UINT8 *p, UINT16 len, BOOLEAN is_recv);
518#endif  /* DISP_NCI */
519
520/* For displaying vendor-specific HCI commands */
521void DispHciCmd (BT_HDR *p_buf);
522void DispHciEvt (BT_HDR *p_buf);
523#endif /* NFC_HAL_TRACE_PROTOCOL */
524
525#ifdef __cplusplus
526}
527#endif
528
529#endif /* NFC_HAL_INT_H */
530