From 65dca51e23becf894cf6ce0fc704275c15a17521 Mon Sep 17 00:00:00 2001 From: OBattler Date: Mon, 9 Oct 2017 02:35:12 +0200 Subject: [PATCH] The SCSI phase is now set to status at the beginning of cdrom_command() and scsi_hd_command() as well as in scsi_device_target_command(), in order to prevent the SCSI bus being perpetually stuck in command phase in case of error; fixes the DOS Trantor SCSI CD-ROM driver. --- src/cdrom/cdrom.c | 2 ++ src/scsi/scsi_device.c | 1 + src/scsi/scsi_disk.c | 2 ++ 3 files changed, 5 insertions(+) diff --git a/src/cdrom/cdrom.c b/src/cdrom/cdrom.c index 4d1571491..d03b513e0 100644 --- a/src/cdrom/cdrom.c +++ b/src/cdrom/cdrom.c @@ -2366,6 +2366,8 @@ void cdrom_command(uint8_t id, uint8_t *cdb) msf = cdb[1] & 2; cdrom[id].sector_len = 0; + SCSIPhase = SCSI_PHASE_STATUS; + /* This handles the Not Ready/Unit Attention check if it has to be handled at this point. */ if (cdrom_pre_execution_check(id, cdb) == 0) { diff --git a/src/scsi/scsi_device.c b/src/scsi/scsi_device.c index d6207ee9e..c59cd70d6 100644 --- a/src/scsi/scsi_device.c +++ b/src/scsi/scsi_device.c @@ -46,6 +46,7 @@ static void scsi_device_target_command(int lun_type, uint8_t id, uint8_t *cdb) } else { + SCSIPhase = SCSI_PHASE_STATUS; SCSIStatus = SCSI_STATUS_CHECK_CONDITION; } } diff --git a/src/scsi/scsi_disk.c b/src/scsi/scsi_disk.c index 20beb77de..c50c43e2f 100644 --- a/src/scsi/scsi_disk.c +++ b/src/scsi/scsi_disk.c @@ -1441,6 +1441,8 @@ void scsi_hd_command(uint8_t id, uint8_t *cdb) shdc[id].sector_len = 0; + SCSIPhase = SCSI_PHASE_STATUS; + /* This handles the Not Ready/Unit Attention check if it has to be handled at this point. */ if (scsi_hd_pre_execution_check(id, cdb) == 0) {