[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 04/10] ide: add DMA hooks to bus ops
From: |
Alexander Graf |
Subject: |
[Qemu-devel] [PATCH 04/10] ide: add DMA hooks to bus ops |
Date: |
Wed, 1 Dec 2010 20:17:06 +0100 |
For DMA operations, we need to hook into even more IDE functionality.
This patch adds the respective hooking points, allowing us to handle
SG lists ourselves in the AHCI code.
Signed-off-by: Roland Elek <address@hidden>
Signed-off-by: Alexander Graf <address@hidden>
---
v1 -> v2:
- make dma hooks explicit by putting them into ops struct (stefanha)
v6 -> v7:
- rename IDEBusOps (stefanha)
---
hw/ide/core.c | 9 ++++++---
hw/ide/internal.h | 4 ++++
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/hw/ide/core.c b/hw/ide/core.c
index 3912c21..1680a38 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -614,7 +614,7 @@ static void ide_read_dma_cb(void *opaque, int ret)
n = s->nsector;
s->io_buffer_index = 0;
s->io_buffer_size = n * 512;
- if (dma_buf_prepare(bm, 1) == 0)
+ if (s->bus->ops->dma_prepare(bm, 1) == 0)
goto eot;
#ifdef DEBUG_AIO
printf("aio_read: sector_num=%" PRId64 " n=%d\n", sector_num, n);
@@ -756,7 +756,7 @@ static void ide_write_dma_cb(void *opaque, int ret)
n = s->nsector;
s->io_buffer_size = n * 512;
/* launch next transfer */
- if (dma_buf_prepare(bm, 0) == 0)
+ if (s->bus->ops->dma_prepare(bm, 0) == 0)
goto eot;
#ifdef DEBUG_AIO
printf("aio_write: sector_num=%" PRId64 " n=%d\n", sector_num, n);
@@ -1064,7 +1064,7 @@ static void ide_atapi_cmd_read_dma_cb(void *opaque, int
ret)
s->lba += n;
}
s->packet_transfer_size -= s->io_buffer_size;
- if (dma_buf_rw(bm, 1) == 0)
+ if (s->bus->ops->dma_rw(bm, 1) == 0)
goto eot;
}
@@ -2716,6 +2716,7 @@ int ide_init_drive(IDEState *s, BlockDriverState *bs,
} else {
pstrcpy(s->version, sizeof(s->version), QEMU_VERSION);
}
+
ide_reset(s);
bdrv_set_removable(bs, s->drive_kind == IDE_CD);
return 0;
@@ -2741,6 +2742,8 @@ static IDEBusOps pata_bus_ops = {
.transfer_start = pata_transfer_start,
.set_irq = pata_set_irq,
.dma_start = pata_dma_start,
+ .dma_prepare = dma_buf_prepare,
+ .dma_rw = dma_buf_rw,
};
void ide_init2(IDEBus *bus, qemu_irq irq)
diff --git a/hw/ide/internal.h b/hw/ide/internal.h
index f5d6ba7..1b5e738 100644
--- a/hw/ide/internal.h
+++ b/hw/ide/internal.h
@@ -375,6 +375,8 @@ typedef void TransferStartFunc(IDEState *,
EndTransferFunc *);
typedef void IRQSetFunc(IDEBus *);
typedef void DMAStartFunc(IDEState *, BlockDriverCompletionFunc *);
+typedef int DMAPrepareFunc(BMDMAState *, int);
+typedef int DMARWFunc(BMDMAState *, int);
/* NOTE: IDEState represents in fact one drive */
struct IDEState {
@@ -458,6 +460,8 @@ struct IDEBusOps {
TransferStartFunc *transfer_start;
IRQSetFunc *set_irq;
DMAStartFunc *dma_start;
+ DMAPrepareFunc *dma_prepare;
+ DMARWFunc *dma_rw;
};
struct IDEBus {
--
1.6.0.2
- [Qemu-devel] [PATCH 00/10] AHCI emulation support v7, Alexander Graf, 2010/12/01
- [Qemu-devel] [PATCH 05/10] ide: add ncq identify data for ahci sata drives, Alexander Graf, 2010/12/01
- [Qemu-devel] [PATCH 04/10] ide: add DMA hooks to bus ops,
Alexander Graf <=
- [Qemu-devel] [PATCH 10/10] config: add ahci for pci capable machines, Alexander Graf, 2010/12/01
- [Qemu-devel] [PATCH 07/10] pci: add ich7 pci id, Alexander Graf, 2010/12/01
- [Qemu-devel] [PATCH 01/10] ide: split ide command interpretation off, Alexander Graf, 2010/12/01
- [Qemu-devel] [PATCH 09/10] ide: move pata specific parts to pata.c, Alexander Graf, 2010/12/01
- [Qemu-devel] [PATCH 03/10] ide: add support for ide bus ops, Alexander Graf, 2010/12/01
- [Qemu-devel] [PATCH 06/10] pci: add storage class for sata, Alexander Graf, 2010/12/01