]> xenbits.xensource.com Git - osstest/seabios.git/commitdiff
esp-scsi: terminate DMA transfer when ESP data transfer completes
authorMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Mon, 1 Jan 2024 12:19:42 +0000 (12:19 +0000)
committerGerd Hoffmann <kraxel@redhat.com>
Thu, 25 Jan 2024 09:08:37 +0000 (10:08 +0100)
When the ESP data transfer completes indicated by the STAT_TC flag being set,
terminate the DMA transfer by issuing a DMA IDLE command. Otherwise in the case
where the guest sends a reset followed by an ESP command, the DMA signal remains
enabled and so the next SeaBIOS DMA transfer begins immediately when the next
ESP command is received rather than waiting until the data is ready and the DMA
command is issued.

With this fix it is possible to boot a Windows XP ISO to the installer and
complete a full installation within QEMU directly using SeaBIOS.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Message-ID: <20240101121942.383191-1-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
src/hw/esp-scsi.c

index f19804f49aa7f346b2059d33080d3fb2175ddb79..8612069f99dee5616753784ab97a00af2332c209 100644 (file)
@@ -147,6 +147,8 @@ esp_scsi_process_op(struct disk_op_s *op)
         /* At end of DMA TC is set again -> complete command.  */
         if (state == 1 && (stat & ESP_STAT_TC)) {
             state++;
+            /* Terminate esp_scsi_dma() command */
+            outb(0, iobase + ESP_DMA_CMD);
             continue;
         }