ARM11 Interrupts: Difference between revisions

Line 346: Line 346:
|}
|}


The first method in the table is <code>KInterruptEvent* InterruptEvent::getKInterruptEvent(u32 interruptID)</code>. It's actually the function called by the IRQ handler, which returns a [[KInterruptEvent|KInterruptEvent]] to signal.
The first method in the table is <code>virtual KInterruptEvent* InterruptEvent::getKInterruptEvent(u32 interruptID) = 0</code>. It's actually the function called by the IRQ handler, which returns a [[KInterruptEvent|KInterruptEvent]] to signal.
If NULL or 1 is returned, no event will be signaled. If NULL is returned, no post-interrupt rescheduling will be done.
If NULL or 1 is returned, no event will be signaled. If NULL is returned, no post-interrupt rescheduling will be done.


The second method is <code>void InterruptEvent::signalEvent(void)</code>, which signals the associated [[KEvent|KEvent]] object.
The second method is <code>virtual void InterruptEvent::signalEvent(void) = 0</code>, which signals the associated [[KEvent|KEvent]] object.


The kernel uses the [[KInterruptEvent|KInterruptEvent]] field of a [[KEvent|KEvent]] when binding public interrupts per svcBindInterrupt request, whereas it internally uses a static object of another subclass to bind interrupt 0x0F (FIQ abstraction).
The kernel uses the [[KInterruptEvent|KInterruptEvent]] field of a [[KEvent|KEvent]] when binding public interrupts per svcBindInterrupt request, whereas it internally uses a static object of another subclass to bind interrupt 0x0F (FIQ abstraction).