diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2009-01-31 23:33:54 -0800 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2009-01-31 23:33:54 -0800 |
commit | 6a3f255a84d93f3e621319fd81f355416e385c8c (patch) | |
tree | e6dd2386d3989fdd3169d66a14c1a057463ca323 /src/dev/x86/i82094aa.cc | |
parent | 64b663c6071ecd58eff6dacd38ee351038259427 (diff) | |
download | gem5-6a3f255a84d93f3e621319fd81f355416e385c8c.tar.xz |
X86: Rework interrupt pins to allow one to many connections.
Diffstat (limited to 'src/dev/x86/i82094aa.cc')
-rw-r--r-- | src/dev/x86/i82094aa.cc | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/dev/x86/i82094aa.cc b/src/dev/x86/i82094aa.cc index a229fffc3..03944c190 100644 --- a/src/dev/x86/i82094aa.cc +++ b/src/dev/x86/i82094aa.cc @@ -36,7 +36,8 @@ #include "sim/system.hh" X86ISA::I82094AA::I82094AA(Params *p) : PioDevice(p), IntDev(this), - latency(p->pio_latency), pioAddr(p->pio_addr), extIntPic(NULL) + latency(p->pio_latency), pioAddr(p->pio_addr), + extIntPic(p->external_int_pic) { // This assumes there's only one I/O APIC in the system id = sys->numContexts(); @@ -47,6 +48,7 @@ X86ISA::I82094AA::I82094AA(Params *p) : PioDevice(p), IntDev(this), entry.mask = 1; for (int i = 0; i < TableSize; i++) { redirTable[i] = entry; + pinStates[i] = false; } } @@ -209,6 +211,22 @@ X86ISA::I82094AA::signalInterrupt(int line) } } +void +X86ISA::I82094AA::raiseInterruptPin(int number) +{ + assert(number < TableSize); + if (!pinStates[number]) + signalInterrupt(number); + pinStates[number] = true; +} + +void +X86ISA::I82094AA::lowerInterruptPin(int number) +{ + assert(number < TableSize); + pinStates[number] = false; +} + X86ISA::I82094AA * I82094AAParams::create() { |