15#ifndef ZEPHYR_INCLUDE_SYS_DEVICE_MMIO_H
16#define ZEPHYR_INCLUDE_SYS_DEVICE_MMIO_H
36#if defined(CONFIG_MMU) || defined(CONFIG_PCIE)
37#define DEVICE_MMIO_IS_IN_RAM
46#ifdef DEVICE_MMIO_IS_IN_RAM
51struct z_device_mmio_rom {
59#define Z_DEVICE_MMIO_ROM_INITIALIZER(node_id) \
61 .phys_addr = DT_REG_ADDR(node_id), \
62 .size = DT_REG_SIZE(node_id) \
65#define Z_DEVICE_MMIO_NAMED_ROM_INITIALIZER(name, node_id) \
67 .phys_addr = DT_REG_ADDR_BY_NAME(node_id, name), \
68 .size = DT_REG_SIZE_BY_NAME(node_id, name) \
99 z_phys_map((
uint8_t **)virt_addr, phys_addr, size,
105 *virt_addr = phys_addr;
112struct z_device_mmio_rom {
117#define Z_DEVICE_MMIO_ROM_INITIALIZER(node_id) \
119 .addr = DT_REG_ADDR(node_id) \
122#define Z_DEVICE_MMIO_NAMED_ROM_INITIALIZER(name, node_id) \
124 .addr = DT_REG_ADDR_BY_NAME(node_id, name) \
168#ifdef DEVICE_MMIO_IS_IN_RAM
169#define DEVICE_MMIO_RAM mm_reg_t _mmio
171#define DEVICE_MMIO_RAM
174#ifdef DEVICE_MMIO_IS_IN_RAM
185#define DEVICE_MMIO_RAM_PTR(device) (mm_reg_t *)((device)->data)
214#define DEVICE_MMIO_ROM struct z_device_mmio_rom _mmio
225#define DEVICE_MMIO_ROM_PTR(dev) \
226 ((struct z_device_mmio_rom *)((dev)->config))
246#define DEVICE_MMIO_ROM_INIT(node_id) \
247 ._mmio = Z_DEVICE_MMIO_ROM_INITIALIZER(node_id)
265#ifdef DEVICE_MMIO_IS_IN_RAM
266#define DEVICE_MMIO_MAP(dev, flags) \
267 device_map(DEVICE_MMIO_RAM_PTR(dev), \
268 DEVICE_MMIO_ROM_PTR(dev)->phys_addr, \
269 DEVICE_MMIO_ROM_PTR(dev)->size, \
272#define DEVICE_MMIO_MAP(dev, flags) do { } while (false)
294#ifdef DEVICE_MMIO_IS_IN_RAM
295#define DEVICE_MMIO_GET(dev) (*DEVICE_MMIO_RAM_PTR(dev))
297#define DEVICE_MMIO_GET(dev) (DEVICE_MMIO_ROM_PTR(dev)->addr)
341#ifdef DEVICE_MMIO_IS_IN_RAM
342#define DEVICE_MMIO_NAMED_RAM(name) mm_reg_t name
344#define DEVICE_MMIO_NAMED_RAM(name)
347#ifdef DEVICE_MMIO_IS_IN_RAM
358#define DEVICE_MMIO_NAMED_RAM_PTR(dev, name) \
359 (&(DEV_DATA(dev)->name))
393#define DEVICE_MMIO_NAMED_ROM(name) struct z_device_mmio_rom name
407#define DEVICE_MMIO_NAMED_ROM_PTR(dev, name) (&(DEV_CFG(dev)->name))
431#define DEVICE_MMIO_NAMED_ROM_INIT(name, node_id) \
432 .name = Z_DEVICE_MMIO_ROM_INITIALIZER(node_id)
472#define DEVICE_MMIO_NAMED_ROM_INIT_BY_NAME(name, node_id) \
473 .name = Z_DEVICE_MMIO_NAMED_ROM_INITIALIZER(name, node_id)
501#ifdef DEVICE_MMIO_IS_IN_RAM
502#define DEVICE_MMIO_NAMED_MAP(dev, name, flags) \
503 device_map(DEVICE_MMIO_NAMED_RAM_PTR((dev), name), \
504 (DEVICE_MMIO_NAMED_ROM_PTR((dev), name)->phys_addr), \
505 (DEVICE_MMIO_NAMED_ROM_PTR((dev), name)->size), \
508#define DEVICE_MMIO_NAMED_MAP(dev, name, flags) do { } while (false)
532#ifdef DEVICE_MMIO_IS_IN_RAM
533#define DEVICE_MMIO_NAMED_GET(dev, name) \
534 (*DEVICE_MMIO_NAMED_RAM_PTR((dev), name))
536#define DEVICE_MMIO_NAMED_GET(dev, name) \
537 ((DEVICE_MMIO_NAMED_ROM_PTR((dev), name))->addr)
559 #define Z_TOPLEVEL_ROM_NAME(name) _CONCAT(z_mmio_rom__, name)
560 #define Z_TOPLEVEL_RAM_NAME(name) _CONCAT(z_mmio_ram__, name)
577#ifdef DEVICE_MMIO_IS_IN_RAM
578#define DEVICE_MMIO_TOPLEVEL(name, node_id) \
580 mm_reg_t Z_TOPLEVEL_RAM_NAME(name); \
582 const struct z_device_mmio_rom Z_TOPLEVEL_ROM_NAME(name) = \
583 Z_DEVICE_MMIO_ROM_INITIALIZER(node_id)
585#define DEVICE_MMIO_TOPLEVEL(name, node_id) \
587 const struct z_device_mmio_rom Z_TOPLEVEL_ROM_NAME(name) = \
588 Z_DEVICE_MMIO_ROM_INITIALIZER(node_id)
605#ifdef DEVICE_MMIO_IS_IN_RAM
606#define DEVICE_MMIO_TOPLEVEL_DECLARE(name) \
607 extern mm_reg_t Z_TOPLEVEL_RAM_NAME(name); \
608 extern const struct z_device_mmio_rom Z_TOPLEVEL_ROM_NAME(name)
610#define DEVICE_MMIO_TOPLEVEL_DECLARE(name) \
611 extern const struct z_device_mmio_rom Z_TOPLEVEL_ROM_NAME(name)
628#ifdef DEVICE_MMIO_IS_IN_RAM
629#define DEVICE_MMIO_TOPLEVEL_STATIC(name, node_id) \
631 static mm_reg_t Z_TOPLEVEL_RAM_NAME(name); \
633 static const struct z_device_mmio_rom Z_TOPLEVEL_ROM_NAME(name) = \
634 Z_DEVICE_MMIO_ROM_INITIALIZER(node_id)
636#define DEVICE_MMIO_TOPLEVEL_STATIC(name, node_id) \
638 static const struct z_device_mmio_rom Z_TOPLEVEL_ROM_NAME(name) = \
639 Z_DEVICE_MMIO_ROM_INITIALIZER(node_id)
642#ifdef DEVICE_MMIO_IS_IN_RAM
650#define DEVICE_MMIO_TOPLEVEL_RAM_PTR(name) &Z_TOPLEVEL_RAM_NAME(name)
659#define DEVICE_MMIO_TOPLEVEL_ROM_PTR(name) &Z_TOPLEVEL_ROM_NAME(name)
682#ifdef DEVICE_MMIO_IS_IN_RAM
683#define DEVICE_MMIO_TOPLEVEL_MAP(name, flags) \
684 device_map(&Z_TOPLEVEL_RAM_NAME(name), \
685 Z_TOPLEVEL_ROM_NAME(name).phys_addr, \
686 Z_TOPLEVEL_ROM_NAME(name).size, flags)
688#define DEVICE_MMIO_TOPLEVEL_MAP(name, flags) do { } while (false)
701#ifdef DEVICE_MMIO_IS_IN_RAM
702#define DEVICE_MMIO_TOPLEVEL_GET(name) \
703 ((mm_reg_t)Z_TOPLEVEL_RAM_NAME(name))
705#define DEVICE_MMIO_TOPLEVEL_GET(name) \
706 ((mm_reg_t)Z_TOPLEVEL_ROM_NAME(name).addr)
static __boot_func void device_map(mm_reg_t *virt_addr, uintptr_t phys_addr, size_t size, uint32_t flags)
Definition: device_mmio.h:92
flags
Definition: http_parser.h:131
#define K_MEM_PERM_RW
Definition: mem_manage.h:49
Definitions of various linker Sections.
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINTPTR_TYPE__ uintptr_t
Definition: stdint.h:105
uintptr_t mm_reg_t
Definition: sys_io.h:20