mirror_qemu/hw/ide
John Snow fac7aa7fc2 ahci: properly shadow the TFD register
In a real AHCI device, several S/ATA registers are mirrored or shadowed
within the AHCI register set. These registers are not updated
synchronously for each read access, but are instead updated after a
Device-to-Host Register FIS packet is received. The D2H FIS contains
the values from these registers on the device.

In QEMU, by reaching directly into the device to grab these bits before
they are "sent," we may introduce race conditions where unexpected
values are present "before they are sent" which could cause issues for
some guests, particularly if an attempt is made to read the PxTFD
register prior to enabling the port, where incorrect values will be read.

This patch also addresses the boot-time values for the PxTFD and PxSIG
registers to bring them in line with the AHCI 1.3 specification.

Lastly, several fields (PxTFD, PxSIG and PxSACT) are read-only,
and any attempts to write to them should be ignored.

Signed-off-by: John Snow <jsnow@redhat.com>
Message-id: 1408643079-30675-6-git-send-email-jsnow@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2014-09-22 11:39:41 +01:00
..
Makefile.objs hw: make all of hw/ide/ configurable via default-configs/ 2013-04-08 18:13:12 +02:00
ahci.c ahci: properly shadow the TFD register 2014-09-22 11:39:41 +01:00
ahci.h ahci: remove duplicate PORT_IRQ_* constants 2014-08-15 18:03:12 +01:00
atapi.c ide/atapi: Mark non-data commands as complete 2014-09-22 11:38:44 +01:00
cmd646.c SCSI changes that enable sending vendor-specific commands via virtio-scsi. 2014-08-19 13:00:57 +01:00
core.c block: Rename qemu_aio_release -> qemu_aio_unref 2014-09-22 11:39:17 +01:00
ich.c ahci: MSI capability should be at 0x80, not 0x50. 2014-09-22 11:39:39 +01:00
internal.h ide: make all commands go through cmd_done 2014-08-15 18:03:12 +01:00
isa.c savevm: Remove all the unneeded version_minimum_id_old (x86) 2014-06-16 04:55:26 +02:00
macio.c block: Make the block accounting functions operate on BlockAcctStats 2014-09-10 10:41:29 +02:00
microdrive.c block: Drop some superfluous casts from void * 2014-08-20 11:51:28 +02:00
mmio.c IDE: MMIO IDE device control should be little endian 2014-09-10 10:41:29 +02:00
pci.c ide: move retry constants out of BM_STATUS_* namespace 2014-08-15 18:03:12 +01:00
pci.h ide: move BM_STATUS bits to pci.[ch] 2014-08-15 18:03:12 +01:00
piix.c xen: Drop redundant bdrv_close() from pci_piix3_xen_ide_unplug() 2014-09-10 10:41:29 +02:00
qdev.c ide: Fix bootindex for bus_id > 9 2014-08-29 10:46:57 +01:00
via.c memory: remove memory_region_destroy 2014-08-18 12:06:21 +02:00