summaryrefslogtreecommitdiff
path: root/src/dev/x86
diff options
context:
space:
mode:
Diffstat (limited to 'src/dev/x86')
-rw-r--r--src/dev/x86/Pc.py13
-rw-r--r--src/dev/x86/SouthBridge.py1
-rw-r--r--src/dev/x86/pc.cc27
-rw-r--r--src/dev/x86/pc.hh41
4 files changed, 14 insertions, 68 deletions
diff --git a/src/dev/x86/Pc.py b/src/dev/x86/Pc.py
index 8740159c4..3100f59b7 100644
--- a/src/dev/x86/Pc.py
+++ b/src/dev/x86/Pc.py
@@ -30,24 +30,29 @@ from m5.params import *
from m5.proxy import *
from Device import IsaFake
-from Pci import PciConfigAll
from Platform import Platform
from SouthBridge import SouthBridge
from Terminal import Terminal
from Uart import Uart8250
+from PciHost import GenericPciHost
def x86IOAddress(port):
IO_address_space_base = 0x8000000000000000
return IO_address_space_base + port;
+class PcPciHost(GenericPciHost):
+ conf_base = 0xC000000000000000
+ conf_size = "16MB"
+
+ pci_pio_base = 0x8000000000000000
+
class Pc(Platform):
type = 'Pc'
cxx_header = "dev/x86/pc.hh"
system = Param.System(Parent.any, "system")
- pciconfig = PciConfigAll()
-
south_bridge = SouthBridge()
+ pci_host = PcPciHost()
# "Non-existant" ports used for timing purposes by the linux kernel
i_dont_exist1 = IsaFake(pio_addr=x86IOAddress(0x80), pio_size=1)
@@ -80,4 +85,4 @@ class Pc(Platform):
self.fake_com_3.pio = bus.master
self.fake_com_4.pio = bus.master
self.fake_floppy.pio = bus.master
- self.pciconfig.pio = bus.default
+ self.pci_host.pio = bus.default
diff --git a/src/dev/x86/SouthBridge.py b/src/dev/x86/SouthBridge.py
index 911853dd5..704656594 100644
--- a/src/dev/x86/SouthBridge.py
+++ b/src/dev/x86/SouthBridge.py
@@ -106,7 +106,6 @@ class SouthBridge(SimObject):
self.cmos.pio = bus.master
self.dma1.pio = bus.master
self.ide.pio = bus.master
- self.ide.config = bus.master
if dma_ports.count(self.ide.dma) == 0:
self.ide.dma = bus.slave
self.keyboard.pio = bus.master
diff --git a/src/dev/x86/pc.cc b/src/dev/x86/pc.cc
index dd8e34d9e..fe3119803 100644
--- a/src/dev/x86/pc.cc
+++ b/src/dev/x86/pc.cc
@@ -141,33 +141,6 @@ Pc::clearPciInt(int line)
warn_once("Tried to clear PCI interrupt %d\n", line);
}
-Addr
-Pc::pciToDma(Addr pciAddr) const
-{
- return pciAddr;
-}
-
-Addr
-Pc::calcPciConfigAddr(int bus, int dev, int func)
-{
- assert(func < 8);
- assert(dev < 32);
- assert(bus == 0);
- return (PhysAddrPrefixPciConfig | (func << 8) | (dev << 11));
-}
-
-Addr
-Pc::calcPciIOAddr(Addr addr)
-{
- return PhysAddrPrefixIO + addr;
-}
-
-Addr
-Pc::calcPciMemAddr(Addr addr)
-{
- return addr;
-}
-
Pc *
PcParams::create()
{
diff --git a/src/dev/x86/pc.hh b/src/dev/x86/pc.hh
index c999440d2..6cc57cb5d 100644
--- a/src/dev/x86/pc.hh
+++ b/src/dev/x86/pc.hh
@@ -61,43 +61,12 @@ class Pc : public Platform
Pc(const Params *p);
- /**
- * Cause the cpu to post a serial interrupt to the CPU.
- */
- virtual void postConsoleInt();
-
- /**
- * Clear a posted CPU interrupt
- */
- virtual void clearConsoleInt();
-
- /**
- * Cause the chipset to post a pci interrupt to the CPU.
- */
- virtual void postPciInt(int line);
-
- /**
- * Clear a posted PCI->CPU interrupt
- */
- virtual void clearPciInt(int line);
-
-
- virtual Addr pciToDma(Addr pciAddr) const;
-
- /**
- * Calculate the configuration address given a bus/dev/func.
- */
- virtual Addr calcPciConfigAddr(int bus, int dev, int func);
-
- /**
- * Calculate the address for an IO location on the PCI bus.
- */
- virtual Addr calcPciIOAddr(Addr addr);
+ public:
+ void postConsoleInt() override;
+ void clearConsoleInt() override;
- /**
- * Calculate the address for a memory location on the PCI bus.
- */
- virtual Addr calcPciMemAddr(Addr addr);
+ void postPciInt(int line) override;
+ void clearPciInt(int line) override;
};
#endif // __DEV_PC_HH__