
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 (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 | ( | uint8_t | max = 255 | ) |
Initialisiere die IDT mit den Standardeinsprungsfunktion für die Interruptbehandlung.
Es werden die 'irq_handler_VECTOR'-Behandlungsroutinen aus der 'interrupt.asm' in die Interrupt Description Table eingetragen, welche den Kontext sichern und zu guardian() springen.
max | Höchster Interruptvektor (inklusive) |