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