SCSI_HBA_PKT_ALLOC(9F)SCSI_HBA_PKT_ALLOC(9F)NAME
scsi_hba_pkt_alloc, scsi_hba_pkt_free - allocate and free a scsi_pkt
structure
SYNOPSIS
#include <sys/scsi/scsi.h>
struct scsi_pkt *scsi_hba_pkt_alloc(dev_info_t *dip,
struct scsi_address *ap, int cmdlen, int statuslen,
int tgtlen, int hbalen,
int (*callback)(caddr_t arg), caddr_t arg);
void scsi_hba_pkt_free(struct scsi_address *ap, struct scsi_pkt *pkt);
INTERFACE LEVEL
Solaris architecture specific (Solaris DDI).
PARAMETERS
dip
Pointer to a dev_info_t structure, defining the HBA driver
instance.
ap
Pointer to a scsi_address(9S) structure, defining the tar‐
get instance.
cmdlen
Length in bytes to be allocated for the SCSI command
descriptor block (CDB).
statuslen
Length in bytes to be allocated for the SCSI status com‐
pletion block (SCB).
tgtlen
Length in bytes to be allocated for a private data area
for the target driver's exclusive use.
hbalen
Length in bytes to be allocated for a private data area
for the HBA driver's exclusive use.
callback
Indicates what scsi_hba_pkt_alloc() should do when
resources are not available:
NULL_FUNC
Do not wait for resources. Return a NULL
pointer.
SLEEP_FUNC
Wait indefinitely for resources.
arg
Must be NULL.
pkt
A pointer to a scsi_pkt(9S) structure.
DESCRIPTION
For scsi_hba_pkt_alloc():
The scsi_hba_pkt_alloc() function allocates space for a scsi_pkt struc‐
ture. HBA drivers must use this interface when allocating a scsi_pkt
from their tran_init_pkt(9E) entry point.
If callback is NULL_FUNC, scsi_hba_pkt_alloc() may not sleep when allo‐
cating resources, and callers should be prepared to deal with alloca‐
tion failures.
The scsi_hba_pkt_alloc() function copies the scsi_address(9S) structure
pointed to by ap to the pkt_address field in the scsi_pkt(9S).
The scsi_hba_pkt_alloc() function also allocates memory for these
scsi_pkt(9S) data areas, and sets these fields to point to the allo‐
cated memory:
pkt_ha_private
HBA private data area.
pkt_private
Target driver private data area.
pkt_scbp
SCSI status completion block.
pkt_cdbp
SCSI command descriptor block.
For scsi_hba_pkt_free():
The scsi_hba_pkt_free() function frees the space allocated for the
scsi_pkt(9S) structure.
RETURN VALUES
The scsi_hba_pkt_alloc() function returns a pointer to the scsi_pkt
structure, or NULL if no space is available.
CONTEXT
The scsi_hba_pkt_alloc() function can be called from user, interrupt,
or kernel context. Drivers must not allow scsi_hba_pkt_alloc() to sleep
if called from an interrupt routine.
The scsi_hba_pkt_free() function can be called from user, interrupt, or
kernel context.
SEE ALSOtran_init_pkt(9E), scsi_address(9S), scsi_pkt(9S)
Writing Device Drivers
Dec 11, 2006 SCSI_HBA_PKT_ALLOC(9F)