diff options
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/Boot/Mod/NetBoot/build.json | 2 | ||||
| -rw-r--r-- | dev/Boot/Mod/SysChk/amd64.json | 2 | ||||
| -rw-r--r-- | dev/Boot/Mod/SysChk/arm64.json | 2 | ||||
| -rw-r--r-- | dev/Boot/amd64-desktop.make | 4 | ||||
| -rw-r--r-- | dev/Boot/arm64-desktop.make | 2 | ||||
| -rw-r--r-- | dev/Boot/arm64-mobile.make | 2 | ||||
| -rw-r--r-- | dev/Kernel/CompilerKit/Detail.h | 4 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/Storage/ATA.cc | 6 | ||||
| -rw-r--r-- | dev/Kernel/amd64-desktop.make | 2 | ||||
| -rw-r--r-- | dev/Kernel/arm64-desktop.make | 2 | ||||
| -rw-r--r-- | dev/Kernel/src/HardwareThreadScheduler.cc | 6 | ||||
| -rw-r--r-- | dev/Kernel/src/UserProcessScheduler.cc | 31 | ||||
| -rw-r--r-- | dev/Mod/ATA/ATA.h | 2 |
13 files changed, 36 insertions, 31 deletions
diff --git a/dev/Boot/Mod/NetBoot/build.json b/dev/Boot/Mod/NetBoot/build.json index 9df27b3c..a19f3cbf 100644 --- a/dev/Boot/Mod/NetBoot/build.json +++ b/dev/Boot/Mod/NetBoot/build.json @@ -14,7 +14,7 @@ "-Wl,--subsystem=17,--image-base,0x10000000,-e,ModuleMain" ], "cpp_macros": [ - "__MINOSKRNL__", + "__NEOSKRNL__", "__ZBAOSLDR__", "__ZKA_AMD64__", "kNetBootVersionHighest=0x0100", diff --git a/dev/Boot/Mod/SysChk/amd64.json b/dev/Boot/Mod/SysChk/amd64.json index 2c079889..e1e1b818 100644 --- a/dev/Boot/Mod/SysChk/amd64.json +++ b/dev/Boot/Mod/SysChk/amd64.json @@ -14,7 +14,7 @@ "-Wl,--subsystem=17,--image-base,0x10000000,-e,ModuleMain" ], "cpp_macros": [ - "__MINOSKRNL__", + "__NEOSKRNL__", "__ZBAOSLDR__", "__BOOTLDR_STANDALONE__", "__ZKA_AMD64__", diff --git a/dev/Boot/Mod/SysChk/arm64.json b/dev/Boot/Mod/SysChk/arm64.json index 46cfb081..0e107e28 100644 --- a/dev/Boot/Mod/SysChk/arm64.json +++ b/dev/Boot/Mod/SysChk/arm64.json @@ -15,7 +15,7 @@ "-target aarch64-unknown-windows" ], "cpp_macros": [ - "__MINOSKRNL__", + "__NEOSKRNL__", "__ZBAOSLDR__", "__BOOTLDR_STANDALONE__", "__ZKA_ARM64__", diff --git a/dev/Boot/amd64-desktop.make b/dev/Boot/amd64-desktop.make index c13a718f..34ae629e 100644 --- a/dev/Boot/amd64-desktop.make +++ b/dev/Boot/amd64-desktop.make @@ -42,7 +42,7 @@ REM=rm REM_FLAG=-f FLAG_ASM=-f win64 -FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__MINOSKRNL__ -D__ZBAOSLDR__ \ +FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__NEOSKRNL__ -D__ZBAOSLDR__ \ -DEFI_FUNCTION_WRAPPER -I./ -I../Kernel -I../ -c -nostdlib -fno-rtti -fno-exceptions \ -std=c++20 -DBOOTZ_GPT_SUPPORT -DBOOTZ_EPM_SUPPORT -D__HAVE_ZKA_APIS__ -DZBA_USE_FB -D__ZKA_AMD64__ -D__ZKA__ -DZKA_AUTO_FORMAT @@ -90,7 +90,7 @@ run-efi-amd64-ahci: .PHONY: run-efi-amd64-ata run-efi-amd64-ata: - $(EMU) $(EMU_FLAGS) -enable-kvm -device piix4-ide,id=ide -drive id=disk,file=$(IMG),format=raw,if=none -device ide-hd,drive=disk,bus=ide.0 -s -S + $(EMU) $(EMU_FLAGS) -M q35 -enable-kvm -device piix4-ide,id=ide -drive id=disk,file=$(IMG),format=raw,if=none -device ide-hd,drive=disk,bus=ide.0 -s -S # img_2 is the rescue disk. img is the bootable disk, as provided by the Zeta specs. .PHONY: epm-img diff --git a/dev/Boot/arm64-desktop.make b/dev/Boot/arm64-desktop.make index 91affa01..16341b21 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__ZKA_ARM64__ -fno-rtti -fno-exceptions -I./ \ -target aarch64-unknown-windows \ - -std=c++20 -DBOOTZ_EPM_SUPPORT -DZBA_USE_FB -D__FSKIT_USE_NEFS__ -D__BOOTLDR_STANDALONE__ -D__MINOSKRNL__ -D__ZBAOSLDR__ -D__HAVE_ZKA_APIS__ -D__ZKA__ -I../ -I../Kernel + -std=c++20 -DBOOTZ_EPM_SUPPORT -DZBA_USE_FB -D__FSKIT_USE_NEFS__ -D__BOOTLDR_STANDALONE__ -D__NEOSKRNL__ -D__ZBAOSLDR__ -D__HAVE_ZKA_APIS__ -D__ZKA__ -I../ -I../Kernel BOOT_LOADER=zbaosldr.exe KERNEL=neoskrnl.exe diff --git a/dev/Boot/arm64-mobile.make b/dev/Boot/arm64-mobile.make index ce940788..9ca37b89 100644 --- a/dev/Boot/arm64-mobile.make +++ b/dev/Boot/arm64-mobile.make @@ -46,7 +46,7 @@ REM_FLAG=-f FLAG_ASM=-f win64 FLAG_GNU=-fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__ZKA_ARM64__ -fno-rtti -fno-exceptions -I./ \ -target aarch64-unknown-windows \ - -std=c++20 -DBOOTZ_EPM_SUPPORT -DkExpectedWidth=320 -DkExpectedHeight=480 -D__FSKIT_USE_NEFS__ -D__BOOTLDR_STANDALONE__ -D__MINOSKRNL__ -D__ZBAOSLDR__ -D__HAVE_ZKA_APIS__ -D__ZKA__ -I../ -I../Kernel + -std=c++20 -DBOOTZ_EPM_SUPPORT -DkExpectedWidth=320 -DkExpectedHeight=480 -D__FSKIT_USE_NEFS__ -D__BOOTLDR_STANDALONE__ -D__NEOSKRNL__ -D__ZBAOSLDR__ -D__HAVE_ZKA_APIS__ -D__ZKA__ -I../ -I../Kernel BOOT_LOADER=zbaosldr.exe KERNEL=neoskrnl.exe diff --git a/dev/Kernel/CompilerKit/Detail.h b/dev/Kernel/CompilerKit/Detail.h index 6f58c97f..29620aae 100644 --- a/dev/Kernel/CompilerKit/Detail.h +++ b/dev/Kernel/CompilerKit/Detail.h @@ -6,9 +6,9 @@ #pragma once -#ifdef __MINOSKRNL__ +#ifdef __NEOSKRNL__ #include <NewKit/Defines.h> -#endif // ifdef __MINOSKRNL__ +#endif // ifdef __NEOSKRNL__ #define ZKA_COPY_DELETE(KLASS) \ KLASS& operator=(const KLASS&) = delete; \ diff --git a/dev/Kernel/HALKit/AMD64/Storage/ATA.cc b/dev/Kernel/HALKit/AMD64/Storage/ATA.cc index a3e8f4ab..aea1846d 100644 --- a/dev/Kernel/HALKit/AMD64/Storage/ATA.cc +++ b/dev/Kernel/HALKit/AMD64/Storage/ATA.cc @@ -105,8 +105,10 @@ Boolean drv_std_init(UInt16 Bus, UInt8 Drive, UInt16& OutBus, UInt8& OutMaster) // Step 7: Check if the drive supports DMA if (!(kATAData[63] & (1 << 8)) || !(kATAData[88] & 0xFF)) { - kcout << "No DMA support, falling back to PIO...\r"; - return false; // Or switch to PIO mode if needed + kcout << "No DMA support...\r"; + ke_panic(RUNTIME_CHECK_FAILED, "No DMA support on necessry disk driver."); + + return false; } // Step 8: Enable DMA Mode diff --git a/dev/Kernel/amd64-desktop.make b/dev/Kernel/amd64-desktop.make index d8a63ced..023195d5 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__ZKA_AMD64__ -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__ZKA_SUPPORT_NX__ -O0 -I../Vendor -D__FSKIT_INCLUDES_NEFS__ -D__MINOSKRNL__ -D__HAVE_ZKA_APIS__ -D__FREESTANDING__ -D__ZKA_VIRTUAL_MEMORY_SUPPORT__ -D__ZKA_AUTO_FORMAT__ -D__ZKA__ -I./ -I../ -I../zba +CCFLAGS = -fshort-wchar -c -D__ZKA_AMD64__ -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__ZKA_SUPPORT_NX__ -O0 -I../Vendor -D__FSKIT_INCLUDES_NEFS__ -D__NEOSKRNL__ -D__HAVE_ZKA_APIS__ -D__FREESTANDING__ -D__ZKA_VIRTUAL_MEMORY_SUPPORT__ -D__ZKA_AUTO_FORMAT__ -D__ZKA__ -I./ -I../ -I../zba ASM = nasm diff --git a/dev/Kernel/arm64-desktop.make b/dev/Kernel/arm64-desktop.make index ba5e736b..71443e9f 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__ZKA_ARM64__ -fno-rtti -fno-exceptions -I./ \ -target aarch64-unknown-windows \ - -std=c++20 -O3 -D__MINOSKRNL__ -D__ZKA_MINIMAL_OS__ -D__ZKA_NO_BUILTIN__ -D__HAVE_ZKA_APIS__ -D__ZKA__ -I../ + -std=c++20 -O3 -D__NEOSKRNL__ -D__ZKA_MINIMAL_OS__ -D__ZKA_NO_BUILTIN__ -D__HAVE_ZKA_APIS__ -D__ZKA__ -I../ ASM = clang++ diff --git a/dev/Kernel/src/HardwareThreadScheduler.cc b/dev/Kernel/src/HardwareThreadScheduler.cc index 66500f73..573b86d6 100644 --- a/dev/Kernel/src/HardwareThreadScheduler.cc +++ b/dev/Kernel/src/HardwareThreadScheduler.cc @@ -62,8 +62,9 @@ namespace Kernel Bool HardwareThread::IsBusy() noexcept { STATIC Int64 busy_timer = 0U; + STATIC Int64 timeout_max = 0x1000000; // an arbitrary value used to tell if the timeout hasn't been reached yet. - if (fBusy && busy_timer > this->fPTime) + if (fBusy && busy_timer > timeout_max) { busy_timer = 0U; fBusy = No; @@ -111,6 +112,9 @@ namespace Kernel /***********************************************************************************/ Bool HardwareThread::Switch(VoidPtr image_ptr, Ptr8 stack_ptr, HAL::StackFramePtr frame, const ThreadID& pid) { + if (this->IsBusy()) + return NO; + this->fStack = frame; this->fSourcePID = pid; diff --git a/dev/Kernel/src/UserProcessScheduler.cc b/dev/Kernel/src/UserProcessScheduler.cc index dbe0471b..2e76f7ac 100644 --- a/dev/Kernel/src/UserProcessScheduler.cc +++ b/dev/Kernel/src/UserProcessScheduler.cc @@ -565,7 +565,14 @@ namespace Kernel continue; if (HardwareThreadScheduler::The()[index].Leak()->Switch(image_ptr, stack, frame_ptr, new_pid)) + { + auto prev_ptime = HardwareThreadScheduler::The()[index].Leak()->fPTime; + HardwareThreadScheduler::The()[index].Leak()->fPTime = UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].PTime; + PID prev_pid = UserProcessHelper::TheCurrentPID(); + UserProcessHelper::TheCurrentPID().Leak().Leak() = new_pid; + return YES; + } continue; } @@ -573,38 +580,30 @@ namespace Kernel if (UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].Affinity == AffinityKind::kRealTime) continue; - PID prev_pid = UserProcessHelper::TheCurrentPID(); - UserProcessHelper::TheCurrentPID().Leak().Leak() = new_pid; - //////////////////////////////////////////////////////////// /// Prepare task switch. /// //////////////////////////////////////////////////////////// - HardwareThreadScheduler::The()[index].Leak()->Wake(YES); - HardwareThreadScheduler::The()[index].Leak()->Busy(NO); - - auto prev_ptime = HardwareThreadScheduler::The()[index].Leak()->fPTime; - HardwareThreadScheduler::The()[index].Leak()->fPTime = UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].PTime; - Bool ret = HardwareThreadScheduler::The()[index].Leak()->Switch(image_ptr, stack, frame_ptr, new_pid); //////////////////////////////////////////////////////////// /// Rollback on fail. /// //////////////////////////////////////////////////////////// if (!ret) - { - HardwareThreadScheduler::The()[index].Leak()->fPTime = prev_ptime; - UserProcessHelper::TheCurrentPID().Leak().Leak() = prev_pid; + return No; - HardwareThreadScheduler::The()[index].Leak()->Busy(NO); - } + PID prev_pid = UserProcessHelper::TheCurrentPID(); + UserProcessHelper::TheCurrentPID().Leak().Leak() = new_pid; + + auto prev_ptime = HardwareThreadScheduler::The()[index].Leak()->fPTime; + HardwareThreadScheduler::The()[index].Leak()->fPTime = UserProcessScheduler::The().CurrentTeam().AsArray()[new_pid].PTime; HardwareThreadScheduler::The()[index].Leak()->Wake(NO); - return Yes; + break; } - return No; + return Yes; } //////////////////////////////////////////////////////////// diff --git a/dev/Mod/ATA/ATA.h b/dev/Mod/ATA/ATA.h index c3c65ec0..6d8cd424 100644 --- a/dev/Mod/ATA/ATA.h +++ b/dev/Mod/ATA/ATA.h @@ -154,5 +154,5 @@ Kernel::SizeT drv_get_sector_count(); /// @brief get device size. Kernel::SizeT drv_get_size(); -#endif // ifdef __MINOSKRNL__ +#endif // ifdef __NEOSKRNL__ #endif // ifndef __ATA_PIO__ || __AHCI__ |
