From: Alexander Graf <agraf@suse.de>
To: QEMU-devel Developers <qemu-devel@nongnu.org>
Cc: Kevin Wolf <kwolf@redhat.com>,
Joerg Roedel <Joerg.Roedel@amd.com>,
Gerd Hoffmann <kraxel@redhat.com>,
Stefan Hajnoczi <stefanha@gmail.com>,
tj@kernel.org, Roland Elek <elek.roland@gmail.com>,
Sebastian Herbszt <herbszt@gmx.de>
Subject: [Qemu-devel] [PATCH 04/11] ide: add DMA hooks to bus ops
Date: Fri, 19 Nov 2010 03:56:46 +0100 [thread overview]
Message-ID: <1290135413-21462-5-git-send-email-agraf@suse.de> (raw)
In-Reply-To: <1290135413-21462-1-git-send-email-agraf@suse.de>
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 <elek.roland@gmail.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
---
v1 -> v2:
- make dma hooks explicit by putting them into ops struct (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 c8d7810..04190d2 100644
--- a/hw/ide/core.c
+++ b/hw/ide/core.c
@@ -607,7 +607,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_fn(bm, 1) == 0)
goto eot;
#ifdef DEBUG_AIO
printf("aio_read: sector_num=%" PRId64 " n=%d\n", sector_num, n);
@@ -752,7 +752,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_fn(bm, 0) == 0)
goto eot;
#ifdef DEBUG_AIO
printf("aio_write: sector_num=%" PRId64 " n=%d\n", sector_num, n);
@@ -1060,7 +1060,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_fn(bm, 1) == 0)
goto eot;
}
@@ -2715,6 +2715,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;
@@ -2740,6 +2741,8 @@ static IDEBusOps ide_bus_ops = {
.transfer_start_fn = pata_transfer_start,
.irq_set_fn = pata_set_irq,
.dma_start_fn = pata_dma_start,
+ .dma_prepare_fn = dma_buf_prepare,
+ .dma_rw_fn = dma_buf_rw,
};
void ide_init2(IDEBus *bus, qemu_irq irq)
diff --git a/hw/ide/internal.h b/hw/ide/internal.h
index ee7e13e..4bee636 100644
--- a/hw/ide/internal.h
+++ b/hw/ide/internal.h
@@ -374,6 +374,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 {
@@ -457,6 +459,8 @@ struct IDEBusOps {
TransferStartFunc *transfer_start_fn;
IRQSetFunc *irq_set_fn;
DMAStartFunc *dma_start_fn;
+ DMAPrepareFunc *dma_prepare_fn;
+ DMARWFunc *dma_rw_fn;
};
struct IDEBus {
--
1.6.0.2
next prev parent reply other threads:[~2010-11-19 2:57 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-19 2:56 [Qemu-devel] [PATCH 00/11] AHCI emulation support v3 Alexander Graf
2010-11-19 2:56 ` [Qemu-devel] [PATCH 01/11] ide: split ide command interpretation off Alexander Graf
2010-11-19 2:56 ` [Qemu-devel] [PATCH 02/11] ide: fix whitespace gap in ide_exec_cmd Alexander Graf
2010-11-19 2:56 ` [Qemu-devel] [PATCH 03/11] ide: add support for ide bus ops Alexander Graf
2010-11-19 2:56 ` Alexander Graf [this message]
2010-11-19 2:56 ` [Qemu-devel] [PATCH 05/11] ide: add ncq identify data for ahci sata drives Alexander Graf
2010-11-19 2:56 ` [Qemu-devel] [PATCH 06/11] pci: add storage class for sata Alexander Graf
2010-11-19 2:56 ` [Qemu-devel] [PATCH 07/11] pci: add ich7 pci id Alexander Graf
2010-11-19 2:56 ` [Qemu-devel] [PATCH 08/11] ahci: add ahci emulation Alexander Graf
2010-11-21 12:54 ` Blue Swirl
2010-11-23 13:48 ` Alexander Graf
2010-11-23 19:25 ` Blue Swirl
2010-11-19 2:56 ` [Qemu-devel] [PATCH 09/11] ahci: add -drive support Alexander Graf
2010-11-19 2:56 ` [Qemu-devel] [PATCH 10/11] config: Add header file for device config options Alexander Graf
2010-11-21 12:37 ` Blue Swirl
2010-11-21 12:45 ` Alexander Graf
2010-11-21 12:56 ` Blue Swirl
2010-12-10 12:37 ` Markus Armbruster
2010-12-10 12:45 ` Alexander Graf
2010-11-19 2:56 ` [Qemu-devel] [PATCH 11/11] ahci: spawn controller on demand Alexander Graf
-- strict thread matches above, loose matches on Subject: below --
2010-11-25 7:07 [Qemu-devel] [PATCH 00/11] AHCI emulation support v5 Alexander Graf
2010-11-25 7:07 ` [Qemu-devel] [PATCH 04/11] ide: add DMA hooks to bus ops Alexander Graf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1290135413-21462-5-git-send-email-agraf@suse.de \
--to=agraf@suse.de \
--cc=Joerg.Roedel@amd.com \
--cc=elek.roland@gmail.com \
--cc=herbszt@gmx.de \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).