The existing check for TC == 0 is only valid during a TI command.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
hw/scsi/esp.c | 32 ++++++++++++++++++--------------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c
index f8c20d0584..9f787d12a8 100644
--- a/hw/scsi/esp.c
+++ b/hw/scsi/esp.c
@@ -555,14 +555,16 @@ static void do_dma_pdma_cb(ESPState *s)
}
}
break;
- }
- /* ATN remains asserted until TC == 0 */
- if (esp_get_tc(s) == 0) {
- esp_set_phase(s, STAT_CD);
- s->rregs[ESP_RSEQ] = SEQ_CD;
- s->rregs[ESP_RINTR] |= INTR_BS;
- esp_raise_irq(s);
+ case CMD_TI | CMD_DMA:
+ /* ATN remains asserted until TC == 0 */
+ if (esp_get_tc(s) == 0) {
+ esp_set_phase(s, STAT_CD);
+ s->rregs[ESP_RSEQ] = SEQ_CD;
+ s->rregs[ESP_RINTR] |= INTR_BS;
+ esp_raise_irq(s);
+ }
+ break;
}
break;
@@ -675,14 +677,16 @@ static void esp_do_dma(ESPState *s)
}
}
break;
- }
- /* ATN remains asserted until TC == 0 */
- if (esp_get_tc(s) == 0) {
- esp_set_phase(s, STAT_CD);
- s->rregs[ESP_RSEQ] = SEQ_CD;
- s->rregs[ESP_RINTR] |= INTR_BS;
- esp_raise_irq(s);
+ case CMD_TI | CMD_DMA:
+ /* ATN remains asserted until TC == 0 */
+ if (esp_get_tc(s) == 0) {
+ esp_set_phase(s, STAT_CD);
+ s->rregs[ESP_RSEQ] = SEQ_CD;
+ s->rregs[ESP_RINTR] |= INTR_BS;
+ esp_raise_irq(s);
+ }
+ break;
}
break;
--
2.39.2