esp: consolidate esp_cmdfifo_push() into esp_fifo_push()

Each FIFO currently has its own push functions with the only difference being
the capacity check. The original reason for this was that the fifo8
implementation doesn't have a formal API for retrieving the FIFO capacity,
however there are multiple examples within QEMU where the capacity field is
accessed directly.

Change esp_fifo_push() to access the FIFO capacity directly and then consolidate
esp_cmdfifo_push() into esp_fifo_push().

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Tested-by: Alexander Bulekov <alxndr@bu.edu>
Message-Id: <20210407195801.685-4-mark.cave-ayland@ilande.co.uk>
This commit is contained in:
Mark Cave-Ayland 2021-04-07 20:57:52 +01:00
parent e392255766
commit e5455b8c1c
1 changed files with 8 additions and 19 deletions

View File

@ -98,16 +98,15 @@ void esp_request_cancelled(SCSIRequest *req)
} }
} }
static void esp_fifo_push(ESPState *s, uint8_t val) static void esp_fifo_push(Fifo8 *fifo, uint8_t val)
{ {
if (fifo8_num_used(&s->fifo) == ESP_FIFO_SZ) { if (fifo8_num_used(fifo) == fifo->capacity) {
trace_esp_error_fifo_overrun(); trace_esp_error_fifo_overrun();
return; return;
} }
fifo8_push(&s->fifo, val); fifo8_push(fifo, val);
} }
static uint8_t esp_fifo_pop(ESPState *s) static uint8_t esp_fifo_pop(ESPState *s)
{ {
if (fifo8_is_empty(&s->fifo)) { if (fifo8_is_empty(&s->fifo)) {
@ -117,16 +116,6 @@ static uint8_t esp_fifo_pop(ESPState *s)
return fifo8_pop(&s->fifo); return fifo8_pop(&s->fifo);
} }
static void esp_cmdfifo_push(ESPState *s, uint8_t val)
{
if (fifo8_num_used(&s->cmdfifo) == ESP_CMDFIFO_SZ) {
trace_esp_error_fifo_overrun();
return;
}
fifo8_push(&s->cmdfifo, val);
}
static uint8_t esp_cmdfifo_pop(ESPState *s) static uint8_t esp_cmdfifo_pop(ESPState *s)
{ {
if (fifo8_is_empty(&s->cmdfifo)) { if (fifo8_is_empty(&s->cmdfifo)) {
@ -187,9 +176,9 @@ static void esp_pdma_write(ESPState *s, uint8_t val)
} }
if (s->do_cmd) { if (s->do_cmd) {
esp_cmdfifo_push(s, val); esp_fifo_push(&s->cmdfifo, val);
} else { } else {
esp_fifo_push(s, val); esp_fifo_push(&s->fifo, val);
} }
dmalen--; dmalen--;
@ -645,7 +634,7 @@ static void esp_do_dma(ESPState *s)
*/ */
if (len < esp_get_tc(s) && esp_get_tc(s) <= ESP_FIFO_SZ) { if (len < esp_get_tc(s) && esp_get_tc(s) <= ESP_FIFO_SZ) {
while (fifo8_num_used(&s->fifo) < ESP_FIFO_SZ) { while (fifo8_num_used(&s->fifo) < ESP_FIFO_SZ) {
esp_fifo_push(s, 0); esp_fifo_push(&s->fifo, 0);
len++; len++;
} }
} }
@ -947,9 +936,9 @@ void esp_reg_write(ESPState *s, uint32_t saddr, uint64_t val)
break; break;
case ESP_FIFO: case ESP_FIFO:
if (s->do_cmd) { if (s->do_cmd) {
esp_cmdfifo_push(s, val); esp_fifo_push(&s->cmdfifo, val);
} else { } else {
esp_fifo_push(s, val); esp_fifo_push(&s->fifo, val);
} }
/* Non-DMA transfers raise an interrupt after every byte */ /* Non-DMA transfers raise an interrupt after every byte */