zephyr/include/zephyr/drivers/entropy.h
Yong Cong Sin bbe5e1e6eb build: namespace the generated headers with zephyr/
Namespaced the generated headers with `zephyr` to prevent
potential conflict with other headers.

Introduce a temporary Kconfig `LEGACY_GENERATED_INCLUDE_PATH`
that is enabled by default. This allows the developers to
continue the use of the old include paths for the time being
until it is deprecated and eventually removed. The Kconfig will
generate a build-time warning message, similar to the
`CONFIG_TIMER_RANDOM_GENERATOR`.

Updated the includes path of in-tree sources accordingly.

Most of the changes here are scripted, check the PR for more
info.

Signed-off-by: Yong Cong Sin <ycsin@meta.com>
2024-05-28 22:03:55 +02:00

133 lines
3.1 KiB
C

/**
* @file drivers/entropy.h
*
* @brief Public APIs for the entropy driver.
*/
/*
* Copyright (c) 2016 ARM Ltd.
* Copyright (c) 2017 Intel Corporation
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_DRIVERS_ENTROPY_H_
#define ZEPHYR_INCLUDE_DRIVERS_ENTROPY_H_
/**
* @brief Entropy Interface
* @defgroup entropy_interface Entropy Interface
* @since 1.10
* @version 1.0.0
* @ingroup io_interfaces
* @{
*/
#include <errno.h>
#include <zephyr/types.h>
#include <zephyr/device.h>
#ifdef __cplusplus
extern "C" {
#endif
/** @brief Driver is allowed to busy-wait for random data to be ready */
#define ENTROPY_BUSYWAIT BIT(0)
/**
* @typedef entropy_get_entropy_t
* @brief Callback API to get entropy.
*
* @note This call has to be thread safe to satisfy requirements
* of the random subsystem.
*
* See entropy_get_entropy() for argument description
*/
typedef int (*entropy_get_entropy_t)(const struct device *dev,
uint8_t *buffer,
uint16_t length);
/**
* @typedef entropy_get_entropy_isr_t
* @brief Callback API to get entropy from an ISR.
*
* See entropy_get_entropy_isr() for argument description
*/
typedef int (*entropy_get_entropy_isr_t)(const struct device *dev,
uint8_t *buffer,
uint16_t length,
uint32_t flags);
/**
* @brief Entropy driver API structure.
*
* This is the mandatory API any Entropy driver needs to expose.
*/
__subsystem struct entropy_driver_api {
entropy_get_entropy_t get_entropy;
entropy_get_entropy_isr_t get_entropy_isr;
};
/**
* @brief Fills a buffer with entropy. Blocks if required in order to
* generate the necessary random data.
*
* @param dev Pointer to the entropy device.
* @param buffer Buffer to fill with entropy.
* @param length Buffer length.
* @retval 0 on success.
* @retval -ERRNO errno code on error.
*/
__syscall int entropy_get_entropy(const struct device *dev,
uint8_t *buffer,
uint16_t length);
static inline int z_impl_entropy_get_entropy(const struct device *dev,
uint8_t *buffer,
uint16_t length)
{
const struct entropy_driver_api *api =
(const struct entropy_driver_api *)dev->api;
__ASSERT(api->get_entropy != NULL,
"Callback pointer should not be NULL");
return api->get_entropy(dev, buffer, length);
}
/**
* @brief Fills a buffer with entropy in a non-blocking or busy-wait manner.
* Callable from ISRs.
*
* @param dev Pointer to the device structure.
* @param buffer Buffer to fill with entropy.
* @param length Buffer length.
* @param flags Flags to modify the behavior of the call.
* @retval number of bytes filled with entropy or -error.
*/
static inline int entropy_get_entropy_isr(const struct device *dev,
uint8_t *buffer,
uint16_t length,
uint32_t flags)
{
const struct entropy_driver_api *api =
(const struct entropy_driver_api *)dev->api;
if (unlikely(!api->get_entropy_isr)) {
return -ENOTSUP;
}
return api->get_entropy_isr(dev, buffer, length, flags);
}
#ifdef __cplusplus
}
#endif
/**
* @}
*/
#include <zephyr/syscalls/entropy.h>
#endif /* ZEPHYR_INCLUDE_DRIVERS_ENTROPY_H_ */