Reset SCSI Device Command

Prototype: DWORD SendASPI32Command(LPSRB)

Declaration: LPSRB lpSRB;

The SendASPI32Command function with command code SC_RESET_DEV is used to send a SCSI Bus Device reset to the specified target.

Parameter Description
lpSRB Points to the following SCSI request block

typedef struct {

 BYTE  SRB_Cmd;        // ASPI command code = SC_RESET_DEV
 BYTE  SRB_Status;     // ASPI command status byte
 BYTE  SRB_HaId;       // ASPI host adapter number
 BYTE  SRB_Flags;      // Reserved
 DWORD  SRB_Hdr_Rsvd;  // Reserved
 BYTE  SRB_Target;     // Target's SCSI ID
 BYTE  SRB_Lun;        // Target's LUN number
 BYTE  SRB_Rsvd1[12];  // Reserved for Alignment
 BYTE  SRB_HaStat;     // Host Adapter Status
 BYTE  SRB_TargStat;   // Target Status
 void  *SRB_PostProc;  // Post routine
 void  *SRB_Rsvd2;     // Reserved
 BYTE  SRB_Rsvd3[32];  // Reserved

} SRB_BusDeviceReset, *PSRB_BusDeviceReset;

Table 4-10. Reset SCSI Device Command

Member Description
SRB_Cmd [IN] This field must contain SC_RESET_DEV.
SRB_Status [OUT] This field returns one of the following status:

SS_PENDING SCSI request is in progress.
SS_COMP SCSI/ASPI request has completed without error.
SS_ABORTED SCSI command has been aborted.
SS_ABORT_FAIL SCSI command abort failed.
SS_ERR SCSI command completed with an error.
SS_INVALID_SRB One or more parameters in the SCSI Request Block (SRB) are set incorrectly.
SS_INVALID_PATH_ID SCSI ID and LUN are invalid.

SRB_HaId [IN] This field specifies which installed host adapter the request is intended for. Host adapter numbers are always assigned by the SCSI manager layer beginning with zero.
SRB_Flags [IN] Reserved = 0
SRB_Hdr_Rsvd Reserved = 0
SRB_Target [IN] SCSI ID of target device.
SRB_Lun [IN] Logical Unit Number (LUN) of device. This field is ignored by ASPI for Win32, since SCSI Bus Device resets are done on a per-target basis only.
SRB_HaStat [OUT] Upon completion of the SCSI command, the ASPI manager sets this field with the host adapter status to one of the following values:

HASTAT_OK Host adapter did not detect an error.
HASTAT_TIMEOUT The time allocated for the operation expired.
HASTAT_COMMAND_TIMEOUT SRB expired while waiting to be processed.
HASTAT_SEL_TO Selection of target timed out.
HASTAT_MESSAGE_REJECT While processing SRB, the adapter received a MESSAGE REJECT.
HASTAT_BUS_RESET A bus reset was detected.
HASTAT_PARITY_ERROR A parity error was detected.
HASTAT_REQUEST_SENSE_FAILED The adapter failed in issuing a request sense after a check condition was reported by the target device.
HASTAT_DO_DU Data overrun/underrun.
HASTAT_BUS_FREE Unexpected Bus Free.
HASTAT_PHASE_ERR Target Bus phase sequence failure.

SRB_TargStat [OUT] Upon completion of the SCSI command, the ASPI manager sets this field with the target status as follows:

STATUS_GOOD No target status.
STATUS_CHKCOND Check status (sense data is in SenseArea).
STATUS_BUSY Specified Target/LUN is busy.
STATUS_RESCONF Reservation conflict.

SRB_PostProc [IN] If posting is enabled, ASPI for Win32 will post completion of an ASPI request to this function pointer.

Table 4-11. Return Values from Reset SCSI Device Command

Value Meaning
SS_PENDING SCSI request is in progress.

Example

This example issues a SCSI bus device reset to host adapter #0, target #5.

SRB_BusDeviceReset MySRB;
 DWORD ASPIStatus;
  .
  .
 MySRB.SRB_Header   = SC_RESET_DEV;
 MySRB.SRB_HaId   = 0;
 MySRB.SRB_Flags   = 0;
 MySRB.SRB_Hdr_Rsvd  = 0;
 MySRB.SRB_Target   = 5;
 MySRB.SRB_Lun   = 0;
 ASPIStatus     = SendASPI32Command ( (LPSRB) &MySRB );
  .
  .