From dc008570233d0dbfac32eb87367b7e4a08302e32 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Thu, 21 Nov 2024 10:19:17 +0100 Subject: META: 10:00 AM bump. --- dev/Modules/FB/WS.h | 58 ++++++++++++++++++++++++++++++ dev/Modules/GLCG/GLCG.h | 9 ----- dev/Modules/WSGL/WSGL.h | 9 +++++ dev/ZBAKit/BootKit/Thread.h | 4 +-- dev/ZBAKit/Modules/NetBoot/Module.cc | 2 +- dev/ZBAKit/Modules/SysChk/Module.cc | 2 +- dev/ZBAKit/src/BootThread.cc | 6 ++-- dev/ZBAKit/src/HEL/AMD64/BootMain.cc | 4 +-- dev/ZKAKit/FirmwareKit/Handover.h | 14 +++----- dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc | 4 +-- dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc | 4 +-- dev/ZKAKit/NetworkKit/IPC.h | 60 ++++++++++++++++++++------------ dev/ZKAKit/NewKit/Macros.h | 2 +- dev/ZKAKit/amd64-efi.make | 2 +- dev/ZKAKit/src/Network/IPC.cc | 33 ++++++++---------- dev/ZKAKit/src/WS/WS.cc | 7 ++++ dev/ZKAKit/src/WS/WSGL.cc | 7 ++++ 17 files changed, 154 insertions(+), 73 deletions(-) create mode 100644 dev/Modules/FB/WS.h delete mode 100644 dev/Modules/GLCG/GLCG.h create mode 100644 dev/Modules/WSGL/WSGL.h create mode 100644 dev/ZKAKit/src/WS/WS.cc create mode 100644 dev/ZKAKit/src/WS/WSGL.cc (limited to 'dev') diff --git a/dev/Modules/FB/WS.h b/dev/Modules/FB/WS.h new file mode 100644 index 00000000..72259eb4 --- /dev/null +++ b/dev/Modules/FB/WS.h @@ -0,0 +1,58 @@ +/* ------------------------------------------- + + Copyright (C) 2024, EL Mahrouss Logic, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include +#include +#include +#include + +/// @file WS.h +/// @brief WindowServer's endpoint implementation. (within the zka-dev subsystem) + +namespace WS +{ + using namespace Kernel; + + struct WSWindowContainer; + + typedef UInt32* WSBackBufferKind; + + class WSWindowContainer final + { + public: + WSWindowContainer() = default; + ~WSWindowContainer() = default; + + 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) + { + if (contents_len > BackBufferLength) + return NO; + + if (!contents_buf) + return NO; + + if (!BackBuffer || + !BackBufferLength) + return NO; + + rt_copy_memory(contents_buf, BackBuffer, contents_len); + return YES; + } + + public: + WSBackBufferKind BackBuffer{nullptr}; + SizeT BackBufferLength{0UL}; + + }; +} + +#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/GLCG/GLCG.h b/dev/Modules/GLCG/GLCG.h deleted file mode 100644 index 47bf402f..00000000 --- a/dev/Modules/GLCG/GLCG.h +++ /dev/null @@ -1,9 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, EL Mahrouss Logic, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include diff --git a/dev/Modules/WSGL/WSGL.h b/dev/Modules/WSGL/WSGL.h new file mode 100644 index 00000000..47bf402f --- /dev/null +++ b/dev/Modules/WSGL/WSGL.h @@ -0,0 +1,9 @@ +/* ------------------------------------------- + + Copyright (C) 2024, EL Mahrouss Logic, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include diff --git a/dev/ZBAKit/BootKit/Thread.h b/dev/ZBAKit/BootKit/Thread.h index e7c6763f..4517e600 100644 --- a/dev/ZBAKit/BootKit/Thread.h +++ b/dev/ZBAKit/BootKit/Thread.h @@ -29,7 +29,7 @@ namespace Boot BThread& operator=(const BThread&) = default; BThread(const BThread&) = default; - void Start(HEL::HANDOVER_INFO_HEADER* handover, BOOL is_own_stack); + void Start(HEL::BootInfoHeader* handover, BOOL is_own_stack); void SetName(const char* name); const char* GetName(); bool IsValid(); @@ -39,6 +39,6 @@ namespace Boot VoidPtr fStartAddress{nullptr}; VoidPtr fBlob{nullptr}; UInt8* fStack{nullptr}; - HEL::HANDOVER_INFO_HEADER* fHandover{nullptr}; + HEL::BootInfoHeader* fHandover{nullptr}; }; } // namespace Boot diff --git a/dev/ZBAKit/Modules/NetBoot/Module.cc b/dev/ZBAKit/Modules/NetBoot/Module.cc index 0d6f8c2d..90c893a7 100644 --- a/dev/ZBAKit/Modules/NetBoot/Module.cc +++ b/dev/ZBAKit/Modules/NetBoot/Module.cc @@ -10,7 +10,7 @@ #include #include -EXTERN_C Int32 main(Kernel::HEL::HANDOVER_INFO_HEADER* Handover) +EXTERN_C Int32 main(Kernel::HEL::BootInfoHeader* Handover) { return kEfiOk; } diff --git a/dev/ZBAKit/Modules/SysChk/Module.cc b/dev/ZBAKit/Modules/SysChk/Module.cc index 413d936e..d5607cbb 100644 --- a/dev/ZBAKit/Modules/SysChk/Module.cc +++ b/dev/ZBAKit/Modules/SysChk/Module.cc @@ -9,7 +9,7 @@ #include -EXTERN_C Int32 ModuleMain(Kernel::HEL::HANDOVER_INFO_HEADER* Handover) +EXTERN_C Int32 ModuleMain(Kernel::HEL::BootInfoHeader* Handover) { EfiSystemTable* system_table = (EfiSystemTable*)Handover->f_FirmwareCustomTables[1]; diff --git a/dev/ZBAKit/src/BootThread.cc b/dev/ZBAKit/src/BootThread.cc index 6ce14877..3f74c376 100644 --- a/dev/ZBAKit/src/BootThread.cc +++ b/dev/ZBAKit/src/BootThread.cc @@ -22,7 +22,7 @@ EXTERN EfiBootServices* BS; namespace Boot { - EXTERN_C Void rt_jump_to_address(VoidPtr code, HEL::HANDOVER_INFO_HEADER* handover, UInt8* stack); + EXTERN_C Void rt_jump_to_address(VoidPtr code, HEL::BootInfoHeader* handover, UInt8* stack); BThread::BThread(VoidPtr blob) : fBlob(blob), fStartAddress(nullptr) @@ -167,9 +167,9 @@ namespace Boot } /// @note handover header has to be valid! - Void BThread::Start(HEL::HANDOVER_INFO_HEADER* handover, Bool own_stack) + Void BThread::Start(HEL::BootInfoHeader* handover, Bool own_stack) { - HEL::HandoverProc err_fn = [](HEL::HANDOVER_INFO_HEADER* rcx) -> void { + HEL::HandoverProc err_fn = [](HEL::BootInfoHeader* rcx) -> void { CGDrawString("ZBA: INVALID IMAGE! ABORTING...", 50, 10, RGB(0xFF, 0xFF, 0xFF)); ::EFI::Stop(); }; diff --git a/dev/ZBAKit/src/HEL/AMD64/BootMain.cc b/dev/ZBAKit/src/HEL/AMD64/BootMain.cc index 404d8e3b..9d3da690 100644 --- a/dev/ZBAKit/src/HEL/AMD64/BootMain.cc +++ b/dev/ZBAKit/src/HEL/AMD64/BootMain.cc @@ -86,8 +86,8 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, { InitEFI(SystemTable); ///! Init the EFI library. - HEL::HANDOVER_INFO_HEADER* handover_hdr = - new HEL::HANDOVER_INFO_HEADER(); + HEL::BootInfoHeader* handover_hdr = + new HEL::BootInfoHeader(); UInt32 map_key = 0; UInt32 size_struct_ptr = sizeof(EfiMemoryDescriptor); diff --git a/dev/ZKAKit/FirmwareKit/Handover.h b/dev/ZKAKit/FirmwareKit/Handover.h index fdd69412..2ce7d8a6 100644 --- a/dev/ZKAKit/FirmwareKit/Handover.h +++ b/dev/ZKAKit/FirmwareKit/Handover.h @@ -24,11 +24,7 @@ /* Initial bitmap pointer location and size. */ #define kHandoverBitMapSz (gib_cast(4)) - -/* Executable base */ -#define kHandoverExecBase (0x4000000) - -#define kHandoverStructSz sizeof(HEL::HANDOVER_INFO_HEADER) +#define kHandoverStructSz sizeof(HEL::BootInfoHeader) namespace Kernel::HEL { @@ -56,7 +52,7 @@ namespace Kernel::HEL kArchCount = 3, }; - struct HANDOVER_INFO_HEADER final + struct BootInfoHeader final { UInt64 f_Magic; UInt64 f_Version; @@ -109,8 +105,8 @@ namespace Kernel::HEL }; /// @brief Alias of bootloader main type. - typedef void (*HandoverProc)(HANDOVER_INFO_HEADER* handoverInfo); + typedef void (*HandoverProc)(BootInfoHeader* boot_info); } // namespace Kernel::HEL -/// @brief Bootloader global header. -inline Kernel::HEL::HANDOVER_INFO_HEADER* kHandoverHeader = nullptr; +/// @brief Bootloader information header global variable. +inline Kernel::HEL::BootInfoHeader* kHandoverHeader = nullptr; diff --git a/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc b/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc index 79dbf4ad..086dd32f 100644 --- a/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc +++ b/dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc @@ -31,9 +31,9 @@ STATIC Kernel::Void hal_init_cxx_ctors() /// @brief Kernel init procedure. EXTERN_C void hal_init_platform( - Kernel::HEL::HANDOVER_INFO_HEADER* HandoverHeader) + Kernel::HEL::BootInfoHeader* handover_hdr) { - kHandoverHeader = HandoverHeader; + kHandoverHeader = handover_hdr; if (kHandoverHeader->f_Magic != kHandoverMagic && kHandoverHeader->f_Version != kHandoverVersion) diff --git a/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc b/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc index 58c7c553..dae19adb 100644 --- a/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc +++ b/dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc @@ -21,14 +21,14 @@ Kernel::Void hal_real_init(Kernel::Void) noexcept; EXTERN_C Kernel::Void ke_dll_entrypoint(Kernel::Void); EXTERN_C void hal_init_platform( - Kernel::HEL::HANDOVER_INFO_HEADER* HandoverHeader) + Kernel::HEL::BootInfoHeader* handover_hdr) { /************************************************** */ /* INITIALIZE AND VALIDATE HEADER. */ /************************************************** */ - kHandoverHeader = HandoverHeader; + kHandoverHeader = handover_hdr; if (kHandoverHeader->f_Magic != kHandoverMagic && kHandoverHeader->f_Version != kHandoverVersion) diff --git a/dev/ZKAKit/NetworkKit/IPC.h b/dev/ZKAKit/NetworkKit/IPC.h index 05748e3a..991e3fcd 100644 --- a/dev/ZKAKit/NetworkKit/IPC.h +++ b/dev/ZKAKit/NetworkKit/IPC.h @@ -7,8 +7,8 @@ ------------------------------------------- */ -#ifndef _INC_IPC_ENDPOINT_H_ -#define _INC_IPC_ENDPOINT_H_ +#ifndef INC_IPC_H +#define INC_IPC_H #include #include @@ -16,23 +16,23 @@ #include /// @file IPC.h -/// @brief IPC EP protocol. +/// @brief IPC comm. protocol. /// IA separator. -#define cXPCOMRemoteSeparator ":" +#define kIPCRemoteSeparator ":" /// Interchange address, consists of PID:TEAM. -#define cXPCOMRemoteInvalid "00:00" +#define kIPCRemoteInvalid "00:00" -#define cXPCOMHeaderMagic (0x4950434) +#define kIPCHeaderMagic (0x4950434) namespace Kernel { - struct IPC_ADDRESS_STRUCT; - struct IPC_MESSAGE_STRUCT; + struct IPCAddress; + struct IPCMessage; /// @brief 128-bit IPC address. - struct PACKED IPC_ADDRESS_STRUCT final + struct PACKED IPCAddress final { UInt64 UserProcessID; UInt64 UserProcessTeam; @@ -41,30 +41,30 @@ namespace Kernel // some operators. //////////////////////////////////// - bool operator==(const IPC_ADDRESS_STRUCT& addr) noexcept + bool operator==(const IPCAddress& addr) noexcept { return addr.UserProcessID == this->UserProcessID && addr.UserProcessTeam == this->UserProcessTeam; } - bool operator==(IPC_ADDRESS_STRUCT& addr) noexcept + bool operator==(IPCAddress& addr) noexcept { return addr.UserProcessID == this->UserProcessID && addr.UserProcessTeam == this->UserProcessTeam; } }; - typedef struct IPC_ADDRESS_STRUCT IPCEPAddressKind; + typedef struct IPCAddress IPCEPAddressKind; enum { - eIPCEPLittleEndian = 0, - eIPCEPBigEndian = 1, - eIPCEPMixedEndian = 2, + kIPCLittleEndian = 0, + kIPCBigEndian = 1, + kIPCMixedEndian = 2, }; - constexpr auto cXPCOMMsgSize = 6094U; + constexpr inline auto kIPCMsgSize = 6094U; /// @brief IPC connection header, message cannot be greater than 6K. - typedef struct IPC_MESSAGE_STRUCT final + typedef struct IPCMessage final { UInt32 IpcHeaderMagic; // cRemoteHeaderMagic UInt8 IpcEndianess; // 0 : LE, 1 : BE @@ -74,18 +74,34 @@ namespace Kernel UInt32 IpcCRC32; UInt32 IpcMsg; UInt32 IpcMsgSz; - UInt8 IpcData[cXPCOMMsgSize]; - } PACKED IPC_MESSAGE_STRUCT; + UInt8 IpcData[kIPCMsgSize]; + + /// @brief Passes the message to target, could be anything, HTTP packet, JSON or whatever. + Bool Pass(IPCMessage* target) noexcept + { + if (target && target->IpcFrom == this->IpcTo) + { + if (this->IpcMsgSz > target->IpcMsgSz) + return No; + + rt_copy_memory(this->IpcData, target->IpcData, this->IpcMsgSz); + + return Yes; + } + + return No; + } + } PACKED IPCMessage; /// @brief Sanitize packet function /// @retval true packet is correct. /// @retval false packet is incorrect and process has crashed. - Bool ipc_sanitize_packet(_Input IPC_MESSAGE_STRUCT* pckt_in); + Bool ipc_sanitize_packet(_Input IPCMessage* pckt_in); /// @brief Construct packet function /// @retval true packet is correct. /// @retval false packet is incorrect and process has crashed. - Bool ipc_construct_packet(_Output IPC_MESSAGE_STRUCT** pckt_in); + Bool ipc_construct_packet(_Output _Input IPCMessage** pckt_in); } // namespace Kernel -#endif // _INC_IPC_ENDPOINT_H_ +#endif // INC_IPC_H diff --git a/dev/ZKAKit/NewKit/Macros.h b/dev/ZKAKit/NewKit/Macros.h index 2bc53491..93cf0acc 100644 --- a/dev/ZKAKit/NewKit/Macros.h +++ b/dev/ZKAKit/NewKit/Macros.h @@ -140,7 +140,7 @@ /// @brief The main system loader. #define kUserName "ZKA AUTHORITY/KERNEL" -#define DEDUCE_ENDIAN(address, value) \ +#define rtl_deduce_endianess(address, value) \ (((reinterpret_cast(address)[0]) == (value)) \ ? (Kernel::Endian::kEndianBig) \ : (Kernel::Endian::kEndianLittle)) diff --git a/dev/ZKAKit/amd64-efi.make b/dev/ZKAKit/amd64-efi.make index ea3272fa..854a6848 100644 --- a/dev/ZKAKit/amd64-efi.make +++ b/dev/ZKAKit/amd64-efi.make @@ -55,7 +55,7 @@ newos-amd64-epm: clean $(CC) $(CCFLAGS) $(DISK_DRV) $(DEBUG_MACRO) $(wildcard src/*.cc) \ $(wildcard src/FS/*.cc) $(wildcard HALKit/AMD64/Storage/*.cc) \ $(wildcard HALKit/AMD64/PCI/*.cc) $(wildcard src/Network/*.cc) $(wildcard src/Storage/*.cc) \ - $(wildcard HALKit/AMD64/*.cc) $(wildcard HALKit/AMD64/*.cpp) \ + $(wildcard HALKit/AMD64/*.cc) $(wildcard src/WS/*.cc) \ $(wildcard HALKit/AMD64/*.s) $(ASM) $(ASMFLAGS) HALKit/AMD64/HalInterruptAPI.asm $(ASM) $(ASMFLAGS) HALKit/AMD64/HalBoot.asm diff --git a/dev/ZKAKit/src/Network/IPC.cc b/dev/ZKAKit/src/Network/IPC.cc index b94ab5dc..ee95d23e 100644 --- a/dev/ZKAKit/src/Network/IPC.cc +++ b/dev/ZKAKit/src/Network/IPC.cc @@ -12,26 +12,26 @@ using namespace Kernel; /// @internal /// @brief The internal sanitize function. -Bool ipc_int_sanitize_packet(IPC_MESSAGE_STRUCT* pckt) +Bool ipc_int_sanitize_packet(IPCMessage* pckt) { - auto endian = DEDUCE_ENDIAN(pckt, ((Char*)pckt)[0]); + auto endian = rtl_deduce_endianess(pckt, ((Char*)pckt)[0]); switch (endian) { case Endian::kEndianBig: { - if (pckt->IpcEndianess == eIPCEPLittleEndian) + if (pckt->IpcEndianess == kIPCLittleEndian) goto ipc_check_failed; break; } case Endian::kEndianLittle: { - if (pckt->IpcEndianess == eIPCEPBigEndian) + if (pckt->IpcEndianess == kIPCBigEndian) goto ipc_check_failed; break; } case Endian::kEndianMixed: { - if (pckt->IpcEndianess == eIPCEPMixedEndian) + if (pckt->IpcEndianess == kIPCMixedEndian) goto ipc_check_failed; break; @@ -41,12 +41,12 @@ Bool ipc_int_sanitize_packet(IPC_MESSAGE_STRUCT* pckt) } if (pckt->IpcFrom == pckt->IpcTo || - pckt->IpcPacketSize > cXPCOMMsgSize) + pckt->IpcPacketSize > kIPCMsgSize) { goto ipc_check_failed; } - return pckt->IpcPacketSize > 1 && pckt->IpcHeaderMagic == cXPCOMHeaderMagic; + return pckt->IpcPacketSize > 1 && pckt->IpcHeaderMagic == kIPCHeaderMagic; ipc_check_failed: ErrLocal() = kErrorIPC; @@ -58,7 +58,7 @@ namespace Kernel /// @brief Sanitize packet function /// @retval true packet is correct. /// @retval false packet is incorrect and process has crashed. - Bool ipc_sanitize_packet(IPC_MESSAGE_STRUCT* pckt) + Bool ipc_sanitize_packet(IPCMessage* pckt) { if (!pckt || !ipc_int_sanitize_packet(pckt)) @@ -73,7 +73,7 @@ namespace Kernel /// @brief Construct packet function /// @retval true packet is correct. /// @retval false packet is incorrect and process has crashed. - Bool ipc_construct_packet(_Output IPC_MESSAGE_STRUCT** pckt_in) + Bool ipc_construct_packet(_Output IPCMessage** pckt_in) { // don't do anything if it's valid already. if (*pckt_in) @@ -86,18 +86,16 @@ namespace Kernel return false; } - *pckt_in = new IPC_MESSAGE_STRUCT(); - - MUST_PASS((*pckt_in)); + *pckt_in = new IPCMessage(); if (*pckt_in) { - auto endian = DEDUCE_ENDIAN((*pckt_in), ((Char*)(*pckt_in))[0]); + auto endian = rtl_deduce_endianess((*pckt_in), ((Char*)(*pckt_in))[0]); - (*pckt_in)->IpcHeaderMagic = cXPCOMHeaderMagic; + (*pckt_in)->IpcHeaderMagic = kIPCHeaderMagic; (*pckt_in)->IpcEndianess = static_cast(endian); - (*pckt_in)->IpcPacketSize = sizeof(IPC_MESSAGE_STRUCT); + (*pckt_in)->IpcPacketSize = sizeof(IPCMessage); (*pckt_in)->IpcTo.UserProcessID = 0; (*pckt_in)->IpcTo.UserProcessTeam = 0; @@ -105,10 +103,9 @@ namespace Kernel (*pckt_in)->IpcFrom.UserProcessID = Kernel::UserProcessScheduler::The().GetCurrentProcess().Leak().ProcessId; (*pckt_in)->IpcFrom.UserProcessTeam = Kernel::UserProcessScheduler::The().CurrentTeam().mTeamId; - return true; + return Yes; } - UserProcessScheduler::The().GetCurrentProcess().Leak().Crash(); - return false; + return No; } } // namespace Kernel diff --git a/dev/ZKAKit/src/WS/WS.cc b/dev/ZKAKit/src/WS/WS.cc new file mode 100644 index 00000000..e7e1b043 --- /dev/null +++ b/dev/ZKAKit/src/WS/WS.cc @@ -0,0 +1,7 @@ +/* ------------------------------------------- + + Copyright (C) 2024, EL Mahrouss Logic, all rights reserved. + +------------------------------------------- */ + +#include \ No newline at end of file diff --git a/dev/ZKAKit/src/WS/WSGL.cc b/dev/ZKAKit/src/WS/WSGL.cc new file mode 100644 index 00000000..19715d09 --- /dev/null +++ b/dev/ZKAKit/src/WS/WSGL.cc @@ -0,0 +1,7 @@ +/* ------------------------------------------- + + Copyright (C) 2024, EL Mahrouss Logic, all rights reserved. + +------------------------------------------- */ + +#include \ No newline at end of file -- cgit v1.2.3