102 lines
2.9 KiB
C
102 lines
2.9 KiB
C
|
/*
|
||
|
* Copyright (c) 2020 Nordic Semiconductor ASA
|
||
|
* SPDX-License-Identifier: Apache-2.0
|
||
|
*/
|
||
|
|
||
|
#ifndef ZEPHYR_INCLUDE_DEVICETREE_ORDINALS_H_
|
||
|
#define ZEPHYR_INCLUDE_DEVICETREE_ORDINALS_H_
|
||
|
|
||
|
/**
|
||
|
* @file
|
||
|
* @brief Devicetree node dependency ordinals
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @defgroup devicetree-dep-ord Dependency tracking
|
||
|
* @ingroup devicetree
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @brief Get a node's dependency ordinal
|
||
|
* @param node_id Node identifier
|
||
|
* @return the node's dependency ordinal as an integer literal
|
||
|
*/
|
||
|
#define DT_DEP_ORD(node_id) DT_CAT(node_id, _ORD)
|
||
|
|
||
|
/**
|
||
|
* @brief Get a list of dependency ordinals of a node's direct dependencies
|
||
|
*
|
||
|
* There is a comma after each ordinal in the expansion, **including**
|
||
|
* the last one:
|
||
|
*
|
||
|
* DT_REQUIRES_DEP_ORDS(my_node) // required_ord_1, ..., required_ord_n,
|
||
|
*
|
||
|
* The one case DT_REQUIRES_DEP_ORDS() expands to nothing is when
|
||
|
* given the root node identifier @p DT_ROOT as argument. The root has
|
||
|
* no direct dependencies; every other node at least depends on its
|
||
|
* parent.
|
||
|
*
|
||
|
* @param node_id Node identifier
|
||
|
* @return a list of dependency ordinals, with each ordinal followed
|
||
|
* by a comma (<tt>,</tt>), or an empty expansion
|
||
|
*/
|
||
|
#define DT_REQUIRES_DEP_ORDS(node_id) DT_CAT(node_id, _REQUIRES_ORDS)
|
||
|
|
||
|
/**
|
||
|
* @brief Get a list of dependency ordinals of what depends directly on a node
|
||
|
*
|
||
|
* There is a comma after each ordinal in the expansion, **including**
|
||
|
* the last one:
|
||
|
*
|
||
|
* DT_SUPPORTS_DEP_ORDS(my_node) // supported_ord_1, ..., supported_ord_n,
|
||
|
*
|
||
|
* DT_SUPPORTS_DEP_ORDS() may expand to nothing. This happens when @p node_id
|
||
|
* refers to a leaf node that nothing else depends on.
|
||
|
*
|
||
|
* @param node_id Node identifier
|
||
|
* @return a list of dependency ordinals, with each ordinal followed
|
||
|
* by a comma (<tt>,</tt>), or an empty expansion
|
||
|
*/
|
||
|
#define DT_SUPPORTS_DEP_ORDS(node_id) DT_CAT(node_id, _SUPPORTS_ORDS)
|
||
|
|
||
|
/**
|
||
|
* @brief Get a DT_DRV_COMPAT instance's dependency ordinal
|
||
|
*
|
||
|
* Equivalent to DT_DEP_ORD(DT_DRV_INST(inst)).
|
||
|
*
|
||
|
* @param inst instance number
|
||
|
* @return The instance's dependency ordinal
|
||
|
*/
|
||
|
#define DT_INST_DEP_ORD(inst) DT_DEP_ORD(DT_DRV_INST(inst))
|
||
|
|
||
|
/**
|
||
|
* @brief Get a list of dependency ordinals of a DT_DRV_COMPAT instance's
|
||
|
* direct dependencies
|
||
|
*
|
||
|
* Equivalent to DT_REQUIRES_DEP_ORDS(DT_DRV_INST(inst)).
|
||
|
*
|
||
|
* @param inst instance number
|
||
|
* @return a list of dependency ordinals for the nodes the instance depends
|
||
|
* on directly
|
||
|
*/
|
||
|
#define DT_INST_REQUIRES_DEP_ORDS(inst) DT_REQUIRES_DEP_ORDS(DT_DRV_INST(inst))
|
||
|
|
||
|
/**
|
||
|
* @brief Get a list of dependency ordinals of what depends directly on a
|
||
|
* DT_DRV_COMPAT instance
|
||
|
*
|
||
|
* Equivalent to DT_SUPPORTS_DEP_ORDS(DT_DRV_INST(inst)).
|
||
|
*
|
||
|
* @param inst instance number
|
||
|
* @return a list of node identifiers for the nodes that depend directly
|
||
|
* on the instance
|
||
|
*/
|
||
|
#define DT_INST_SUPPORTS_DEP_ORDS(inst) DT_SUPPORTS_DEP_ORDS(DT_DRV_INST(inst))
|
||
|
|
||
|
/**
|
||
|
* @}
|
||
|
*/
|
||
|
|
||
|
#endif /* ZEPHYR_INCLUDE_DEVICETREE_ORDINALS_H_ */
|