*nix Documentation Project
·  Home
 +   man pages
·  Linux HOWTOs
·  FreeBSD Tips
·  *niX Forums

  man pages->NetBSD man pages -> physio (9)              
Title
Content
Arch
Section
 

PHYSIO(9)

Contents


NAME    [Toc]    [Back]

     physio - initiate I/O on raw devices

SYNOPSIS    [Toc]    [Back]

     int
     physio((*strategy)(struct buf *), struct buf *bp, dev_t dev, int flags,
             (*minphys)(struct buf *), struct uio *uio);

DESCRIPTION    [Toc]    [Back]

     The physio() is a helper function typically called from character device
     read and write routines to start I/O on a user process buffer.  It calls
     back on the provided strategy routine one or more times to complete the
     transfer described by uio.  The maximum amount of data to transfer with
     each call to strategy is determined by the minphys routine.  Since uio
     normally describes user space addresses, physio() needs to lock the
     appropriate data area into memory before each transaction with strategy
     (see uvm_vslock(9) and uvm_vsunlock(9)).  physio() always awaits the completion
 of the entire requested transfer before returning, unless an
     error condition is detected earlier.  In all cases, the buffer passed in
     bp is locked (marked as ``busy'') for the duration of the entire transfer.


     A break-down of the arguments follows:

     strategy
             The device strategy routine to call for each chunk of data to
             initiate device I/O.

     bp      The buffer to use with the strategy routine.  The buffer flags
             will have B_BUSY, B_PHYS, and B_RAW set when passed to the strategy
 routine.  If NULL, a buffer is allocated from a system pool.

     dev     The device number identifying the device to interact with.

     flags   Direction of transfer; the only valid settings are B_READ or
             B_WRITE.

     minphys
             A device specific routine called to determine the maximum transfer
 size that the device's strategy routine can handle.

     uio     The description of the entire transfer as requested by the user
             process.  Currently, the results of passing a uio structure with
             the `uio_segflg' set to anything other than UIO_USERSPACE, are
             undefined.

RETURN VALUES    [Toc]    [Back]

     If successful physio() returns 0.  EFAULT is returned if the address
     range described by uio is not accessible by the requesting process.
     physio() will return any error resulting from calls to the device strategy
 routine, by examining the B_ERROR buffer flag and the `b_error'
     field.  Note that the actual transfer size may be less than requested by
     uio if the device signals an ``end of file'' condition.

SEE ALSO    [Toc]    [Back]

      
      
     read(2), write(2)

BSD                              June 15, 1996                             BSD
[ Back ]
 Similar pages
Name OS Title
DtDndVaDragStart HP-UX initiate a drag
pam_start FreeBSD initiate a PAM transaction
DtDndDragStart HP-UX initiate a drag
connect NetBSD initiate a connection on a socket
t_sndrel HP-UX initiate an orderly release
SSL_connect Tru64 Initiate the TLS/SSL handshake with an TLS/SSL server
connect FreeBSD initiate a connection on a socket
SSL_connect NetBSD initiate the TLS/SSL handshake with an TLS/SSL server
SSL_connect OpenBSD initiate the TLS/SSL handshake with an TLS/SSL server
connect HP-UX initiate a connection on a socket
Copyright © 2004-2005 DeniX Solutions SRL
newsletter delivery service