Compare commits

..

No commits in common. "36a74fd8d6e0713f5ff3d5cfadd1f3d13480e353" and "0d924f89d39a442eefcaff870f7ba3cb852e6993" have entirely different histories.

3 changed files with 6 additions and 12 deletions

View File

@ -1,8 +1,6 @@
#include "arch/MMU.h"
#include "arch/x86_64/CPU.h"
#include <luna/CString.h>
#include <luna/Check.h>
#include <luna/Stack.h>
#include <luna/Types.h>
struct [[gnu::packed]] GDTR
@ -77,13 +75,10 @@ static void set_tss_base(GDTEntry* tss1, HighGDTEntry* tss2, u64 addr)
tss2->base_high = (u32)(addr >> 32);
}
static u8 alternate_stack[ARCH_PAGE_SIZE * 4];
static void setup_tss()
{
memset(&task_state_segment, 0, sizeof(TSS));
task_state_segment.iomap_base = sizeof(TSS);
task_state_segment.ist[0] = Stack { (u64)alternate_stack, ARCH_PAGE_SIZE * 4 }.top();
set_tss_base(&gdt.tss, &gdt.tss2, (u64)&task_state_segment);
set_limit(&gdt.tss, sizeof(TSS) - 1);
}

View File

@ -47,21 +47,20 @@ struct [[gnu::packed]] IDTR
static_assert(sizeof(IDTR) == 10UL);
static void idt_add_handler(short num, void* handler, u8 type_attr, u8 ist)
static void idt_add_handler(short num, void* handler, u8 type_attr)
{
check(handler != nullptr);
expect(num < 256, "IDT can only hold up to 256 entries");
IDTEntry* const entry_for_handler = &idt[num];
entry_for_handler->selector = 0x08;
entry_for_handler->type_attr = type_attr;
entry_for_handler->ist = ist;
entry_for_handler->set_offset((u64)handler);
}
#define INT(x) extern "C" void _isr##x()
#define TRAP(x) idt_add_handler(x, (void*)_isr##x, IDT_TA_TrapGate, 1)
#define IRQ(x) idt_add_handler(x, (void*)_isr##x, IDT_TA_InterruptGate, 0)
#define SYS(x) idt_add_handler(x, (void*)_isr##x, IDT_TA_UserCallableInterruptGate, 0)
#define TRAP(x) idt_add_handler(x, (void*)_isr##x, IDT_TA_TrapGate)
#define IRQ(x) idt_add_handler(x, (void*)_isr##x, IDT_TA_InterruptGate)
#define SYS(x) idt_add_handler(x, (void*)_isr##x, IDT_TA_UserCallableInterruptGate)
INT(0);
INT(1);

View File

@ -214,11 +214,11 @@ namespace TextConsole
u16 rows()
{
return (u16)Framebuffer::height() / (u16)FONT_HEIGHT;
return (u16)Framebuffer::height() / FONT_HEIGHT;
}
u16 cols()
{
return (u16)Framebuffer::width() / (u16)FONT_WIDTH;
return (u16)Framebuffer::width() / FONT_WIDTH;
}
}