From dc5d0af49a90571813b9cbcea90c0bbbea0d4a22 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Mon, 23 Feb 2015 11:17:58 -0500 Subject: ide: place initial state of the current request to IDEBus This moves more common restarting logic to the core IDE code. Signed-off-by: Paolo Bonzini Signed-off-by: John Snow Message-id: 1424708286-16483-10-git-send-email-jsnow@redhat.com Signed-off-by: Stefan Hajnoczi Signed-off-by: Kevin Wolf --- hw/ide/core.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'hw/ide/core.c') diff --git a/hw/ide/core.c b/hw/ide/core.c index 7607d03..71ec1e7 100644 --- a/hw/ide/core.c +++ b/hw/ide/core.c @@ -647,6 +647,8 @@ void ide_set_inactive(IDEState *s, bool more) { s->bus->dma->aiocb = NULL; s->bus->retry_unit = -1; + s->bus->retry_sector_num = 0; + s->bus->retry_nsector = 0; if (s->bus->dma->ops->set_inactive) { s->bus->dma->ops->set_inactive(s->bus->dma, more); } @@ -801,6 +803,8 @@ static void ide_sector_start_dma(IDEState *s, enum ide_dma_cmd dma_cmd) void ide_start_dma(IDEState *s, BlockCompletionFunc *cb) { s->bus->retry_unit = s->unit; + s->bus->retry_sector_num = ide_get_sector(s); + s->bus->retry_nsector = s->nsector; if (s->bus->dma->ops->start_dma) { s->bus->dma->ops->start_dma(s->bus->dma, s, cb); } @@ -2334,6 +2338,8 @@ static const IDEDMAOps ide_dma_nop_ops = { static void ide_restart_dma(IDEState *s, enum ide_dma_cmd dma_cmd) { s->unit = s->bus->retry_unit; + ide_set_sector(s, s->bus->retry_sector_num); + s->nsector = s->bus->retry_nsector; s->bus->dma->ops->restart_dma(s->bus->dma); s->io_buffer_index = 0; s->io_buffer_size = 0; -- cgit v1.1