Sun Microsystems, Inc.
spacerspacer
spacer   www.sun.com docs.sun.com | | |  
spacer
black dot
   
A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z
    
 
Device Information Library Functionsdi_init(3DEVINFO)


NAME

 di_init, di_fini - create and destroy a snapshot of kernel device tree

SYNOPSIS

 
cc [ flag... ] file... -ldevinfo [ library... ]
#include <libdevinfo.h>
di_node_t di_init(const char *phys_path, uint_t flags);
 void di_fini(di_node_t root);

PARAMETERS

 
flags
Snapshot content specification. The possible values can be a bitwise OR of the following:
DINFOSUBTREE
Include subtree.
DINFOPROP
Include properties.
DINFOMINOR
Include minor data.
DINFOCPYALL
Include all of above.
If flags is 0, the snapshot contains only a single node without properties or minor nodes.
phys_path
Physical path of the root node of the snapshot. See di_devfs_path(3DEVINFO).
root
Handle obtained by calling di_init().

DESCRIPTION

 

The di_init() function creates a snapshot of the kernel device tree and returns a handle of the root node. The caller specifies the contents of the snapshot by providing flag and phys_path.

The di_fini() function destroys the snapshot of the kernel device tree and frees the associated memory. All handles associated with this snapshot become invalid after the call to di_fini().

RETURN VALUES

 

Upon success, di_init() returns a handle. Otherwise, DI_NODE_NIL is returned and errno is set to indicate the error.

ERRORS

 

The di_init() function can set errno to any error code that can also be set by open(2), ioctl(2) or mmap(2). The most common error codes include:

EACCESS
Insufficient privilege for accessing device configuration data.
ENXIO
Either the device named by phys_path is not present in the system, or the devinfo(7D) driver is not installed properly.
EINVAL
Either phys_path is incorrectly formed or the flags argument is invalid.

EXAMPLES

 Example 1. Using the libdevinfo Interfaces To Print All Device Tree Node Names
 

The following is an example using the libdevinfo() interfaces to print all device tree node names:
 
/*
 * Code to print all device tree node names
 */

#include <stdio.h>
#include <libdevinfo.h>

int 
prt_nodename(di_node_t node, void *arg)
{
     printf("%s\n", di_node_name(node));
     return (DI_WALK_CONTINUE);
}

main()
{
     di_node_t root_node;
     if((root_node = di_init("/", DINFOSUBTREE)) == DI_NODE_NIL) {
           fprintf(stderr, "di_init() failed\n");
           exit(1);
     }
     di_walk_node(root_node, DI_WALK_CLDFIRST, NULL, prt_nodename);
     di_fini(root_node);
}

Example 2. Using the libdevinfo Interfaces To Print The Physical Path Of SCSI Disks
 

The following example uses the libdevinfo()interfaces to print the physical path of SCSI disks:

 
/*
 * Code to print physical path of scsi disks
 */

#include <stdio.h>
#include <libdevinfo.h>
#define	DISK_DRIVER	"sd"	/* driver name */

void
prt_diskinfo(di_node_t node)
{
    int instance;
        char *phys_path;

    /*
     * If the device node exports no minor nodes,
     * there is no physical disk.
     */
     if (di_minor_next(node, DI_MINOR_NIL) == DI_MINOR_NIL) {
              return;
         }

         instance = di_instance(node);
         phys_path = di_devfs_path(node);
         printf("%s%d: %s\n", DISK_DRIVER, instance, phys_path);
         di_devfs_path_free(phys_path);
}

void
walk_disknodes(di_node_t node)
{
        node = di_drv_first_node(DISK_DRIVER, node);
        while (node != DI_NODE_NIL) {
             prt_diskinfo(node);
             node = di_drv_next_node(node);
        }
}

main()
{
    di_node_t root_node;
    if ((root_node = di_init("/", DINFOCPYALL)) == DI_NODE_NIL) {
        fprintf(stderr, "di_init() failed\n");
        exit(1);
    }
        walk_disknodes(root_node);
        di_fini(root_node);
}

ATTRIBUTES

 

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

ATTRIBUTE TYPEATTRIBUTE VALUE
Interface StabilityEvolving
MT-LevelSafe

SEE ALSO

 

open(2), ioctl(2), mmap(2), libdevinfo(3DEVINFO), attributes(5)

Writing Device Drivers


SunOS 5.9Go To TopLast Changed 1 Dec 1998

 
      
      
Copyright 2002 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms.