The GIC supports four types of interrupts:
- Software Generated Interrupts (SGIs): There are 16 SGIs (ID0-ID15). These are inter-processor interrupts. SGIs can be sent using either Arm system registers or by writing to the Software Generated Interrupt Register (GICD_SGIR).
- Private Peripheral Interrupts (PPIs): There are 16 PPIs (ID16-ID31). These are wired interrupts dedicated to a specific CPU. Many are reserved to specific functions via convention. These can be either active-low levels (by default), or rising edge triggered (software programmable).
- Shared Peripheral Interrupts (SPIs): There are 960 SPIs (ID32-ID991). These are wired interrupts that can be routed to any core or cluster, based on the programming of that interrupt in the GIC. These are active-high levels (by default), or rising edge triggered (software programmable).
- Locality-Specific Peripheral Interrupts (LPIs): There are 57,344 of these. These interrupts are used for message-based interrupts from a peripheral. They are generated through writes to the GIC slave interface. The information associated with these is located in memory. The GIC keeps a small 64-entries cache on-board in order to reduce latency either for specific interrupts or for most-recently-used. LPIs can be routed to different CPUs based on programmed rules.
The mapping of PPIs and SPIs can be found in
section TBD .