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
Solaris DDI specific (Solaris 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. Possi-
ble 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 direc-
tion 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) rou-
tine 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_umem_lock(9F), ddi_dma_buf_bind_handle(9F),
ddi_umem_unlock(9F), freerbuf(9F), physio(9F), buf(9S)
Man(1) output converted with
man2html