From 5bfd5aa82301de710e8b10ebd0687156e1fa6500 Mon Sep 17 00:00:00 2001 From: SarahW Date: Sun, 15 Apr 2018 20:38:39 +0100 Subject: [PATCH] Write SCSI status to AHA-1542C/BusLogic CCB and BusLogic malibox following command completion. Fixes Windows 2000 with BusLogic. --- src/scsi_aha1540.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/scsi_aha1540.c b/src/scsi_aha1540.c index 37c09f5..9174ffc 100644 --- a/src/scsi_aha1540.c +++ b/src/scsi_aha1540.c @@ -1619,7 +1619,8 @@ static void process_ccb(aha154x_t *scsi) // pclog("Residue=%08x %x %x %i MBI=%i\n", residue, scsi->ccb.total_data_len, scsi->ccb.bytes_transferred, scsi->ccb.residual, scsi->current_mbi); mem_writeb_phys(scsi->ccb.addr + 0xe, HOST_STATUS_COMMAND_COMPLETE); - + mem_writeb_phys(scsi->ccb.addr + 0xf, scsi->ccb.status); + if (scsi->mb_format == MB_FORMAT_4) { if (scsi->ccb.residual) @@ -1665,7 +1666,7 @@ static void process_ccb(aha154x_t *scsi) if (scsi->ccb.status == STATUS_GOOD) mem_writel_phys(scsi->mba_i + scsi->current_mbi*8 + 4, MBI_CCB_COMPLETE << 24); else - mem_writel_phys(scsi->mba_i + scsi->current_mbi*8 + 4, MBI_CCB_COMPLETE_WITH_ERROR << 24); + mem_writel_phys(scsi->mba_i + scsi->current_mbi*8 + 4, (MBI_CCB_COMPLETE_WITH_ERROR << 24) | (scsi->ccb.status << 8)); } if (!scsi->current_mbo_is_bios) @@ -1713,6 +1714,7 @@ static void process_ccb(aha154x_t *scsi) uint32_t residue = scsi->ccb.total_data_len - scsi->ccb.bytes_transferred; // pclog("residue=%x %x %x\n", residue, scsi->ccb.total_data_len, scsi->ccb.bytes_transferred); mem_writeb_phys(scsi->ccb.addr + 0xe, HOST_STATUS_COMMAND_COMPLETE); + mem_writeb_phys(scsi->ccb.addr + 0xf, scsi->ccb.status); if (scsi->mb_format == MB_FORMAT_4) { @@ -1760,7 +1762,7 @@ static void process_ccb(aha154x_t *scsi) if (scsi->ccb.status == STATUS_GOOD) mem_writel_phys(scsi->mba_i + scsi->current_mbi*8 + 4, MBI_CCB_COMPLETE << 24); else - mem_writel_phys(scsi->mba_i + scsi->current_mbi*8 + 4, MBI_CCB_COMPLETE_WITH_ERROR << 24); + mem_writel_phys(scsi->mba_i + scsi->current_mbi*8 + 4, (MBI_CCB_COMPLETE_WITH_ERROR << 24) | (scsi->ccb.status << 8)); } if (!scsi->current_mbo_is_bios)