diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2015-02-23 11:17:58 -0500 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2015-03-10 14:02:22 +0100 |
commit | dc5d0af49a90571813b9cbcea90c0bbbea0d4a22 (patch) | |
tree | 87764d410a232298940852b2fdd84a3f7de2ed06 /hw/ide/pci.c | |
parent | a96cb236290ef8e54b061b30c41835e435905d7a (diff) | |
download | hqemu-dc5d0af49a90571813b9cbcea90c0bbbea0d4a22.zip hqemu-dc5d0af49a90571813b9cbcea90c0bbbea0d4a22.tar.gz |
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 <pbonzini@redhat.com>
Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 1424708286-16483-10-git-send-email-jsnow@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'hw/ide/pci.c')
-rw-r--r-- | hw/ide/pci.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/hw/ide/pci.c b/hw/ide/pci.c index 2b0e886..fab2abc 100644 --- a/hw/ide/pci.c +++ b/hw/ide/pci.c @@ -46,8 +46,6 @@ static void bmdma_start_dma(IDEDMA *dma, IDEState *s, bm->cur_prd_last = 0; bm->cur_prd_addr = 0; bm->cur_prd_len = 0; - bm->sector_num = ide_get_sector(s); - bm->nsector = s->nsector; if (bm->status & BM_STATUS_DMAING) { bm->dma_cb(bmdma_active_if(bm), 0); @@ -177,10 +175,7 @@ static void bmdma_set_inactive(IDEDMA *dma, bool more) static void bmdma_restart_dma(IDEDMA *dma) { BMDMAState *bm = DO_UPCAST(BMDMAState, dma, dma); - IDEState *s = bmdma_active_if(bm); - ide_set_sector(s, bm->sector_num); - s->nsector = bm->nsector; bm->cur_addr = bm->addr; } @@ -207,8 +202,6 @@ static void bmdma_reset(IDEDMA *dma) bm->cur_prd_last = 0; bm->cur_prd_addr = 0; bm->cur_prd_len = 0; - bm->sector_num = 0; - bm->nsector = 0; } static void bmdma_irq(void *opaque, int n, int level) @@ -326,6 +319,8 @@ static void ide_bmdma_pre_save(void *opaque) uint8_t abused_bits = BM_MIGRATION_COMPAT_STATUS_BITS; bm->migration_retry_unit = bm->bus->retry_unit; + bm->migration_retry_sector_num = bm->bus->retry_sector_num; + bm->migration_retry_nsector = bm->bus->retry_nsector; bm->migration_compat_status = (bm->status & ~abused_bits) | (bm->bus->error_status & abused_bits); } @@ -343,6 +338,8 @@ static int ide_bmdma_post_load(void *opaque, int version_id) bm->bus->error_status |= bm->migration_compat_status & abused_bits; } if (bm->bus->error_status) { + bm->bus->retry_sector_num = bm->migration_retry_sector_num; + bm->bus->retry_nsector = bm->migration_retry_nsector; bm->bus->retry_unit = bm->migration_retry_unit; } @@ -381,8 +378,8 @@ static const VMStateDescription vmstate_bmdma = { VMSTATE_UINT8(cmd, BMDMAState), VMSTATE_UINT8(migration_compat_status, BMDMAState), VMSTATE_UINT32(addr, BMDMAState), - VMSTATE_INT64(sector_num, BMDMAState), - VMSTATE_UINT32(nsector, BMDMAState), + VMSTATE_INT64(migration_retry_sector_num, BMDMAState), + VMSTATE_UINT32(migration_retry_nsector, BMDMAState), VMSTATE_UINT8(migration_retry_unit, BMDMAState), VMSTATE_END_OF_LIST() }, |