Now that device_api attribute is unmodified at runtime, as well as all the other attributes, it is possible to switch all device driver instance to be constant. A coccinelle rule is used for this: @r_const_dev_1 disable optional_qualifier @ @@ -struct device * +const struct device * @r_const_dev_2 disable optional_qualifier @ @@ -struct device * const +const struct device * Fixes #27399 Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
48 lines
1.0 KiB
C
48 lines
1.0 KiB
C
/*
|
|
* Copyright (c) 2019 Nordic Semiconductor ASA
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <kernel.h>
|
|
#include <string.h>
|
|
#include <drivers/entropy.h>
|
|
#include <logging/log.h>
|
|
|
|
#include <openthread/platform/entropy.h>
|
|
|
|
#include "platform-zephyr.h"
|
|
|
|
LOG_MODULE_REGISTER(net_otPlat_entropy, CONFIG_OPENTHREAD_L2_LOG_LEVEL);
|
|
|
|
#if !defined(CONFIG_ENTROPY_HAS_DRIVER)
|
|
#error OpenThread requires an entropy source for a TRNG
|
|
#endif
|
|
|
|
otError otPlatEntropyGet(uint8_t *aOutput, uint16_t aOutputLength)
|
|
{
|
|
/* static to obtain it once in a first call */
|
|
static const struct device *dev;
|
|
int err;
|
|
|
|
if ((aOutput == NULL) || (aOutputLength == 0)) {
|
|
return OT_ERROR_INVALID_ARGS;
|
|
}
|
|
|
|
if (dev == NULL) {
|
|
dev = device_get_binding(DT_CHOSEN_ZEPHYR_ENTROPY_LABEL);
|
|
if (dev == NULL) {
|
|
LOG_ERR("Failed to obtain entropy device");
|
|
return OT_ERROR_FAILED;
|
|
}
|
|
}
|
|
|
|
err = entropy_get_entropy(dev, aOutput, aOutputLength);
|
|
if (err != 0) {
|
|
LOG_ERR("Failed to obtain entropy, err %d", err);
|
|
return OT_ERROR_FAILED;
|
|
}
|
|
|
|
return OT_ERROR_NONE;
|
|
}
|