aphysio(9F)




NAME

     aphysio - perform asynchronous physical I/O


SYNOPSIS

     #include <sys/types.h>
     #include <sys/buf.h>
     #include <sys/uio.h>
     #include <sys/aio_req.h>
     #include <sys/ddi.h>
     #include <sys/sunddi.h>

     int     aphysio(int    (*strat)(struct    buf    *),     int
     (*cancel)(struct   buf   *),   dev_t   dev,   int  rw,  void
     (*mincnt)(struct buf *), struct  aio_req *aio_reqp);


PARAMETERS

      strat
           Pointer to device strategy routine.

     cancel
           Pointer to driver cancel routine.  Used  to  cancel  a
           submitted request. The driver must pass the address of
           the function anocancel(9F) because cancellation is not
           supported.

     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.

     aio_reqp
           Pointer to the  aio_req(9S) structure which  describes
           the user I/O request.


INTERFACE LEVEL

     Solaris  DDI specific (Solaris DDI).


DESCRIPTION

     aphysio() performs asynchronous  I/O operations between  the
     device and the address space described by aio_reqp->aio_uio.

     Prior to the start of the transfer,  aphysio() verifies  the
     requested  operation  is  valid.   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.   aphy-
     sio()  does  not  wait  for  each  transfer to complete, but
     returns as soon as the necessary requests have been made.

     aphysio() calls  mincnt to bound the maximum  transfer  unit
     size  to  a sensible default for the  device and the system.
     Drivers which do not provide their own local mincnt  routine
     should call  aphysio() with
      minphys(9F). minphys(9F) is  the  system   mincnt  routine.
     minphys(9F)  ensures  the transfer  size does not exceed any
     system limits.

     If a driver supplies a local  mincnt routine,  this  routine
     should perform the following actions:

        o  If  bp->b_bcount   exceeds   a   device   limit,   set
           bp->b_bcount to a value supported by the device.

        o  Call minphys(9F) to ensure that the  driver  does  not
           circumvent additional system limits.


RETURN VALUES

     aphysio() returns:

     0     Upon success.

     non-zero
           Upon failure.


CONTEXT

     aphysio() can be called from user context only.


SEE ALSO

     aread(9E),    awrite(9E),    strategy(9E),    anocancel(9F),
     biodone(9F),     biowait(9F),    minphys(9F),    physio(9F),
     aio_req(9S), buf(9S), uio(9S)

     Writing Device Drivers


WARNINGS

     It is the driver's responsibility to call  biodone(9F)  when
     the transfer is complete.


BUGS

     Cancellation is not supported in this release.   The address
     of  the  function  anocancel(9F) must be used as the  cancel
     argument.


Man(1) output converted with man2html