diff options
| -rw-r--r-- | compile_flags.txt | 3 | ||||
| -rw-r--r-- | dev/boot/amd64-ci.make | 2 | ||||
| -rw-r--r-- | dev/boot/amd64-desktop.make | 2 | ||||
| -rw-r--r-- | dev/boot/arm64-desktop.make | 2 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 14 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalInterruptAPI.asm | 36 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalKernelMain.cc | 6 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/ProcessScheduler.h | 10 | ||||
| -rw-r--r-- | dev/kernel/NeKit/ErrorOr.h | 2 | ||||
| -rw-r--r-- | dev/kernel/amd64-ci.make | 2 | ||||
| -rw-r--r-- | dev/kernel/amd64-desktop.make | 2 | ||||
| -rw-r--r-- | dev/kernel/arm64-desktop.make | 2 |
12 files changed, 44 insertions, 39 deletions
diff --git a/compile_flags.txt b/compile_flags.txt index 426c43f7..e4e5b612 100644 --- a/compile_flags.txt +++ b/compile_flags.txt @@ -20,10 +20,11 @@ -std=c++20 -D__NE_AMD64__ -D__NE_ARM64__ --D__NEOSKRNL__ +-D__NEKERNEL__ -D__NE_ED__ -xc++ -D__AHCI__ +-D__NEOSKRNL__ -DNE_USE_MBCI_FLASH -D__ATA_DMA__ -D__NE_VEPM__ diff --git a/dev/boot/amd64-ci.make b/dev/boot/amd64-ci.make index 229e3359..eee7b3cb 100644 --- a/dev/boot/amd64-ci.make +++ b/dev/boot/amd64-ci.make @@ -65,7 +65,7 @@ REM=rm REM_FLAG=-f FLAG_ASM=-f win64 -FLAG_GNU=-fshort-wchar -Wall -Wpedantic -Wextra -Werror -D__EFI_x86_64__ -mno-red-zone -D__NEOSKRNL__ -D__BOOTZ__ \ +FLAG_GNU=-fshort-wchar -Wall -Wpedantic -Wextra -Werror -D__EFI_x86_64__ -mno-red-zone -D__NEKERNEL__ -D__BOOTZ__ \ -DEFI_FUNCTION_WRAPPER -I./ -I../kernel $(DEBUG_MACRO) $(DISK_DRV) -I../ -c -nostdlib -fno-rtti -fno-exceptions \ -std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT diff --git a/dev/boot/amd64-desktop.make b/dev/boot/amd64-desktop.make index 337f78d5..2ddc4659 100644 --- a/dev/boot/amd64-desktop.make +++ b/dev/boot/amd64-desktop.make @@ -67,7 +67,7 @@ REM=rm REM_FLAG=-f FLAG_ASM=-f win64 -FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -Wall -Wpedantic -Wextra -mno-red-zone -D__NEOSKRNL__ -D__BOOTZ__ -DBOOTZ_VEPM_SUPPORT \ +FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -Wall -Wpedantic -Wextra -mno-red-zone -D__NEKERNEL__ -D__BOOTZ__ -DBOOTZ_VEPM_SUPPORT \ -DEFI_FUNCTION_WRAPPER -I./ -I../kernel $(DISK_DRV) -I../ -c -nostdlib -fno-rtti -fno-exceptions \ -std=c++20 -DBOOTZ_GPT_SUPPORT -D__HAVE_NE_APIS__ -DZBA_USE_FB -D__NE_AMD64__ -D__NE__ -DNE_AUTO_FORMAT -Wl,--disable-reloc-section diff --git a/dev/boot/arm64-desktop.make b/dev/boot/arm64-desktop.make index 989b37ed..44299cc3 100644 --- a/dev/boot/arm64-desktop.make +++ b/dev/boot/arm64-desktop.make @@ -45,7 +45,7 @@ REM_FLAG=-f FLAG_ASM=-f win64 FLAG_GNU=-fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__NE_ARM64__ -fno-rtti -fno-exceptions -I./ \ -target aarch64-unknown-windows \ - -std=c++20 -DBOOTZ_EPM_SUPPORT -DZBA_USE_FB -D__FSKIT_USE_NEFS__ -D__BOOTZ_STANDALONE__ -D__NEOSKRNL__ -D__BOOTZ__ -D__HAVE_NE_APIS__ -D__NE__ -I../ -I../kernel + -std=c++20 -DBOOTZ_EPM_SUPPORT -DZBA_USE_FB -D__FSKIT_USE_NEFS__ -D__BOOTZ_STANDALONE__ -D__NEKERNEL__ -D__BOOTZ__ -D__HAVE_NE_APIS__ -D__NE__ -I../ -I../kernel BOOT_LOADER=ne_bootz KERNEL=ne_kernel diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc index 8957ca8f..5a530457 100644 --- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -116,14 +116,13 @@ EXTERN_C HAL::StackFramePtr mp_get_current_task(ThreadID thrdid) { EXTERN_C BOOL mp_register_task(HAL::StackFramePtr stack_frame, ThreadID thrdid) { if (!stack_frame) return NO; - if (thrdid > kSMPCount) return NO; - if (!kSMPAware) { sched_jump_to_task(kHWThread[thrdid].mFramePtr); - return YES; } + if (thrdid > kSMPCount) return NO; + HardwareThreadScheduler::The()[thrdid].Leak()->Busy(NO); kHWThread[thrdid].mFramePtr = stack_frame; @@ -146,12 +145,6 @@ Bool mp_is_smp(Void) noexcept { Void mp_init_cores(VoidPtr vendor_ptr) noexcept { if (!vendor_ptr) return; - if (!kHandoverHeader) return; - - if (!kHandoverHeader->f_HardwareTables.f_MultiProcessingEnabled) { - kSMPAware = NO; - return; - } PowerFactoryInterface hw_and_pow_int{vendor_ptr}; @@ -210,9 +203,6 @@ Void mp_init_cores(VoidPtr vendor_ptr) noexcept { ++kSMPCount; kout << "AP: kind: LAPIC: ON.\r"; - - // 0x7c00, as recommended by the Intel SDM. - hal_send_ipi_msg(kApicBaseAddress, entry_struct->ProcessorID, 0x7c); } else { kout << "AP: kind: LAPIC: OFF.\r"; } diff --git a/dev/kernel/HALKit/AMD64/HalInterruptAPI.asm b/dev/kernel/HALKit/AMD64/HalInterruptAPI.asm index 3b3ad849..c761684e 100644 --- a/dev/kernel/HALKit/AMD64/HalInterruptAPI.asm +++ b/dev/kernel/HALKit/AMD64/HalInterruptAPI.asm @@ -16,7 +16,7 @@ %macro IntExp 1 global __NE_INT_%1 __NE_INT_%1: - cld + cli std @@ -26,7 +26,7 @@ __NE_INT_%1: %macro IntNormal 1 global __NE_INT_%1 __NE_INT_%1: - cld + cli std @@ -52,7 +52,7 @@ extern idt_handle_math section .text __NE_INT_0: - cld + cli push rcx call idt_handle_generic pop rcx @@ -62,7 +62,7 @@ __NE_INT_0: o64 iret __NE_INT_1: - cld + cli push rcx call idt_handle_generic pop rcx @@ -72,7 +72,7 @@ __NE_INT_1: o64 iret __NE_INT_2: - cld + cli push rcx call idt_handle_generic pop rcx @@ -83,7 +83,7 @@ __NE_INT_2: ;; @brief Triggers a breakpoint and freeze the process. RIP is also fetched. __NE_INT_3: - cld + cli push rcx call idt_handle_breakpoint pop rcx @@ -93,7 +93,7 @@ __NE_INT_3: o64 iret __NE_INT_4: - cld + cli push rcx call idt_handle_generic @@ -104,14 +104,14 @@ __NE_INT_4: o64 iret __NE_INT_5: - cld + cli std o64 iret ;; Invalid opcode interrupt __NE_INT_6: - cld + cli push rcx call idt_handle_ud pop rcx @@ -121,7 +121,7 @@ __NE_INT_6: o64 iret __NE_INT_7: - cld + cli push rcx call idt_handle_generic pop rcx @@ -132,7 +132,7 @@ __NE_INT_7: ;; Invalid opcode interrupt __NE_INT_8: - cld + cli push rcx call idt_handle_math @@ -149,7 +149,7 @@ IntExp 11 IntExp 12 __NE_INT_13: - cld + cli push rcx call idt_handle_gpf @@ -162,7 +162,7 @@ __NE_INT_13: o64 iret __NE_INT_14: - cld + cli push rcx call idt_handle_pf pop rcx @@ -195,7 +195,7 @@ IntNormal 31 [extern kApicBaseAddress] __NE_INT_32: - cld + cli push rax mov rcx, rsp @@ -218,7 +218,7 @@ IntNormal 39 [extern rtl_rtl8139_interrupt_handler] __NE_INT_40: - cld + cli push rax mov rcx, rsp @@ -244,7 +244,7 @@ IntNormal 49 [extern hal_kernel_call_enter] __NE_INT_50: - cld + cli push rax mov rax, hal_system_call_enter @@ -262,7 +262,7 @@ __NE_INT_50: o64 iret __NE_INT_51: - cld + cli push rax mov rax, hal_kernel_call_enter @@ -301,7 +301,7 @@ section .text [global hal_load_gdt] hal_load_gdt: - cld + cli lgdt [rcx] diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc index dfd71777..e23c5bc1 100644 --- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc +++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc @@ -142,6 +142,12 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) { NeFS::fs_init_nefs(); #endif + UserProcessScheduler::The().SwitchTeam(kHighUserTeam); + + rtl_create_user_process([]() -> void { while (YES); }, "NeKernel"); + + HAL::mp_init_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr); + HAL::Register64 idt_reg; idt_reg.Base = reinterpret_cast<UIntPtr>(kInterruptVectorTable); diff --git a/dev/kernel/KernelKit/ProcessScheduler.h b/dev/kernel/KernelKit/ProcessScheduler.h index a907e096..7414e4fe 100644 --- a/dev/kernel/KernelKit/ProcessScheduler.h +++ b/dev/kernel/KernelKit/ProcessScheduler.h @@ -7,4 +7,12 @@ #pragma once #include <KernelKit/KernelTaskScheduler.h> -#include <KernelKit/UserProcessScheduler.h>
\ No newline at end of file +#include <KernelKit/UserProcessScheduler.h> + +#ifdef __NEOSKRNL__ +namespace Kernel { +inline UserProcessTeam kLowUserTeam; +inline UserProcessTeam kHighUserTeam; +inline UserProcessTeam kMidUserTeam; +} // namespace Kernel +#endif
\ No newline at end of file diff --git a/dev/kernel/NeKit/ErrorOr.h b/dev/kernel/NeKit/ErrorOr.h index 4c924957..d930fe17 100644 --- a/dev/kernel/NeKit/ErrorOr.h +++ b/dev/kernel/NeKit/ErrorOr.h @@ -50,7 +50,7 @@ class ErrorOr final { /// @note DO NOT MAKE THIS EXPLICIT! IT WILL BREAK THE COMPILATION. operator bool() { return mRef; } - BOOL HasError() { return this->mId > 0; } + BOOL HasError() { return this->mId < 0; } private: Ref<T> mRef; diff --git a/dev/kernel/amd64-ci.make b/dev/kernel/amd64-ci.make index bd9741b3..203d0dc9 100644 --- a/dev/kernel/amd64-ci.make +++ b/dev/kernel/amd64-ci.make @@ -5,7 +5,7 @@ CXX = x86_64-w64-mingw32-g++ LD = x86_64-w64-mingw32-ld -CCFLAGS = -fshort-wchar -c -D__NE_AMD64__ -D__NE_VEPM__ -Werror -Wall -Wpedantic -Wextra -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__NE_SUPPORT_NX__ -O0 -I../vendor -D__FSKIT_INCLUDES_NEFS__ -D__NEOSKRNL__ -D__HAVE_NE_APIS__ -D__FREESTANDING__ -D__NE_VIRTUAL_MEMORY_SUPPORT__ -D__NE_AUTO_FORMAT__ -D__NE__ -I./ -I../ -I../boot +CCFLAGS = -fshort-wchar -c -D__NE_AMD64__ -D__NEOSKRNL__ -D__NE_VEPM__ -Werror -Wall -Wpedantic -Wextra -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__NE_SUPPORT_NX__ -O0 -I../vendor -D__FSKIT_INCLUDES_NEFS__ -D__NEKERNEL__ -D__HAVE_NE_APIS__ -D__FREESTANDING__ -D__NE_VIRTUAL_MEMORY_SUPPORT__ -D__NE_AUTO_FORMAT__ -D__NE__ -I./ -I../ -I../boot ASM = nasm diff --git a/dev/kernel/amd64-desktop.make b/dev/kernel/amd64-desktop.make index 61e77a4c..081bf75b 100644 --- a/dev/kernel/amd64-desktop.make +++ b/dev/kernel/amd64-desktop.make @@ -5,7 +5,7 @@ CXX = x86_64-w64-mingw32-g++ LD = x86_64-w64-mingw32-ld -CCFLAGS = -fshort-wchar -c -D__NE_AMD64__ -D__NE_USE_PEF__ -D__NE_VEPM__ -Wall -Wpedantic -Wextra -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__FSKIT_INCLUDES_OPENHEFS__ -D__FSKIT_INCLUDES_EXT2__ -D__NE_SUPPORT_NX__ -O0 -I../vendor -D__NEOSKRNL__ -D__HAVE_NE_APIS__ -D__FREESTANDING__ -D__NE_VIRTUAL_MEMORY_SUPPORT__ -D__NE_AUTO_FORMAT__ -D__NE__ -I./ -I../ -I../boot +CCFLAGS = -fshort-wchar -c -D__NE_AMD64__ -D__NEOSKRNL__ -D__NE_VEPM__ -Wall -Wpedantic -Wextra -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__FSKIT_INCLUDES_OPENHEFS__ -D__FSKIT_INCLUDES_EXT2__ -D__NE_SUPPORT_NX__ -O0 -I../vendor -D__NEKERNEL__ -D__HAVE_NE_APIS__ -D__FREESTANDING__ -D__NE_VIRTUAL_MEMORY_SUPPORT__ -D__NE_AUTO_FORMAT__ -D__NE__ -I./ -I../ -I../boot ASM = nasm diff --git a/dev/kernel/arm64-desktop.make b/dev/kernel/arm64-desktop.make index 08260525..f5228d6b 100644 --- a/dev/kernel/arm64-desktop.make +++ b/dev/kernel/arm64-desktop.make @@ -7,7 +7,7 @@ CC = clang++ LD = lld-link CCFLAGS = -fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__NE_ARM64__ -fno-rtti -fno-exceptions -I./ \ -target aarch64-unknown-windows \ - -std=c++20 -O3 -D__NEOSKRNL__ -D__NE_VEPM__ -D__NE_MINIMAL_OS__ -D__NE_NO_BUILTIN__ -D__HAVE_NE_APIS__ -D__NE__ -I../ + -std=c++20 -O3 -D__NEKERNEL__ -D__NEOSKRNL__ -D__NE_VEPM__ -D__NE_MINIMAL_OS__ -D__NE_NO_BUILTIN__ -D__HAVE_NE_APIS__ -D__NE__ -I../ ASM = clang++ |
