Zephyr API Documentation 4.4.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
12
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
29BUILD_ASSERT(!(sizeof(off_t) > sizeof(size_t)),
30 "Size of off_t must be equal or less than size of size_t");
32
41
47
52typedef ssize_t (*retained_mem_size_api)(const struct device *dev);
53
58typedef int (*retained_mem_read_api)(const struct device *dev, off_t offset, uint8_t *buffer,
59 size_t size);
60
65typedef int (*retained_mem_write_api)(const struct device *dev, off_t offset,
66 const uint8_t *buffer, size_t size);
67
72typedef int (*retained_mem_clear_api)(const struct device *dev);
73
96
98
107__syscall ssize_t retained_mem_size(const struct device *dev);
108
109static inline ssize_t z_impl_retained_mem_size(const struct device *dev)
110{
111 return DEVICE_API_GET(retained_mem, dev)->size(dev);
112}
113
124__syscall int retained_mem_read(const struct device *dev, off_t offset, uint8_t *buffer,
125 size_t size);
126
127static inline int z_impl_retained_mem_read(const struct device *dev, off_t offset,
128 uint8_t *buffer, size_t size)
129{
130 const struct retained_mem_driver_api *api = DEVICE_API_GET(retained_mem, dev);
131 size_t area_size;
132
133 /* Validate user-supplied parameters */
134 if (size == 0) {
135 return 0;
136 }
137
138 area_size = api->size(dev);
139
140 if (offset < 0 || size > area_size || (area_size - size) < (size_t)offset) {
141 return -EINVAL;
142 }
143
144 return api->read(dev, offset, buffer, size);
145}
146
158__syscall int retained_mem_write(const struct device *dev, off_t offset, const uint8_t *buffer,
159 size_t size);
160
161static inline int z_impl_retained_mem_write(const struct device *dev, off_t offset,
162 const uint8_t *buffer, size_t size)
163{
164 const struct retained_mem_driver_api *api = DEVICE_API_GET(retained_mem, dev);
165 size_t area_size;
166
167 /* Validate user-supplied parameters */
168 if (size == 0) {
169 return 0;
170 }
171
172 area_size = api->size(dev);
173
174 if (offset < 0 || size > area_size || (area_size - size) < (size_t)offset) {
175 return -EINVAL;
176 }
177
178 return api->write(dev, offset, buffer, size);
179}
180
188__syscall int retained_mem_clear(const struct device *dev);
189
190static inline int z_impl_retained_mem_clear(const struct device *dev)
191{
192 return DEVICE_API_GET(retained_mem, dev)->clear(dev);
193}
194
198
199#ifdef __cplusplus
200}
201#endif
202
203#include <zephyr/syscalls/retained_mem.h>
204
205#endif /* ZEPHYR_INCLUDE_DRIVERS_RETAINED_MEM_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1425
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:58
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:72
ssize_t(* retained_mem_size_api)(const struct device *dev)
Callback API to get size of retained memory area.
Definition retained_mem.h:52
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:65
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_read(const struct device *dev, off_t offset, uint8_t *buffer, size_t size)
Reads data from the Retained memory area.
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.
#define EINVAL
Invalid argument.
Definition errno.h:60
Public kernel APIs.
__SIZE_TYPE__ ssize_t
Definition types.h:28
__INTPTR_TYPE__ off_t
Definition types.h:36
Extra arithmetic and bit-manipulation functions.
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
<span class="mlabel">Driver Operations</span> Retained Memory driver operations
Definition retained_mem.h:86
retained_mem_size_api size
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition retained_mem.h:88
retained_mem_clear_api clear
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition retained_mem.h:94
retained_mem_read_api read
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition retained_mem.h:90
retained_mem_write_api write
<span class="op-badge op-req" title="This operation MUST be implemented by the driver....
Definition retained_mem.h:92