Line data Source code
1 1 : /*
2 : * Copyright (c) 2020 Nordic Semiconductor ASA
3 : * SPDX-License-Identifier: Apache-2.0
4 : */
5 :
6 : #ifndef ZEPHYR_INCLUDE_DEVICETREE_ORDINALS_H_
7 : #define ZEPHYR_INCLUDE_DEVICETREE_ORDINALS_H_
8 :
9 : /**
10 : * @file
11 : * @brief Devicetree node dependency ordinals
12 : */
13 :
14 : /**
15 : * @defgroup devicetree-dep-ord Dependency tracking
16 : * @ingroup devicetree
17 : * @{
18 : */
19 :
20 : /**
21 : * @brief Get a node's dependency ordinal
22 : * @param node_id Node identifier
23 : * @return the node's dependency ordinal as an integer literal
24 : */
25 1 : #define DT_DEP_ORD(node_id) DT_CAT(node_id, _ORD)
26 :
27 : /**
28 : * @brief Get a node's dependency ordinal in string sortable form
29 : * @param node_id Node identifier
30 : * @return the node's dependency ordinal as a zero-padded integer literal
31 : */
32 1 : #define DT_DEP_ORD_STR_SORTABLE(node_id) DT_CAT(node_id, _ORD_STR_SORTABLE)
33 :
34 : /**
35 : * @brief Get a list of dependency ordinals of a node's direct dependencies
36 : *
37 : * There is a comma after each ordinal in the expansion, **including**
38 : * the last one:
39 : *
40 : * DT_REQUIRES_DEP_ORDS(my_node) // required_ord_1, ..., required_ord_n,
41 : *
42 : * The one case DT_REQUIRES_DEP_ORDS() expands to nothing is when
43 : * given the root node identifier @p DT_ROOT as argument. The root has
44 : * no direct dependencies; every other node at least depends on its
45 : * parent.
46 : *
47 : * @param node_id Node identifier
48 : * @return a list of dependency ordinals, with each ordinal followed
49 : * by a comma (<tt>,</tt>), or an empty expansion
50 : */
51 1 : #define DT_REQUIRES_DEP_ORDS(node_id) DT_CAT(node_id, _REQUIRES_ORDS)
52 :
53 : /**
54 : * @brief Get a list of dependency ordinals of what depends directly on a node
55 : *
56 : * There is a comma after each ordinal in the expansion, **including**
57 : * the last one:
58 : *
59 : * DT_SUPPORTS_DEP_ORDS(my_node) // supported_ord_1, ..., supported_ord_n,
60 : *
61 : * DT_SUPPORTS_DEP_ORDS() may expand to nothing. This happens when @p node_id
62 : * refers to a leaf node that nothing else depends on.
63 : *
64 : * @param node_id Node identifier
65 : * @return a list of dependency ordinals, with each ordinal followed
66 : * by a comma (<tt>,</tt>), or an empty expansion
67 : */
68 1 : #define DT_SUPPORTS_DEP_ORDS(node_id) DT_CAT(node_id, _SUPPORTS_ORDS)
69 :
70 : /**
71 : * @brief Get a DT_DRV_COMPAT instance's dependency ordinal
72 : *
73 : * Equivalent to DT_DEP_ORD(DT_DRV_INST(inst)).
74 : *
75 : * @param inst instance number
76 : * @return The instance's dependency ordinal
77 : */
78 1 : #define DT_INST_DEP_ORD(inst) DT_DEP_ORD(DT_DRV_INST(inst))
79 :
80 : /**
81 : * @brief Get a list of dependency ordinals of a DT_DRV_COMPAT instance's
82 : * direct dependencies
83 : *
84 : * Equivalent to DT_REQUIRES_DEP_ORDS(DT_DRV_INST(inst)).
85 : *
86 : * @param inst instance number
87 : * @return a list of dependency ordinals for the nodes the instance depends
88 : * on directly
89 : */
90 1 : #define DT_INST_REQUIRES_DEP_ORDS(inst) DT_REQUIRES_DEP_ORDS(DT_DRV_INST(inst))
91 :
92 : /**
93 : * @brief Get a list of dependency ordinals of what depends directly on a
94 : * DT_DRV_COMPAT instance
95 : *
96 : * Equivalent to DT_SUPPORTS_DEP_ORDS(DT_DRV_INST(inst)).
97 : *
98 : * @param inst instance number
99 : * @return a list of node identifiers for the nodes that depend directly
100 : * on the instance
101 : */
102 1 : #define DT_INST_SUPPORTS_DEP_ORDS(inst) DT_SUPPORTS_DEP_ORDS(DT_DRV_INST(inst))
103 :
104 : /**
105 : * @}
106 : */
107 :
108 : #endif /* ZEPHYR_INCLUDE_DEVICETREE_ORDINALS_H_ */
|