aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Cave-Ayland <mark.cave-ayland@ilande.co.uk>2024-08-29 12:58:46 +0100
committerGerd Hoffmann <kraxel@redhat.com>2024-09-04 12:05:56 +0200
commit2424e4c04aa30d90e85073ea41d18a7845460783 (patch)
tree900b7325d6c8880a7e350cf3537c23cc4bec8d7a
parentec0bc256ae0ea08a32d3e854e329cfbc141f07ad (diff)
downloadseabios-master.zip
seabios-master.tar.gz
seabios-master.tar.bz2
esp-scsi: indicate acceptance of MESSAGE IN phase dataHEADmaster
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.c4
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);