2 .\" Copyright (c) 2001 Michael Smith <msmith@FreeBSD.org>
3 .\" All rights reserved.
5 .\" Redistribution and use in source and binary forms, with or without
6 .\" modification, are permitted provided that the following conditions
8 .\" 1. Redistributions of source code must retain the above copyright
9 .\" notice, this list of conditions and the following disclaimer.
10 .\" 2. Redistributions in binary form must reproduce the above copyright
11 .\" notice, this list of conditions and the following disclaimer in the
12 .\" documentation and/or other materials provided with the distribution.
14 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 .\" $FreeBSD: src/lib/libdevinfo/devinfo.3,v 1.11 2006/09/17 21:27:35 ru Exp $
28 .Dd September 30, 2008
35 .Nm devinfo_handle_to_device ,
36 .Nm devinfo_handle_to_resource ,
37 .Nm devinfo_handle_to_rman ,
38 .Nm devinfo_foreach_device_child ,
39 .Nm devinfo_foreach_device_resource ,
40 .Nm devinfo_foreach_rman_resource ,
41 .Nm devinfo_foreach_rman
42 .Nd device and resource information utility library
48 .Fn devinfo_init "void"
50 .Fn devinfo_free "void"
51 .Ft struct devinfo_dev *
52 .Fn devinfo_handle_to_device "devinfo_handle_t handle"
53 .Ft struct devinfo_res *
54 .Fn devinfo_handle_to_resource "devinfo_handle_t handle"
55 .Ft struct devinfo_rman *
56 .Fn devinfo_handle_to_rman "devinfo_handle_t handle"
58 .Fo devinfo_foreach_device_child
59 .Fa "struct devinfo_dev *parent"
60 .Fa "int (*fn)(struct devinfo_dev *child, void *arg)"
64 .Fo devinfo_foreach_device_resource
65 .Fa "struct devinfo_dev *dev"
66 .Fa "int (*fn)(struct devinfo_dev *dev, \:struct devinfo_res *res, \:void *arg)"
70 .Fo devinfo_foreach_rman_resource
71 .Fa "struct devinfo_rman *rman"
72 .Fa "int (*fn)(struct devinfo_res *res, void *arg)"
76 .Fo devinfo_foreach_rman
77 .Fa "int (*fn)(struct devinfo_rman *rman, void *arg)"
83 library provides access to the kernel's internal device hierarchy
84 and to the I/O resource manager.
87 interface to obtain a snapshot of the kernel's state,
88 which is then made available to the application.
90 Due to the fact that the information may be logically arranged
91 in a number of different fashions,
92 the library does not attempt to impose any structure on the data.
94 Device, resource, and resource manager information is returned in
95 data structures defined in
97 .Bd -literal -offset indent
99 devinfo_handle_t dd_handle; /* device handle */
100 devinfo_handle_t dd_parent; /* parent handle */
101 char *dd_name; /* name of device */
102 char *dd_desc; /* device description */
103 char *dd_drivername; /* name of attached driver */
104 char *dd_pnpinfo; /* pnp info from parent bus */
105 char *dd_location; /* Where bus thinks dev at */
106 uint32_t dd_devflags; /* API flags */
107 uint16_t dd_flags; /* internal dev flags */
108 device_state_t dd_state; /* attachment state of dev */
111 struct devinfo_rman {
112 devinfo_handle_t dm_handle; /* resource manager handle */
113 u_long dm_start; /* resource start */
114 u_long dm_size; /* resource size */
115 char *dm_desc; /* resource description */
119 devinfo_handle_t dr_handle; /* resource handle */
120 devinfo_handle_t dr_rman; /* resource manager handle */
121 devinfo_handle_t dr_device; /* owning device */
122 u_long dr_start; /* region start */
123 u_long dr_size; /* region size */
129 values can be used to look up the correspondingly referenced structures.
132 takes a snapshot of the kernel's internal device and resource state.
134 if after a number of retries a consistent snapshot cannot be obtained.
136 must be called before any other functions can be used.
139 releases the memory associated with the snapshot.
140 Any pointers returned by other functions are invalidated by this,
143 must be called again before using any other functions.
145 .Fn devinfo_handle_to_device ,
146 .Fn devinfo_handle_to_resource
148 .Fn devinfo_handle_to_rman
154 structures respectively based on the
157 These functions can be used to traverse the tree from any node to any
160 .Fn devinfo_handle_to_device
161 is passed the constant
162 .Dv DEVINFO_ROOT_DEVICE
163 it will return the handle to the root of the device tree.
165 .Fn devinfo_foreach_device_child
166 invokes its callback argument
168 on every device which is an immediate child of
172 function is also passed
174 allowing state to be passed to the callback function.
177 returns a nonzero error value the traversal is halted,
179 .Fn devinfo_foreach_device_child
180 returns the error value to its caller.
182 .Fn devinfo_foreach_device_resource
183 invokes its callback argument
185 on every resource which is owned by
189 function is also passed
193 allowing state to be passed to the callback function.
196 returns a nonzero error value the traversal is halted,
198 .Fn devinfo_foreach_device_resource
199 returns the error value to its caller.
201 .Fn devinfo_foreach_rman_resource
202 invokes its callback argument
204 on every resource within the resource manager
208 function is also passed
210 allowing state to be passed to the callback function.
213 returns a nonzero error value the traversal is halted,
215 .Fn devinfo_foreach_rman_resource
216 returns the error value to its caller.
218 .Fn devinfo_foreach_rman
219 invokes its callback argument
221 on every resource manager.
224 function is also passed
226 allowing state to be passed to the callback function.
229 returns a nonzero error value the traversal is halted,
231 .Fn devinfo_foreach_rman
232 returns the error value to its caller.
238 library first appeared in
240 and was imported into
243 .An Michael Smith Aq Mt msmith@FreeBSD.org
245 This is the first implementation of the library,
246 and the interface is still subject to refinement.
248 The interface does not report device classes or drivers,
249 making it hard to sort by class or driver.