Skip to content

Commit

Permalink
esp.c: move write_response() non-DMA logic to esp_do_nodma()
Browse files Browse the repository at this point in the history
This moves the remaining non-DMA STATUS and MESSAGE IN phase logic from
write_response() to esp_do_nodma(). Note that we can also now drop the extra
fifo_reset() which is no longer required.

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-69-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  • Loading branch information
mcayland committed Feb 13, 2024
1 parent d39592f commit 83428f7
Showing 1 changed file with 23 additions and 9 deletions.
32 changes: 23 additions & 9 deletions hw/scsi/esp.c
Original file line number Diff line number Diff line change
Expand Up @@ -392,20 +392,12 @@ static void handle_satn_stop(ESPState *s)

static void write_response(ESPState *s)
{
uint8_t buf[2];

trace_esp_write_response(s->status);

if (s->dma) {
esp_do_dma(s);
} else {
buf[0] = s->status;
buf[1] = 0;

fifo8_reset(&s->fifo);
fifo8_push_all(&s->fifo, buf, 2);
s->rregs[ESP_RFLAGS] = 2;
esp_raise_irq(s);
esp_do_nodma(s);
}
}

Expand Down Expand Up @@ -815,6 +807,28 @@ static void esp_do_nodma(ESPState *s)
s->rregs[ESP_RINTR] |= INTR_BS;
esp_raise_irq(s);
break;

case STAT_ST:
switch (s->rregs[ESP_CMD]) {
case CMD_ICCS:
fifo8_push(&s->fifo, s->status);
esp_set_phase(s, STAT_MI);

/* Process any message in phase data */
esp_do_nodma(s);
break;
}
break;

case STAT_MI:
switch (s->rregs[ESP_CMD]) {
case CMD_ICCS:
fifo8_push(&s->fifo, 0);

esp_raise_irq(s);
break;
}
break;
}
}

Expand Down

0 comments on commit 83428f7

Please sign in to comment.