summaryrefslogtreecommitdiff
path: root/static/netbsd/man9/deviter.9
diff options
context:
space:
mode:
Diffstat (limited to 'static/netbsd/man9/deviter.9')
-rw-r--r--static/netbsd/man9/deviter.9198
1 files changed, 198 insertions, 0 deletions
diff --git a/static/netbsd/man9/deviter.9 b/static/netbsd/man9/deviter.9
new file mode 100644
index 00000000..3c5f4ac9
--- /dev/null
+++ b/static/netbsd/man9/deviter.9
@@ -0,0 +1,198 @@
+.\" $NetBSD: deviter.9,v 1.5 2014/03/18 18:20:40 riastradh Exp $
+.\"
+.\" Copyright (c) 2009 David Young <dyoung@NetBSD.org>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY David Young ``AS IS'' AND ANY EXPRESS
+.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL David Young BE LIABLE FOR ANY
+.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" NetBSD: pmf.9,v 1.12 2009/10/21 16:06:59 snj Exp
+.\"
+.\" Copyright (c) 2007 Jared D. McNeill <jmcneill@invisible.ca>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.Dd November 4, 2009
+.Dt DEVITER 9
+.Os
+.Sh NAME
+.Nm deviter ,
+.Nm deviter_first ,
+.Nm deviter_init ,
+.Nm deviter_next ,
+.Nm deviter_release
+.Nd machine-independent device iteration API
+.Sh SYNOPSIS
+.In sys/device.h
+.Ft void
+.Fn deviter_init "deviter_t *di" "deviter_flags_t flags"
+.Ft device_t
+.Fn deviter_first "deviter_t *di" "deviter_flags_t flags"
+.Ft device_t
+.Fn deviter_next "deviter_t *di"
+.Ft void
+.Fn deviter_release "deviter_t *di"
+.Sh DESCRIPTION
+The machine-independent
+.Nm
+API lets interrupt handlers running at any priority level and kernel
+threads iterate over the devices attached to the kernel.
+Using
+.Nm ,
+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.
+.Sh DATA TYPES
+Kernel subsystems using
+.Nm
+may make use of the following data types:
+.Bl -tag -width compact
+.It Fa deviter_flags_t
+The kernel can iterate over devices for different purposes and in
+different orders.
+The following flags affect device iteration:
+.Bl -item -compact -offset indent
+.It
+.Dv DEVITER_F_RW
+.It
+.Dv DEVITER_F_SHUTDOWN
+.It
+.Dv DEVITER_F_LEAVES_FIRST
+.It
+.Dv DEVITER_F_ROOT_FIRST
+.El
+.It Fa deviter_t
+This is a device iteration
+.Dq cursor
+or
+.Dq iterator .
+It holds iteration state such as the next device to visit.
+.El
+.Sh FUNCTIONS
+.Bl -tag -width compact
+.It Fn deviter_init "di" "flags"
+Initialize the device iterator,
+.Fa di .
+Set bits in
+.Fa flags
+to affect the order of iteration.
+Set
+.Dv DEVITER_F_LEAVES_FIRST
+to visit each device only after visiting its children (visit the
+leaves of the device tree, first).
+Set
+.Dv DEVITER_F_ROOT_FIRST
+to visit each device before visiting its children (visit the root
+of the device tree, first).
+If you set neither
+.Dv DEVITER_F_LEAVES_FIRST
+nor
+.Dv DEVITER_F_ROOT_FIRST ,
+.Nm
+returns devices in an arbitrary order.
+.Pp
+Set
+.Dv DEVITER_F_RW
+if your purpose for iterating over devices is to modify the device
+tree by attaching or detaching devices.
+Set
+.Dv DEVITER_F_SHUTDOWN
+if your purpose for iterating over devices is to detach all of
+the devices during system shutdown.
+.Dv DEVITER_F_SHUTDOWN
+implies
+.Dv DEVITER_F_RW .
+.It Fn deviter_next "di"
+Advance the iterator
+.Fa di
+to the next device.
+.Fn deviter_next
+returns the current device or
+.Dv NULL
+if there are no more devices.
+.Fn deviter_next
+is undefined if
+.Fa di
+has not been initialized using
+.Fn deviter_init
+or
+.Fn deviter_first .
+.It Fn deviter_first "di" "flags"
+Initialize the iterator
+.Fa di
+with
+.Fa flags .
+Return the first device according to the ordering
+indicated by
+.Fa flags
+and advance
+.Fa di
+to the second device, or
+return
+.Dv NULL
+if there are no devices.
+This is equivalent to calling
+.Fn deviter_init "di" "flags"
+and then
+.Fn deviter_next "di" .
+.It Fn deviter_release "di"
+Release all resources held by the iterator
+.Fa di .
+Every iterator that is initialized with
+.Fn deviter_first
+or
+.Fn deviter_init
+MUST be released.
+.El
+.Sh CODE REFERENCES
+Device iteration is implemented within the files
+.Pa sys/sys/device.h
+and
+.Pa sys/kern/subr_autoconf.c .
+.Sh SEE ALSO
+.Xr autoconf 9 ,
+.Xr driver 9
+.Sh HISTORY
+.Nm
+appeared in
+.Nx 5.0 .
+.Sh AUTHORS
+.An David Young Aq Mt dyoung@NetBSD.org