This patch adds support for AHCI emulation. I have tested and verified it works in Linux, OpenBSD, Windows Vista and Windows 7. This AHCI emulation supports NCQ, so multiple read or write requests can be outstanding at the same time.
The code is however not fully optimized yet. I'm fairly sure that there are low hanging performance fruits to be found still :). In my simple benchmarks I achieved about 2/3rd of virtio performance. Also, this AHCI emulation layer does not support legacy mode. So if you're using a disk with this emulation, you do not get it exposed using the legacy IDE interfaces. To attach an AHCI disk to your VM, please use -drive file=...,if=sata This should do the trick for x86. On other platforms, you might need to add the ahci host controller using -device. This patch set is based on work done during the Google Summer of Code. I was mentoring a student, Roland Elek, who wrote most of the AHCI emulation code based on a patch from Chong Qiao. A bunch of other people were also involved, so everybody who I didn't mention - thanks a lot! Alex Alexander Graf (8): ide: split ide command interpretation off ide: fix whitespace gap in ide_exec_cmd ide: enable preallocated sg lists pci: add storage class for sata pci: add ich7 pci id ahci: add ahci emulation ahci: add -drive support ahci: spawn controller on demand Roland Elek (2): ide: add support for ide extenders ide: add ncq identify data for ahci sata drives Makefile.objs | 1 + Makefile.target | 4 + blockdev.c | 6 +- blockdev.h | 1 + default-configs/i386-softmmu.mak | 1 + default-configs/x86_64-softmmu.mak | 1 + hw/ahci.c | 1171 ++++++++++++++++++++++++++++++++++++ hw/ide/core.c | 827 ++++++++++++++------------ hw/ide/internal.h | 31 +- hw/pc.c | 5 + hw/pci.h | 1 + hw/pci_ids.h | 1 + qemu-common.h | 2 +- 13 files changed, 1665 insertions(+), 387 deletions(-) create mode 100644 hw/ahci.c