/****************************************************************************** * * Copyright 2018-2019 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. * ******************************************************************************/ /** * \addtogroup SPI_Power_Management * * @{ */ #ifndef _PHNXPESE_SPM_H #define _PHNXPESE_SPM_H #include #include /*! SPI Power Manager (SPM) possible error codes */ typedef enum spm_power { SPM_POWER_DISABLE = 0, SPM_POWER_ENABLE, /*!< SPM power disable */ SPM_POWER_RESET, /*!< SPM Reset pwer */ SPM_POWER_PRIO_ENABLE, /*!< SPM prio mode enable */ SPM_POWER_PRIO_DISABLE, /*!< SPM prio mode disable */ SPM_RECOVERY_RESET } spm_power_t; /*! SPI Power Manager (SPM) possible states */ typedef enum spm_state { SPM_STATE_INVALID = 0x0000, /*!< Nfc i2c driver misbehaving */ SPM_STATE_IDLE = 0x0100, /*!< ESE is free to use */ SPM_STATE_WIRED = 0x0200, /*!< p61 is being accessed by DWP (NFCC)*/ SPM_STATE_SPI = 0x0400, /*!< ESE is being accessed by SPI */ SPM_STATE_DWNLD = 0x0800, /*!< NFCC fw download is in progress */ SPM_STATE_SPI_PRIO = 0x1000, /*!< Start of p61 access by SPI on priority*/ SPM_STATE_SPI_PRIO_END = 0x2000, /*!< End of p61 access by SPI on priority*/ SPM_STATE_SPI_FAILED = 0x0010, /*SPI open/close failed*/ SPM_STATE_JCOP_DWNLD = 0x8000 /*!< P73 state JCOP Download*/ } spm_state_t; /** * \ingroup SPI_Power_Management * \brief This function opens the nfc i2c driver to manage power * and synchronization for ese secure element. * * \param[in] pDevHandle - Device handle to open. * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_Init(void* pDevHandle); /** * \ingroup SPI_Power_Management * \brief TThis function closes the nfc i2c driver node. * * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_DeInit(void); /** * \ingroup SPI_Power_Management * \brief This function request to the nfc i2c driver * to enable/disable power to ese. This api should be called *before sending any apdu to ese/once apdu exchange is done. * * \param[in] arg -input can be of type spm_power_t. * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_ConfigPwr(spm_power_t arg); /** * \ingroup SPI_Power_Management * \brief This function request to the nfc i2c driver * to enable power to ese. This api should be called before * sending any apdu to ese. * * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_EnablePwr(void); /** * \ingroup SPI_Power_Management * \brief This function request to the nfc i2c driver * to disable power to ese. This api should be called * once apdu exchange is done. * * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_DisablePwr(void); /** * \ingroup SPI_Power_Management * \brief This function gets the current power state of ESE * \param[in] current_state -input is of type spm_state_t. * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_GetState(spm_state_t* current_state); /** * \ingroup SPI_Power_Management * \brief This function request to the nfc i2c driver * to reset ese. * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_ResetPwr(void); /** * \ingroup SPI_Power_Management * \brief This function request to get access to eSE * * \param[in] timeout - timeout to wait for ese access. * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_GetAccess(long timeout); /** * \ingroup SPI_Power_Management * \brief This function set the SPM power state * * \param[in] arg - state value. * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_SetState(long arg); /** * \ingroup SPI_Power_Management * \brief phNxpEse_SPM_RelAccess * * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_RelAccess(void); /** * \ingroup SPI_Power_Management * \brief This function request to the nfc i2c driver * to set the chip type and power scheme. * * \param[in] arg - set power scheme from config. * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_SetPwrScheme(long arg); /** * \ingroup SPI_Power_Management * \brief This function request to the nfc i2c driver * to set the chip type and power scheme. * * \param[in] arg - arg. * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_DisablePwrControl(unsigned long arg); /** * \ingroup SPI_Power_Management * \brief This function is used to set the ese Update state. * * \param[in] arg - eSE update status started/completed. * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_SetEseClientUpdateState(long arg); /** * \ingroup SPI_Power_Management * \brief This function is used to set the ese Update state. * * \param[in] arg - JCOP update status started/completed.. * * \retval -On Success ESESTATUS_SUCCESS else proper error code */ ESESTATUS phNxpEse_SPM_SetJcopDwnldState(long arg); #endif /* _PHNXPESE_SPM_H */ /** @} */