xref: /illumos-gate/usr/src/man/man3devinfo/di_child_node.3devinfo (revision 9b0bb795691f70ec1b1796f6d15266f82d7a3200)
te
Copyright (c) 1998, Sun Microsystems, Inc. All Rights Reserved
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
DI_CHILD_NODE 3DEVINFO "Dec 1, 1998"
NAME
di_child_node, di_parent_node, di_sibling_node, di_drv_first_node, di_drv_next_node - libdevinfo node traversal functions
SYNOPSIS

cc [ flag... ] file... -ldevinfo [ library... ]
#include <libdevinfo.h>

di_node_t di_child_node(di_node_t node);

di_node_t di_parent_node(di_node_t node);

di_node_t di_sibling_node(di_node_t node);

di_node_t di_drv_first_node(const char *drv_name, di_node_t root);

di_node_t di_drv_next_node(di_node_t node);
PARAMETERS
drv_name

The name of the driver of interest.

node

A handle to any node in the snapshot.

root

The handle of the root node for the snapshot returned by di_init(3DEVINFO).

DESCRIPTION

The kernel device configuration data may be viewed in two ways, either as a tree of device configuration nodes or as a list of nodes associated with each driver. In the tree view, each node may contain references to its parent, the next sibling in a list of siblings, and the first child of a list of children. In the per-driver view, each node contains a reference to the next node associated with the same driver. Both views are captured in the snapshot, and the interfaces are provided for node access.

The di_child_node() function obtains a handle to the first child of node. If no child node exists in the snapshot, DI_NODE_NIL is returned and errno is set to ENXIO or ENOTSUP.

The di_parent_node() function obtains a handle to the parent node of node. If no parent node exists in the snapshot, DI_NODE_NIL is returned and errno is set to ENXIO or ENOTSUP.

The di_sibling_node() function obtains a handle to the next sibling node of node. If no next sibling node exists in the snapshot, DI_NODE_NIL is returned and errno is set to ENXIO or ENOTSUP.

The di_drv_first_node() function obtains a handle to the first node associated with the driver specified by drv_name. If there is no such driver, DI_NODE_NIL is returned with errno is set to EINVAL. If the driver exists but there is no node associated with this driver, DI_NODE_NIL is returned and errno is set to ENXIO or ENOTSUP.

The di_drv_next_node() function returns a handle to the next node bound to the same driver. If no more nodes exist, DI_NODE_NIL is returned.

RETURN VALUES

Upon successful completion, a handle is returned. Otherwise, DI_NODE_NIL is returned and errno is set to indicate the error.

ERRORS

These functions will fail if: EINVAL

The argument is invalid.

ENXIO

The requested node does not exist.

ENOTSUP

The node was not found in the snapshot, but it may exist in the kernel. This error may occur if the snapshot contains a partial device tree.

ATTRIBUTES

See attributes(5) for descriptions of the following attributes:

ATTRIBUTE TYPE ATTRIBUTE VALUE
Interface Stability Evolving
MT-Level Safe
SEE ALSO

di_init(3DEVINFO), libdevinfo(3LIB), attributes(5)

Writing Device Drivers