Changes

665 bytes added ,  06:54, 20 October 2015
no edit summary
Line 263: Line 263:  
There are 2 tables in the ARM11 kernel: the first has 32 * 2(or 32 * 4) 8-byte entries.  This table is for the private interrupts that belong to each core.  The data for each interrupt can be found by doing table_base + (core_num * 0x100) + (intr_num * 8).  The second table is for public hardware interrupts and the data for each interrupt can be retrieved by doing table_base + (intr_num * 8).
 
There are 2 tables in the ARM11 kernel: the first has 32 * 2(or 32 * 4) 8-byte entries.  This table is for the private interrupts that belong to each core.  The data for each interrupt can be found by doing table_base + (core_num * 0x100) + (intr_num * 8).  The second table is for public hardware interrupts and the data for each interrupt can be retrieved by doing table_base + (intr_num * 8).
    +
 +
= InterruptData =
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Offset
 +
!  Type
 +
!  Description
 +
|-
 +
| 0x0
 +
| u32
 +
| Pointer to interrupt data object for interrupt number
 +
|-
 +
| 0x4
 +
| u8
 +
| Interrupt is pending
 +
|-
 +
| 0x5
 +
| u8
 +
| Interrupt is enabled, about to execute
 +
|-
 +
| 0x6
 +
| u8
 +
| Interrupt priority
 +
|-
 +
| 0x7
 +
| u8
 +
| Unused, alignment
 +
|}
 +
 +
The interrupt data pointer is a pointer to the object that handles that interrupt.  The first first word in the object is a pointer to the object's vtable and the first function in the vtable is the interrupt handler for that interrupt number.  When an interrupt runs, the function is passed its object in r0 and the interrupt number in r1.
    
= Interrupt Table =
 
= Interrupt Table =
374

edits