xref: /netbsd-src/share/man/man9/deviter.9 (revision 6cb10275d08f045e872662c371fe2f2724f2f6e6)
1*6cb10275Sriastradh.\" $NetBSD: deviter.9,v 1.5 2014/03/18 18:20:40 riastradh Exp $
28f33cec1Sdyoung.\"
38f33cec1Sdyoung.\" Copyright (c) 2009 David Young <dyoung@NetBSD.org>
48f33cec1Sdyoung.\" All rights reserved.
58f33cec1Sdyoung.\"
68f33cec1Sdyoung.\" Redistribution and use in source and binary forms, with or without
78f33cec1Sdyoung.\" modification, are permitted provided that the following conditions
88f33cec1Sdyoung.\" are met:
98f33cec1Sdyoung.\" 1. Redistributions of source code must retain the above copyright
108f33cec1Sdyoung.\"    notice, this list of conditions and the following disclaimer.
118f33cec1Sdyoung.\" 2. Redistributions in binary form must reproduce the above copyright
128f33cec1Sdyoung.\"    notice, this list of conditions and the following disclaimer in the
138f33cec1Sdyoung.\"    documentation and/or other materials provided with the distribution.
148f33cec1Sdyoung.\"
158f33cec1Sdyoung.\" THIS SOFTWARE IS PROVIDED BY David Young ``AS IS'' AND ANY EXPRESS
168f33cec1Sdyoung.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
178f33cec1Sdyoung.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
188f33cec1Sdyoung.\" ARE DISCLAIMED.  IN NO EVENT SHALL David Young BE LIABLE FOR ANY
198f33cec1Sdyoung.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
208f33cec1Sdyoung.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
218f33cec1Sdyoung.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
228f33cec1Sdyoung.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
238f33cec1Sdyoung.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
248f33cec1Sdyoung.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
258f33cec1Sdyoung.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
268f33cec1Sdyoung.\"
278f33cec1Sdyoung.\" NetBSD: pmf.9,v 1.12 2009/10/21 16:06:59 snj Exp
288f33cec1Sdyoung.\"
298f33cec1Sdyoung.\" Copyright (c) 2007 Jared D. McNeill <jmcneill@invisible.ca>
308f33cec1Sdyoung.\" All rights reserved.
318f33cec1Sdyoung.\"
328f33cec1Sdyoung.\" Redistribution and use in source and binary forms, with or without
338f33cec1Sdyoung.\" modification, are permitted provided that the following conditions
348f33cec1Sdyoung.\" are met:
358f33cec1Sdyoung.\" 1. Redistributions of source code must retain the above copyright
368f33cec1Sdyoung.\"    notice, this list of conditions and the following disclaimer.
378f33cec1Sdyoung.\" 2. Redistributions in binary form must reproduce the above copyright
388f33cec1Sdyoung.\"    notice, this list of conditions and the following disclaimer in the
398f33cec1Sdyoung.\"    documentation and/or other materials provided with the distribution.
408f33cec1Sdyoung.\"
418f33cec1Sdyoung.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
428f33cec1Sdyoung.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
438f33cec1Sdyoung.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
448f33cec1Sdyoung.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
458f33cec1Sdyoung.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
468f33cec1Sdyoung.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
478f33cec1Sdyoung.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
488f33cec1Sdyoung.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
498f33cec1Sdyoung.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
508f33cec1Sdyoung.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
518f33cec1Sdyoung.\" POSSIBILITY OF SUCH DAMAGE.
528f33cec1Sdyoung.\"
5323a6db9cSwiz.Dd November 4, 2009
548f33cec1Sdyoung.Dt DEVITER 9
558f33cec1Sdyoung.Os
568f33cec1Sdyoung.Sh NAME
578f33cec1Sdyoung.Nm deviter ,
588f33cec1Sdyoung.Nm deviter_first ,
598f33cec1Sdyoung.Nm deviter_init ,
608f33cec1Sdyoung.Nm deviter_next ,
618f33cec1Sdyoung.Nm deviter_release
628f33cec1Sdyoung.Nd machine-independent device iteration API
638f33cec1Sdyoung.Sh SYNOPSIS
648f33cec1Sdyoung.In sys/device.h
658f33cec1Sdyoung.Ft void
668f33cec1Sdyoung.Fn deviter_init "deviter_t *di" "deviter_flags_t flags"
678f33cec1Sdyoung.Ft device_t
688f33cec1Sdyoung.Fn deviter_first "deviter_t *di" "deviter_flags_t flags"
698f33cec1Sdyoung.Ft device_t
708f33cec1Sdyoung.Fn deviter_next "deviter_t *di"
718f33cec1Sdyoung.Ft void
728f33cec1Sdyoung.Fn deviter_release "deviter_t *di"
738f33cec1Sdyoung.Sh DESCRIPTION
748f33cec1SdyoungThe machine-independent
758f33cec1Sdyoung.Nm
768f33cec1SdyoungAPI lets interrupt handlers running at any priority level and kernel
778f33cec1Sdyoungthreads iterate over the devices attached to the kernel.
788f33cec1SdyoungUsing
798f33cec1Sdyoung.Nm ,
808f33cec1Sdyoungit is safe for an interrupt handler or a thread to iterate over
818f33cec1Sdyoungdevices attached to the kernel while another thread attaches or
828f33cec1Sdyoungdetaches the devices.
838f33cec1Sdyoung.Sh DATA TYPES
848f33cec1SdyoungKernel subsystems using
858f33cec1Sdyoung.Nm
868f33cec1Sdyoungmay make use of the following data types:
878f33cec1Sdyoung.Bl -tag -width compact
888f33cec1Sdyoung.It Fa deviter_flags_t
898f33cec1SdyoungThe kernel can iterate over devices for different purposes and in
908f33cec1Sdyoungdifferent orders.
918f33cec1SdyoungThe following flags affect device iteration:
928f33cec1Sdyoung.Bl -item -compact -offset indent
938f33cec1Sdyoung.It
948f33cec1Sdyoung.Dv DEVITER_F_RW
958f33cec1Sdyoung.It
968f33cec1Sdyoung.Dv DEVITER_F_SHUTDOWN
978f33cec1Sdyoung.It
988f33cec1Sdyoung.Dv DEVITER_F_LEAVES_FIRST
998f33cec1Sdyoung.It
1008f33cec1Sdyoung.Dv DEVITER_F_ROOT_FIRST
1018f33cec1Sdyoung.El
1028f33cec1Sdyoung.It Fa deviter_t
1038f33cec1SdyoungThis is a device iteration
1048f33cec1Sdyoung.Dq cursor
1058f33cec1Sdyoungor
1068f33cec1Sdyoung.Dq iterator .
1078f33cec1SdyoungIt holds iteration state such as the next device to visit.
1088f33cec1Sdyoung.El
1098f33cec1Sdyoung.Sh FUNCTIONS
1108f33cec1Sdyoung.Bl -tag -width compact
1118f33cec1Sdyoung.It Fn deviter_init "di" "flags"
1128f33cec1SdyoungInitialize the device iterator,
1138f33cec1Sdyoung.Fa di .
1148f33cec1SdyoungSet bits in
1158f33cec1Sdyoung.Fa flags
1168f33cec1Sdyoungto affect the order of iteration.
1178f33cec1SdyoungSet
1188f33cec1Sdyoung.Dv DEVITER_F_LEAVES_FIRST
1198f33cec1Sdyoungto visit each device only after visiting its children (visit the
1208f33cec1Sdyoungleaves of the device tree, first).
1218f33cec1SdyoungSet
1228f33cec1Sdyoung.Dv DEVITER_F_ROOT_FIRST
1238f33cec1Sdyoungto visit each device before visiting its children (visit the root
1248f33cec1Sdyoungof the device tree, first).
1258f33cec1SdyoungIf you set neither
1268f33cec1Sdyoung.Dv DEVITER_F_LEAVES_FIRST
1278f33cec1Sdyoungnor
1288f33cec1Sdyoung.Dv DEVITER_F_ROOT_FIRST ,
1298f33cec1Sdyoung.Nm
1308f33cec1Sdyoungreturns devices in an arbitrary order.
1318f33cec1Sdyoung.Pp
1328f33cec1SdyoungSet
1338f33cec1Sdyoung.Dv DEVITER_F_RW
1348f33cec1Sdyoungif your purpose for iterating over devices is to modify the device
1358f33cec1Sdyoungtree by attaching or detaching devices.
1368f33cec1SdyoungSet
1378f33cec1Sdyoung.Dv DEVITER_F_SHUTDOWN
1388f33cec1Sdyoungif your purpose for iterating over devices is to detach all of
1398f33cec1Sdyoungthe devices during system shutdown.
1408f33cec1Sdyoung.Dv DEVITER_F_SHUTDOWN
1418f33cec1Sdyoungimplies
1428f33cec1Sdyoung.Dv DEVITER_F_RW .
1438f33cec1Sdyoung.It Fn deviter_next "di"
1448f33cec1SdyoungAdvance the iterator
1458f33cec1Sdyoung.Fa di
1468f33cec1Sdyoungto the next device.
1478f33cec1Sdyoung.Fn deviter_next
1488f33cec1Sdyoungreturns the current device or
1498f33cec1Sdyoung.Dv NULL
1508f33cec1Sdyoungif there are no more devices.
1518f33cec1Sdyoung.Fn deviter_next
1528f33cec1Sdyoungis undefined if
1538f33cec1Sdyoung.Fa di
1548f33cec1Sdyounghas not been initialized using
1558f33cec1Sdyoung.Fn deviter_init
1568f33cec1Sdyoungor
1578f33cec1Sdyoung.Fn deviter_first .
1588f33cec1Sdyoung.It Fn deviter_first "di" "flags"
1598f33cec1SdyoungInitialize the iterator
1608f33cec1Sdyoung.Fa di
1618f33cec1Sdyoungwith
1628f33cec1Sdyoung.Fa flags .
1638f33cec1SdyoungReturn the first device according to the ordering
1648f33cec1Sdyoungindicated by
1658f33cec1Sdyoung.Fa flags
1668f33cec1Sdyoungand advance
1678f33cec1Sdyoung.Fa di
1688f33cec1Sdyoungto the second device, or
1698f33cec1Sdyoungreturn
1708f33cec1Sdyoung.Dv NULL
1718f33cec1Sdyoungif there are no devices.
1728f33cec1SdyoungThis is equivalent to calling
1738f33cec1Sdyoung.Fn deviter_init "di" "flags"
1748f33cec1Sdyoungand then
1758f33cec1Sdyoung.Fn deviter_next "di" .
1768f33cec1Sdyoung.It Fn deviter_release "di"
1778f33cec1SdyoungRelease all resources held by the iterator
1788f33cec1Sdyoung.Fa di .
1798f33cec1SdyoungEvery iterator that is initialized with
1808f33cec1Sdyoung.Fn deviter_first
1818f33cec1Sdyoungor
1828f33cec1Sdyoung.Fn deviter_init
1838f33cec1SdyoungMUST be released.
1848f33cec1Sdyoung.El
1858f33cec1Sdyoung.Sh CODE REFERENCES
1868f33cec1SdyoungDevice iteration is implemented within the files
1878f33cec1Sdyoung.Pa sys/sys/device.h
1888f33cec1Sdyoungand
1898f33cec1Sdyoung.Pa sys/kern/subr_autoconf.c .
1908f33cec1Sdyoung.Sh SEE ALSO
1918f33cec1Sdyoung.Xr autoconf 9 ,
1928f33cec1Sdyoung.Xr driver 9
1938f33cec1Sdyoung.Sh HISTORY
1948f33cec1Sdyoung.Nm
1958f33cec1Sdyoungappeared in
1968f33cec1Sdyoung.Nx 5.0 .
1978f33cec1Sdyoung.Sh AUTHORS
198a5684d07Swiz.An David Young Aq Mt dyoung@NetBSD.org
199