arm: Add a method to query interrupt state ignoring CPSR masks
authorAndreas Sandberg <andreas.sandberg@arm.com>
Mon, 22 Apr 2013 17:20:32 +0000 (13:20 -0400)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Mon, 22 Apr 2013 17:20:32 +0000 (13:20 -0400)
Add the method checkRaw to ArmISA::Interrupts. This method can be used
to query the raw state (ignoring CPSR masks) of an interrupt. It is
primarily intended for hardware virtualized CPUs.

src/arch/arm/interrupts.hh

index 82c0bb713cdceb690d32d3921ed395582a0597d4..7def6ddd6021c60cc3b2125d41c6cd4e7630f187 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010 ARM Limited
+ * Copyright (c) 2010,2012 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -150,6 +150,24 @@ class Interrupts : public SimObject
         return intStatus;
     }
 
+    /**
+     * Check the state of a particular interrupt, ignoring CPSR masks.
+     *
+     * This method is primarily used when running the target CPU in a
+     * hardware VM (e.g., KVM) to check if interrupts should be
+     * delivered upon guest entry.
+     *
+     * @param interrupt Interrupt type to check the state of.
+     * @return true if the interrupt is asserted, false otherwise.
+     */
+    bool
+    checkRaw(InterruptTypes interrupt) const
+    {
+        if (interrupt >= NumInterruptTypes)
+            panic("Interrupt number out of range.\n");
+
+        return interrupts[interrupt];
+    }
 
     Fault
     getInterrupt(ThreadContext *tc)