440fx: fix PAM, PCI holes
commitae0a54664c76f1d2a2a7a268266d47b4e8c12a4c
authorAvi Kivity <avi@redhat.com>
Mon, 15 Aug 2011 14:17:38 +0000 (15 17:17 +0300)
committerAnthony Liguori <aliguori@us.ibm.com>
Mon, 22 Aug 2011 15:47:49 +0000 (22 10:47 -0500)
treeb4a664a81fe572ce96640fdc74b0ec2ca172ee2a
parentbe20f9e902ca47ea84e1b1c1e89b0a55d59b4c11
440fx: fix PAM, PCI holes

The current implementation of PAM and the PCI holes is broken in several
ways:

  - PCI BARs are not restricted to the PCI hole (a BAR may hide memory)
  - PCI devices do not respect PAM (if a PCI device maps a region while
    PAM maps the region to RAM, the request will be honored)

This patch fixes things by introducing a pci address space, and using
memory region aliases to represent PAM regions, SMRAM, and PCI holes.

The memory hierarchy looks something like

system_memory
 |
 +--- low memory alias (0-0xe0000000)
 |      |
 |      +-- ram@0
 |
 +--- high memory alias (0x100000000-EOM)
 |      |
 |      +-- ram@0xe0000000
 |
 +--- pci hole alias (end of low memory-0x100000000)
 |      |
 |      +-- pci@end-of-low-memory
 |
 |
 +--- pam[n] (0xc0000-0xc3fff etc) (when set to pci, priority 1)
 |      |
 |      +-- pci@0xc4000 etc
 |
 +--- smram (0xa0000-0xbffff) (when set to pci/vga, priority 1)
        |
        +-- pci@0xa0000 etc

ram (simple ram region)

pci
 |
 +--- BARn
 |
 +--- VGA 0xa0000-0xbffff
 |
 +--- ROMs

Signed-off-by: Avi Kivity <avi@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
hw/pc.c
hw/pc.h
hw/pc_piix.c
hw/piix_pci.c