X86: Actually use the extra vector bits we get from ICW2.
authorGabe Black <gblack@eecs.umich.edu>
Sun, 12 Oct 2008 20:51:48 +0000 (13:51 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Sun, 12 Oct 2008 20:51:48 +0000 (13:51 -0700)
src/dev/x86/i8259.cc
src/dev/x86/i8259.hh

index dbc8ab76804e65cdedcd42af85921f35c0c5e53c..a67baa8e26b306aa0a5964e7992b625a12a3635e 100644 (file)
@@ -128,8 +128,9 @@ X86ISA::I8259::write(PacketPtr pkt)
             break;
           case 0x1:
             DPRINTF(I8259, "Received initialization command word 2.\n");
+            vectorOffset = val & ~mask(3);
             DPRINTF(I8259, "Responsible for vectors %#x-%#x.\n",
-                    val & ~mask(3), val | mask(3));
+                    vectorOffset, vectorOffset | mask(3));
             if (cascadeMode) {
                 initControlWord++;
             } else {
index 7804fe3b73776c4f9d68822ff6a30f3866e3de50..107cd015c9bd70fca53de5184d6b3c7a0f2a08a3 100644 (file)
@@ -53,6 +53,9 @@ class I8259 : public BasicPioDevice, public IntDev
     // Interrupt Mask Register
     uint8_t IMR;
 
+    // The higher order bits of the vector to return
+    uint8_t vectorOffset;
+
     bool cascadeMode;
     // A bit vector of lines with slaves attached, or the slave id, depending
     // on if this is a master or slave PIC.
@@ -77,7 +80,7 @@ class I8259 : public BasicPioDevice, public IntDev
     I8259(Params * p) : BasicPioDevice(p), IntDev(this),
                         latency(p->pio_latency), output(p->output),
                         mode(p->mode), IRR(0), ISR(0), IMR(0),
-                        readIRR(true), initControlWord(0)
+                        vectorOffset(0), readIRR(true), initControlWord(0)
     {
         pioSize = 2;
     }