[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 08/10] esp: convert ESPState pdma_cb from a function pointer
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH 08/10] esp: convert ESPState pdma_cb from a function pointer to an integer |
Date: |
Tue, 1 Mar 2022 00:10:24 +0100 |
User-agent: |
Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 |
On 28/2/22 23:25, Mark Cave-Ayland wrote:
This prepares for the inclusion of the current PDMA callback in the migration
stream since the callback is referenced by an integer instead of a function
pointer.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
hw/scsi/esp.c | 47 ++++++++++++++++++++++++++++++-------------
include/hw/scsi/esp.h | 11 +++++++++-
2 files changed, 43 insertions(+), 15 deletions(-)
diff --git a/hw/scsi/esp.c b/hw/scsi/esp.c
index 035fb0d1f6..e8b6f25dbb 100644
--- a/hw/scsi/esp.c
+++ b/hw/scsi/esp.c
@@ -195,14 +195,10 @@ static void esp_pdma_write(ESPState *s, uint8_t val)
esp_set_tc(s, dmalen);
}
-static void esp_set_pdma_cb(ESPState *s, void (*cb)(ESPState *))
+static void esp_set_pdma_cb(ESPState *s, int pdma_cb)
Why signed?
{
- s->pdma_cb = cb;
-}
-
-static void esp_pdma_cb(ESPState *s)
-{
- s->pdma_cb(s);
+ assert(pdma_cb >= 0 && pdma_cb < PDMA_NUM_CBS);
No need to check >=0 if using unsigned.
+ s->pdma_cb = pdma_cb;
}
+static void esp_pdma_cb(ESPState *s)
+{
+ switch (s->pdma_cb) {
+ case PDMA_SATN_PDMA_CB:
+ satn_pdma_cb(s);
+ break;
+ case PDMA_S_WITHOUT_SATN_PDMA_CB:
+ s_without_satn_pdma_cb(s);
+ break;
+ case PDMA_SATN_STOP_PDMA_CB:
+ satn_stop_pdma_cb(s);
+ break;
+ case PDMA_WRITE_RESPONSE_PDMA_CB:
+ write_response_pdma_cb(s);
+ break;
+ case PDMA_DO_DMA_PDMA_CB:
+ do_dma_pdma_cb(s);
+ break;
+ default:
+ g_assert_not_reached();
+ }
+}
+
index b1ec27612f..885ccf4660 100644
--- a/include/hw/scsi/esp.h
+++ b/include/hw/scsi/esp.h
@@ -51,7 +51,7 @@ struct ESPState {
ESPDMAMemoryReadWriteFunc dma_memory_write;
void *dma_opaque;
void (*dma_cb)(ESPState *s);
- void (*pdma_cb)(ESPState *s);
+ uint8_t pdma_cb;
And here you use unsigned :)
uint8_t mig_version_id;
@@ -150,6 +150,15 @@ struct SysBusESPState {
#define TCHI_FAS100A 0x4
#define TCHI_AM53C974 0x12
+/* PDMA callbacks */
+#define PDMA_SATN_PDMA_CB 0
+#define PDMA_S_WITHOUT_SATN_PDMA_CB 1
+#define PDMA_SATN_STOP_PDMA_CB 2
+#define PDMA_WRITE_RESPONSE_PDMA_CB 3
+#define PDMA_DO_DMA_PDMA_CB 4
I'd rather use an enum (and in esp_pdma_cb's switch).
+#define PDMA_NUM_CBS 5
+
void esp_dma_enable(ESPState *s, int irq, int level);
void esp_request_cancelled(SCSIRequest *req);
void esp_command_complete(SCSIRequest *req, size_t resid);
Preferrably using unsigned:
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
- [PATCH 01/10] macfb: add VMStateDescription for MacfbNubusState and MacfbSysBusState, (continued)
- [PATCH 01/10] macfb: add VMStateDescription for MacfbNubusState and MacfbSysBusState, Mark Cave-Ayland, 2022/02/28
- [PATCH 03/10] macfb: increase number of registers saved in MacfbState, Mark Cave-Ayland, 2022/02/28
- [PATCH 04/10] macfb: add VMStateDescription fields for display type and VBL timer, Mark Cave-Ayland, 2022/02/28
- [PATCH 05/10] macfb: set initial value of mode control registers in macfb_common_realize(), Mark Cave-Ayland, 2022/02/28
- [PATCH 06/10] esp: introduce esp_set_pdma_cb() function, Mark Cave-Ayland, 2022/02/28
- [PATCH 07/10] esp: introduce esp_pdma_cb() function, Mark Cave-Ayland, 2022/02/28
- [PATCH 09/10] esp: include the current PDMA callback in the migration stream, Mark Cave-Ayland, 2022/02/28
- [PATCH 08/10] esp: convert ESPState pdma_cb from a function pointer to an integer, Mark Cave-Ayland, 2022/02/28
- Re: [PATCH 08/10] esp: convert ESPState pdma_cb from a function pointer to an integer,
Philippe Mathieu-Daudé <=
- [PATCH 10/10] esp: recreate ESPState current_req after migration, Mark Cave-Ayland, 2022/02/28