DEVITER(9) | Kernel Developer's Manual | DEVITER(9) |
deviter
, deviter_first
,
deviter_init
, deviter_next
,
deviter_release
—
#include <sys/device.h>
void
deviter_init
(deviter_t
*di, deviter_flags_t
flags);
device_t
deviter_first
(deviter_t
*di, deviter_flags_t
flags);
device_t
deviter_next
(deviter_t
*di);
void
deviter_release
(deviter_t
*di);
deviter
API lets interrupt
handlers running at any priority level and kernel threads iterate over the
devices attached to the kernel. Using deviter
, it is
safe for an interrupt handler or a thread to iterate over devices attached to
the kernel while another thread attaches or detaches the devices.
deviter
may make use of the
following data types:
deviter_init
(di,
flags)DEVITER_F_LEAVES_FIRST
to visit each device only
after visiting its children (visit the leaves of the device tree, first).
Set DEVITER_F_ROOT_FIRST
to visit each device
before visiting its children (visit the root of the device tree, first).
If you set neither DEVITER_F_LEAVES_FIRST
nor
DEVITER_F_ROOT_FIRST
,
deviter
returns devices in an arbitrary order.
Set DEVITER_F_RW
if your purpose for
iterating over devices is to modify the device tree by attaching or
detaching devices. Set DEVITER_F_SHUTDOWN
if
your purpose for iterating over devices is to detach all of the devices
during system shutdown. DEVITER_F_SHUTDOWN
implies DEVITER_F_RW
.
deviter_next
(di)deviter_next
() returns the current device or
NULL
if there are no more devices.
deviter_next
() is undefined if
di has not been initialized using
deviter_init
() or
deviter_first
().deviter_first
(di,
flags)NULL
if there are no devices. This is equivalent
to calling deviter_init
(di,
flags) and then
deviter_next
(di).deviter_release
(di)deviter_first
()
or deviter_init
() MUST be released.deviter
appeared in NetBSD 5.0.
November 4, 2009 | NetBSD 9.0 |