summaryrefslogtreecommitdiff
path: root/src/dev/arm/gic.hh
diff options
context:
space:
mode:
authorPrakash Ramrakhani <Prakash.Ramrakhani@arm.com>2011-08-19 15:08:05 -0500
committerPrakash Ramrakhani <Prakash.Ramrakhani@arm.com>2011-08-19 15:08:05 -0500
commitefd91d22371c243348cc0fc9c68a72c55f7e8a1e (patch)
treea4619f0116c89c0b113ad5c28b07181ea757360c /src/dev/arm/gic.hh
parent9b356adf54effa420918c1f869f8948595b1d03d (diff)
downloadgem5-efd91d22371c243348cc0fc9c68a72c55f7e8a1e.tar.xz
ARM: Add per-processor interrupt support to GIC.
Diffstat (limited to 'src/dev/arm/gic.hh')
-rw-r--r--src/dev/arm/gic.hh12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/dev/arm/gic.hh b/src/dev/arm/gic.hh
index ea498bca1..810064ed4 100644
--- a/src/dev/arm/gic.hh
+++ b/src/dev/arm/gic.hh
@@ -100,6 +100,7 @@ class Gic : public PioDevice
static const int CPU_SIZE = 0xff;
static const int SGI_MAX = 16; // Number of Software Gen Interrupts
+ static const int PPI_MAX = 16; // Number of Private Peripheral Interrupts
/** Mask off SGI's when setting/clearing pending bits */
static const int SGI_MASK = 0xFFFF0000;
@@ -195,6 +196,14 @@ class Gic : public PioDevice
uint64_t cpuSgiPending[SGI_MAX];
uint64_t cpuSgiActive[SGI_MAX];
+ /** One bit per private peripheral interrupt. Only upper 16 bits
+ * will be used since PPI interrupts are numberred from 16 to 32 */
+ uint32_t cpuPpiPending[CPU_MAX];
+ uint32_t cpuPpiActive[CPU_MAX];
+
+ /** Banked interrupt prioirty registers for SGIs and PPIs */
+ uint8_t bankedIntPriority[CPU_MAX][SGI_MAX + PPI_MAX];
+
/** IRQ Enable Used for debug */
bool irqEnable;
@@ -284,6 +293,9 @@ class Gic : public PioDevice
* @param number number of interrupt to send */
void sendInt(uint32_t number);
+ /** Interface call for private peripheral interrupts */
+ void sendPPInt(uint32_t num, uint32_t cpu);
+
/** Clear an interrupt from a device that is connected to the Gic
* Depending on the configuration, the gic may de-assert it's cpu line
* @param number number of interrupt to send */