SE/FS: Put platform pointers in fewer objects.
Not all objects need a platform pointer, and having one creates a dependence on their being a platform object. This change removes the platform pointer to from the base device object and moves it into subclasses that actually need it.
This commit is contained in:
@@ -26,7 +26,9 @@
|
||||
#
|
||||
# Authors: Gabe Black
|
||||
|
||||
from m5.defines import buildEnv
|
||||
from m5.params import *
|
||||
from m5.proxy import *
|
||||
from Device import BasicPioDevice
|
||||
|
||||
class X86LocalApic(BasicPioDevice):
|
||||
@@ -36,3 +38,6 @@ class X86LocalApic(BasicPioDevice):
|
||||
int_port = Port("Port for sending and receiving interrupt messages")
|
||||
int_latency = Param.Latency('1ns', \
|
||||
"Latency for an interrupt to propagate through this device.")
|
||||
if buildEnv['FULL_SYSTEM']: # No platform in SE mode.
|
||||
platform = Param.Platform(Parent.any,
|
||||
"Platform this device is part of.")
|
||||
|
||||
@@ -302,10 +302,11 @@ X86ISA::Interrupts::init()
|
||||
//
|
||||
BasicPioDevice::init();
|
||||
IntDev::init();
|
||||
|
||||
#if FULL_SYSTEM
|
||||
Pc * pc = dynamic_cast<Pc *>(platform);
|
||||
assert(pc);
|
||||
pc->southBridge->ioApic->registerLocalApic(initialApicId, this);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -613,6 +614,9 @@ X86ISA::Interrupts::Interrupts(Params * p) :
|
||||
pendingStartup(false), startupVector(0),
|
||||
startedUp(false), pendingUnmaskableInt(false),
|
||||
pendingIPIs(0), cpu(NULL)
|
||||
#if FULL_SYSTEM
|
||||
, platform(p->platform)
|
||||
#endif
|
||||
{
|
||||
pioSize = PageBytes;
|
||||
memset(regs, 0, sizeof(regs));
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "arch/x86/faults.hh"
|
||||
#include "arch/x86/intmessage.hh"
|
||||
#include "base/bitfield.hh"
|
||||
#include "config/full_system.hh"
|
||||
#include "cpu/thread_context.hh"
|
||||
#include "dev/x86/intdev.hh"
|
||||
#include "dev/io_device.hh"
|
||||
@@ -175,6 +176,10 @@ class Interrupts : public BasicPioDevice, IntDev
|
||||
|
||||
int initialApicId;
|
||||
|
||||
#if FULL_SYSTEM
|
||||
Platform *platform;
|
||||
#endif
|
||||
|
||||
public:
|
||||
/*
|
||||
* Params stuff.
|
||||
|
||||
Reference in New Issue
Block a user