Kernel Functions for Drivers physio(9F)
NAME
physio, minphys - perform physical I/O
SYNOPSIS
#include
#include
#include
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
Solaris DDI specific (Solaris DDI).PARAMETERS
physio()
strat Pointer to device strategy routine. bp Pointer to a buf(9S) structure describing thetransfer. 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 read-
ing 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 theuser I/O request. minphys() bp Pointer to a buf structure.
SunOS 5.11 Last change: 2 Apr 1993 1
Kernel Functions for Drivers physio(9F)
DESCRIPTION
physio() performs unbuffered I/O operations between the dev-
ice dev and the address space described in the uio struc-
ture.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 thenlocks 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 opera-
tions. physio() uses biowait(9F) to block until strat() has
completed each transfer. Upon completion, or detection of anerror, 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() isthe system mincnt() routine for use with physio() opera-
tions. 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 thatprovide their own mincnt() routine should also call min-
phys() 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 Drivers WARNINGSSince physio() calls biowait() to block until each buf
transfer is complete, it is the drivers responsibility tocall biodone(9F) when the transfer is complete, or physio()
SunOS 5.11 Last change: 2 Apr 1993 2
Kernel Functions for Drivers physio(9F)
will block forever.SunOS 5.11 Last change: 2 Apr 1993 3