void prefixbiostart(void *idata, channel_t channel, buf_t *bp);
The I/O request described by bp and the associated physical data buffer are guaranteed to meet the constraints required by the driver for this device instance. The driver informs the core kernel of its buffer constraints with the DI_RBCBP (for B_READ requests) and DI_WBCBP (for B_WRITE requests) subfunctions of the devinfo(D2) entry point routine.
The starting device offset for the I/O transfer
is given by the
bp->b_blkoff members of the
structure and is guaranteed to be non-negative.
The number of bytes to transfer is given by the
If the driver informs the core kernel of its device's size
with the DI_SIZE subfunction of the
the device offset range is guaranteed
not to extend beyond the end of the device.
If the driver does not report its device's size,
the driver itself must check for end-of-media.
It does this by setting the
to the number of bytes beyond the end of the device.
It must also call the
function to fail the transfer
with the ENXIO error number,
unless the B_READ flag is set in the
and the starting device offset is exactly at
the end of the device.
If there is any valid data to transfer, the driver may either start the device I/O immediately or queue it for later processing. The driver then returns from this entry point routine. At a later time, when the I/O has completed or failed, the driver must call the biodone(D3) function to inform the caller of the completion. If the request does not actually require any I/O, the driver may call biodone( ) before returning.
the driver must reflect the status of the transfer
into the buffer header.
It must set the
to the number of bytes not transferred for any reason.
If no bytes were transferred,
bp->b_resid must be set to the initial value of
if all of the data bytes were transferred,
bp->b_resid must be set to 0.
If some portion of the data failed to be transferred
because of some error condition,
funtion to store
the appropriate error number from
in the buffer header.
See the description of the
b_addrtype member of the
structure for a description of
how to access the actual transfer data in the buffer.
d_biostartmember of their drvops(D4) structure.