xref: /freebsd/share/man/man9/physio.9 (revision 3d45e180f437865262fc7c39fc3239641f305737)
14b2502a3SMike Pritchard.\"	$NetBSD: physio.9,v 1.2 1996/11/11 00:05:12 lukem Exp $
24b2502a3SMike Pritchard.\"
34b2502a3SMike Pritchard.\" Copyright (c) 1996 The NetBSD Foundation, Inc.
44b2502a3SMike Pritchard.\" All rights reserved.
54b2502a3SMike Pritchard.\"
64b2502a3SMike Pritchard.\" This code is derived from software contributed to The NetBSD Foundation
74b2502a3SMike Pritchard.\" by Paul Kranenburg.
84b2502a3SMike Pritchard.\"
94b2502a3SMike Pritchard.\" Redistribution and use in source and binary forms, with or without
104b2502a3SMike Pritchard.\" modification, are permitted provided that the following conditions
114b2502a3SMike Pritchard.\" are met:
124b2502a3SMike Pritchard.\" 1. Redistributions of source code must retain the above copyright
134b2502a3SMike Pritchard.\"    notice, this list of conditions and the following disclaimer.
144b2502a3SMike Pritchard.\" 2. Redistributions in binary form must reproduce the above copyright
154b2502a3SMike Pritchard.\"    notice, this list of conditions and the following disclaimer in the
164b2502a3SMike Pritchard.\"    documentation and/or other materials provided with the distribution.
174b2502a3SMike Pritchard.\" 3. All advertising materials mentioning features or use of this software
184b2502a3SMike Pritchard.\"    must display the following acknowledgement:
194b2502a3SMike Pritchard.\"        This product includes software developed by the NetBSD
204b2502a3SMike Pritchard.\"        Foundation, Inc. and its contributors.
214b2502a3SMike Pritchard.\" 4. Neither the name of The NetBSD Foundation nor the names of its
224b2502a3SMike Pritchard.\"    contributors may be used to endorse or promote products derived
234b2502a3SMike Pritchard.\"    from this software without specific prior written permission.
244b2502a3SMike Pritchard.\"
254b2502a3SMike Pritchard.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
264b2502a3SMike Pritchard.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
274b2502a3SMike Pritchard.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
284b2502a3SMike Pritchard.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
294b2502a3SMike Pritchard.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
304b2502a3SMike Pritchard.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
314b2502a3SMike Pritchard.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
324b2502a3SMike Pritchard.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
334b2502a3SMike Pritchard.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
344b2502a3SMike Pritchard.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
354b2502a3SMike Pritchard.\" POSSIBILITY OF SUCH DAMAGE.
364b2502a3SMike Pritchard.\"
377f3dea24SPeter Wemm.\" $FreeBSD$
385bf6ab83SNik Clayton.\"
394b2502a3SMike Pritchard.Dd June 15, 1996
404b2502a3SMike Pritchard.Dt PHYSIO 9
413d45e180SRuslan Ermilov.Os
424b2502a3SMike Pritchard.Sh NAME
434b2502a3SMike Pritchard.Nm physio
444b2502a3SMike Pritchard.Nd initiate I/O on raw devices
454b2502a3SMike Pritchard.Sh SYNOPSIS
462e14815bSBruce Evans.Fd #include <sys/param.h>
475770fb13SBruce Evans.Fd #include <sys/systm.h>
482e14815bSBruce Evans.Fd #include <sys/buf.h>
494b2502a3SMike Pritchard.Ft int
505770fb13SBruce Evans.Fn physio "dev_t dev" "struct uio *uio" "int ioflag"
514b2502a3SMike Pritchard.Sh DESCRIPTION
524b2502a3SMike PritchardThe
534b2502a3SMike Pritchard.Fn physio
544b2502a3SMike Pritchardis a helper function typically called from character device read and write
551111b49cSSheldon Hearnroutines to start I/O on a user process buffer.
561111b49cSSheldon HearnIt calls back on the
574b2502a3SMike Pritchardprovided
584b2502a3SMike Pritchard.Fa strategy
594b2502a3SMike Pritchardroutine one or more times to complete the transfer described by
604b2502a3SMike Pritchard.Fa uio .
614b2502a3SMike PritchardThe maximum amount of data to transfer with each call to
624b2502a3SMike Pritchard.Fa strategy
634b2502a3SMike Pritchardis determined by the
644b2502a3SMike Pritchard.Fa minphys
651111b49cSSheldon Hearnroutine.
661111b49cSSheldon HearnSince
674b2502a3SMike Pritchard.Fa uio
684b2502a3SMike Pritchardnormally describes user space addresses,
694b2502a3SMike Pritchard.Fn physio
704b2502a3SMike Pritchardneeds to lock the process into memory.  This is done by setting the
714b2502a3SMike Pritchard.Dv P_PHYSIO
724b2502a3SMike Pritchardflag on the process.
734b2502a3SMike Pritchard.Fn physio
744b2502a3SMike Pritchardalways awaits the completion of the entire requested transfer before
751111b49cSSheldon Hearnreturning, unless an error condition is detected earlier.
761111b49cSSheldon HearnIn all cases,
774b2502a3SMike Pritchardthe buffer passed in
784b2502a3SMike Pritchard.Fa bp
794b2502a3SMike Pritchardis locked (marked as
804b2502a3SMike Pritchard.Dq busy )
814b2502a3SMike Pritchardfor the duration of the entire transfer.
824b2502a3SMike Pritchard.Pp
834b2502a3SMike PritchardA break-down of the arguments follows:
844b2502a3SMike Pritchard.Bl -tag -width indent
854b2502a3SMike Pritchard.It Fa strategy
864b2502a3SMike PritchardThe device strategy routine to call for each chunk of data to initiate
874b2502a3SMike Pritcharddevice I/O.
884b2502a3SMike Pritchard.It Fa bp
891111b49cSSheldon HearnThe buffer to use with the strategy routine.
901111b49cSSheldon HearnThe buffer flags will have
914b2502a3SMike Pritchard.Dv B_BUSY ,
924b2502a3SMike Pritchardand
934b2502a3SMike Pritchard.Dv B_PHYS
941111b49cSSheldon Hearnset when passed to the strategy routine.
951111b49cSSheldon HearnIf
964b2502a3SMike Pritchard.Dv NULL ,
974b2502a3SMike Pritcharda buffer is allocated from a system pool.
984b2502a3SMike Pritchard.It Fa dev
994b2502a3SMike PritchardThe device number identifying the device to interact with.
1004b2502a3SMike Pritchard.It Fa flags
1014b2502a3SMike PritchardDirection of transfer; the only valid settings are
1024b2502a3SMike Pritchard.Dv B_READ
1034b2502a3SMike Pritchardor
1044b2502a3SMike Pritchard.Dv B_WRITE .
1054b2502a3SMike Pritchard.It Fa minphys
1064b2502a3SMike PritchardA device specific routine called to determine the maximum transfer size
1074b2502a3SMike Pritchardthat the device's strategy routine can handle.
1084b2502a3SMike Pritchard.It Fa uio
1094b2502a3SMike PritchardThe description of the entire transfer as requested by the user process.
1104b2502a3SMike PritchardCurrently, the results of passing a
1114b2502a3SMike Pritchard.Fa uio
1124b2502a3SMike Pritchardstructure with the
1134b2502a3SMike Pritchard.Sq uio_segflg
1144b2502a3SMike Pritchardset to anything other than
1154b2502a3SMike Pritchard.Dv UIO_USERSPACE ,
1164b2502a3SMike Pritchardare undefined.
1174b2502a3SMike Pritchard.El
1184b2502a3SMike Pritchard.Sh RETURN VALUES
1194b2502a3SMike PritchardIf successful
1204b2502a3SMike Pritchard.Fn physio
1214b2502a3SMike Pritchardreturns 0.
1224b2502a3SMike Pritchard.Er EFAULT
1234b2502a3SMike Pritchardis returned if the address range described by
1244b2502a3SMike Pritchard.Fa uio
1254b2502a3SMike Pritchardis not accessible by the requesting process.
1264b2502a3SMike Pritchard.Fn physio
1274b2502a3SMike Pritchardwill return any error resulting from calls to the device strategy routine,
1284b2502a3SMike Pritchardby examining the
1294b2502a3SMike Pritchard.Dv B_ERROR
1304b2502a3SMike Pritchardbuffer flag and the
1314b2502a3SMike Pritchard.Va b_error
1321111b49cSSheldon Hearnfield.
1331111b49cSSheldon HearnNote that the actual transfer size may be less than requested by
1344b2502a3SMike Pritchard.Fa uio
1354b2502a3SMike Pritchardif the device signals an
1364b2502a3SMike Pritchard.Dq end of file
1374b2502a3SMike Pritchardcondition.
1384b2502a3SMike Pritchard.Sh SEE ALSO
1394b2502a3SMike Pritchard.Xr read 2 ,
1404b2502a3SMike Pritchard.Xr write 2
141