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)
236#define DT_NODELABEL_C_TOKEN_BY_IDX(node_id, idx) \
237 DT_CAT5(DT_N_NODELABEL_, node_id, _IDX_, idx, _C_TOKEN)
247#define DT_NODELABEL_C_TOKEN(node_id) \
248 DT_NODELABEL_C_TOKEN_BY_IDX(node_id, 0)
288#define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)
295#define DT_HAS_ALIAS(alias_name) DT_NODE_EXISTS(DT_ALIAS(alias_name))
305#define DT_NODE_HASH(node_id) DT_CAT(node_id, _HASH)
401#define DT_INST(inst, compat) UTIL_CAT(DT_N_INST, DT_DASH(inst, compat))
426#define DT_PARENT(node_id) DT_CAT(node_id, _PARENT)
451#define DT_GPARENT(node_id) DT_PARENT(DT_PARENT(node_id))
488#define DT_CHILD(node_id, child) UTIL_CAT(node_id, DT_S_PREFIX(child))
522#define DT_CHILD_BY_UNIT_ADDR_INT(node_id, addr) \
523 DT_CAT3(node_id, _CHILD_UNIT_ADDR_INT_, addr)
566#define DT_COMPAT_GET_ANY_STATUS_OKAY(compat) \
567 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
568 (DT_INST(0, compat)), \
598#define DT_NODE_PATH(node_id) DT_CAT(node_id, _PATH)
624#define DT_NODE_FULL_NAME(node_id) DT_CAT(node_id, _FULL_NAME)
652#define DT_NODE_FULL_NAME_UNQUOTED(node_id) DT_CAT(node_id, _FULL_NAME_UNQUOTED)
680#define DT_NODE_FULL_NAME_TOKEN(node_id) DT_CAT(node_id, _FULL_NAME_TOKEN)
710#define DT_NODE_FULL_NAME_UPPER_TOKEN(node_id) DT_CAT(node_id, _FULL_NAME_UPPER_TOKEN)
738#define DT_NODE_CHILD_IDX(node_id) DT_CAT(node_id, _CHILD_IDX)
746#define DT_CHILD_NUM(node_id) DT_CAT(node_id, _CHILD_NUM)
755#define DT_CHILD_NUM_STATUS_OKAY(node_id) \
756 DT_CAT(node_id, _CHILD_NUM_STATUS_OKAY)
767#define DT_DESCENDANT_NUM_ON_BUS(node_id, bus) \
768 DT_CAT3(node_id, _DESCENDANT_NUM_ON_BUS_, bus)
780#define DT_DESCENDANT_NUM_ON_BUS_STATUS_OKAY(node_id, bus) \
781 DT_CAT4(node_id, _DESCENDANT_NUM_ON_BUS_, bus, _STATUS_OKAY)
803#define DT_SAME_NODE(node_id1, node_id2) \
804 IS_EQ(DT_DEP_ORD(node_id1), DT_DEP_ORD(node_id2))
830#define DT_NODELABEL_STRING_ARRAY(node_id) \
831 { DT_FOREACH_NODELABEL(node_id, DT_NODELABEL_STRING_ARRAY_ENTRY_INTERNAL) }
873#define DT_PROP(node_id, prop) DT_CAT3(node_id, _P_, prop)
907#define DT_PROP_LEN(node_id, prop) DT_CAT4(node_id, _P_, prop, _LEN)
923#define DT_PROP_LEN_OR(node_id, prop, default_value) \
924 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
925 (DT_PROP_LEN(node_id, prop)), (default_value))
947#define DT_PROP_HAS_IDX(node_id, prop, idx) \
948 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _IDX_, idx, _EXISTS))
982#define DT_PROP_HAS_NAME(node_id, prop, name) \
983 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _NAME_, name, _EXISTS))
1019#define DT_PROP_BY_IDX(node_id, prop, idx) \
1020 DT_CAT5(node_id, _P_, prop, _IDX_, idx)
1030#define DT_PROP_LAST(node_id, prop) \
1031 DT_PROP_BY_IDX(node_id, prop, UTIL_DEC(DT_PROP_LEN(node_id, prop)))
1046#define DT_PROP_OR(node_id, prop, default_value) \
1047 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1048 (DT_PROP(node_id, prop)), (default_value))
1105#define DT_ENUM_IDX_BY_IDX(node_id, prop, idx) \
1106 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _ENUM_IDX)
1114#define DT_ENUM_IDX(node_id, prop) DT_ENUM_IDX_BY_IDX(node_id, prop, 0)
1131#define DT_ENUM_IDX_BY_IDX_OR(node_id, prop, idx, default_idx_value) \
1132 COND_CODE_1(DT_PROP_HAS_IDX(node_id, prop, idx), \
1133 (DT_ENUM_IDX_BY_IDX(node_id, prop, idx)), (default_idx_value))
1143#define DT_ENUM_IDX_OR(node_id, prop, default_idx_value) \
1144 DT_ENUM_IDX_BY_IDX_OR(node_id, prop, 0, default_idx_value)
1155#define DT_ENUM_HAS_VALUE_BY_IDX(node_id, prop, idx, value) \
1156 IS_ENABLED(DT_CAT8(node_id, _P_, prop, _IDX_, idx, _ENUM_VAL_, value, _EXISTS))
1165#define DT_ENUM_HAS_VALUE(node_id, prop, value) \
1166 IS_ENABLED(DT_CAT6(node_id, _P_, prop, _ENUM_VAL_, value, _EXISTS))
1227#define DT_STRING_TOKEN(node_id, prop) \
1228 DT_CAT4(node_id, _P_, prop, _STRING_TOKEN)
1243#define DT_STRING_TOKEN_OR(node_id, prop, default_value) \
1244 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1245 (DT_STRING_TOKEN(node_id, prop)), (default_value))
1304#define DT_STRING_UPPER_TOKEN(node_id, prop) \
1305 DT_CAT4(node_id, _P_, prop, _STRING_UPPER_TOKEN)
1321#define DT_STRING_UPPER_TOKEN_OR(node_id, prop, default_value) \
1322 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1323 (DT_STRING_UPPER_TOKEN(node_id, prop)), (default_value))
1365#define DT_STRING_UNQUOTED(node_id, prop) \
1366 DT_CAT4(node_id, _P_, prop, _STRING_UNQUOTED)
1382#define DT_STRING_UNQUOTED_OR(node_id, prop, default_value) \
1383 COND_CODE_1(DT_NODE_HAS_PROP(node_id, prop), \
1384 (DT_STRING_UNQUOTED(node_id, prop)), (default_value))
1433#define DT_STRING_TOKEN_BY_IDX(node_id, prop, idx) \
1434 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_TOKEN)
1444#define DT_STRING_TOKEN_BY_IDX_OR(node_id, prop, idx, default_value) \
1445 COND_CODE_1(DT_PROP_HAS_IDX(node_id, prop, idx), \
1446 (DT_STRING_TOKEN_BY_IDX(node_id, prop, idx)), (default_value))
1495#define DT_STRING_UPPER_TOKEN_BY_IDX(node_id, prop, idx) \
1496 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UPPER_TOKEN)
1538#define DT_STRING_UNQUOTED_BY_IDX(node_id, prop, idx) \
1539 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _STRING_UNQUOTED)
1594#define DT_PROP_BY_PHANDLE_IDX(node_id, phs, idx, prop) \
1595 DT_PROP(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop)
1616#define DT_PROP_BY_PHANDLE_IDX_OR(node_id, phs, idx, prop, default_value) \
1617 DT_PROP_OR(DT_PHANDLE_BY_IDX(node_id, phs, idx), prop, default_value)
1630#define DT_PROP_BY_PHANDLE(node_id, ph, prop) \
1631 DT_PROP_BY_PHANDLE_IDX(node_id, ph, 0, prop)
1687#define DT_PHA_BY_IDX(node_id, pha, idx, cell) \
1688 DT_CAT7(node_id, _P_, pha, _IDX_, idx, _VAL_, cell)
1713#define DT_PHA_BY_IDX_OR(node_id, pha, idx, cell, default_value) \
1714 DT_PROP_OR(node_id, DT_CAT5(pha, _IDX_, idx, _VAL_, cell), default_value)
1723#define DT_PHA(node_id, pha, cell) DT_PHA_BY_IDX(node_id, pha, 0, cell)
1739#define DT_PHA_OR(node_id, pha, cell, default_value) \
1740 DT_PHA_BY_IDX_OR(node_id, pha, 0, cell, default_value)
1782#define DT_PHA_BY_NAME(node_id, pha, name, cell) \
1783 DT_CAT7(node_id, _P_, pha, _NAME_, name, _VAL_, cell)
1806#define DT_PHA_BY_NAME_OR(node_id, pha, name, cell, default_value) \
1807 DT_PROP_OR(node_id, DT_CAT5(pha, _NAME_, name, _VAL_, cell), default_value)
1856#define DT_PHANDLE_BY_NAME(node_id, pha, name) \
1857 DT_CAT6(node_id, _P_, pha, _NAME_, name, _PH)
1908#define DT_PHANDLE_BY_IDX(node_id, prop, idx) \
1909 DT_CAT6(node_id, _P_, prop, _IDX_, idx, _PH)
1922#define DT_PHANDLE(node_id, prop) DT_PHANDLE_BY_IDX(node_id, prop, 0)
1970#define DT_NUM_RANGES(node_id) DT_CAT(node_id, _RANGES_NUM)
2024#define DT_RANGES_HAS_IDX(node_id, idx) \
2025 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _EXISTS))
2079#define DT_RANGES_HAS_CHILD_BUS_FLAGS_AT_IDX(node_id, idx) \
2080 IS_ENABLED(DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS_EXISTS))
2119#define DT_RANGES_CHILD_BUS_FLAGS_BY_IDX(node_id, idx) \
2120 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_FLAGS)
2168#define DT_RANGES_CHILD_BUS_ADDRESS_BY_IDX(node_id, idx) \
2169 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_CHILD_BUS_ADDRESS)
2217#define DT_RANGES_PARENT_BUS_ADDRESS_BY_IDX(node_id, idx) \
2218 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_PARENT_BUS_ADDRESS)
2266#define DT_RANGES_LENGTH_BY_IDX(node_id, idx) \
2267 DT_CAT4(node_id, _RANGES_IDX_, idx, _VAL_LENGTH)
2308#define DT_FOREACH_RANGE(node_id, fn) \
2309 DT_CAT(node_id, _FOREACH_RANGE)(fn)
2363#define DT_DMA_RANGES_HAS_IDX(node_id, idx) \
2364 IS_ENABLED(DT_CAT4(node_id, _DMA_RANGES_IDX_, idx, _EXISTS))
2413#define DT_DMA_RANGES_CHILD_BUS_ADDRESS_BY_IDX(node_id, idx) \
2414 DT_CAT4(node_id, _DMA_RANGES_IDX_, idx, _VAL_CHILD_BUS_ADDRESS)
2463#define DT_DMA_RANGES_PARENT_BUS_ADDRESS_BY_IDX(node_id, idx) \
2464 DT_CAT4(node_id, _DMA_RANGES_IDX_, idx, _VAL_PARENT_BUS_ADDRESS)
2513#define DT_DMA_RANGES_LENGTH_BY_IDX(node_id, idx) \
2514 DT_CAT4(node_id, _DMA_RANGES_IDX_, idx, _VAL_LENGTH)
2557#define DT_NUM_DMA_RANGES(node_id) DT_CAT(node_id, _NUM_DMA_RANGES)
2605#define DT_FOREACH_DMA_RANGE(node_id, fn) \
2606 DT_CAT(node_id, _FOREACH_DMA_RANGE)(fn)
2653#define DT_NODE_VENDOR_BY_IDX(node_id, idx) \
2654 DT_CAT3(node_id, _COMPAT_VENDOR_IDX_, idx)
2668#define DT_NODE_VENDOR_HAS_IDX(node_id, idx) \
2669 IS_ENABLED(DT_CAT4(node_id, _COMPAT_VENDOR_IDX_, idx, _EXISTS))
2685#define DT_NODE_VENDOR_BY_IDX_OR(node_id, idx, default_value) \
2686 COND_CODE_1(DT_NODE_VENDOR_HAS_IDX(node_id, idx), \
2687 (DT_NODE_VENDOR_BY_IDX(node_id, idx)), (default_value))
2697#define DT_NODE_VENDOR_OR(node_id, default_value) \
2698 DT_NODE_VENDOR_BY_IDX_OR(node_id, 0, default_value)
2729#define DT_NODE_MODEL_BY_IDX(node_id, idx) \
2730 DT_CAT3(node_id, _COMPAT_MODEL_IDX_, idx)
2744#define DT_NODE_MODEL_HAS_IDX(node_id, idx) \
2745 IS_ENABLED(DT_CAT4(node_id, _COMPAT_MODEL_IDX_, idx, _EXISTS))
2761#define DT_NODE_MODEL_BY_IDX_OR(node_id, idx, default_value) \
2762 COND_CODE_1(DT_NODE_MODEL_HAS_IDX(node_id, idx), \
2763 (DT_NODE_MODEL_BY_IDX(node_id, idx)), (default_value))
2773#define DT_NODE_MODEL_OR(node_id, default_value) \
2774 DT_NODE_MODEL_BY_IDX_OR(node_id, 0, default_value)
2793#define DT_NUM_REGS(node_id) DT_CAT(node_id, _REG_NUM)
2806#define DT_REG_HAS_IDX(node_id, idx) \
2807 IS_ENABLED(DT_CAT4(node_id, _REG_IDX_, idx, _EXISTS))
2820#define DT_REG_HAS_NAME(node_id, name) \
2821 IS_ENABLED(DT_CAT4(node_id, _REG_NAME_, name, _EXISTS))
2834#define DT_REG_ADDR_BY_IDX_RAW(node_id, idx) \
2835 DT_CAT4(node_id, _REG_IDX_, idx, _VAL_ADDRESS)
2848#define DT_REG_ADDR_RAW(node_id) \
2849 DT_REG_ADDR_BY_IDX_RAW(node_id, 0)
2857#define DT_REG_ADDR_BY_IDX(node_id, idx) \
2858 DT_U32_C(DT_REG_ADDR_BY_IDX_RAW(node_id, idx))
2871#define DT_REG_SIZE_BY_IDX(node_id, idx) \
2872 DT_U32_C(DT_CAT4(node_id, _REG_IDX_, idx, _VAL_SIZE))
2881#define DT_REG_ADDR(node_id) DT_REG_ADDR_BY_IDX(node_id, 0)
2893#define DT_REG_ADDR_U64(node_id) DT_U64_C(DT_REG_ADDR_BY_IDX_RAW(node_id, 0))
2902#define DT_REG_SIZE(node_id) DT_REG_SIZE_BY_IDX(node_id, 0)
2910#define DT_REG_ADDR_BY_NAME(node_id, name) \
2911 DT_U32_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS))
2921#define DT_REG_ADDR_BY_NAME_OR(node_id, name, default_value) \
2922 COND_CODE_1(DT_REG_HAS_NAME(node_id, name), \
2923 (DT_REG_ADDR_BY_NAME(node_id, name)), (default_value))
2937#define DT_REG_ADDR_BY_NAME_U64(node_id, name) \
2938 DT_U64_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_ADDRESS))
2946#define DT_REG_SIZE_BY_NAME(node_id, name) \
2947 DT_U32_C(DT_CAT4(node_id, _REG_NAME_, name, _VAL_SIZE))
2957#define DT_REG_SIZE_BY_NAME_OR(node_id, name, default_value) \
2958 COND_CODE_1(DT_REG_HAS_NAME(node_id, name), \
2959 (DT_REG_SIZE_BY_NAME(node_id, name)), (default_value))
3009#define DT_FOREACH_REG(node_id, fn) \
3010 DT_CAT(node_id, _FOREACH_REG)(fn)
3060#define DT_FOREACH_REG_SEP(node_id, fn, sep) \
3061 DT_CAT(node_id, _FOREACH_REG_SEP)(fn, sep)
3077#define DT_FOREACH_REG_VARGS(node_id, fn, ...) \
3078 DT_CAT(node_id, _FOREACH_REG_VARGS)(fn, __VA_ARGS__)
3096#define DT_FOREACH_REG_SEP_VARGS(node_id, fn, sep, ...) \
3097 DT_CAT(node_id, _FOREACH_REG_SEP_VARGS)(fn, sep, __VA_ARGS__)
3117#define DT_NUM_IRQS(node_id) DT_CAT(node_id, _IRQ_NUM)
3143#define DT_NUM_NODELABELS(node_id) DT_CAT(node_id, _NODELABEL_NUM)
3151#define DT_IRQ_LEVEL(node_id) DT_CAT(node_id, _IRQ_LEVEL)
3163#define DT_IRQ_HAS_IDX(node_id, idx) \
3164 IS_ENABLED(DT_CAT4(node_id, _IRQ_IDX_, idx, _EXISTS))
3176#define DT_IRQ_HAS_CELL_AT_IDX(node_id, idx, cell) \
3177 IS_ENABLED(DT_CAT6(node_id, _IRQ_IDX_, idx, _VAL_, cell, _EXISTS))
3186#define DT_IRQ_HAS_CELL(node_id, cell) DT_IRQ_HAS_CELL_AT_IDX(node_id, 0, cell)
3197#define DT_IRQ_HAS_NAME(node_id, name) \
3198 IS_ENABLED(DT_CAT4(node_id, _IRQ_NAME_, name, _VAL_irq_EXISTS))
3235#define DT_IRQ_BY_IDX(node_id, idx, cell) \
3236 DT_CAT5(node_id, _IRQ_IDX_, idx, _VAL_, cell)
3253#define DT_IRQ_BY_NAME(node_id, name, cell) \
3254 DT_CAT5(node_id, _IRQ_NAME_, name, _VAL_, cell)
3263#define DT_IRQ(node_id, cell) DT_IRQ_BY_IDX(node_id, 0, cell)
3307#define DT_IRQ_INTC_BY_IDX(node_id, idx) \
3308 DT_CAT4(node_id, _IRQ_IDX_, idx, _CONTROLLER)
3354#define DT_IRQ_INTC_BY_NAME(node_id, name) \
3355 DT_CAT4(node_id, _IRQ_NAME_, name, _CONTROLLER)
3396#define DT_IRQ_INTC(node_id) \
3397 DT_IRQ_INTC_BY_IDX(node_id, 0)
3404#define DT_IRQN_L1_INTERNAL(node_id, idx) DT_IRQ_BY_IDX(node_id, idx, irq)
3406#define DT_IRQN_L2_INTERNAL(node_id, idx) \
3407 (IRQ_TO_L2(DT_IRQN_L1_INTERNAL(node_id, idx)) | \
3408 DT_IRQ(DT_IRQ_INTC_BY_IDX(node_id, idx), irq))
3410#define DT_IRQN_L3_INTERNAL(node_id, idx) \
3411 (IRQ_TO_L3(DT_IRQN_L1_INTERNAL(node_id, idx)) | \
3412 IRQ_TO_L2(DT_IRQ(DT_IRQ_INTC_BY_IDX(node_id, idx), irq)) | \
3413 DT_IRQ(DT_IRQ_INTC(DT_IRQ_INTC_BY_IDX(node_id, idx)), irq))
3415#define DT_IRQN_LVL_INTERNAL(node_id, idx, level) DT_CAT3(DT_IRQN_L, level, _INTERNAL)(node_id, idx)
3421#define DT_MULTI_LEVEL_IRQN_INTERNAL(node_id, idx) \
3422 DT_IRQN_LVL_INTERNAL(node_id, idx, DT_IRQ_LEVEL(node_id))
3426#define DT_IRQN_NAME_L1_INTERNAL(node_id, name) DT_IRQ_BY_NAME(node_id, name, irq)
3428#define DT_IRQN_NAME_L2_INTERNAL(node_id, name) \
3429 (IRQ_TO_L2(DT_IRQN_NAME_L1_INTERNAL(node_id, name)) | \
3430 DT_IRQ(DT_IRQ_INTC_BY_NAME(node_id, name), irq))
3432#define DT_IRQN_NAME_L3_INTERNAL(node_id, name) \
3433 (IRQ_TO_L3(DT_IRQN_NAME_L1_INTERNAL(node_id, name)) | \
3434 IRQ_TO_L2(DT_IRQ(DT_IRQ_INTC_BY_NAME(node_id, name), irq)) | \
3435 DT_IRQ(DT_IRQ_INTC(DT_IRQ_INTC_BY_NAME(node_id, name)), irq))
3437#define DT_IRQN_NAME_LVL_INTERNAL(node_id, name, level) \
3438 DT_CAT3(DT_IRQN_NAME_L, level, _INTERNAL)(node_id, name)
3444#define DT_MULTI_LEVEL_IRQN_NAME_INTERNAL(node_id, name) \
3445 DT_IRQN_NAME_LVL_INTERNAL(node_id, name, DT_IRQ_LEVEL(node_id))
3459#define DT_IRQN_BY_IDX(node_id, idx) \
3460 COND_CODE_1(IS_ENABLED(CONFIG_MULTI_LEVEL_INTERRUPTS), \
3461 (DT_MULTI_LEVEL_IRQN_INTERNAL(node_id, idx)), \
3462 (DT_IRQ_BY_IDX(node_id, idx, irq)))
3472#define DT_IRQN_BY_NAME(node_id, name) \
3473 COND_CODE_1(IS_ENABLED(CONFIG_MULTI_LEVEL_INTERRUPTS), \
3474 (DT_MULTI_LEVEL_IRQN_NAME_INTERNAL(node_id, name)), \
3475 (DT_IRQ_BY_NAME(node_id, name, irq)))
3487#define DT_IRQN(node_id) DT_IRQN_BY_IDX(node_id, 0)
3507#define DT_CHOSEN(prop) DT_CAT(DT_CHOSEN_, prop)
3515#define DT_HAS_CHOSEN(prop) IS_ENABLED(DT_CAT3(DT_CHOSEN_, prop, _EXISTS))
3566#define DT_FOREACH_NODE(fn) DT_FOREACH_HELPER(fn)
3580#define DT_FOREACH_NODE_VARGS(fn, ...) DT_FOREACH_VARGS_HELPER(fn, __VA_ARGS__)
3593#define DT_FOREACH_STATUS_OKAY_NODE(fn) DT_FOREACH_OKAY_HELPER(fn)
3609#define DT_FOREACH_STATUS_OKAY_NODE_VARGS(fn, ...) DT_FOREACH_OKAY_VARGS_HELPER(fn, __VA_ARGS__)
3657#define DT_FOREACH_ANCESTOR(node_id, fn) \
3658 DT_CAT(node_id, _FOREACH_ANCESTOR)(fn)
3703#define DT_FOREACH_CHILD(node_id, fn) \
3704 DT_CAT(node_id, _FOREACH_CHILD)(fn)
3746#define DT_FOREACH_CHILD_SEP(node_id, fn, sep) \
3747 DT_CAT(node_id, _FOREACH_CHILD_SEP)(fn, sep)
3764#define DT_FOREACH_CHILD_VARGS(node_id, fn, ...) \
3765 DT_CAT(node_id, _FOREACH_CHILD_VARGS)(fn, __VA_ARGS__)
3782#define DT_FOREACH_CHILD_SEP_VARGS(node_id, fn, sep, ...) \
3783 DT_CAT(node_id, _FOREACH_CHILD_SEP_VARGS)(fn, sep, __VA_ARGS__)
3800#define DT_FOREACH_CHILD_STATUS_OKAY(node_id, fn) \
3801 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY)(fn)
3819#define DT_FOREACH_CHILD_STATUS_OKAY_SEP(node_id, fn, sep) \
3820 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP)(fn, sep)
3841#define DT_FOREACH_CHILD_STATUS_OKAY_VARGS(node_id, fn, ...) \
3842 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_VARGS)(fn, __VA_ARGS__)
3862#define DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(node_id, fn, sep, ...) \
3863 DT_CAT(node_id, _FOREACH_CHILD_STATUS_OKAY_SEP_VARGS)(fn, sep, __VA_ARGS__)
3915#define DT_FOREACH_PROP_ELEM(node_id, prop, fn) \
3916 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM)(fn)
3960#define DT_FOREACH_PROP_ELEM_SEP(node_id, prop, fn, sep) \
3961 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP)(fn, sep)
3983#define DT_FOREACH_PROP_ELEM_VARGS(node_id, prop, fn, ...) \
3984 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_VARGS)(fn, __VA_ARGS__)
4002#define DT_FOREACH_PROP_ELEM_SEP_VARGS(node_id, prop, fn, sep, ...) \
4003 DT_CAT4(node_id, _P_, prop, _FOREACH_PROP_ELEM_SEP_VARGS)( \
4004 fn, sep, __VA_ARGS__)
4059#define DT_FOREACH_STATUS_OKAY(compat, fn) \
4060 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
4061 (UTIL_CAT(DT_FOREACH_OKAY_, compat)(fn)), \
4108#define DT_FOREACH_STATUS_OKAY_VARGS(compat, fn, ...) \
4109 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
4110 (DT_CAT(DT_FOREACH_OKAY_VARGS_, \
4111 compat)(fn, __VA_ARGS__)), \
4126#define DT_COMPAT_FOREACH_STATUS_OKAY_VARGS(compat, fn, ...) \
4127 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(compat), \
4128 (UTIL_CAT(DT_FOREACH_OKAY_INST_VARGS_, \
4129 compat)(fn, compat, __VA_ARGS__)), \
4171#define DT_FOREACH_NODELABEL(node_id, fn) DT_CAT(node_id, _FOREACH_NODELABEL)(fn)
4210#define DT_FOREACH_NODELABEL_VARGS(node_id, fn, ...) \
4211 DT_CAT(node_id, _FOREACH_NODELABEL_VARGS)(fn, __VA_ARGS__)
4237#define DT_NODE_EXISTS(node_id) IS_ENABLED(DT_CAT(node_id, _EXISTS))
4260#define DT_NODE_HAS_STATUS(node_id, status) \
4261 DT_NODE_HAS_STATUS_INTERNAL(node_id, status)
4283#define DT_NODE_HAS_STATUS_OKAY(node_id) DT_NODE_HAS_STATUS(node_id, okay)
4304#define DT_HAS_COMPAT_STATUS_OKAY(compat) \
4305 IS_ENABLED(DT_CAT(DT_COMPAT_HAS_OKAY_, compat))
4313#define DT_NUM_INST_STATUS_OKAY(compat) \
4314 UTIL_AND(DT_HAS_COMPAT_STATUS_OKAY(compat), \
4315 UTIL_CAT(DT_N_INST, DT_DASH(compat, NUM_OKAY)))
4344#define DT_NODE_HAS_COMPAT(node_id, compat) \
4345 IS_ENABLED(DT_CAT3(node_id, _COMPAT_MATCHES_, compat))
4364#define DT_BINDING_COMPAT_TOKEN(node_id) DT_CAT(node_id, _BINDING_COMPAT_TOKEN)
4380#define DT_BINDING_COMPAT_UPPER_TOKEN(node_id) DT_CAT(node_id, _BINDING_COMPAT_UPPER_TOKEN)
4398#define DT_BINDING_COMPAT_UNQUOTED(node_id) DT_CAT(node_id, _BINDING_COMPAT_UNQUOTED)
4414#define DT_NODE_HAS_COMPAT_STATUS(node_id, compat, status) \
4415 UTIL_AND(DT_NODE_HAS_COMPAT(node_id, compat), DT_NODE_HAS_STATUS(node_id, status))
4430#define DT_NODE_HAS_PROP(node_id, prop) \
4431 IS_ENABLED(DT_CAT4(node_id, _P_, prop, _EXISTS))
4450#define DT_PHA_HAS_CELL_AT_IDX(node_id, pha, idx, cell) \
4451 IS_ENABLED(DT_CAT8(node_id, _P_, pha, \
4452 _IDX_, idx, _VAL_, cell, _EXISTS))
4463#define DT_PHA_HAS_CELL(node_id, pha, cell) \
4464 DT_PHA_HAS_CELL_AT_IDX(node_id, pha, 0, cell)
4486#define DT_FOREACH_PHA_CELL_BY_IDX(node_id, pha, idx, fn) \
4487 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _FOREACH_CELL)(fn)
4501#define DT_FOREACH_PHA_CELL_BY_IDX_SEP(node_id, pha, idx, fn, sep) \
4502 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _FOREACH_CELL_SEP)(fn, sep)
4512#define DT_PHA_NUM_CELLS_BY_IDX(node_id, pha, idx) \
4513 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _NUM_CELLS)
4526#define DT_PHA_ELEM_NAME_BY_IDX(node_id, pha, idx) \
4527 DT_CAT6(node_id, _P_, pha, _IDX_, idx, _NAME)
4550#define DT_FOREACH_PHA_CELL_BY_NAME(node_id, pha, name, fn) \
4551 DT_CAT6(node_id, _P_, pha, _NAME_, name, _FOREACH_CELL)(fn)
4565#define DT_FOREACH_PHA_CELL_BY_NAME_SEP(node_id, pha, name, fn, sep) \
4566 DT_CAT6(node_id, _P_, pha, _NAME_, name, _FOREACH_CELL_SEP)(fn, sep)
4576#define DT_PHA_NUM_CELLS_BY_NAME(node_id, pha, name) \
4577 DT_CAT6(node_id, _P_, pha, _NAME_, name, _NUM_CELLS)
4590#define DT_PHA_ELEM_IDX_BY_NAME(node_id, pha, name) \
4591 DT_CAT6(node_id, _P_, pha, _NAME_, name, _IDX)
4635#define DT_BUS(node_id) DT_CAT(node_id, _BUS)
4665#define DT_ON_BUS(node_id, bus) IS_ENABLED(DT_CAT3(node_id, _BUS_, bus))
4683#define DT_DRV_INST(inst) DT_INST(inst, DT_DRV_COMPAT)
4692#define DT_INST_PARENT(inst) DT_PARENT(DT_DRV_INST(inst))
4701#define DT_INST_GPARENT(inst) DT_GPARENT(DT_DRV_INST(inst))
4712#define DT_INST_CHILD(inst, child) \
4713 DT_CHILD(DT_DRV_INST(inst), child)
4727#define DT_INST_CHILD_BY_UNIT_ADDR_INT(inst, addr) \
4728 DT_CHILD_BY_UNIT_ADDR_INT(DT_DRV_INST(inst), addr)
4739#define DT_INST_CHILD_NUM(inst) DT_CHILD_NUM(DT_DRV_INST(inst))
4751#define DT_INST_CHILD_NUM_STATUS_OKAY(inst) \
4752 DT_CHILD_NUM_STATUS_OKAY(DT_DRV_INST(inst))
4766#define DT_INST_DESCENDANT_NUM_ON_BUS(inst, bus) \
4767 DT_DESCENDANT_NUM_ON_BUS(DT_DRV_INST(inst), bus)
4782#define DT_INST_DESCENDANT_NUM_ON_BUS_STATUS_OKAY(inst, bus) \
4783 DT_DESCENDANT_NUM_ON_BUS_STATUS_OKAY(DT_DRV_INST(inst), bus)
4793#define DT_INST_NODELABEL_STRING_ARRAY(inst) DT_NODELABEL_STRING_ARRAY(DT_DRV_INST(inst))
4803#define DT_INST_NUM_NODELABELS(inst) DT_NUM_NODELABELS(DT_DRV_INST(inst))
4819#define DT_INST_FOREACH_CHILD(inst, fn) \
4820 DT_FOREACH_CHILD(DT_DRV_INST(inst), fn)
4835#define DT_INST_FOREACH_CHILD_SEP(inst, fn, sep) \
4836 DT_FOREACH_CHILD_SEP(DT_DRV_INST(inst), fn, sep)
4853#define DT_INST_FOREACH_CHILD_VARGS(inst, fn, ...) \
4854 DT_FOREACH_CHILD_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
4870#define DT_INST_FOREACH_CHILD_SEP_VARGS(inst, fn, sep, ...) \
4871 DT_FOREACH_CHILD_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
4884#define DT_INST_FOREACH_CHILD_STATUS_OKAY(inst, fn) \
4885 DT_FOREACH_CHILD_STATUS_OKAY(DT_DRV_INST(inst), fn)
4901#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(inst, fn, sep) \
4902 DT_FOREACH_CHILD_STATUS_OKAY_SEP(DT_DRV_INST(inst), fn, sep)
4917#define DT_INST_FOREACH_CHILD_STATUS_OKAY_VARGS(inst, fn, ...) \
4918 DT_FOREACH_CHILD_STATUS_OKAY_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
4935#define DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(inst, fn, sep, ...) \
4936 DT_FOREACH_CHILD_STATUS_OKAY_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
4952#define DT_INST_FOREACH_REG(inst, fn) \
4953 DT_FOREACH_REG(DT_DRV_INST(inst), fn)
4971#define DT_INST_FOREACH_REG_SEP(inst, fn, sep) \
4972 DT_FOREACH_REG_SEP(DT_DRV_INST(inst), fn, sep)
4990#define DT_INST_FOREACH_REG_VARGS(inst, fn, ...) \
4991 DT_FOREACH_REG_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
5011#define DT_INST_FOREACH_REG_SEP_VARGS(inst, fn, sep, ...) \
5012 DT_FOREACH_REG_SEP_VARGS(DT_DRV_INST(inst), fn, sep, __VA_ARGS__)
5021#define DT_INST_ENUM_IDX_BY_IDX(inst, prop, idx) \
5022 DT_ENUM_IDX_BY_IDX(DT_DRV_INST(inst), prop, idx)
5030#define DT_INST_ENUM_IDX(inst, prop) \
5031 DT_ENUM_IDX(DT_DRV_INST(inst), prop)
5042#define DT_INST_ENUM_IDX_BY_IDX_OR(inst, prop, idx, default_idx_value) \
5043 DT_ENUM_IDX_BY_IDX_OR(DT_DRV_INST(inst), prop, idx, default_idx_value)
5053#define DT_INST_ENUM_IDX_OR(inst, prop, default_idx_value) \
5054 DT_ENUM_IDX_OR(DT_DRV_INST(inst), prop, default_idx_value)
5064#define DT_INST_ENUM_HAS_VALUE_BY_IDX(inst, prop, idx, value) \
5065 DT_ENUM_HAS_VALUE_BY_IDX(DT_DRV_INST(inst), prop, idx, value)
5075#define DT_INST_ENUM_HAS_VALUE(inst, prop, value) \
5076 DT_ENUM_HAS_VALUE(DT_DRV_INST(inst), prop, value)
5084#define DT_INST_PROP(inst, prop) DT_PROP(DT_DRV_INST(inst), prop)
5092#define DT_INST_PROP_LEN(inst, prop) DT_PROP_LEN(DT_DRV_INST(inst), prop)
5103#define DT_INST_PROP_HAS_IDX(inst, prop, idx) \
5104 DT_PROP_HAS_IDX(DT_DRV_INST(inst), prop, idx)
5114#define DT_INST_PROP_HAS_NAME(inst, prop, name) \
5115 DT_PROP_HAS_NAME(DT_DRV_INST(inst), prop, name)
5124#define DT_INST_PROP_BY_IDX(inst, prop, idx) \
5125 DT_PROP_BY_IDX(DT_DRV_INST(inst), prop, idx)
5134#define DT_INST_PROP_OR(inst, prop, default_value) \
5135 DT_PROP_OR(DT_DRV_INST(inst), prop, default_value)
5144#define DT_INST_PROP_LEN_OR(inst, prop, default_value) \
5145 DT_PROP_LEN_OR(DT_DRV_INST(inst), prop, default_value)
5156#define DT_INST_STRING_TOKEN(inst, prop) \
5157 DT_STRING_TOKEN(DT_DRV_INST(inst), prop)
5166#define DT_INST_STRING_UPPER_TOKEN(inst, prop) \
5167 DT_STRING_UPPER_TOKEN(DT_DRV_INST(inst), prop)
5177#define DT_INST_STRING_UNQUOTED(inst, prop) \
5178 DT_STRING_UNQUOTED(DT_DRV_INST(inst), prop)
5187#define DT_INST_STRING_TOKEN_BY_IDX(inst, prop, idx) \
5188 DT_STRING_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
5198#define DT_INST_STRING_TOKEN_BY_IDX_OR(inst, prop, idx, default_value) \
5199 DT_STRING_TOKEN_BY_IDX_OR(DT_DRV_INST(inst), prop, idx, default_value)
5208#define DT_INST_STRING_UPPER_TOKEN_BY_IDX(inst, prop, idx) \
5209 DT_STRING_UPPER_TOKEN_BY_IDX(DT_DRV_INST(inst), prop, idx)
5218#define DT_INST_STRING_UNQUOTED_BY_IDX(inst, prop, idx) \
5219 DT_STRING_UNQUOTED_BY_IDX(DT_DRV_INST(inst), prop, idx)
5229#define DT_INST_PROP_BY_PHANDLE(inst, ph, prop) \
5230 DT_INST_PROP_BY_PHANDLE_IDX(inst, ph, 0, prop)
5243#define DT_INST_PROP_BY_PHANDLE_IDX(inst, phs, idx, prop) \
5244 DT_PROP_BY_PHANDLE_IDX(DT_DRV_INST(inst), phs, idx, prop)
5254#define DT_INST_PHA_BY_IDX(inst, pha, idx, cell) \
5255 DT_PHA_BY_IDX(DT_DRV_INST(inst), pha, idx, cell)
5266#define DT_INST_PHA_BY_IDX_OR(inst, pha, idx, cell, default_value) \
5267 DT_PHA_BY_IDX_OR(DT_DRV_INST(inst), pha, idx, cell, default_value)
5277#define DT_INST_PHA(inst, pha, cell) DT_INST_PHA_BY_IDX(inst, pha, 0, cell)
5287#define DT_INST_PHA_OR(inst, pha, cell, default_value) \
5288 DT_INST_PHA_BY_IDX_OR(inst, pha, 0, cell, default_value)
5299#define DT_INST_PHA_BY_NAME(inst, pha, name, cell) \
5300 DT_PHA_BY_NAME(DT_DRV_INST(inst), pha, name, cell)
5311#define DT_INST_PHA_BY_NAME_OR(inst, pha, name, cell, default_value) \
5312 DT_PHA_BY_NAME_OR(DT_DRV_INST(inst), pha, name, cell, default_value)
5322#define DT_INST_PHANDLE_BY_NAME(inst, pha, name) \
5323 DT_PHANDLE_BY_NAME(DT_DRV_INST(inst), pha, name) \
5334#define DT_INST_PHANDLE_BY_IDX(inst, prop, idx) \
5335 DT_PHANDLE_BY_IDX(DT_DRV_INST(inst), prop, idx)
5345#define DT_INST_PHANDLE(inst, prop) DT_INST_PHANDLE_BY_IDX(inst, prop, 0)
5354#define DT_INST_REG_HAS_IDX(inst, idx) DT_REG_HAS_IDX(DT_DRV_INST(inst), idx)
5363#define DT_INST_REG_HAS_NAME(inst, name) DT_REG_HAS_NAME(DT_DRV_INST(inst), name)
5371#define DT_INST_REG_ADDR_BY_IDX_RAW(inst, idx) DT_REG_ADDR_BY_IDX_RAW(DT_DRV_INST(inst), idx)
5379#define DT_INST_REG_ADDR_BY_IDX(inst, idx) DT_REG_ADDR_BY_IDX(DT_DRV_INST(inst), idx)
5387#define DT_INST_REG_SIZE_BY_IDX(inst, idx) \
5388 DT_REG_SIZE_BY_IDX(DT_DRV_INST(inst), idx)
5396#define DT_INST_REG_ADDR_BY_NAME(inst, name) \
5397 DT_REG_ADDR_BY_NAME(DT_DRV_INST(inst), name)
5407#define DT_INST_REG_ADDR_BY_NAME_OR(inst, name, default_value) \
5408 DT_REG_ADDR_BY_NAME_OR(DT_DRV_INST(inst), name, default_value)
5422#define DT_INST_REG_ADDR_BY_NAME_U64(inst, name) \
5423 DT_REG_ADDR_BY_NAME_U64(DT_DRV_INST(inst), name)
5431#define DT_INST_REG_SIZE_BY_NAME(inst, name) \
5432 DT_REG_SIZE_BY_NAME(DT_DRV_INST(inst), name)
5442#define DT_INST_REG_SIZE_BY_NAME_OR(inst, name, default_value) \
5443 DT_REG_SIZE_BY_NAME_OR(DT_DRV_INST(inst), name, default_value)
5450#define DT_INST_REG_ADDR_RAW(inst) DT_INST_REG_ADDR_BY_IDX_RAW(inst, 0)
5457#define DT_INST_REG_ADDR(inst) DT_INST_REG_ADDR_BY_IDX(inst, 0)
5470#define DT_INST_REG_ADDR_U64(inst) DT_REG_ADDR_U64(DT_DRV_INST(inst))
5477#define DT_INST_REG_SIZE(inst) DT_INST_REG_SIZE_BY_IDX(inst, 0)
5485#define DT_INST_NUM_IRQS(inst) DT_NUM_IRQS(DT_DRV_INST(inst))
5493#define DT_INST_IRQ_LEVEL(inst) DT_IRQ_LEVEL(DT_DRV_INST(inst))
5502#define DT_INST_IRQ_BY_IDX(inst, idx, cell) \
5503 DT_IRQ_BY_IDX(DT_DRV_INST(inst), idx, cell)
5511#define DT_INST_IRQ_INTC_BY_IDX(inst, idx) \
5512 DT_IRQ_INTC_BY_IDX(DT_DRV_INST(inst), idx)
5520#define DT_INST_IRQ_INTC_BY_NAME(inst, name) \
5521 DT_IRQ_INTC_BY_NAME(DT_DRV_INST(inst), name)
5530#define DT_INST_IRQ_INTC(inst) \
5531 DT_INST_IRQ_INTC_BY_IDX(inst, 0)
5540#define DT_INST_IRQ_BY_NAME(inst, name, cell) \
5541 DT_IRQ_BY_NAME(DT_DRV_INST(inst), name, cell)
5549#define DT_INST_IRQ(inst, cell) DT_INST_IRQ_BY_IDX(inst, 0, cell)
5556#define DT_INST_IRQN(inst) DT_IRQN(DT_DRV_INST(inst))
5564#define DT_INST_IRQN_BY_IDX(inst, idx) DT_IRQN_BY_IDX(DT_DRV_INST(inst), idx)
5572#define DT_INST_IRQN_BY_NAME(inst, name) \
5573 DT_IRQN_BY_NAME(DT_DRV_INST(inst), name)
5580#define DT_INST_BUS(inst) DT_BUS(DT_DRV_INST(inst))
5589#define DT_INST_ON_BUS(inst, bus) DT_ON_BUS(DT_DRV_INST(inst), bus)
5600#define DT_INST_STRING_TOKEN_OR(inst, name, default_value) \
5601 DT_STRING_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
5611#define DT_INST_STRING_UPPER_TOKEN_OR(inst, name, default_value) \
5612 DT_STRING_UPPER_TOKEN_OR(DT_DRV_INST(inst), name, default_value)
5622#define DT_INST_STRING_UNQUOTED_OR(inst, name, default_value) \
5623 DT_STRING_UNQUOTED_OR(DT_DRV_INST(inst), name, default_value)
5655#define DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(compat, bus) \
5656 IS_ENABLED(DT_CAT4(DT_COMPAT_, compat, _BUS_, bus))
5690#define DT_ANY_INST_ON_BUS_STATUS_OKAY(bus) \
5691 DT_HAS_COMPAT_ON_BUS_STATUS_OKAY(DT_DRV_COMPAT, bus)
5741#define DT_ANY_INST_HAS_PROP_STATUS_OKAY(prop) \
5742 DT_ANY_COMPAT_HAS_PROP_STATUS_OKAY(DT_DRV_COMPAT, prop)
5792#define DT_ALL_INST_HAS_PROP_STATUS_OKAY(prop) \
5793 DT_ALL_COMPAT_HAS_PROP_STATUS_OKAY(DT_DRV_COMPAT, prop)
5843#define DT_ANY_COMPAT_HAS_PROP_STATUS_OKAY(compat, prop) \
5844 UTIL_NOT(IS_EMPTY(DT_COMPAT_FOREACH_STATUS_OKAY_VARGS( \
5845 compat, DT_ANY_COMPAT_HAS_PROP_STATUS_OKAY_INTERNAL, prop)))
5858#define DT_ALL_COMPAT_HAS_PROP_STATUS_OKAY(compat, prop) \
5859 IS_EMPTY(DT_COMPAT_FOREACH_STATUS_OKAY_VARGS( \
5860 compat, DT_ALL_COMPAT_HAS_PROP_STATUS_OKAY_INTERNAL, prop))
5873#define DT_ANY_COMPAT_HAS_BOOL_STATUS_OKAY(compat, prop) \
5874 UTIL_NOT(IS_EMPTY(DT_COMPAT_FOREACH_STATUS_OKAY_VARGS( \
5875 compat, DT_ANY_COMPAT_HAS_BOOL_STATUS_OKAY_INTERNAL, prop)))
5889#define DT_ALL_COMPAT_HAS_BOOL_STATUS_OKAY(compat, prop) \
5890 IS_EMPTY(DT_COMPAT_FOREACH_STATUS_OKAY_VARGS( \
5891 compat, DT_ALL_COMPAT_HAS_BOOL_STATUS_OKAY_INTERNAL, prop))
5940#define DT_ANY_INST_HAS_BOOL_STATUS_OKAY(prop) \
5941 DT_ANY_COMPAT_HAS_BOOL_STATUS_OKAY(DT_DRV_COMPAT, prop)
5988#define DT_ALL_INST_HAS_BOOL_STATUS_OKAY(prop) \
5989 DT_ALL_COMPAT_HAS_BOOL_STATUS_OKAY(DT_DRV_COMPAT, prop)
5998#define DT_ANY_COMPAT_REG_HAS_NAME_STATUS_OKAY(compat, name) \
5999 UTIL_NOT(IS_EMPTY(DT_COMPAT_FOREACH_STATUS_OKAY_VARGS( \
6000 compat, DT_ANY_COMPAT_REG_HAS_NAME_STATUS_OKAY_INTERNAL, name)))
6009#define DT_ALL_COMPAT_REG_HAS_NAME_STATUS_OKAY(compat, name) \
6010 IS_EMPTY(DT_COMPAT_FOREACH_STATUS_OKAY_VARGS( \
6011 compat, DT_ALL_COMPAT_REG_HAS_NAME_STATUS_OKAY_INTERNAL, name))
6019#define DT_ANY_INST_REG_HAS_NAME_STATUS_OKAY(name) \
6020 DT_ANY_COMPAT_REG_HAS_NAME_STATUS_OKAY(DT_DRV_COMPAT, name)
6028#define DT_ALL_INST_REG_HAS_NAME_STATUS_OKAY(name) \
6029 DT_ALL_COMPAT_REG_HAS_NAME_STATUS_OKAY(DT_DRV_COMPAT, name)
6096#define DT_INST_FOREACH_STATUS_OKAY(fn) \
6097 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
6098 (UTIL_CAT(DT_FOREACH_OKAY_INST_, \
6099 DT_DRV_COMPAT)(fn)), \
6114#define DT_INST_FOREACH_STATUS_OKAY_VARGS(fn, ...) \
6115 COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT), \
6116 (UTIL_CAT(DT_FOREACH_OKAY_INST_VARGS_, \
6117 DT_DRV_COMPAT)(fn, __VA_ARGS__)), \
6129#define DT_INST_FOREACH_NODELABEL(inst, fn) \
6130 DT_FOREACH_NODELABEL(DT_DRV_INST(inst), fn)
6143#define DT_INST_FOREACH_NODELABEL_VARGS(inst, fn, ...) \
6144 DT_FOREACH_NODELABEL_VARGS(DT_DRV_INST(inst), fn, __VA_ARGS__)
6156#define DT_INST_FOREACH_PROP_ELEM(inst, prop, fn) \
6157 DT_FOREACH_PROP_ELEM(DT_DRV_INST(inst), prop, fn)
6171#define DT_INST_FOREACH_PROP_ELEM_SEP(inst, prop, fn, sep) \
6172 DT_FOREACH_PROP_ELEM_SEP(DT_DRV_INST(inst), prop, fn, sep)
6188#define DT_INST_FOREACH_PROP_ELEM_VARGS(inst, prop, fn, ...) \
6189 DT_FOREACH_PROP_ELEM_VARGS(DT_DRV_INST(inst), prop, fn, __VA_ARGS__)
6208#define DT_INST_FOREACH_PROP_ELEM_SEP_VARGS(inst, prop, fn, sep, ...) \
6209 DT_FOREACH_PROP_ELEM_SEP_VARGS(DT_DRV_INST(inst), prop, fn, sep, \
6218#define DT_INST_NODE_HAS_PROP(inst, prop) \
6219 DT_NODE_HAS_PROP(DT_DRV_INST(inst), prop)
6227#define DT_INST_NODE_HAS_COMPAT(inst, compat) \
6228 DT_NODE_HAS_COMPAT(DT_DRV_INST(inst), compat)
6240#define DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, idx, cell) \
6241 DT_PHA_HAS_CELL_AT_IDX(DT_DRV_INST(inst), pha, idx, cell)
6252#define DT_INST_PHA_HAS_CELL(inst, pha, cell) \
6253 DT_INST_PHA_HAS_CELL_AT_IDX(inst, pha, 0, cell)
6262#define DT_INST_IRQ_HAS_IDX(inst, idx) DT_IRQ_HAS_IDX(DT_DRV_INST(inst), idx)
6272#define DT_INST_IRQ_HAS_CELL_AT_IDX(inst, idx, cell) \
6273 DT_IRQ_HAS_CELL_AT_IDX(DT_DRV_INST(inst), idx, cell)
6282#define DT_INST_IRQ_HAS_CELL(inst, cell) \
6283 DT_INST_IRQ_HAS_CELL_AT_IDX(inst, 0, cell)
6291#define DT_INST_IRQ_HAS_NAME(inst, name) \
6292 DT_IRQ_HAS_NAME(DT_DRV_INST(inst), name)
6301#define DT_ANY_COMPAT_HAS_PROP_STATUS_OKAY_INTERNAL(inst, compat, prop) \
6302 IF_ENABLED(DT_NODE_HAS_PROP(DT_INST(inst, compat), prop), (1,))
6305#define DT_ANY_COMPAT_HAS_BOOL_STATUS_OKAY_INTERNAL(inst, compat, prop) \
6306 IF_ENABLED(DT_PROP(DT_INST(inst, compat), prop), (1,))
6309#define DT_ANY_COMPAT_REG_HAS_NAME_STATUS_OKAY_INTERNAL(inst, compat, name) \
6310 IF_ENABLED(DT_REG_HAS_NAME(DT_INST(inst, compat), name), (1,))
6313#define DT_ALL_COMPAT_HAS_PROP_STATUS_OKAY_INTERNAL(inst, compat, prop) \
6314 IF_DISABLED(DT_NODE_HAS_PROP(DT_INST(inst, compat), prop), (1,))
6317#define DT_ALL_COMPAT_HAS_BOOL_STATUS_OKAY_INTERNAL(inst, compat, prop) \
6318 IF_DISABLED(DT_PROP(DT_INST(inst, compat), prop), (1,))
6321#define DT_ALL_COMPAT_REG_HAS_NAME_STATUS_OKAY_INTERNAL(inst, compat, name) \
6322 IF_DISABLED(DT_REG_HAS_NAME(DT_INST(inst, compat), name), (1,))
6324#define DT_PATH_INTERNAL(...) \
6325 UTIL_CAT(DT_ROOT, MACRO_MAP_CAT(DT_S_PREFIX, __VA_ARGS__))
6331#define DT_S_PREFIX(name) _S_##name
6347#define DT_CAT(a1, a2) a1 ## a2
6349#define DT_CAT3(a1, a2, a3) a1 ## a2 ## a3
6351#define DT_CAT4(a1, a2, a3, a4) a1 ## a2 ## a3 ## a4
6353#define DT_CAT5(a1, a2, a3, a4, a5) a1 ## a2 ## a3 ## a4 ## a5
6355#define DT_CAT6(a1, a2, a3, a4, a5, a6) a1 ## a2 ## a3 ## a4 ## a5 ## a6
6357#define DT_CAT7(a1, a2, a3, a4, a5, a6, a7) \
6358 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7
6360#define DT_CAT8(a1, a2, a3, a4, a5, a6, a7, a8) \
6361 a1 ## a2 ## a3 ## a4 ## a5 ## a6 ## a7 ## a8
6368#define DT_DASH(...) MACRO_MAP_CAT(DT_DASH_PREFIX, __VA_ARGS__)
6370#define DT_DASH_PREFIX(name) _##name
6372#define DT_NODE_HAS_STATUS_INTERNAL(node_id, status) \
6373 IS_ENABLED(DT_CAT3(node_id, _STATUS_, status))
6378#define DT_COMPAT_NODE_HAS_PROP_AND_OR(inst, compat, prop) \
6379 DT_NODE_HAS_PROP(DT_INST(inst, compat), prop) ||
6385#if defined(_LINKER) || defined(_ASMLANGUAGE)
6386#define DT_U32_C(_v) (_v)
6388#define DT_U32_C(_v) UINT32_C(_v)
6395#if defined(_LINKER) || defined(_ASMLANGUAGE)
6396#define DT_U64_C(_v) (_v)
6398#define DT_U64_C(_v) UINT64_C(_v)
6404#define DT_NODELABEL_STRING_ARRAY_ENTRY_INTERNAL(nodelabel) DT_STRINGIFY_INTERNAL(nodelabel),
6405#define DT_STRINGIFY_INTERNAL(arg) DT_STRINGIFY_INTERNAL_HELPER(arg)
6406#define DT_STRINGIFY_INTERNAL_HELPER(arg) #arg
Clocks Devicetree macro public API header file.
CAN devicetree macro public API header file.
CPU 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.
Map 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.
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.
Chosen SRAM Devicetree macro public API header file.