ahci: Update byte count after DMA completion
commit659142ecf71a0da240ab0ff7cf929ee25c32b9bc
authorJohn Snow <jsnow@redhat.com>
Wed, 1 Oct 2014 22:55:47 +0000 (1 18:55 -0400)
committerStefan Hajnoczi <stefanha@redhat.com>
Mon, 3 Nov 2014 09:48:41 +0000 (3 09:48 +0000)
tree2c3890a83310e734b490dc6dec985459e5b7c94b
parent7b8bad1b6abde7612940900dd1092dad873f1a11
ahci: Update byte count after DMA completion

Currently, DMA read/write operations neglect to update
the byte count after a successful transfer like ATAPI
DMA read or PIO read/write operations do.

We correct this oversight by adding another callback into
the IDEDMAOps structure. The commit callback is called
whenever we are cleaning up a scatter-gather list.
AHCI can register this callback in order to update post-
transfer information such as byte count updates.

We use this callback in AHCI to consolidate where we delete
the SGlist as generated from the PRDT, as well as update the
byte count after the transfer is complete.

The QEMUSGList structure has an init flag added to it in order
to make qemu_sglist_destroy a nop if it is called when
there is no sglist, which simplifies cleanup and error paths.

This patch fixes several AHCI problems, notably Non-NCQ modes
of operation for Windows 7 as well as Hibernate support for Windows 7.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Tested-by: Michael S. Tsirkin <mst@redhat.com>
Message-id: 1412204151-18117-3-git-send-email-jsnow@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
hw/ide/ahci.c
hw/ide/core.c
hw/ide/internal.h