/* * Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and * its subsidiaries and affiliates (collectly called MKSEMI). * * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form, except as embedded into an MKSEMI * integrated circuit in a product or a software update for such product, * must reproduce the above copyright notice, this list of conditions and * the following disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. Neither the name of MKSEMI nor the names of its contributors may be used * to endorse or promote products derived from this software without * specific prior written permission. * * 4. This software, with or without modification, must only be used with a * MKSEMI integrated circuit. * * 5. Any software provided in binary form under this license must not be * reverse engineered, decompiled, modified and/or disassembled. * * THIS SOFTWARE IS PROVIDED BY MKSEMI "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL MKSEMI OR CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef MK_TRNG_H_ #define MK_TRNG_H_ #include "mk_common.h" #ifndef TRNG_INT_MODE_EN #define TRNG_INT_MODE_EN (1) #endif #ifndef TRNG_POLL_MODE_EN #define TRNG_POLL_MODE_EN (1) #endif /** * @addtogroup MK8000_TRNG * @{ */ /** * @brief TRNG config enumeration */ enum TRNG_CFG_T { TRNG_CFG_1LSB_VN = 0, TRNG_CFG_1LSB, TRNG_CFG_2LSB, TRNG_CFG_3LSB, TRNG_CFG_4LSB, TRNG_CFG_5LSB, TRNG_CFG_6LSB, TRNG_CFG_7LSB, }; /** * @brief TRNG state enumeration */ enum TRNG_STATE_T { TRNG_STATE_RESET = 0x00U, TRNG_STATE_READY = 0x01U, TRNG_STATE_BUSY = 0x10U, TRNG_STATE_TIMEOUT = 0x40U, TRNG_STATE_ERROR = 0x80U, }; /** * @brief TRNG handle Structure */ struct TRNG_HANDLE_T { TRNG_TypeDef *const base; /*!< TRNG registers base address */ const IRQn_Type irq; /*!< TRNG interupt number */ enum TRNG_CFG_T cfg; /*!< TRNG config */ enum TRNG_STATE_T state; /*!< TRNG state */ uint32_t *data; /*!< Pointer to write TRNG data */ uint32_t number; /*!< max number of TRNG Data*/ uint32_t count; /*!< current number of TRNG Data*/ uint32_t int_en; /*!< TRNG interupt switch*/ drv_callback_t callback; /*!< Pointer to TRNG finished Callback function */ }; #ifdef __cplusplus extern "C" { #endif /** * @brief open TRNG. * @return * @arg DEV_OK open succeed */ int trng_open(void); /** * @brief close TRNG. * @return * @arg DEV_OK close succeed */ int trng_close(void); /** * @brief get TRNG data. * @param[out] data Pointer to data buffer * @param[in] number Number of data to get * @param[in] callback Pointer to TRNG finshed Callback function. \n * This parameter will only be called in interupt mode * @return * @arg DRV_ERROR get TRNG data failed * @arg DRV_BUSY get TRNG data failed because of TRNG is busy * @arg DEV_OK get TRNG data succeed */ int trng_get(uint32_t *data, uint32_t number, drv_callback_t callback); /** * @brief This function handles TRNG interrupt. */ void TRNG_IRQHandler(void); #ifdef __cplusplus } #endif /** * @} */ #endif /* MK_TRNG_H_ */