MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


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, devt dev,
          int rw, void (*mincnt)(struct buf *), struct uio *uio);


     void minphys(struct buf *bp);


INTERFACE LEVEL
     Solaris DI specific (Solaris DI).

PARAMETERS
  physio()
     strat      Pointer to device strategy routine.


     bp         Pointer to a  buf(9S)  structure  describing  the
                transfer.  If  bp  is  set  to NUL then physio()
                allocates one  which  is  automatically  released
                upon completion.


     dev        The device number.


     rw         Read/write flag. This is either BREAD when read-
                ing  from  the device, or BWRITE 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.






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  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 opera-
     tions. 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()  opera-
     tions. Drivers which do not provide their own local mincnt()
     routines should call physio() with minphys().


     minphys() limits the value of  bp->bbcount  to  a  sensible
     default  for  the  capabilities  of the system. Drivers that
     provide 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

WARNINGS
     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()



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



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™