36 lines
942 B
C
36 lines
942 B
C
#pragma once
|
|
// ke_idt.h - IDT, GDT, and TSS setup
|
|
#include <stdint.h>
|
|
|
|
// 64-bit TSS - minimal; we only care about RSP0.
|
|
#pragma pack(push, 1)
|
|
typedef struct TSS64 {
|
|
uint32_t Reserved0;
|
|
uint64_t RSP0; // loaded into RSP on ring-0 entry
|
|
uint64_t RSP1;
|
|
uint64_t RSP2;
|
|
uint64_t Reserved1;
|
|
uint64_t IST[7];
|
|
uint64_t Reserved2;
|
|
uint16_t Reserved3;
|
|
uint16_t IoMapBase;
|
|
} TSS64;
|
|
#pragma pack(pop)
|
|
|
|
extern TSS64* gTss;
|
|
|
|
void KeInitializeGdt(void);
|
|
void KeInitializeIdt(void);
|
|
|
|
// Called from hal_timer.c after HPET/APIC timer fires.
|
|
void KeTimerInterrupt(void);
|
|
|
|
// Syscall entry - implemented in ke_syscall.asm.
|
|
extern void KeSyscallEntry(void);
|
|
|
|
// Fault stubs installed by KeInitializeIdt.
|
|
extern void KeFaultDE(void); // #DE divide error
|
|
extern void KeFaultGP(void); // #GP general protection
|
|
extern void KeFaultPF(void); // #PF page fault
|
|
extern void KeFaultUD(void); // #UD invalid opcode
|