OF_NODE_FROM_XREF(9) | Kernel Developer's Manual | OF_NODE_FROM_XREF(9) |
OF_node_from_xref
,
OF_xref_from_node
— convert
between kernel phandle and effective phandle
#include
<dev/ofw/ofw_bus.h>
#include
<dev/ofw/ofw_bus_subr.h>
phandle_t
OF_node_from_xref
(phandle_t
xref);
phandle_t
OF_xref_from_node
(phandle_t
node);
Some OpenFirmware implementations (FDT, IBM) have a concept of
effective phandle or xrefs. They are used to cross-reference device tree
nodes. For instance, a framebuffer controller may refer to a GPIO controller
and pin that controls the backlight. In this example, the GPIO node would
have a cell (32-bit integer) property with a reserved name like
"phandle" or "linux,phandle" whose value uniquely
identifies the node. The actual name depends on the implementation. The
framebuffer node would have a property with the name described by device
bindings (device-specific set of properties). It can be a cell property or a
combined property with one part of it being a cell. The value of the
framebuffer node's property would be the same as the value of the GPIO
"phandle" property so it can be said that the framebuffer node
refers to the GPIO node. The kernel uses internal logic to assign unique
identifiers to the device tree nodes, and these values do not match the
values of "phandle" properties.
OF_node_from_xref
()
and
OF_xref_from_node
()
are used to perform conversion between these two kinds of node
identifiers.
OF_node_from_xref
()
returns the kernel phandle for the effective phandle
xref. If one cannot be found or the OpenFirmware
implementation does not support effective phandles, the function returns the
input value.
OF_xref_from_xref
()
returns the effective phandle for the kernel phandle
xref. If one cannot be found or the OpenFirmware
implementation does not support effective phandles, the function returns the
input value.
phandle_t panelnode, panelxref; char *model; if (OF_getencprop(node, "lcd-panel", &panelxref) <= 0) return; panelnode = OF_node_from_xref(panelxref); if (OF_getprop_alloc(hdminode, "model", (void **)&model) <= 0) return;
This manual page was written by Oleksandr Tymoshenko <gonzo@FreeBSD.org>.
April 9, 2018 | Debian |