mirror of
https://github.com/LIV2/lide.device.git
synced 2025-12-06 00:32:45 +00:00
Add retries to atapi autosense
This commit is contained in:
parent
655ae7e9ea
commit
7843cf2855
22
atapi.c
22
atapi.c
@ -1224,4 +1224,26 @@ BYTE atapi_translate_play_audio_index(struct SCSICmd *cmd, struct IDEUnit *unit)
|
||||
cmd->scsi_Status = (ret == 0) ? 0 : SCSI_CHECK_CONDITION;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
BYTE atapi_autosense(struct SCSICmd *scsi_command, struct IDEUnit *unit) {
|
||||
UBYTE ret = 0;
|
||||
struct SCSICmd *cmd = MakeSCSICmd(SZ_CDB_12);
|
||||
|
||||
if (cmd != NULL) {
|
||||
cmd->scsi_Command[0] = SCSI_CMD_REQUEST_SENSE;
|
||||
cmd->scsi_Command[4] = scsi_command->scsi_SenseLength & 0xFF;
|
||||
cmd->scsi_Data = (UWORD *)scsi_command->scsi_SenseData;
|
||||
cmd->scsi_Length = scsi_command->scsi_SenseLength;
|
||||
cmd->scsi_Flags = SCSIF_READ;
|
||||
cmd->scsi_CmdLength = 12;
|
||||
|
||||
ret = atapi_packet(cmd,unit);
|
||||
scsi_command->scsi_SenseActual = cmd->scsi_Actual;
|
||||
DeleteSCSICmd(cmd);
|
||||
|
||||
return ret;
|
||||
} else {
|
||||
return TDERR_NoMem;
|
||||
}
|
||||
}
|
||||
1
atapi.h
1
atapi.h
@ -55,4 +55,5 @@ BOOL atapi_get_track_msf(struct SCSI_CD_TOC *toc, int trackNum, struct SCSI_TRAC
|
||||
BYTE atapi_play_track_index(struct IDEUnit *unit, UBYTE start, UBYTE end);
|
||||
BYTE atapi_play_audio_msf(struct IDEUnit *unit, struct SCSI_TRACK_MSF *start, struct SCSI_TRACK_MSF *end);
|
||||
BYTE atapi_translate_play_audio_index(struct SCSICmd *cmd, struct IDEUnit *unit);
|
||||
BYTE atapi_autosense(struct SCSICmd *scsi_command, struct IDEUnit *unit);
|
||||
#endif
|
||||
18
idetask.c
18
idetask.c
@ -306,20 +306,12 @@ static BYTE handle_scsi_command(struct IOStdReq *ioreq) {
|
||||
if (scsi_command->scsi_Flags & (SCSIF_AUTOSENSE)) {
|
||||
|
||||
Trace("Auto sense requested\n");
|
||||
// Request sense with retries
|
||||
for (int retry = 0; retry < 3; retry++) {
|
||||
if ((atapi_autosense(scsi_command,unit)) == 0)
|
||||
break;
|
||||
|
||||
struct SCSICmd *cmd = MakeSCSICmd(SZ_CDB_12);
|
||||
|
||||
if (cmd != NULL) {
|
||||
cmd->scsi_Command[0] = SCSI_CMD_REQUEST_SENSE;
|
||||
cmd->scsi_Command[4] = scsi_command->scsi_SenseLength & 0xFF;
|
||||
cmd->scsi_Data = (UWORD *)scsi_command->scsi_SenseData;
|
||||
cmd->scsi_Length = scsi_command->scsi_SenseLength;
|
||||
cmd->scsi_Flags = SCSIF_READ;
|
||||
cmd->scsi_CmdLength = 12;
|
||||
|
||||
atapi_packet(cmd,unit);
|
||||
scsi_command->scsi_SenseActual = cmd->scsi_Actual;
|
||||
DeleteSCSICmd(cmd);
|
||||
wait_us(unit->itask->tr,250000); // Wait 250ms before retrying
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user