esp_set_tc(s, dmalen);
}
-static void esp_set_pdma_cb(ESPState *s, enum pdma_cb cb)
-{
- s->pdma_cb = cb;
-}
-
static int esp_select(ESPState *s)
{
int target;
s->dma_cb = handle_satn;
return;
}
- esp_set_pdma_cb(s, DO_DMA_PDMA_CB);
+
if (esp_select(s) < 0) {
return;
}
s->dma_cb = handle_s_without_atn;
return;
}
- esp_set_pdma_cb(s, DO_DMA_PDMA_CB);
+
if (esp_select(s) < 0) {
return;
}
s->dma_cb = handle_satn_stop;
return;
}
- esp_set_pdma_cb(s, DO_DMA_PDMA_CB);
+
if (esp_select(s) < 0) {
return;
}
s->cmdfifo_cdb_offset += n;
}
- esp_set_pdma_cb(s, DO_DMA_PDMA_CB);
esp_raise_drq(s);
switch (s->rregs[ESP_CMD]) {
n = MIN(fifo8_num_free(&s->cmdfifo), n);
fifo8_push_all(&s->cmdfifo, buf, n);
- esp_set_pdma_cb(s, DO_DMA_PDMA_CB);
esp_raise_drq(s);
}
trace_esp_handle_ti_cmd(cmdlen);
s->async_len -= n;
s->ti_size += n;
- esp_set_pdma_cb(s, DO_DMA_PDMA_CB);
esp_raise_drq(s);
if (s->async_len == 0 && fifo8_num_used(&s->fifo) < 2) {
s->async_len -= len;
s->ti_size -= len;
esp_set_tc(s, esp_get_tc(s) - len);
- esp_set_pdma_cb(s, DO_DMA_PDMA_CB);
esp_raise_drq(s);
if (s->async_len == 0 && fifo8_num_used(&s->fifo) < 2) {
}
}
-static void esp_pdma_cb(ESPState *s)
-{
- esp_do_dma(s);
-}
-
void esp_command_complete(SCSIRequest *req, size_t resid)
{
ESPState *s = req->hba_private;
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 = (const VMStateField[]) {
- VMSTATE_UINT8(pdma_cb, ESPState),
- VMSTATE_END_OF_LIST()
- }
-};
-
const VMStateDescription vmstate_esp = {
.name = "esp",
.version_id = 6,
VMSTATE_UINT8_TEST(lun, ESPState, esp_is_version_6),
VMSTATE_END_OF_LIST()
},
- .subsections = (const VMStateDescription * const []) {
- &vmstate_esp_pdma,
- NULL
- }
};
static void sysbus_esp_mem_write(void *opaque, hwaddr addr,
esp_pdma_write(s, val);
break;
}
- esp_pdma_cb(s);
+ esp_do_dma(s);
}
static uint64_t sysbus_esp_pdma_read(void *opaque, hwaddr addr,
val = (val << 8) | esp_pdma_read(s);
break;
}
- esp_pdma_cb(s);
+ esp_do_dma(s);
return val;
}