[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 74/88] esp.c: handle non-DMA FIFO writes used to terminate DMA com
From: |
Mark Cave-Ayland |
Subject: |
[PULL 74/88] esp.c: handle non-DMA FIFO writes used to terminate DMA commands |
Date: |
Tue, 13 Feb 2024 19:40:38 +0000 |
Certain versions of MacOS send the first 5 bytes of the CDB using DMA and then
send the last byte of the CDB by writing to the FIFO. Update the non-DMA state
machine to detect the end of the CDB and execute the SCSI command using similar
logic as that which already exists for transferring the remainder of the CDB
using the ESP TI command.
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-75-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
hw/scsi/esp.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c
index f9d848171f..aa7dec71e3 100644
--- a/hw/scsi/esp.c
+++ b/hw/scsi/esp.c
@@ -787,6 +787,16 @@ static void esp_do_nodma(ESPState *s)
}
break;
+ case CMD_SEL | CMD_DMA:
+ case CMD_SELATN | CMD_DMA:
+ /* Handle when DMA transfer is terminated by non-DMA FIFO write */
+ if (esp_cdb_length(s) && esp_cdb_length(s) ==
+ fifo8_num_used(&s->cmdfifo) - s->cmdfifo_cdb_offset) {
+ /* Command has been received */
+ do_cmd(s);
+ }
+ break;
+
case CMD_SEL:
case CMD_SELATN:
/* FIFO already contain entire CDB */
--
2.39.2
- [PULL 77/88] esp.c: only transfer non-DMA MESSAGE OUT phase data for specific commands, (continued)
- [PULL 77/88] esp.c: only transfer non-DMA MESSAGE OUT phase data for specific commands, Mark Cave-Ayland, 2024/02/13
- [PULL 55/88] esp.c: always use esp_do_dma() in pdma_cb(), Mark Cave-Ayland, 2024/02/13
- [PULL 85/88] esp.c: rename irq_data IRQ to drq_irq, Mark Cave-Ayland, 2024/02/13
- [PULL 76/88] esp.c: only transfer non-DMA COMMAND phase data for specific commands, Mark Cave-Ayland, 2024/02/13
- [PULL 66/88] esp.c: process non-DMA FIFO writes in esp_do_nodma(), Mark Cave-Ayland, 2024/02/13
- [PULL 63/88] esp.c: remove unneeded ti_cmd field, Mark Cave-Ayland, 2024/02/13
- [PULL 50/88] esp.c: move CMD_TI end of message phase detection to esp_do_dma() and do_dma_pdma_cb(), Mark Cave-Ayland, 2024/02/13
- [PULL 86/88] esp.c: keep track of the DRQ state during DMA, Mark Cave-Ayland, 2024/02/13
- [PULL 61/88] esp.c: remove DATA IN phase logic when reading from FIFO, Mark Cave-Ayland, 2024/02/13
- [PULL 68/88] esp.c: move write_response() non-DMA logic to esp_do_nodma(), Mark Cave-Ayland, 2024/02/13
- [PULL 74/88] esp.c: handle non-DMA FIFO writes used to terminate DMA commands,
Mark Cave-Ayland <=
- [PULL 59/88] esp.c: separate logic based upon ESP command in esp_transfer_data(), Mark Cave-Ayland, 2024/02/13
- [PULL 72/88] esp.c: handle TC underflow for DMA SCSI requests, Mark Cave-Ayland, 2024/02/13
- [PULL 75/88] esp.c: improve ESP_RSEQ logic consolidation, Mark Cave-Ayland, 2024/02/13
- [PULL 84/88] esp.c: implement DMA Transfer Pad command for DATA phases, Mark Cave-Ayland, 2024/02/13
- [PULL 60/88] esp.c: use deferred interrupts for both DATA IN and DATA OUT phases, Mark Cave-Ayland, 2024/02/13
- [PULL 82/88] esp.c: consolidate DMA and PDMA logic in STATUS and MESSAGE IN phases, Mark Cave-Ayland, 2024/02/13
- [PULL 56/88] esp.c: remove unused PDMA callback implementation, Mark Cave-Ayland, 2024/02/13
- [PULL 58/88] esp.c: separate logic based upon ESP command in esp_command_complete(), Mark Cave-Ayland, 2024/02/13
- [PULL 80/88] esp.c: consolidate DMA and PDMA logic in MESSAGE OUT phase, Mark Cave-Ayland, 2024/02/13
- Re: [PULL 00/88] qemu-sparc queue 20240213, Peter Maydell, 2024/02/14