Revision 43cf8ae6

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

  
b/dma.h
17 17

  
18 18
typedef struct ScatterGatherEntry ScatterGatherEntry;
19 19

  
20
typedef enum {
21
    DMA_DIRECTION_TO_DEVICE = 0,
22
    DMA_DIRECTION_FROM_DEVICE = 1,
23
} DMADirection;
24

  
20 25
struct QEMUSGList {
21 26
    ScatterGatherEntry *sg;
22 27
    int nsg;
......
29 34

  
30 35
#define DMA_ADDR_FMT TARGET_FMT_plx
31 36

  
32
typedef enum {
33
    DMA_DIRECTION_TO_DEVICE = 0,
34
    DMA_DIRECTION_FROM_DEVICE = 1,
35
} DMADirection;
36

  
37 37
struct ScatterGatherEntry {
38 38
    dma_addr_t base;
39 39
    dma_addr_t len;
......
51 51
BlockDriverAIOCB *dma_bdrv_io(BlockDriverState *bs,
52 52
                              QEMUSGList *sg, uint64_t sector_num,
53 53
                              DMAIOFunc *io_func, BlockDriverCompletionFunc *cb,
54
                              void *opaque, bool to_dev);
54
                              void *opaque, DMADirection dir);
55 55
BlockDriverAIOCB *dma_bdrv_read(BlockDriverState *bs,
56 56
                                QEMUSGList *sg, uint64_t sector,
57 57
                                BlockDriverCompletionFunc *cb, void *opaque);
b/hw/ide/core.c
618 618
        break;
619 619
    case IDE_DMA_TRIM:
620 620
        s->bus->dma->aiocb = dma_bdrv_io(s->bs, &s->sg, sector_num,
621
                                         ide_issue_trim, ide_dma_cb, s, true);
621
                                         ide_issue_trim, ide_dma_cb, s,
622
                                         DMA_DIRECTION_TO_DEVICE);
622 623
        break;
623 624
    }
624 625
    return;
b/hw/ide/macio.c
149 149
        break;
150 150
    case IDE_DMA_TRIM:
151 151
        m->aiocb = dma_bdrv_io(s->bs, &s->sg, sector_num,
152
                               ide_issue_trim, pmac_ide_transfer_cb, s, true);
152
                               ide_issue_trim, pmac_ide_transfer_cb, s,
153
                               DMA_DIRECTION_TO_DEVICE);
153 154
        break;
154 155
    }
155 156
    return;

Also available in: Unified diff