qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 00/11] AHCI emulation support v3
@ 2010-11-19  2:56 Alexander Graf
  2010-11-19  2:56 ` [Qemu-devel] [PATCH 01/11] ide: split ide command interpretation off Alexander Graf
                   ` (10 more replies)
  0 siblings, 11 replies; 21+ messages in thread
From: Alexander Graf @ 2010-11-19  2:56 UTC (permalink / raw)
  To: QEMU-devel Developers
  Cc: Kevin Wolf, Joerg Roedel, Gerd Hoffmann, Stefan Hajnoczi, tj,
	Roland Elek, Sebastian Herbszt

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.

Another nitpick is CD-ROM support in Windows. Somehow it doesn't detect a
CD-ROM drive attached to AHCI. At least it doesn't list it.

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 need to add the
ahci host controller using -device and add CONFIG_AHCI to its default config.


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!

  git://repo.or.cz/qemu/ahci.git ahci

v1 -> v2:

  - rename IDEExtender to IDEBusOps and make a pointer (kraxel)
  - make dma hooks explicit by putting them into ops struct (stefanha)
  - use qdev buses (kraxel)
  - minor cleanups
  - dprintf overhaul
  - add reset function

v2 -> v3:

  - add msi support (kraxel)
  - use MIN macro (kraxel)
  - add msi support (kraxel)
  - fix ncq with multiple ports
  - zap qdev properties (kraxel)
  - redesign legacy IF_SATA hooks (kraxel)
  - don't build ahci as part of target
  - move to ide/ (kwolf)


Alex

Alexander Graf (9):
  ide: split ide command interpretation off
  ide: fix whitespace gap in ide_exec_cmd
  ide: add DMA hooks to bus ops
  pci: add storage class for sata
  pci: add ich7 pci id
  ahci: add ahci emulation
  ahci: add -drive support
  config: Add header file for device config options
  ahci: spawn controller on demand

Roland Elek (2):
  ide: add support for ide bus ops
  ide: add ncq identify data for ahci sata drives

 Makefile.objs                      |    1 +
 Makefile.target                    |    5 +-
 blockdev.c                         |    6 +-
 blockdev.h                         |    1 +
 config.h                           |    1 +
 default-configs/i386-softmmu.mak   |    1 +
 default-configs/x86_64-softmmu.mak |    1 +
 hw/ide/ahci.c                      | 1329 ++++++++++++++++++++++++++++++++++++
 hw/ide/core.c                      |  800 ++++++++++++----------
 hw/ide/internal.h                  |   34 +-
 hw/pc.h                            |    1 +
 hw/pc_piix.c                       |    3 +
 hw/pci.h                           |    1 +
 hw/pci_ids.h                       |    1 +
 qemu-common.h                      |    2 +-
 15 files changed, 1803 insertions(+), 384 deletions(-)
 create mode 100644 hw/ide/ahci.c

^ permalink raw reply	[flat|nested] 21+ messages in thread
* [Qemu-devel] [PATCH 00/11] AHCI emulation support v5
@ 2010-11-25  7:07 Alexander Graf
  2010-11-25  7:07 ` [Qemu-devel] [PATCH 09/11] ahci: add -drive support Alexander Graf
  0 siblings, 1 reply; 21+ messages in thread
From: Alexander Graf @ 2010-11-25  7:07 UTC (permalink / raw)
  To: QEMU-devel Developers
  Cc: Kevin Wolf, Joerg Roedel, Blue Swirl, Gerd Hoffmann,
	Stefan Hajnoczi, tj, Roland Elek, Sebastian Herbszt

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.

Another nitpick is CD-ROM support in Windows. Somehow it doesn't detect a
CD-ROM drive attached to AHCI. At least it doesn't list it.

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 need to add the
ahci host controller using -device and add CONFIG_AHCI to its default config.
Big endian hosts are still broken due to qemu shortcomings in mmio handing.
Expect patches to follow.


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!

  git://repo.or.cz/qemu/ahci.git ahci

v1 -> v2:

  - rename IDEExtender to IDEBusOps and make a pointer (kraxel)
  - make dma hooks explicit by putting them into ops struct (stefanha)
  - use qdev buses (kraxel)
  - minor cleanups
  - dprintf overhaul
  - add reset function

v2 -> v3:

  - add msi support (kraxel)
  - use MIN macro (kraxel)
  - add msi support (kraxel)
  - fix ncq with multiple ports
  - zap qdev properties (kraxel)
  - redesign legacy IF_SATA hooks (kraxel)
  - don't build ahci as part of target
  - move to ide/ (kwolf)

v3 -> v4:

  - prepare for endianness safety
  - add lspci dump (herbszt)
  - use ich7 instead of ich7m (herbszt)
  - fix lst+fis mapping (kraxel)
  - coding style (blue swirl)
  - explicit mmio setters/getters (blue swirl)
  - split pata code out to pata.c (kwolf)
  - only include config-devices.h in machine description (blue swirl)

v4 -> v5:

  - s/H2dNcqFis/NCQFrame/g (blue swirl)
  - redo -drive magic (blue swirl)
  - bump BAR to 4k
  - rename ICH7_AHCI to ICH7_AHCI_RAID (herbszt)
  - drop device config header (blue swirl)

Alexander Graf (9):
  ide: split ide command interpretation off
  ide: fix whitespace gap in ide_exec_cmd
  ide: add DMA hooks to bus ops
  pci: add storage class for sata
  pci: add ich7 pci id
  ahci: add ahci emulation
  ahci: add -drive support
  ahci: spawn controller on demand
  ide: move pata specific parts to pata.c

Roland Elek (2):
  ide: add support for ide bus ops
  ide: add ncq identify data for ahci sata drives

 Makefile.objs                      |    3 +-
 blockdev.c                         |   41 +-
 blockdev.h                         |    2 +
 default-configs/i386-softmmu.mak   |    1 +
 default-configs/x86_64-softmmu.mak |    1 +
 hw/ide/ahci.c                      | 1380 ++++++++++++++++++++++++++++++++++++
 hw/ide/core.c                      |  874 ++++++++++-------------
 hw/ide/internal.h                  |   37 +-
 hw/ide/pata.c                      |  178 +++++
 hw/pci.h                           |    1 +
 hw/pci_ids.h                       |    1 +
 qemu-common.h                      |    2 +-
 vl.c                               |    2 +
 13 files changed, 2032 insertions(+), 491 deletions(-)
 create mode 100644 hw/ide/ahci.c
 create mode 100644 hw/ide/pata.c

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2010-12-10 12:45 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-19  2:56 [Qemu-devel] [PATCH 00/11] AHCI emulation support v3 Alexander Graf
2010-11-19  2:56 ` [Qemu-devel] [PATCH 01/11] ide: split ide command interpretation off Alexander Graf
2010-11-19  2:56 ` [Qemu-devel] [PATCH 02/11] ide: fix whitespace gap in ide_exec_cmd Alexander Graf
2010-11-19  2:56 ` [Qemu-devel] [PATCH 03/11] ide: add support for ide bus ops Alexander Graf
2010-11-19  2:56 ` [Qemu-devel] [PATCH 04/11] ide: add DMA hooks to " Alexander Graf
2010-11-19  2:56 ` [Qemu-devel] [PATCH 05/11] ide: add ncq identify data for ahci sata drives Alexander Graf
2010-11-19  2:56 ` [Qemu-devel] [PATCH 06/11] pci: add storage class for sata Alexander Graf
2010-11-19  2:56 ` [Qemu-devel] [PATCH 07/11] pci: add ich7 pci id Alexander Graf
2010-11-19  2:56 ` [Qemu-devel] [PATCH 08/11] ahci: add ahci emulation Alexander Graf
2010-11-21 12:54   ` Blue Swirl
2010-11-23 13:48     ` Alexander Graf
2010-11-23 19:25       ` Blue Swirl
2010-11-19  2:56 ` [Qemu-devel] [PATCH 09/11] ahci: add -drive support Alexander Graf
2010-11-19  2:56 ` [Qemu-devel] [PATCH 10/11] config: Add header file for device config options Alexander Graf
2010-11-21 12:37   ` Blue Swirl
2010-11-21 12:45     ` Alexander Graf
2010-11-21 12:56       ` Blue Swirl
2010-12-10 12:37       ` Markus Armbruster
2010-12-10 12:45         ` Alexander Graf
2010-11-19  2:56 ` [Qemu-devel] [PATCH 11/11] ahci: spawn controller on demand Alexander Graf
  -- strict thread matches above, loose matches on Subject: below --
2010-11-25  7:07 [Qemu-devel] [PATCH 00/11] AHCI emulation support v5 Alexander Graf
2010-11-25  7:07 ` [Qemu-devel] [PATCH 09/11] ahci: add -drive support Alexander Graf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).