blob: d1e990e24708337aa2811f63124a39b8638e5795 [file] [log] [blame]
/**
* @file
* @brief MBOX Devicetree macro public API header file.
*/
/*
* Copyright (c) 2022 Carlo Caione <ccaione@baylibre.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_INCLUDE_DEVICETREE_MBOX_H_
#define ZEPHYR_INCLUDE_DEVICETREE_MBOX_H_
#ifdef __cplusplus
extern "C" {
#endif
/**
* @defgroup devicetree-mbox Devicetree MBOX API
* @ingroup devicetree
* @{
*/
/**
* @brief Get the node identifier for the MBOX controller from a mboxes
* property by name
*
* Example devicetree fragment:
*
* mbox1: mbox-controller@... { ... };
*
* n: node {
* mboxes = <&mbox1 8>,
* <&mbox1 9>;
* mbox-names = "tx", "rx";
* };
*
* Example usage:
*
* DT_MBOX_CTLR_BY_NAME(DT_NODELABEL(n), tx) // DT_NODELABEL(mbox1)
* DT_MBOX_CTLR_BY_NAME(DT_NODELABEL(n), rx) // DT_NODELABEL(mbox1)
*
* @param node_id node identifier for a node with a mboxes property
* @param name lowercase-and-underscores name of a mboxes element
* as defined by the node's mbox-names property
*
* @return the node identifier for the MBOX controller in the named element
*
* @see DT_PHANDLE_BY_NAME()
*/
#define DT_MBOX_CTLR_BY_NAME(node_id, name) \
DT_PHANDLE_BY_NAME(node_id, mboxes, name)
/**
* @brief Get a MBOX channel value by name
*
* Example devicetree fragment:
*
* mbox1: mbox@... {
* #mbox-cells = <1>;
* };
*
* n: node {
* mboxes = <&mbox1 1>,
* <&mbox1 6>;
* mbox-names = "tx", "rx";
* };
*
* Bindings fragment for the mbox compatible:
*
* mbox-cells:
* - channel
*
* Example usage:
*
* DT_MBOX_CHANNEL_BY_NAME(DT_NODELABEL(n), tx) // 1
* DT_MBOX_CHANNEL_BY_NAME(DT_NODELABEL(n), rx) // 6
*
* @param node_id node identifier for a node with a mboxes property
* @param name lowercase-and-underscores name of a mboxes element
* as defined by the node's mbox-names property
*
* @return the channel value in the specifier at the named element or 0 if no
* channels are supported
*
* @see DT_PHA_BY_NAME_OR()
*/
#define DT_MBOX_CHANNEL_BY_NAME(node_id, name) \
DT_PHA_BY_NAME_OR(node_id, mboxes, name, channel, 0)
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* ZEPHYR_INCLUDE_DEVICETREE_MBOX_H_ */