1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu *  Copyright (C) 2009-2014 Broadcom Corporation
4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the "License");
6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  you may not use this file except in compliance with the License.
7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  You may obtain a copy of the License at:
8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  http://www.apache.org/licenses/LICENSE-2.0
10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  See the License for the specific language governing permissions and
15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  limitations under the License.
16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  this file contains the main NFC Upper Layer internal definitions and
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *  functions.
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#ifndef NFC_INT_H_
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFC_INT_H_
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "gki.h"
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_defs.h"
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h"
326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "nfc_target.h"
33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Internal NFC constants and definitions
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project****************************************************************************/
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFC_TASK definitions
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project****************************************************************************/
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFC_TASK event masks */
436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TASK_EVT_TRANSPORT_READY EVENT_MASK(APPL_EVT_0)
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFC Timer events */
466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_NCI_WAIT_RSP 0
476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_WAIT_2_DEACTIVATE 1
48d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna#define NFC_WAIT_RSP_RAW_VS 0x02
4981e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna#define NFC_TTYPE_WAIT_MODE_SET_NTF 2
506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_LLCP_LINK_MANAGER 100
526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_LLCP_LINK_INACT 101
536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_LLCP_DATA_LINK 102
546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_LLCP_DELAY_FIRST_PDU 103
556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_RW_T1T_RESPONSE 104
566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_RW_T2T_RESPONSE 105
576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_RW_T3T_RESPONSE 106
586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_RW_T4T_RESPONSE 107
596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_RW_I93_RESPONSE 108
606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_TTYPE_CE_T4T_UPDATE 109
6146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* added for p2p prio logic timer */
6246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_TTYPE_P2P_PRIO_RESPONSE 110
6346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* added for p2p prio logic clenaup */
6446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_TTYPE_P2P_PRIO_LOGIC_CLEANUP 111
6581e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna/* time out for mode set notification */
6681e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna#define NFC_MODE_SET_NTF_TIMEOUT 2
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFC Task event messages */
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoienum {
706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_STATE_NONE,                /* not start up yet                         */
716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_STATE_W4_HAL_OPEN,         /* waiting for HAL_NFC_OPEN_CPLT_EVT        */
726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_STATE_CORE_INIT,           /* sending CORE_RESET and CORE_INIT         */
736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_STATE_W4_POST_INIT_CPLT,   /* waiting for HAL_NFC_POST_INIT_CPLT_EVT   */
746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_STATE_IDLE,                /* normal operation (discovery state)       */
756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_STATE_OPEN,                /* NFC link is activated                    */
766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_STATE_CLOSING,             /* de-activating                            */
776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_STATE_W4_HAL_CLOSE,        /* waiting for HAL_NFC_POST_INIT_CPLT_EVT   */
786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_STATE_NFCC_POWER_OFF_SLEEP /* NFCC is power-off sleep mode             */
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project};
80512ee63c7cc8feb016863e507a5d33cd0f4242bfRuchi Kandoitypedef uint8_t tNFC_STATE;
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
822ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao/* DM P2P Priority event type */
836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoienum {
846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_DM_P2P_PRIO_RSP = 0x01, /* P2P priority event from RSP   */
856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFA_DM_P2P_PRIO_NTF         /* P2P priority event from NTF   */
862ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao};
872ef0896fb71d2a3bcde1fff34a8d24c2e74340c2Jizhou Liao
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFC control block flags */
8946e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NFC_Deactivate () is called and the NCI cmd is not sent   */
9046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_FL_DEACTIVATING 0x0001
9146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* restarting NFCC after PowerOffSleep          */
9246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_FL_RESTARTING 0x0002
9346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* enterning power off sleep mode               */
9446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_FL_POWER_OFF_SLEEP 0x0004
9546e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* Power cycle NFCC                             */
9646e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_FL_POWER_CYCLE_NFCC 0x0008
9746e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* HAL requested control on NCI command window  */
9846e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_FL_CONTROL_REQUESTED 0x0010
9946e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NCI command window is on the HAL side        */
10046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_FL_CONTROL_GRANTED 0x0020
10146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NCI command window is on the HAL side        */
10246e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_FL_DISCOVER_PENDING 0x0040
10346e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* NFC_FL_CONTROL_REQUESTED on HAL request      */
10446e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_FL_HAL_REQUESTED 0x0080
10581e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna/* Waiting for NFCEE Mode Set NTF                 */
10681e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna#define NFC_FL_WAIT_MODE_SET_NTF 0x0100
107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_PEND_CONN_ID 0xFE
1096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_CONN_ID_ID_MASK NCI_CID_MASK
11046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* set num_buff to this for no flow control */
11146e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_CONN_NO_FC 0xFF
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE)
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* only allow the entries that the NFCC can support */
1156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_CHECK_MAX_CONN()                          \
1166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  {                                                   \
1176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi    if (max > nfc_cb.max_conn) max = nfc_cb.max_conn; \
1186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  }
119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define NFC_CHECK_MAX_CONN()
121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_CONN_CBACK* p_cback; /* the callback function to receive the data */
1257e16563ba20c63ec431301e77405fe29791f2486Ruchi Kandoi  BUFFER_Q tx_q;         /* transmit queue                                   */
1267e16563ba20c63ec431301e77405fe29791f2486Ruchi Kandoi  BUFFER_Q rx_q;         /* receive queue                                    */
1277e16563ba20c63ec431301e77405fe29791f2486Ruchi Kandoi  uint8_t id;            /* NFCEE ID or RF Discovery ID or NFC_TEST_ID       */
1287e16563ba20c63ec431301e77405fe29791f2486Ruchi Kandoi  uint8_t act_protocol;  /* the active protocol on this logical connection   */
12967a3e862e52db4005d930d98df5c981c68ddb982Love Khanna  uint8_t act_interface; /* the active interface on this logical connection   */
1307e16563ba20c63ec431301e77405fe29791f2486Ruchi Kandoi  uint8_t conn_id;       /* the connection id assigned by NFCC for this conn */
1317e16563ba20c63ec431301e77405fe29791f2486Ruchi Kandoi  uint8_t buff_size;     /* the max buffer size for this connection.     .   */
1327e16563ba20c63ec431301e77405fe29791f2486Ruchi Kandoi  uint8_t num_buff;      /* num of buffers left to send on this connection   */
1337e16563ba20c63ec431301e77405fe29791f2486Ruchi Kandoi  uint8_t init_credits;  /* initial num of buffer credits                    */
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFC_CONN_CB;
135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* This data type is for NFC task to send a NCI VS command to NCIT task */
1376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR bt_hdr;         /* the NCI command          */
1396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_VS_CBACK* p_cback; /* the callback function to receive RSP   */
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFC_NCI_VS_MSG;
141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* This data type is for HAL event */
1436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR hdr;
1456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t hal_evt; /* HAL event code  */
1466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t status;  /* tHAL_NFC_STATUS */
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFC_HAL_EVT_MSG;
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
14946e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi/* callback function pointer(8; use 8 to be safe + NFC_SAVED_CMD_SIZE(2) */
15046e6e28414b5e37ffad65353916520fc56ea3a86Ruchi Kandoi#define NFC_RECEIVE_MSGS_OFFSET (10)
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_SAVED_HDR_SIZE (2)
1530a73688fae255d6c4730747caefaa134bd29b1d6Ruchi Kandoi/* data Reassembly error (in NFC_HDR.layer_specific) */
1546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_RAS_TOO_BIG 0x08
1556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_RAS_FRAGMENTED 0x01
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
1570a73688fae255d6c4730747caefaa134bd29b1d6Ruchi Kandoi/* NCI command buffer contains a VSC (in NFC_HDR.layer_specific) */
1586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#define NFC_WAIT_RSP_VSC 0x01
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* NFC control blocks */
1616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoitypedef struct {
1626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t flags; /* NFC control block flags - NFC_FL_* */
1636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_CONN_CB conn_cb[NCI_MAX_CONN_CBS];
1646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t conn_id[NFC_MAX_CONN_ID + 1]; /* index: conn_id; conn_id[]: index(1
1656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                           based) to conn_cb[] */
1666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_DISCOVER_CBACK* p_discv_cback;
1676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_RESPONSE_CBACK* p_resp_cback;
1686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_TEST_CBACK* p_test_cback;
1696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_VS_CBACK*
1706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      p_vs_cb[NFC_NUM_VS_CBACKS]; /* Register for vendor specific events  */
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE)
1736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* NFCC information at init rsp */
1746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint32_t nci_features; /* the NCI features supported by NFCC */
1756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t max_ce_table; /* the max routing table size       */
1766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t max_conn;      /* the num of connections supported by NFCC */
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
1786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t nci_ctrl_size; /* Max Control Packet Payload Size */
1796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  const tNCI_DISCOVER_MAPS*
1816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      p_disc_maps; /* NCI RF Discovery interface mapping */
1826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t vs_interface
1836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi      [NFC_NFCC_MAX_NUM_VS_INTERFACE]; /* the NCI VS interfaces of NFCC    */
1846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t nci_interfaces;             /* the NCI interfaces of NFCC       */
185f928d73c8c23ab10ee3ad794094da3e52c730967Love Khanna  uint8_t nci_intf_extensions;
186f928d73c8c23ab10ee3ad794094da3e52c730967Love Khanna  uint8_t nci_intf_extension_map[NCI_INTERFACE_EXTENSION_MAX];
1876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t num_disc_maps; /* number of RF Discovery interface mappings */
1886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  void* p_disc_pending;  /* the parameters associated with pending
1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                            NFC_DiscoveryStart */
1906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  /* NFC_TASK timer management */
1926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  TIMER_LIST_Q timer_queue; /* 1-sec timer event queue */
1936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  TIMER_LIST_Q quick_timer_queue;
19481e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna  TIMER_LIST_ENT mode_set_ntf_timer; /* Timer to wait for deactivation */
1957e16563ba20c63ec431301e77405fe29791f2486Ruchi Kandoi  TIMER_LIST_ENT deactivate_timer;   /* Timer to wait for deactivation */
1966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
1976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tNFC_STATE nfc_state;
1986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  bool reassembly; /* Reassemble fragmented data pkt */
1996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t last_hdr[NFC_SAVED_HDR_SIZE]; /* part of last NCI command header */
2006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t last_cmd[NFC_SAVED_CMD_SIZE]; /* part of last NCI command payload */
2016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  void* p_vsc_cback;       /* the callback function for last VSC command */
2026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  BUFFER_Q nci_cmd_xmit_q; /* NCI command queue */
2036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  TIMER_LIST_ENT
2046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  nci_wait_rsp_timer;         /* Timer for waiting for nci command response */
2056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint16_t nci_wait_rsp_tout; /* NCI command timeout (in ms) */
2066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t nci_wait_rsp;       /* layer_specific for last NCI message */
2076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
2086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  uint8_t nci_cmd_window; /* Number of commands the controller can accecpt
2096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                             without waiting for response */
2106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
2116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  NFC_HDR* p_nci_init_rsp; /* holding INIT_RSP until receiving
2126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                              HAL_NFC_POST_INIT_CPLT_EVT */
2136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi  tHAL_NFC_ENTRY* p_hal;
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
2153f64b002fc7bea3004fcce63a1a503f67d69ba9bRuchi Kandoi  uint8_t nci_version; /* NCI version used for NCI communication*/
21613c476001290c544cad3f1c4bc71f8d79ca8b47fLove Khanna
2171d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna  bool isScbrSupported; /* indicating if system code based route is supported */
2181d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna
219f928d73c8c23ab10ee3ad794094da3e52c730967Love Khanna  uint8_t hci_packet_size; /* maximum hci payload size*/
220f928d73c8c23ab10ee3ad794094da3e52c730967Love Khanna
221f928d73c8c23ab10ee3ad794094da3e52c730967Love Khanna  uint8_t hci_conn_credits; /* maximum conn credits for static HCI*/
222f928d73c8c23ab10ee3ad794094da3e52c730967Love Khanna
223f928d73c8c23ab10ee3ad794094da3e52c730967Love Khanna  uint16_t nci_max_v_size; /*maximum NFC V rf frame size*/
224f928d73c8c23ab10ee3ad794094da3e52c730967Love Khanna
225d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna  uint8_t rawVsCbflag;
22613c476001290c544cad3f1c4bc71f8d79ca8b47fLove Khanna  uint8_t deact_reason;
22713c476001290c544cad3f1c4bc71f8d79ca8b47fLove Khanna
22881e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna  TIMER_LIST_ENT nci_mode_set_ntf_timer; /*Mode set notification timer*/
22981e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} tNFC_CB;
231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/*****************************************************************************
233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project**  EXTERNAL FUNCTION DECLARATIONS
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Global NFC data */
2376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFC_CB nfc_cb;
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Internal nfc functions
241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project****************************************************************************/
242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
243febfb87e33c24bd02cb0cb5ffe46b9a77742c396Love Khanna#define NCI_CALCULATE_ACK(a, v) \
2447ac6a7c4331ba287e4ee0cc7223ef1c9d090a274Chih-Hung Hsieh  { (a) &= ((1 << (v)) - 1); }
245febfb87e33c24bd02cb0cb5ffe46b9a77742c396Love Khanna#define MAX_NUM_VALID_BITS_FOR_ACK 0x07
246febfb87e33c24bd02cb0cb5ffe46b9a77742c396Love Khanna
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* from nfc_utils.c */
2486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFC_CONN_CB* nfc_alloc_conn_cb(tNFC_CONN_CBACK* p_cback);
2496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFC_CONN_CB* nfc_find_conn_cb_by_conn_id(uint8_t conn_id);
2506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFC_CONN_CB* nfc_find_conn_cb_by_handle(uint8_t target_handle);
2516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_set_conn_id(tNFC_CONN_CB* p_cb, uint8_t conn_id);
2526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_free_conn_cb(tNFC_CONN_CB* p_cb);
2536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_reset_all_conn_cbs(void);
2546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_data_event(tNFC_CONN_CB* p_cb);
2556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
2566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern uint8_t nfc_ncif_send_data(tNFC_CONN_CB* p_cb, NFC_HDR* p_data);
2576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_cmd_timeout(void);
2586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_wait_2_deactivate_timeout(void);
25981e4f816534a9d9137ce202d1b158720cc13eb78Love Khannaextern void nfc_mode_set_ntf_timeout(void);
2606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
2616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern bool nfc_ncif_process_event(NFC_HDR* p_msg);
2626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_check_cmd_queue(NFC_HDR* p_buf);
2636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_send_cmd(NFC_HDR* p_buf);
2646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_discover_ntf(uint8_t* p, uint16_t plen);
2656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_rf_management_status(tNFC_DISCOVER_EVT event,
2666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                          uint8_t status);
2676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_set_config_status(uint8_t* p, uint8_t len);
2686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_event_status(tNFC_RESPONSE_EVT event, uint8_t status);
2696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_error_status(uint8_t conn_id, uint8_t status);
2706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_credits(uint8_t* p, uint16_t plen);
2716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_activate(uint8_t* p, uint8_t len);
2726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_deactivate(uint8_t status, uint8_t deact_type,
2736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                     bool is_ntf);
274303fec1d79b7ac30a09713e5db9fff299f7227fbRuchi Kandoi#if (NFC_NFCEE_INCLUDED == TRUE && NFC_RW_ONLY == FALSE)
2756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_ee_action(uint8_t* p, uint16_t plen);
2766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_ee_discover_req(uint8_t* p, uint16_t plen);
2776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_get_routing(uint8_t* p, uint8_t len);
278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
2796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_conn_create_rsp(uint8_t* p, uint16_t plen,
2806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                                          uint8_t dest_type);
2816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_report_conn_close_evt(uint8_t conn_id, tNFC_STATUS status);
2826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_t3t_polling_ntf(uint8_t* p, uint16_t plen);
2836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_reset_rsp(uint8_t* p, bool is_ntf);
2846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_init_rsp(NFC_HDR* p_msg);
2856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_get_config_rsp(NFC_HDR* p_msg);
2866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_data(NFC_HDR* p_msg);
2876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern bool nfa_dm_p2p_prio_logic(uint8_t event, uint8_t* p, uint8_t ntf_rsp);
2886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_dm_p2p_timer_event();
289d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khannaextern bool nfc_ncif_proc_proprietary_rsp(uint8_t mt, uint8_t gid, uint8_t oid);
2906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfa_dm_p2p_prio_logic_cleanup();
291d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khannaextern void nfc_ncif_proc_isodep_nak_presence_check_status(uint8_t status,
292d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna                                                           bool is_ntf);
293d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khannaextern void nfc_ncif_update_window(void);
294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE)
2956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern void nfc_ncif_proc_rf_field_ntf(uint8_t rf_status);
296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#else
297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#define nfc_ncif_proc_rf_field_ntf(rf_status)
298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif
299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* From nfc_task.c */
3015e56d28e0addee53e9db6039a62fe7aeb6fd3cd9Vishwath Mohanextern uint32_t nfc_task(uint32_t);
3026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfc_task_shutdown_nfcc(void);
303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* From nfc_main.c */
3056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfc_enabled(tNFC_STATUS nfc_status, NFC_HDR* p_init_rsp_msg);
3066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfc_set_state(tNFC_STATE nfc_state);
3076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfc_main_flush_cmd_queue(void);
3086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfc_gen_cleanup(void);
3096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfc_main_handle_hal_evt(tNFC_HAL_EVT_MSG* p_msg);
310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/* Timer functions */
3126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfc_start_timer(TIMER_LIST_ENT* p_tle, uint16_t type, uint32_t timeout);
3136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint32_t nfc_remaining_time(TIMER_LIST_ENT* p_tle);
3146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfc_stop_timer(TIMER_LIST_ENT* p_tle);
3156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi
3166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfc_start_quick_timer(TIMER_LIST_ENT* p_tle, uint16_t type,
3176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi                           uint32_t timeout);
3186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfc_stop_quick_timer(TIMER_LIST_ENT* p_tle);
3196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid nfc_process_quick_timer_evt(void);
320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFC_INT_H_ */
321