
Enthält die Interrupt Descriptor Table. Mehr ...
#include "types.h"
Aufzählungen | |
enum | Gate { GATE_TASK = 0x5, GATE_INT = 0x6, GATE_TRAP = 0x7 } |
enum | GateSize { GATE_SIZE_16 = 0, GATE_SIZE_32 = 1 } |
enum | DPL { DPL_KERNEL = 0, DPL_USER = 3 } |
Funktionen | |
void | IDT::init (bool setupHandler, uint8_t max=255) |
Initialisiere die IDT mit den Standardeinsprungsfunktion für die Interruptbehandlung. Mehr ... | |
void | IDT::handle (uint8_t vector, void *handler, enum Gate type=Gate::GATE_INT, enum GateSize size=GateSize::GATE_SIZE_32, enum DPL dpl=DPL::DPL_KERNEL, bool present=true) |
Einsprungsfunktion für Interruptbehandlung. Mehr ... | |
Enthält die Interrupt Descriptor Table.
void IDT::handle | ( | uint8_t | vector, |
void * | handler, | ||
enum Gate | type = Gate::GATE_INT , |
||
enum GateSize | size = GateSize::GATE_SIZE_32 , |
||
enum DPL | dpl = DPL::DPL_KERNEL , |
||
bool | present = true |
||
) |
Einsprungsfunktion für Interruptbehandlung.
Die gewählte Einsprungsfunktion muss zuerst die ganze Sicherung der Register übernehmen.
vector | Interruptvektor zu der die Behandlung gesetzt/geändert werden soll |
handler | (lowlevel) Einsrpungsfunktion für die Behandlung |
type | Gatetyp (Interrupt, Trap oder Task) |
size | 16- oder 32-bit |
dpl | Berechtigung für die Interruptauslösung (Kernel oder Userspace) |
present | Ist die Behandlung Verfügbar? |
void IDT::init | ( | bool | setupHandler, |
uint8_t | max = 255 |
||
) |
Initialisiere die IDT mit den Standardeinsprungsfunktion für die Interruptbehandlung.
Es müssen beim ersten Aufruf die 'irq_handler_VECTOR'-Behandlungsroutinen aus der 'interrupt.asm' in die Interrupt Description Table (IDT) eingetragen werden, welche den Kontext sichern und zu guardian() springen. Da die gleiche IDT für alle CPUs verwendet wird, ist es ausreichend wenn dies nur auf dem Bootstrapprozessor (1. CPU) zugewiesen wird.
Danach muss (immer) die IDT mittels lidt
geladen (auf jeder CPU).
setupHandler | Behandlungsroutinen zuweisen (dies muss auf dem Bootstrapprozessor geschehen) |
max | Höchster Interruptvektor (inklusive) |