aboutsummaryrefslogtreecommitdiff
path: root/hw/scsi
diff options
context:
space:
mode:
authorMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>2024-01-12 12:53:14 +0000
committerMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>2024-02-13 19:37:27 +0000
commit68ef41fb13ac8739cf689bbf731d4a435b3bdfe7 (patch)
tree5958a6c065ea5de37e70f0ec88a7508a1131ba3f /hw/scsi
parentc5bd505524303bd8cb9eaf5d44ca7e1713d27f90 (diff)
downloadqemu-68ef41fb13ac8739cf689bbf731d4a435b3bdfe7.zip
qemu-68ef41fb13ac8739cf689bbf731d4a435b3bdfe7.tar.gz
qemu-68ef41fb13ac8739cf689bbf731d4a435b3bdfe7.tar.bz2
esp.c: ensure that the PDMA callback is called for every device read
Rather than wait for the FIFO to fill up before calling the PDMA callback, push that logic directly into the from_device logic in do_dma_pdma_cb(). Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Tested-by: Helge Deller <deller@gmx.de> Tested-by: Thomas Huth <thuth@redhat.com> Message-Id: <20240112125420.514425-23-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Diffstat (limited to 'hw/scsi')
-rw-r--r--hw/scsi/esp.c8
1 files changed, 3 insertions, 5 deletions
diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c
index 06be9f2..d80a38d 100644
--- a/hw/scsi/esp.c
+++ b/hw/scsi/esp.c
@@ -625,14 +625,14 @@ static void do_dma_pdma_cb(ESPState *s)
return;
} else {
- if (s->async_len == 0) {
+ if (s->async_len == 0 && fifo8_num_used(&s->fifo) < 2) {
/* Defer until the scsi layer has completed */
scsi_req_continue(s->current_req);
s->data_in_ready = false;
return;
}
- if (esp_get_tc(s) == 0) {
+ if (esp_get_tc(s) == 0 && fifo8_num_used(&s->fifo) < 2) {
esp_lower_drq(s);
esp_dma_done(s);
}
@@ -1419,9 +1419,7 @@ static uint64_t sysbus_esp_pdma_read(void *opaque, hwaddr addr,
val = (val << 8) | esp_pdma_read(s);
break;
}
- if (fifo8_num_used(&s->fifo) < 2) {
- esp_pdma_cb(s);
- }
+ esp_pdma_cb(s);
return val;
}