diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-04 05:20:58 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2025-03-04 05:20:58 +0100 |
| commit | d62341f615974257eac4125ab68be519efcf0a6e (patch) | |
| tree | a68661ff4108eb294e06c16319b8f938e3b2ff3a | |
| parent | fe61c5e33bd2a739885f3f7edc3c0c0798f918c7 (diff) | |
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)
| -rw-r--r-- | compile_flags.txt | 2 | ||||
| -rw-r--r-- | dev/Kernel/ArchKit/ArchKit.h | 10 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/Storage/AHCI.cc | 14 | ||||
| -rw-r--r-- | dev/Kernel/HALKit/AMD64/Storage/DMA.cc | 12 | ||||
| -rw-r--r-- | dev/Kernel/KernelKit/HardwareThreadScheduler.h | 2 | ||||
| -rw-r--r-- | dev/Kernel/KernelKit/User.h | 12 | ||||
| -rw-r--r-- | dev/Kernel/KernelKit/UserProcessScheduler.h | 4 | ||||
| -rw-r--r-- | dev/Kernel/SystemKit/SwapDisk.h | 12 | ||||
| -rw-r--r-- | dev/Kernel/src/HardwareThreadScheduler.cc | 6 | ||||
| -rw-r--r-- | dev/Kernel/src/IPEFDylibObject.cc | 6 | ||||
| -rw-r--r-- | dev/Kernel/src/KernelMain.cc | 12 | ||||
| -rw-r--r-- | dev/Kernel/src/System/SwapDisk.cc | 10 | ||||
| -rw-r--r-- | dev/Kernel/src/User.cc | 2 | ||||
| -rw-r--r-- | dev/LibSCI/GPU.h | 28 | ||||
| -rw-r--r-- | dev/LibSCI/SCI.h | 2 | ||||
| -rw-r--r-- | public/tools/make_app/src/CommandLine.cc | 16 |
16 files changed, 87 insertions, 63 deletions
diff --git a/compile_flags.txt b/compile_flags.txt index 25c4f779..b93c0ea8 100644 --- a/compile_flags.txt +++ b/compile_flags.txt @@ -7,7 +7,7 @@ -Ipublic/tools/make_fs -Ipublic/tools/open -Idev/Boot/BootKit --std=c++23 +-std=c++20 -D__NE_AMD64__ -D__NEOSKRNL__ -D__FSKIT_INCLUDES_NEFS__ 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<HAL_SYSCALL_RECORD, +inline NeOS::Array<HalSyscallEntry, kKernelMaxSystemCalls> kSyscalls; -inline NeOS::Array<HAL_SYSCALL_RECORD, +inline NeOS::Array<HalSyscallEntry, kKernelMaxSystemCalls> 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 <CompilerKit/CompilerKit.h> #include <KernelKit/LPC.h> #include <NewKit/KString.h> @@ -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<UIntPtr>(image_ptr); this->fStack->SP = reinterpret_cast<UIntPtr>(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 <CFKit/Property.h> #include <KernelKit/Timer.h> +/* ------------------------------------------- + + 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 { diff --git a/dev/LibSCI/GPU.h b/dev/LibSCI/GPU.h index bbcd1300..a29eae00 100644 --- a/dev/LibSCI/GPU.h +++ b/dev/LibSCI/GPU.h @@ -13,10 +13,11 @@ Purpose: GPU/FB System Calls. #include <LibSCI/SCI.h> /// ------------------------------------------------------------------------------------------ // -/// @brief GPU API. +/// @brief Graphics Processor API. /// ------------------------------------------------------------------------------------------ // -struct GPUCmd; +struct GPUCmdEntry; +struct GPUCmdEntryTraits; typedef VoidPtr GPUObject; @@ -24,41 +25,46 @@ typedef VoidPtr GPUObject; /// @brief Command structure type. /// ------------------------------------------------------------------------------------------ // -struct GPUCmd +struct GPUCmdEntry { VoidPtr Data{nullptr}; SizeT DataSz{0}; - SizeT BufferLayer{0}; + SizeT Layer{0}; BOOL IsGPGPUData{NO}; +}; + +struct GPUCmdEntryTraits final +{ + GPUCmdEntry* Cmd{nullptr}; BOOL isGPGPUData() { - return this->isValid() && this->IsGPGPUData; + return this->isValid() && this->Cmd->IsGPGPUData; } BOOL isBackBuffer() { - return this->BufferLayer > 0; + return this->Cmd->Layer > 0; } BOOL isValid() { - return this->Data && (this->DataSz > 0) && (MmGetHeapFlags(this->Data) != -1); + return this->Cmd->Data && (this->Cmd->DataSz > 0) && (MmGetHeapFlags(this->Cmd->Data) != ~0); } }; IMPORT_C BOOL GPUListDevices(const Char** list, SizeT cnt); -IMPORT_C GPUObject GPUGetFromDeviceName(_Input const Char* device_name); +IMPORT_C GPUObject GPUFindByDeviceName(_Input const Char* device_name); -IMPORT_C GPUObject GPUQueryInfo(_Input const GPUObject* device_name, VoidPtr* out, SizeT out_sz); +IMPORT_C GPUObject GPUQueryInfo(_Input const GPUObject* gpu_handle, VoidPtr* out, SizeT out_sz); IMPORT_C SInt32 GPUDisposeDevice(GPUObject gpu_handle, Bool cancel_all, Bool flush_all); -IMPORT_C SInt32 GPUSendCmdBufferListWithCnt(GPUCmd** cmd_list, SizeT cmd_list_cnt); +IMPORT_C SInt32 GPUSendCmdBufferListWithCnt(GPUObject gpu_handle, GPUCmdEntry** cmd_list, SizeT cmd_list_cnt); // ------------------------------------------------------------------------------------------ // -// @brief FB API. +// @brief Framebuffer API. // ------------------------------------------------------------------------------------------ // IMPORT_C SInt32 FBAcquireBuffer(GPUObject* out, SInt32 width, SInt32 height); diff --git a/dev/LibSCI/SCI.h b/dev/LibSCI/SCI.h index a7d449d4..97af9ffc 100644 --- a/dev/LibSCI/SCI.h +++ b/dev/LibSCI/SCI.h @@ -347,6 +347,6 @@ IMPORT_C SInt32 MsgShow(VoidPtr handle); IMPORT_C SInt32 MsgSend(VoidPtr handle, const Char* fmt, ...);
IMPORT_C SInt32 MsgAlloc(VoidPtr handle);
-IMPORT_C VoidPtr kAlertMsg, kInfoMsg, kErrorMsg;
+IMPORT_C VoidPtr kWarnMsg, kInfoMsg, kErrorMsg;
#endif // ifndef SCI_SCI_H
diff --git a/public/tools/make_app/src/CommandLine.cc b/public/tools/make_app/src/CommandLine.cc index 1858303b..bf435962 100644 --- a/public/tools/make_app/src/CommandLine.cc +++ b/public/tools/make_app/src/CommandLine.cc @@ -21,17 +21,17 @@ int main(int argc, char* argv[]) { if (MmStrCmp(argv[i], "-h") == 0) { - MsgAlloc(kAlertMsg); + MsgAlloc(kWarnMsg); - MsgSend(kAlertMsg, "%s", "make_app: Framework/Application Creation Tool.\n"); - MsgSend(kAlertMsg, "%s", "make_app: © Amlal EL Mahrouss, All rights reserved.\n"); + MsgSend(kWarnMsg, "%s", "make_app: Framework/Application Creation Tool.\n"); + MsgSend(kWarnMsg, "%s", "make_app: © Amlal EL Mahrouss, All rights reserved.\n"); - MsgSend(kAlertMsg, "%s", "make_app: -a: Application format.\n"); - MsgSend(kAlertMsg, "%s", "make_app: -s: Steps (Setup pages) format.\n"); - MsgSend(kAlertMsg, "%s", "make_app: -f: Framework format.\n"); + MsgSend(kWarnMsg, "%s", "make_app: -a: Application format.\n"); + MsgSend(kWarnMsg, "%s", "make_app: -s: Steps (Setup pages) format.\n"); + MsgSend(kWarnMsg, "%s", "make_app: -f: Framework format.\n"); - MsgShow(kAlertMsg); - MsgFree(kAlertMsg); + MsgShow(kWarnMsg); + MsgFree(kWarnMsg); return EXIT_SUCCESS; } |
