Zephyr Project API 3.7.0
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
reg property

Macros

#define DT_NUM_REGS(node_id)   DT_CAT(node_id, _REG_NUM)
 Get the number of register blocks in the reg property.
 
#define DT_REG_HAS_IDX(node_id, idx)    IS_ENABLED(DT_CAT4(node_id, _REG_IDX_, idx, _EXISTS))
 Is idx a valid register block index?
 
#define DT_REG_HAS_NAME(node_id, name)    IS_ENABLED(DT_CAT4(node_id, _REG_NAME_, name, _EXISTS))
 Is name a valid register block name?
 
#define DT_REG_ADDR_BY_IDX(node_id, idx)    DT_CAT4(node_id, _REG_IDX_, idx, _VAL_ADDRESS)
 Get the base address of the register block at index idx.
 
#define DT_REG_SIZE_BY_IDX(node_id, idx)    DT_CAT4(node_id, _REG_IDX_, idx, _VAL_SIZE)
 Get the size of the register block at index idx.
 
#define DT_REG_ADDR(node_id)   DT_REG_ADDR_BY_IDX(node_id, 0)
 Get a node's (only) register block address.
 
#define DT_REG_ADDR_U64(node_id)   DT_U64_C(DT_REG_ADDR(node_id))
 64-bit version of DT_REG_ADDR()
 
#define DT_REG_SIZE(node_id)   DT_REG_SIZE_BY_IDX(node_id, 0)
 Get a node's (only) register block size.
 
#define DT_REG_ADDR_BY_NAME(node_id, name)    DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS)
 Get a register block's base address by name.
 
#define DT_REG_ADDR_BY_NAME_OR(node_id, name, default_value)
 Like DT_REG_ADDR_BY_NAME(), but with a fallback to default_value.
 
#define DT_REG_ADDR_BY_NAME_U64(node_id, name)    DT_U64_C(DT_REG_ADDR_BY_NAME(node_id, name))
 64-bit version of DT_REG_ADDR_BY_NAME()
 
#define DT_REG_SIZE_BY_NAME(node_id, name)    DT_CAT4(node_id, _REG_NAME_, name, _VAL_SIZE)
 Get a register block's size by name.
 
#define DT_REG_SIZE_BY_NAME_OR(node_id, name, default_value)
 Like DT_REG_SIZE_BY_NAME(), but with a fallback to default_value.
 

Detailed Description

Macro Definition Documentation

◆ DT_NUM_REGS

#define DT_NUM_REGS (   node_id)    DT_CAT(node_id, _REG_NUM)

#include <include/zephyr/devicetree.h>

Get the number of register blocks in the reg property.

Use this instead of DT_PROP_LEN(node_id, reg).

Parameters
node_idnode identifier
Returns
Number of register blocks in the node's "reg" property.

◆ DT_REG_ADDR

#define DT_REG_ADDR (   node_id)    DT_REG_ADDR_BY_IDX(node_id, 0)

#include <include/zephyr/devicetree.h>

Get a node's (only) register block address.

Equivalent to DT_REG_ADDR_BY_IDX(node_id, 0).

Parameters
node_idnode identifier
Returns
node's register block address

◆ DT_REG_ADDR_BY_IDX

#define DT_REG_ADDR_BY_IDX (   node_id,
  idx 
)     DT_CAT4(node_id, _REG_IDX_, idx, _VAL_ADDRESS)

#include <include/zephyr/devicetree.h>

Get the base address of the register block at index idx.

Parameters
node_idnode identifier
idxindex of the register whose address to return
Returns
address of the idx-th register block

◆ DT_REG_ADDR_BY_NAME

#define DT_REG_ADDR_BY_NAME (   node_id,
  name 
)     DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS)

#include <include/zephyr/devicetree.h>

Get a register block's base address by name.

Parameters
node_idnode identifier
namelowercase-and-underscores register specifier name
Returns
address of the register block specified by name

◆ DT_REG_ADDR_BY_NAME_OR

#define DT_REG_ADDR_BY_NAME_OR (   node_id,
  name,
  default_value 
)

#include <include/zephyr/devicetree.h>

Value:
COND_CODE_1(DT_REG_HAS_NAME(node_id, name), \
(DT_REG_ADDR_BY_NAME(node_id, name)), (default_value))
#define DT_REG_HAS_NAME(node_id, name)
Is name a valid register block name?
Definition devicetree.h:2243
#define DT_REG_ADDR_BY_NAME(node_id, name)
Get a register block's base address by name.
Definition devicetree.h:2305
#define COND_CODE_1(_flag, _if_1_code, _else_code)
Insert code depending on whether _flag expands to 1 or not.
Definition util_macro.h:179

Like DT_REG_ADDR_BY_NAME(), but with a fallback to default_value.

Parameters
node_idnode identifier
namelowercase-and-underscores register specifier name
default_valuea fallback value to expand to
Returns
address of the register block specified by name if present, default_value otherwise

◆ DT_REG_ADDR_BY_NAME_U64

#define DT_REG_ADDR_BY_NAME_U64 (   node_id,
  name 
)     DT_U64_C(DT_REG_ADDR_BY_NAME(node_id, name))

#include <include/zephyr/devicetree.h>

64-bit version of DT_REG_ADDR_BY_NAME()

This macro version adds the appropriate suffix for 64-bit unsigned integer literals. Note that this macro is equivalent to DT_REG_ADDR_BY_NAME() in linker/ASM context.

Parameters
node_idnode identifier
namelowercase-and-underscores register specifier name
Returns
address of the register block specified by name

◆ DT_REG_ADDR_U64

#define DT_REG_ADDR_U64 (   node_id)    DT_U64_C(DT_REG_ADDR(node_id))

#include <include/zephyr/devicetree.h>

64-bit version of DT_REG_ADDR()

This macro version adds the appropriate suffix for 64-bit unsigned integer literals. Note that this macro is equivalent to DT_REG_ADDR() in linker/ASM context.

Parameters
node_idnode identifier
Returns
node's register block address

◆ DT_REG_HAS_IDX

#define DT_REG_HAS_IDX (   node_id,
  idx 
)     IS_ENABLED(DT_CAT4(node_id, _REG_IDX_, idx, _EXISTS))

#include <include/zephyr/devicetree.h>

Is idx a valid register block index?

If this returns 1, then DT_REG_ADDR_BY_IDX(node_id, idx) or DT_REG_SIZE_BY_IDX(node_id, idx) are valid. If it returns 0, it is an error to use those macros with index idx.

Parameters
node_idnode identifier
idxindex to check
Returns
1 if idx is a valid register block index, 0 otherwise.

◆ DT_REG_HAS_NAME

#define DT_REG_HAS_NAME (   node_id,
  name 
)     IS_ENABLED(DT_CAT4(node_id, _REG_NAME_, name, _EXISTS))

#include <include/zephyr/devicetree.h>

Is name a valid register block name?

If this returns 1, then DT_REG_ADDR_BY_NAME(node_id, name) or DT_REG_SIZE_BY_NAME(node_id, name) are valid. If it returns 0, it is an error to use those macros with name name.

Parameters
node_idnode identifier
namename to check
Returns
1 if name is a valid register block name, 0 otherwise.

◆ DT_REG_SIZE

#define DT_REG_SIZE (   node_id)    DT_REG_SIZE_BY_IDX(node_id, 0)

#include <include/zephyr/devicetree.h>

Get a node's (only) register block size.

Equivalent to DT_REG_SIZE_BY_IDX(node_id, 0).

Parameters
node_idnode identifier
Returns
node's only register block's size

◆ DT_REG_SIZE_BY_IDX

#define DT_REG_SIZE_BY_IDX (   node_id,
  idx 
)     DT_CAT4(node_id, _REG_IDX_, idx, _VAL_SIZE)

#include <include/zephyr/devicetree.h>

Get the size of the register block at index idx.

This is the size of an individual register block, not the total number of register blocks in the property; use DT_NUM_REGS() for that.

Parameters
node_idnode identifier
idxindex of the register whose size to return
Returns
size of the idx-th register block

◆ DT_REG_SIZE_BY_NAME

#define DT_REG_SIZE_BY_NAME (   node_id,
  name 
)     DT_CAT4(node_id, _REG_NAME_, name, _VAL_SIZE)

#include <include/zephyr/devicetree.h>

Get a register block's size by name.

Parameters
node_idnode identifier
namelowercase-and-underscores register specifier name
Returns
size of the register block specified by name

◆ DT_REG_SIZE_BY_NAME_OR

#define DT_REG_SIZE_BY_NAME_OR (   node_id,
  name,
  default_value 
)

#include <include/zephyr/devicetree.h>

Value:
COND_CODE_1(DT_REG_HAS_NAME(node_id, name), \
(DT_REG_SIZE_BY_NAME(node_id, name)), (default_value))
#define DT_REG_SIZE_BY_NAME(node_id, name)
Get a register block's size by name.
Definition devicetree.h:2341

Like DT_REG_SIZE_BY_NAME(), but with a fallback to default_value.

Parameters
node_idnode identifier
namelowercase-and-underscores register specifier name
default_valuea fallback value to expand to
Returns
size of the register block specified by name if present, default_value otherwise