1 /****************************************************************************** 2 * 3 * Copyright 2018 NXP 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 19 /** 20 * \addtogroup eSe_PAL 21 * \brief PAL implementation 22 * @{ */ 23 24 #ifndef _PHNXPESE_PAL_H 25 #define _PHNXPESE_PAL_H 26 27 #define LOG_TAG "NxpEseHal" 28 29 /* Basic type definitions */ 30 #include <errno.h> 31 #include <phEseStatus.h> 32 #include <phNxpEseFeatures.h> 33 /*! 34 * \brief Value indicates to reset device 35 */ 36 #define PH_PALESE_RESETDEVICE (0x00008001) 37 38 /*! 39 * \ingroup eSe_PAL 40 * 41 * \brief Enum definition contains supported ioctl control codes. 42 * 43 * phPalEse_IoCtl 44 */ 45 typedef enum { 46 phPalEse_e_Invalid = 0, /*!< Invalid control code */ 47 phPalEse_e_ResetDevice = PH_PALESE_RESETDEVICE, /*!< Reset the device */ 48 phPalEse_e_EnableLog, /*!< Enable the spi driver logs */ 49 phPalEse_e_EnablePollMode, /*!< Enable the polling for SPI */ 50 phPalEse_e_GetEseAccess, /*!< get the bus access in specified timeout */ 51 phPalEse_e_ChipRst, /*!< eSE Chip reset using ISO RST pin*/ 52 phPalEse_e_EnableThroughputMeasurement, /*!< Enable throughput measurement */ 53 phPalEse_e_SetPowerScheme, /*!< Set power scheme */ 54 phPalEse_e_GetSPMStatus, /*!< Get SPM(power mgt) status */ 55 phPalEse_e_DisablePwrCntrl 56 #ifdef NXP_ESE_JCOP_DWNLD_PROTECTION 57 , 58 phPalEse_e_SetJcopDwnldState, /*!< Set Jcop Download state */ 59 #endif 60 } phPalEse_ControlCode_t; /*!< Control code for IOCTL call */ 61 62 /*! 63 * \ingroup eSe_PAL 64 * 65 * \brief PAL Configuration exposed to upper layer. 66 */ 67 typedef struct phPalEse_Config { 68 int8_t* pDevName; 69 /*!< Port name connected to ESE 70 * 71 * Platform specific canonical device name to which ESE is connected. 72 * 73 * e.g. On Linux based systems this would be /dev/p73 74 */ 75 76 uint32_t dwBaudRate; 77 /*!< Communication speed between DH and ESE 78 * 79 * This is the baudrate of the bus for communication between DH and ESE 80 */ 81 82 void* pDevHandle; 83 /*!< Device handle output */ 84 } phPalEse_Config_t, *pphPalEse_Config_t; /* pointer to phPalEse_Config_t */ 85 86 /* Function declarations */ 87 /** 88 * \ingroup eSe_PAL 89 * \brief This function is used to close the ESE device 90 * 91 * \retval None 92 * 93 */ 94 void phPalEse_close(void* pDevHandle); 95 96 /** 97 * \ingroup eSe_PAL 98 * \brief Open and configure ESE device 99 * 100 * \param[in] pphPalEse_Config_t: Config to open the device 101 * 102 * \retval ESESTATUS On Success ESESTATUS_SUCCESS else proper error code 103 * 104 */ 105 ESESTATUS phPalEse_open_and_configure(pphPalEse_Config_t pConfig); 106 107 /** 108 * \ingroup eSe_PAL 109 * \brief Reads requested number of bytes from ESE into given buffer 110 * 111 * \param[in] pDevHandle - valid device handle 112 **\param[in] pBuffer - buffer for read data 113 **\param[in] nNbBytesToRead - number of bytes requested to be read 114 * 115 * \retval numRead - number of successfully read bytes. 116 * \retval -1 - read operation failure 117 * 118 */ 119 int phPalEse_read(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToRead); 120 121 /** 122 * \ingroup eSe_PAL 123 * \brief Writes requested number of bytes from given buffer into pn547 device 124 * 125 * \param[in] pDevHandle - valid device handle 126 * \param[in] pBuffer - buffer to write 127 * \param[in] nNbBytesToWrite - number of bytes to write 128 * 129 * \retval numWrote - number of successfully written bytes 130 * \retval -1 - write operation failure 131 * 132 */ 133 int phPalEse_write(void* pDevHandle, uint8_t* pBuffer, int nNbBytesToWrite); 134 135 /** 136 * \ingroup eSe_PAL 137 * \brief Exposed ioctl by ESE driver 138 * 139 * \param[in] eControlCode - phPalEse_ControlCode_t for the respective 140 *configs 141 * \param[in] pDevHandle - valid device handle 142 * \param[in] pBuffer - buffer for read data 143 * \param[in] level - reset level 144 * 145 * \retval 0 - ioctl operation success 146 * \retval -1 - ioctl operation failure 147 * 148 */ 149 ESESTATUS phPalEse_ioctl(phPalEse_ControlCode_t eControlCode, void* pDevHandle, 150 long level); 151 152 /** 153 * \ingroup eSe_PAL 154 * \brief Print packet data 155 * 156 * \param[in] pString - String to be printed 157 * \param[in] p_data - data to be printed 158 * \param[in] len - Length of data to be printed 159 * 160 * \retval void 161 * 162 */ 163 void phPalEse_print_packet(const char* pString, const uint8_t* p_data, 164 uint16_t len); 165 166 /** 167 * \ingroup eSe_PAL 168 * \brief This function suspends execution of the calling thread for 169 * (at least) usec microseconds 170 * 171 * \param[in] usec - number of micro seconds to sleep 172 * 173 * \retval void 174 * 175 */ 176 void phPalEse_sleep(long usec); 177 178 /** 179 * \ingroup eSe_PAL 180 * \brief This function updates destination buffer with val 181 * data in len size 182 * 183 * \param[in] buff - Array to be udpated 184 * \param[in] val - value to be updated 185 * \param[in] len - length of array to be updated 186 * 187 * \retval void 188 * 189 */ 190 void* phPalEse_memset(void* buff, int val, size_t len); 191 192 /** 193 * \ingroup eSe_PAL 194 * \brief This function copies source buffer to destination buffer 195 * data in len size 196 * 197 * \param[in] dest - Destination array to be updated 198 * \param[in] src - Source array to be updated 199 * \param[in] len - length of array to be updated 200 * 201 * \retval void 202 * 203 */ 204 void* phPalEse_memcpy(void* dest, const void* src, size_t len); 205 206 /** 207 * \ingroup eSe_PAL 208 * \brief This is utility function for runtime heap memory allocation 209 * 210 * \param[in] size - number of bytes to be allocated 211 * 212 * \retval void 213 * 214 */ 215 void* phPalEse_memalloc(uint32_t size); 216 217 /** 218 * \ingroup eSe_PAL 219 * \brief This is utility function for runtime heap memory allocation 220 * 221 * \param[in] len - number of bytes to be allocated 222 * 223 * \retval void 224 * 225 */ 226 void* phPalEse_calloc(size_t dataType, size_t size); 227 228 /** 229 * \ingroup eSe_PAL 230 * \brief This is utility function for freeeing heap memory allocated 231 * 232 * \param[in] ptr - Address pointer to previous allocation 233 * 234 * \retval void 235 * 236 */ 237 void phPalEse_free(void* ptr); 238 239 /** @} */ 240 #endif /* _PHNXPESE_PAL_H */ 241