diff options
author | Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> | 2024-08-29 12:58:46 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2024-09-04 12:05:56 +0200 |
commit | 2424e4c04aa30d90e85073ea41d18a7845460783 (patch) | |
tree | 900b7325d6c8880a7e350cf3537c23cc4bec8d7a | |
parent | ec0bc256ae0ea08a32d3e854e329cfbc141f07ad (diff) | |
download | seabios-master.zip seabios-master.tar.gz seabios-master.tar.bz2 |
When the target has sent its MESSAGE IN phase data to the initiator, it waits
for the initiator to release the ACK signal before disconnecting from the bus.
Send a MSG_ACC command to the ESP so that the initiator releases the ACK signal
to allow the target to disconnect, and also return the ASC back to the
disconnected state.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Message-ID: <20240829115846.954993-1-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
-rw-r--r-- | src/hw/esp-scsi.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/hw/esp-scsi.c b/src/hw/esp-scsi.c index 8612069..e1bee54 100644 --- a/src/hw/esp-scsi.c +++ b/src/hw/esp-scsi.c @@ -50,6 +50,7 @@ #define ESP_CMD_RESET 0x02 #define ESP_CMD_TI 0x10 #define ESP_CMD_ICCS 0x11 +#define ESP_CMD_MSGACC 0x12 #define ESP_CMD_SELATN 0x42 #define ESP_STAT_DI 0x01 @@ -159,11 +160,12 @@ esp_scsi_process_op(struct disk_op_s *op) continue; } - /* Finally read data from the message in phase. */ + /* Finally read data from the message in phase and accept. */ if (state == 3 && (stat & ESP_STAT_MSG)) { state++; status = inb(iobase + ESP_FIFO); inb(iobase + ESP_FIFO); + outb(ESP_CMD_MSGACC, iobase + ESP_CMD); break; } usleep(5); |