/****************************************************************************** * * Copyright 2018 NXP * * 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. * ******************************************************************************/ #ifndef ANDROID_HARDWARE_HAL_NXPNFC_V1_0_H #define ANDROID_HARDWARE_HAL_NXPNFC_V1_0_H #define NFC_NCI_NXP_PN54X_HARDWARE_MODULE_ID "nfc_nci.pn54x" #define MAX_IOCTL_TRANSCEIVE_CMD_LEN 256 #define MAX_IOCTL_TRANSCEIVE_RESP_LEN 256 #define MAX_ATR_INFO_LEN 128 enum { // HAL_NFC_ENABLE_I2C_FRAGMENTATION_EVT = 0x07, HAL_NFC_POST_MIN_INIT_CPLT_EVT = 0x08 }; /* * Data structures provided below are used of Hal Ioctl calls */ /* * nfc_nci_ExtnCmd_t shall contain data for commands used for transceive command * in ioctl */ typedef struct { uint16_t cmd_len; uint8_t p_cmd[MAX_IOCTL_TRANSCEIVE_CMD_LEN]; } nfc_nci_ExtnCmd_t; /* * nfc_nci_ExtnRsp_t shall contain response for command sent in transceive * command */ typedef struct { uint16_t rsp_len; uint8_t p_rsp[MAX_IOCTL_TRANSCEIVE_RESP_LEN]; } nfc_nci_ExtnRsp_t; /* * InputData_t :ioctl has multiple subcommands * Each command has corresponding input data which needs to be populated in this */ typedef union { uint16_t bootMode; uint8_t halType; nfc_nci_ExtnCmd_t nciCmd; uint32_t timeoutMilliSec; long nfcServicePid; } InputData_t; /* * nfc_nci_ExtnInputData_t :Apart from InputData_t, there are context data * which is required during callback from stub to proxy. * To avoid additional copy of data while propagating from libnfc to Adaptation * and Nfcstub to ncihal, common structure is used. As a sideeffect, context * data * is exposed to libnfc (Not encapsulated). */ typedef struct { /*context to be used/updated only by users of proxy & stub of Nfc.hal * i.e, NfcAdaptation & hardware/interface/Nfc. */ void* context; InputData_t data; uint8_t data_source; long level; } nfc_nci_ExtnInputData_t; /* * outputData_t :ioctl has multiple commands/responses * This contains the output types for each ioctl. */ typedef union { uint32_t status; nfc_nci_ExtnRsp_t nciRsp; uint8_t nxpNciAtrInfo[MAX_ATR_INFO_LEN]; uint32_t p61CurrentState; uint16_t fwUpdateInf; uint16_t fwDwnldStatus; uint16_t fwMwVerStatus; uint8_t chipType; } outputData_t; /* * nfc_nci_ExtnOutputData_t :Apart from outputData_t, there are other * information * which is required during callback from stub to proxy. * For ex (context, result of the operation , type of ioctl which was * completed). * To avoid additional copy of data while propagating from libnfc to Adaptation * and Nfcstub to ncihal, common structure is used. As a sideeffect, these data * is exposed(Not encapsulated). */ typedef struct { /*ioctlType, result & context to be used/updated only by users of * proxy & stub of Nfc.hal. * i.e, NfcAdaptation & hardware/interface/Nfc * These fields shall not be used by libnfc or halimplementation*/ uint64_t ioctlType; uint32_t result; void* context; outputData_t data; } nfc_nci_ExtnOutputData_t; /* * nfc_nci_IoctlInOutData_t :data structure for input & output * to be sent for ioctl command. input is populated by client/proxy side * output is provided from server/stub to client/proxy */ typedef struct { nfc_nci_ExtnInputData_t inp; nfc_nci_ExtnOutputData_t out; } nfc_nci_IoctlInOutData_t; /* * nxpnfc_nci_device_t :data structure for nxp's extended nfc_nci_device * Extra features added are * -ioctl(manage sync between and DWP & SPI) * -check request for fw download */ typedef struct nxpnfc_nci_device { // nfc_nci_device_t nci_device; /* * (*ioctl)() For P61 power management synchronization * between NFC Wired and SPI. */ int (*ioctl)(const struct nxpnfc_nci_device* p_dev, long arg, void* p_data); /* * (*check_fw_dwnld_flag)() Is called to get FW downlaod request. */ int (*check_fw_dwnld_flag)(const struct nxpnfc_nci_device* p_dev, uint8_t* param1); } nxpnfc_nci_device_t; #endif // ANDROID_HARDWARE_HAL_NXPNFC_V1_0_H