Browse Source

Kernel::CPU: Move headers into common directory

Alot of code is shared between i386/i686/x86 and x86_64
and a lot probably will be used for compatability modes.
So we start by moving the headers into one Directory.
We will probalby be able to move some cpp files aswell.
Hendiadyoin1 4 years ago
parent
commit
0d934fc991
60 changed files with 412 additions and 208 deletions
  1. 1 1
      AK/NonnullRefPtr.h
  2. 1 1
      AK/RefPtr.h
  3. 1 1
      AK/Singleton.h
  4. 1 1
      AK/Weakable.h
  5. 10 10
      Kernel/Arch/i386/CPU.cpp
  6. 5 37
      Kernel/Arch/i386/InterruptEntry.cpp
  7. 2 2
      Kernel/Arch/i386/ProcessorInfo.cpp
  8. 2 2
      Kernel/Arch/i386/SafeMem.cpp
  9. 4 84
      Kernel/Arch/x86/CPU.h
  10. 19 19
      Kernel/Arch/x86/DescriptorTable.h
  11. 1 1
      Kernel/Arch/x86/ISRStubs.h
  12. 52 0
      Kernel/Arch/x86/Interrupts.h
  13. 170 0
      Kernel/Arch/x86/PageDirectory.h
  14. 0 0
      Kernel/Arch/x86/ProcessorInfo.h
  15. 0 0
      Kernel/Arch/x86/SafeMem.h
  16. 1 1
      Kernel/Arch/x86/SmapDisabler.h
  17. 88 0
      Kernel/Arch/x86/TSS.h
  18. 9 3
      Kernel/CMakeLists.txt
  19. 1 1
      Kernel/Devices/FullDevice.cpp
  20. 1 1
      Kernel/Devices/KeyboardDevice.cpp
  21. 1 1
      Kernel/Devices/PCSpeaker.cpp
  22. 1 1
      Kernel/Devices/VMWareBackdoor.cpp
  23. 2 2
      Kernel/FileSystem/ProcFS.cpp
  24. 1 1
      Kernel/Heap/kmalloc.cpp
  25. 1 1
      Kernel/IO.h
  26. 2 2
      Kernel/Interrupts/APIC.cpp
  27. 1 1
      Kernel/Interrupts/GenericInterruptHandler.cpp
  28. 1 1
      Kernel/Interrupts/GenericInterruptHandler.h
  29. 1 1
      Kernel/Interrupts/IOAPIC.cpp
  30. 1 1
      Kernel/Interrupts/IRQHandler.cpp
  31. 1 1
      Kernel/Interrupts/IRQHandler.h
  32. 1 1
      Kernel/Interrupts/InterruptManagement.cpp
  33. 1 1
      Kernel/Interrupts/MSIHandler.h
  34. 1 1
      Kernel/Interrupts/PIC.cpp
  35. 1 1
      Kernel/Interrupts/SharedIRQHandler.cpp
  36. 1 1
      Kernel/Interrupts/SharedIRQHandler.h
  37. 1 1
      Kernel/Interrupts/SpuriousInterruptHandler.h
  38. 1 1
      Kernel/Interrupts/UnhandledInterruptHandler.h
  39. 1 1
      Kernel/Lock.h
  40. 1 1
      Kernel/Panic.cpp
  41. 1 1
      Kernel/Process.cpp
  42. 1 1
      Kernel/Random.cpp
  43. 1 1
      Kernel/Random.h
  44. 1 1
      Kernel/SpinLock.h
  45. 1 1
      Kernel/StdLib.cpp
  46. 1 1
      Kernel/Syscall.cpp
  47. 1 1
      Kernel/Syscalls/sysconf.cpp
  48. 1 1
      Kernel/TTY/VirtualConsole.cpp
  49. 1 1
      Kernel/Thread.cpp
  50. 2 2
      Kernel/Thread.h
  51. 1 1
      Kernel/ThreadTracer.cpp
  52. 1 1
      Kernel/Time/APICTimer.cpp
  53. 1 1
      Kernel/Time/PIT.cpp
  54. 1 1
      Kernel/Time/RTC.cpp
  55. 1 1
      Kernel/VM/MemoryManager.cpp
  56. 1 1
      Kernel/VM/MemoryManager.h
  57. 1 1
      Kernel/VM/PhysicalPage.h
  58. 1 1
      Kernel/VM/Range.cpp
  59. 1 1
      Kernel/VM/Region.h
  60. 1 1
      Kernel/init.cpp

+ 1 - 1
AK/NonnullRefPtr.h

@@ -31,7 +31,7 @@
 #include <AK/Format.h>
 #include <AK/Types.h>
 #ifdef KERNEL
-#    include <Kernel/Arch/i386/CPU.h>
+#    include <Kernel/Arch/x86/CPU.h>
 #endif
 
 namespace AK {

+ 1 - 1
AK/RefPtr.h

@@ -33,7 +33,7 @@
 #include <AK/Traits.h>
 #include <AK/Types.h>
 #ifdef KERNEL
-#    include <Kernel/Arch/i386/CPU.h>
+#    include <Kernel/Arch/x86/CPU.h>
 #endif
 
 namespace AK {

+ 1 - 1
AK/Singleton.h

@@ -30,7 +30,7 @@
 #include <AK/Atomic.h>
 #include <AK/Noncopyable.h>
 #ifdef KERNEL
-#    include <Kernel/Arch/i386/CPU.h>
+#    include <Kernel/Arch/x86/CPU.h>
 #endif
 
 #ifndef __serenity__

+ 1 - 1
AK/Weakable.h

@@ -32,7 +32,7 @@
 #include "RefPtr.h"
 #include "StdLibExtras.h"
 #ifdef KERNEL
-#    include <Kernel/Arch/i386/CPU.h>
+#    include <Kernel/Arch/x86/CPU.h>
 #endif
 
 namespace AK {

+ 10 - 10
Kernel/Arch/i386/CPU.cpp

@@ -29,10 +29,10 @@
 #include <AK/String.h>
 #include <AK/StringBuilder.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
-#include <Kernel/Arch/i386/ISRStubs.h>
-#include <Kernel/Arch/i386/ProcessorInfo.h>
-#include <Kernel/Arch/i386/SafeMem.h>
+#include <Kernel/Arch/x86/CPU.h>
+#include <Kernel/Arch/x86/ISRStubs.h>
+#include <Kernel/Arch/x86/ProcessorInfo.h>
+#include <Kernel/Arch/x86/SafeMem.h>
 #include <Kernel/Debug.h>
 #include <Kernel/IO.h>
 #include <Kernel/Interrupts/APIC.h>
@@ -2309,8 +2309,8 @@ UNMAP_AFTER_INIT void Processor::gdt_init()
     tls_descriptor.dpl = 3;
     tls_descriptor.segment_present = 1;
     tls_descriptor.granularity = 0;
-    tls_descriptor.zero = 0;
-    tls_descriptor.operation_size = 1;
+    tls_descriptor.operation_size64 = 0;
+    tls_descriptor.operation_size32 = 1;
     tls_descriptor.descriptor_type = 1;
     tls_descriptor.type = 2;
     write_gdt_entry(GDT_SELECTOR_TLS, tls_descriptor); // tls3
@@ -2321,8 +2321,8 @@ UNMAP_AFTER_INIT void Processor::gdt_init()
     fs_descriptor.dpl = 0;
     fs_descriptor.segment_present = 1;
     fs_descriptor.granularity = 0;
-    fs_descriptor.zero = 0;
-    fs_descriptor.operation_size = 1;
+    fs_descriptor.operation_size64 = 0;
+    fs_descriptor.operation_size32 = 1;
     fs_descriptor.descriptor_type = 1;
     fs_descriptor.type = 2;
     write_gdt_entry(GDT_SELECTOR_PROC, fs_descriptor); // fs0
@@ -2333,8 +2333,8 @@ UNMAP_AFTER_INIT void Processor::gdt_init()
     tss_descriptor.dpl = 0;
     tss_descriptor.segment_present = 1;
     tss_descriptor.granularity = 0;
-    tss_descriptor.zero = 0;
-    tss_descriptor.operation_size = 1;
+    tss_descriptor.operation_size64 = 0;
+    tss_descriptor.operation_size32 = 1;
     tss_descriptor.descriptor_type = 0;
     tss_descriptor.type = 9;
     write_gdt_entry(GDT_SELECTOR_TSS, tss_descriptor); // tss

+ 5 - 37
Kernel/Arch/i386/Interrupts.h → Kernel/Arch/i386/InterruptEntry.cpp

@@ -24,24 +24,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#pragma once
-
-#include <AK/Assertions.h>
-#include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
-
-extern "C" void interrupt_common_asm_entry();
-
-#if ARCH(I386)
-
-#    define GENERATE_GENERIC_INTERRUPT_HANDLER_ASM_ENTRY(isr_number) \
-        extern "C" void interrupt_##isr_number##_asm_entry();        \
-        asm(".globl interrupt_" #isr_number "_asm_entry\n"           \
-            "interrupt_" #isr_number "_asm_entry:\n"                 \
-            "    pushw $" #isr_number "\n"                           \
-            "    pushw $0\n"                                         \
-            "    jmp interrupt_common_asm_entry\n");
-
+#include <Kernel/Arch/x86/CPU.h>
+#include <Kernel/Arch/x86/DescriptorTable.h>
 // clang-format off
 asm(
     ".globl interrupt_common_asm_entry\n"
@@ -68,9 +52,9 @@ asm(
     "    movl %ebx, 0(%esp) \n" // push pointer to TrapFrame
     ".globl common_trap_exit \n"
     "common_trap_exit: \n"
-         // another thread may have handled this trap at this point, so don't
-         // make assumptions about the stack other than there's a TrapFrame
-         // and a pointer to it.
+    // another thread may have handled this trap at this point, so don't
+    // make assumptions about the stack other than there's a TrapFrame
+    // and a pointer to it.
     "    call exit_trap \n"
     "    addl $" __STRINGIFY(TRAP_FRAME_SIZE + 4) ", %esp\n" // pop TrapFrame and pointer to it
     ".globl interrupt_common_asm_exit \n"
@@ -85,19 +69,3 @@ asm(
     "    iret\n"
 );
 // clang-format on
-
-#elif ARCH(X86_64)
-
-#    define GENERATE_GENERIC_INTERRUPT_HANDLER_ASM_ENTRY(isr_number) \
-        extern "C" void interrupt_##isr_number##_asm_entry();        \
-        asm(".globl interrupt_" #isr_number "_asm_entry\n"           \
-            "interrupt_" #isr_number "_asm_entry:\n"                 \
-            "    cli\n"                                              \
-            "    hlt\n");
-
-asm(
-    ".globl common_trap_exit\n"
-    "common_trap_exit:\n"
-    "    cli;hlt\n");
-
-#endif

+ 2 - 2
Kernel/Arch/i386/ProcessorInfo.cpp

@@ -26,8 +26,8 @@
 
 #include <AK/StringBuilder.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
-#include <Kernel/Arch/i386/ProcessorInfo.h>
+#include <Kernel/Arch/x86/CPU.h>
+#include <Kernel/Arch/x86/ProcessorInfo.h>
 
 namespace Kernel {
 

+ 2 - 2
Kernel/Arch/i386/SafeMem.cpp

@@ -24,8 +24,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <Kernel/Arch/i386/CPU.h>
-#include <Kernel/Arch/i386/SafeMem.h>
+#include <Kernel/Arch/x86/CPU.h>
+#include <Kernel/Arch/x86/SafeMem.h>
 
 #define CODE_SECTION(section_name) __attribute__((section(section_name)))
 

+ 4 - 84
Kernel/Arch/i386/CPU.h → Kernel/Arch/x86/CPU.h

@@ -30,6 +30,10 @@
 #include <AK/Badge.h>
 #include <AK/Noncopyable.h>
 #include <AK/Vector.h>
+
+#include <Kernel/Arch/x86/DescriptorTable.h>
+#include <Kernel/Arch/x86/TSS.h>
+
 #include <Kernel/PhysicalAddress.h>
 #include <Kernel/VirtualAddress.h>
 #include <LibC/sys/arch/i386/regs.h>
@@ -55,90 +59,6 @@ inline u32 get_iopl_from_eflags(u32 eflags)
     return (eflags & iopl_mask) >> 12;
 }
 
-struct [[gnu::packed]] DescriptorTablePointer {
-    u16 limit;
-    void* address;
-};
-
-struct [[gnu::packed]] TSS32 {
-    u16 backlink, __blh;
-    u32 esp0;
-    u16 ss0, __ss0h;
-    u32 esp1;
-    u16 ss1, __ss1h;
-    u32 esp2;
-    u16 ss2, __ss2h;
-    u32 cr3, eip, eflags;
-    u32 eax, ecx, edx, ebx, esp, ebp, esi, edi;
-    u16 es, __esh;
-    u16 cs, __csh;
-    u16 ss, __ssh;
-    u16 ds, __dsh;
-    u16 fs, __fsh;
-    u16 gs, __gsh;
-    u16 ldt, __ldth;
-    u16 trace, iomapbase;
-};
-
-union [[gnu::packed]] Descriptor {
-    struct {
-        u16 limit_lo;
-        u16 base_lo;
-        u8 base_hi;
-        u8 type : 4;
-        u8 descriptor_type : 1;
-        u8 dpl : 2;
-        u8 segment_present : 1;
-        u8 limit_hi : 4;
-        u8 : 1;
-        u8 zero : 1;
-        u8 operation_size : 1;
-        u8 granularity : 1;
-        u8 base_hi2;
-    };
-    struct {
-        u32 low;
-        u32 high;
-    };
-
-    enum Type {
-        Invalid = 0,
-        AvailableTSS_16bit = 0x1,
-        LDT = 0x2,
-        BusyTSS_16bit = 0x3,
-        CallGate_16bit = 0x4,
-        TaskGate = 0x5,
-        InterruptGate_16bit = 0x6,
-        TrapGate_16bit = 0x7,
-        AvailableTSS_32bit = 0x9,
-        BusyTSS_32bit = 0xb,
-        CallGate_32bit = 0xc,
-        InterruptGate_32bit = 0xe,
-        TrapGate_32bit = 0xf,
-    };
-
-    VirtualAddress base() const
-    {
-        FlatPtr base = base_lo;
-        base |= base_hi << 16u;
-        base |= base_hi2 << 24u;
-        return VirtualAddress { base };
-    }
-
-    void set_base(VirtualAddress base)
-    {
-        base_lo = base.get() & 0xffffu;
-        base_hi = (base.get() >> 16u) & 0xffu;
-        base_hi2 = (base.get() >> 24u) & 0xffu;
-    }
-
-    void set_limit(u32 length)
-    {
-        limit_lo = length & 0xffff;
-        limit_hi = (length >> 16) & 0xf;
-    }
-};
-
 class PageDirectoryEntry {
 public:
     const PageTableEntry* page_table_base() const { return reinterpret_cast<PageTableEntry*>(m_raw & 0xfffff000u); }

+ 19 - 19
Kernel/Arch/x86_64/CPU.h → Kernel/Arch/x86/DescriptorTable.h

@@ -30,29 +30,29 @@
 #include <AK/Types.h>
 #include <Kernel/VirtualAddress.h>
 
+#define GDT_SELECTOR_CODE0 0x08
+#define GDT_SELECTOR_DATA0 0x10
+#define GDT_SELECTOR_CODE3 0x18
+#define GDT_SELECTOR_DATA3 0x20
+#define GDT_SELECTOR_TLS 0x28
+#define GDT_SELECTOR_PROC 0x30
+#define GDT_SELECTOR_TSS 0x38
+
+// SYSENTER makes certain assumptions on how the GDT is structured:
+static_assert(GDT_SELECTOR_CODE0 + 8 == GDT_SELECTOR_DATA0); // SS0 = CS0 + 8
+
+// SYSEXIT makes certain assumptions on how the GDT is structured:
+static_assert(GDT_SELECTOR_CODE0 + 16 == GDT_SELECTOR_CODE3); // CS3 = CS0 + 16
+static_assert(GDT_SELECTOR_CODE0 + 24 == GDT_SELECTOR_DATA3); // SS3 = CS0 + 32
+
 namespace Kernel {
 
-struct [[gnu::packed]] TSS64
-{
-    u32 __1; // Link?
-    u64 rsp0;
-    u64 rsp1;
-    u64 rsp2;
-    u64 __2; // IST0 -> empty?
-    u64 ist1;
-    u64 ist2;
-    u64 ist3;
-    u64 ist4;
-    u64 ist5;
-    u64 ist6;
-    u64 ist7;
-    u64 __3;
-    u16 __4;
-    u16 iomapbase;
+struct [[gnu::packed]] DescriptorTablePointer {
+    u16 limit;
+    void* address;
 };
 
-union [[gnu::packed]] Descriptor
-{
+union [[gnu::packed]] Descriptor {
     struct {
         u16 limit_lo;
         u16 base_lo;

+ 1 - 1
Kernel/Arch/i386/ISRStubs.h → Kernel/Arch/x86/ISRStubs.h

@@ -26,7 +26,7 @@
 
 #pragma once
 
-#include <Kernel/Arch/i386/Interrupts.h>
+#include <Kernel/Arch/x86/Interrupts.h>
 
 GENERATE_GENERIC_INTERRUPT_HANDLER_ASM_ENTRY(80)
 GENERATE_GENERIC_INTERRUPT_HANDLER_ASM_ENTRY(81)

+ 52 - 0
Kernel/Arch/x86/Interrupts.h

@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2021, Leon Albrecht <leon2002.la@gmail.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ *    list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <AK/Types.h>
+
+namespace Kernel {
+
+class GenericInterruptHandeler;
+
+extern "C" void interrupt_common_asm_entry();
+
+#define GENERATE_GENERIC_INTERRUPT_HANDLER_ASM_ENTRY(isr_number) \
+    extern "C" void interrupt_##isr_number##_asm_entry();        \
+    asm(".globl interrupt_" #isr_number "_asm_entry\n"           \
+        "interrupt_" #isr_number "_asm_entry:\n"                 \
+        "    pushw $" #isr_number "\n"                           \
+        "    pushw $0\n"                                         \
+        "    jmp interrupt_common_asm_entry\n");
+
+void register_interrupt_handler(u8 number, void (*handler)());
+void register_user_callable_interrupt_handler(u8 number, void (*handler)());
+GenericInterruptHandler& get_interrupt_handler(u8 interrupt_number);
+void register_generic_interrupt_handler(u8 number, GenericInterruptHandler&);
+void unregister_generic_interrupt_handler(u8 number, GenericInterruptHandler&);
+
+}

+ 170 - 0
Kernel/Arch/x86/PageDirectory.h

@@ -0,0 +1,170 @@
+/*
+ * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ *    list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <AK/Badge.h>
+#include <AK/Types.h>
+
+namespace Kernel {
+
+class PageDirectory;
+class PageTableEntry;
+
+class PageDirectoryEntry {
+public:
+    const PageTableEntry* page_table_base() const { return reinterpret_cast<PageTableEntry*>(m_raw & 0xfffff000u); }
+    PageTableEntry* page_table_base() { return reinterpret_cast<PageTableEntry*>(m_raw & 0xfffff000u); }
+    void set_page_table_base(u32 value)
+    {
+        m_raw &= 0x8000000000000fffULL;
+        m_raw |= value & 0xfffff000;
+    }
+
+    bool is_null() const { return m_raw == 0; }
+    void clear() { m_raw = 0; }
+
+    u64 raw() const { return m_raw; }
+    void copy_from(Badge<PageDirectory>, const PageDirectoryEntry& other) { m_raw = other.m_raw; }
+
+    enum Flags {
+        Present = 1 << 0,
+        ReadWrite = 1 << 1,
+        UserSupervisor = 1 << 2,
+        WriteThrough = 1 << 3,
+        CacheDisabled = 1 << 4,
+        Huge = 1 << 7,
+        Global = 1 << 8,
+        NoExecute = 0x8000000000000000ULL,
+    };
+
+    bool is_present() const { return raw() & Present; }
+    void set_present(bool b) { set_bit(Present, b); }
+
+    bool is_user_allowed() const { return raw() & UserSupervisor; }
+    void set_user_allowed(bool b) { set_bit(UserSupervisor, b); }
+
+    bool is_huge() const { return raw() & Huge; }
+    void set_huge(bool b) { set_bit(Huge, b); }
+
+    bool is_writable() const { return raw() & ReadWrite; }
+    void set_writable(bool b) { set_bit(ReadWrite, b); }
+
+    bool is_write_through() const { return raw() & WriteThrough; }
+    void set_write_through(bool b) { set_bit(WriteThrough, b); }
+
+    bool is_cache_disabled() const { return raw() & CacheDisabled; }
+    void set_cache_disabled(bool b) { set_bit(CacheDisabled, b); }
+
+    bool is_global() const { return raw() & Global; }
+    void set_global(bool b) { set_bit(Global, b); }
+
+    bool is_execute_disabled() const { return raw() & NoExecute; }
+    void set_execute_disabled(bool b) { set_bit(NoExecute, b); }
+
+    void set_bit(u64 bit, bool value)
+    {
+        if (value)
+            m_raw |= bit;
+        else
+            m_raw &= ~bit;
+    }
+
+private:
+    u64 m_raw;
+};
+
+class PageTableEntry {
+public:
+    void* physical_page_base() { return reinterpret_cast<void*>(m_raw & 0xfffff000u); }
+    void set_physical_page_base(u32 value)
+    {
+        m_raw &= 0x8000000000000fffULL;
+        m_raw |= value & 0xfffff000;
+    }
+
+    u64 raw() const { return (u32)m_raw; }
+
+    enum Flags {
+        Present = 1 << 0,
+        ReadWrite = 1 << 1,
+        UserSupervisor = 1 << 2,
+        WriteThrough = 1 << 3,
+        CacheDisabled = 1 << 4,
+        Global = 1 << 8,
+        NoExecute = 0x8000000000000000ULL,
+    };
+
+    bool is_present() const { return raw() & Present; }
+    void set_present(bool b) { set_bit(Present, b); }
+
+    bool is_user_allowed() const { return raw() & UserSupervisor; }
+    void set_user_allowed(bool b) { set_bit(UserSupervisor, b); }
+
+    bool is_writable() const { return raw() & ReadWrite; }
+    void set_writable(bool b) { set_bit(ReadWrite, b); }
+
+    bool is_write_through() const { return raw() & WriteThrough; }
+    void set_write_through(bool b) { set_bit(WriteThrough, b); }
+
+    bool is_cache_disabled() const { return raw() & CacheDisabled; }
+    void set_cache_disabled(bool b) { set_bit(CacheDisabled, b); }
+
+    bool is_global() const { return raw() & Global; }
+    void set_global(bool b) { set_bit(Global, b); }
+
+    bool is_execute_disabled() const { return raw() & NoExecute; }
+    void set_execute_disabled(bool b) { set_bit(NoExecute, b); }
+
+    bool is_null() const { return m_raw == 0; }
+    void clear() { m_raw = 0; }
+
+    void set_bit(u64 bit, bool value)
+    {
+        if (value)
+            m_raw |= bit;
+        else
+            m_raw &= ~bit;
+    }
+
+private:
+    u64 m_raw;
+};
+
+static_assert(sizeof(PageDirectoryEntry) == 8);
+static_assert(sizeof(PageTableEntry) == 8);
+
+class PageDirectoryPointerTable {
+public:
+    PageDirectoryEntry* directory(size_t index)
+    {
+        return (PageDirectoryEntry*)(raw[index] & ~0xfffu);
+    }
+
+    u64 raw[4];
+};
+
+}

+ 0 - 0
Kernel/Arch/i386/ProcessorInfo.h → Kernel/Arch/x86/ProcessorInfo.h


+ 0 - 0
Kernel/Arch/i386/SafeMem.h → Kernel/Arch/x86/SafeMem.h


+ 1 - 1
Kernel/Arch/x86/SmapDisabler.h

@@ -26,7 +26,7 @@
 
 #pragma once
 
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 
 namespace Kernel {
 

+ 88 - 0
Kernel/Arch/x86/TSS.h

@@ -0,0 +1,88 @@
+/*
+ * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org>
+ * Copyright (c) 2021, Leon Albrecht <leon2002.la@gmail.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ *    list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ *    this list of conditions and the following disclaimer in the documentation
+ *    and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <AK/Types.h>
+
+namespace Kernel {
+
+struct [[gnu::packed]] TSS32 {
+    u16 backlink, __blh;
+    u32 esp0;
+    u16 ss0, __ss0h;
+    u32 esp1;
+    u16 ss1, __ss1h;
+    u32 esp2;
+    u16 ss2, __ss2h;
+    u32 cr3, eip, eflags;
+    u32 eax, ecx, edx, ebx, esp, ebp, esi, edi;
+    u16 es, __esh;
+    u16 cs, __csh;
+    u16 ss, __ssh;
+    u16 ds, __dsh;
+    u16 fs, __fsh;
+    u16 gs, __gsh;
+    u16 ldt, __ldth;
+    u16 trace, iomapbase;
+};
+
+struct [[gnu::packed]] TSS64 {
+    u32 __1; // Link?
+    u32 rsp0l;
+    u32 rsp0h;
+    u32 rsp1l;
+    u32 rsp1h;
+    u32 rsp2l;
+    u32 rsp2h;
+    u64 __2; //probably CR3 and EIP?
+    u32 ist1l;
+    u32 ist1h;
+    u32 ist2l;
+    u32 ist2h;
+    u32 ist3l;
+    u32 ist3h;
+    u32 ist4l;
+    u32 ist4h;
+    u32 ist5l;
+    u32 ist5h;
+    u32 ist6l;
+    u32 ist6h;
+    u32 ist7l;
+    u32 ist7h;
+    u64 __3; // GS and LDTR?
+    u16 __4;
+    u16 iomapbase;
+};
+
+#if ARCH(I386)
+using TSS = TSS32;
+#elif ARCH(X86_64)
+using TSS = TSS64;
+#endif
+
+}

+ 9 - 3
Kernel/CMakeLists.txt

@@ -20,9 +20,6 @@ set(KERNEL_SOURCES
     ACPI/Parser.cpp
     AddressSanitizer.cpp
     Arch/PC/BIOS.cpp
-    Arch/i386/CPU.cpp
-    Arch/i386/ProcessorInfo.cpp
-    Arch/i386/SafeMem.cpp
     Arch/x86/SmapDisabler.h
     CMOS.cpp
     CommandLine.cpp
@@ -235,6 +232,14 @@ set(KERNEL_SOURCES
     kprintf.cpp
 )
 
+set(KERNEL_SOURCES
+    ${KERNEL_SOURCES}
+    ${CMAKE_CURRENT_SOURCE_DIR}/Arch/${KERNEL_ARCH}/CPU.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/Arch/${KERNEL_ARCH}/InterruptEntry.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/Arch/${KERNEL_ARCH}/ProcessorInfo.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/Arch/${KERNEL_ARCH}/SafeMem.cpp
+)
+
 set(AK_SOURCES
     ../AK/ByteBuffer.cpp
     ../AK/FlyString.cpp
@@ -323,6 +328,7 @@ set_source_files_properties(init.cpp
     PROPERTIES
     OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/Arch/${KERNEL_ARCH}/Boot/boot.S
 )
+
 add_library(boot OBJECT Arch/${KERNEL_ARCH}/Boot/boot.S)
 
 add_library(kernel_heap STATIC ${KERNEL_HEAP_SOURCES})

+ 1 - 1
Kernel/Devices/FullDevice.cpp

@@ -27,7 +27,7 @@
 #include "FullDevice.h"
 #include <AK/Memory.h>
 #include <AK/StdLibExtras.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <LibC/errno_numbers.h>
 
 namespace Kernel {

+ 1 - 1
Kernel/Devices/KeyboardDevice.cpp

@@ -29,7 +29,7 @@
 #include <AK/Singleton.h>
 #include <AK/StringView.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Debug.h>
 #include <Kernel/Devices/KeyboardDevice.h>
 #include <Kernel/IO.h>

+ 1 - 1
Kernel/Devices/PCSpeaker.cpp

@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Devices/PCSpeaker.h>
 #include <Kernel/IO.h>
 #include <Kernel/Time/PIT.h>

+ 1 - 1
Kernel/Devices/VMWareBackdoor.cpp

@@ -29,7 +29,7 @@
 #include <AK/Singleton.h>
 #include <AK/String.h>
 #include <Kernel/API/MousePacket.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/CommandLine.h>
 #include <Kernel/Debug.h>
 #include <Kernel/Devices/VMWareBackdoor.h>

+ 2 - 2
Kernel/FileSystem/ProcFS.cpp

@@ -29,8 +29,8 @@
 #include <AK/JsonObjectSerializer.h>
 #include <AK/JsonValue.h>
 #include <AK/ScopeGuard.h>
-#include <Kernel/Arch/i386/CPU.h>
-#include <Kernel/Arch/i386/ProcessorInfo.h>
+#include <Kernel/Arch/x86/CPU.h>
+#include <Kernel/Arch/x86/ProcessorInfo.h>
 #include <Kernel/CommandLine.h>
 #include <Kernel/Console.h>
 #include <Kernel/DMI.h>

+ 1 - 1
Kernel/Heap/kmalloc.cpp

@@ -32,7 +32,7 @@
 #include <AK/Assertions.h>
 #include <AK/NonnullOwnPtrVector.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Debug.h>
 #include <Kernel/Heap/Heap.h>
 #include <Kernel/Heap/kmalloc.h>

+ 1 - 1
Kernel/IO.h

@@ -29,7 +29,7 @@
 #include <AK/Assertions.h>
 #include <AK/String.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 
 namespace IO {
 

+ 2 - 2
Kernel/Interrupts/APIC.cpp

@@ -30,8 +30,8 @@
 #include <AK/StringView.h>
 #include <AK/Types.h>
 #include <Kernel/ACPI/Parser.h>
-#include <Kernel/Arch/i386/CPU.h>
-#include <Kernel/Arch/i386/ProcessorInfo.h>
+#include <Kernel/Arch/x86/CPU.h>
+#include <Kernel/Arch/x86/ProcessorInfo.h>
 #include <Kernel/Debug.h>
 #include <Kernel/IO.h>
 #include <Kernel/Interrupts/APIC.h>

+ 1 - 1
Kernel/Interrupts/GenericInterruptHandler.cpp

@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Assertions.h>
 #include <Kernel/Interrupts/GenericInterruptHandler.h>
 #include <Kernel/Interrupts/InterruptManagement.h>

+ 1 - 1
Kernel/Interrupts/GenericInterruptHandler.h

@@ -29,7 +29,7 @@
 #include <AK/HashTable.h>
 #include <AK/String.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 
 namespace Kernel {
 

+ 1 - 1
Kernel/Interrupts/IOAPIC.cpp

@@ -27,7 +27,7 @@
 #include <AK/Optional.h>
 #include <AK/StringView.h>
 #include <Kernel/ACPI/MultiProcessorParser.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Debug.h>
 #include <Kernel/Interrupts/APIC.h>
 #include <Kernel/Interrupts/IOAPIC.h>

+ 1 - 1
Kernel/Interrupts/IRQHandler.cpp

@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Debug.h>
 #include <Kernel/Interrupts/IRQHandler.h>
 #include <Kernel/Interrupts/InterruptManagement.h>

+ 1 - 1
Kernel/Interrupts/IRQHandler.h

@@ -29,7 +29,7 @@
 #include <AK/RefPtr.h>
 #include <AK/String.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Interrupts/GenericInterruptHandler.h>
 #include <Kernel/Interrupts/IRQController.h>
 

+ 1 - 1
Kernel/Interrupts/InterruptManagement.cpp

@@ -27,7 +27,7 @@
 #include <AK/StringView.h>
 #include <Kernel/ACPI/MultiProcessorParser.h>
 #include <Kernel/API/Syscall.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/CommandLine.h>
 #include <Kernel/IO.h>
 #include <Kernel/Interrupts/APIC.h>

+ 1 - 1
Kernel/Interrupts/MSIHandler.h

@@ -27,7 +27,7 @@
 #pragma once
 
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Interrupts/GenericInterruptHandler.h>
 #include <Kernel/PCI/Definitions.h>
 

+ 1 - 1
Kernel/Interrupts/PIC.cpp

@@ -26,7 +26,7 @@
 
 #include <AK/Assertions.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/IO.h>
 #include <Kernel/Interrupts/GenericInterruptHandler.h>
 #include <Kernel/Interrupts/PIC.h>

+ 1 - 1
Kernel/Interrupts/SharedIRQHandler.cpp

@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Assertions.h>
 #include <Kernel/Debug.h>
 #include <Kernel/Interrupts/IRQHandler.h>

+ 1 - 1
Kernel/Interrupts/SharedIRQHandler.h

@@ -30,7 +30,7 @@
 #include <AK/NonnullOwnPtr.h>
 #include <AK/RefPtr.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Interrupts/GenericInterruptHandler.h>
 
 namespace Kernel {

+ 1 - 1
Kernel/Interrupts/SpuriousInterruptHandler.h

@@ -28,7 +28,7 @@
 
 #include <AK/OwnPtr.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Interrupts/GenericInterruptHandler.h>
 #include <Kernel/Interrupts/IRQController.h>
 

+ 1 - 1
Kernel/Interrupts/UnhandledInterruptHandler.h

@@ -28,7 +28,7 @@
 
 #include <AK/String.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Interrupts/GenericInterruptHandler.h>
 
 namespace Kernel {

+ 1 - 1
Kernel/Lock.h

@@ -30,7 +30,7 @@
 #include <AK/Atomic.h>
 #include <AK/HashMap.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Forward.h>
 #include <Kernel/LockMode.h>
 #include <Kernel/WaitQueue.h>

+ 1 - 1
Kernel/Panic.cpp

@@ -25,7 +25,7 @@
  */
 
 #include <AK/Format.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/KSyms.h>
 #include <Kernel/Panic.h>
 

+ 1 - 1
Kernel/Process.cpp

@@ -30,7 +30,7 @@
 #include <AK/Time.h>
 #include <AK/Types.h>
 #include <Kernel/API/Syscall.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/CoreDump.h>
 #include <Kernel/Debug.h>
 #include <Kernel/Devices/NullDevice.h>

+ 1 - 1
Kernel/Random.cpp

@@ -26,7 +26,7 @@
  */
 
 #include <AK/Singleton.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Devices/RandomDevice.h>
 #include <Kernel/Random.h>
 #include <Kernel/Time/HPET.h>

+ 1 - 1
Kernel/Random.h

@@ -30,7 +30,7 @@
 #include <AK/Assertions.h>
 #include <AK/ByteBuffer.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Lock.h>
 #include <Kernel/StdLib.h>
 #include <LibCrypto/Cipher/AES.h>

+ 1 - 1
Kernel/SpinLock.h

@@ -28,7 +28,7 @@
 
 #include <AK/Atomic.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Forward.h>
 
 namespace Kernel {

+ 1 - 1
Kernel/StdLib.cpp

@@ -28,7 +28,7 @@
 #include <AK/MemMem.h>
 #include <AK/String.h>
 #include <AK/Types.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Arch/x86/SmapDisabler.h>
 #include <Kernel/Heap/kmalloc.h>
 #include <Kernel/StdLib.h>

+ 1 - 1
Kernel/Syscall.cpp

@@ -25,7 +25,7 @@
  */
 
 #include <Kernel/API/Syscall.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Panic.h>
 #include <Kernel/Process.h>
 #include <Kernel/ThreadTracer.h>

+ 1 - 1
Kernel/Syscalls/sysconf.cpp

@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Process.h>
 #include <Kernel/Time/TimeManagement.h>
 #include <limits.h>

+ 1 - 1
Kernel/TTY/VirtualConsole.cpp

@@ -27,7 +27,7 @@
 
 #include "VirtualConsole.h"
 #include <AK/String.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Devices/KeyboardDevice.h>
 #include <Kernel/Heap/kmalloc.h>
 #include <Kernel/IO.h>

+ 1 - 1
Kernel/Thread.cpp

@@ -28,7 +28,7 @@
 #include <AK/ScopeGuard.h>
 #include <AK/StringBuilder.h>
 #include <AK/Time.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Arch/x86/SmapDisabler.h>
 #include <Kernel/Debug.h>
 #include <Kernel/FileSystem/FileDescription.h>

+ 2 - 2
Kernel/Thread.h

@@ -37,8 +37,8 @@
 #include <AK/Vector.h>
 #include <AK/WeakPtr.h>
 #include <AK/Weakable.h>
-#include <Kernel/Arch/i386/CPU.h>
-#include <Kernel/Arch/i386/SafeMem.h>
+#include <Kernel/Arch/x86/CPU.h>
+#include <Kernel/Arch/x86/SafeMem.h>
 #include <Kernel/Debug.h>
 #include <Kernel/Forward.h>
 #include <Kernel/KResult.h>

+ 1 - 1
Kernel/ThreadTracer.cpp

@@ -26,7 +26,7 @@
 
 #include <AK/Memory.h>
 #include <AK/kmalloc.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/ThreadTracer.h>
 
 namespace Kernel {

+ 1 - 1
Kernel/Time/APICTimer.cpp

@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/IO.h>
 #include <Kernel/Interrupts/APIC.h>
 #include <Kernel/Panic.h>

+ 1 - 1
Kernel/Time/PIT.cpp

@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/IO.h>
 #include <Kernel/Interrupts/PIC.h>
 #include <Kernel/Scheduler.h>

+ 1 - 1
Kernel/Time/RTC.cpp

@@ -24,7 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/CMOS.h>
 #include <Kernel/IO.h>
 #include <Kernel/Time/RTC.h>

+ 1 - 1
Kernel/VM/MemoryManager.cpp

@@ -27,7 +27,7 @@
 #include <AK/Assertions.h>
 #include <AK/Memory.h>
 #include <AK/StringView.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/CMOS.h>
 #include <Kernel/FileSystem/Inode.h>
 #include <Kernel/Heap/kmalloc.h>

+ 1 - 1
Kernel/VM/MemoryManager.h

@@ -29,7 +29,7 @@
 #include <AK/HashTable.h>
 #include <AK/NonnullRefPtrVector.h>
 #include <AK/String.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Forward.h>
 #include <Kernel/SpinLock.h>
 #include <Kernel/VM/AllocationStrategy.h>

+ 1 - 1
Kernel/VM/PhysicalPage.h

@@ -27,7 +27,7 @@
 #pragma once
 
 #include <AK/NonnullRefPtr.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Assertions.h>
 #include <Kernel/Heap/SlabAllocator.h>
 #include <Kernel/PhysicalAddress.h>

+ 1 - 1
Kernel/VM/Range.cpp

@@ -26,7 +26,7 @@
  */
 
 #include <AK/Vector.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/VM/Range.h>
 
 namespace Kernel {

+ 1 - 1
Kernel/VM/Region.h

@@ -31,7 +31,7 @@
 #include <AK/String.h>
 #include <AK/WeakPtr.h>
 #include <AK/Weakable.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/Heap/SlabAllocator.h>
 #include <Kernel/VM/PageFaultResponse.h>
 #include <Kernel/VM/PurgeablePageRanges.h>

+ 1 - 1
Kernel/init.cpp

@@ -28,7 +28,7 @@
 #include <Kernel/ACPI/DynamicParser.h>
 #include <Kernel/ACPI/Initialize.h>
 #include <Kernel/ACPI/MultiProcessorParser.h>
-#include <Kernel/Arch/i386/CPU.h>
+#include <Kernel/Arch/x86/CPU.h>
 #include <Kernel/CMOS.h>
 #include <Kernel/CommandLine.h>
 #include <Kernel/DMI.h>