LCOV - code coverage report
Current view: top level - zephyr/drivers - entropy.h Coverage Total Hit
Test: new.info Lines: 77.8 % 9 7
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            1 : /**
       2              :  * @file drivers/entropy.h
       3              :  *
       4              :  * @brief Public APIs for the entropy driver.
       5              :  */
       6              : 
       7              : /*
       8              :  * Copyright (c) 2016 ARM Ltd.
       9              :  * Copyright (c) 2017 Intel Corporation
      10              :  *
      11              :  * SPDX-License-Identifier: Apache-2.0
      12              :  */
      13              : #ifndef ZEPHYR_INCLUDE_DRIVERS_ENTROPY_H_
      14              : #define ZEPHYR_INCLUDE_DRIVERS_ENTROPY_H_
      15              : 
      16              : /**
      17              :  * @brief Entropy Interface
      18              :  * @defgroup entropy_interface Entropy Interface
      19              :  * @since 1.10
      20              :  * @version 1.0.0
      21              :  * @ingroup io_interfaces
      22              :  * @{
      23              :  */
      24              : 
      25              : #include <errno.h>
      26              : 
      27              : #include <zephyr/types.h>
      28              : #include <zephyr/device.h>
      29              : 
      30              : #ifdef __cplusplus
      31              : extern "C" {
      32              : #endif
      33              : 
      34              : /** @brief Driver is allowed to busy-wait for random data to be ready */
      35            1 : #define ENTROPY_BUSYWAIT  BIT(0)
      36              : 
      37              : /**
      38              :  * @typedef entropy_get_entropy_t
      39              :  * @brief Callback API to get entropy.
      40              :  *
      41              :  * @note This call has to be thread safe to satisfy requirements
      42              :  * of the random subsystem.
      43              :  *
      44              :  * See entropy_get_entropy() for argument description
      45              :  */
      46            1 : typedef int (*entropy_get_entropy_t)(const struct device *dev,
      47              :                                      uint8_t *buffer,
      48              :                                      uint16_t length);
      49              : /**
      50              :  * @typedef entropy_get_entropy_isr_t
      51              :  * @brief Callback API to get entropy from an ISR.
      52              :  *
      53              :  * See entropy_get_entropy_isr() for argument description
      54              :  */
      55            1 : typedef int (*entropy_get_entropy_isr_t)(const struct device *dev,
      56              :                                          uint8_t *buffer,
      57              :                                          uint16_t length,
      58              :                                          uint32_t flags);
      59              : 
      60              : /**
      61              :  * @brief Entropy driver API structure.
      62              :  *
      63              :  * This is the mandatory API any Entropy driver needs to expose.
      64              :  */
      65            1 : __subsystem struct entropy_driver_api {
      66            0 :         entropy_get_entropy_t     get_entropy;
      67            0 :         entropy_get_entropy_isr_t get_entropy_isr;
      68              : };
      69              : 
      70              : /**
      71              :  * @brief Fills a buffer with entropy. Blocks if required in order to
      72              :  *        generate the necessary random data.
      73              :  *
      74              :  * @param dev Pointer to the entropy device.
      75              :  * @param buffer Buffer to fill with entropy.
      76              :  * @param length Buffer length.
      77              :  * @retval 0 on success.
      78              :  * @retval -ERRNO errno code on error.
      79              :  */
      80            1 : __syscall int entropy_get_entropy(const struct device *dev,
      81              :                                   uint8_t *buffer,
      82              :                                   uint16_t length);
      83              : 
      84              : static inline int z_impl_entropy_get_entropy(const struct device *dev,
      85              :                                              uint8_t *buffer,
      86              :                                              uint16_t length)
      87              : {
      88              :         const struct entropy_driver_api *api =
      89              :                 (const struct entropy_driver_api *)dev->api;
      90              : 
      91              :         __ASSERT(api->get_entropy != NULL,
      92              :                 "Callback pointer should not be NULL");
      93              :         return api->get_entropy(dev, buffer, length);
      94              : }
      95              : 
      96              : /**
      97              :  * @brief Fills a buffer with entropy in a non-blocking or busy-wait manner.
      98              :  *        Callable from ISRs.
      99              :  *
     100              :  * @param dev Pointer to the device structure.
     101              :  * @param buffer Buffer to fill with entropy.
     102              :  * @param length Buffer length.
     103              :  * @param flags Flags to modify the behavior of the call.
     104              :  * @retval number of bytes filled with entropy or -error.
     105              :  */
     106            1 : static inline int entropy_get_entropy_isr(const struct device *dev,
     107              :                                           uint8_t *buffer,
     108              :                                           uint16_t length,
     109              :                                           uint32_t flags)
     110              : {
     111              :         const struct entropy_driver_api *api =
     112              :                 (const struct entropy_driver_api *)dev->api;
     113              : 
     114              :         if (unlikely(!api->get_entropy_isr)) {
     115              :                 return -ENOTSUP;
     116              :         }
     117              : 
     118              :         return api->get_entropy_isr(dev, buffer, length, flags);
     119              : }
     120              : 
     121              : 
     122              : #ifdef __cplusplus
     123              : }
     124              : #endif
     125              : 
     126              : /**
     127              :  * @}
     128              :  */
     129              : 
     130              : #include <zephyr/syscalls/entropy.h>
     131              : 
     132              : #endif /* ZEPHYR_INCLUDE_DRIVERS_ENTROPY_H_ */
        

Generated by: LCOV version 2.0-1