ptos/amd64: cpu: Add interrupt descriptor table

Signed-off-by: Chloe M. <chloe@mensia.org>
This commit is contained in:
2026-07-11 03:08:00 +00:00
parent cf393eab7b
commit 027074d548
2 changed files with 94 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
/*
* Copyright (c) 2026, Chloe M.
* Provided under the BSD-3 clause.
*
* Description: AMD64 interrupt gate management
* Author: Chloe M.
*/
#include <machine/idt.h>
#include <machine/gdt.h>
#include <ptdef.h>
static IDT_GATE Idt[256];
ALIGN(8) IDTR Idtr = {
.Limit = sizeof(Idt) - 1,
.Offset = (UPTR)&Idt[0]
};
VOID
MdIdtSetGate(UCHAR Vector, UPTR Offset, UCHAR Type, UCHAR Ist)
{
IDT_GATE *Gate;
Gate = &Idt[Vector];
Gate->OffsetLow16 = Offset & 0xFFFF;
Gate->OffsetMid16 = (Offset >> 16) & 0xFFFF;
Gate->OffsetHigh32 = (Offset >> 32) & 0xFFFFFFFF;
Gate->Reserved = 0;
Gate->Zero = 0;
Gate->Zero1 = 0;
Gate->Type = Type;
Gate->Dpl = (Type == IDT_USER_GATE) ? 3 : 0;
Gate->Present = 1;
Gate->Ist = Ist;
Gate->SegmentSel = GDT_KCODE;
}
VOID
MdIdtLoad(VOID)
{
ASMV(
"lidt %0"
:
: "m" (Idtr)
: "memory"
);
}