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