/******************************************************************************
 *
 *  Copyright (C) 2010-2014 Broadcom Corporation
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at:
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 ******************************************************************************/

/******************************************************************************
 *
 *  This is the private interface file for the NFA EE.
 *
 ******************************************************************************/
#ifndef NFA_EE_INT_H
#define NFA_EE_INT_H
#include "nfa_ee_api.h"
#include "nfa_sys.h"
#include "nfc_api.h"

/*****************************************************************************
**  Constants and data types
*****************************************************************************/
/* the number of tNFA_EE_ECBs (for NFCEEs and DH) */
#define NFA_EE_NUM_ECBS (NFA_EE_MAX_EE_SUPPORTED + 1)
/* The index for DH in nfa_ee_cb.ee_cb[] */
#define NFA_EE_CB_4_DH NFA_EE_MAX_EE_SUPPORTED
#define NFA_EE_INVALID 0xFF
/* only A, B, F, Bprime are supported by UICC now */
#define NFA_EE_MAX_TECH_ROUTE 4

#ifndef NFA_EE_AID_CFG_TAG_NAME
/* AID                             */
#define NFA_EE_AID_CFG_TAG_NAME 0x4F
#endif

/* NFA EE events */
enum {
  NFA_EE_API_DISCOVER_EVT = NFA_SYS_EVT_START(NFA_ID_EE),
  NFA_EE_API_REGISTER_EVT,
  NFA_EE_API_DEREGISTER_EVT,
  NFA_EE_API_MODE_SET_EVT,
  NFA_EE_API_SET_TECH_CFG_EVT,
  NFA_EE_API_SET_PROTO_CFG_EVT,
  NFA_EE_API_ADD_AID_EVT,
  NFA_EE_API_REMOVE_AID_EVT,
  NFA_EE_API_ADD_SYSCODE_EVT,
  NFA_EE_API_REMOVE_SYSCODE_EVT,
  NFA_EE_API_LMRT_SIZE_EVT,
  NFA_EE_API_UPDATE_NOW_EVT,
  NFA_EE_API_CONNECT_EVT,
  NFA_EE_API_SEND_DATA_EVT,
  NFA_EE_API_DISCONNECT_EVT,

  NFA_EE_NCI_DISC_RSP_EVT,
  NFA_EE_NCI_DISC_NTF_EVT,
  NFA_EE_NCI_MODE_SET_RSP_EVT,
  NFA_EE_NCI_CONN_EVT,
  NFA_EE_NCI_DATA_EVT,
  NFA_EE_NCI_ACTION_NTF_EVT,
  NFA_EE_NCI_DISC_REQ_NTF_EVT,
  NFA_EE_NCI_WAIT_RSP_EVT,

  NFA_EE_ROUT_TIMEOUT_EVT,
  NFA_EE_DISCV_TIMEOUT_EVT,
  NFA_EE_CFG_TO_NFCC_EVT,
  NFA_EE_MAX_EVT

};

typedef uint16_t tNFA_EE_INT_EVT;
/* for listen mode routing table*/
#define NFA_EE_AE_ROUTE 0x80
#define NFA_EE_AE_VS 0x40

/* NFA EE Management state */
enum {
  NFA_EE_EM_STATE_INIT = 0,
  NFA_EE_EM_STATE_INIT_DONE,
  NFA_EE_EM_STATE_RESTORING,
  NFA_EE_EM_STATE_DISABLING,
  NFA_EE_EM_STATE_DISABLED,

  NFA_EE_EM_STATE_MAX
};
typedef uint8_t tNFA_EE_EM_STATE;

/* NFA EE connection status */
enum {
  NFA_EE_CONN_ST_NONE, /* not connected */
  NFA_EE_CONN_ST_WAIT, /* connection is initiated; waiting for ack */
  NFA_EE_CONN_ST_CONN, /* connected; can send/receive data */
  NFA_EE_CONN_ST_DISC  /* disconnecting; waiting for ack */
};
typedef uint8_t tNFA_EE_CONN_ST;

#define NFA_EE_MAX_AID_CFG_LEN (510)

#define NFA_EE_SYSTEM_CODE_LEN 02
#define NFA_EE_SYSTEM_CODE_TLV_SIZE 06
#define NFA_EE_MAX_SYSTEM_CODE_ENTRIES 10
#define NFA_EE_MAX_SYSTEM_CODE_CFG_LEN \
  (NFA_EE_MAX_SYSTEM_CODE_ENTRIES * NFA_EE_SYSTEM_CODE_TLV_SIZE)

/* NFA EE control block flags:
 * use to indicate an API function has changed the configuration of the
 * associated NFCEE
 * The flags are cleared when the routing table/VS is updated */
/* technology routing changed         */
#define NFA_EE_ECB_FLAGS_TECH 0x02
/* protocol routing changed           */
#define NFA_EE_ECB_FLAGS_PROTO 0x04
/* AID routing changed                */
#define NFA_EE_ECB_FLAGS_AID 0x08
/* System Code routing changed        */
#define NFA_EE_ECB_FLAGS_SYSCODE 0xE0
/* VS changed                         */
#define NFA_EE_ECB_FLAGS_VS 0x10
/* Restore related                    */
#define NFA_EE_ECB_FLAGS_RESTORE 0x20
/* routing flags changed              */
#define NFA_EE_ECB_FLAGS_ROUTING 0x0E
/* NFCEE Discover Request NTF is set  */
#define NFA_EE_ECB_FLAGS_DISC_REQ 0x40
/* DISC_REQ N reported before DISC N  */
#define NFA_EE_ECB_FLAGS_ORDER 0x80
typedef uint8_t tNFA_EE_ECB_FLAGS;

/* part of tNFA_EE_STATUS; for internal use only  */
/* waiting for restore to full power mode to complete */
#define NFA_EE_STATUS_RESTORING 0x20
/* this bit is in ee_status for internal use only */
#define NFA_EE_STATUS_INT_MASK 0x20

/* NFA-EE information for a particular NFCEE Entity (including DH) */
typedef struct {
  tNFA_TECHNOLOGY_MASK
      tech_switch_on; /* default routing - technologies switch_on  */
  tNFA_TECHNOLOGY_MASK
      tech_switch_off; /* default routing - technologies switch_off */
  tNFA_TECHNOLOGY_MASK
      tech_battery_off; /* default routing - technologies battery_off*/
  tNFA_PROTOCOL_MASK
      proto_switch_on; /* default routing - protocols switch_on     */
  tNFA_PROTOCOL_MASK
      proto_switch_off; /* default routing - protocols switch_off    */
  tNFA_PROTOCOL_MASK
      proto_battery_off;     /* default routing - protocols battery_off   */
  tNFA_EE_CONN_ST conn_st;   /* connection status */
  uint8_t conn_id;           /* connection id */
  tNFA_EE_CBACK* p_ee_cback; /* the callback function */

  /* Each AID entry has an ssociated aid_len, aid_pwr_cfg, aid_rt_info.
   * aid_cfg[] contains AID and maybe some other VS information in TLV format
   * The first T is always NFA_EE_AID_CFG_TAG_NAME, the L is the actual AID
   * length
   * the aid_len is the total length of all the TLVs associated with this AID
   * entry
   */
  uint8_t aid_len[NFA_EE_MAX_AID_ENTRIES]; /* the actual lengths in aid_cfg */
  uint8_t aid_pwr_cfg[NFA_EE_MAX_AID_ENTRIES]; /* power configuration of this
                                                  AID entry */
  uint8_t aid_rt_info[NFA_EE_MAX_AID_ENTRIES]; /* route/vs info for this AID
                                                  entry */
  uint8_t aid_cfg[NFA_EE_MAX_AID_CFG_LEN]; /* routing entries based on AID */
  uint8_t aid_entries;   /* The number of AID entries in aid_cfg */
  uint8_t nfcee_id;      /* ID for this NFCEE */
  uint8_t ee_status;     /* The NFCEE status */
  uint8_t ee_old_status; /* The NFCEE status before going to low power mode */
  tNFA_EE_INTERFACE
      ee_interface[NFC_MAX_EE_INTERFACE]; /* NFCEE supported interface */
  tNFA_EE_TLV ee_tlv[NFC_MAX_EE_TLVS];    /* the TLV */
  uint8_t num_interface;                  /* number of Target interface */
  uint8_t num_tlvs;                       /* number of TLVs */
  uint8_t ee_power_supply_status;         /* power supply of NFCEE*/
  tNFA_EE_ECB_FLAGS ecb_flags;            /* the flags of this control block */
  tNFA_EE_INTERFACE use_interface; /* NFCEE interface used for the connection */
  tNFA_NFC_PROTOCOL la_protocol;   /* Listen A protocol    */
  tNFA_NFC_PROTOCOL lb_protocol;   /* Listen B protocol    */
  tNFA_NFC_PROTOCOL lf_protocol;   /* Listen F protocol    */
  tNFA_NFC_PROTOCOL lbp_protocol;  /* Listen B' protocol   */
  uint8_t size_mask; /* the size for technology and protocol routing */
  uint16_t size_aid; /* the size for aid routing */
  uint8_t aid_info[NFA_EE_MAX_AID_ENTRIES]; /* Aid Info Prefix/Suffix/Exact */
  /*System Code Based Routing Variables*/
  uint8_t sys_code_cfg[NFA_EE_MAX_SYSTEM_CODE_ENTRIES * NFA_EE_SYSTEM_CODE_LEN];
  uint8_t sys_code_pwr_cfg[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
  uint8_t sys_code_rt_loc[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
  uint8_t sys_code_rt_loc_vs_info[NFA_EE_MAX_SYSTEM_CODE_ENTRIES];
  /* The number of SC entries in sys_code_cfg buffer*/
  uint8_t sys_code_cfg_entries;
  uint16_t size_sys_code; /* The size for system code routing */
} tNFA_EE_ECB;

/* data type for NFA_EE_API_DISCOVER_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_CBACK* p_cback;
} tNFA_EE_API_DISCOVER;

/* data type for NFA_EE_API_REGISTER_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_CBACK* p_cback;
} tNFA_EE_API_REGISTER;

/* data type for NFA_EE_API_DEREGISTER_EVT */
typedef struct {
  NFC_HDR hdr;
  int index;
} tNFA_EE_API_DEREGISTER;

/* data type for NFA_EE_API_MODE_SET_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  uint8_t mode;
} tNFA_EE_API_MODE_SET;

/* data type for NFA_EE_API_SET_TECH_CFG_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  tNFA_TECHNOLOGY_MASK technologies_switch_on;
  tNFA_TECHNOLOGY_MASK technologies_switch_off;
  tNFA_TECHNOLOGY_MASK technologies_battery_off;
} tNFA_EE_API_SET_TECH_CFG;

/* data type for NFA_EE_API_SET_PROTO_CFG_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  tNFA_PROTOCOL_MASK protocols_switch_on;
  tNFA_PROTOCOL_MASK protocols_switch_off;
  tNFA_PROTOCOL_MASK protocols_battery_off;
} tNFA_EE_API_SET_PROTO_CFG;

/* data type for NFA_EE_API_ADD_AID_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  uint8_t aid_len;
  uint8_t* p_aid;
  tNFA_EE_PWR_STATE power_state;
  uint8_t aidInfo;
} tNFA_EE_API_ADD_AID;

/* data type for NFA_EE_API_REMOVE_AID_EVT */
typedef struct {
  NFC_HDR hdr;
  uint8_t aid_len;
  uint8_t* p_aid;
} tNFA_EE_API_REMOVE_AID;

/* data type for NFA_EE_API_ADD_SYSCODE_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  uint16_t syscode;
  tNFA_EE_PWR_STATE power_state;
} tNFA_EE_API_ADD_SYSCODE;

/* data type for NFA_EE_API_REMOVE_SYSCODE_EVT */
typedef struct {
  NFC_HDR hdr;
  uint16_t syscode;
} tNFA_EE_API_REMOVE_SYSCODE;

/* data type for NFA_EE_API_LMRT_SIZE_EVT */
typedef NFC_HDR tNFA_EE_API_LMRT_SIZE;

/* data type for NFA_EE_API_CONNECT_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  uint8_t ee_interface;
  tNFA_EE_CBACK* p_cback;
} tNFA_EE_API_CONNECT;

/* data type for NFA_EE_API_SEND_DATA_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
  uint16_t data_len;
  uint8_t* p_data;
} tNFA_EE_API_SEND_DATA;

/* data type for NFA_EE_API_DISCONNECT_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
} tNFA_EE_API_DISCONNECT;

/* common data type for internal events with nfa_ee_use_cfg_cb[] as TRUE */
typedef struct {
  NFC_HDR hdr;
  tNFA_EE_ECB* p_cb;
  uint8_t nfcee_id;
} tNFA_EE_CFG_HDR;

/* data type for NFA_EE_NCI_DISC_RSP_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_NFCEE_DISCOVER_REVT* p_data;
} tNFA_EE_NCI_DISC_RSP;

/* data type for NFA_EE_NCI_DISC_NTF_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_NFCEE_INFO_REVT* p_data;
} tNFA_EE_NCI_DISC_NTF;

/* data type for NFA_EE_NCI_MODE_SET_RSP_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_NFCEE_MODE_SET_REVT* p_data;
} tNFA_EE_NCI_MODE_SET;

/* data type for NFA_EE_NCI_WAIT_RSP_EVT */
typedef struct {
  NFC_HDR hdr;
  void* p_data;
  uint8_t opcode;
} tNFA_EE_NCI_WAIT_RSP;

/* data type for NFA_EE_NCI_CONN_EVT and NFA_EE_NCI_DATA_EVT */
typedef struct {
  NFC_HDR hdr;
  uint8_t conn_id;
  tNFC_CONN_EVT event;
  tNFC_CONN* p_data;
} tNFA_EE_NCI_CONN;

/* data type for NFA_EE_NCI_ACTION_NTF_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_EE_ACTION_REVT* p_data;
} tNFA_EE_NCI_ACTION;

/* data type for NFA_EE_NCI_DISC_REQ_NTF_EVT */
typedef struct {
  NFC_HDR hdr;
  tNFC_EE_DISCOVER_REQ_REVT* p_data;
} tNFA_EE_NCI_DISC_REQ;

/* union of all event data types */
typedef union {
  NFC_HDR hdr;
  tNFA_EE_CFG_HDR cfg_hdr;
  tNFA_EE_API_DISCOVER ee_discover;
  tNFA_EE_API_REGISTER ee_register;
  tNFA_EE_API_DEREGISTER deregister;
  tNFA_EE_API_MODE_SET mode_set;
  tNFA_EE_API_SET_TECH_CFG set_tech;
  tNFA_EE_API_SET_PROTO_CFG set_proto;
  tNFA_EE_API_ADD_AID add_aid;
  tNFA_EE_API_REMOVE_AID rm_aid;
  tNFA_EE_API_ADD_SYSCODE add_syscode;
  tNFA_EE_API_REMOVE_SYSCODE rm_syscode;
  tNFA_EE_API_LMRT_SIZE lmrt_size;
  tNFA_EE_API_CONNECT connect;
  tNFA_EE_API_SEND_DATA send_data;
  tNFA_EE_API_DISCONNECT disconnect;
  tNFA_EE_NCI_DISC_RSP disc_rsp;
  tNFA_EE_NCI_DISC_NTF disc_ntf;
  tNFA_EE_NCI_MODE_SET mode_set_rsp;
  tNFA_EE_NCI_WAIT_RSP wait_rsp;
  tNFA_EE_NCI_CONN conn;
  tNFA_EE_NCI_ACTION act;
  tNFA_EE_NCI_DISC_REQ disc_req;
} tNFA_EE_MSG;

/* type for State Machine (SM) action functions */
typedef void (*tNFA_EE_SM_ACT)(tNFA_EE_MSG* p_data);

/*****************************************************************************
**  control block
*****************************************************************************/
#define NFA_EE_CFGED_UPDATE_NOW 0x80
/* either switch off or battery off is configured */
#define NFA_EE_CFGED_OFF_ROUTING 0x40

/* the following status are the definition used in ee_cfg_sts */
#define NFA_EE_STS_CHANGED_ROUTING 0x01
#define NFA_EE_STS_CHANGED 0x0f
#define NFA_EE_STS_PREV_ROUTING 0x10
#define NFA_EE_STS_PREV 0xf0

/* need to report NFA_EE_UPDATED_EVT */
#define NFA_EE_WAIT_UPDATE 0x10
/* waiting for the rsp of set routing commands */
#define NFA_EE_WAIT_UPDATE_RSP 0x20
#define NFA_EE_WAIT_UPDATE_ALL 0xF0

typedef uint8_t tNFA_EE_WAIT;

/* set this bit when waiting for HCI to finish the initialization process in
 * NFA_EE_EM_STATE_RESTORING */
#define NFA_EE_FLAG_WAIT_HCI 0x01
/* set this bit when EE needs to notify the p_enable_cback at the end of NFCEE
 * discover process in NFA_EE_EM_STATE_RESTORING */
#define NFA_EE_FLAG_NOTIFY_HCI 0x02
/* set this bit when gracefully disable with outstanding NCI connections */
#define NFA_EE_FLAG_WAIT_DISCONN 0x04
typedef uint8_t tNFA_EE_FLAGS;

/* NFCEE DISCOVER in progress       */
#define NFA_EE_DISC_STS_ON 0x00
/* disable NFCEE DISCOVER           */
#define NFA_EE_DISC_STS_OFF 0x01
/* received NFCEE DISCOVER REQ NTF  */
#define NFA_EE_DISC_STS_REQ 0x02
/* received NFA_EE_MODE_SET_COMPLETE  */
#define NFA_EE_MODE_SET_COMPLETE 0x03
typedef uint8_t tNFA_EE_DISC_STS;

typedef void(tNFA_EE_ENABLE_DONE_CBACK)(tNFA_EE_DISC_STS status);

/* NFA EE Management control block */
typedef struct {
  tNFA_EE_ECB ecb[NFA_EE_NUM_ECBS]; /* control block for DH and NFCEEs  */
  TIMER_LIST_ENT timer;             /* timer to send info to NFCC       */
  TIMER_LIST_ENT discv_timer;       /* timer to end NFCEE discovery     */
  tNFA_EE_CBACK* p_ee_cback[NFA_EE_MAX_CBACKS]; /* to report EE events       */
  tNFA_EE_CBACK* p_ee_disc_cback; /* to report EE discovery result    */
  tNFA_EE_ENABLE_DONE_CBACK*
      p_enable_cback;          /* callback to notify on enable done*/
  tNFA_EE_EM_STATE em_state;   /* NFA-EE state initialized or not  */
  uint8_t wait_rsp;            /* num of NCI rsp expected (update) */
  uint8_t num_ee_expecting;    /* number of ee_info still expecting*/
  uint8_t cur_ee;              /* the number of ee_info in cb      */
  uint8_t ee_cfged;            /* the bit mask of configured ECBs  */
  uint8_t ee_cfg_sts;          /* configuration status             */
  tNFA_EE_WAIT ee_wait_evt;    /* Pending event(s) to be reported  */
  tNFA_EE_FLAGS ee_flags;      /* flags                            */
  uint8_t route_block_control; /* controls route block feature   */
} tNFA_EE_CB;

/* Order of Routing entries in Routing Table */
#define NCI_ROUTE_ORDER_AID 0x01        /* AID routing order */
#define NCI_ROUTE_ORDER_SYS_CODE 0x03   /* System Code routing order*/
#define NCI_ROUTE_ORDER_PROTOCOL 0x04   /* Protocol routing order*/
#define NCI_ROUTE_ORDER_TECHNOLOGY 0x05 /* Technology routing order*/

/*****************************************************************************
**  External variables
*****************************************************************************/

/* NFA EE control block */
extern tNFA_EE_CB nfa_ee_cb;

/*****************************************************************************
**  External functions
*****************************************************************************/
/* function prototypes - exported from nfa_ee_main.c */
void nfa_ee_sys_enable(void);
void nfa_ee_sys_disable(void);

/* event handler function type */
bool nfa_ee_evt_hdlr(NFC_HDR* p_msg);
void nfa_ee_proc_nfcc_power_mode(uint8_t nfcc_power_mode);
#if (NFC_NFCEE_INCLUDED == TRUE)
void nfa_ee_get_tech_route(uint8_t power_state, uint8_t* p_handles);
#endif
void nfa_ee_proc_evt(tNFC_RESPONSE_EVT event, void* p_data);
tNFA_EE_ECB* nfa_ee_find_ecb(uint8_t nfcee_id);
tNFA_EE_ECB* nfa_ee_find_ecb_by_conn_id(uint8_t conn_id);
uint8_t nfa_ee_ecb_to_mask(tNFA_EE_ECB* p_cb);
void nfa_ee_restore_one_ecb(tNFA_EE_ECB* p_cb);
bool nfa_ee_is_active(tNFA_HANDLE nfcee_id);

/* Action function prototypes - nfa_ee_act.c */
void nfa_ee_api_discover(tNFA_EE_MSG* p_data);
void nfa_ee_api_register(tNFA_EE_MSG* p_data);
void nfa_ee_api_deregister(tNFA_EE_MSG* p_data);
void nfa_ee_api_mode_set(tNFA_EE_MSG* p_data);
void nfa_ee_api_set_tech_cfg(tNFA_EE_MSG* p_data);
void nfa_ee_api_set_proto_cfg(tNFA_EE_MSG* p_data);
void nfa_ee_api_add_aid(tNFA_EE_MSG* p_data);
void nfa_ee_api_remove_aid(tNFA_EE_MSG* p_data);
void nfa_ee_api_add_sys_code(tNFA_EE_MSG* p_data);
void nfa_ee_api_remove_sys_code(tNFA_EE_MSG* p_data);
void nfa_ee_api_lmrt_size(tNFA_EE_MSG* p_data);
void nfa_ee_api_update_now(tNFA_EE_MSG* p_data);
void nfa_ee_api_connect(tNFA_EE_MSG* p_data);
void nfa_ee_api_send_data(tNFA_EE_MSG* p_data);
void nfa_ee_api_disconnect(tNFA_EE_MSG* p_data);
void nfa_ee_report_disc_done(bool notify_sys);
void nfa_ee_nci_disc_rsp(tNFA_EE_MSG* p_data);
void nfa_ee_nci_disc_ntf(tNFA_EE_MSG* p_data);
void nfa_ee_nci_mode_set_rsp(tNFA_EE_MSG* p_data);
void nfa_ee_nci_wait_rsp(tNFA_EE_MSG* p_data);
void nfa_ee_nci_conn(tNFA_EE_MSG* p_data);
void nfa_ee_nci_action_ntf(tNFA_EE_MSG* p_data);
void nfa_ee_nci_disc_req_ntf(tNFA_EE_MSG* p_data);
void nfa_ee_rout_timeout(tNFA_EE_MSG* p_data);
void nfa_ee_discv_timeout(tNFA_EE_MSG* p_data);
void nfa_ee_lmrt_to_nfcc(tNFA_EE_MSG* p_data);
void nfa_ee_update_rout(void);
void nfa_ee_report_event(tNFA_EE_CBACK* p_cback, tNFA_EE_EVT event,
                         tNFA_EE_CBACK_DATA* p_data);
tNFA_EE_ECB* nfa_ee_find_aid_offset(uint8_t aid_len, uint8_t* p_aid,
                                    int* p_offset, int* p_entry);
tNFA_EE_ECB* nfa_ee_find_sys_code_offset(uint16_t sys_code, int* p_offset,
                                         int* p_entry);
int nfa_ee_find_total_aid_len(tNFA_EE_ECB* p_cb, int start_entry);
void nfa_ee_start_timer(void);
void nfa_ee_reg_cback_enable_done(tNFA_EE_ENABLE_DONE_CBACK* p_cback);
void nfa_ee_report_update_evt(void);

extern void nfa_ee_proc_hci_info_cback(void);
void nfa_ee_check_disable(void);
bool nfa_ee_restore_ntf_done(void);
void nfa_ee_check_restore_complete(void);

#endif /* NFA_P2P_INT_H */
