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