mirror of
https://github.com/RGBCube/serenity
synced 2025-05-24 05:55:06 +00:00
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.
This commit is contained in:
parent
5a8cc07485
commit
0d934fc991
60 changed files with 412 additions and 208 deletions
|
@ -31,7 +31,7 @@
|
||||||
#include <AK/Format.h>
|
#include <AK/Format.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#ifdef KERNEL
|
#ifdef KERNEL
|
||||||
# include <Kernel/Arch/i386/CPU.h>
|
# include <Kernel/Arch/x86/CPU.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace AK {
|
namespace AK {
|
||||||
|
|
|
@ -33,7 +33,7 @@
|
||||||
#include <AK/Traits.h>
|
#include <AK/Traits.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#ifdef KERNEL
|
#ifdef KERNEL
|
||||||
# include <Kernel/Arch/i386/CPU.h>
|
# include <Kernel/Arch/x86/CPU.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace AK {
|
namespace AK {
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include <AK/Atomic.h>
|
#include <AK/Atomic.h>
|
||||||
#include <AK/Noncopyable.h>
|
#include <AK/Noncopyable.h>
|
||||||
#ifdef KERNEL
|
#ifdef KERNEL
|
||||||
# include <Kernel/Arch/i386/CPU.h>
|
# include <Kernel/Arch/x86/CPU.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __serenity__
|
#ifndef __serenity__
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
#include "RefPtr.h"
|
#include "RefPtr.h"
|
||||||
#include "StdLibExtras.h"
|
#include "StdLibExtras.h"
|
||||||
#ifdef KERNEL
|
#ifdef KERNEL
|
||||||
# include <Kernel/Arch/i386/CPU.h>
|
# include <Kernel/Arch/x86/CPU.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace AK {
|
namespace AK {
|
||||||
|
|
|
@ -29,10 +29,10 @@
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/StringBuilder.h>
|
#include <AK/StringBuilder.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Arch/i386/ISRStubs.h>
|
#include <Kernel/Arch/x86/ISRStubs.h>
|
||||||
#include <Kernel/Arch/i386/ProcessorInfo.h>
|
#include <Kernel/Arch/x86/ProcessorInfo.h>
|
||||||
#include <Kernel/Arch/i386/SafeMem.h>
|
#include <Kernel/Arch/x86/SafeMem.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
#include <Kernel/IO.h>
|
#include <Kernel/IO.h>
|
||||||
#include <Kernel/Interrupts/APIC.h>
|
#include <Kernel/Interrupts/APIC.h>
|
||||||
|
@ -2309,8 +2309,8 @@ UNMAP_AFTER_INIT void Processor::gdt_init()
|
||||||
tls_descriptor.dpl = 3;
|
tls_descriptor.dpl = 3;
|
||||||
tls_descriptor.segment_present = 1;
|
tls_descriptor.segment_present = 1;
|
||||||
tls_descriptor.granularity = 0;
|
tls_descriptor.granularity = 0;
|
||||||
tls_descriptor.zero = 0;
|
tls_descriptor.operation_size64 = 0;
|
||||||
tls_descriptor.operation_size = 1;
|
tls_descriptor.operation_size32 = 1;
|
||||||
tls_descriptor.descriptor_type = 1;
|
tls_descriptor.descriptor_type = 1;
|
||||||
tls_descriptor.type = 2;
|
tls_descriptor.type = 2;
|
||||||
write_gdt_entry(GDT_SELECTOR_TLS, tls_descriptor); // tls3
|
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.dpl = 0;
|
||||||
fs_descriptor.segment_present = 1;
|
fs_descriptor.segment_present = 1;
|
||||||
fs_descriptor.granularity = 0;
|
fs_descriptor.granularity = 0;
|
||||||
fs_descriptor.zero = 0;
|
fs_descriptor.operation_size64 = 0;
|
||||||
fs_descriptor.operation_size = 1;
|
fs_descriptor.operation_size32 = 1;
|
||||||
fs_descriptor.descriptor_type = 1;
|
fs_descriptor.descriptor_type = 1;
|
||||||
fs_descriptor.type = 2;
|
fs_descriptor.type = 2;
|
||||||
write_gdt_entry(GDT_SELECTOR_PROC, fs_descriptor); // fs0
|
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.dpl = 0;
|
||||||
tss_descriptor.segment_present = 1;
|
tss_descriptor.segment_present = 1;
|
||||||
tss_descriptor.granularity = 0;
|
tss_descriptor.granularity = 0;
|
||||||
tss_descriptor.zero = 0;
|
tss_descriptor.operation_size64 = 0;
|
||||||
tss_descriptor.operation_size = 1;
|
tss_descriptor.operation_size32 = 1;
|
||||||
tss_descriptor.descriptor_type = 0;
|
tss_descriptor.descriptor_type = 0;
|
||||||
tss_descriptor.type = 9;
|
tss_descriptor.type = 9;
|
||||||
write_gdt_entry(GDT_SELECTOR_TSS, tss_descriptor); // tss
|
write_gdt_entry(GDT_SELECTOR_TSS, tss_descriptor); // tss
|
||||||
|
|
|
@ -24,24 +24,8 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#pragma once
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
|
#include <Kernel/Arch/x86/DescriptorTable.h>
|
||||||
#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");
|
|
||||||
|
|
||||||
// clang-format off
|
// clang-format off
|
||||||
asm(
|
asm(
|
||||||
".globl interrupt_common_asm_entry\n"
|
".globl interrupt_common_asm_entry\n"
|
||||||
|
@ -85,19 +69,3 @@ asm(
|
||||||
" iret\n"
|
" iret\n"
|
||||||
);
|
);
|
||||||
// clang-format on
|
// 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
|
|
|
@ -26,8 +26,8 @@
|
||||||
|
|
||||||
#include <AK/StringBuilder.h>
|
#include <AK/StringBuilder.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Arch/i386/ProcessorInfo.h>
|
#include <Kernel/Arch/x86/ProcessorInfo.h>
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
|
|
|
@ -24,8 +24,8 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* 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/Arch/i386/SafeMem.h>
|
#include <Kernel/Arch/x86/SafeMem.h>
|
||||||
|
|
||||||
#define CODE_SECTION(section_name) __attribute__((section(section_name)))
|
#define CODE_SECTION(section_name) __attribute__((section(section_name)))
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,10 @@
|
||||||
#include <AK/Badge.h>
|
#include <AK/Badge.h>
|
||||||
#include <AK/Noncopyable.h>
|
#include <AK/Noncopyable.h>
|
||||||
#include <AK/Vector.h>
|
#include <AK/Vector.h>
|
||||||
|
|
||||||
|
#include <Kernel/Arch/x86/DescriptorTable.h>
|
||||||
|
#include <Kernel/Arch/x86/TSS.h>
|
||||||
|
|
||||||
#include <Kernel/PhysicalAddress.h>
|
#include <Kernel/PhysicalAddress.h>
|
||||||
#include <Kernel/VirtualAddress.h>
|
#include <Kernel/VirtualAddress.h>
|
||||||
#include <LibC/sys/arch/i386/regs.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;
|
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 {
|
class PageDirectoryEntry {
|
||||||
public:
|
public:
|
||||||
const PageTableEntry* page_table_base() const { return reinterpret_cast<PageTableEntry*>(m_raw & 0xfffff000u); }
|
const PageTableEntry* page_table_base() const { return reinterpret_cast<PageTableEntry*>(m_raw & 0xfffff000u); }
|
|
@ -30,29 +30,29 @@
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/VirtualAddress.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 {
|
namespace Kernel {
|
||||||
|
|
||||||
struct [[gnu::packed]] TSS64
|
struct [[gnu::packed]] DescriptorTablePointer {
|
||||||
{
|
u16 limit;
|
||||||
u32 __1; // Link?
|
void* address;
|
||||||
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;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
union [[gnu::packed]] Descriptor
|
union [[gnu::packed]] Descriptor {
|
||||||
{
|
|
||||||
struct {
|
struct {
|
||||||
u16 limit_lo;
|
u16 limit_lo;
|
||||||
u16 base_lo;
|
u16 base_lo;
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
#pragma once
|
#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(80)
|
||||||
GENERATE_GENERIC_INTERRUPT_HANDLER_ASM_ENTRY(81)
|
GENERATE_GENERIC_INTERRUPT_HANDLER_ASM_ENTRY(81)
|
52
Kernel/Arch/x86/Interrupts.h
Normal file
52
Kernel/Arch/x86/Interrupts.h
Normal file
|
@ -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
Kernel/Arch/x86/PageDirectory.h
Normal file
170
Kernel/Arch/x86/PageDirectory.h
Normal file
|
@ -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];
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
|
|
88
Kernel/Arch/x86/TSS.h
Normal file
88
Kernel/Arch/x86/TSS.h
Normal file
|
@ -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
|
||||||
|
|
||||||
|
}
|
|
@ -20,9 +20,6 @@ set(KERNEL_SOURCES
|
||||||
ACPI/Parser.cpp
|
ACPI/Parser.cpp
|
||||||
AddressSanitizer.cpp
|
AddressSanitizer.cpp
|
||||||
Arch/PC/BIOS.cpp
|
Arch/PC/BIOS.cpp
|
||||||
Arch/i386/CPU.cpp
|
|
||||||
Arch/i386/ProcessorInfo.cpp
|
|
||||||
Arch/i386/SafeMem.cpp
|
|
||||||
Arch/x86/SmapDisabler.h
|
Arch/x86/SmapDisabler.h
|
||||||
CMOS.cpp
|
CMOS.cpp
|
||||||
CommandLine.cpp
|
CommandLine.cpp
|
||||||
|
@ -235,6 +232,14 @@ set(KERNEL_SOURCES
|
||||||
kprintf.cpp
|
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
|
set(AK_SOURCES
|
||||||
../AK/ByteBuffer.cpp
|
../AK/ByteBuffer.cpp
|
||||||
../AK/FlyString.cpp
|
../AK/FlyString.cpp
|
||||||
|
@ -323,6 +328,7 @@ set_source_files_properties(init.cpp
|
||||||
PROPERTIES
|
PROPERTIES
|
||||||
OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/Arch/${KERNEL_ARCH}/Boot/boot.S
|
OBJECT_DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/Arch/${KERNEL_ARCH}/Boot/boot.S
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library(boot OBJECT Arch/${KERNEL_ARCH}/Boot/boot.S)
|
add_library(boot OBJECT Arch/${KERNEL_ARCH}/Boot/boot.S)
|
||||||
|
|
||||||
add_library(kernel_heap STATIC ${KERNEL_HEAP_SOURCES})
|
add_library(kernel_heap STATIC ${KERNEL_HEAP_SOURCES})
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include "FullDevice.h"
|
#include "FullDevice.h"
|
||||||
#include <AK/Memory.h>
|
#include <AK/Memory.h>
|
||||||
#include <AK/StdLibExtras.h>
|
#include <AK/StdLibExtras.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <LibC/errno_numbers.h>
|
#include <LibC/errno_numbers.h>
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <AK/Singleton.h>
|
#include <AK/Singleton.h>
|
||||||
#include <AK/StringView.h>
|
#include <AK/StringView.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
#include <Kernel/Devices/KeyboardDevice.h>
|
#include <Kernel/Devices/KeyboardDevice.h>
|
||||||
#include <Kernel/IO.h>
|
#include <Kernel/IO.h>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* 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/Devices/PCSpeaker.h>
|
||||||
#include <Kernel/IO.h>
|
#include <Kernel/IO.h>
|
||||||
#include <Kernel/Time/PIT.h>
|
#include <Kernel/Time/PIT.h>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <AK/Singleton.h>
|
#include <AK/Singleton.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <Kernel/API/MousePacket.h>
|
#include <Kernel/API/MousePacket.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/CommandLine.h>
|
#include <Kernel/CommandLine.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
#include <Kernel/Devices/VMWareBackdoor.h>
|
#include <Kernel/Devices/VMWareBackdoor.h>
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
#include <AK/JsonObjectSerializer.h>
|
#include <AK/JsonObjectSerializer.h>
|
||||||
#include <AK/JsonValue.h>
|
#include <AK/JsonValue.h>
|
||||||
#include <AK/ScopeGuard.h>
|
#include <AK/ScopeGuard.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Arch/i386/ProcessorInfo.h>
|
#include <Kernel/Arch/x86/ProcessorInfo.h>
|
||||||
#include <Kernel/CommandLine.h>
|
#include <Kernel/CommandLine.h>
|
||||||
#include <Kernel/Console.h>
|
#include <Kernel/Console.h>
|
||||||
#include <Kernel/DMI.h>
|
#include <Kernel/DMI.h>
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
#include <AK/Assertions.h>
|
#include <AK/Assertions.h>
|
||||||
#include <AK/NonnullOwnPtrVector.h>
|
#include <AK/NonnullOwnPtrVector.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
#include <Kernel/Heap/Heap.h>
|
#include <Kernel/Heap/Heap.h>
|
||||||
#include <Kernel/Heap/kmalloc.h>
|
#include <Kernel/Heap/kmalloc.h>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <AK/Assertions.h>
|
#include <AK/Assertions.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
|
|
||||||
namespace IO {
|
namespace IO {
|
||||||
|
|
||||||
|
|
|
@ -30,8 +30,8 @@
|
||||||
#include <AK/StringView.h>
|
#include <AK/StringView.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/ACPI/Parser.h>
|
#include <Kernel/ACPI/Parser.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Arch/i386/ProcessorInfo.h>
|
#include <Kernel/Arch/x86/ProcessorInfo.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
#include <Kernel/IO.h>
|
#include <Kernel/IO.h>
|
||||||
#include <Kernel/Interrupts/APIC.h>
|
#include <Kernel/Interrupts/APIC.h>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* 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/Assertions.h>
|
||||||
#include <Kernel/Interrupts/GenericInterruptHandler.h>
|
#include <Kernel/Interrupts/GenericInterruptHandler.h>
|
||||||
#include <Kernel/Interrupts/InterruptManagement.h>
|
#include <Kernel/Interrupts/InterruptManagement.h>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <AK/HashTable.h>
|
#include <AK/HashTable.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include <AK/Optional.h>
|
#include <AK/Optional.h>
|
||||||
#include <AK/StringView.h>
|
#include <AK/StringView.h>
|
||||||
#include <Kernel/ACPI/MultiProcessorParser.h>
|
#include <Kernel/ACPI/MultiProcessorParser.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
#include <Kernel/Interrupts/APIC.h>
|
#include <Kernel/Interrupts/APIC.h>
|
||||||
#include <Kernel/Interrupts/IOAPIC.h>
|
#include <Kernel/Interrupts/IOAPIC.h>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* 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/Debug.h>
|
||||||
#include <Kernel/Interrupts/IRQHandler.h>
|
#include <Kernel/Interrupts/IRQHandler.h>
|
||||||
#include <Kernel/Interrupts/InterruptManagement.h>
|
#include <Kernel/Interrupts/InterruptManagement.h>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <AK/RefPtr.h>
|
#include <AK/RefPtr.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/Types.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/GenericInterruptHandler.h>
|
||||||
#include <Kernel/Interrupts/IRQController.h>
|
#include <Kernel/Interrupts/IRQController.h>
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include <AK/StringView.h>
|
#include <AK/StringView.h>
|
||||||
#include <Kernel/ACPI/MultiProcessorParser.h>
|
#include <Kernel/ACPI/MultiProcessorParser.h>
|
||||||
#include <Kernel/API/Syscall.h>
|
#include <Kernel/API/Syscall.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/CommandLine.h>
|
#include <Kernel/CommandLine.h>
|
||||||
#include <Kernel/IO.h>
|
#include <Kernel/IO.h>
|
||||||
#include <Kernel/Interrupts/APIC.h>
|
#include <Kernel/Interrupts/APIC.h>
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/Types.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/GenericInterruptHandler.h>
|
||||||
#include <Kernel/PCI/Definitions.h>
|
#include <Kernel/PCI/Definitions.h>
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
#include <AK/Assertions.h>
|
#include <AK/Assertions.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/IO.h>
|
#include <Kernel/IO.h>
|
||||||
#include <Kernel/Interrupts/GenericInterruptHandler.h>
|
#include <Kernel/Interrupts/GenericInterruptHandler.h>
|
||||||
#include <Kernel/Interrupts/PIC.h>
|
#include <Kernel/Interrupts/PIC.h>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* 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/Assertions.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
#include <Kernel/Interrupts/IRQHandler.h>
|
#include <Kernel/Interrupts/IRQHandler.h>
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include <AK/NonnullOwnPtr.h>
|
#include <AK/NonnullOwnPtr.h>
|
||||||
#include <AK/RefPtr.h>
|
#include <AK/RefPtr.h>
|
||||||
#include <AK/Types.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/GenericInterruptHandler.h>
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#include <AK/OwnPtr.h>
|
#include <AK/OwnPtr.h>
|
||||||
#include <AK/Types.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/GenericInterruptHandler.h>
|
||||||
#include <Kernel/Interrupts/IRQController.h>
|
#include <Kernel/Interrupts/IRQController.h>
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/Types.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/GenericInterruptHandler.h>
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include <AK/Atomic.h>
|
#include <AK/Atomic.h>
|
||||||
#include <AK/HashMap.h>
|
#include <AK/HashMap.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Forward.h>
|
#include <Kernel/Forward.h>
|
||||||
#include <Kernel/LockMode.h>
|
#include <Kernel/LockMode.h>
|
||||||
#include <Kernel/WaitQueue.h>
|
#include <Kernel/WaitQueue.h>
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <AK/Format.h>
|
#include <AK/Format.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/KSyms.h>
|
#include <Kernel/KSyms.h>
|
||||||
#include <Kernel/Panic.h>
|
#include <Kernel/Panic.h>
|
||||||
|
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include <AK/Time.h>
|
#include <AK/Time.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/API/Syscall.h>
|
#include <Kernel/API/Syscall.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/CoreDump.h>
|
#include <Kernel/CoreDump.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
#include <Kernel/Devices/NullDevice.h>
|
#include <Kernel/Devices/NullDevice.h>
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <AK/Singleton.h>
|
#include <AK/Singleton.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Devices/RandomDevice.h>
|
#include <Kernel/Devices/RandomDevice.h>
|
||||||
#include <Kernel/Random.h>
|
#include <Kernel/Random.h>
|
||||||
#include <Kernel/Time/HPET.h>
|
#include <Kernel/Time/HPET.h>
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
#include <AK/Assertions.h>
|
#include <AK/Assertions.h>
|
||||||
#include <AK/ByteBuffer.h>
|
#include <AK/ByteBuffer.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Lock.h>
|
#include <Kernel/Lock.h>
|
||||||
#include <Kernel/StdLib.h>
|
#include <Kernel/StdLib.h>
|
||||||
#include <LibCrypto/Cipher/AES.h>
|
#include <LibCrypto/Cipher/AES.h>
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
|
|
||||||
#include <AK/Atomic.h>
|
#include <AK/Atomic.h>
|
||||||
#include <AK/Types.h>
|
#include <AK/Types.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Forward.h>
|
#include <Kernel/Forward.h>
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <AK/MemMem.h>
|
#include <AK/MemMem.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/Types.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/Arch/x86/SmapDisabler.h>
|
||||||
#include <Kernel/Heap/kmalloc.h>
|
#include <Kernel/Heap/kmalloc.h>
|
||||||
#include <Kernel/StdLib.h>
|
#include <Kernel/StdLib.h>
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <Kernel/API/Syscall.h>
|
#include <Kernel/API/Syscall.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Panic.h>
|
#include <Kernel/Panic.h>
|
||||||
#include <Kernel/Process.h>
|
#include <Kernel/Process.h>
|
||||||
#include <Kernel/ThreadTracer.h>
|
#include <Kernel/ThreadTracer.h>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* 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/Process.h>
|
||||||
#include <Kernel/Time/TimeManagement.h>
|
#include <Kernel/Time/TimeManagement.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
#include "VirtualConsole.h"
|
#include "VirtualConsole.h"
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Devices/KeyboardDevice.h>
|
#include <Kernel/Devices/KeyboardDevice.h>
|
||||||
#include <Kernel/Heap/kmalloc.h>
|
#include <Kernel/Heap/kmalloc.h>
|
||||||
#include <Kernel/IO.h>
|
#include <Kernel/IO.h>
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <AK/ScopeGuard.h>
|
#include <AK/ScopeGuard.h>
|
||||||
#include <AK/StringBuilder.h>
|
#include <AK/StringBuilder.h>
|
||||||
#include <AK/Time.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/Arch/x86/SmapDisabler.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
#include <Kernel/FileSystem/FileDescription.h>
|
#include <Kernel/FileSystem/FileDescription.h>
|
||||||
|
|
|
@ -37,8 +37,8 @@
|
||||||
#include <AK/Vector.h>
|
#include <AK/Vector.h>
|
||||||
#include <AK/WeakPtr.h>
|
#include <AK/WeakPtr.h>
|
||||||
#include <AK/Weakable.h>
|
#include <AK/Weakable.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Arch/i386/SafeMem.h>
|
#include <Kernel/Arch/x86/SafeMem.h>
|
||||||
#include <Kernel/Debug.h>
|
#include <Kernel/Debug.h>
|
||||||
#include <Kernel/Forward.h>
|
#include <Kernel/Forward.h>
|
||||||
#include <Kernel/KResult.h>
|
#include <Kernel/KResult.h>
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
#include <AK/Memory.h>
|
#include <AK/Memory.h>
|
||||||
#include <AK/kmalloc.h>
|
#include <AK/kmalloc.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/ThreadTracer.h>
|
#include <Kernel/ThreadTracer.h>
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* 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/IO.h>
|
||||||
#include <Kernel/Interrupts/APIC.h>
|
#include <Kernel/Interrupts/APIC.h>
|
||||||
#include <Kernel/Panic.h>
|
#include <Kernel/Panic.h>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* 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/IO.h>
|
||||||
#include <Kernel/Interrupts/PIC.h>
|
#include <Kernel/Interrupts/PIC.h>
|
||||||
#include <Kernel/Scheduler.h>
|
#include <Kernel/Scheduler.h>
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* 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/CMOS.h>
|
||||||
#include <Kernel/IO.h>
|
#include <Kernel/IO.h>
|
||||||
#include <Kernel/Time/RTC.h>
|
#include <Kernel/Time/RTC.h>
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#include <AK/Assertions.h>
|
#include <AK/Assertions.h>
|
||||||
#include <AK/Memory.h>
|
#include <AK/Memory.h>
|
||||||
#include <AK/StringView.h>
|
#include <AK/StringView.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/CMOS.h>
|
#include <Kernel/CMOS.h>
|
||||||
#include <Kernel/FileSystem/Inode.h>
|
#include <Kernel/FileSystem/Inode.h>
|
||||||
#include <Kernel/Heap/kmalloc.h>
|
#include <Kernel/Heap/kmalloc.h>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
#include <AK/HashTable.h>
|
#include <AK/HashTable.h>
|
||||||
#include <AK/NonnullRefPtrVector.h>
|
#include <AK/NonnullRefPtrVector.h>
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Forward.h>
|
#include <Kernel/Forward.h>
|
||||||
#include <Kernel/SpinLock.h>
|
#include <Kernel/SpinLock.h>
|
||||||
#include <Kernel/VM/AllocationStrategy.h>
|
#include <Kernel/VM/AllocationStrategy.h>
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <AK/NonnullRefPtr.h>
|
#include <AK/NonnullRefPtr.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Assertions.h>
|
#include <Kernel/Assertions.h>
|
||||||
#include <Kernel/Heap/SlabAllocator.h>
|
#include <Kernel/Heap/SlabAllocator.h>
|
||||||
#include <Kernel/PhysicalAddress.h>
|
#include <Kernel/PhysicalAddress.h>
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <AK/Vector.h>
|
#include <AK/Vector.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/VM/Range.h>
|
#include <Kernel/VM/Range.h>
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
#include <AK/String.h>
|
#include <AK/String.h>
|
||||||
#include <AK/WeakPtr.h>
|
#include <AK/WeakPtr.h>
|
||||||
#include <AK/Weakable.h>
|
#include <AK/Weakable.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/Heap/SlabAllocator.h>
|
#include <Kernel/Heap/SlabAllocator.h>
|
||||||
#include <Kernel/VM/PageFaultResponse.h>
|
#include <Kernel/VM/PageFaultResponse.h>
|
||||||
#include <Kernel/VM/PurgeablePageRanges.h>
|
#include <Kernel/VM/PurgeablePageRanges.h>
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#include <Kernel/ACPI/DynamicParser.h>
|
#include <Kernel/ACPI/DynamicParser.h>
|
||||||
#include <Kernel/ACPI/Initialize.h>
|
#include <Kernel/ACPI/Initialize.h>
|
||||||
#include <Kernel/ACPI/MultiProcessorParser.h>
|
#include <Kernel/ACPI/MultiProcessorParser.h>
|
||||||
#include <Kernel/Arch/i386/CPU.h>
|
#include <Kernel/Arch/x86/CPU.h>
|
||||||
#include <Kernel/CMOS.h>
|
#include <Kernel/CMOS.h>
|
||||||
#include <Kernel/CommandLine.h>
|
#include <Kernel/CommandLine.h>
|
||||||
#include <Kernel/DMI.h>
|
#include <Kernel/DMI.h>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue