Unix/Linux Go Back    


NetBSD 6.1.5 - man page for physio (netbsd section 9)

Linux & Unix Commands - Search Man Pages
Man Page or Keyword Search:   man
Select Man Page Set:       apropos Keyword Search (sections above)


PHYSIO(9)			  BSD Kernel Developer's Manual 			PHYSIO(9)

NAME
     physio -- initiate I/O on raw devices

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

DESCRIPTION
     The physio() is a helper function typically called from character device read and write rou-
     tines 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)).	The physio() function 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.  Cur-
		rently, the results of passing a uio structure with the 'uio_segflg' set to any-
		thing other than UIO_USERSPACE, are undefined.

RETURN VALUES
     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
     read(2), write(2)

BSD					  April 13, 2010				      BSD
Unix & Linux Commands & Man Pages : ©2000 - 2018 Unix and Linux Forums


All times are GMT -4. The time now is 12:48 AM.