• A
    440fx: fix PAM, PCI holes · ae0a5466
    Avi Kivity 提交于
    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: NAvi Kivity <avi@redhat.com>
    Signed-off-by: NAnthony Liguori <aliguori@us.ibm.com>
    ae0a5466
piix_pci.c 17.1 KB