Friedrich-Alexander-Universität Erlangen-Nürnberg  /   Technische Fakultät  /   Department Informatik
idt.h-Dateireferenz

Enthält die Interrupt Descriptor Table. Mehr ...

#include "types.h"
Dieser Graph zeigt, welche Datei direkt oder indirekt diese Datei enthält:

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 ...
 

Ausführliche Beschreibung

Enthält die Interrupt Descriptor Table.

Dokumentation der Funktionen

◆ handle()

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.

Parameter
vectorInterruptvektor zu der die Behandlung gesetzt/geändert werden soll
handler(lowlevel) Einsrpungsfunktion für die Behandlung
typeGatetyp (Interrupt, Trap oder Task)
size16- oder 32-bit
dplBerechtigung für die Interruptauslösung (Kernel oder Userspace)
presentIst die Behandlung Verfügbar?

◆ init()

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).

Parameter
setupHandlerBehandlungsroutinen zuweisen (dies muss auf dem Bootstrapprozessor geschehen)
maxHöchster Interruptvektor (inklusive)