summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal <amlal.elmahrouss@icloud.com>2025-01-29 09:15:17 +0100
committerAmlal <amlal.elmahrouss@icloud.com>2025-01-29 09:15:17 +0100
commitb6464d3fcd11ad43d1d0421fa8484eda2ac1708f (patch)
tree7826279e593c837fa81a61f38e899213f8f55c03 /dev
parent711dcbb464de6339a2dc5cd251f2096616d5ea09 (diff)
WiP: Tweaks and will finish SATA support and ATA (DMA) support.
Signed-off-by: Amlal <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev')
-rw-r--r--dev/Boot/Mod/NetBoot/build.json2
-rw-r--r--dev/Boot/Mod/SysChk/amd64.json2
-rw-r--r--dev/Boot/Mod/SysChk/arm64.json2
-rw-r--r--dev/Boot/amd64-desktop.make4
-rw-r--r--dev/Boot/arm64-desktop.make2
-rw-r--r--dev/Boot/arm64-mobile.make2
-rw-r--r--dev/Kernel/CompilerKit/Detail.h4
-rw-r--r--dev/Kernel/HALKit/AMD64/Storage/ATA.cc6
-rw-r--r--dev/Kernel/amd64-desktop.make2
-rw-r--r--dev/Kernel/arm64-desktop.make2
-rw-r--r--dev/Kernel/src/HardwareThreadScheduler.cc6
-rw-r--r--dev/Kernel/src/UserProcessScheduler.cc31
-rw-r--r--dev/Mod/ATA/ATA.h2
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__