17#ifndef ZEPHYR_INCLUDE_DEVICETREE_H_
18#define ZEPHYR_INCLUDE_DEVICETREE_H_
20#include <zephyr/devicetree_generated.h>
23#if !defined(_LINKER) && !defined(_ASMLANGUAGE)
84#define DT_INVALID_NODE _
141#define DT_PATH(...) DT_PATH_INTERNAL(__VA_ARGS__)
197#define DT_NODELABEL(label) DT_CAT(DT_N_NODELABEL_, label)
237#define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
244#define DT_HAS_ALIAS(alias_name) DT_NODE_EXISTS(DT_ALIAS(alias_name))
254#define DT_NODE_HASH(node_id) DT_CAT(node_id, _HASH)
350#define DT_INST(inst, compat) UTIL_CAT(DT_N_INST, DT_DASH(inst, compat))
375#define DT_PARENT(node_id) DT_CAT(node_id, _PARENT)
400#define DT_GPARENT(node_id) DT_PARENT(DT_PARENT(node_id))
437#define DT_CHILD(node_id, child) UTIL_CAT(node_id, DT_S_PREFIX(child))
471#define DT_CHILD_BY_UNIT_ADDR_INT(node_id, addr) \
472 DT_CAT3(node_id, _CHILD_UNIT_ADDR_INT_, addr)
515#define DT_COMPAT_GET_ANY_STATUS_OKAY(compat) \
516 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
517 (DT_INST(0, compat)), \
547#define DT_NODE_PATH(node_id) DT_CAT(node_id, _PATH)
573#define DT_NODE_FULL_NAME(node_id) DT_CAT(node_id, _FULL_NAME)
601#define DT_NODE_FULL_NAME_UNQUOTED(node_id) DT_CAT(node_id, _FULL_NAME_UNQUOTED)
629#define DT_NODE_FULL_NAME_TOKEN(node_id) DT_CAT(node_id, _FULL_NAME_TOKEN)
659#define DT_NODE_FULL_NAME_UPPER_TOKEN(node_id) DT_CAT(node_id, _FULL_NAME_UPPER_TOKEN)
687#define DT_NODE_CHILD_IDX(node_id) DT_CAT(node_id, _CHILD_IDX)
695#define DT_CHILD_NUM(node_id) DT_CAT(node_id, _CHILD_NUM)
705#define DT_CHILD_NUM_STATUS_OKAY(node_id) \
706 DT_CAT(node_id, _CHILD_NUM_STATUS_OKAY)
728#define DT_SAME_NODE(node_id1, node_id2) \
729 IS_EQ(DT_DEP_ORD(node_id1), DT_DEP_ORD(node_id2))
755#define DT_NODELABEL_STRING_ARRAY(node_id) \
756 { DT_FOREACH_NODELABEL(node_id, DT_NODELABEL_STRING_ARRAY_ENTRY_INTERNAL) }
798#define DT_PROP(node_id, prop) DT_CAT3(node_id, _P_, prop)
832#define DT_PROP_LEN(node_id, prop) DT_CAT4(node_id, _P_, prop, _LEN)
848#define DT_PROP_LEN_OR(node_id, prop, default_value) \
849 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
850 (DT_PROP_LEN(node_id, prop)), (default_value))
872#define DT_PROP_HAS_IDX(node_id, prop, idx) \
873 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _IDX_, idx, _EXISTS))
907#define DT_PROP_HAS_NAME(node_id, prop, name) \
908 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _NAME_, name, _EXISTS))
944#define DT_PROP_BY_IDX(node_id, prop, idx) \
945 DT_CAT5(node_id, _P_, prop, _IDX_, idx)
955#define DT_PROP_LAST(node_id, prop) \
956 DT_PROP_BY_IDX(node_id, prop, UTIL_DEC(DT_PROP_LEN(node_id, prop)))
971#define DT_PROP_OR(node_id, prop, default_value) \
972 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
973 (DT_PROP(node_id, prop)), (default_value))
1030#define DT_ENUM_IDX_BY_IDX(node_id, prop, idx) \
1031 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _ENUM_IDX)
1039#define DT_ENUM_IDX(node_id, prop) DT_ENUM_IDX_BY_IDX(node_id, prop, 0)
1056#define DT_ENUM_IDX_BY_IDX_OR(node_id, prop, idx, default_idx_value) \
1057 COND_CODE_1(DT_PROP_HAS_IDX(node_id, prop, idx), \
1058 (DT_ENUM_IDX_BY_IDX(node_id, prop, idx)), (default_idx_value))
1068#define DT_ENUM_IDX_OR(node_id, prop, default_idx_value) \
1069 DT_ENUM_IDX_BY_IDX_OR(node_id, prop, 0, default_idx_value)
1080#define DT_ENUM_HAS_VALUE_BY_IDX(node_id, prop, idx, value) \
1081 IS_ENABLED(DT_CAT8(node_id, _P_, prop, _IDX_, idx, _ENUM_VAL_, value, _EXISTS))
1090#define DT_ENUM_HAS_VALUE(node_id, prop, value) \
1091 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _ENUM_VAL_, value, _EXISTS))
1152#define DT_STRING_TOKEN(node_id, prop) \
1153 DT_CAT4(node_id, _P_, prop, _STRING_TOKEN)
1168#define DT_STRING_TOKEN_OR(node_id, prop, default_value) \
1169 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1170 (DT_STRING_TOKEN(node_id, prop)), (default_value))
1229#define DT_STRING_UPPER_TOKEN(node_id, prop) \
1230 DT_CAT4(node_id, _P_, prop, _STRING_UPPER_TOKEN)
1246#define DT_STRING_UPPER_TOKEN_OR(node_id, prop, default_value) \
1247 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1248 (DT_STRING_UPPER_TOKEN(node_id, prop)), (default_value))
1290#define DT_STRING_UNQUOTED(node_id, prop) \
1291 DT_CAT4(node_id, _P_, prop, _STRING_UNQUOTED)
1307#define DT_STRING_UNQUOTED_OR(node_id, prop, default_value) \
1308 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1309 (DT_STRING_UNQUOTED(node_id, prop)), (default_value))
1358#define DT_STRING_TOKEN_BY_IDX(node_id, prop, idx) \
1359 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_TOKEN)
1369#define DT_STRING_TOKEN_BY_IDX_OR(node_id, prop, idx, default_value) \
1370 COND_CODE_1(DT_PROP_HAS_IDX(node_id, prop, idx), \
1371 (DT_STRING_TOKEN_BY_IDX(node_id, prop, idx)), (default_value))
1420#define DT_STRING_UPPER_TOKEN_BY_IDX(node_id, prop, idx) \
1421 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UPPER_TOKEN)
1463#define DT_STRING_UNQUOTED_BY_IDX(node_id, prop, idx) \
1464 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UNQUOTED)
1519#define DT_PROP_BY_PHANDLE_IDX(node_id, phs, idx, prop) \
1520 DT_PROP(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop)
1541#define DT_PROP_BY_PHANDLE_IDX_OR(node_id, phs, idx, prop, default_value) \
1542 DT_PROP_OR(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop, default_value)
1555#define DT_PROP_BY_PHANDLE(node_id, ph, prop) \
1556 DT_PROP_BY_PHANDLE_IDX(node_id, ph, 0, prop)
1612#define DT_PHA_BY_IDX(node_id, pha, idx, cell) \
1613 DT_CAT7(node_id, _P_, pha, _IDX_, idx, _VAL_, cell)
1638#define DT_PHA_BY_IDX_OR(node_id, pha, idx, cell, default_value) \
1639 DT_PROP_OR(node_id, DT_CAT5(pha, _IDX_, idx, _VAL_, cell), default_value)
1648#define DT_PHA(node_id, pha, cell) DT_PHA_BY_IDX(node_id, pha, 0, cell)
1664#define DT_PHA_OR(node_id, pha, cell, default_value) \
1665 DT_PHA_BY_IDX_OR(node_id, pha, 0, cell, default_value)
1707#define DT_PHA_BY_NAME(node_id, pha, name, cell) \
1708 DT_CAT7(node_id, _P_, pha, _NAME_, name, _VAL_, cell)
1731#define DT_PHA_BY_NAME_OR(node_id, pha, name, cell, default_value) \
1732 DT_PROP_OR(node_id, DT_CAT5(pha, _NAME_, name, _VAL_, cell), default_value)
1781#define DT_PHANDLE_BY_NAME(node_id, pha, name) \
1782 DT_CAT6(node_id, _P_, pha, _NAME_, name, _PH)
1833#define DT_PHANDLE_BY_IDX(node_id, prop, idx) \
1834 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _PH)
1847#define DT_PHANDLE(node_id, prop) DT_PHANDLE_BY_IDX(node_id, prop, 0)
1895#define DT_NUM_RANGES(node_id) DT_CAT(node_id, _RANGES_NUM)
1949#define DT_RANGES_HAS_IDX(node_id, idx) \
1950 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _EXISTS))
2004#define DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(node_id, idx) \
2005 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS_EXISTS))
2044#define DT_RANGES_CHILD_BUS_FLAGS_BY_IDX(node_id, idx) \
2045 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS)
2093#define DT_RANGES_CHILD_BUS_ADDRESS_BY_IDX(node_id, idx) \
2094 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_ADDRESS)
2142#define DT_RANGES_PARENT_BUS_ADDRESS_BY_IDX(node_id, idx) \
2143 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_PARENT_BUS_ADDRESS)
2191#define DT_RANGES_LENGTH_BY_IDX(node_id, idx) \
2192 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_LENGTH)
2233#define DT_FOREACH_RANGE(node_id, fn) \
2234 DT_CAT(node_id, _FOREACH_RANGE)(fn)
2281#define DT_NODE_VENDOR_BY_IDX(node_id, idx) \
2282 DT_CAT3(node_id, _COMPAT_VENDOR_IDX_, idx)
2296#define DT_NODE_VENDOR_HAS_IDX(node_id, idx) \
2297 IS_ENABLED(DT_CAT4(node_id, _COMPAT_VENDOR_IDX_, idx, _EXISTS))
2313#define DT_NODE_VENDOR_BY_IDX_OR(node_id, idx, default_value) \
2314 COND_CODE_1(DT_NODE_VENDOR_HAS_IDX(node_id, idx), \
2315 (DT_NODE_VENDOR_BY_IDX(node_id, idx)), (default_value))
2325#define DT_NODE_VENDOR_OR(node_id, default_value) \
2326 DT_NODE_VENDOR_BY_IDX_OR(node_id, 0, default_value)
2357#define DT_NODE_MODEL_BY_IDX(node_id, idx) \
2358 DT_CAT3(node_id, _COMPAT_MODEL_IDX_, idx)
2372#define DT_NODE_MODEL_HAS_IDX(node_id, idx) \
2373 IS_ENABLED(DT_CAT4(node_id, _COMPAT_MODEL_IDX_, idx, _EXISTS))
2389#define DT_NODE_MODEL_BY_IDX_OR(node_id, idx, default_value) \
2390 COND_CODE_1(DT_NODE_MODEL_HAS_IDX(node_id, idx), \
2391 (DT_NODE_MODEL_BY_IDX(node_id, idx)), (default_value))
2401#define DT_NODE_MODEL_OR(node_id, default_value) \
2402 DT_NODE_MODEL_BY_IDX_OR(node_id, 0, default_value)
2421#define DT_NUM_REGS(node_id) DT_CAT(node_id, _REG_NUM)
2434#define DT_REG_HAS_IDX(node_id, idx) \
2435 IS_ENABLED(DT_CAT4(node_id, _REG_IDX_, idx, _EXISTS))
2448#define DT_REG_HAS_NAME(node_id, name) \
2449 IS_ENABLED(DT_CAT4(node_id, _REG_NAME_, name, _EXISTS))
2462#define DT_REG_ADDR_BY_IDX_RAW(node_id, idx) \
2463 DT_CAT4(node_id, _REG_IDX_, idx, _VAL_ADDRESS)
2476#define DT_REG_ADDR_RAW(node_id) \
2477 DT_REG_ADDR_BY_IDX_RAW(node_id, 0)
2485#define DT_REG_ADDR_BY_IDX(node_id, idx) \
2486 DT_U32_C(DT_REG_ADDR_BY_IDX_RAW(node_id, idx))
2499#define DT_REG_SIZE_BY_IDX(node_id, idx) \
2500 DT_U32_C(DT_CAT4(node_id, _REG_IDX_, idx, _VAL_SIZE))
2509#define DT_REG_ADDR(node_id) DT_REG_ADDR_BY_IDX(node_id, 0)
2521#define DT_REG_ADDR_U64(node_id) DT_U64_C(DT_REG_ADDR_BY_IDX_RAW(node_id, 0))
2530#define DT_REG_SIZE(node_id) DT_REG_SIZE_BY_IDX(node_id, 0)
2538#define DT_REG_ADDR_BY_NAME(node_id, name) \
2539 DT_U32_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS))
2549#define DT_REG_ADDR_BY_NAME_OR(node_id, name, default_value) \
2550 COND_CODE_1(DT_REG_HAS_NAME(node_id, name), \
2551 (DT_REG_ADDR_BY_NAME(node_id, name)), (default_value))
2565#define DT_REG_ADDR_BY_NAME_U64(node_id, name) \
2566 DT_U64_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS))
2574#define DT_REG_SIZE_BY_NAME(node_id, name) \
2575 DT_U32_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_SIZE))
2585#define DT_REG_SIZE_BY_NAME_OR(node_id, name, default_value) \
2586 COND_CODE_1(DT_REG_HAS_NAME(node_id, name), \
2587 (DT_REG_SIZE_BY_NAME(node_id, name)), (default_value))
2637#define DT_FOREACH_REG(node_id, fn) \
2638 DT_CAT(node_id, _FOREACH_REG)(fn)
2688#define DT_FOREACH_REG_SEP(node_id, fn, sep) \
2689 DT_CAT(node_id, _FOREACH_REG_SEP)(fn, sep)
2705#define DT_FOREACH_REG_VARGS(node_id, fn, ...) \
2706 DT_CAT(node_id, _FOREACH_REG_VARGS)(fn, __VA_ARGS__)
2724#define DT_FOREACH_REG_SEP_VARGS(node_id, fn, sep, ...) \
2725 DT_CAT(node_id, _FOREACH_REG_SEP_VARGS)(fn, sep, __VA_ARGS__)
2745#define DT_NUM_IRQS(node_id) DT_CAT(node_id, _IRQ_NUM)
2771#define DT_NUM_NODELABELS(node_id) DT_CAT(node_id, _NODELABEL_NUM)
2779#define DT_IRQ_LEVEL(node_id) DT_CAT(node_id, _IRQ_LEVEL)
2791#define DT_IRQ_HAS_IDX(node_id, idx) \
2792 IS_ENABLED(DT_CAT4(node_id, _IRQ_IDX_, idx, _EXISTS))
2804#define DT_IRQ_HAS_CELL_AT_IDX(node_id, idx, cell) \
2805 IS_ENABLED(DT_CAT6(node_id, _IRQ_IDX_, idx, _VAL_, cell, _EXISTS))
2814#define DT_IRQ_HAS_CELL(node_id, cell) DT_IRQ_HAS_CELL_AT_IDX(node_id, 0, cell)
2825#define DT_IRQ_HAS_NAME(node_id, name) \
2826 IS_ENABLED(DT_CAT4(node_id, _IRQ_NAME_, name, _VAL_irq_EXISTS))
2863#define DT_IRQ_BY_IDX(node_id, idx, cell) \
2864 DT_CAT5(node_id, _IRQ_IDX_, idx, _VAL_, cell)
2881#define DT_IRQ_BY_NAME(node_id, name, cell) \
2882 DT_CAT5(node_id, _IRQ_NAME_, name, _VAL_, cell)
2891#define DT_IRQ(node_id, cell) DT_IRQ_BY_IDX(node_id, 0, cell)
2935#define DT_IRQ_INTC_BY_IDX(node_id, idx) \
2936 DT_CAT4(node_id, _IRQ_IDX_, idx, _CONTROLLER)
2982#define DT_IRQ_INTC_BY_NAME(node_id, name) \
2983 DT_CAT4(node_id, _IRQ_NAME_, name, _CONTROLLER)
3024#define DT_IRQ_INTC(node_id) \
3025 DT_IRQ_INTC_BY_IDX(node_id, 0)
3032#define DT_IRQN_L1_INTERNAL(node_id, idx) DT_IRQ_BY_IDX(node_id, idx, irq)
3034#define DT_IRQN_L2_INTERNAL(node_id, idx) \
3035 (IRQ_TO_L2(DT_IRQN_L1_INTERNAL(node_id, idx)) | \
3036 DT_IRQ(DT_IRQ_INTC_BY_IDX(node_id, idx), irq))
3038#define DT_IRQN_L3_INTERNAL(node_id, idx) \
3039 (IRQ_TO_L3(DT_IRQN_L1_INTERNAL(node_id, idx)) | \
3040 IRQ_TO_L2(DT_IRQ(DT_IRQ_INTC_BY_IDX(node_id, idx), irq)) | \
3041 DT_IRQ(DT_IRQ_INTC(DT_IRQ_INTC_BY_IDX(node_id, idx)), irq))
3043#define DT_IRQN_LVL_INTERNAL(node_id, idx, level) DT_CAT3(DT_IRQN_L, level, _INTERNAL)(node_id, idx)
3049#define DT_MULTI_LEVEL_IRQN_INTERNAL(node_id, idx) \
3050 DT_IRQN_LVL_INTERNAL(node_id, idx, DT_IRQ_LEVEL(node_id))
3064#define DT_IRQN_BY_IDX(node_id, idx) \
3065 COND_CODE_1(IS_ENABLED(CONFIG_MULTI_LEVEL_INTERRUPTS), \
3066 (DT_MULTI_LEVEL_IRQN_INTERNAL(node_id, idx)), \
3067 (DT_IRQ_BY_IDX(node_id, idx, irq)))
3079#define DT_IRQN(node_id) DT_IRQN_BY_IDX(node_id, 0)
3099#define DT_CHOSEN(prop) DT_CAT(DT_CHOSEN_, prop)
3107#define DT_HAS_CHOSEN(prop) IS_ENABLED(DT_CAT3(DT_CHOSEN_, prop, _EXISTS))
3158#define DT_FOREACH_NODE(fn) DT_FOREACH_HELPER(fn)
3172#define DT_FOREACH_NODE_VARGS(fn, ...) DT_FOREACH_VARGS_HELPER(fn, __VA_ARGS__)
3185#define DT_FOREACH_STATUS_OKAY_NODE(fn) DT_FOREACH_OKAY_HELPER(fn)
3201#define DT_FOREACH_STATUS_OKAY_NODE_VARGS(fn, ...) DT_FOREACH_OKAY_VARGS_HELPER(fn, __VA_ARGS__)
3249#define DT_FOREACH_ANCESTOR(node_id, fn) \
3250 DT_CAT(node_id, _FOREACH_ANCESTOR)(fn)
3295#define DT_FOREACH_CHILD(node_id, fn) \
3296 DT_CAT(node_id, _FOREACH_CHILD)(fn)
3338#define DT_FOREACH_CHILD_SEP(node_id, fn, sep) \
3339 DT_CAT(node_id, _FOREACH_CHILD_SEP)(fn, sep)
3356#define DT_FOREACH_CHILD_VARGS(node_id, fn, ...) \
3357 DT_CAT(node_id, _FOREACH_CHILD_VARGS)(fn, __VA_ARGS__)
3374#define DT_FOREACH_CHILD_SEP_VARGS(node_id, fn, sep, ...) \
3375 DT_CAT(node_id, _FOREACH_CHILD_SEP_VARGS)(fn, sep, __VA_ARGS__)
3392#define DT_FOREACH_CHILD_STATUS_OKAY(node_id, fn) \
3393 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY)(fn)
3411#define DT_FOREACH_CHILD_STATUS_OKAY_SEP(node_id, fn, sep) \
3412 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP)(fn, sep)
3433#define DT_FOREACH_CHILD_STATUS_OKAY_VARGS(node_id, fn, ...) \
3434 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_VARGS)(fn, __VA_ARGS__)
3454#define DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(node_id, fn, sep, ...) \
3455 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP_VARGS)(fn, sep, __VA_ARGS__)
3507#define DT_FOREACH_PROP_ELEM(node_id, prop, fn) \
3508 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM)(fn)
3552#define DT_FOREACH_PROP_ELEM_SEP(node_id, prop, fn, sep) \
3553 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP)(fn, sep)
3575#define DT_FOREACH_PROP_ELEM_VARGS(node_id, prop, fn, ...) \
3576 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_VARGS)(fn, __VA_ARGS__)
3594#define DT_FOREACH_PROP_ELEM_SEP_VARGS(node_id, prop, fn, sep, ...) \
3595 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP_VARGS)( \
3596 fn, sep, __VA_ARGS__)
3651#define DT_FOREACH_STATUS_OKAY(compat, fn) \
3652 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3653 (UTIL_CAT(DT_FOREACH_OKAY_, compat)(fn)), \
3700#define DT_FOREACH_STATUS_OKAY_VARGS(compat, fn, ...) \
3701 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3702 (DT_CAT(DT_FOREACH_OKAY_VARGS_, \
3703 compat)(fn, __VA_ARGS__)), \
3718#define DT_COMPAT_FOREACH_STATUS_OKAY_VARGS(compat, fn, ...) \
3719 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3720 (UTIL_CAT(DT_FOREACH_OKAY_INST_VARGS_, \
3721 compat)(fn, compat, __VA_ARGS__)), \
3763#define DT_FOREACH_NODELABEL(node_id, fn) DT_CAT(node_id, _FOREACH_NODELABEL)(fn)
3802#define DT_FOREACH_NODELABEL_VARGS(node_id, fn, ...) \
3803 DT_CAT(node_id, _FOREACH_NODELABEL_VARGS)(fn, __VA_ARGS__)
3829#define DT_NODE_EXISTS(node_id) IS_ENABLED(DT_CAT(node_id, _EXISTS))
3852#define DT_NODE_HAS_STATUS(node_id, status) \
3853 DT_NODE_HAS_STATUS_INTERNAL(node_id, status)
3875#define DT_NODE_HAS_STATUS_OKAY(node_id) DT_NODE_HAS_STATUS(node_id, okay)
3896#define DT_HAS_COMPAT_STATUS_OKAY(compat) \
3897 IS_ENABLED(DT_CAT(DT_COMPAT_HAS_OKAY_, compat))
3905#define DT_NUM_INST_STATUS_OKAY(compat) \
3906 UTIL_AND(DT_HAS_COMPAT_STATUS_OKAY(compat), \
3907 UTIL_CAT(DT_N_INST, DT_DASH(compat, NUM_OKAY)))
3936#define DT_NODE_HAS_COMPAT(node_id, compat) \
3937 IS_ENABLED(DT_CAT3(node_id, _COMPAT_MATCHES_, compat))
3953#define DT_NODE_HAS_COMPAT_STATUS(node_id, compat, status) \
3954 UTIL_AND(DT_NODE_HAS_COMPAT(node_id, compat), DT_NODE_HAS_STATUS(node_id, status))
3969#define DT_NODE_HAS_PROP(node_id, prop) \
3970 IS_ENABLED(DT_CAT4(node_id, _P_, prop, _EXISTS))
3989#define DT_PHA_HAS_CELL_AT_IDX(node_id, pha, idx, cell) \
3990 IS_ENABLED(DT_CAT8(node_id, _P_, pha, \
3991 _IDX_, idx, _VAL_, cell, _EXISTS))
4002#define DT_PHA_HAS_CELL(node_id, pha, cell) \
4003 DT_PHA_HAS_CELL_AT_IDX(node_id, pha, 0, cell)
4025#define DT_FOREACH_PHA_CELL_BY_IDX(node_id, pha, idx, fn) \
4026 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _FOREACH_CELL)(fn)
4040#define DT_FOREACH_PHA_CELL_BY_IDX_SEP(node_id, pha, idx, fn, sep) \
4041 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _FOREACH_CELL_SEP)(fn, sep)
4051#define DT_PHA_NUM_CELLS_BY_IDX(node_id, pha, idx) \
4052 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _NUM_CELLS)
4065#define DT_PHA_ELEM_NAME_BY_IDX(node_id, pha, idx) \
4066 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _NAME)
4089#define DT_FOREACH_PHA_CELL_BY_NAME(node_id, pha, name, fn) \
4090 DT_CAT6(node_id, _P_, pha, _NAME_, name, _FOREACH_CELL)(fn)
4104#define DT_FOREACH_PHA_CELL_BY_NAME_SEP(node_id, pha, name, fn, sep) \
4105 DT_CAT6(node_id, _P_, pha, _NAME_, name, _FOREACH_CELL_SEP)(fn, sep)
4115#define DT_PHA_NUM_CELLS_BY_NAME(node_id, pha, name) \
4116 DT_CAT6(node_id, _P_, pha, _NAME_, name, _NUM_CELLS)
4129#define DT_PHA_ELEM_IDX_BY_NAME(node_id, pha, name) \
4130 DT_CAT6(node_id, _P_, pha, _NAME_, name, _IDX)
4174#define DT_BUS(node_id) DT_CAT(node_id, _BUS)
4204#define DT_ON_BUS(node_id, bus) IS_ENABLED(DT_CAT3(node_id, _BUS_, bus))
4222#define DT_DRV_INST(inst) DT_INST(inst, DT_DRV_COMPAT)
4231#define DT_INST_PARENT(inst) DT_PARENT(DT_DRV_INST(inst))
4240#define DT_INST_GPARENT(inst) DT_GPARENT(DT_DRV_INST(inst))
4251#define DT_INST_CHILD(inst, child) \
4252 DT_CHILD(DT_DRV_INST(inst), child)
4266#define DT_INST_CHILD_BY_UNIT_ADDR_INT(inst, addr) \
4267 DT_CHILD_BY_UNIT_ADDR_INT(DT_DRV_INST(inst), addr)
4278#define DT_INST_CHILD_NUM(inst) DT_CHILD_NUM(DT_DRV_INST(inst))
4289#define DT_INST_CHILD_NUM_STATUS_OKAY(inst) \
4290 DT_CHILD_NUM_STATUS_OKAY(DT_DRV_INST(inst))
4300#define DT_INST_NODELABEL_STRING_ARRAY(inst) DT_NODELABEL_STRING_ARRAY(DT_DRV_INST(inst))
4310#define DT_INST_NUM_NODELABELS(inst) DT_NUM_NODELABELS(DT_DRV_INST(inst))
4326#define DT_INST_FOREACH_CHILD(inst, fn) \
4327 DT_FOREACH_CHILD(DT_DRV_INST(inst), fn)
4342#define DT_INST_FOREACH_CHILD_SEP(inst, fn, sep) \
4343 DT_FOREACH_CHILD_SEP(DT_DRV_INST(inst), fn, sep)
4360#define DT_INST_FOREACH_CHILD_VARGS(inst, fn, ...) \
4361 DT_FOREACH_CHILD_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
4377#define DT_INST_FOREACH_CHILD_SEP_VARGS(inst, fn, sep, ...) \
4378 DT_FOREACH_CHILD_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
4391#define DT_INST_FOREACH_CHILD_STATUS_OKAY(inst, fn) \
4392 DT_FOREACH_CHILD_STATUS_OKAY(DT_DRV_INST(inst), fn)
4408#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(inst, fn, sep) \
4409 DT_FOREACH_CHILD_STATUS_OKAY_SEP(DT_DRV_INST(inst), fn, sep)
4424#define DT_INST_FOREACH_CHILD_STATUS_OKAY_VARGS(inst, fn, ...) \
4425 DT_FOREACH_CHILD_STATUS_OKAY_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
4442#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(inst, fn, sep, ...) \
4443 DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
4459#define DT_INST_FOREACH_REG(inst, fn) \
4460 DT_FOREACH_REG(DT_DRV_INST(inst), fn)
4478#define DT_INST_FOREACH_REG_SEP(inst, fn, sep) \
4479 DT_FOREACH_REG_SEP(DT_DRV_INST(inst), fn, sep)
4497#define DT_INST_FOREACH_REG_VARGS(inst, fn, ...) \
4498 DT_FOREACH_REG_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
4518#define DT_INST_FOREACH_REG_SEP_VARGS(inst, fn, sep, ...) \
4519 DT_FOREACH_REG_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
4528#define DT_INST_ENUM_IDX_BY_IDX(inst, prop, idx) \
4529 DT_ENUM_IDX_BY_IDX(DT_DRV_INST(inst), prop, idx)
4537#define DT_INST_ENUM_IDX(inst, prop) \
4538 DT_ENUM_IDX(DT_DRV_INST(inst), prop)
4549#define DT_INST_ENUM_IDX_BY_IDX_OR(inst, prop, idx, default_idx_value) \
4550 DT_ENUM_IDX_BY_IDX_OR(DT_DRV_INST(inst), prop, idx, default_idx_value)
4560#define DT_INST_ENUM_IDX_OR(inst, prop, default_idx_value) \
4561 DT_ENUM_IDX_OR(DT_DRV_INST(inst), prop, default_idx_value)
4571#define DT_INST_ENUM_HAS_VALUE_BY_IDX(inst, prop, idx, value) \
4572 DT_ENUM_HAS_VALUE_BY_IDX(DT_DRV_INST(inst), prop, idx, value)
4582#define DT_INST_ENUM_HAS_VALUE(inst, prop, value) \
4583 DT_ENUM_HAS_VALUE(DT_DRV_INST(inst), prop, value)
4591#define DT_INST_PROP(inst, prop) DT_PROP(DT_DRV_INST(inst), prop)
4599#define DT_INST_PROP_LEN(inst, prop) DT_PROP_LEN(DT_DRV_INST(inst), prop)
4610#define DT_INST_PROP_HAS_IDX(inst, prop, idx) \
4611 DT_PROP_HAS_IDX(DT_DRV_INST(inst), prop, idx)
4621#define DT_INST_PROP_HAS_NAME(inst, prop, name) \
4622 DT_PROP_HAS_NAME(DT_DRV_INST(inst), prop, name)
4631#define DT_INST_PROP_BY_IDX(inst, prop, idx) \
4632 DT_PROP_BY_IDX(DT_DRV_INST(inst), prop, idx)
4641#define DT_INST_PROP_OR(inst, prop, default_value) \
4642 DT_PROP_OR(DT_DRV_INST(inst), prop, default_value)
4651#define DT_INST_PROP_LEN_OR(inst, prop, default_value) \
4652 DT_PROP_LEN_OR(DT_DRV_INST(inst), prop, default_value)
4663#define DT_INST_STRING_TOKEN(inst, prop) \
4664 DT_STRING_TOKEN(DT_DRV_INST(inst), prop)
4673#define DT_INST_STRING_UPPER_TOKEN(inst, prop) \
4674 DT_STRING_UPPER_TOKEN(DT_DRV_INST(inst), prop)
4684#define DT_INST_STRING_UNQUOTED(inst, prop) \
4685 DT_STRING_UNQUOTED(DT_DRV_INST(inst), prop)
4694#define DT_INST_STRING_TOKEN_BY_IDX(inst, prop, idx) \
4695 DT_STRING_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
4705#define DT_INST_STRING_TOKEN_BY_IDX_OR(inst, prop, idx, default_value) \
4706 DT_STRING_TOKEN_BY_IDX_OR(DT_DRV_INST(inst), prop, idx, default_value)
4715#define DT_INST_STRING_UPPER_TOKEN_BY_IDX(inst, prop, idx) \
4716 DT_STRING_UPPER_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
4725#define DT_INST_STRING_UNQUOTED_BY_IDX(inst, prop, idx) \
4726 DT_STRING_UNQUOTED_BY_IDX(DT_DRV_INST(inst), prop, idx)
4736#define DT_INST_PROP_BY_PHANDLE(inst, ph, prop) \
4737 DT_INST_PROP_BY_PHANDLE_IDX(inst, ph, 0, prop)
4750#define DT_INST_PROP_BY_PHANDLE_IDX(inst, phs, idx, prop) \
4751 DT_PROP_BY_PHANDLE_IDX(DT_DRV_INST(inst), phs, idx, prop)
4761#define DT_INST_PHA_BY_IDX(inst, pha, idx, cell) \
4762 DT_PHA_BY_IDX(DT_DRV_INST(inst), pha, idx, cell)
4773#define DT_INST_PHA_BY_IDX_OR(inst, pha, idx, cell, default_value) \
4774 DT_PHA_BY_IDX_OR(DT_DRV_INST(inst), pha, idx, cell, default_value)
4784#define DT_INST_PHA(inst, pha, cell) DT_INST_PHA_BY_IDX(inst, pha, 0, cell)
4794#define DT_INST_PHA_OR(inst, pha, cell, default_value) \
4795 DT_INST_PHA_BY_IDX_OR(inst, pha, 0, cell, default_value)
4806#define DT_INST_PHA_BY_NAME(inst, pha, name, cell) \
4807 DT_PHA_BY_NAME(DT_DRV_INST(inst), pha, name, cell)
4818#define DT_INST_PHA_BY_NAME_OR(inst, pha, name, cell, default_value) \
4819 DT_PHA_BY_NAME_OR(DT_DRV_INST(inst), pha, name, cell, default_value)
4829#define DT_INST_PHANDLE_BY_NAME(inst, pha, name) \
4830 DT_PHANDLE_BY_NAME(DT_DRV_INST(inst), pha, name) \
4841#define DT_INST_PHANDLE_BY_IDX(inst, prop, idx) \
4842 DT_PHANDLE_BY_IDX(DT_DRV_INST(inst), prop, idx)
4852#define DT_INST_PHANDLE(inst, prop) DT_INST_PHANDLE_BY_IDX(inst, prop, 0)
4861#define DT_INST_REG_HAS_IDX(inst, idx) DT_REG_HAS_IDX(DT_DRV_INST(inst), idx)
4870#define DT_INST_REG_HAS_NAME(inst, name) DT_REG_HAS_NAME(DT_DRV_INST(inst), name)
4878#define DT_INST_REG_ADDR_BY_IDX_RAW(inst, idx) DT_REG_ADDR_BY_IDX_RAW(DT_DRV_INST(inst), idx)
4886#define DT_INST_REG_ADDR_BY_IDX(inst, idx) DT_REG_ADDR_BY_IDX(DT_DRV_INST(inst), idx)
4894#define DT_INST_REG_SIZE_BY_IDX(inst, idx) \
4895 DT_REG_SIZE_BY_IDX(DT_DRV_INST(inst), idx)
4903#define DT_INST_REG_ADDR_BY_NAME(inst, name) \
4904 DT_REG_ADDR_BY_NAME(DT_DRV_INST(inst), name)
4914#define DT_INST_REG_ADDR_BY_NAME_OR(inst, name, default_value) \
4915 DT_REG_ADDR_BY_NAME_OR(DT_DRV_INST(inst), name, default_value)
4929#define DT_INST_REG_ADDR_BY_NAME_U64(inst, name) \
4930 DT_REG_ADDR_BY_NAME_U64(DT_DRV_INST(inst), name)
4938#define DT_INST_REG_SIZE_BY_NAME(inst, name) \
4939 DT_REG_SIZE_BY_NAME(DT_DRV_INST(inst), name)
4949#define DT_INST_REG_SIZE_BY_NAME_OR(inst, name, default_value) \
4950 DT_REG_SIZE_BY_NAME_OR(DT_DRV_INST(inst), name, default_value)
4957#define DT_INST_REG_ADDR_RAW(inst) DT_INST_REG_ADDR_BY_IDX_RAW(inst, 0)
4964#define DT_INST_REG_ADDR(inst) DT_INST_REG_ADDR_BY_IDX(inst, 0)
4977#define DT_INST_REG_ADDR_U64(inst) DT_REG_ADDR_U64(DT_DRV_INST(inst))
4984#define DT_INST_REG_SIZE(inst) DT_INST_REG_SIZE_BY_IDX(inst, 0)
4992#define DT_INST_NUM_IRQS(inst) DT_NUM_IRQS(DT_DRV_INST(inst))
5000#define DT_INST_IRQ_LEVEL(inst) DT_IRQ_LEVEL(DT_DRV_INST(inst))
5009#define DT_INST_IRQ_BY_IDX(inst, idx, cell) \
5010 DT_IRQ_BY_IDX(DT_DRV_INST(inst), idx, cell)
5018#define DT_INST_IRQ_INTC_BY_IDX(inst, idx) \
5019 DT_IRQ_INTC_BY_IDX(DT_DRV_INST(inst), idx)
5027#define DT_INST_IRQ_INTC_BY_NAME(inst, name) \
5028 DT_IRQ_INTC_BY_NAME(DT_DRV_INST(inst), name)
5037#define DT_INST_IRQ_INTC(inst) \
5038 DT_INST_IRQ_INTC_BY_IDX(inst, 0)
5047#define DT_INST_IRQ_BY_NAME(inst, name, cell) \
5048 DT_IRQ_BY_NAME(DT_DRV_INST(inst), name, cell)
5056#define DT_INST_IRQ(inst, cell) DT_INST_IRQ_BY_IDX(inst, 0, cell)
5063#define DT_INST_IRQN(inst) DT_IRQN(DT_DRV_INST(inst))
5071#define DT_INST_IRQN_BY_IDX(inst, idx) DT_IRQN_BY_IDX(DT_DRV_INST(inst), idx)
5078#define DT_INST_BUS(inst) DT_BUS(DT_DRV_INST(inst))
5087#define DT_INST_ON_BUS(inst, bus) DT_ON_BUS(DT_DRV_INST(inst), bus)
5098#define DT_INST_STRING_TOKEN_OR(inst, name, default_value) \
5099 DT_STRING_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
5109#define DT_INST_STRING_UPPER_TOKEN_OR(inst, name, default_value) \
5110 DT_STRING_UPPER_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
5120#define DT_INST_STRING_UNQUOTED_OR(inst, name, default_value) \
5121 DT_STRING_UNQUOTED_OR(DT_DRV_INST(inst), name, default_value)
5153#define DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(compat, bus) \
5154 IS_ENABLED(DT_CAT4(DT_COMPAT_, compat, _BUS_, bus))
5188#define DT_ANY_INST_ON_BUS_STATUS_OKAY(bus) \
5189 DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(DT_DRV_COMPAT, bus)
5235#define DT_ANY_INST_HAS_PROP_STATUS_OKAY(prop) \
5236 UTIL_NOT(IS_EMPTY( \
5237 DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ANY_INST_HAS_PROP_STATUS_OKAY_, prop)))
5283#define DT_ALL_INST_HAS_PROP_STATUS_OKAY(prop) \
5284 IS_EMPTY(DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ALL_INST_HAS_PROP_STATUS_OKAY_, prop))
5330#define DT_ANY_COMPAT_HAS_PROP_STATUS_OKAY(compat, prop) \
5331 (DT_COMPAT_FOREACH_STATUS_OKAY_VARGS(compat, DT_COMPAT_NODE_HAS_PROP_AND_OR, prop) 0)
5380#define DT_ANY_INST_HAS_BOOL_STATUS_OKAY(prop) \
5381 UTIL_NOT(IS_EMPTY( \
5382 DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ANY_INST_HAS_BOOL_STATUS_OKAY_, prop)))
5429#define DT_ALL_INST_HAS_BOOL_STATUS_OKAY(prop) \
5430 IS_EMPTY(DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ALL_INST_HAS_BOOL_STATUS_OKAY_, prop))
5438#define DT_ANY_INST_REG_HAS_NAME_STATUS_OKAY(name) \
5439 UTIL_NOT(IS_EMPTY( \
5440 DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ANY_INST_REG_HAS_NAME_STATUS_OKAY_, name)))
5448#define DT_ALL_INST_REG_HAS_NAME_STATUS_OKAY(name) \
5449 IS_EMPTY(DT_INST_FOREACH_STATUS_OKAY_VARGS(DT_ALL_INST_REG_HAS_NAME_STATUS_OKAY_, name))
5516#define DT_INST_FOREACH_STATUS_OKAY(fn) \
5517 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
5518 (UTIL_CAT(DT_FOREACH_OKAY_INST_, \
5519 DT_DRV_COMPAT)(fn)), \
5534#define DT_INST_FOREACH_STATUS_OKAY_VARGS(fn, ...) \
5535 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
5536 (UTIL_CAT(DT_FOREACH_OKAY_INST_VARGS_, \
5537 DT_DRV_COMPAT)(fn, __VA_ARGS__)), \
5549#define DT_INST_FOREACH_NODELABEL(inst, fn) \
5550 DT_FOREACH_NODELABEL(DT_DRV_INST(inst), fn)
5563#define DT_INST_FOREACH_NODELABEL_VARGS(inst, fn, ...) \
5564 DT_FOREACH_NODELABEL_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
5576#define DT_INST_FOREACH_PROP_ELEM(inst, prop, fn) \
5577 DT_FOREACH_PROP_ELEM(DT_DRV_INST(inst), prop, fn)
5591#define DT_INST_FOREACH_PROP_ELEM_SEP(inst, prop, fn, sep) \
5592 DT_FOREACH_PROP_ELEM_SEP(DT_DRV_INST(inst), prop, fn, sep)
5608#define DT_INST_FOREACH_PROP_ELEM_VARGS(inst, prop, fn, ...) \
5609 DT_FOREACH_PROP_ELEM_VARGS(DT_DRV_INST(inst), prop, fn, __VA_ARGS__)
5628#define DT_INST_FOREACH_PROP_ELEM_SEP_VARGS(inst, prop, fn, sep, ...) \
5629 DT_FOREACH_PROP_ELEM_SEP_VARGS(DT_DRV_INST(inst), prop, fn, sep, \
5638#define DT_INST_NODE_HAS_PROP(inst, prop) \
5639 DT_NODE_HAS_PROP(DT_DRV_INST(inst), prop)
5647#define DT_INST_NODE_HAS_COMPAT(inst, compat) \
5648 DT_NODE_HAS_COMPAT(DT_DRV_INST(inst), compat)
5660#define DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, idx, cell) \
5661 DT_PHA_HAS_CELL_AT_IDX(DT_DRV_INST(inst), pha, idx, cell)
5672#define DT_INST_PHA_HAS_CELL(inst, pha, cell) \
5673 DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, 0, cell)
5682#define DT_INST_IRQ_HAS_IDX(inst, idx) DT_IRQ_HAS_IDX(DT_DRV_INST(inst), idx)
5692#define DT_INST_IRQ_HAS_CELL_AT_IDX(inst, idx, cell) \
5693 DT_IRQ_HAS_CELL_AT_IDX(DT_DRV_INST(inst), idx, cell)
5702#define DT_INST_IRQ_HAS_CELL(inst, cell) \
5703 DT_INST_IRQ_HAS_CELL_AT_IDX(inst, 0, cell)
5711#define DT_INST_IRQ_HAS_NAME(inst, name) \
5712 DT_IRQ_HAS_NAME(DT_DRV_INST(inst), name)
5731#define DT_ANY_INST_HAS_PROP_STATUS_OKAY_(inst, prop) \
5732 IF_ENABLED(DT_INST_NODE_HAS_PROP(inst, prop), (1,))
5746#define DT_ANY_INST_HAS_BOOL_STATUS_OKAY_(inst, prop) \
5747 IF_ENABLED(DT_INST_PROP(inst, prop), (1,))
5761#define DT_ANY_INST_REG_HAS_NAME_STATUS_OKAY_(inst, name) \
5762 IF_ENABLED(DT_INST_REG_HAS_NAME(inst, name), (1,))
5775#define DT_ALL_INST_HAS_PROP_STATUS_OKAY_(inst, prop) \
5776 IF_DISABLED(DT_INST_NODE_HAS_PROP(inst, prop), (1,))
5790#define DT_ALL_INST_HAS_BOOL_STATUS_OKAY_(inst, prop) \
5791 IF_DISABLED(DT_INST_PROP(inst, prop), (1,))
5805#define DT_ALL_INST_REG_HAS_NAME_STATUS_OKAY_(inst, name) \
5806 IF_DISABLED(DT_INST_REG_HAS_NAME(inst, name), (1,))
5808#define DT_PATH_INTERNAL(...) \
5809 UTIL_CAT(DT_ROOT, MACRO_MAP_CAT(DT_S_PREFIX, __VA_ARGS__))
5815#define DT_S_PREFIX(name) _S_##name
5831#define DT_CAT(a1, a2) a1 ## a2
5833#define DT_CAT3(a1, a2, a3) a1 ## a2 ## a3
5835#define DT_CAT4(a1, a2, a3, a4) a1 ## a2 ## a3 ## a4
5837#define DT_CAT5(a1, a2, a3, a4, a5) a1 ## a2 ## a3 ## a4 ## a5
5839#define DT_CAT6(a1, a2, a3, a4, a5, a6) a1 ## a2 ## a3 ## a4 ## a5 ## a6
5841#define DT_CAT7(a1, a2, a3, a4, a5, a6, a7) \
5842 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7
5844#define DT_CAT8(a1, a2, a3, a4, a5, a6, a7, a8) \
5845 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7 ## a8
5852#define DT_DASH(...) MACRO_MAP_CAT(DT_DASH_PREFIX, __VA_ARGS__)
5854#define DT_DASH_PREFIX(name) _##name
5856#define DT_NODE_HAS_STATUS_INTERNAL(node_id, status) \
5857 IS_ENABLED(DT_CAT3(node_id, _STATUS_, status))
5862#define DT_COMPAT_NODE_HAS_PROP_AND_OR(inst, compat, prop) \
5863 DT_NODE_HAS_PROP(DT_INST(inst, compat), prop) ||
5869#if defined(_LINKER) || defined(_ASMLANGUAGE)
5870#define DT_U32_C(_v) (_v)
5872#define DT_U32_C(_v) UINT32_C(_v)
5879#if defined(_LINKER) || defined(_ASMLANGUAGE)
5880#define DT_U64_C(_v) (_v)
5882#define DT_U64_C(_v) UINT64_C(_v)
5888#define DT_NODELABEL_STRING_ARRAY_ENTRY_INTERNAL(nodelabel) DT_STRINGIFY_INTERNAL(nodelabel),
5889#define DT_STRINGIFY_INTERNAL(arg) DT_STRINGIFY_INTERNAL_HELPER(arg)
5890#define DT_STRINGIFY_INTERNAL_HELPER(arg) #arg
Clocks Devicetree macro public API header file.
CAN devicetree macro public API header file.
Display Devicetree macro public API header file.
DMA Devicetree macro public API header file.
GPIO Devicetree macro public API header file.
HW spinlock Devicetree macro public API header file.
MBOX Devicetree macro public API header file.
Flash Devicetree macro public API header file, for partitions.
Devicetree pin control helpers.
Reset Controller Devicetree macro public API header file.
SPI Devicetree macro public API header file.
Wakeup Controller Devicetree macro public API header file.
Flash Devicetree macro public API header file.
IO channels devicetree macro public API header file.
Public interface for multi-level interrupts.
Map devicetree macro public API header file.
Flash Devicetree macro public API header file, for memory-mapped partitions.
Devicetree node dependency ordinals.
Port / Endpoint Devicetree macro public API header file.
PWMs Devicetree macro public API header file.