From: Mark Cave-Ayland Date: Fri, 12 Jan 2024 12:52:59 +0000 (+0000) Subject: esp.c: start removal of manual STAT_TC setting when transfer counter reaches zero X-Git-Tag: v9.0.0-rc0~66^2~81 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0c5ae734c2942e1b71eaffab95ea9b7ce974d8db;p=thirdparty%2Fqemu.git esp.c: start removal of manual STAT_TC setting when transfer counter reaches zero This should be exclusively managed by esp_set_tc() rather than being manually set in multiple places. Start by removing the occurrences exclusive to PDMA and command completion which are those that can be currently removed without affecting any test images. Signed-off-by: Mark Cave-Ayland Tested-by: Helge Deller Tested-by: Thomas Huth Message-Id: <20240112125420.514425-8-mark.cave-ayland@ilande.co.uk> Signed-off-by: Mark Cave-Ayland --- diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c index c7b79a29496..e717b2e2168 100644 --- a/hw/scsi/esp.c +++ b/hw/scsi/esp.c @@ -611,11 +611,6 @@ static void do_dma_pdma_cb(ESPState *s) s->async_len -= len; s->ti_size -= len; esp_set_tc(s, esp_get_tc(s) - len); - - if (esp_get_tc(s) == 0) { - /* Indicate transfer to FIFO is complete */ - s->rregs[ESP_RSTAT] |= STAT_TC; - } return; } @@ -720,9 +715,6 @@ static void esp_do_dma(ESPState *s) esp_set_tc(s, esp_get_tc(s) - len); esp_set_pdma_cb(s, DO_DMA_PDMA_CB); esp_raise_drq(s); - - /* Indicate transfer to FIFO is complete */ - s->rregs[ESP_RSTAT] |= STAT_TC; return; } } @@ -870,7 +862,8 @@ void esp_command_complete(SCSIRequest *req, size_t resid) * transfers from the target the last byte is still in the FIFO */ if (s->ti_size == 0) { - s->rregs[ESP_RSTAT] = STAT_TC | STAT_ST; + s->rregs[ESP_RSTAT] &= ~7; + s->rregs[ESP_RSTAT] |= STAT_ST; esp_dma_done(s); esp_lower_drq(s); }