DDI_UMEM_IOSETUP(9F) Kernel Functions for Drivers DDI_UMEM_IOSETUP(9F)
NAME
ddi_umem_iosetup - Setup I/O requests to application memory
SYNOPSIS
#include <sys/ddi.h>
#include <sys/sunddi.h>
struct buf *ddi_umem_iosetup(
ddi_umem_cookie_t cookie,off_t off,
size_t
len, int
direction, dev_t
dev, daddr_t
blkno,
int (*iodone) (struct buf *), int
sleepflag);
INTERFACE LEVEL
illumos DDI specific (illumos DDI)
PARAMETERS
cookie The kernel memory cookie allocated by
ddi_umem_lock(9F).
off Offset from the start of the cookie.
len Length of the I/O request in bytes.
direction Must be set to
B_READ for reads from the device or
B_WRITE for writes to the device.
dev Device number
blkno Block number on device.
iodone Specific
biodone(9F) routine.
sleepflag Determines whether caller can sleep for memory.
Possible flags are
DDI_UMEM_SLEEP to allow sleeping
until memory is available, or
DDI_UMEM_NOSLEEP to
return
NULL immediately if memory is not available.
DESCRIPTION
The
ddi_umem_iosetup(9F) function is used by drivers to setup I/O
requests to application memory which has been locked down using
ddi_umem_lock(9F).
The
ddi_umem_iosetup(9F) function returns a pointer to a
buf(9S) structure corresponding to the memory cookie
cookie. Drivers can
setup multiple buffer structures simultaneously active using the same
memory cookie. The
buf(9S) structures can span all or part of the
region represented by the cookie and can overlap each other. The
buf(9S) structure can be passed to
ddi_dma_buf_bind_handle(9F) to
initiate DMA transfers to or from the locked down memory.
The
off parameter specifies the offset from the start of the cookie.
The
len parameter represents the length of region to be mapped by the
buffer. The
direction parameter must be set to either
B_READ or
B_WRITE, to indicate the action that will be performed by the device.
(Note that this direction is in the opposite sense of the VM system's
direction of
DDI_UMEMLOCK_READ and
DDI_UMEMLOCK_WRITE.) The direction
must be compatible with the flags used to create the memory cookie in
ddi_umem_lock(9F). For example, if
ddi_umem_lock() is called with the
flags parameter set to DDI_UMEMLOCK_READ, the
direction parameter in
ddi_umem_iosetup() should be set to
B_WRITE.
The
dev parameter specifies the device to which the buffer is to
perform I/O.The
blkno parameter represents the block number on the
device. It will be assigned to the
b_blkno field of the returned
buffer structure. The
iodone parameter enables the driver to
identify a specific
biodone(9F) routine to be called by the driver
when the I/O is complete. The
sleepflag parameter determines if the
caller can sleep for memory.
DDI_UMEM_SLEEP allocations may sleep
but are guaranteed to succeed.
DDI_UMEM_NOSLEEP allocations do not
sleep but may fail (return
NULL) if memory is currently not
available.
After the I/O has completed and the buffer structure is no longer
needed, the driver calls
freerbuf(9F) to free the buffer structure.
RETURN VALUES
The
ddi_umem_iosetup(9F) function returns a pointer to the
initialized buffer header, or
NULL if no space is available.
CONTEXT
The
ddi_umem_iosetup(9F) function can be called from any context only
if flag is set to
DDI_UMEM_NOSLEEP. If
DDI_UMEM_SLEEP is set,
ddi_umem_iosetup(9F) can be called from user and kernel context only.
SEE ALSO
ddi_dma_buf_bind_handle(9F),
ddi_umem_lock(9F),
freerbuf(9F),
physio(9F),
buf(9S) February 4, 2003 DDI_UMEM_IOSETUP(9F)