get_pktiopb(9F)




NAME

     get_pktiopb, free_pktiopb - allocate/free a SCSI  packet  in
     the iopb map


SYNOPSIS

     #include <sys/scsi/scsi.h>

     struct  scsi_pkt   *get_pktiopb(struct   scsi_address   *ap,
     caddr_t  *datap, int cdblen, int statuslen, int datalen, int
     readflag, int (*callback);

     void free_pktiopb(struct scsi_pkt *pkt, caddr_t  datap,  int
     datalen);


INTERFACE LEVEL

     These       interfaces       are        obsolete.        Use
     scsi_alloc_consistent_buf(9F)  instead of get_pktiopb(). Use
     scsi_free_consistent_buf(9F) instead of free_pktiopb().


PARAMETERS

     ap    Pointer to the target's scsi_address structure.

     datap Pointer to the address of  the  packet,  set  by  this
           function.

     cdblen
           Number of bytes required for the SCSI command descrip-
           tor block (CDB).

     statuslen
           Number of bytes required for the SCSI status area.

     datalen
           Number of bytes required for the data area of the SCSI
           command.

     readflag
           If non-zero, data will be transferred  from  the  SCSI
           target.

     callback
           Pointer  to  a  callback  function,  or  NULL_FUNC  or
           SLEEP_FUNC

     pkt   Pointer to a scsi_pkt(9S) structure.


DESCRIPTION

     get_pktiopb() allocates a  scsi_pkt  structure  that  has  a
     small  data area allocated. It is used by some SCSI commands
     such as REQUEST_SENSE, which involve a small amount of  data
     and require cache-consistent memory for proper operation. It
     uses ddi_iopb_alloc(9F) for allocating  the  data  area  and
     scsi_resalloc(9F) to allocate the packet and DMA resources.

     callback  indicates  what  get_pktiopb()  should   do   when
     resources are not available:

     NULL_FUNC
           Do not wait for resources. Return a NULL pointer.

     SLEEP_FUNC
           Wait indefinitely for resources.

     Other Values
           callback points to a function  which  is  called  when
           resources  may  have  become  available. callback must
           return either 0 (indicating that it attempted to allo-
           cate  resources  but  failed to do so again), 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.

     free_pktiopb() is used for freeing the packet and its  asso-
     ciated resources.


RETURN VALUES

     get_pktiopb() returns  a  pointer  to  the  newly  allocated
     scsi_pkt or a NULL pointer.


CONTEXT

     If callback is SLEEP_FUNC, then this  routine  may  only  be
     called  from  user-level  code.  Otherwise, it may be called
     from either user or interrupt level. The  callback  function
     may not block or call routines that block.

     free_pktiopb() can be called from user or interrupt context.


ATTRIBUTES

     See attributes(5) for a description of the following  attri-
     butes:

     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | Stability Level             | Obsolete                    |
    |_____________________________|_____________________________|


SEE ALSO

     attributes(5),                           ddi_iopb_alloc(9F),
     scsi_alloc_consistent_buf(9F), scsi_free_consistent_buf(9F),
     scsi_pktalloc(9F), scsi_resalloc(9F), scsi_pkt(9S)

     Writing Device Drivers


NOTES

     The get_pktiopb() and free_pktiopb() functions are  obsolete
     and  will  be  discontinued in a future release. These func-
     tions    have    been     replaced     by,     respectively,
     scsi_alloc_consistent_buf(9F)                            and
     scsi_free_consistent_buf(9F).

     get_pktiopb() uses scarce resources. For this reason and its
     obsolescence (see above), its use is discouraged.


Man(1) output converted with man2html