KFIQInterruptEvent

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.

OffsetTypeDescription
0x0void **Pointer to vtable
0x4KSynchronizationInterruptEvent *Next interrupt event (associated with the current one). The linked list represented by this attribute can contain cycles. Unused?
0x8KEvent *Associated event bound with svcBindInterrupt
0xCu8Is level-high active (“rising edge”) = event->isManualClear. Must be false when using svcBindInterrupt
0xDu8Unknown? 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.
0xEu8[2]Padding

Category:Kernel interrupt events