Aufgabe 2: Unterbrechungen
Inter-Processor Interrupts. More...
Classes | |
| struct | InterruptCommand.__unnamed54__ |
| I/O redirection-table entry. More... | |
Enumerations | |
| enum | DeliveryMode { FIXED = 0 , LOWEST_PRIORITY = 1 , SMI = 2 , NMI = 4 , INIT = 5 , INIT_LEVEL_DEASSERT = 5 , STARTUP = 6 } |
| Delivery mode specifies the type of interrupt sent to the CPU. More... | |
| enum | DestinationMode { PHYSICAL = 0 , LOGICAL = 1 } |
| Way of interpreting the value written to the destination field. More... | |
| enum | DeliveryStatus { IDLE = 0 , SEND_PENDING = 1 } |
| Interrupt state. More... | |
| enum | Level { DEASSERT = 0 , ASSERT = 1 } |
| Interrupt level. More... | |
| enum | TriggerMode { EDGE_TRIGGERED = 0 , LEVEL_TRIGGERED = 1 } |
| Trigger mode for DeliveryMode::INIT_LEVEL_DEASSERT. More... | |
| enum | DestinationShorthand { NO_SHORTHAND = 0 , SELF = 1 , ALL_INCLUDING_SELF = 2 , ALL_EXCLUDING_SELF = 3 } |
| Shorthand for commonly used destinations. More... | |
| enum | InterruptMask { UNMASKED = 0 , MASKED = 1 } |
| Interrupt mask. More... | |
Functions | |
| bool | isDelivered () |
| Check if the previously sent IPI has reached its destination. More... | |
| void | send (uint8_t destination, uint8_t vector) |
| Send an Inter-Processor Interrupt (IPI) More... | |
| void | sendGroup (uint8_t logical_destination, uint8_t vector) |
| Send an Inter-Processor Interrupt (IPI) to a group of processors. More... | |
| void | sendAll (uint8_t vector) |
| Send an Inter-Processor Interrupt (IPI) to all processors (including self) More... | |
| void | sendOthers (uint8_t vector) |
| Send an Inter-Processor Interrupt (IPI) to all other processors (all but self) More... | |
| void | sendInit (bool assert=true) |
| Send an INIT request IPI to all other processors. More... | |
| void | sendStartup (uint8_t vector) |
| Send an Startup IPI to all other processors. More... | |
Detailed Description
Inter-Processor Interrupts.
For multi-core systems, the LAPIC enables sending messages (Inter-Processor Interrupts, IPIs) to other CPU cores and receiving those sent from other cores.
Class Documentation
| struct LAPIC::IPI::InterruptCommand.__unnamed54__ |
I/O redirection-table entry.
Every entry in the redirection table represents an external source of interrupts and has a size of 64 bits. Due to the I/O APIC registers being only 32 bits wide, the 64-bit value is split in two 32 bit values.
| Class Members | ||
|---|---|---|
| Register | value_low | First, low-order register. |
| Register | value_high | Second, high-order register. |
Enumeration Type Documentation
Delivery mode specifies the type of interrupt sent to the CPU.
| enum LAPIC::IPI::Level |
Function Documentation
| bool LAPIC::IPI::isDelivered | ( | ) |
Check if the previously sent IPI has reached its destination.
- Returns
trueif the previous IPI was accepted from its target processor, otherwisefalse
| void LAPIC::IPI::send | ( | uint8_t | destination, |
| uint8_t | vector | ||
| ) |
Send an Inter-Processor Interrupt (IPI)
- Parameters
-
destination ID of the target processor (use APIC::getLAPICID(core) ) vector Interrupt vector number to be triggered
| void LAPIC::IPI::sendGroup | ( | uint8_t | logical_destination, |
| uint8_t | vector | ||
| ) |
Send an Inter-Processor Interrupt (IPI) to a group of processors.
- Parameters
-
logical_destination Mask containing the logical APIC IDs of the target processors (use APIC::getLogicalLAPICID()) vector Interrupt vector number to be triggered
| void LAPIC::IPI::sendAll | ( | uint8_t | vector | ) |
Send an Inter-Processor Interrupt (IPI) to all processors (including self)
- Parameters
-
vector Interrupt vector number to be triggered
| void LAPIC::IPI::sendOthers | ( | uint8_t | vector | ) |
Send an Inter-Processor Interrupt (IPI) to all other processors (all but self)
- Parameters
-
vector Interrupt vector number to be triggered
| void LAPIC::IPI::sendInit | ( | bool | assert = true | ) |
Send an INIT request IPI to all other processors.
- Note
- Only required for startup
- Parameters
-
assert if truesend an INIT, onfalsesend an INIT Level De-assert
| void LAPIC::IPI::sendStartup | ( | uint8_t | vector | ) |
Send an Startup IPI to all other processors.
- Note
- Only required for startup
- Parameters
-
vector Pointer to a startup routine