1 /******************************************************************************
2  *
3  *  Copyright (C) 2018 NXP Semiconductors
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 #ifndef ANDROID_HARDWARE_HAL_NXPESE_V1_0_H
19 #define ANDROID_HARDWARE_HAL_NXPESE_V1_0_H
20 
21 #define ESE_NXPNFC_HARDWARE_MODULE_ID "ese_nxp.pn54x"
22 #define MAX_IOCTL_TRANSCEIVE_CMD_LEN 256
23 #define MAX_IOCTL_TRANSCEIVE_RESP_LEN 256
24 #define MAX_ATR_INFO_LEN 128
25 enum {
26   HAL_ESE_IOCTL_P61_IDLE_MODE = 0,
27   HAL_ESE_IOCTL_P61_WIRED_MODE,
28   HAL_ESE_IOCTL_P61_PWR_MODE,
29   HAL_ESE_IOCTL_P61_DISABLE_MODE,
30   HAL_ESE_IOCTL_P61_ENABLE_MODE,
31   HAL_ESE_IOCTL_SET_BOOT_MODE,
32   HAL_ESE_IOCTL_GET_CONFIG_INFO,
33   HAL_ESE_IOCTL_CHECK_FLASH_REQ,
34   HAL_ESE_IOCTL_FW_DWNLD,
35   HAL_ESE_IOCTL_FW_MW_VER_CHECK,
36   HAL_ESE_IOCTL_DISABLE_HAL_LOG,
37   HAL_ESE_IOCTL_NXP_TRANSCEIVE,
38   HAL_ESE_IOCTL_P61_GET_ACCESS,
39   HAL_ESE_IOCTL_P61_REL_ACCESS,
40   HAL_ESE_IOCTL_ESE_CHIP_RST,
41   HAL_ESE_IOCTL_REL_SVDD_WAIT,
42   HAL_ESE_IOCTL_SET_JCP_DWNLD_ENABLE,
43   HAL_ESE_IOCTL_SET_JCP_DWNLD_DISABLE,
44   HAL_ESE_IOCTL_SET_ESE_SERVICE_PID,
45   HAL_ESE_IOCTL_REL_DWP_WAIT,
46   HAL_ESE_IOCTL_GET_FEATURE_LIST,
47   HAL_ESE_IOCTL_RF_STATUS_UPDATE
48 };
49 
50 enum {
51   HAL_NFC_IOCTL_P61_IDLE_MODE = 0,
52   HAL_NFC_IOCTL_P61_WIRED_MODE,
53   HAL_NFC_IOCTL_P61_PWR_MODE,
54   HAL_NFC_IOCTL_P61_DISABLE_MODE,
55   HAL_NFC_IOCTL_P61_ENABLE_MODE,
56   HAL_NFC_IOCTL_SET_BOOT_MODE,
57   HAL_NFC_IOCTL_GET_CONFIG_INFO,
58   HAL_NFC_IOCTL_CHECK_FLASH_REQ,
59   HAL_NFC_IOCTL_FW_DWNLD,
60   HAL_NFC_IOCTL_FW_MW_VER_CHECK,
61   HAL_NFC_IOCTL_DISABLE_HAL_LOG,
62   HAL_NFC_IOCTL_NCI_TRANSCEIVE,
63   HAL_NFC_IOCTL_P61_GET_ACCESS,
64   HAL_NFC_IOCTL_P61_REL_ACCESS,
65   HAL_NFC_IOCTL_ESE_CHIP_RST,
66   HAL_NFC_IOCTL_REL_SVDD_WAIT,
67   HAL_NFC_IOCTL_SET_JCP_DWNLD_ENABLE,
68   HAL_NFC_IOCTL_SET_JCP_DWNLD_DISABLE,
69   HAL_NFC_IOCTL_SET_NFC_SERVICE_PID,
70   HAL_NFC_IOCTL_REL_DWP_WAIT,
71   HAL_NFC_IOCTL_GET_FEATURE_LIST,
72   HAL_NFC_IOCTL_SPI_DWP_SYNC, /*21*/
73   HAL_NFC_IOCTL_RF_STATUS_UPDATE,
74   HAL_NFC_SET_SPM_PWR,
75   HAL_NFC_SET_POWER_SCHEME,
76   HAL_NFC_GET_SPM_STATUS,
77   HAL_NFC_GET_ESE_ACCESS,
78   HAL_NFC_SET_DWNLD_STATUS,
79   HAL_NFC_INHIBIT_PWR_CNTRL
80 };
81 /*
82  * Data structures provided below are used of Hal Ioctl calls
83  */
84 /*
85  * ese_nxp_ExtnCmd_t shall contain data for commands used for transceive command
86  * in ioctl
87  */
88 typedef struct {
89   uint16_t cmd_len;
90   uint8_t p_cmd[MAX_IOCTL_TRANSCEIVE_CMD_LEN];
91 } ese_nxp_ExtnCmd_t;
92 
93 /*
94  * ese_nxp_ExtnRsp_t shall contain response for command sent in transceive
95  * command
96  */
97 typedef struct {
98   uint16_t rsp_len;
99   uint8_t p_rsp[MAX_IOCTL_TRANSCEIVE_RESP_LEN];
100 } ese_nxp_ExtnRsp_t;
101 /*
102  * InputData_t :ioctl has multiple subcommands
103  * Each command has corresponding input data which needs to be populated in this
104  */
105 typedef union {
106   uint16_t bootMode;
107   uint8_t halType;
108   ese_nxp_ExtnCmd_t nxpCmd;
109   uint32_t timeoutMilliSec;
110   long eseServicePid;
111 } eseInputData_t;
112 /*
113  * ese_nxp_ExtnInputData_t :Apart from InputData_t, there are context data
114  * which is required during callback from stub to proxy.
115  * To avoid additional copy of data while propagating from libese to Adaptation
116  * and Esestub to nxphal, common structure is used. As a sideeffect, context
117  * data is exposed to libese (Not encapsulated).
118  */
119 typedef struct {
120   /*context to be used/updated only by users of proxy & stub of Ese.hal
121    * i.e., EseAdaptation & hardware/interface/Ese.
122    */
123   void* context;
124   eseInputData_t data;
125   uint8_t data_source;
126   long level;
127 } ese_nxp_ExtnInputData_t;
128 
129 /*
130  * outputData_t :ioctl has multiple commands/responses
131  * This contains the output types for each ioctl.
132  */
133 typedef union {
134   uint32_t status;
135   ese_nxp_ExtnRsp_t nxpRsp;
136   uint8_t nxpNciAtrInfo[MAX_ATR_INFO_LEN];
137   uint32_t p61CurrentState;
138   uint16_t fwUpdateInf;
139   uint16_t fwDwnldStatus;
140   uint16_t fwMwVerStatus;
141   uint8_t chipType;
142 } eseOutputData_t;
143 
144 /*
145  * ese_nxp_ExtnOutputData_t :Apart from outputData_t, there are other
146  * information which is required during callback from stub to proxy. For ex
147  * (context, result of the operation , type of ioctl which was completed). To
148  * avoid additional copy of data while propagating from libese to Adaptation and
149  * Esestub to nxphal, common structure is used. As a sideeffect, these data is
150  * exposed(Not encapsulated).
151  */
152 typedef struct {
153   /*ioctlType, result & context to be used/updated only by users of
154    * proxy & stub of Ese.hal.
155    * i.e., EseAdaptation & hardware/interface/Ese
156    * These fields shall not be used by libese or halimplementation*/
157   uint64_t ioctlType;
158   uint32_t result;
159   void* context;
160   eseOutputData_t data;
161 } ese_nxp_ExtnOutputData_t;
162 
163 /*
164  * ese_nxp_IoctlInOutData_t :data structure for input & output
165  * to be sent for ioctl command. input is populated by client/proxy side
166  * output is provided from server/stub to client/proxy
167  */
168 typedef struct {
169   ese_nxp_ExtnInputData_t inp;
170   ese_nxp_ExtnOutputData_t out;
171 } ese_nxp_IoctlInOutData_t;
172 
173 #endif  // ANDROID_HARDWARE_HAL_NXPESE_V1_0_H
174