#include <sys/scsi/scsi.h>
struct buf *scsi_alloc_consistent_buf(struct scsi_address *ap, struct buf *bp, int datalen, ulong bflags, int (*callback )(caddr_t), caddr_t arg);
Solaris DDI specific (Solaris DDI).
For buffers allocated via scsi_alloc_consistent_buf(), and marked with the PKT_CONSISTENT flag via scsi_init_pkt(9F) , the HBA driver must ensure that the data transfer for the command is correctly synchronized before the target driver’s command completion callback is performed.
If bp is NULL , a new buffer header will be allocated using getrbuf(9F) . In addition, if datalen is non-zero, a new buffer will be allocated using ddi_iopb_alloc(9F) .
callback indicates what the allocator routines should do when direct memory access (DMA) resources are not available; the valid values are:
- NULL_FUNC
- Do not wait for resources. Return a NULL pointer.
- SLEEP_FUNC
- Wait indefinitely for resources.
- Other Values
- callback points to a function that is called when resources may become available. callback must return either 0 (indicating that it attempted to allocate resources but failed to do so), in which case it is put back on a list to be called again later, or 1 indicating either success in allocating resources or indicating that it no longer cares for a retry. The last argument arg is supplied to the callback function when it is invoked.
bp = scsi_alloc_consistent_buf(&devp->sd_address, NULL, SENSE_LENGTH, B_READ, SLEEP_FUNC, NULL); rqpkt = scsi_init_pkt(&devp->sd_address, NULL, bp, CDB_GROUP0, 1, 0, PKT_CONSISTENT, SLEEP_FUNC, NULL);
bp = scsi_alloc_consistent_buf(&devp->sd_address, NULL, SUN_INQSIZE, B_READ, canwait, NULL); if (bp) { pkt = scsi_init_pkt(devp->sd_address, NULL, bp, CDB_GROUP0, 1, PP_LEN, PKT_CONSISTENT, canwait, NULL); }