mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'memory-api-20211231' of https://github.com/philmd/qemu into staging
Memory API patches Have various functions from the Memory API: - take a MemTxAttrs argument, - propagate a MemTxResult. # gpg: Signature made Thu 30 Dec 2021 04:52:20 PM PST # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: FAAB E75E 1291 7221 DCFD 6BB2 E3E3 2C2C DEAD C0DE * tag 'memory-api-20211231' of https://github.com/philmd/qemu: (22 commits) pci: Let ld*_pci_dma() propagate MemTxResult pci: Let st*_pci_dma() propagate MemTxResult pci: Let ld*_pci_dma() take MemTxAttrs argument pci: Let st*_pci_dma() take MemTxAttrs argument dma: Let ld*_dma() propagate MemTxResult dma: Let st*_dma() propagate MemTxResult dma: Let ld*_dma() take MemTxAttrs argument dma: Let st*_dma() take MemTxAttrs argument dma: Let dma_buf_rw() propagate MemTxResult dma: Let dma_buf_read() take MemTxAttrs argument dma: Let dma_buf_write() take MemTxAttrs argument dma: Let dma_buf_rw() take MemTxAttrs argument pci: Let pci_dma_rw() take MemTxAttrs argument dma: Have dma_buf_read() / dma_buf_write() take a void pointer dma: Have dma_buf_rw() take a void pointer dma: Let dma_memory_map() take MemTxAttrs argument dma: Let dma_memory_read/write() take MemTxAttrs argument dma: Let dma_memory_rw() take MemTxAttrs argument dma: Let dma_memory_rw_relaxed() take MemTxAttrs argument dma: Let dma_memory_set() take MemTxAttrs argument ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
+7
-6
@@ -185,13 +185,13 @@ static void eth_rx_desc_put(AddressSpace *dma_as, uint32_t addr,
|
||||
cpu_to_le16s(&desc->buffer_size);
|
||||
cpu_to_le32s(&desc->buffer);
|
||||
cpu_to_le32s(&desc->next);
|
||||
dma_memory_write(dma_as, addr, desc, sizeof(*desc));
|
||||
dma_memory_write(dma_as, addr, desc, sizeof(*desc), MEMTXATTRS_UNSPECIFIED);
|
||||
}
|
||||
|
||||
static void eth_rx_desc_get(AddressSpace *dma_as, uint32_t addr,
|
||||
mv88w8618_rx_desc *desc)
|
||||
{
|
||||
dma_memory_read(dma_as, addr, desc, sizeof(*desc));
|
||||
dma_memory_read(dma_as, addr, desc, sizeof(*desc), MEMTXATTRS_UNSPECIFIED);
|
||||
le32_to_cpus(&desc->cmdstat);
|
||||
le16_to_cpus(&desc->bytes);
|
||||
le16_to_cpus(&desc->buffer_size);
|
||||
@@ -215,7 +215,7 @@ static ssize_t eth_receive(NetClientState *nc, const uint8_t *buf, size_t size)
|
||||
eth_rx_desc_get(&s->dma_as, desc_addr, &desc);
|
||||
if ((desc.cmdstat & MP_ETH_RX_OWN) && desc.buffer_size >= size) {
|
||||
dma_memory_write(&s->dma_as, desc.buffer + s->vlan_header,
|
||||
buf, size);
|
||||
buf, size, MEMTXATTRS_UNSPECIFIED);
|
||||
desc.bytes = size + s->vlan_header;
|
||||
desc.cmdstat &= ~MP_ETH_RX_OWN;
|
||||
s->cur_rx[i] = desc.next;
|
||||
@@ -241,13 +241,13 @@ static void eth_tx_desc_put(AddressSpace *dma_as, uint32_t addr,
|
||||
cpu_to_le16s(&desc->bytes);
|
||||
cpu_to_le32s(&desc->buffer);
|
||||
cpu_to_le32s(&desc->next);
|
||||
dma_memory_write(dma_as, addr, desc, sizeof(*desc));
|
||||
dma_memory_write(dma_as, addr, desc, sizeof(*desc), MEMTXATTRS_UNSPECIFIED);
|
||||
}
|
||||
|
||||
static void eth_tx_desc_get(AddressSpace *dma_as, uint32_t addr,
|
||||
mv88w8618_tx_desc *desc)
|
||||
{
|
||||
dma_memory_read(dma_as, addr, desc, sizeof(*desc));
|
||||
dma_memory_read(dma_as, addr, desc, sizeof(*desc), MEMTXATTRS_UNSPECIFIED);
|
||||
le32_to_cpus(&desc->cmdstat);
|
||||
le16_to_cpus(&desc->res);
|
||||
le16_to_cpus(&desc->bytes);
|
||||
@@ -269,7 +269,8 @@ static void eth_send(mv88w8618_eth_state *s, int queue_index)
|
||||
if (desc.cmdstat & MP_ETH_TX_OWN) {
|
||||
len = desc.bytes;
|
||||
if (len < 2048) {
|
||||
dma_memory_read(&s->dma_as, desc.buffer, buf, len);
|
||||
dma_memory_read(&s->dma_as, desc.buffer, buf, len,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
qemu_send_packet(qemu_get_queue(s->nic), buf, len);
|
||||
}
|
||||
desc.cmdstat &= ~MP_ETH_TX_OWN;
|
||||
|
||||
@@ -193,7 +193,8 @@ static int get_pte(dma_addr_t baseaddr, uint32_t index, uint64_t *pte,
|
||||
dma_addr_t addr = baseaddr + index * sizeof(*pte);
|
||||
|
||||
/* TODO: guarantee 64-bit single-copy atomicity */
|
||||
ret = dma_memory_read(&address_space_memory, addr, pte, sizeof(*pte));
|
||||
ret = dma_memory_read(&address_space_memory, addr, pte, sizeof(*pte),
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
|
||||
if (ret != MEMTX_OK) {
|
||||
info->type = SMMU_PTW_ERR_WALK_EABT;
|
||||
|
||||
+9
-5
@@ -102,7 +102,8 @@ static inline MemTxResult queue_read(SMMUQueue *q, void *data)
|
||||
{
|
||||
dma_addr_t addr = Q_CONS_ENTRY(q);
|
||||
|
||||
return dma_memory_read(&address_space_memory, addr, data, q->entry_size);
|
||||
return dma_memory_read(&address_space_memory, addr, data, q->entry_size,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
}
|
||||
|
||||
static MemTxResult queue_write(SMMUQueue *q, void *data)
|
||||
@@ -110,7 +111,8 @@ static MemTxResult queue_write(SMMUQueue *q, void *data)
|
||||
dma_addr_t addr = Q_PROD_ENTRY(q);
|
||||
MemTxResult ret;
|
||||
|
||||
ret = dma_memory_write(&address_space_memory, addr, data, q->entry_size);
|
||||
ret = dma_memory_write(&address_space_memory, addr, data, q->entry_size,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
if (ret != MEMTX_OK) {
|
||||
return ret;
|
||||
}
|
||||
@@ -285,7 +287,8 @@ static int smmu_get_ste(SMMUv3State *s, dma_addr_t addr, STE *buf,
|
||||
|
||||
trace_smmuv3_get_ste(addr);
|
||||
/* TODO: guarantee 64-bit single-copy atomicity */
|
||||
ret = dma_memory_read(&address_space_memory, addr, buf, sizeof(*buf));
|
||||
ret = dma_memory_read(&address_space_memory, addr, buf, sizeof(*buf),
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
if (ret != MEMTX_OK) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"Cannot fetch pte at address=0x%"PRIx64"\n", addr);
|
||||
@@ -306,7 +309,8 @@ static int smmu_get_cd(SMMUv3State *s, STE *ste, uint32_t ssid,
|
||||
|
||||
trace_smmuv3_get_cd(addr);
|
||||
/* TODO: guarantee 64-bit single-copy atomicity */
|
||||
ret = dma_memory_read(&address_space_memory, addr, buf, sizeof(*buf));
|
||||
ret = dma_memory_read(&address_space_memory, addr, buf, sizeof(*buf),
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
if (ret != MEMTX_OK) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"Cannot fetch pte at address=0x%"PRIx64"\n", addr);
|
||||
@@ -411,7 +415,7 @@ static int smmu_find_ste(SMMUv3State *s, uint32_t sid, STE *ste,
|
||||
l1ptr = (dma_addr_t)(strtab_base + l1_ste_offset * sizeof(l1std));
|
||||
/* TODO: guarantee 64-bit single-copy atomicity */
|
||||
ret = dma_memory_read(&address_space_memory, l1ptr, &l1std,
|
||||
sizeof(l1std));
|
||||
sizeof(l1std), MEMTXATTRS_UNSPECIFIED);
|
||||
if (ret != MEMTX_OK) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR,
|
||||
"Could not read L1PTR at 0X%"PRIx64"\n", l1ptr);
|
||||
|
||||
@@ -335,7 +335,7 @@ static void intel_hda_corb_run(IntelHDAState *d)
|
||||
|
||||
rp = (d->corb_rp + 1) & 0xff;
|
||||
addr = intel_hda_addr(d->corb_lbase, d->corb_ubase);
|
||||
verb = ldl_le_pci_dma(&d->pci, addr + 4*rp);
|
||||
ldl_le_pci_dma(&d->pci, addr + 4 * rp, &verb, MEMTXATTRS_UNSPECIFIED);
|
||||
d->corb_rp = rp;
|
||||
|
||||
dprint(d, 2, "%s: [rp 0x%x] verb 0x%08x\n", __func__, rp, verb);
|
||||
@@ -345,6 +345,7 @@ static void intel_hda_corb_run(IntelHDAState *d)
|
||||
|
||||
static void intel_hda_response(HDACodecDevice *dev, bool solicited, uint32_t response)
|
||||
{
|
||||
const MemTxAttrs attrs = MEMTXATTRS_UNSPECIFIED;
|
||||
HDACodecBus *bus = HDA_BUS(dev->qdev.parent_bus);
|
||||
IntelHDAState *d = container_of(bus, IntelHDAState, codecs);
|
||||
hwaddr addr;
|
||||
@@ -367,8 +368,8 @@ static void intel_hda_response(HDACodecDevice *dev, bool solicited, uint32_t res
|
||||
ex = (solicited ? 0 : (1 << 4)) | dev->cad;
|
||||
wp = (d->rirb_wp + 1) & 0xff;
|
||||
addr = intel_hda_addr(d->rirb_lbase, d->rirb_ubase);
|
||||
stl_le_pci_dma(&d->pci, addr + 8*wp, response);
|
||||
stl_le_pci_dma(&d->pci, addr + 8*wp + 4, ex);
|
||||
stl_le_pci_dma(&d->pci, addr + 8 * wp, response, attrs);
|
||||
stl_le_pci_dma(&d->pci, addr + 8 * wp + 4, ex, attrs);
|
||||
d->rirb_wp = wp;
|
||||
|
||||
dprint(d, 2, "%s: [wp 0x%x] response 0x%x, extra 0x%x\n",
|
||||
@@ -394,6 +395,7 @@ static void intel_hda_response(HDACodecDevice *dev, bool solicited, uint32_t res
|
||||
static bool intel_hda_xfer(HDACodecDevice *dev, uint32_t stnr, bool output,
|
||||
uint8_t *buf, uint32_t len)
|
||||
{
|
||||
const MemTxAttrs attrs = MEMTXATTRS_UNSPECIFIED;
|
||||
HDACodecBus *bus = HDA_BUS(dev->qdev.parent_bus);
|
||||
IntelHDAState *d = container_of(bus, IntelHDAState, codecs);
|
||||
hwaddr addr;
|
||||
@@ -427,7 +429,8 @@ static bool intel_hda_xfer(HDACodecDevice *dev, uint32_t stnr, bool output,
|
||||
dprint(d, 3, "dma: entry %d, pos %d/%d, copy %d\n",
|
||||
st->be, st->bp, st->bpl[st->be].len, copy);
|
||||
|
||||
pci_dma_rw(&d->pci, st->bpl[st->be].addr + st->bp, buf, copy, !output);
|
||||
pci_dma_rw(&d->pci, st->bpl[st->be].addr + st->bp, buf, copy, !output,
|
||||
attrs);
|
||||
st->lpib += copy;
|
||||
st->bp += copy;
|
||||
buf += copy;
|
||||
@@ -450,7 +453,7 @@ static bool intel_hda_xfer(HDACodecDevice *dev, uint32_t stnr, bool output,
|
||||
if (d->dp_lbase & 0x01) {
|
||||
s = st - d->st;
|
||||
addr = intel_hda_addr(d->dp_lbase & ~0x01, d->dp_ubase);
|
||||
stl_le_pci_dma(&d->pci, addr + 8*s, st->lpib);
|
||||
stl_le_pci_dma(&d->pci, addr + 8 * s, st->lpib, attrs);
|
||||
}
|
||||
dprint(d, 3, "dma: --\n");
|
||||
|
||||
|
||||
@@ -57,7 +57,8 @@ static void generic_loader_reset(void *opaque)
|
||||
|
||||
if (s->data_len) {
|
||||
assert(s->data_len < sizeof(s->data));
|
||||
dma_memory_write(s->cpu->as, s->addr, &s->data, s->data_len);
|
||||
dma_memory_write(s->cpu->as, s->addr, &s->data, s->data_len,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -814,8 +814,9 @@ int virtio_gpu_create_mapping_iov(VirtIOGPU *g,
|
||||
|
||||
do {
|
||||
len = l;
|
||||
map = dma_memory_map(VIRTIO_DEVICE(g)->dma_as,
|
||||
a, &len, DMA_DIRECTION_TO_DEVICE);
|
||||
map = dma_memory_map(VIRTIO_DEVICE(g)->dma_as, a, &len,
|
||||
DMA_DIRECTION_TO_DEVICE,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
if (!map) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "%s: failed to map MMIO memory for"
|
||||
" element %d\n", __func__, e);
|
||||
@@ -1252,8 +1253,9 @@ static int virtio_gpu_load(QEMUFile *f, void *opaque, size_t size,
|
||||
for (i = 0; i < res->iov_cnt; i++) {
|
||||
hwaddr len = res->iov[i].iov_len;
|
||||
res->iov[i].iov_base =
|
||||
dma_memory_map(VIRTIO_DEVICE(g)->dma_as,
|
||||
res->addrs[i], &len, DMA_DIRECTION_TO_DEVICE);
|
||||
dma_memory_map(VIRTIO_DEVICE(g)->dma_as, res->addrs[i], &len,
|
||||
DMA_DIRECTION_TO_DEVICE,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
|
||||
if (!res->iov[i].iov_base || len != res->iov[i].iov_len) {
|
||||
/* Clean up the half-a-mapping we just created... */
|
||||
|
||||
+8
-4
@@ -1111,7 +1111,8 @@ static inline const PL330InsnDesc *pl330_fetch_insn(PL330Chan *ch)
|
||||
uint8_t opcode;
|
||||
int i;
|
||||
|
||||
dma_memory_read(ch->parent->mem_as, ch->pc, &opcode, 1);
|
||||
dma_memory_read(ch->parent->mem_as, ch->pc, &opcode, 1,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
for (i = 0; insn_desc[i].size; i++) {
|
||||
if ((opcode & insn_desc[i].opmask) == insn_desc[i].opcode) {
|
||||
return &insn_desc[i];
|
||||
@@ -1125,7 +1126,8 @@ static inline void pl330_exec_insn(PL330Chan *ch, const PL330InsnDesc *insn)
|
||||
uint8_t buf[PL330_INSN_MAXSIZE];
|
||||
|
||||
assert(insn->size <= PL330_INSN_MAXSIZE);
|
||||
dma_memory_read(ch->parent->mem_as, ch->pc, buf, insn->size);
|
||||
dma_memory_read(ch->parent->mem_as, ch->pc, buf, insn->size,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
insn->exec(ch, buf[0], &buf[1], insn->size - 1);
|
||||
}
|
||||
|
||||
@@ -1189,7 +1191,8 @@ static int pl330_exec_cycle(PL330Chan *channel)
|
||||
if (q != NULL && q->len <= pl330_fifo_num_free(&s->fifo)) {
|
||||
int len = q->len - (q->addr & (q->len - 1));
|
||||
|
||||
dma_memory_read(s->mem_as, q->addr, buf, len);
|
||||
dma_memory_read(s->mem_as, q->addr, buf, len,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
trace_pl330_exec_cycle(q->addr, len);
|
||||
if (trace_event_get_state_backends(TRACE_PL330_HEXDUMP)) {
|
||||
pl330_hexdump(buf, len);
|
||||
@@ -1220,7 +1223,8 @@ static int pl330_exec_cycle(PL330Chan *channel)
|
||||
fifo_res = pl330_fifo_get(&s->fifo, buf, len, q->tag);
|
||||
}
|
||||
if (fifo_res == PL330_FIFO_OK || q->z) {
|
||||
dma_memory_write(s->mem_as, q->addr, buf, len);
|
||||
dma_memory_write(s->mem_as, q->addr, buf, len,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
trace_pl330_exec_cycle(q->addr, len);
|
||||
if (trace_event_get_state_backends(TRACE_PL330_HEXDUMP)) {
|
||||
pl330_hexdump(buf, len);
|
||||
|
||||
+10
-6
@@ -81,11 +81,11 @@ void ledma_memory_read(void *opaque, hwaddr addr,
|
||||
addr |= s->dmaregs[3];
|
||||
trace_ledma_memory_read(addr, len);
|
||||
if (do_bswap) {
|
||||
dma_memory_read(&is->iommu_as, addr, buf, len);
|
||||
dma_memory_read(&is->iommu_as, addr, buf, len, MEMTXATTRS_UNSPECIFIED);
|
||||
} else {
|
||||
addr &= ~1;
|
||||
len &= ~1;
|
||||
dma_memory_read(&is->iommu_as, addr, buf, len);
|
||||
dma_memory_read(&is->iommu_as, addr, buf, len, MEMTXATTRS_UNSPECIFIED);
|
||||
for(i = 0; i < len; i += 2) {
|
||||
bswap16s((uint16_t *)(buf + i));
|
||||
}
|
||||
@@ -103,7 +103,8 @@ void ledma_memory_write(void *opaque, hwaddr addr,
|
||||
addr |= s->dmaregs[3];
|
||||
trace_ledma_memory_write(addr, len);
|
||||
if (do_bswap) {
|
||||
dma_memory_write(&is->iommu_as, addr, buf, len);
|
||||
dma_memory_write(&is->iommu_as, addr, buf, len,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
} else {
|
||||
addr &= ~1;
|
||||
len &= ~1;
|
||||
@@ -114,7 +115,8 @@ void ledma_memory_write(void *opaque, hwaddr addr,
|
||||
for(i = 0; i < l; i += 2) {
|
||||
tmp_buf[i >> 1] = bswap16(*(uint16_t *)(buf + i));
|
||||
}
|
||||
dma_memory_write(&is->iommu_as, addr, tmp_buf, l);
|
||||
dma_memory_write(&is->iommu_as, addr, tmp_buf, l,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
len -= l;
|
||||
buf += l;
|
||||
addr += l;
|
||||
@@ -148,7 +150,8 @@ void espdma_memory_read(void *opaque, uint8_t *buf, int len)
|
||||
IOMMUState *is = (IOMMUState *)s->iommu;
|
||||
|
||||
trace_espdma_memory_read(s->dmaregs[1], len);
|
||||
dma_memory_read(&is->iommu_as, s->dmaregs[1], buf, len);
|
||||
dma_memory_read(&is->iommu_as, s->dmaregs[1], buf, len,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
s->dmaregs[1] += len;
|
||||
}
|
||||
|
||||
@@ -158,7 +161,8 @@ void espdma_memory_write(void *opaque, uint8_t *buf, int len)
|
||||
IOMMUState *is = (IOMMUState *)s->iommu;
|
||||
|
||||
trace_espdma_memory_write(s->dmaregs[1], len);
|
||||
dma_memory_write(&is->iommu_as, s->dmaregs[1], buf, len);
|
||||
dma_memory_write(&is->iommu_as, s->dmaregs[1], buf, len,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
s->dmaregs[1] += len;
|
||||
}
|
||||
|
||||
|
||||
@@ -161,12 +161,14 @@ static void xlnx_zynq_devcfg_dma_go(XlnxZynqDevcfg *s)
|
||||
btt = MIN(btt, dmah->dest_len);
|
||||
}
|
||||
DB_PRINT("reading %x bytes from %x\n", btt, dmah->src_addr);
|
||||
dma_memory_read(&address_space_memory, dmah->src_addr, buf, btt);
|
||||
dma_memory_read(&address_space_memory, dmah->src_addr, buf, btt,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
dmah->src_len -= btt;
|
||||
dmah->src_addr += btt;
|
||||
if (loopback && (dmah->src_len || dmah->dest_len)) {
|
||||
DB_PRINT("writing %x bytes from %x\n", btt, dmah->dest_addr);
|
||||
dma_memory_write(&address_space_memory, dmah->dest_addr, buf, btt);
|
||||
dma_memory_write(&address_space_memory, dmah->dest_addr, buf, btt,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
dmah->dest_len -= btt;
|
||||
dmah->dest_addr += btt;
|
||||
}
|
||||
|
||||
+6
-4
@@ -652,7 +652,7 @@ size_t xlnx_dpdma_start_operation(XlnxDPDMAState *s, uint8_t channel,
|
||||
}
|
||||
|
||||
if (dma_memory_read(&address_space_memory, desc_addr, &desc,
|
||||
sizeof(DPDMADescriptor))) {
|
||||
sizeof(DPDMADescriptor), MEMTXATTRS_UNSPECIFIED)) {
|
||||
s->registers[DPDMA_EISR] |= ((1 << 1) << channel);
|
||||
xlnx_dpdma_update_irq(s);
|
||||
s->operation_finished[channel] = true;
|
||||
@@ -708,7 +708,8 @@ size_t xlnx_dpdma_start_operation(XlnxDPDMAState *s, uint8_t channel,
|
||||
if (dma_memory_read(&address_space_memory,
|
||||
source_addr[0],
|
||||
&s->data[channel][ptr],
|
||||
line_size)) {
|
||||
line_size,
|
||||
MEMTXATTRS_UNSPECIFIED)) {
|
||||
s->registers[DPDMA_ISR] |= ((1 << 12) << channel);
|
||||
xlnx_dpdma_update_irq(s);
|
||||
DPRINTF("Can't get data.\n");
|
||||
@@ -736,7 +737,8 @@ size_t xlnx_dpdma_start_operation(XlnxDPDMAState *s, uint8_t channel,
|
||||
if (dma_memory_read(&address_space_memory,
|
||||
source_addr[frag],
|
||||
&(s->data[channel][ptr]),
|
||||
fragment_len)) {
|
||||
fragment_len,
|
||||
MEMTXATTRS_UNSPECIFIED)) {
|
||||
s->registers[DPDMA_ISR] |= ((1 << 12) << channel);
|
||||
xlnx_dpdma_update_irq(s);
|
||||
DPRINTF("Can't get data.\n");
|
||||
@@ -754,7 +756,7 @@ size_t xlnx_dpdma_start_operation(XlnxDPDMAState *s, uint8_t channel,
|
||||
DPRINTF("update the descriptor with the done flag set.\n");
|
||||
xlnx_dpdma_desc_set_done(&desc);
|
||||
dma_memory_write(&address_space_memory, desc_addr, &desc,
|
||||
sizeof(DPDMADescriptor));
|
||||
sizeof(DPDMADescriptor), MEMTXATTRS_UNSPECIFIED);
|
||||
}
|
||||
|
||||
if (xlnx_dpdma_desc_completion_interrupt(&desc)) {
|
||||
|
||||
+5
-3
@@ -373,7 +373,8 @@ static ssize_t gpadl_iter_io(GpadlIter *iter, void *buf, uint32_t len)
|
||||
|
||||
maddr = (iter->gpadl->gfns[idx] << TARGET_PAGE_BITS) | off_in_page;
|
||||
|
||||
iter->map = dma_memory_map(iter->as, maddr, &mlen, iter->dir);
|
||||
iter->map = dma_memory_map(iter->as, maddr, &mlen, iter->dir,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
if (mlen != pgleft) {
|
||||
dma_memory_unmap(iter->as, iter->map, mlen, iter->dir, 0);
|
||||
iter->map = NULL;
|
||||
@@ -490,7 +491,8 @@ int vmbus_map_sgl(VMBusChanReq *req, DMADirection dir, struct iovec *iov,
|
||||
goto err;
|
||||
}
|
||||
|
||||
iov[ret_cnt].iov_base = dma_memory_map(sgl->as, a, &l, dir);
|
||||
iov[ret_cnt].iov_base = dma_memory_map(sgl->as, a, &l, dir,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
if (!l) {
|
||||
ret = -EFAULT;
|
||||
goto err;
|
||||
@@ -566,7 +568,7 @@ static vmbus_ring_buffer *ringbuf_map_hdr(VMBusRingBufCommon *ringbuf)
|
||||
dma_addr_t mlen = sizeof(*rb);
|
||||
|
||||
rb = dma_memory_map(ringbuf->as, ringbuf->rb_addr, &mlen,
|
||||
DMA_DIRECTION_FROM_DEVICE);
|
||||
DMA_DIRECTION_FROM_DEVICE, MEMTXATTRS_UNSPECIFIED);
|
||||
if (mlen != sizeof(*rb)) {
|
||||
dma_memory_unmap(ringbuf->as, rb, mlen,
|
||||
DMA_DIRECTION_FROM_DEVICE, 0);
|
||||
|
||||
+9
-7
@@ -181,7 +181,7 @@ static void amdvi_log_event(AMDVIState *s, uint64_t *evt)
|
||||
}
|
||||
|
||||
if (dma_memory_write(&address_space_memory, s->evtlog + s->evtlog_tail,
|
||||
evt, AMDVI_EVENT_LEN)) {
|
||||
evt, AMDVI_EVENT_LEN, MEMTXATTRS_UNSPECIFIED)) {
|
||||
trace_amdvi_evntlog_fail(s->evtlog, s->evtlog_tail);
|
||||
}
|
||||
|
||||
@@ -376,7 +376,8 @@ static void amdvi_completion_wait(AMDVIState *s, uint64_t *cmd)
|
||||
}
|
||||
if (extract64(cmd[0], 0, 1)) {
|
||||
if (dma_memory_write(&address_space_memory, addr, &data,
|
||||
AMDVI_COMPLETION_DATA_SIZE)) {
|
||||
AMDVI_COMPLETION_DATA_SIZE,
|
||||
MEMTXATTRS_UNSPECIFIED)) {
|
||||
trace_amdvi_completion_wait_fail(addr);
|
||||
}
|
||||
}
|
||||
@@ -502,7 +503,7 @@ static void amdvi_cmdbuf_exec(AMDVIState *s)
|
||||
uint64_t cmd[2];
|
||||
|
||||
if (dma_memory_read(&address_space_memory, s->cmdbuf + s->cmdbuf_head,
|
||||
cmd, AMDVI_COMMAND_SIZE)) {
|
||||
cmd, AMDVI_COMMAND_SIZE, MEMTXATTRS_UNSPECIFIED)) {
|
||||
trace_amdvi_command_read_fail(s->cmdbuf, s->cmdbuf_head);
|
||||
amdvi_log_command_error(s, s->cmdbuf + s->cmdbuf_head);
|
||||
return;
|
||||
@@ -836,7 +837,7 @@ static bool amdvi_get_dte(AMDVIState *s, int devid, uint64_t *entry)
|
||||
uint32_t offset = devid * AMDVI_DEVTAB_ENTRY_SIZE;
|
||||
|
||||
if (dma_memory_read(&address_space_memory, s->devtab + offset, entry,
|
||||
AMDVI_DEVTAB_ENTRY_SIZE)) {
|
||||
AMDVI_DEVTAB_ENTRY_SIZE, MEMTXATTRS_UNSPECIFIED)) {
|
||||
trace_amdvi_dte_get_fail(s->devtab, offset);
|
||||
/* log error accessing dte */
|
||||
amdvi_log_devtab_error(s, devid, s->devtab + offset, 0);
|
||||
@@ -881,7 +882,8 @@ static inline uint64_t amdvi_get_pte_entry(AMDVIState *s, uint64_t pte_addr,
|
||||
{
|
||||
uint64_t pte;
|
||||
|
||||
if (dma_memory_read(&address_space_memory, pte_addr, &pte, sizeof(pte))) {
|
||||
if (dma_memory_read(&address_space_memory, pte_addr,
|
||||
&pte, sizeof(pte), MEMTXATTRS_UNSPECIFIED)) {
|
||||
trace_amdvi_get_pte_hwerror(pte_addr);
|
||||
amdvi_log_pagetab_error(s, devid, pte_addr, 0);
|
||||
pte = 0;
|
||||
@@ -1048,7 +1050,7 @@ static int amdvi_get_irte(AMDVIState *s, MSIMessage *origin, uint64_t *dte,
|
||||
trace_amdvi_ir_irte(irte_root, offset);
|
||||
|
||||
if (dma_memory_read(&address_space_memory, irte_root + offset,
|
||||
irte, sizeof(*irte))) {
|
||||
irte, sizeof(*irte), MEMTXATTRS_UNSPECIFIED)) {
|
||||
trace_amdvi_ir_err("failed to get irte");
|
||||
return -AMDVI_IR_GET_IRTE;
|
||||
}
|
||||
@@ -1108,7 +1110,7 @@ static int amdvi_get_irte_ga(AMDVIState *s, MSIMessage *origin, uint64_t *dte,
|
||||
trace_amdvi_ir_irte(irte_root, offset);
|
||||
|
||||
if (dma_memory_read(&address_space_memory, irte_root + offset,
|
||||
irte, sizeof(*irte))) {
|
||||
irte, sizeof(*irte), MEMTXATTRS_UNSPECIFIED)) {
|
||||
trace_amdvi_ir_err("failed to get irte_ga");
|
||||
return -AMDVI_IR_GET_IRTE;
|
||||
}
|
||||
|
||||
+17
-11
@@ -569,7 +569,8 @@ static int vtd_get_root_entry(IntelIOMMUState *s, uint8_t index,
|
||||
dma_addr_t addr;
|
||||
|
||||
addr = s->root + index * sizeof(*re);
|
||||
if (dma_memory_read(&address_space_memory, addr, re, sizeof(*re))) {
|
||||
if (dma_memory_read(&address_space_memory, addr,
|
||||
re, sizeof(*re), MEMTXATTRS_UNSPECIFIED)) {
|
||||
re->lo = 0;
|
||||
return -VTD_FR_ROOT_TABLE_INV;
|
||||
}
|
||||
@@ -602,7 +603,8 @@ static int vtd_get_context_entry_from_root(IntelIOMMUState *s,
|
||||
}
|
||||
|
||||
addr = addr + index * ce_size;
|
||||
if (dma_memory_read(&address_space_memory, addr, ce, ce_size)) {
|
||||
if (dma_memory_read(&address_space_memory, addr,
|
||||
ce, ce_size, MEMTXATTRS_UNSPECIFIED)) {
|
||||
return -VTD_FR_CONTEXT_TABLE_INV;
|
||||
}
|
||||
|
||||
@@ -639,8 +641,8 @@ static uint64_t vtd_get_slpte(dma_addr_t base_addr, uint32_t index)
|
||||
assert(index < VTD_SL_PT_ENTRY_NR);
|
||||
|
||||
if (dma_memory_read(&address_space_memory,
|
||||
base_addr + index * sizeof(slpte), &slpte,
|
||||
sizeof(slpte))) {
|
||||
base_addr + index * sizeof(slpte),
|
||||
&slpte, sizeof(slpte), MEMTXATTRS_UNSPECIFIED)) {
|
||||
slpte = (uint64_t)-1;
|
||||
return slpte;
|
||||
}
|
||||
@@ -704,7 +706,8 @@ static int vtd_get_pdire_from_pdir_table(dma_addr_t pasid_dir_base,
|
||||
index = VTD_PASID_DIR_INDEX(pasid);
|
||||
entry_size = VTD_PASID_DIR_ENTRY_SIZE;
|
||||
addr = pasid_dir_base + index * entry_size;
|
||||
if (dma_memory_read(&address_space_memory, addr, pdire, entry_size)) {
|
||||
if (dma_memory_read(&address_space_memory, addr,
|
||||
pdire, entry_size, MEMTXATTRS_UNSPECIFIED)) {
|
||||
return -VTD_FR_PASID_TABLE_INV;
|
||||
}
|
||||
|
||||
@@ -728,7 +731,8 @@ static int vtd_get_pe_in_pasid_leaf_table(IntelIOMMUState *s,
|
||||
index = VTD_PASID_TABLE_INDEX(pasid);
|
||||
entry_size = VTD_PASID_ENTRY_SIZE;
|
||||
addr = addr + index * entry_size;
|
||||
if (dma_memory_read(&address_space_memory, addr, pe, entry_size)) {
|
||||
if (dma_memory_read(&address_space_memory, addr,
|
||||
pe, entry_size, MEMTXATTRS_UNSPECIFIED)) {
|
||||
return -VTD_FR_PASID_TABLE_INV;
|
||||
}
|
||||
|
||||
@@ -2275,7 +2279,8 @@ static bool vtd_get_inv_desc(IntelIOMMUState *s,
|
||||
uint32_t dw = s->iq_dw ? 32 : 16;
|
||||
dma_addr_t addr = base_addr + offset * dw;
|
||||
|
||||
if (dma_memory_read(&address_space_memory, addr, inv_desc, dw)) {
|
||||
if (dma_memory_read(&address_space_memory, addr,
|
||||
inv_desc, dw, MEMTXATTRS_UNSPECIFIED)) {
|
||||
error_report_once("Read INV DESC failed.");
|
||||
return false;
|
||||
}
|
||||
@@ -2308,8 +2313,9 @@ static bool vtd_process_wait_desc(IntelIOMMUState *s, VTDInvDesc *inv_desc)
|
||||
dma_addr_t status_addr = inv_desc->hi;
|
||||
trace_vtd_inv_desc_wait_sw(status_addr, status_data);
|
||||
status_data = cpu_to_le32(status_data);
|
||||
if (dma_memory_write(&address_space_memory, status_addr, &status_data,
|
||||
sizeof(status_data))) {
|
||||
if (dma_memory_write(&address_space_memory, status_addr,
|
||||
&status_data, sizeof(status_data),
|
||||
MEMTXATTRS_UNSPECIFIED)) {
|
||||
trace_vtd_inv_desc_wait_write_fail(inv_desc->hi, inv_desc->lo);
|
||||
return false;
|
||||
}
|
||||
@@ -3120,8 +3126,8 @@ static int vtd_irte_get(IntelIOMMUState *iommu, uint16_t index,
|
||||
}
|
||||
|
||||
addr = iommu->intr_root + index * sizeof(*entry);
|
||||
if (dma_memory_read(&address_space_memory, addr, entry,
|
||||
sizeof(*entry))) {
|
||||
if (dma_memory_read(&address_space_memory, addr,
|
||||
entry, sizeof(*entry), MEMTXATTRS_UNSPECIFIED)) {
|
||||
error_report_once("%s: read failed: ind=0x%x addr=0x%" PRIx64,
|
||||
__func__, index, addr);
|
||||
return -VTD_FR_IR_ROOT_INVAL;
|
||||
|
||||
+11
-7
@@ -249,7 +249,8 @@ static void map_page(AddressSpace *as, uint8_t **ptr, uint64_t addr,
|
||||
dma_memory_unmap(as, *ptr, len, DMA_DIRECTION_FROM_DEVICE, len);
|
||||
}
|
||||
|
||||
*ptr = dma_memory_map(as, addr, &len, DMA_DIRECTION_FROM_DEVICE);
|
||||
*ptr = dma_memory_map(as, addr, &len, DMA_DIRECTION_FROM_DEVICE,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
if (len < wanted && *ptr) {
|
||||
dma_memory_unmap(as, *ptr, len, DMA_DIRECTION_FROM_DEVICE, len);
|
||||
*ptr = NULL;
|
||||
@@ -939,7 +940,8 @@ static int ahci_populate_sglist(AHCIDevice *ad, QEMUSGList *sglist,
|
||||
|
||||
/* map PRDT */
|
||||
if (!(prdt = dma_memory_map(ad->hba->as, prdt_addr, &prdt_len,
|
||||
DMA_DIRECTION_TO_DEVICE))){
|
||||
DMA_DIRECTION_TO_DEVICE,
|
||||
MEMTXATTRS_UNSPECIFIED))){
|
||||
trace_ahci_populate_sglist_no_map(ad->hba, ad->port_no);
|
||||
return -1;
|
||||
}
|
||||
@@ -1301,7 +1303,7 @@ static int handle_cmd(AHCIState *s, int port, uint8_t slot)
|
||||
tbl_addr = le64_to_cpu(cmd->tbl_addr);
|
||||
cmd_len = 0x80;
|
||||
cmd_fis = dma_memory_map(s->as, tbl_addr, &cmd_len,
|
||||
DMA_DIRECTION_TO_DEVICE);
|
||||
DMA_DIRECTION_TO_DEVICE, MEMTXATTRS_UNSPECIFIED);
|
||||
if (!cmd_fis) {
|
||||
trace_handle_cmd_badfis(s, port);
|
||||
return -1;
|
||||
@@ -1379,10 +1381,12 @@ static void ahci_pio_transfer(const IDEDMA *dma)
|
||||
has_sglist ? "" : "o");
|
||||
|
||||
if (has_sglist && size) {
|
||||
const MemTxAttrs attrs = MEMTXATTRS_UNSPECIFIED;
|
||||
|
||||
if (is_write) {
|
||||
dma_buf_write(s->data_ptr, size, &s->sg);
|
||||
dma_buf_write(s->data_ptr, size, &s->sg, attrs);
|
||||
} else {
|
||||
dma_buf_read(s->data_ptr, size, &s->sg);
|
||||
dma_buf_read(s->data_ptr, size, &s->sg, attrs);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1475,9 +1479,9 @@ static int ahci_dma_rw_buf(const IDEDMA *dma, bool is_write)
|
||||
}
|
||||
|
||||
if (is_write) {
|
||||
dma_buf_read(p, l, &s->sg);
|
||||
dma_buf_read(p, l, &s->sg, MEMTXATTRS_UNSPECIFIED);
|
||||
} else {
|
||||
dma_buf_write(p, l, &s->sg);
|
||||
dma_buf_write(p, l, &s->sg, MEMTXATTRS_UNSPECIFIED);
|
||||
}
|
||||
|
||||
/* free sglist, update byte count */
|
||||
|
||||
+1
-1
@@ -97,7 +97,7 @@ static void pmac_ide_atapi_transfer_cb(void *opaque, int ret)
|
||||
/* Non-block ATAPI transfer - just copy to RAM */
|
||||
s->io_buffer_size = MIN(s->io_buffer_size, io->len);
|
||||
dma_memory_write(&address_space_memory, io->addr, s->io_buffer,
|
||||
s->io_buffer_size);
|
||||
s->io_buffer_size, MEMTXATTRS_UNSPECIFIED);
|
||||
io->len = 0;
|
||||
ide_atapi_cmd_ok(s);
|
||||
m->dma_active = false;
|
||||
|
||||
+4
-3
@@ -172,7 +172,7 @@ static uint64_t pnv_xive_vst_addr_indirect(PnvXive *xive, uint32_t type,
|
||||
|
||||
/* Get the page size of the indirect table. */
|
||||
vsd_addr = vsd & VSD_ADDRESS_MASK;
|
||||
vsd = ldq_be_dma(&address_space_memory, vsd_addr);
|
||||
ldq_be_dma(&address_space_memory, vsd_addr, &vsd, MEMTXATTRS_UNSPECIFIED);
|
||||
|
||||
if (!(vsd & VSD_ADDRESS_MASK)) {
|
||||
#ifdef XIVE_DEBUG
|
||||
@@ -195,7 +195,8 @@ static uint64_t pnv_xive_vst_addr_indirect(PnvXive *xive, uint32_t type,
|
||||
/* Load the VSD we are looking for, if not already done */
|
||||
if (vsd_idx) {
|
||||
vsd_addr = vsd_addr + vsd_idx * XIVE_VSD_SIZE;
|
||||
vsd = ldq_be_dma(&address_space_memory, vsd_addr);
|
||||
ldq_be_dma(&address_space_memory, vsd_addr, &vsd,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
|
||||
if (!(vsd & VSD_ADDRESS_MASK)) {
|
||||
#ifdef XIVE_DEBUG
|
||||
@@ -542,7 +543,7 @@ static uint64_t pnv_xive_vst_per_subpage(PnvXive *xive, uint32_t type)
|
||||
|
||||
/* Get the page size of the indirect table. */
|
||||
vsd_addr = vsd & VSD_ADDRESS_MASK;
|
||||
vsd = ldq_be_dma(&address_space_memory, vsd_addr);
|
||||
ldq_be_dma(&address_space_memory, vsd_addr, &vsd, MEMTXATTRS_UNSPECIFIED);
|
||||
|
||||
if (!(vsd & VSD_ADDRESS_MASK)) {
|
||||
#ifdef XIVE_DEBUG
|
||||
|
||||
@@ -1684,7 +1684,8 @@ static target_ulong h_int_esb(PowerPCCPU *cpu,
|
||||
mmio_addr = xive->vc_base + xive_source_esb_mgmt(xsrc, lisn) + offset;
|
||||
|
||||
if (dma_memory_rw(&address_space_memory, mmio_addr, &data, 8,
|
||||
(flags & SPAPR_XIVE_ESB_STORE))) {
|
||||
(flags & SPAPR_XIVE_ESB_STORE),
|
||||
MEMTXATTRS_UNSPECIFIED)) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "XIVE: failed to access ESB @0x%"
|
||||
HWADDR_PRIx "\n", mmio_addr);
|
||||
return H_HARDWARE;
|
||||
|
||||
+4
-3
@@ -1246,8 +1246,8 @@ void xive_end_queue_pic_print_info(XiveEND *end, uint32_t width, Monitor *mon)
|
||||
uint64_t qaddr = qaddr_base + (qindex << 2);
|
||||
uint32_t qdata = -1;
|
||||
|
||||
if (dma_memory_read(&address_space_memory, qaddr, &qdata,
|
||||
sizeof(qdata))) {
|
||||
if (dma_memory_read(&address_space_memory, qaddr,
|
||||
&qdata, sizeof(qdata), MEMTXATTRS_UNSPECIFIED)) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "XIVE: failed to read EQ @0x%"
|
||||
HWADDR_PRIx "\n", qaddr);
|
||||
return;
|
||||
@@ -1311,7 +1311,8 @@ static void xive_end_enqueue(XiveEND *end, uint32_t data)
|
||||
uint32_t qdata = cpu_to_be32((qgen << 31) | (data & 0x7fffffff));
|
||||
uint32_t qentries = 1 << (qsize + 10);
|
||||
|
||||
if (dma_memory_write(&address_space_memory, qaddr, &qdata, sizeof(qdata))) {
|
||||
if (dma_memory_write(&address_space_memory, qaddr,
|
||||
&qdata, sizeof(qdata), MEMTXATTRS_UNSPECIFIED)) {
|
||||
qemu_log_mask(LOG_GUEST_ERROR, "XIVE: failed to write END data @0x%"
|
||||
HWADDR_PRIx "\n", qaddr);
|
||||
return;
|
||||
|
||||
@@ -69,7 +69,8 @@ static void bcm2835_property_mbox_push(BCM2835PropertyState *s, uint32_t value)
|
||||
break;
|
||||
case 0x00010003: /* Get board MAC address */
|
||||
resplen = sizeof(s->macaddr.a);
|
||||
dma_memory_write(&s->dma_as, value + 12, s->macaddr.a, resplen);
|
||||
dma_memory_write(&s->dma_as, value + 12, s->macaddr.a, resplen,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
break;
|
||||
case 0x00010004: /* Get board serial */
|
||||
qemu_log_mask(LOG_UNIMP,
|
||||
|
||||
@@ -94,7 +94,7 @@ static void dbdma_cmdptr_load(DBDMA_channel *ch)
|
||||
DBDMA_DPRINTFCH(ch, "dbdma_cmdptr_load 0x%08x\n",
|
||||
ch->regs[DBDMA_CMDPTR_LO]);
|
||||
dma_memory_read(&address_space_memory, ch->regs[DBDMA_CMDPTR_LO],
|
||||
&ch->current, sizeof(dbdma_cmd));
|
||||
&ch->current, sizeof(dbdma_cmd), MEMTXATTRS_UNSPECIFIED);
|
||||
}
|
||||
|
||||
static void dbdma_cmdptr_save(DBDMA_channel *ch)
|
||||
@@ -104,7 +104,7 @@ static void dbdma_cmdptr_save(DBDMA_channel *ch)
|
||||
le16_to_cpu(ch->current.xfer_status),
|
||||
le16_to_cpu(ch->current.res_count));
|
||||
dma_memory_write(&address_space_memory, ch->regs[DBDMA_CMDPTR_LO],
|
||||
&ch->current, sizeof(dbdma_cmd));
|
||||
&ch->current, sizeof(dbdma_cmd), MEMTXATTRS_UNSPECIFIED);
|
||||
}
|
||||
|
||||
static void kill_channel(DBDMA_channel *ch)
|
||||
@@ -371,7 +371,8 @@ static void load_word(DBDMA_channel *ch, int key, uint32_t addr,
|
||||
return;
|
||||
}
|
||||
|
||||
dma_memory_read(&address_space_memory, addr, ¤t->cmd_dep, len);
|
||||
dma_memory_read(&address_space_memory, addr, ¤t->cmd_dep, len,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
|
||||
if (conditional_wait(ch))
|
||||
goto wait;
|
||||
@@ -403,7 +404,8 @@ static void store_word(DBDMA_channel *ch, int key, uint32_t addr,
|
||||
return;
|
||||
}
|
||||
|
||||
dma_memory_write(&address_space_memory, addr, ¤t->cmd_dep, len);
|
||||
dma_memory_write(&address_space_memory, addr, ¤t->cmd_dep, len,
|
||||
MEMTXATTRS_UNSPECIFIED);
|
||||
|
||||
if (conditional_wait(ch))
|
||||
goto wait;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user