PHYSIO(9)              NetBSD Kernel Developer's Manual              PHYSIO(9)

NAME
     physio -- initiate I/O on raw devices

SYNOPSIS
     int
     physio((*strategy)(struct buf *), struct buf *bp, dev_t dev, int flags,
         (*minphys)(struct buf *), struct uio *uio);

DESCRIPTION
     The physio() is a helper function typically called from character device
     read and write routines to start I/O on a user process buffer.  It calls
     back on the provided strategy routine one or more times to complete the
     transfer described by uio.  The maximum amount of data to transfer with
     each call to strategy is determined by the minphys routine.

     Since uio normally describes user space addresses, physio() needs to lock
     the appropriate data area into memory before each transaction with
     strategy (see uvm_vslock(9) and uvm_vsunlock(9)).  The physio() function
     always awaits the completion of the entire requested transfer before
     returning, unless an error condition is detected earlier.  In all cases,
     the buffer passed in bp is locked (marked as ``busy'') for the duration
     of the entire transfer.

     A break-down of the arguments follows:

     strategy   The device strategy routine to call for each chunk of data to
                initiate device I/O.

     bp         The buffer to use with the strategy routine.  The buffer flags
                will have B_BUSY, B_PHYS, and B_RAW set when passed to the
                strategy routine.  If NULL, a buffer is allocated from a sys-
                tem pool.

     dev        The device number identifying the device to interact with.

     flags      Direction of transfer; the only valid settings are B_READ or
                B_WRITE.

     minphys    A device specific routine called to determine the maximum
                transfer size that the device's strategy routine can handle.

     uio        The description of the entire transfer as requested by the
                user process.  Currently, the results of passing a uio struc-
                ture with the `uio_segflg' set to anything other than
                UIO_USERSPACE, are undefined.

RETURN VALUES
     If successful physio() returns 0.  EFAULT is returned if the address
     range described by uio is not accessible by the requesting process.
     physio() will return any error resulting from calls to the device strat-
     egy routine, by examining the B_ERROR buffer flag and the `b_error'
     field.  Note that the actual transfer size may be less than requested by
     uio if the device signals an ``end of file'' condition.

SEE ALSO
     read(2), write(2)

NetBSD 7.0                      April 13, 2010                      NetBSD 7.0

You can also request any man page by name and (optionally) by section:

Command: 
Section: 
Architecture: 
Collection: 
 

Use the DEFAULT collection to view manual pages for third-party software.


©1994 Man-cgi 1.15, Panagiotis Christias <christia@softlab.ntua.gr>
©1996-2014 Modified for NetBSD by Kimmo Suominen