xref: /freebsd/share/man/man9/physio.9 (revision daf1cffce2e07931f27c6c6998652e90df6ba87e)
1.\"	$NetBSD: physio.9,v 1.2 1996/11/11 00:05:12 lukem Exp $
2.\"
3.\" Copyright (c) 1996 The NetBSD Foundation, Inc.
4.\" All rights reserved.
5.\"
6.\" This code is derived from software contributed to The NetBSD Foundation
7.\" by Paul Kranenburg.
8.\"
9.\" Redistribution and use in source and binary forms, with or without
10.\" modification, are permitted provided that the following conditions
11.\" are met:
12.\" 1. Redistributions of source code must retain the above copyright
13.\"    notice, this list of conditions and the following disclaimer.
14.\" 2. Redistributions in binary form must reproduce the above copyright
15.\"    notice, this list of conditions and the following disclaimer in the
16.\"    documentation and/or other materials provided with the distribution.
17.\" 3. All advertising materials mentioning features or use of this software
18.\"    must display the following acknowledgement:
19.\"        This product includes software developed by the NetBSD
20.\"        Foundation, Inc. and its contributors.
21.\" 4. Neither the name of The NetBSD Foundation nor the names of its
22.\"    contributors may be used to endorse or promote products derived
23.\"    from this software without specific prior written permission.
24.\"
25.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
26.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
29.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35.\" POSSIBILITY OF SUCH DAMAGE.
36.\"
37.\" $FreeBSD$
38.\"
39.Dd June 15, 1996
40.Dt PHYSIO 9
41.Os FreeBSD
42.Sh NAME
43.Nm physio
44.Nd initiate I/O on raw devices
45.Sh SYNOPSIS
46.Fd #include <sys/param.h>
47.Fd #include <sys/systm.h>
48.Fd #include <sys/buf.h>
49.Ft int
50.Fn physio "dev_t dev" "struct uio *uio" "int ioflag"
51.Fc
52.Sh DESCRIPTION
53The
54.Fn physio
55is a helper function typically called from character device read and write
56routines to start I/O on a user process buffer. It calls back on the
57provided
58.Fa strategy
59routine one or more times to complete the transfer described by
60.Fa uio .
61The maximum amount of data to transfer with each call to
62.Fa strategy
63is determined by the
64.Fa minphys
65routine. Since
66.Fa uio
67normally describes user space addresses,
68.Fn physio
69needs to lock the process into memory.  This is done by setting the
70.Dv P_PHYSIO
71flag on the process.
72.Fn physio
73always awaits the completion of the entire requested transfer before
74returning, unless an error condition is detected earlier. In all cases,
75the buffer passed in
76.Fa bp
77is locked (marked as
78.Dq busy )
79for the duration of the entire transfer.
80.Pp
81A break-down of the arguments follows:
82.Bl -tag -width indent
83.It Fa strategy
84The device strategy routine to call for each chunk of data to initiate
85device I/O.
86.It Fa bp
87The buffer to use with the strategy routine. The buffer flags will have
88.Dv B_BUSY ,
89and
90.Dv B_PHYS
91set when passed to the strategy routine. If
92.Dv NULL ,
93a buffer is allocated from a system pool.
94.It Fa dev
95The device number identifying the device to interact with.
96.It Fa flags
97Direction of transfer; the only valid settings are
98.Dv B_READ
99or
100.Dv B_WRITE .
101.It Fa minphys
102A device specific routine called to determine the maximum transfer size
103that the device's strategy routine can handle.
104.It Fa uio
105The description of the entire transfer as requested by the user process.
106Currently, the results of passing a
107.Fa uio
108structure with the
109.Sq uio_segflg
110set to anything other than
111.Dv UIO_USERSPACE ,
112are undefined.
113.El
114.Pp
115.Sh RETURN VALUES
116If successful
117.Fn physio
118returns 0.
119.Er EFAULT
120is returned if the address range described by
121.Fa uio
122is not accessible by the requesting process.
123.Fn physio
124will return any error resulting from calls to the device strategy routine,
125by examining the
126.Dv B_ERROR
127buffer flag and the
128.Va b_error
129field. Note that the actual transfer size may be less than requested by
130.Fa uio
131if the device signals an
132.Dq end of file
133condition.
134.Sh SEE ALSO
135.Xr read 2 ,
136.Xr write 2
137