From b3ca9af48a0d4946a08f48bc7fc0061578ed4546 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 6 Sep 2022 22:35:41 -0400 Subject: [PATCH] Disable PIC --- src/hos/cpu.d | 10 ++++++++++ src/hulk/hulk.d | 2 ++ src/hulk/pic.d | 16 ++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 src/hulk/pic.d diff --git a/src/hos/cpu.d b/src/hos/cpu.d index 9fb02ad..10ee1ac 100644 --- a/src/hos/cpu.d +++ b/src/hos/cpu.d @@ -40,6 +40,11 @@ ulong read_cr4() return __asm!ulong("mov %cr4, %rax", "={rax}"); } +ubyte in8(ushort ioaddr) +{ + return __asm!ubyte("inb %dx, %al", "={al},{dx}", ioaddr); +} + ushort in16(ushort ioaddr) { return __asm!ushort("inw %dx, %ax", "={ax},{dx}", ioaddr); @@ -50,6 +55,11 @@ ulong in32(ushort ioaddr) return __asm!ulong("inl %dx, %eax", "={eax},{dx}", ioaddr); } +void out8(ushort ioaddr, ubyte v) +{ + __asm("outb %al, %dx", "{dx},{al}", ioaddr, v); +} + void out16(ushort ioaddr, ushort v) { __asm("outw %ax, %dx", "{dx},{ax}", ioaddr, v); diff --git a/src/hulk/hulk.d b/src/hulk/hulk.d index 419d828..eab7d4b 100644 --- a/src/hulk/hulk.d +++ b/src/hulk/hulk.d @@ -17,6 +17,7 @@ import hulk.gdt; import hulk.idt; import hos.cpu; import ldc.llvmasm; +import hulk.pic; extern extern(C) __gshared ubyte _hulk_total_size; @@ -47,6 +48,7 @@ void hulk_start() hippo.initialize(&hulk_header); pci.initialize(); + pic.initialize(); sti(); for (;;) diff --git a/src/hulk/pic.d b/src/hulk/pic.d new file mode 100644 index 0000000..ffc8ca6 --- /dev/null +++ b/src/hulk/pic.d @@ -0,0 +1,16 @@ +/** + * PIC (Programmable Interrupt Controller) functionality. + */ +module hulk.pic; + +import hos.cpu; + +struct pic +{ + public static void initialize() + { + /* Disable the PIC. */ + out8(0xA1u, 0xFFu); + out8(0x21u, 0xFFu); + } +}