Revision 43cf8ae6 dma-helpers.c
b/dma-helpers.c | ||
---|---|---|
41 | 41 |
BlockDriverAIOCB *acb; |
42 | 42 |
QEMUSGList *sg; |
43 | 43 |
uint64_t sector_num; |
44 |
bool to_dev;
|
|
44 |
DMADirection dir;
|
|
45 | 45 |
bool in_cancel; |
46 | 46 |
int sg_cur_index; |
47 | 47 |
dma_addr_t sg_cur_byte; |
... | ... | |
75 | 75 |
|
76 | 76 |
for (i = 0; i < dbs->iov.niov; ++i) { |
77 | 77 |
cpu_physical_memory_unmap(dbs->iov.iov[i].iov_base, |
78 |
dbs->iov.iov[i].iov_len, !dbs->to_dev, |
|
78 |
dbs->iov.iov[i].iov_len, |
|
79 |
dbs->dir != DMA_DIRECTION_TO_DEVICE, |
|
79 | 80 |
dbs->iov.iov[i].iov_len); |
80 | 81 |
} |
81 | 82 |
qemu_iovec_reset(&dbs->iov); |
... | ... | |
122 | 123 |
while (dbs->sg_cur_index < dbs->sg->nsg) { |
123 | 124 |
cur_addr = dbs->sg->sg[dbs->sg_cur_index].base + dbs->sg_cur_byte; |
124 | 125 |
cur_len = dbs->sg->sg[dbs->sg_cur_index].len - dbs->sg_cur_byte; |
125 |
mem = cpu_physical_memory_map(cur_addr, &cur_len, !dbs->to_dev); |
|
126 |
mem = cpu_physical_memory_map(cur_addr, &cur_len, |
|
127 |
dbs->dir != DMA_DIRECTION_TO_DEVICE); |
|
126 | 128 |
if (!mem) |
127 | 129 |
break; |
128 | 130 |
qemu_iovec_add(&dbs->iov, mem, cur_len); |
... | ... | |
169 | 171 |
BlockDriverAIOCB *dma_bdrv_io( |
170 | 172 |
BlockDriverState *bs, QEMUSGList *sg, uint64_t sector_num, |
171 | 173 |
DMAIOFunc *io_func, BlockDriverCompletionFunc *cb, |
172 |
void *opaque, bool to_dev)
|
|
174 |
void *opaque, DMADirection dir)
|
|
173 | 175 |
{ |
174 | 176 |
DMAAIOCB *dbs = qemu_aio_get(&dma_aio_pool, bs, cb, opaque); |
175 | 177 |
|
176 |
trace_dma_bdrv_io(dbs, bs, sector_num, to_dev);
|
|
178 |
trace_dma_bdrv_io(dbs, bs, sector_num, (dir == DMA_DIRECTION_TO_DEVICE));
|
|
177 | 179 |
|
178 | 180 |
dbs->acb = NULL; |
179 | 181 |
dbs->bs = bs; |
... | ... | |
181 | 183 |
dbs->sector_num = sector_num; |
182 | 184 |
dbs->sg_cur_index = 0; |
183 | 185 |
dbs->sg_cur_byte = 0; |
184 |
dbs->to_dev = to_dev;
|
|
186 |
dbs->dir = dir;
|
|
185 | 187 |
dbs->io_func = io_func; |
186 | 188 |
dbs->bh = NULL; |
187 | 189 |
qemu_iovec_init(&dbs->iov, sg->nsg); |
... | ... | |
194 | 196 |
QEMUSGList *sg, uint64_t sector, |
195 | 197 |
void (*cb)(void *opaque, int ret), void *opaque) |
196 | 198 |
{ |
197 |
return dma_bdrv_io(bs, sg, sector, bdrv_aio_readv, cb, opaque, false); |
|
199 |
return dma_bdrv_io(bs, sg, sector, bdrv_aio_readv, cb, opaque, |
|
200 |
DMA_DIRECTION_FROM_DEVICE); |
|
198 | 201 |
} |
199 | 202 |
|
200 | 203 |
BlockDriverAIOCB *dma_bdrv_write(BlockDriverState *bs, |
201 | 204 |
QEMUSGList *sg, uint64_t sector, |
202 | 205 |
void (*cb)(void *opaque, int ret), void *opaque) |
203 | 206 |
{ |
204 |
return dma_bdrv_io(bs, sg, sector, bdrv_aio_writev, cb, opaque, true); |
|
207 |
return dma_bdrv_io(bs, sg, sector, bdrv_aio_writev, cb, opaque, |
|
208 |
DMA_DIRECTION_TO_DEVICE); |
|
205 | 209 |
} |
206 | 210 |
|
207 | 211 |
|
Also available in: Unified diff