aread(9E)




NAME

     aread - asynchronous read from a device


SYNOPSIS

     #include <sys/uio.h>
     #include <sys/aio_req.h>
     #include <sys/cred.h>
     #include <sys/ddi.h>
     #include <sys/sunddi.h>
     intprefix

     aread(dev_t dev, struct aio_req *aio_reqp, cred_t *cred_p);


INTERFACE LEVEL

     Solaris DDI specific (Solaris  DDI).  This  entry  point  is
     optional. Drivers that do not support an aread() entry point
     should use nodev(9F)


PARAMETERS

     dev   Device number.

     aio_reqp
           Pointer to the aio_req(9S)  structure  that  describes
           where the data is to be stored.

     cred_p
           Pointer to the credential structure.


DESCRIPTION

     The driver's aread() routine is called to perform  an  asyn-
     chronous  read. getminor(9F) can be used to access the minor
     number component of the dev argument. aread()  may  use  the
     credential  structure  pointed  to  by  cred_p  to check for
     superuser access by calling drv_priv(9F). The  aread()  rou-
     tine  may  also  examine  the  uio(9S) structure through the
     aio_req  structure  pointer,  aio_reqp.  aread()  must  call
     aphysio(9F)  with  the  aio_req pointer and a pointer to the
     driver's strategy(9E) routine.

     No fields of the uio(9S) structure pointed  to  by  aio_req,
     other  than  uio_offset  or uio_loffset, may be modified for
     non-seekable devices.


RETURN VALUES

     The aread() routine should return  0  for  success,  or  the
     appropriate error number.


CONTEXT

     This function is called from user context only.


EXAMPLES


     Example 1: The following is an example of  an  aread()  rou-
     tine:

     static int
     xxaread(dev_t dev, struct aio_req *aio, cred_t *cred_p)
     {
          int instance;
          struct xxstate *xsp;
          instance = getminor(dev);
          xsp = ddi_get_soft_state(statep, instance);
          /*Verify soft state structure has been allocated */
          if (xsp == NULL)
               return (ENXIO);
          return (aphysio(xxstrategy, anocancel,
                              dev, B_READ, xxminphys, aio));
     }


SEE ALSO

     read(2), aioread(3AIO), awrite(9E), read(9E),  strategy(9E),
     write(9E),            anocancel(9F),            aphysio(9F),
     ddi_get_soft_state(9F),     drv_priv(9F),      getminor(9F),
     minphys(9F), nodev(9F), aio_req(9S), cb_ops(9S), uio(9S)

     Writing Device Drivers


BUGS

     There is no way other than calling aphysio(9F) to accomplish
     an asynchronous read.


Man(1) output converted with man2html