Home | History | Annotate | Download | only in hal
      1 /*
      2  * Copyright (C) 2010-2014 NXP Semiconductors
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 #ifndef _PHNXPNCIHAL_H_
     17 #define _PHNXPNCIHAL_H_
     18 
     19 #include <hardware/nfc.h>
     20 #include <phNxpNciHal_utils.h>
     21 #include "NxpNfcCapability.h"
     22 
     23 /********************* Definitions and structures *****************************/
     24 #define MAX_RETRY_COUNT 5
     25 #define NCI_MAX_DATA_LEN 300
     26 #define NCI_POLL_DURATION 500
     27 #define HAL_NFC_ENABLE_I2C_FRAGMENTATION_EVT 0x07
     28 #undef P2P_PRIO_LOGIC_HAL_IMP
     29 #define NCI_VERSION_2_0 0x20
     30 #define NCI_VERSION_1_1 0x11
     31 #define NCI_VERSION_1_0 0x10
     32 #define NCI_VERSION_UNKNOWN 0x00
     33 typedef void(phNxpNciHal_control_granted_callback_t)();
     34 
     35 /*ROM CODE VERSION FW*/
     36 #define FW_MOBILE_ROM_VERSION_PN551 0x10
     37 #define FW_MOBILE_ROM_VERSION_PN553 0x11
     38 #define FW_MOBILE_ROM_VERSION_PN557 0x12
     39 /* NCI Data */
     40 
     41 #define NCI_MT_CMD 0x20
     42 #define NCI_MT_RSP 0x40
     43 #define NCI_MT_NTF 0x60
     44 
     45 #define CORE_RESET_TRIGGER_TYPE_CORE_RESET_CMD_RECEIVED 0x02
     46 #define CORE_RESET_TRIGGER_TYPE_POWERED_ON 0x01
     47 #define NCI_MSG_CORE_RESET 0x00
     48 #define NCI_MSG_CORE_INIT 0x01
     49 #define NCI_MT_MASK 0xE0
     50 #define NCI_OID_MASK 0x3F
     51 
     52 #define NXP_MAX_CONFIG_STRING_LEN 260
     53 
     54 typedef struct nci_data {
     55   uint16_t len;
     56   uint8_t p_data[NCI_MAX_DATA_LEN];
     57 } nci_data_t;
     58 
     59 typedef enum {
     60   HAL_STATUS_CLOSE = 0,
     61   HAL_STATUS_OPEN,
     62   HAL_STATUS_MIN_OPEN
     63 } phNxpNci_HalStatus;
     64 
     65 typedef enum {
     66   GPIO_UNKNOWN = 0x00,
     67   GPIO_STORE = 0x01,
     68   GPIO_STORE_DONE = 0x02,
     69   GPIO_RESTORE = 0x10,
     70   GPIO_RESTORE_DONE = 0x20,
     71   GPIO_CLEAR = 0xFF
     72 } phNxpNciHal_GpioInfoState;
     73 
     74 typedef struct phNxpNciGpioInfo {
     75   phNxpNciHal_GpioInfoState state;
     76   uint8_t values[2];
     77 } phNxpNciGpioInfo_t;
     78 
     79 /* Macros to enable and disable extensions */
     80 #define HAL_ENABLE_EXT() (nxpncihal_ctrl.hal_ext_enabled = 1)
     81 #define HAL_DISABLE_EXT() (nxpncihal_ctrl.hal_ext_enabled = 0)
     82 typedef struct phNxpNciInfo {
     83   uint8_t nci_version;
     84   bool_t wait_for_ntf;
     85 } phNxpNciInfo_t;
     86 /* NCI Control structure */
     87 typedef struct phNxpNciHal_Control {
     88   phNxpNci_HalStatus halStatus; /* Indicate if hal is open or closed */
     89   pthread_t client_thread;      /* Integration thread handle */
     90   uint8_t thread_running;       /* Thread running if set to 1, else set to 0 */
     91   phLibNfc_sConfig_t gDrvCfg;   /* Driver config data */
     92 
     93   /* Rx data */
     94   uint8_t* p_rx_data;
     95   uint16_t rx_data_len;
     96 
     97   /* Rx data */
     98   uint8_t* p_rx_ese_data;
     99   uint16_t rx_ese_data_len;
    100 
    101   /* libnfc-nci callbacks */
    102   nfc_stack_callback_t* p_nfc_stack_cback;
    103   nfc_stack_data_callback_t* p_nfc_stack_data_cback;
    104 
    105   /* control granted callback */
    106   phNxpNciHal_control_granted_callback_t* p_control_granted_cback;
    107 
    108   /* HAL open status */
    109   bool_t hal_open_status;
    110 
    111   /* HAL extensions */
    112   uint8_t hal_ext_enabled;
    113 
    114   /* Waiting semaphore */
    115   phNxpNciHal_Sem_t ext_cb_data;
    116   sem_t syncSpiNfc;
    117 
    118   uint16_t cmd_len;
    119   uint8_t p_cmd_data[NCI_MAX_DATA_LEN];
    120   uint16_t rsp_len;
    121   uint8_t p_rsp_data[NCI_MAX_DATA_LEN];
    122 
    123   /* retry count used to force download */
    124   uint16_t retry_cnt;
    125   uint8_t read_retry_cnt;
    126   phNxpNciInfo_t nci_info;
    127 
    128   /* to store and restore gpio values */
    129   phNxpNciGpioInfo_t phNxpNciGpioInfo;
    130   bool bIsForceFwDwnld;
    131 } phNxpNciHal_Control_t;
    132 
    133 typedef struct phNxpNciClock {
    134   bool_t isClockSet;
    135   uint8_t p_rx_data[20];
    136   bool_t issetConfig;
    137 } phNxpNciClock_t;
    138 
    139 typedef struct phNxpNciRfSetting {
    140   bool_t isGetRfSetting;
    141   uint8_t p_rx_data[20];
    142 } phNxpNciRfSetting_t;
    143 
    144 typedef struct phNxpNciMwEepromArea {
    145   bool_t isGetEepromArea;
    146   uint8_t p_rx_data[32];
    147 } phNxpNciMwEepromArea_t;
    148 
    149 typedef enum {
    150   NFC_FORUM_PROFILE,
    151   EMV_CO_PROFILE,
    152   INVALID_PROFILe
    153 } phNxpNciProfile_t;
    154 /* NXP Poll Profile control structure */
    155 typedef struct phNxpNciProfile_Control {
    156   phNxpNciProfile_t profile_type;
    157   uint8_t bClkSrcVal; /* Holds the System clock source read from config file */
    158   uint8_t
    159       bClkFreqVal;  /* Holds the System clock frequency read from config file */
    160   uint8_t bTimeout; /* Holds the Timeout Value */
    161 } phNxpNciProfile_Control_t;
    162 
    163 /* Internal messages to handle callbacks */
    164 #define NCI_HAL_OPEN_CPLT_MSG 0x411
    165 #define NCI_HAL_CLOSE_CPLT_MSG 0x412
    166 #define NCI_HAL_POST_INIT_CPLT_MSG 0x413
    167 #define NCI_HAL_PRE_DISCOVER_CPLT_MSG 0x414
    168 #define NCI_HAL_ERROR_MSG 0x415
    169 #define NCI_HAL_HCI_NETWORK_RESET_MSG 0x416
    170 #define NCI_HAL_RX_MSG 0xF01
    171 
    172 #define NCIHAL_CMD_CODE_LEN_BYTE_OFFSET (2U)
    173 #define NCIHAL_CMD_CODE_BYTE_LEN (3U)
    174 
    175 /******************** NCI HAL exposed functions *******************************/
    176 int phNxpNciHal_check_ncicmd_write_window(uint16_t cmd_len, uint8_t* p_cmd);
    177 void phNxpNciHal_request_control(void);
    178 void phNxpNciHal_release_control(void);
    179 int phNxpNciHal_write_unlocked(uint16_t data_len, const uint8_t* p_data);
    180 /*******************************************************************************
    181 **
    182 ** Function         phNxpNciHal_configFeatureList
    183 **
    184 ** Description      Configures the featureList based on chip type
    185 
    186 ** Returns          none
    187 *******************************************************************************/
    188 void phNxpNciHal_configFeatureList(uint8_t* init_rsp, uint16_t rsp_len);
    189 #endif /* _PHNXPNCIHAL_H_ */
    190