dts: gen_defines: emit more for-each helpers
Add some helper macros that work similarly to the 'DT_FOREACH_OKAY_INST_<compat>(fn)' macros, except they give 'fn' node identifiers in their expansion instead of instance numbers. This makes it possible to add for-each APIs to devicetree.h that work on an arbitrary compatible, not just DT_DRV_COMPAT. Signed-off-by: Martí Bolívar <marti.bolivar@nordicsemi.no>
This commit is contained in:
parent
1c4aa60229
commit
e7d42ff879
|
@ -771,10 +771,24 @@ def write_global_compat_info(edt):
|
|||
|
||||
ident = str2ident(compat)
|
||||
n_okay_macros[f"DT_N_INST_{ident}_NUM_OKAY"] = len(okay_nodes)
|
||||
|
||||
# Helpers for non-INST for-each macros that take node
|
||||
# identifiers as arguments.
|
||||
for_each_macros[f"DT_FOREACH_OKAY_{ident}(fn)"] = \
|
||||
" ".join(f"fn(DT_{node.z_path_id})"
|
||||
for node in okay_nodes)
|
||||
for_each_macros[f"DT_FOREACH_OKAY_VARGS_{ident}(fn, ...)"] = \
|
||||
" ".join(f"fn(DT_{node.z_path_id}, __VA_ARGS__)"
|
||||
for node in okay_nodes)
|
||||
|
||||
# Helpers for INST versions of for-each macros, which take
|
||||
# instance numbers. We emit separate helpers for these because
|
||||
# avoiding an intermediate node_id --> instance number
|
||||
# conversion in the preprocessor helps to keep the macro
|
||||
# expansions simpler. That hopefully eases debugging.
|
||||
for_each_macros[f"DT_FOREACH_OKAY_INST_{ident}(fn)"] = \
|
||||
" ".join(f"fn({edt.compat2nodes[compat].index(node)})"
|
||||
for node in okay_nodes)
|
||||
|
||||
for_each_macros[f"DT_FOREACH_OKAY_INST_VARGS_{ident}(fn, ...)"] = \
|
||||
" ".join(f"fn({edt.compat2nodes[compat].index(node)}, __VA_ARGS__)"
|
||||
for node in okay_nodes)
|
||||
|
|
Loading…
Reference in a new issue