Skip to content

Commit

Permalink
esp: include the current PDMA callback in the migration stream
Browse files Browse the repository at this point in the history
This involves (re)adding a PDMA-specific subsection to hold the reference to the
current PDMA callback.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20220305155530.9265-10-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
  • Loading branch information
mcayland committed Mar 9, 2022
1 parent 77987ef commit eda59b3
Showing 1 changed file with 31 additions and 0 deletions.
31 changes: 31 additions & 0 deletions hw/scsi/esp.c
Expand Up @@ -1209,6 +1209,33 @@ static int esp_post_load(void *opaque, int version_id)
return 0;
}

/*
* PDMA (or pseudo-DMA) is only used on the Macintosh and requires the
* guest CPU to perform the transfers between the SCSI bus and memory
* itself. This is indicated by the dma_memory_read and dma_memory_write
* functions being NULL (in contrast to the ESP PCI device) whilst
* dma_enabled is still set.
*/

static bool esp_pdma_needed(void *opaque)
{
ESPState *s = ESP(opaque);

return s->dma_memory_read == NULL && s->dma_memory_write == NULL &&
s->dma_enabled;
}

static const VMStateDescription vmstate_esp_pdma = {
.name = "esp/pdma",
.version_id = 0,
.minimum_version_id = 0,
.needed = esp_pdma_needed,
.fields = (VMStateField[]) {
VMSTATE_UINT8(pdma_cb, ESPState),
VMSTATE_END_OF_LIST()
}
};

const VMStateDescription vmstate_esp = {
.name = "esp",
.version_id = 6,
Expand Down Expand Up @@ -1243,6 +1270,10 @@ const VMStateDescription vmstate_esp = {
VMSTATE_UINT8_TEST(lun, ESPState, esp_is_version_6),
VMSTATE_END_OF_LIST()
},
.subsections = (const VMStateDescription * []) {
&vmstate_esp_pdma,
NULL
}
};

static void sysbus_esp_mem_write(void *opaque, hwaddr addr,
Expand Down

0 comments on commit eda59b3

Please sign in to comment.