summaryrefslogtreecommitdiff
path: root/src/dev/x86
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2009-04-26 02:06:21 -0700
committerGabe Black <gblack@eecs.umich.edu>2009-04-26 02:06:21 -0700
commitc5e2cf841d2502479a8f00c20ab70ab9ae325d69 (patch)
treecddec849e22944583155adb0400511c1773346e3 /src/dev/x86
parent8d84f81e7041bd26320b0795800100f2aa298965 (diff)
downloadgem5-c5e2cf841d2502479a8f00c20ab70ab9ae325d69.tar.xz
X86: Record the initial APIC ID which identifies an APIC in M5.
The ID as exposed to software can be changed. Tracking those changes in M5 would be cumbersome, especially since there's no guarantee the IDs will remain unique.
Diffstat (limited to 'src/dev/x86')
-rw-r--r--src/dev/x86/i82094aa.cc2
-rw-r--r--src/dev/x86/i82094aa.hh6
2 files changed, 5 insertions, 3 deletions
diff --git a/src/dev/x86/i82094aa.cc b/src/dev/x86/i82094aa.cc
index 21332c3ae..e55f1ec87 100644
--- a/src/dev/x86/i82094aa.cc
+++ b/src/dev/x86/i82094aa.cc
@@ -40,7 +40,7 @@ X86ISA::I82094AA::I82094AA(Params *p) : PioDevice(p), IntDev(this),
extIntPic(p->external_int_pic)
{
// This assumes there's only one I/O APIC in the system
- id = p->apic_id;
+ initialApicId = id = p->apic_id;
assert(id <= 0xf);
arbId = id;
regSel = 0;
diff --git a/src/dev/x86/i82094aa.hh b/src/dev/x86/i82094aa.hh
index 598e218f8..7501259c1 100644
--- a/src/dev/x86/i82094aa.hh
+++ b/src/dev/x86/i82094aa.hh
@@ -68,6 +68,7 @@ class I82094AA : public PioDevice, public IntDev
I8259 * extIntPic;
uint8_t regSel;
+ uint8_t initialApicId;
uint8_t id;
uint8_t arbId;
@@ -103,8 +104,9 @@ class I82094AA : public PioDevice, public IntDev
void getIntAddrRange(AddrRangeList &range_list)
{
range_list.clear();
- range_list.push_back(RangeEx(x86InterruptAddress(id, 0),
- x86InterruptAddress(id, 0) + PhysAddrAPICRangeSize));
+ range_list.push_back(RangeEx(x86InterruptAddress(initialApicId, 0),
+ x86InterruptAddress(initialApicId, 0) +
+ PhysAddrAPICRangeSize));
}
void writeReg(uint8_t offset, uint32_t value);