KFIQInterruptEvent
class KFIQInterruptEvent extends KSynchronizationInterruptEvent
Size : 0x10 bytes
Interrupt event object associated with SGI #15, which is the only private interrupt that can be bound using svcBindInterrupt.
Although that SGI #15 is sent to both core0 and core1, there's only one instance of KFIQInterruptEvent for all cores, the fields of which are set by svcBindInterrupt. If it has been bound on one core, it can't be bound on the others (0xD8A007FC, "already exists", is returned). It is usually bound by the dmnt or the debugger sysmodules.
svcBindInterrupt doesn't check the process's exheader flags for that interrupt at all.
The first virtual method returns event->interruptEvent
and the second calls the corresponding second method of that interrupt event.
Bit1 of PDN_FIQ_CNT is set when handling a FIQ and when unbinding SGI #15 using svcUnbindInterrupt, and cleared after the associated event has been signaled, as well as when svcBindInterrupt is used for SGI #15.
Offset | Type | Description |
---|---|---|
0x0 | void ** | Pointer to vtable |
0x4 | KSynchronizationInterruptEvent * | Next interrupt event (associated with the current one). The linked list represented by this attribute can contain cycles.
Unused? |
0x8 | KEvent * | Associated event bound with svcBindInterrupt |
0xC | u8 | Is level-high active ("rising edge") = event->isManualClear . Must be false when using svcBindInterrupt
|
0xD | u8 | Unknown? Must be true at the time the associated event is signaled, when "level-high active"/"is manual clear" is false, and is set to 1 afterwards. |
0xE | u8[2] | Padding |