summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-11-21 10:19:17 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-11-21 10:19:17 +0100
commitdc008570233d0dbfac32eb87367b7e4a08302e32 (patch)
tree37e3282f17e41297f35d0de9b8248120e3a4e855
parent6ed8a39c1bd3083297b41e981a2bf4bdbe2abd1f (diff)
META: 10:00 AM bump.
-rw-r--r--dev/Modules/FB/WS.h58
-rw-r--r--dev/Modules/WSGL/WSGL.h (renamed from dev/Modules/GLCG/GLCG.h)0
-rw-r--r--dev/ZBAKit/BootKit/Thread.h4
-rw-r--r--dev/ZBAKit/Modules/NetBoot/Module.cc2
-rw-r--r--dev/ZBAKit/Modules/SysChk/Module.cc2
-rw-r--r--dev/ZBAKit/src/BootThread.cc6
-rw-r--r--dev/ZBAKit/src/HEL/AMD64/BootMain.cc4
-rw-r--r--dev/ZKAKit/FirmwareKit/Handover.h14
-rw-r--r--dev/ZKAKit/HALKit/AMD64/HalKernelMain.cc4
-rw-r--r--dev/ZKAKit/HALKit/ARM64/HalKernelMain.cc4
-rw-r--r--dev/ZKAKit/NetworkKit/IPC.h60
-rw-r--r--dev/ZKAKit/NewKit/Macros.h2
-rw-r--r--dev/ZKAKit/amd64-efi.make2
-rw-r--r--dev/ZKAKit/src/Network/IPC.cc33
-rw-r--r--dev/ZKAKit/src/WS/WS.cc7
-rw-r--r--dev/ZKAKit/src/WS/WSGL.cc7
16 files changed, 145 insertions, 64 deletions
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 <ArchKit/ArchKit.h>
+#include <Modules/FB/FB.h>
+#include <Modules/FB/Text.h>
+#include <NewKit/Utils.h>
+
+/// @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/WSGL/WSGL.h
index 47bf402f..47bf402f 100644
--- a/dev/Modules/GLCG/GLCG.h
+++ b/dev/Modules/WSGL/WSGL.h
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 <NetBoot.h>
#include <BootKit/BootKit.h>
-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 <BootKit/BootKit.h>
-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 <NewKit/Defines.h>
#include <NewKit/KString.h>
@@ -16,23 +16,23 @@
#include <CompressKit/RLE.h>
/// @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<Kernel::Char*>(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<UInt8>(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 <Modules/FB/WS.h> \ 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 <Modules/WSGL/WSGL.h> \ No newline at end of file