Line data Source code
1 0 : /* 2 : * Copyright 2024 Google LLC 3 : * SPDX-License-Identifier: Apache-2.0 4 : */ 5 : 6 : #ifndef INCLUDE_ZEPHYR_DRIVERS_EMUL_BBRAM_H_ 7 : #define INCLUDE_ZEPHYR_DRIVERS_EMUL_BBRAM_H_ 8 : 9 : #include <zephyr/drivers/emul.h> 10 : 11 : #include <stdint.h> 12 : 13 : /** 14 : * @brief BBRAM emulator backend API 15 : * @defgroup bbram_emulator_backend BBRAM emulator backend API 16 : * @ingroup io_interfaces 17 : * @{ 18 : */ 19 : 20 : /** 21 : * @cond INTERNAL_HIDDEN 22 : * 23 : * These are for internal use only, so skip these in public documentation. 24 : */ 25 : 26 : __subsystem struct emul_bbram_driver_api { 27 : /** Sets the data */ 28 : int (*set_data)(const struct emul *target, size_t offset, size_t count, 29 : const uint8_t *data); 30 : /** Checks the data */ 31 : int (*get_data)(const struct emul *target, size_t offset, size_t count, uint8_t *data); 32 : }; 33 : 34 : /** 35 : * @endcond 36 : */ 37 : 38 : /** 39 : * @brief Set the expected data in the bbram region 40 : * 41 : * @param target Pointer to the emulator instance to operate on 42 : * @param offset Offset within the memory to set 43 : * @param count Number of bytes to write 44 : * @param data The data to write 45 : * @return 0 if successful 46 : * @return -ENOTSUP if no backend API or if the set_data function isn't implemented 47 : * @return -ERANGE if the destination address is out of range. 48 : */ 49 1 : static inline int emul_bbram_backend_set_data(const struct emul *target, size_t offset, 50 : size_t count, const uint8_t *data) 51 : { 52 : if (target == NULL || target->backend_api == NULL) { 53 : return -ENOTSUP; 54 : } 55 : 56 : struct emul_bbram_driver_api *api = (struct emul_bbram_driver_api *)target->backend_api; 57 : 58 : if (api->set_data == NULL) { 59 : return -ENOTSUP; 60 : } 61 : 62 : return api->set_data(target, offset, count, data); 63 : } 64 : 65 : /** 66 : * @brief Get the expected data in the bbram region 67 : * 68 : * @param target Pointer to the emulator instance to operate on 69 : * @param offset Offset within the memory to get 70 : * @param count Number of bytes to read 71 : * @param data The data buffer to hold the result 72 : * @return 0 if successful 73 : * @return -ENOTSUP if no backend API or if the get_data function isn't implemented 74 : * @return -ERANGE if the address is out of range. 75 : */ 76 1 : static inline int emul_bbram_backend_get_data(const struct emul *target, size_t offset, 77 : size_t count, uint8_t *data) 78 : { 79 : if (target == NULL || target->backend_api == NULL) { 80 : return -ENOTSUP; 81 : } 82 : 83 : struct emul_bbram_driver_api *api = (struct emul_bbram_driver_api *)target->backend_api; 84 : 85 : if (api->get_data == NULL) { 86 : return -ENOTSUP; 87 : } 88 : 89 : return api->get_data(target, offset, count, data); 90 : } 91 : 92 : /** 93 : * @} 94 : */ 95 : 96 : #endif /* INCLUDE_ZEPHYR_DRIVERS_EMUL_BBRAM_H_ */