SVC: Difference between revisions

( ͡° ͜ʖ ͡°)
Line 516: Line 516:
| style="background: green" | Yes
| style="background: green" | Yes
| style="background: green" | Yes
| style="background: green" | Yes
| Result [[#Interrupt Handling|BindInterrupt]](Interrupt name, Handle syncObject, s32 priority, bool isLevelHighActive)
| Result [[#Interrupt Handling|BindInterrupt]](Interrupt name, Handle eventOrSemaphore, s32 priority, bool isLevelHighActive)
|
|
|-
|-
Line 523: Line 523:
| style="background: green" | Yes
| style="background: green" | Yes
| style="background: green" | Yes
| style="background: green" | Yes
| Result UnbindInterrupt(Interrupt name, Handle syncObject)
| Result UnbindInterrupt(Interrupt name, Handle eventOrSemaphore)
|
|
|-
|-
Line 1,148: Line 1,148:
= Interrupt Handling =
= Interrupt Handling =


svcBindInterrupt registers the given event corresponding to the handle to the global [[ARM11_Interrupts#Interrupt_Table_.28New3DS.29|"interrupt table"]] for the given interrupt ID. Interrupts 0-14 and 16-31 can never be mapped regardless of the [[NCCH/Extended_Header#ARM11_Kernel_Capabilities|interrupt flags of the process's exheader]], and the latter are not checked when mapping interrupt 15.
svcBindInterrupt registers the given event or semaphore corresponding to the handle to the global [[ARM11_Interrupts#Interrupt_Table_.28New3DS.29|"interrupt table"]] for the given interrupt ID. Interrupts 0-14 and 16-31 can never be mapped regardless of the [[NCCH/Extended_Header#ARM11_Kernel_Capabilities|interrupt flags of the process's exheader]], and the latter are not checked when mapping interrupt 15. The "is level high active"/"is manual clear" parameter must be false when binding a semaphore handle (otherwise 0xD8E007EE "invalid combination" is returned).


If an interrupt event was already registered for the given ID, svcBindInterrupt returns error 0xD8E007F0. See [[KBaseInterruptEvent]] for more information on what happens on receipt of an interrupt.
If something was already registered for the given ID, svcBindInterrupt returns error 0xD8E007F0. See [[KBaseInterruptEvent]] for more information on what happens on receipt of an interrupt.


Applications hence can wait for specific interrupts to happen by calling WaitSynchronization(N) on the event handles.
Applications hence can wait for specific interrupts to happen by calling WaitSynchronization(N) on the event or semaphore handles.


The set of existing ARM11 interrupts is listed on [[ARM11 Interrupts|this page]].
The set of existing ARM11 interrupts is listed on [[ARM11 Interrupts|this page]].