scsi_reset(9F)




NAME

     scsi_reset - reset a SCSI bus or target


SYNOPSIS

     #include <sys/scsi/scsi.h>

     int scsi_reset(struct scsi_address *ap, int level);


INTERFACE LEVEL

     Solaris DDI specific (Solaris DDI).


PARAMETERS

     ap    Pointer to the scsi_address structure.

     level The level of reset required.


DESCRIPTION

     scsi_reset() asks the host adapter driver to reset the  SCSI
     bus  or a SCSI target as specified by level. If level equals
     RESET_ALL, the SCSI bus is reset. If it equals RESET_TARGET,
     ap  is  used  to  determine  the  target to be reset.  If it
     equals RESET_LUN, ap is used to determine the  logical  unit
     to be reset.

     When given the  RESET_LUN  level,  scsi_reset()  can  return
     failure  if  the LOGICAL UNIT RESET message is not supported
     by the target device, or if the underlying HBA  driver  does
     not implement the ability to issue a LOGICAL UNIT RESET mes-
     sage.

     Note that, at the point when scsi_reset() resets the logical
     unit (case RESET_LUN), or the target (case RESET_TARGET), or
     the bus (case RESET_ALL), there might be one or more command
     packets  outstanding.  That  is, packets have been passed to
     scsi_transport(), and queued or  possibly  transported,  but
     the  commands have not been completed and the target comple-
     tion routine has not been called for those packets.

     The successful call to scsi_reset() has the side effect that
     any  such  commands  currently  outstanding  are aborted, at
     which point the packets are marked with  pkt_reason  set  to
     CMD_RESET,  and the appropriate bit -- either STAT_BUS_RESET
     or STAT_DEV_RESET -- is set  in  pkt_statistics.  Once  thus
     appropriately marked, the aborted command packets are passed
     to the target driver command completion routine.

     Also note that,  at  the  moment  that  a  thread  executing
     scsi_reset()  actually  resets  the target or the bus, it is
     possible that  a  second  thread  may  have  already  called
     scsi_transport(), but not yet queued or transported its com-
     mand. In this case the HBA will not yet  have  received  the
     second thread's packet and this packet will not be aborted.


RETURN VALUES

     scsi_reset() returns:

     1     Upon success.

     0     Upon failure.


CONTEXT

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


SEE ALSO

     tran_reset(9E), tran_reset_notify(9E), scsi_abort(9F)

     Writing Device Drivers


Man(1) output converted with man2html