SCSI_HBA_PKT_ALLOC(9F) Kernel Functions for Drivers 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
illumos architecture specific (illumos 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
target 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
completion 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 structure.
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
allocating resources, and callers should be prepared to deal with
allocation 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
allocated 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 ALSO
tran_init_pkt(9E),
scsi_address(9S),
scsi_pkt(9S) Writing Device Drivers December 11, 2006 SCSI_HBA_PKT_ALLOC(9F)