[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v2 09/42] esp: introduce esp_get_tc() and esp_set_tc()
From: |
Mark Cave-Ayland |
Subject: |
[PATCH v2 09/42] esp: introduce esp_get_tc() and esp_set_tc() |
Date: |
Tue, 9 Feb 2021 19:29:45 +0000 |
This simplifies reading and writing the TC register value without having to
manually shift each individual 8-bit value.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
hw/scsi/esp.c | 38 +++++++++++++++++++++++---------------
1 file changed, 23 insertions(+), 15 deletions(-)
diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c
index e82e75d490..3a39450930 100644
--- a/hw/scsi/esp.c
+++ b/hw/scsi/esp.c
@@ -98,6 +98,24 @@ void esp_request_cancelled(SCSIRequest *req)
}
}
+static uint32_t esp_get_tc(ESPState *s)
+{
+ uint32_t dmalen;
+
+ dmalen = s->rregs[ESP_TCLO];
+ dmalen |= s->rregs[ESP_TCMID] << 8;
+ dmalen |= s->rregs[ESP_TCHI] << 16;
+
+ return dmalen;
+}
+
+static void esp_set_tc(ESPState *s, uint32_t dmalen)
+{
+ s->rregs[ESP_TCLO] = dmalen & 0xff;
+ s->rregs[ESP_TCMID] = dmalen >> 8;
+ s->rregs[ESP_TCHI] = dmalen >> 16;
+}
+
static void set_pdma(ESPState *s, enum pdma_origin_id origin,
uint32_t index, uint32_t len)
{
@@ -157,9 +175,7 @@ static uint32_t get_cmd(ESPState *s, uint8_t *buf, uint8_t
buflen)
target = s->wregs[ESP_WBUSID] & BUSID_DID;
if (s->dma) {
- dmalen = s->rregs[ESP_TCLO];
- dmalen |= s->rregs[ESP_TCMID] << 8;
- dmalen |= s->rregs[ESP_TCHI] << 16;
+ dmalen = esp_get_tc(s);
if (dmalen > buflen) {
return 0;
}
@@ -348,9 +364,7 @@ static void esp_dma_done(ESPState *s)
s->rregs[ESP_RINTR] = INTR_BS;
s->rregs[ESP_RSEQ] = 0;
s->rregs[ESP_RFLAGS] = 0;
- s->rregs[ESP_TCLO] = 0;
- s->rregs[ESP_TCMID] = 0;
- s->rregs[ESP_TCHI] = 0;
+ esp_set_tc(s, 0);
esp_raise_irq(s);
}
@@ -536,9 +550,7 @@ static void handle_ti(ESPState *s)
return;
}
- dmalen = s->rregs[ESP_TCLO];
- dmalen |= s->rregs[ESP_TCMID] << 8;
- dmalen |= s->rregs[ESP_TCHI] << 16;
+ dmalen = esp_get_tc(s);
if (dmalen == 0) {
dmalen = 0x10000;
}
@@ -889,9 +901,7 @@ static void sysbus_esp_pdma_write(void *opaque, hwaddr addr,
trace_esp_pdma_write(size);
- dmalen = s->rregs[ESP_TCLO];
- dmalen |= s->rregs[ESP_TCMID] << 8;
- dmalen |= s->rregs[ESP_TCHI] << 16;
+ dmalen = esp_get_tc(s);
if (dmalen == 0 || s->pdma_len == 0) {
return;
}
@@ -908,9 +918,7 @@ static void sysbus_esp_pdma_write(void *opaque, hwaddr addr,
dmalen -= 2;
break;
}
- s->rregs[ESP_TCLO] = dmalen & 0xff;
- s->rregs[ESP_TCMID] = dmalen >> 8;
- s->rregs[ESP_TCHI] = dmalen >> 16;
+ esp_set_tc(s, dmalen);
if (s->pdma_len == 0 && s->pdma_cb) {
esp_lower_drq(s);
s->pdma_cb(s);
--
2.20.1
- [PATCH v2 03/42] esp: QOMify the internal ESP device state, (continued)
- [PATCH v2 03/42] esp: QOMify the internal ESP device state, Mark Cave-Ayland, 2021/02/09
- [PATCH v2 04/42] esp: add vmstate_esp version to embedded ESPState, Mark Cave-Ayland, 2021/02/09
- [PATCH v2 05/42] esp: add trace event when receiving a TI command, Mark Cave-Ayland, 2021/02/09
- [PATCH v2 06/42] esp: fix esp_reg_read() trace event, Mark Cave-Ayland, 2021/02/09
- [PATCH v2 07/42] esp: add PDMA trace events, Mark Cave-Ayland, 2021/02/09
- [PATCH v2 08/42] esp: determine transfer direction directly from SCSI phase, Mark Cave-Ayland, 2021/02/09
- [PATCH v2 09/42] esp: introduce esp_get_tc() and esp_set_tc(),
Mark Cave-Ayland <=
- [PATCH v2 10/42] esp: introduce esp_get_stc(), Mark Cave-Ayland, 2021/02/09
[PATCH v2 11/42] esp: apply transfer length adjustment when STC is zero at TC load time, Mark Cave-Ayland, 2021/02/09
[PATCH v2 12/42] esp: remove dma_counter from ESPState, Mark Cave-Ayland, 2021/02/09