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 );
  .
  .