From b96572fe175d4ea8bee25c19f91426ea10042d1f Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Fri, 22 Nov 2024 10:58:57 +0100 Subject: CUSA/UPS: Freeze process before killing it (if exit code is successful) Signed-off-by: Amlal EL Mahrouss --- dev/ZKAKit/KernelKit/UserProcessScheduler.h | 1 - dev/ZKAKit/src/UserProcessScheduler.cc | 23 ++++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) (limited to 'dev') diff --git a/dev/ZKAKit/KernelKit/UserProcessScheduler.h b/dev/ZKAKit/KernelKit/UserProcessScheduler.h index fd9d6455..545acf6d 100644 --- a/dev/ZKAKit/KernelKit/UserProcessScheduler.h +++ b/dev/ZKAKit/KernelKit/UserProcessScheduler.h @@ -50,7 +50,6 @@ namespace Kernel kRunning, kKilled, kFrozen, - KFinishing, kFinished, kCount, }; diff --git a/dev/ZKAKit/src/UserProcessScheduler.cc b/dev/ZKAKit/src/UserProcessScheduler.cc index 313f1532..9a4918af 100644 --- a/dev/ZKAKit/src/UserProcessScheduler.cc +++ b/dev/ZKAKit/src/UserProcessScheduler.cc @@ -229,18 +229,19 @@ namespace Kernel /***********************************************************************************/ /** - @brief Process exit method. + @brief Exit process method. + @param exit_code The process's exit code. */ /***********************************************************************************/ - void UserProcess::Exit(const Int32& exit_code) + Void UserProcess::Exit(const Int32& exit_code) { - this->Status = exit_code > 0 ? ProcessStatusKind::kKilled : ProcessStatusKind::KFinishing; + this->Status = exit_code > 0 ? ProcessStatusKind::kKilled : ProcessStatusKind::kFrozen; this->fLastExitCode = exit_code; kLastExitCode = exit_code; - auto memory_list = this->MemoryHeap; + auto memory_heap_list = this->MemoryHeap; #ifdef __ZKA_AMD64__ auto pd = hal_read_cr3(); @@ -248,23 +249,23 @@ namespace Kernel #endif // Deleting memory lists. Make sure to free all of them. - while (memory_list) + while (memory_heap_list) { - if (memory_list->MemoryEntry) + if (memory_heap_list->MemoryEntry) { - MUST_PASS(mm_delete_heap(memory_list->MemoryEntry)); + MUST_PASS(mm_delete_heap(memory_heap_list->MemoryEntry)); } #ifdef __ZKA_AMD64__ hal_write_cr3(pd); #endif - auto next = memory_list->MemoryNext; + auto next = memory_heap_list->MemoryNext; - mm_delete_heap(memory_list); - memory_list = nullptr; + mm_delete_heap(memory_heap_list); - memory_list = next; + memory_heap_list = nullptr; + memory_heap_list = next; } //! Free the memory's page directory. -- cgit v1.2.3 From 6dfd055de47c2d5a6b90389338861036f30cd1d6 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Fri, 22 Nov 2024 14:20:43 +0100 Subject: Macros.h: dbg_break_point is checked according to platform, remove useless macros. Signed-off-by: Amlal EL Mahrouss --- dev/ZKAKit/NewKit/Macros.h | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) (limited to 'dev') diff --git a/dev/ZKAKit/NewKit/Macros.h b/dev/ZKAKit/NewKit/Macros.h index 9683d743..70245ce1 100644 --- a/dev/ZKAKit/NewKit/Macros.h +++ b/dev/ZKAKit/NewKit/Macros.h @@ -120,25 +120,11 @@ #define RGB(R, G, B) (Kernel::UInt32)(R | G << 0x8 | B << 0x10) #endif // !RGB -#define BREAK_POINT() asm volatile("int $3") - -/// @brief The system page file, located on the mount directory, as mulitple system pages can be mounted. -#define kPageSys "/Disks/syspage.sys" - -/// @brief The main system driver. -#define kStartupSys "/Boot/startup.sys" - -/// @brief The main font file. -#define kUrbanistTTF "/Resources/Fonts/urbanist.ttf" - -/// @brief License file -#define kEulaTxt "/Resources/EULA.txt" - -/// @brief The main kernel file. -#define kStartupWav "/Resources/startup.wav" - -/// @brief The main system loader. -#define kUserName "ZKA AUTHORITY/KERNEL" +#ifdef __ZKA_AMD64__ +#define dbg_break_point() asm volatile("int $3") +#else +#define dbg_break_point() ((void)0) +#endif #define rtl_deduce_endianess(address, value) \ (((reinterpret_cast(address)[0]) == (value)) \ -- cgit v1.2.3 From ca073c9171b4ac886b1d8560853c210e06745963 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Fri, 22 Nov 2024 14:24:05 +0100 Subject: AHCI-DMA.cc: Fix PRD DBA assignement (this is a 64-bit machine target) Signed-off-by: Amlal EL Mahrouss --- dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'dev') diff --git a/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc b/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc index e3bf1c12..e201f0fb 100644 --- a/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc +++ b/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc @@ -31,6 +31,8 @@ #define HBA_PxCMD_FR 0x4000 #define HBA_PxCMD_CR 0x8000 +#define AHCI_LBA_MODE (1 << 6) + #define kMaxAhciPoll (100000U) #define kCmdOrCtrlCmd 1 @@ -219,13 +221,13 @@ Kernel::Void drv_std_read(Kernel::UInt64 lba, Kernel::Char* buffer, Kernel::Size for (int i = 0; i < cmd_hdr->Prdtl - 1; i++) { cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)(Kernel::UInt64)buffer; - cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32); + cmd_tbl->PrdtEntries[i].Dbau = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32); cmd_tbl->PrdtEntries[i].Dbc = size_buffer - 1; // 8K bytes (this value should always be set to 1 less than the actual value) cmd_tbl->PrdtEntries[i].InterruptBit = 1; } cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)(Kernel::UInt64)buffer; - cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32); + cmd_tbl->PrdtEntries[i].Dbau = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32); cmd_tbl->PrdtEntries[i].Dbc = size_buffer - 1; // 8K bytes (this value should always be set to 1 less than the actual value) cmd_tbl->PrdtEntries[i].InterruptBit = 1; @@ -238,7 +240,7 @@ Kernel::Void drv_std_read(Kernel::UInt64 lba, Kernel::Char* buffer, Kernel::Size cmd_fis->Lba0 = (Kernel::UInt8)(Kernel::UInt32)lba & 0xFF; cmd_fis->Lba1 = (Kernel::UInt8)((Kernel::UInt32)lba >> 8); cmd_fis->Lba2 = (Kernel::UInt8)((Kernel::UInt32)lba >> 16); - cmd_fis->Device = (1 << 6); // LBA mode + cmd_fis->Device = AHCI_LBA_MODE; // LBA mode cmd_fis->Lba3 = (Kernel::UInt8)((Kernel::UInt32)lba >> 24); cmd_fis->Lba4 = (Kernel::UInt8)(lba >> 32); @@ -300,4 +302,4 @@ Kernel::SizeT drv_get_size() return drv_get_sector_count() * kAHCISectorSize; } -#endif // ifdef __AHCI__ \ No newline at end of file +#endif // ifdef __AHCI__ -- cgit v1.2.3 From 083b0ee668f217ddc0462d5d7b62d53bc1a2756b Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Fri, 22 Nov 2024 16:44:57 +0100 Subject: DriveMgr.h: Add enum to index drives within a mountpoint. Signed-off-by: Amlal EL Mahrouss --- dev/ZKAKit/KernelKit/DriveMgr.h | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'dev') diff --git a/dev/ZKAKit/KernelKit/DriveMgr.h b/dev/ZKAKit/KernelKit/DriveMgr.h index e3955a39..a630180b 100644 --- a/dev/ZKAKit/KernelKit/DriveMgr.h +++ b/dev/ZKAKit/KernelKit/DriveMgr.h @@ -93,36 +93,48 @@ namespace Kernel { return mA; } + DriveTrait& B() { return mB; } + DriveTrait& C() { return mC; } + DriveTrait& D() { return mD; } - DriveTraitPtr GetAddressOf(Int32 index) + enum + { + kDriveIndexA = 0, + kDriveIndexB, + kDriveIndexC, + kDriveIndexD, + kDriveIndexInvalid, + }; + + DriveTraitPtr GetAddressOf(const Int32& index) { ErrLocal() = kErrorSuccess; switch (index) { - case 0: + case kDriveIndexA: return &mA; - case 1: + case kDriveIndexB: return &mB; - case 2: + case kDriveIndexC: return &mC; - case 3: + case kDriveIndexD: return &mD; default: { ErrLocal() = kErrorNoSuchDisk; - kcout << "No such disk.\n"; + kcout << "No such disk index.\n"; break; } @@ -133,15 +145,16 @@ namespace Kernel private: DriveTrait mA, mB, mC, mD; + }; /// @brief Unimplemented drive. - /// @param pckt + /// @param pckt the packet to read. /// @return Void io_drv_unimplemented(DriveTrait::DrivePacket* pckt); /// @brief Gets the drive kind (ATA, SCSI, AHCI...) - /// @param + /// @param void none. /// @return the drive kind (ATA, Flash, NVM) const Char* io_drv_kind(Void); -- cgit v1.2.3 From d2d6b4cb728e3e80c10d6e3bbd72e6f7b3dfea9b Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Sat, 23 Nov 2024 08:44:49 +0100 Subject: META: Morning bump. Signed-off-by: Amlal EL Mahrouss --- dev/Modules/FB/WS.h | 24 ++++++++++++++++-------- dev/Modules/WSGL/WSGL.h | 26 ++++++++++++++++++++++++++ dev/ZKAKit/KernelKit/ThreadLocalStorage.h | 10 +++++----- dev/ZKAKit/src/ThreadLocalStorage.cc | 2 +- 4 files changed, 48 insertions(+), 14 deletions(-) (limited to 'dev') diff --git a/dev/Modules/FB/WS.h b/dev/Modules/FB/WS.h index d8c5c991..60c7a78c 100644 --- a/dev/Modules/FB/WS.h +++ b/dev/Modules/FB/WS.h @@ -7,18 +7,21 @@ #pragma once #include -#include -#include #include /// @file WS.h -/// @brief WindowServer's endpoint implementation. (within the zka-dev subsystem) +/// @brief WindowServer's window ownership implementation. +/// It is used to draw within a window. + +#define rtl_allocate_backbuffer(width, height) new WS::WSBackBufferKind[width * height] +#define rtl_compute_fb_geometry(width, height) (width * height) namespace WS { using namespace Kernel; - struct WSWindowContainer; + class WSWindowTexture; + class WSWindowContainer; typedef UInt32* WSBackBufferKind; @@ -31,7 +34,7 @@ namespace WS ZKA_COPY_DEFAULT(WSWindowContainer); /// @note the trick is, it could be GPU processed data, that's the cool thing. - BOOL PopulateWindow(WSBackBufferKind contents_buf, SizeT contents_len) + BOOL Fill(WSBackBufferKind contents_buf, SizeT contents_len) { if (contents_len > BackBufferLength) return NO; @@ -47,11 +50,16 @@ namespace WS return YES; } + BOOL Fill(WSWindowContainer* container) + { + if (!container) + return NO; + + return this->Fill(container->BackBuffer, container->BackBufferLength); + } + public: WSBackBufferKind BackBuffer{nullptr}; SizeT BackBufferLength{0UL}; }; } // namespace WS - -#define rtl_allocate_backbuffer(width, height) new WS::WSBackBufferKind[width * height] -#define rtl_compute_fb_geometry(width, height) (width * height) diff --git a/dev/Modules/WSGL/WSGL.h b/dev/Modules/WSGL/WSGL.h index 47bf402f..59cf6f5c 100644 --- a/dev/Modules/WSGL/WSGL.h +++ b/dev/Modules/WSGL/WSGL.h @@ -7,3 +7,29 @@ #pragma once #include +#include + +namespace WS +{ + /// @brief GPU texture class. + class WSWindowTexture final + { + public: + explicit WSWindowTexture() = default; + ~WSWindowTexture() = default; + + ZKA_COPY_DEFAULT(WSWindowTexture); + + VoidPtr InputData{nullptr}; + VoidPtr ProcessUnit{nullptr}; + BOOL* IsDone{nullptr}; + + const BOOL TryIsDone() + { + if (IsDone && *IsDone) + return YES; + + return NO; + } + }; +} // namespace WS diff --git a/dev/ZKAKit/KernelKit/ThreadLocalStorage.h b/dev/ZKAKit/KernelKit/ThreadLocalStorage.h index 680a10ed..808951a2 100644 --- a/dev/ZKAKit/KernelKit/ThreadLocalStorage.h +++ b/dev/ZKAKit/KernelKit/ThreadLocalStorage.h @@ -4,8 +4,8 @@ ------------------------------------------- */ -#ifndef _KERNELKIT_TLS_H -#define _KERNELKIT_TLS_H +#ifndef KERNELKIT_TLS_H +#define KERNELKIT_TLS_H #include @@ -23,8 +23,8 @@ struct THREAD_INFORMATION_BLOCK; /// Located in GS on AMD64, other architectures have their own stuff. (64x0, 32x0, ARM64) struct PACKED THREAD_INFORMATION_BLOCK final { - Kernel::Char f_Cookie[kTLSCookieLen]{0}; //! Thread magic number. - Kernel::VoidPtr f_ThreadRecord{nullptr}; //! Thread information record. + Kernel::Char Cookie[kTLSCookieLen]{0}; //! Thread magic number. + Kernel::VoidPtr Record{nullptr}; //! Thread information record. }; ///! @brief Cookie Sanity check. @@ -51,4 +51,4 @@ EXTERN_C Kernel::Bool tls_check_syscall_impl(Kernel::VoidPtr TIB) noexcept; // last rev 7/7/24 -#endif /* ifndef _KERNELKIT_TLS_H */ +#endif /* ifndef KERNELKIT_TLS_H */ diff --git a/dev/ZKAKit/src/ThreadLocalStorage.cc b/dev/ZKAKit/src/ThreadLocalStorage.cc index fbe9a5f0..69da2f94 100644 --- a/dev/ZKAKit/src/ThreadLocalStorage.cc +++ b/dev/ZKAKit/src/ThreadLocalStorage.cc @@ -29,7 +29,7 @@ using namespace Kernel; Boolean tls_check_tib(THREAD_INFORMATION_BLOCK* tib_ptr) { if (!tib_ptr || - !tib_ptr->f_ThreadRecord) + !tib_ptr->Record) return false; IEncoderObject encoder; -- cgit v1.2.3 From 476e896ba9169b4b71c1e80d3e44dd006934b3e5 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Sat, 23 Nov 2024 13:50:09 +0100 Subject: Kernel: Fix memory leaks and document the DLL dyld. Kernel: Document Drive manager of minoskrnl. Signed-off-by: Amlal EL Mahrouss --- dev/ZKAKit/KernelKit/IDLLObject.h | 7 ++++--- dev/ZKAKit/KernelKit/IPEFDLLObject.h | 4 ++-- dev/ZKAKit/src/DriveMgr.cc | 2 +- dev/ZKAKit/src/IPEFDLLObject.cc | 11 +++++------ 4 files changed, 12 insertions(+), 12 deletions(-) (limited to 'dev') diff --git a/dev/ZKAKit/KernelKit/IDLLObject.h b/dev/ZKAKit/KernelKit/IDLLObject.h index 81b43ae8..bf336267 100644 --- a/dev/ZKAKit/KernelKit/IDLLObject.h +++ b/dev/ZKAKit/KernelKit/IDLLObject.h @@ -14,6 +14,7 @@ namespace Kernel { + /// @brief DLL class object. A handle to a shared library. class IDLLObject { public: @@ -22,12 +23,12 @@ namespace Kernel struct DLL_TRAITS final { - VoidPtr fImageObject{nullptr}; - VoidPtr fImageEntrypointOffset{nullptr}; + VoidPtr ImageObject{nullptr}; + VoidPtr ImageEntrypointOffset{nullptr}; Bool IsValid() { - return fImageObject && fImageEntrypointOffset; + return ImageObject && ImageEntrypointOffset; } }; diff --git a/dev/ZKAKit/KernelKit/IPEFDLLObject.h b/dev/ZKAKit/KernelKit/IPEFDLLObject.h index 64e5c2fd..450b3a13 100644 --- a/dev/ZKAKit/KernelKit/IPEFDLLObject.h +++ b/dev/ZKAKit/KernelKit/IPEFDLLObject.h @@ -48,7 +48,7 @@ namespace Kernel public: void Mount(DLL_TRAITS* to_mount) { - if (!to_mount || !to_mount->fImageObject) + if (!to_mount || !to_mount->ImageObject) return; fMounted = to_mount; @@ -61,7 +61,7 @@ namespace Kernel if (!fLoader) { - fLoader = new PEFLoader(fMounted->fImageObject); + fLoader = new PEFLoader(fMounted->ImageObject); } } diff --git a/dev/ZKAKit/src/DriveMgr.cc b/dev/ZKAKit/src/DriveMgr.cc index 4946e714..d2c08c19 100644 --- a/dev/ZKAKit/src/DriveMgr.cc +++ b/dev/ZKAKit/src/DriveMgr.cc @@ -14,7 +14,7 @@ /***********************************************************************************/ /// @file DriveMgr.cc -/// @brief Drive Manager API. +/// @brief Drive Manager of minoskrnl. /***********************************************************************************/ namespace Kernel diff --git a/dev/ZKAKit/src/IPEFDLLObject.cc b/dev/ZKAKit/src/IPEFDLLObject.cc index b72421d8..67150854 100644 --- a/dev/ZKAKit/src/IPEFDLLObject.cc +++ b/dev/ZKAKit/src/IPEFDLLObject.cc @@ -46,7 +46,6 @@ EXTERN_C IDLL rtl_init_dll(UserProcess* header) if (!dll_obj) { header->Crash(); - return nullptr; } @@ -54,22 +53,22 @@ EXTERN_C IDLL rtl_init_dll(UserProcess* header) if (!dll_obj->Get()) { + tls_delete_class(dll_obj); header->Crash(); - return nullptr; } - dll_obj->Get()->fImageObject = + dll_obj->Get()->ImageObject = header->Image.fBlob; - if (!dll_obj->Get()->fImageObject) + if (!dll_obj->Get()->ImageObject) { + tls_delete_class(dll_obj); header->Crash(); - return nullptr; } - dll_obj->Get()->fImageEntrypointOffset = + dll_obj->Get()->ImageEntrypointOffset = dll_obj->Load(kPefStart, rt_string_len(kPefStart, 0), kPefCode); return dll_obj; -- cgit v1.2.3