Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
nvmem.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2025 Basalte bv
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
11
12#ifndef ZEPHYR_INCLUDE_NVMEM_H_
13#define ZEPHYR_INCLUDE_NVMEM_H_
14
23
24#include <sys/types.h>
25#include <zephyr/device.h>
26#include <zephyr/devicetree.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
36struct nvmem_cell {
37 /* @cond INTERNAL_HIDDEN */
38
40 const struct device *dev;
42 off_t offset;
44 size_t size;
46 bool read_only;
47
48 /* @endcond */
49};
50
95#define NVMEM_CELL_INIT(node_id) \
96 { \
97 .dev = DEVICE_DT_GET(DT_MTD_FROM_NVMEM_CELL(node_id)), \
98 .offset = DT_REG_ADDR(node_id), \
99 .size = DT_REG_SIZE(node_id), \
100 .read_only = DT_PROP(node_id, read_only), \
101 }
102
154#define NVMEM_CELL_GET_BY_NAME(node_id, name) NVMEM_CELL_INIT(DT_NVMEM_CELL_BY_NAME(node_id, name))
155
168#define NVMEM_CELL_INST_GET_BY_NAME(inst, name) NVMEM_CELL_GET_BY_NAME(DT_DRV_INST(inst), name)
169
188#define NVMEM_CELL_GET_BY_NAME_OR(node_id, name, default_value) \
189 COND_CODE_1(DT_PROP_HAS_NAME(node_id, nvmem_cells, name), \
190 (NVMEM_CELL_GET_BY_NAME(node_id, name)), \
191 (default_value))
192
207#define NVMEM_CELL_INST_GET_BY_NAME_OR(inst, name, default_value) \
208 NVMEM_CELL_GET_BY_NAME_OR(DT_DRV_INST(inst), name, default_value)
209
260#define NVMEM_CELL_GET_BY_IDX(node_id, idx) NVMEM_CELL_INIT(DT_NVMEM_CELL_BY_IDX(node_id, idx))
261
273#define NVMEM_CELL_INST_GET_BY_IDX(inst, idx) NVMEM_CELL_GET_BY_IDX(DT_DRV_INST(inst), idx)
274
292#define NVMEM_CELL_GET_BY_IDX_OR(node_id, idx, default_value) \
293 COND_CODE_1(DT_PROP_HAS_IDX(node_id, nvmem_cells, idx), \
294 (NVMEM_CELL_GET_BY_IDX(node_id, idx)), \
295 (default_value))
296
310#define NVMEM_CELL_INST_GET_BY_IDX_OR(inst, idx, default_value) \
311 NVMEM_CELL_GET_BY_IDX_OR(DT_DRV_INST(inst), idx, default_value)
312
331int nvmem_cell_read(const struct nvmem_cell *cell, void *data, off_t off, size_t len);
332
353int nvmem_cell_write(const struct nvmem_cell *cell, const void *data, off_t off, size_t len);
354
362static inline bool nvmem_cell_is_ready(const struct nvmem_cell *cell)
363{
364 return cell != NULL && device_is_ready(cell->dev);
365}
366
374static inline bool nvmem_cell_is_read_only(const struct nvmem_cell *cell)
375{
376 return cell->read_only;
377}
378
379#ifdef __cplusplus
380}
381#endif
382
386
387#endif /* ZEPHYR_INCLUDE_NVMEM_H_ */
irp nz macro MOVR cc s mov cc s endm endr irp aw macro LDR aa off
Definition asm-macro-32-bit-gnu.h:17
Public NVMEM devicetree header file.
Devicetree main header.
bool device_is_ready(const struct device *dev)
Verify that a device is ready for use.
int nvmem_cell_read(const struct nvmem_cell *cell, void *data, off_t off, size_t len)
Read data from an NVMEM cell.
static bool nvmem_cell_is_ready(const struct nvmem_cell *cell)
Check if an NVMEM cell is ready.
Definition nvmem.h:362
static bool nvmem_cell_is_read_only(const struct nvmem_cell *cell)
Check if an NVMEM cell is read-only.
Definition nvmem.h:374
int nvmem_cell_write(const struct nvmem_cell *cell, const void *data, off_t off, size_t len)
Write data to an NVMEM cell.
#define NULL
Definition iar_missing_defs.h:20
__INTPTR_TYPE__ off_t
Definition types.h:36
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
void * data
Address of the device instance private data.
Definition device.h:523
Non-Volatile Memory cell representation.
Definition nvmem.h:36