From d62341f615974257eac4125ab68be519efcf0a6e Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 4 Mar 2025 05:20:58 +0100 Subject: CHORE&FEAT: Kernel/SCI: Lots of Chore and feat, see below. - Add traits for CmdListEntry in GPU's SCI. (GPU.h) - Set standard user directory as /user/ instead of /usr/. (User.cc/User.h) - Replace fSourcePid with fPID. (HardwareThreadScheduler.cc/HardwareThreadScheduler.h) --- dev/Kernel/ArchKit/ArchKit.h | 10 +++++----- dev/Kernel/HALKit/AMD64/Storage/AHCI.cc | 14 +++++++------- dev/Kernel/HALKit/AMD64/Storage/DMA.cc | 12 ++++++------ dev/Kernel/KernelKit/HardwareThreadScheduler.h | 2 +- dev/Kernel/KernelKit/User.h | 12 ++++++++++-- dev/Kernel/KernelKit/UserProcessScheduler.h | 4 ++-- dev/Kernel/SystemKit/SwapDisk.h | 12 ++++++------ dev/Kernel/src/HardwareThreadScheduler.cc | 6 +++--- dev/Kernel/src/IPEFDylibObject.cc | 6 ++++-- dev/Kernel/src/KernelMain.cc | 12 ++++++++++-- dev/Kernel/src/System/SwapDisk.cc | 10 +++++----- dev/Kernel/src/User.cc | 2 +- 12 files changed, 60 insertions(+), 42 deletions(-) (limited to 'dev/Kernel') diff --git a/dev/Kernel/ArchKit/ArchKit.h b/dev/Kernel/ArchKit/ArchKit.h index 36dabeb3..d663cdc7 100644 --- a/dev/Kernel/ArchKit/ArchKit.h +++ b/dev/Kernel/ArchKit/ArchKit.h @@ -24,6 +24,8 @@ #error !!! unknown architecture !!! #endif +#define kKernelMaxSystemCalls (512U) + namespace NeOS { inline SSizeT rt_hash_seed(const Char* seed, int mul) @@ -65,11 +67,9 @@ namespace NeOS } } // namespace NeOS -#define kKernelMaxSystemCalls (256) - typedef NeOS::Void (*rt_syscall_proc)(NeOS::VoidPtr); -struct HAL_SYSCALL_RECORD final +struct HalSyscallEntry final { NeOS::Int64 fHash; NeOS::Bool fHooked; @@ -81,11 +81,11 @@ struct HAL_SYSCALL_RECORD final } }; -inline NeOS::Array kSyscalls; -inline NeOS::Array kKerncalls; diff --git a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc b/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc index 35d6ba66..a8e60e58 100644 --- a/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc +++ b/dev/Kernel/HALKit/AMD64/Storage/AHCI.cc @@ -11,7 +11,7 @@ * @version 0.1 * @date 2024-02-02 * - * @Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. + * @copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. * */ @@ -58,9 +58,9 @@ STATIC Int32 drv_find_cmd_slot(HbaPort* port) noexcept; STATIC Void drv_compute_disk_ahci() noexcept; STATIC PCI::Device kPCIDevice; -STATIC HbaMem* kSATA[kSATAPortCnt] = {}; -STATIC SizeT kSATAIndex = 0UL; -STATIC Lba kHighestLBA = 0UL; +STATIC HbaMem* kSATA[kSATAPortCnt] = {}; +STATIC SizeT kSATAIndex = 0UL; +STATIC Lba kHighestLBA = 0UL; STATIC UInt16 kSATAPortsImplemented = 0U; @@ -139,7 +139,7 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz if (Identify) h2d_fis->Command = kAHCICmdIdentify; - h2d_fis->Lba0 = (lba) & 0xFF; + h2d_fis->Lba0 = (lba)&0xFF; h2d_fis->Lba1 = (lba >> 8) & 0xFF; h2d_fis->Lba2 = (lba >> 16) & 0xFF; @@ -149,7 +149,7 @@ STATIC Void drv_std_input_output(UInt64 lba, UInt8* buffer, SizeT sector_sz, Siz h2d_fis->Lba4 = (lba >> 32) & 0xFF; h2d_fis->Lba5 = (lba >> 40) & 0xFF; - h2d_fis->CountLow = (size_buffer) & 0xFF; + h2d_fis->CountLow = (size_buffer)&0xFF; h2d_fis->CountHigh = (size_buffer >> 8) & 0xFF; while ((kSATA[kSATAIndex]->Ports[kSATAIndex].Tfd & (kSATASRBsy | kSATASRDrq))) @@ -222,7 +222,7 @@ STATIC Bool drv_std_init_ahci(UInt16& pi, BOOL atapi) { kout << (atapi ? "Detect: /dev/atp" : "Detect: /dev/sat") << number(ahci_index) << endl; - kSATAIndex = ahci_index; + kSATAIndex = ahci_index; kSATA[ahci_index] = mem_ahci; pi = ports_implemented; diff --git a/dev/Kernel/HALKit/AMD64/Storage/DMA.cc b/dev/Kernel/HALKit/AMD64/Storage/DMA.cc index 06203380..dfec0f76 100644 --- a/dev/Kernel/HALKit/AMD64/Storage/DMA.cc +++ b/dev/Kernel/HALKit/AMD64/Storage/DMA.cc @@ -170,9 +170,9 @@ Void drv_std_read(UInt64 Lba, UInt16 IO, UInt8 Master, Char* Buf, SizeT SectorSz Details::PRDEntry* prd = (Details::PRDEntry*)(kATADevice.Bar(0x20) + 4); // The PRDEntry is not correct. - prd->mAddress = (UInt32)(UIntPtr)kReadAddr; - prd->mByteCount = Size - 1; - prd->mFlags = 0x8000; // indicate the end of prd. + prd->mAddress = (UInt32)(UIntPtr)kReadAddr; + prd->mByteCount = Size - 1; + prd->mFlags = 0x8000; // indicate the end of prd. rt_out32(kATADevice.Bar(0x20) + 0x04, (UInt32)(UIntPtr)prd); @@ -212,9 +212,9 @@ Void drv_std_write(UInt64 Lba, UInt16 IO, UInt8 Master, Char* Buf, SizeT SectorS rt_out8(IO + ATA_REG_LBA3, (Lba) >> 24); Details::PRDEntry* prd = (Details::PRDEntry*)(kATADevice.Bar(0x20) + 4); - prd->mAddress = (UInt32)(UIntPtr)kWriteAddr; - prd->mByteCount = Size - 1; - prd->mFlags = 0x8000; + prd->mAddress = (UInt32)(UIntPtr)kWriteAddr; + prd->mByteCount = Size - 1; + prd->mFlags = 0x8000; rt_out32(kATADevice.Bar(0x20) + 0x04, (UInt32)(UIntPtr)prd); rt_out8(kATADevice.Bar(0x20) + ATA_REG_COMMAND, ATA_CMD_WRITE_DMA); diff --git a/dev/Kernel/KernelKit/HardwareThreadScheduler.h b/dev/Kernel/KernelKit/HardwareThreadScheduler.h index a0970d24..71026cdb 100644 --- a/dev/Kernel/KernelKit/HardwareThreadScheduler.h +++ b/dev/Kernel/KernelKit/HardwareThreadScheduler.h @@ -74,7 +74,7 @@ namespace NeOS HAL::StackFramePtr fStack{nullptr}; ThreadKind fKind{ThreadKind::kAPStandard}; ThreadID fID{0}; - ThreadID fSourcePID{0}; + ThreadID fPID{0}; Bool fWakeup{NO}; Bool fBusy{NO}; UInt64 fPTime{0}; diff --git a/dev/Kernel/KernelKit/User.h b/dev/Kernel/KernelKit/User.h index 0ce27e62..f5aa1951 100644 --- a/dev/Kernel/KernelKit/User.h +++ b/dev/Kernel/KernelKit/User.h @@ -7,6 +7,14 @@ #ifndef INC_USER_H #define INC_USER_H +/* ------------------------------------------- + + Revision History: + + 04/03/25: Set users directory as /user/ instead of /usr/ + + ------------------------------------------- */ + #include #include #include @@ -18,7 +26,7 @@ #define kGuestUser "OS AUTHORITY/GUEST/%s" #define kStdUser "OS AUTHORITY/STD/%s" -#define kUsersDir "/usr/" +#define kUsersDir "/user/" #define kMaxUserNameLen (255U) #define kMaxUserTokenLen (255U) @@ -43,7 +51,7 @@ namespace NeOS class User final { public: - explicit User() = delete; + User() = delete; User(const Int32& sel, const Char* username); User(const UserRingKind& kind, const Char* username); diff --git a/dev/Kernel/KernelKit/UserProcessScheduler.h b/dev/Kernel/KernelKit/UserProcessScheduler.h index e02ad7de..10697fa3 100644 --- a/dev/Kernel/KernelKit/UserProcessScheduler.h +++ b/dev/Kernel/KernelKit/UserProcessScheduler.h @@ -16,8 +16,8 @@ #define kSchedInvalidPID (-1) #define kSchedProcessLimitPerTeam (32U) -#define kSchedMaxMemoryLimit gib_cast(128) -#define kSchedMaxStackSz mib_cast(8) +#define kSchedMaxMemoryLimit gib_cast(128) /* max physical memory limit */ +#define kSchedMaxStackSz mib_cast(8) /* maximum stack size */ #define kProcessInvalidID (-1) #define kProcessNameLen (128U) diff --git a/dev/Kernel/SystemKit/SwapDisk.h b/dev/Kernel/SystemKit/SwapDisk.h index 16413bf5..e46b57ea 100644 --- a/dev/Kernel/SystemKit/SwapDisk.h +++ b/dev/Kernel/SystemKit/SwapDisk.h @@ -18,7 +18,7 @@ namespace NeOS { - struct SWAP_DISK_HEADER; + struct SwapDiskHdr; /// @brief This class is a disk swap delegate for any data. available as a syscall too. class SwapDisk final @@ -29,11 +29,11 @@ namespace NeOS NE_COPY_DEFAULT(SwapDisk); - BOOL Write(const Char* fork_name, const SizeT fork_name_len, SWAP_DISK_HEADER* data, const SizeT data_len); - SWAP_DISK_HEADER* Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len); + BOOL Write(const Char* fork_name, const SizeT fork_name_len, SwapDiskHdr* data, const SizeT data_len); + SwapDiskHdr* Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len); }; - typedef struct SWAP_DISK_HEADER + typedef struct SwapDiskHdr { UInt32 fMagic; SizeT fHeaderSz; @@ -42,7 +42,7 @@ namespace NeOS UInt64 fVirtualAddress; SizeT fBlobSz; Char fBlob[]; - } PACKED SWAP_DISK_HEADER; + } PACKED SwapDiskHdr; - typedef SWAP_DISK_HEADER* SWAP_DISK_HEADER_REF; + typedef SwapDiskHdr* SwapDiskHdrRef; } // namespace NeOS diff --git a/dev/Kernel/src/HardwareThreadScheduler.cc b/dev/Kernel/src/HardwareThreadScheduler.cc index 0ca09ddf..70502d40 100644 --- a/dev/Kernel/src/HardwareThreadScheduler.cc +++ b/dev/Kernel/src/HardwareThreadScheduler.cc @@ -117,13 +117,13 @@ namespace NeOS if (this->IsBusy()) return NO; - this->fStack = frame; - this->fSourcePID = pid; + this->fStack = frame; + this->fPID = pid; this->fStack->BP = reinterpret_cast(image_ptr); this->fStack->SP = reinterpret_cast(stack_ptr); - Bool ret = mp_register_process(fStack, this->fSourcePID); + Bool ret = mp_register_process(fStack, this->fPID); if (ret) this->Busy(YES); diff --git a/dev/Kernel/src/IPEFDylibObject.cc b/dev/Kernel/src/IPEFDylibObject.cc index 6dc20084..4824cca1 100644 --- a/dev/Kernel/src/IPEFDylibObject.cc +++ b/dev/Kernel/src/IPEFDylibObject.cc @@ -18,8 +18,10 @@ Revision History: - 01/02/24: Reworked dll ABI, expect a rtl_init_dylib and - rtl_fini_dylib (amlel) 15/02/24: Breaking changes, changed the name of the + 01/02/24: Reworked dll ABI, expect a rtl_init_dylib and + rtl_fini_dylib (amlel) + + 15/02/24: Breaking changes, changed the name of the routines. (amlel) 07/28/24: Replace rt_library_free with rtl_fini_dylib diff --git a/dev/Kernel/src/KernelMain.cc b/dev/Kernel/src/KernelMain.cc index 88fd51df..53ebbcc0 100644 --- a/dev/Kernel/src/KernelMain.cc +++ b/dev/Kernel/src/KernelMain.cc @@ -24,6 +24,14 @@ #include #include +/* ------------------------------------------- + + Revision History: + + 04/03/25: Add /user/ directory. + + ------------------------------------------- */ + #ifdef __NE_AUTO_FORMAT__ namespace NeOS::Detail { @@ -42,10 +50,10 @@ namespace NeOS::Detail if (mNeFS) { - const SizeT kFolderCount = 13; + const SizeT kFolderCount = 14; const Char* kFolderStr[kFolderCount] = { "/", "/boot/", "/sys/", "/media/", "/etc/", - "/usr/", "/lib/", "/mnt/", "/sbin/", "/n/", "/dev/", "/run/", "/root/"}; + "/usr/", "/lib/", "/mnt/", "/sbin/", "/n/", "/dev/", "/run/", "/root/", "/user/"}; for (SizeT dir_index = 0UL; dir_index < kFolderCount; ++dir_index) { diff --git a/dev/Kernel/src/System/SwapDisk.cc b/dev/Kernel/src/System/SwapDisk.cc index 249b7172..1d2f1da4 100644 --- a/dev/Kernel/src/System/SwapDisk.cc +++ b/dev/Kernel/src/System/SwapDisk.cc @@ -9,7 +9,7 @@ namespace NeOS { - BOOL SwapDisk::Write(const Char* fork_name, const SizeT fork_name_len, SWAP_DISK_HEADER_REF data, const SizeT data_len) + BOOL SwapDisk::Write(const Char* fork_name, const SizeT fork_name_len, SwapDiskHdrRef data, const SizeT data_len) { if (!fork_name || !fork_name_len) return NO; @@ -22,7 +22,7 @@ namespace NeOS FileStream file(kSwapPageFile, "wb"); - auto ret = file.Write(fork_name, data, sizeof(SWAP_DISK_HEADER) + data_len); + auto ret = file.Write(fork_name, data, sizeof(SwapDiskHdr) + data_len); if (ret.Error()) return NO; @@ -30,7 +30,7 @@ namespace NeOS return YES; } - SWAP_DISK_HEADER_REF SwapDisk::Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len) + SwapDiskHdrRef SwapDisk::Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len) { if (!fork_name || !fork_name_len) return nullptr; @@ -40,8 +40,8 @@ namespace NeOS FileStream file(kSwapPageFile, "rb"); - VoidPtr blob = file.Read(fork_name, sizeof(SWAP_DISK_HEADER) + data_len); + VoidPtr blob = file.Read(fork_name, sizeof(SwapDiskHdr) + data_len); - return (SWAP_DISK_HEADER_REF)blob; + return (SwapDiskHdrRef)blob; } } // namespace NeOS diff --git a/dev/Kernel/src/User.cc b/dev/Kernel/src/User.cc index 33e2afa2..3c23c59e 100644 --- a/dev/Kernel/src/User.cc +++ b/dev/Kernel/src/User.cc @@ -20,7 +20,7 @@ #define kSuperUserType (0xEF) /// @file User.cc -/// @brief User support. +/// @brief Multi-user support. namespace NeOS { -- cgit v1.2.3