Zephyr Project API 4.2.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
retained_mem.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2023 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
13#ifndef ZEPHYR_INCLUDE_DRIVERS_RETAINED_MEM_
14#define ZEPHYR_INCLUDE_DRIVERS_RETAINED_MEM_
15
16#include <stdint.h>
17#include <stddef.h>
18#include <sys/types.h>
19#include <zephyr/kernel.h>
20#include <zephyr/device.h>
21#include <zephyr/types.h>
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28BUILD_ASSERT(!(sizeof(off_t) > sizeof(size_t)),
29 "Size of off_t must be equal or less than size of size_t");
30
45typedef ssize_t (*retained_mem_size_api)(const struct device *dev);
46
52typedef int (*retained_mem_read_api)(const struct device *dev, off_t offset, uint8_t *buffer,
53 size_t size);
54
60typedef int (*retained_mem_write_api)(const struct device *dev, off_t offset,
61 const uint8_t *buffer, size_t size);
62
68typedef int (*retained_mem_clear_api)(const struct device *dev);
69
87
96__syscall ssize_t retained_mem_size(const struct device *dev);
97
98static inline ssize_t z_impl_retained_mem_size(const struct device *dev)
99{
100 struct retained_mem_driver_api *api = (struct retained_mem_driver_api *)dev->api;
101
102 return api->size(dev);
103}
104
115__syscall int retained_mem_read(const struct device *dev, off_t offset, uint8_t *buffer,
116 size_t size);
117
118static inline int z_impl_retained_mem_read(const struct device *dev, off_t offset,
119 uint8_t *buffer, size_t size)
120{
121 struct retained_mem_driver_api *api = (struct retained_mem_driver_api *)dev->api;
122 size_t area_size;
123
124 /* Validate user-supplied parameters */
125 if (size == 0) {
126 return 0;
127 }
128
129 area_size = api->size(dev);
130
131 if (offset < 0 || size > area_size || (area_size - size) < (size_t)offset) {
132 return -EINVAL;
133 }
134
135 return api->read(dev, offset, buffer, size);
136}
137
149__syscall int retained_mem_write(const struct device *dev, off_t offset, const uint8_t *buffer,
150 size_t size);
151
152static inline int z_impl_retained_mem_write(const struct device *dev, off_t offset,
153 const uint8_t *buffer, size_t size)
154{
155 struct retained_mem_driver_api *api = (struct retained_mem_driver_api *)dev->api;
156 size_t area_size;
157
158 /* Validate user-supplied parameters */
159 if (size == 0) {
160 return 0;
161 }
162
163 area_size = api->size(dev);
164
165 if (offset < 0 || size > area_size || (area_size - size) < (size_t)offset) {
166 return -EINVAL;
167 }
168
169 return api->write(dev, offset, buffer, size);
170}
171
179__syscall int retained_mem_clear(const struct device *dev);
180
181static inline int z_impl_retained_mem_clear(const struct device *dev)
182{
183 struct retained_mem_driver_api *api = (struct retained_mem_driver_api *)dev->api;
184
185 return api->clear(dev);
186}
187
192#ifdef __cplusplus
193}
194#endif
195
196#include <zephyr/syscalls/retained_mem.h>
197
198#endif /* ZEPHYR_INCLUDE_DRIVERS_RETAINED_MEM_ */
int(* retained_mem_write_api)(const struct device *dev, off_t offset, const uint8_t *buffer, size_t size)
Callback API to write to retained memory area.
Definition retained_mem.h:60
int retained_mem_write(const struct device *dev, off_t offset, const uint8_t *buffer, size_t size)
Writes data to the Retained memory area - underlying data does not need to be cleared prior to writin...
int(* retained_mem_clear_api)(const struct device *dev)
Callback API to clear retained memory area (reset all data to 0x00).
Definition retained_mem.h:68
int retained_mem_read(const struct device *dev, off_t offset, uint8_t *buffer, size_t size)
Reads data from the Retained memory area.
ssize_t(* retained_mem_size_api)(const struct device *dev)
Callback API to get size of retained memory area.
Definition retained_mem.h:45
int retained_mem_clear(const struct device *dev)
Clears data in the retained memory area by setting it to 0x00.
ssize_t retained_mem_size(const struct device *dev)
Returns the size of the retained memory area.
int(* retained_mem_read_api)(const struct device *dev, off_t offset, uint8_t *buffer, size_t size)
Callback API to read from retained memory area.
Definition retained_mem.h:52
#define EINVAL
Invalid argument.
Definition errno.h:60
#define BUILD_ASSERT(EXPR, MSG...)
Definition llvm.h:51
Public kernel APIs.
__SIZE_TYPE__ ssize_t
Definition types.h:28
__INTPTR_TYPE__ off_t
Definition types.h:36
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition device.h:510
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:516
Retained memory driver API API which can be used by a device to store data in a retained memory area.
Definition retained_mem.h:81
retained_mem_size_api size
Definition retained_mem.h:82
retained_mem_clear_api clear
Definition retained_mem.h:85
retained_mem_read_api read
Definition retained_mem.h:83
retained_mem_write_api write
Definition retained_mem.h:84