| Main index | Section 9 | Options |
#include <sys/extres/nvmem/nvmem.h>
The nvmem API consist of helpers functions for consumer and device methods for providers.
| nvmem_get_cell_len(phandle_t node, const char *name) | |
| Get the size of the cell base on the reg property on the node. Return the size or ENOENT if the cell name wasn't found | |
| nvmem_read_cell_by_name(phandle_t node, const char *name, void *cell, size_t buflen) | |
| Get the cell content based on the name. Return 0 on sucess or ENOENT if the cell doesn't exists, ENXIO if no provider device was found, EINVAL if the size isn't correct. | |
| nvmem_read_cell_by_idx(phandle_t node, int idx, void *cell, size_t buflen) | |
| Get the cell content based on the id. Return 0 on sucess or ENOENT if the cell doesn't exists, ENXIO if no provider device was found, EINVAL if the size isn't correct. | |
| nvmem_write_cell_by_name(phandle_t node, const char *name, void *cell, size_t buflen) | |
| Write the cell content based on the name. Return 0 on sucess or ENOENT if the cell doesn't exists, ENXIO if no provider device was found, EINVAL if the size isn't correct. | |
| nvmem_write_cell_by_idx(phandle_t node, int idx, void *cell, size_t buflen) | |
| Write the cell content based on the id. Return 0 on sucess or ENOENT if the cell doesn't exists, ENXIO if no provider device was found, EINVAL if the size isn't correct. | |
| nvmem_read(device_t dev, uint32_t offset, uint32_t size, uint8_t *buffer) | |
| Provider device method to read a cell content. | |
| nvmem_write(device_t dev, uint32_t offset, uint32_t size, uint8_t *buffer) | |
| Provider device method to write a cell content. | |
/* Provider */
eeprom: eeprom@20000 {
board_id: id@0 {
reg = <0x0 0x4>;
};
};
/* Consumer */
device@30000 {
...
nvmem-cells = <&board_id>
nvmem-cell-names = "boardid";
};
The device driver for eeprom@20000 needs to expose itself as a provider
#include "nvmem_if.h"int foo_nvmem_read(device_t dev, uint32_t offset, uint32_t size, uint8_t *buffer) { /* Read the data */ }
int foo_attach(device_t dev) { phandle_t node;
node = ofw_bus_get_node(dev); ... /* Registering the device so the consumers can find us */ OF_device_register_xref(OF_xref_from_node(node), dev);
... }
static device_method_t foo_methods[] = { ...
/* nvmem interface */ DEVMETHOD(nvmem_read, foo_nvmem_read),
/* Terminate method list */ DEVMETHOD_END };
The consumer device driver for device@30000 can now read the nvmem data
int
bar_attach(device_t dev)
{
phandle_t node;
uint32_t boardid;
...
node = ofw_bus_get_node(dev);
nvmem_read_cell_by_name(node, "boardid", (void *)&boardid, sizeof(boardid));
...
}
| nvmem (9) | July 24, 2018 |
| Main index | Section 9 | Options |
Please direct any comments about this manual page service to Ben Bullock. Privacy policy.
| “ | How's my programming? Call 1-800-DEV-NULL | ” |