Changes

Jump to navigation Jump to search
1,746 bytes added ,  23:20, 3 December 2016
Created page with "Category:Kernel objects class KFIQInterruptEvent extends KSynchronizationInterruptEvent Size : 0x10 bytes Interrupt event object a..."
[[Category:Kernel objects]]
class [[KFIQInterruptEvent]] extends [[KSynchronizationInterruptEvent|KSynchronizationInterruptEvent]]

Size : 0x10 bytes

Interrupt event object associated with SGI #15, which is the only private interrupt that can be bound using [[SVC|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 [[NCCH/Extended_Header|exheader]] flags for that interrupt at all.

The first virtual method returns <code>event->interruptEvent</code> and the second calls the corresponding second method of that interrupt event.

Bit1 of [[PDN_Registers#PDN_FIQ_CNT|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.

{| class="wikitable" border="1"
|-
! Offset
! Type
! Description
|-
| 0x0
| void **
| Pointer to vtable
|-
| 0x4
| [[KSynchronizationObject]] *
| Pointer to an object synchronizing on the current one
|-
| 0x8
| [[KEvent]] *
| Associated event bound with svcBindInterrupt
|-
| 0xC
| u8
| Is level-high active ("rising edge") = <code>event->isManualClear</code>. Must be false when using [[SVC|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
|}

Navigation menu