PHYSIO(9F)              Kernel Functions for Drivers              PHYSIO(9F)
NAME
       physio, minphys - perform physical I/O
SYNOPSIS
       #include <sys/types.h>
       #include <sys/buf.h>
       #include <sys/uio.h>       
int physio(
int(
*strat)(
struct buf *), 
struct buf *bp, 
dev_t dev,            
int rw, 
void (
*mincnt)(
struct buf *), 
struct uio *uio);       
void minphys(
struct buf *bp);
INTERFACE LEVEL
       illumos DDI specific (illumos DDI).
PARAMETERS
   physio()       strat                  Pointer to device strategy routine.       
bp                  Pointer to a 
buf(9S) structure describing the transfer. If                  
bp is set to 
NULL then 
physio() allocates one which is
                  automatically released upon completion.       
dev                  The device number.       
rw                  Read/write flag. This is either 
B_READ when reading from
                  the device, or 
B_WRITE when writing to the device.       
mincnt                  Routine which bounds the maximum transfer unit size.       
uio                  Pointer to the 
uio structure which describes the user 
I/O                  request.   
minphys()       bp              Pointer to a 
buf structure.
DESCRIPTION
       physio() performs unbuffered 
I/O operations between the device 
dev       and the address space described in the 
uio structure.
       Prior to the start of the transfer 
physio() verifies the requested
       operation is valid by checking the protection of the address space
       specified in the 
uio structure. It then locks the pages involved in
       the 
I/O transfer so they can not be paged out. The device strategy
       routine, 
strat(), is then called one or more times to perform the
       physical 
I/O operations. 
physio() uses 
biowait(9F) to block until       
strat() has completed each transfer. Upon completion, or detection of
       an error, 
physio() unlocks the pages and returns the error status.       
physio() uses 
mincnt() to bound the maximum transfer unit size to the
       system, or device, maximum length. 
minphys() is the system 
mincnt()       routine for use with 
physio() operations. Drivers which do not
       provide their own local 
mincnt() routines should call 
physio() with       
minphys().       
minphys() limits the value of 
bp->b_bcount to a sensible default for
       the capabilities of the system. Drivers that provide their own       
mincnt() routine should also call 
minphys() to make sure they do not
       exceed the system limit.
RETURN VALUES
       physio() returns:       
0                   Upon success.       
non-zero                   Upon failure.
CONTEXT
       physio() can be called from user context only.
SEE ALSO
       strategy(9E), 
biodone(9F), 
biowait(9F), 
buf(9S), 
uio(9S)       Writing Device DriversWARNINGS
       Since 
physio() calls 
biowait() to block until each buf transfer is
       complete, it is the drivers responsibility to call 
biodone(9F) when
       the transfer is complete, or 
physio() will block forever.
                                April 2, 1993                     PHYSIO(9F)