diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-26 20:29:57 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-26 20:29:57 +0200 |
| commit | f4babecc6d72aae688ad85fc726e22dbd1f82219 (patch) | |
| tree | 8dc79036504c2b04337b130842f85bb843e4d85d /dev/kernel | |
| parent | dd0b266dbe8a5c5d132640ee944f2232f1ff2c1c (diff) | |
feat!: Add IFS layer within DriveMgr, and IFS API.
also:
- Use ThreadID in AP system.
- Refactor kernel according to new IFS layer.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
| -rw-r--r-- | dev/kernel/ArchKit/ArchKit.h | 2 | ||||
| -rw-r--r-- | dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc | 4 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/CodeMgr.h | 4 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/DriveMgr.h | 16 | ||||
| -rw-r--r-- | dev/kernel/KernelKit/IFS.h | 25 | ||||
| -rw-r--r-- | dev/kernel/amd64-desktop.make | 2 | ||||
| -rw-r--r-- | dev/kernel/src/FS/NeFS+FileSystemParser.cc | 1 | ||||
| -rw-r--r-- | dev/kernel/src/IFS.cc (renamed from dev/kernel/src/DriveMgr+IO.cc) | 16 | ||||
| -rw-r--r-- | dev/kernel/src/UserProcessScheduler.cc | 1 |
9 files changed, 42 insertions, 29 deletions
diff --git a/dev/kernel/ArchKit/ArchKit.h b/dev/kernel/ArchKit/ArchKit.h index 08e8ab88..b6637ec1 100644 --- a/dev/kernel/ArchKit/ArchKit.h +++ b/dev/kernel/ArchKit/ArchKit.h @@ -77,8 +77,6 @@ struct HalSyscallEntry final { operator bool() { return fHooked; } }; -EXTERN_C Kernel::HAL::StackFramePtr mp_get_current_task(Kernel::Int64 pid); - inline Kernel::Array<HalSyscallEntry, kMaxDispatchCallCount> kSysCalls; inline Kernel::Array<HalSyscallEntry, kMaxDispatchCallCount> kKernCalls; diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc index 1fbf9fea..cb1ec59b 100644 --- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc +++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc @@ -101,7 +101,7 @@ Void hal_send_ipi_msg(UInt32 target, UInt32 apic_id, UInt8 vector) { /// @param thrdid The thread ID. /***********************************************************************************/ -EXTERN_C HAL::StackFramePtr mp_get_current_task(Int64 thrdid) { +EXTERN_C HAL::StackFramePtr mp_get_current_task(ThreadID thrdid) { if (thrdid > kSMPCount) return nullptr; return kHWThread[thrdid].mFramePtr; } @@ -112,7 +112,7 @@ EXTERN_C HAL::StackFramePtr mp_get_current_task(Int64 thrdid) { /// @param thrdid The thread ID. /***********************************************************************************/ -EXTERN_C BOOL mp_register_task(HAL::StackFramePtr stack_frame, ProcessID thrdid) { +EXTERN_C BOOL mp_register_task(HAL::StackFramePtr stack_frame, ThreadID thrdid) { if (thrdid > kSMPCount) return NO; if (!stack_frame) return NO; diff --git a/dev/kernel/KernelKit/CodeMgr.h b/dev/kernel/KernelKit/CodeMgr.h index f4d46b4b..072ba4d5 100644 --- a/dev/kernel/KernelKit/CodeMgr.h +++ b/dev/kernel/KernelKit/CodeMgr.h @@ -23,10 +23,10 @@ namespace Kernel { typedef void (*rtl_main_kind)(void); /// @brief C++ Constructor entrypoint. -typedef void (*rtl_ctor_kind)(void); +typedef void (*rtl_cxx_ctor_kind)(void); /// @brief C++ Destructor entrypoint. -typedef void (*rtl_dtor_kind)(void); +typedef void (*rtl_cxx_dtor_kind)(void); /// @brief Executes a new process from a function. Kernel code only. /// @note This sets up a new stack, anything on the main function that calls the Kernel will not be diff --git a/dev/kernel/KernelKit/DriveMgr.h b/dev/kernel/KernelKit/DriveMgr.h index 684e2e5c..4a530deb 100644 --- a/dev/kernel/KernelKit/DriveMgr.h +++ b/dev/kernel/KernelKit/DriveMgr.h @@ -23,6 +23,8 @@ #define drv_sector_cnt(SIZE, SECTOR_SZ) (((SIZE) + (SECTOR_SZ)) / (SECTOR_SZ)) +#define kDriveHiddenPrefix '~' + namespace Kernel { enum { kInvalidDrive = -1, @@ -159,20 +161,6 @@ namespace Detect { Void io_drv_input(DriveTrait::DrivePacket pckt); Void io_drv_output(DriveTrait::DrivePacket pckt); - -/// @brief Read from IFS disk. -/// @param Mnt mounted interface. -/// @param DrvTrait drive info -/// @param DrvIndex drive index. -/// @return -Int32 fs_ifs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex); - -/// @brief Write to IFS disk. -/// @param Mnt mounted interface. -/// @param DrvTrait drive info -/// @param DrvIndex drive index. -/// @return -Int32 fs_ifs_write(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex); } // namespace Kernel #endif /* ifndef INC_DRIVE_MANAGER_H */ diff --git a/dev/kernel/KernelKit/IFS.h b/dev/kernel/KernelKit/IFS.h new file mode 100644 index 00000000..5555764f --- /dev/null +++ b/dev/kernel/KernelKit/IFS.h @@ -0,0 +1,25 @@ +/* ------------------------------------------- + + Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include <KernelKit/DriveMgr.h> + +namespace Kernel { +/// @brief Read from IFS disk. +/// @param Mnt mounted interface. +/// @param DrvTrait drive info +/// @param DrvIndex drive index. +/// @return +Int32 fs_ifs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex); + +/// @brief Write to IFS disk. +/// @param Mnt mounted interface. +/// @param DrvTrait drive info +/// @param DrvIndex drive index. +/// @return +Int32 fs_ifs_write(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex); +} // namespace Kernel
\ No newline at end of file diff --git a/dev/kernel/amd64-desktop.make b/dev/kernel/amd64-desktop.make index 49593101..21488782 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_VEPM__ -Wall -Wpedantic -Wextra -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__FSKIT_INCLUDES_HEFS__ -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__NE_VEPM__ -Wall -Wpedantic -Wextra -mno-red-zone -fno-rtti -fno-exceptions -std=c++20 -D__FSKIT_INCLUDES_HEFS__ -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 ASM = nasm diff --git a/dev/kernel/src/FS/NeFS+FileSystemParser.cc b/dev/kernel/src/FS/NeFS+FileSystemParser.cc index 97b2ff36..dd0a1d9a 100644 --- a/dev/kernel/src/FS/NeFS+FileSystemParser.cc +++ b/dev/kernel/src/FS/NeFS+FileSystemParser.cc @@ -10,6 +10,7 @@ #include <FirmwareKit/EPM.h> #include <KernelKit/DriveMgr.h> +#include <KernelKit/IFS.h> #include <KernelKit/KPC.h> #include <KernelKit/ProcessScheduler.h> #include <KernelKit/UserMgr.h> diff --git a/dev/kernel/src/DriveMgr+IO.cc b/dev/kernel/src/IFS.cc index 9137c91e..ba2ec8c0 100644 --- a/dev/kernel/src/DriveMgr+IO.cc +++ b/dev/kernel/src/IFS.cc @@ -9,9 +9,9 @@ /************************************************************* * - * File: DriveMgr+IO.cc + * File: IFS.cc * Purpose: Filesystem to mountpoint interface. - * Date: 3/26/24 + * Date: 05/26/2025 * * Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. * @@ -23,13 +23,13 @@ #define fsi_ifs_read(DRV, TRAITS, MP) (MP->DRV()).fInput(TRAITS) namespace Kernel { -/// @brief Read from newfs disk. +/// @brief Read from fs disk. /// @param Mnt mounted interface. /// @param DrvTrait drive info /// @param DrvIndex drive index. /// @return Int32 fs_ifs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex) { - if (!Mnt) return 1; + if (!Mnt) return kErrorDisk; DrvTrait.fPacket.fPacketGood = false; @@ -52,16 +52,16 @@ Int32 fs_ifs_read(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex } } - return DrvTrait.fPacket.fPacketGood; + return DrvTrait.fPacket.fPacketGood ? kErrorSuccess : kErrorDisk; } -/// @brief Write to newfs disk. +/// @brief Write to fs disk. /// @param Mnt mounted interface. /// @param DrvTrait drive info /// @param DrvIndex drive index. /// @return Int32 fs_ifs_write(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvIndex) { - if (!Mnt) return 1; + if (!Mnt) return kErrorDisk; DrvTrait.fPacket.fPacketGood = false; @@ -84,6 +84,6 @@ Int32 fs_ifs_write(MountpointInterface* Mnt, DriveTrait& DrvTrait, Int32 DrvInde } } - return DrvTrait.fPacket.fPacketGood; + return DrvTrait.fPacket.fPacketGood ? kErrorSuccess : kErrorDisk; } } // namespace Kernel
\ No newline at end of file diff --git a/dev/kernel/src/UserProcessScheduler.cc b/dev/kernel/src/UserProcessScheduler.cc index f900f984..4bbd085a 100644 --- a/dev/kernel/src/UserProcessScheduler.cc +++ b/dev/kernel/src/UserProcessScheduler.cc @@ -126,6 +126,7 @@ ErrorOr<VoidPtr> USER_PROCESS::New(SizeT sz, SizeT pad_amount) { #ifdef __NE_VIRTUAL_MEMORY_SUPPORT__ auto vm_register = kKernelVM; + hal_write_cr3(this->VMRegister); auto ptr = mm_alloc_ptr(sz, Yes, Yes, pad_amount); |
