diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-26 04:07:14 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-08-26 04:16:24 +0200 |
| commit | ff94ce367f7f23e3a78f157f9420c480a4d7f9aa (patch) | |
| tree | fc87ecd1ccf3de317db4214fe6460e324a5e76e4 /dev/ZKA | |
| parent | b98a81f4f26b4da98f2ac760763af656f95f392b (diff) | |
[IMP] DLLInterface class and also reworked SCI's API.
[IMP] Handover now gives the kernel image, for the OS.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKA')
| -rw-r--r-- | dev/ZKA/CompressKit/RLE.hxx (renamed from dev/ZKA/KernelKit/RLE.hxx) | 7 | ||||
| -rw-r--r-- | dev/ZKA/FirmwareKit/Handover.hxx | 15 | ||||
| -rw-r--r-- | dev/ZKA/HALKit/AXP/Processor.hxx (renamed from dev/ZKA/HALKit/AXP/Processor.hpp) | 0 | ||||
| -rw-r--r-- | dev/ZKA/KernelKit/CodeManager.hxx | 2 | ||||
| -rw-r--r-- | dev/ZKA/KernelKit/DLLInterface.hxx | 44 | ||||
| -rw-r--r-- | dev/ZKA/KernelKit/PEFDLLInterface.hxx (renamed from dev/ZKA/KernelKit/PEFSharedObject.hxx) | 38 | ||||
| -rw-r--r-- | dev/ZKA/KernelKit/ProcessScheduler.hxx | 5 | ||||
| -rw-r--r-- | dev/ZKA/KernelKit/User.hxx | 3 | ||||
| -rw-r--r-- | dev/ZKA/NetworkKit/IPC.hxx | 2 | ||||
| -rw-r--r-- | dev/ZKA/Sources/DLLInterface.cxx | 23 | ||||
| -rw-r--r-- | dev/ZKA/Sources/DLLMain.cxx | 30 | ||||
| -rw-r--r-- | dev/ZKA/Sources/PEFDLLInterface.cxx (renamed from dev/ZKA/Sources/PEFSharedObject.cxx) | 22 | ||||
| -rw-r--r-- | dev/ZKA/Sources/ProcessScheduler.cxx | 2 | ||||
| -rw-r--r-- | dev/ZKA/Sources/ThreadLocalStorage.cxx | 2 |
14 files changed, 118 insertions, 77 deletions
diff --git a/dev/ZKA/KernelKit/RLE.hxx b/dev/ZKA/CompressKit/RLE.hxx index 31e37619..647cf00b 100644 --- a/dev/ZKA/KernelKit/RLE.hxx +++ b/dev/ZKA/CompressKit/RLE.hxx @@ -9,7 +9,10 @@ #include <NewKit/Defines.hxx> -EXTERN_C void rle_compress(void* data, long sz, void* out, long out_sz); -EXTERN_C void rle_decompress(void* data, long sz, void* out, long out_sz); +namespace Kernel +{ + EXTERN_C Void rle_compress(VoidPtr data, Size sz, VoidPtr out, Size out_sz); + EXTERN_C Void rle_decompress(VoidPtr data, Size sz, VoidPtr out, Size out_sz); +} // namespace Kernel #endif // !ifndef __KERNELKIT_RLE_HXX__ diff --git a/dev/ZKA/FirmwareKit/Handover.hxx b/dev/ZKA/FirmwareKit/Handover.hxx index 5c09f79b..ba7b23b2 100644 --- a/dev/ZKA/FirmwareKit/Handover.hxx +++ b/dev/ZKA/FirmwareKit/Handover.hxx @@ -26,8 +26,8 @@ #define kHandoverMaxCmdLine 8 -#define kHandoverBetterEFI "ZKA_EFI" -#define kHandoverBetterEFI_U L"ZKA_EFI" +#define kHandoverBetterEFI "ZKA_EFI" +#define kHandoverBetterEFI_U L"ZKA_EFI" #define kHandoverHeapSz gib_cast(2) @@ -43,8 +43,8 @@ namespace Kernel::HEL kTypeKernel = 100, kTypeKernelDriver = 101, kTypeRsrc = 102, - kTypeInvalid = 103, - kTypeCount = 4, + kTypeInvalid = 103, + kTypeCount = 4, }; /** @@ -75,6 +75,11 @@ namespace Kernel::HEL { VoidPtr f_SmBios; VoidPtr f_VendorPtr; + struct + { + VoidPtr f_ImagePtr; + SizeT f_ImageSz; + }; VoidPtr f_MPPtr; } f_HardwareTables; @@ -89,7 +94,7 @@ namespace Kernel::HEL } f_GOP; UInt64 f_FirmwareSpecific[8]; - Char f_CommandLine[255][kHandoverMaxCmdLine]; + Char f_CommandLine[255][kHandoverMaxCmdLine]; }; enum diff --git a/dev/ZKA/HALKit/AXP/Processor.hpp b/dev/ZKA/HALKit/AXP/Processor.hxx index 25a434a0..25a434a0 100644 --- a/dev/ZKA/HALKit/AXP/Processor.hpp +++ b/dev/ZKA/HALKit/AXP/Processor.hxx diff --git a/dev/ZKA/KernelKit/CodeManager.hxx b/dev/ZKA/KernelKit/CodeManager.hxx index a1fea211..b551815e 100644 --- a/dev/ZKA/KernelKit/CodeManager.hxx +++ b/dev/ZKA/KernelKit/CodeManager.hxx @@ -16,7 +16,7 @@ #include <KernelKit/PECodeManager.hxx> #include <KernelKit/PEFCodeManager.hxx> -#include <KernelKit/PEFSharedObject.hxx> +#include <KernelKit/PEFDLLInterface.hxx> namespace Kernel { diff --git a/dev/ZKA/KernelKit/DLLInterface.hxx b/dev/ZKA/KernelKit/DLLInterface.hxx new file mode 100644 index 00000000..370363b7 --- /dev/null +++ b/dev/ZKA/KernelKit/DLLInterface.hxx @@ -0,0 +1,44 @@ +/* + * ======================================================== + * + * Kernel + * Copyright ZKA Technologies., all rights reserved. + * + * ======================================================== + */ + +#pragma once + +#include <NewKit/Defines.hxx> + +namespace Kernel +{ + class DLLInterface + { + public: + explicit DLLInterface() = default; + virtual ~DLLInterface() = default; + + struct DLL_TRAITS final + { + VoidPtr fImageObject{nullptr}; + VoidPtr fImageEntrypointOffset{nullptr}; + + Bool IsValid() + { + return fImageObject && fImageEntrypointOffset; + } + }; + + ZKA_COPY_DEFAULT(DLLInterface); + + virtual DLL_TRAITS** GetAddressOf() = 0; + virtual DLL_TRAITS* Get() = 0; + + virtual void Mount(DLL_TRAITS* to_mount) = 0; + virtual void Unmount() = 0; + }; + + /// @brief Pure implementation, missing method/function handler. + EXTERN_C void __zka_pure_call(void); +} // namespace Kernel diff --git a/dev/ZKA/KernelKit/PEFSharedObject.hxx b/dev/ZKA/KernelKit/PEFDLLInterface.hxx index 48b70508..3c0187f1 100644 --- a/dev/ZKA/KernelKit/PEFSharedObject.hxx +++ b/dev/ZKA/KernelKit/PEFDLLInterface.hxx @@ -10,54 +10,42 @@ #ifndef __KERNELKIT_SHARED_OBJECT_HXX__ #define __KERNELKIT_SHARED_OBJECT_HXX__ -#include <KernelKit/LoaderInterface.hxx> #include <KernelKit/PEF.hxx> #include <KernelKit/PEFCodeManager.hxx> #include <NewKit/Defines.hxx> +#include <KernelKit/DLLInterface.hxx> namespace Kernel { - /// @brief Pure implementation, missing method/function handler. - extern "C" void __mh_purecall(void); - /** * @brief Shared Library class * Load library from this class */ - class PEFSharedObjectInterface final + class PEFDLLInterface final : public DLLInterface { public: - struct PEF_SHARED_OBJECT_TRAITS final - { - VoidPtr fImageObject{nullptr}; - VoidPtr fImageEntrypointOffset{nullptr}; - - Bool IsValid() { return fImageObject && fImageEntrypointOffset; } - }; - - public: - explicit PEFSharedObjectInterface() = default; - ~PEFSharedObjectInterface() = default; + explicit PEFDLLInterface() = default; + ~PEFDLLInterface() = default; public: - ZKA_COPY_DEFAULT(PEFSharedObjectInterface); + ZKA_COPY_DEFAULT(PEFDLLInterface); private: - PEF_SHARED_OBJECT_TRAITS* fMounted{nullptr}; + DLL_TRAITS* fMounted{nullptr}; public: - PEF_SHARED_OBJECT_TRAITS** GetAddressOf() + DLL_TRAITS** GetAddressOf() { return &fMounted; } - PEF_SHARED_OBJECT_TRAITS* Get() + DLL_TRAITS* Get() { return fMounted; } public: - void Mount(PEF_SHARED_OBJECT_TRAITS* to_mount) + void Mount(DLL_TRAITS* to_mount) { if (!to_mount || !to_mount->fImageObject) return; @@ -96,7 +84,7 @@ namespace Kernel if (!ret) { if (kind == kPefCode) - return (VoidPtr)__mh_purecall; + return (VoidPtr)__zka_pure_call; return nullptr; } @@ -108,10 +96,10 @@ namespace Kernel PEFLoader* fLoader{nullptr}; }; - typedef PEFSharedObjectInterface* SharedObjectPtr; + typedef PEFDLLInterface* DLLInterfacePtr; - EXTERN_C SharedObjectPtr rtl_init_shared_object(PROCESS_HEADER_BLOCK* header); - EXTERN_C Void rtl_fini_shared_object(PROCESS_HEADER_BLOCK* header, SharedObjectPtr lib, Bool* successful); + EXTERN_C DLLInterfacePtr rtl_init_shared_object(PROCESS_HEADER_BLOCK* header); + EXTERN_C Void rtl_fini_shared_object(PROCESS_HEADER_BLOCK* header, DLLInterfacePtr lib, Bool* successful); } // namespace Kernel #endif /* ifndef __KERNELKIT_SHARED_OBJECT_HXX__ */ diff --git a/dev/ZKA/KernelKit/ProcessScheduler.hxx b/dev/ZKA/KernelKit/ProcessScheduler.hxx index 5df9d369..1f70158b 100644 --- a/dev/ZKA/KernelKit/ProcessScheduler.hxx +++ b/dev/ZKA/KernelKit/ProcessScheduler.hxx @@ -29,7 +29,7 @@ namespace Kernel //! @brief Forward declarations. struct PROCESS_HEADER_BLOCK; - class PEFSharedObjectInterface; + class PEFDLLInterface; class ProcessTeam; class ProcessScheduler; class ProcessHelper; @@ -157,8 +157,7 @@ namespace Kernel HeapPtrKind HeapPtr{nullptr}; // shared library handle, reserved for kSharedObjectKind types of executables only. - PEFSharedObjectInterface* DLLPtr{nullptr}; - + PEFDLLInterface* DLLPtr{nullptr}; PROCESS_HEADER_BLOCK* Parent{nullptr}; // Memory usage. diff --git a/dev/ZKA/KernelKit/User.hxx b/dev/ZKA/KernelKit/User.hxx index a7f8fc02..d8f81fd7 100644 --- a/dev/ZKA/KernelKit/User.hxx +++ b/dev/ZKA/KernelKit/User.hxx @@ -27,7 +27,6 @@ namespace Kernel { - class UserManager; class User; enum class RingKind @@ -74,8 +73,6 @@ namespace Kernel RingKind fRing{RingKind::kRingStdUser}; Char fUserName[kMaxUserNameLen] = { 0 }; Char fUserToken[kMaxUserTokenLen] = { 0 }; - - friend UserManager; }; } // namespace Kernel diff --git a/dev/ZKA/NetworkKit/IPC.hxx b/dev/ZKA/NetworkKit/IPC.hxx index 2a5ae452..eb62f433 100644 --- a/dev/ZKA/NetworkKit/IPC.hxx +++ b/dev/ZKA/NetworkKit/IPC.hxx @@ -13,6 +13,8 @@ #include <NewKit/Defines.hxx> #include <NewKit/String.hxx> +#include <CompressKit/RLE.hxx> + /// @file IPC.hxx /// @brief IPC protocol. diff --git a/dev/ZKA/Sources/DLLInterface.cxx b/dev/ZKA/Sources/DLLInterface.cxx new file mode 100644 index 00000000..ed1793eb --- /dev/null +++ b/dev/ZKA/Sources/DLLInterface.cxx @@ -0,0 +1,23 @@ +/* + * ======================================================== + * + * newoskrnl + * Copyright ZKA Technologies., all rights reserved. + * + * ======================================================== + */ + +#include <KernelKit/DLLInterface.hxx> +#include <KernelKit/DebugOutput.hxx> + +using namespace Kernel; + +/***********************************************************************************/ +/// @brief Unimplemented function (crashes by default) +/// @param +/***********************************************************************************/ + +EXTERN_C void __zka_pure_call(void) +{ + kcout << "newoskrnl: unimplemented symbol!\r"; +} diff --git a/dev/ZKA/Sources/DLLMain.cxx b/dev/ZKA/Sources/DLLMain.cxx index c8db0c29..997fed52 100644 --- a/dev/ZKA/Sources/DLLMain.cxx +++ b/dev/ZKA/Sources/DLLMain.cxx @@ -80,7 +80,7 @@ namespace Kernel::Detail if (catalogDir) { - Kernel::kcout << "newoskrnl: already exists.\r"; + Kernel::kcout << "newoskrnl: Already exists.\r"; delete catalogDir; continue; @@ -132,9 +132,9 @@ namespace Kernel::Detail } NFS_CATALOG_STRUCT* catalogDisk = - this->fNewFS->GetParser()->GetCatalog("\\Mount\\NUL:"); + this->fNewFS->GetParser()->GetCatalog("\\System\\newoskrnl.dll"); - const Kernel::Char* cSrcName = "DISK-INF"; + const Kernel::Char* cSrcName = "KERNEL_EXEC"; if (catalogDisk) { @@ -143,17 +143,7 @@ namespace Kernel::Detail else { catalogDisk = - (NFS_CATALOG_STRUCT*)this->Leak()->CreateAlias("\\Mount\\NUL:"); - - Kernel::StringView diskFolder(kNewFSSectorSz); - - diskFolder += - "<!properties/><p>Kind: alias to NULL.</p>\r<p>Created by: system</p>\r<p>Edited " - "by: " - "system</p>\r<p>Volume Type: NULL.</p>\r"; - - diskFolder += "<p>Root: NUL"; - diskFolder += "</p>\r"; + (NFS_CATALOG_STRUCT*)this->Leak()->CreateAlias("\\System\\newoskrnl.dll"); NFS_FORK_STRUCT theDiskFork{0}; @@ -164,16 +154,16 @@ namespace Kernel::Detail theDiskFork.CatalogName, Kernel::rt_string_len(catalogDisk->Name)); - theDiskFork.DataSize = kNewFSForkSize; - theDiskFork.ResourceId = 0; - theDiskFork.ResourceKind = Kernel::kNewFSRsrcForkKind; + theDiskFork.DataSize = kHandoverHeader->f_HardwareTables.f_ImageSz; + theDiskFork.ResourceId = Kernel::kPefKindExec | 0xFFFF000; + theDiskFork.ResourceKind = Kernel::kNewFSDataForkKind; theDiskFork.Kind = Kernel::kNewFSDataForkKind; fNewFS->GetParser()->CreateFork(catalogDisk, theDiskFork); fNewFS->GetParser()->WriteCatalog(catalogDisk, - true, - (Kernel::VoidPtr)diskFolder.CData(), - kNewFSSectorSz, cSrcName); + false, + kHandoverHeader->f_HardwareTables.f_ImagePtr, + kHandoverHeader->f_HardwareTables.f_ImageSz, cSrcName); delete catalogDisk; } diff --git a/dev/ZKA/Sources/PEFSharedObject.cxx b/dev/ZKA/Sources/PEFDLLInterface.cxx index 22890e22..0ca6b85e 100644 --- a/dev/ZKA/Sources/PEFSharedObject.cxx +++ b/dev/ZKA/Sources/PEFDLLInterface.cxx @@ -1,7 +1,7 @@ /* * ======================================================== * - * Kernel + * newoskrnl * Copyright ZKA Technologies., all rights reserved. * * ======================================================== @@ -9,7 +9,7 @@ #include <KernelKit/DebugOutput.hxx> #include <KernelKit/PEF.hxx> -#include <KernelKit/PEFSharedObject.hxx> +#include <KernelKit/PEFDLLInterface.hxx> #include <KernelKit/ProcessScheduler.hxx> #include <KernelKit/ThreadLocalStorage.hxx> #include <NewKit/Defines.hxx> @@ -37,9 +37,9 @@ using namespace Kernel; /** @brief Library initializer. */ /***********************************************************************************/ -EXTERN_C SharedObjectPtr rtl_init_shared_object(PROCESS_HEADER_BLOCK* header) +EXTERN_C DLLInterfacePtr rtl_init_shared_object(PROCESS_HEADER_BLOCK* header) { - SharedObjectPtr sharedObj = tls_new_class<PEFSharedObjectInterface>(); + DLLInterfacePtr sharedObj = tls_new_class<PEFDLLInterface>(); if (!sharedObj) { @@ -48,7 +48,7 @@ EXTERN_C SharedObjectPtr rtl_init_shared_object(PROCESS_HEADER_BLOCK* header) return nullptr; } - sharedObj->Mount(tls_new_class<PEFSharedObjectInterface::PEF_SHARED_OBJECT_TRAITS>()); + sharedObj->Mount(tls_new_class<PEFDLLInterface::DLL_TRAITS>()); if (!sharedObj->Get()) { @@ -80,7 +80,7 @@ EXTERN_C SharedObjectPtr rtl_init_shared_object(PROCESS_HEADER_BLOCK* header) /** @param successful Reports if successful or not. */ /***********************************************************************************/ -EXTERN_C Void rtl_fini_shared_object(PROCESS_HEADER_BLOCK* header, SharedObjectPtr lib, Bool* successful) +EXTERN_C Void rtl_fini_shared_object(PROCESS_HEADER_BLOCK* header, DLLInterfacePtr lib, Bool* successful) { MUST_PASS(successful); @@ -98,13 +98,3 @@ EXTERN_C Void rtl_fini_shared_object(PROCESS_HEADER_BLOCK* header, SharedObjectP *successful = true; } - -/***********************************************************************************/ -/// @brief Unimplemented function (crashes by default) -/// @param -/***********************************************************************************/ - -EXTERN_C void __mh_purecall(void) -{ - kcout << "newoskrnl: unimplemented symbol!\r"; -} diff --git a/dev/ZKA/Sources/ProcessScheduler.cxx b/dev/ZKA/Sources/ProcessScheduler.cxx index d33c7e85..965c5eb1 100644 --- a/dev/ZKA/Sources/ProcessScheduler.cxx +++ b/dev/ZKA/Sources/ProcessScheduler.cxx @@ -10,7 +10,7 @@ /***********************************************************************************/ #include <KernelKit/ProcessScheduler.hxx> -#include <KernelKit/PEFSharedObject.hxx> +#include <KernelKit/PEFDLLInterface.hxx> #include <KernelKit/MP.hxx> #include <KernelKit/Heap.hxx> #include <NewKit/String.hxx> diff --git a/dev/ZKA/Sources/ThreadLocalStorage.cxx b/dev/ZKA/Sources/ThreadLocalStorage.cxx index a29f153e..ed12c890 100644 --- a/dev/ZKA/Sources/ThreadLocalStorage.cxx +++ b/dev/ZKA/Sources/ThreadLocalStorage.cxx @@ -1,7 +1,7 @@ /* * ======================================================== * - * Kernel + * newoskrnl * Copyright ZKA Technologies., all rights reserved. * * ======================================================== |
