diff options
Diffstat (limited to 'Kernel/KernelKit')
39 files changed, 500 insertions, 319 deletions
diff --git a/Kernel/KernelKit/CodeManager.hpp b/Kernel/KernelKit/CodeManager.hpp index 97a07ce9..1787c051 100644 --- a/Kernel/KernelKit/CodeManager.hpp +++ b/Kernel/KernelKit/CodeManager.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies File: CodeManager.hpp Purpose: Code Manager and Shared Objects. diff --git a/Kernel/KernelKit/DebugOutput.hpp b/Kernel/KernelKit/DebugOutput.hpp index 0d52b861..02b73fc9 100644 --- a/Kernel/KernelKit/DebugOutput.hpp +++ b/Kernel/KernelKit/DebugOutput.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -107,8 +107,8 @@ namespace Kernel { inline TerminalDevice _write_number(const Long& x, TerminalDevice& term) { - UInt64 y = (x > 0 ? x : -x) / 10; - UInt64 h = (x > 0 ? x : -x) % 10; + UInt64 y = (x > 0 ? x : -x) / 9; + UInt64 h = (x > 0 ? x : -x) % 9; if (y) _write_number(y, term); @@ -123,7 +123,7 @@ namespace Kernel if (y < 0) y = -y; - const char cNumbers[11] = "0123456789"; + const char cNumbers[17] = "0123456789"; Char buf[2]; buf[0] = cNumbers[h]; @@ -205,4 +205,4 @@ namespace Kernel #endif // ifdef kcout #define kcout TerminalDevice::The() -#define endl end_line() +#define endl kcout << Kernel::end_line() diff --git a/Kernel/KernelKit/Defines.hpp b/Kernel/KernelKit/Defines.hpp index 83991af6..32f67f10 100644 --- a/Kernel/KernelKit/Defines.hpp +++ b/Kernel/KernelKit/Defines.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ diff --git a/Kernel/KernelKit/DeviceManager.hpp b/Kernel/KernelKit/DeviceManager.hpp index 219977f4..8261834d 100644 --- a/Kernel/KernelKit/DeviceManager.hpp +++ b/Kernel/KernelKit/DeviceManager.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -19,7 +19,7 @@ /* @brief Device abstraction and I/O buffer. */ #include <NewKit/ErrorOr.hpp> -#include <NewKit/Ref.hpp> +#include <NewKit/Ref.hxx> // Last Rev // Wed, Apr 3, 2024 9:09:41 AM @@ -72,8 +72,8 @@ namespace Kernel } private: - void (*fOut)(T Data); - void (*fIn)(T Data); + void (*fOut)(T Data) = {nullptr}; + void (*fIn)(T Data) = {nullptr}; }; /// diff --git a/Kernel/KernelKit/DriveManager.hxx b/Kernel/KernelKit/DriveManager.hxx index 21d7e1b0..5dec36f7 100644 --- a/Kernel/KernelKit/DriveManager.hxx +++ b/Kernel/KernelKit/DriveManager.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ diff --git a/Kernel/KernelKit/FileManager.hpp b/Kernel/KernelKit/FileManager.hpp index 55d87fea..0d721ec0 100644 --- a/Kernel/KernelKit/FileManager.hpp +++ b/Kernel/KernelKit/FileManager.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -9,31 +9,43 @@ Revision History: 31/01/24: Update documentation (amlel) + 05/07/24: NewFS support, and fork support, updated constants and specs + as well. ------------------------------------------- */ #pragma once -#ifdef __FSKIT_NEWFS__ +#ifdef __FSKIT_USE_NEWFS__ #include <FSKit/NewFS.hxx> -#endif // __FSKIT_NEWFS__ +#endif // __FSKIT_USE_NEWFS__ #include <CompilerKit/CompilerKit.hxx> #include <HintKit/CompilerHint.hxx> -#include <NewKit/Ref.hpp> +#include <KernelKit/HError.hpp> +#include <KernelKit/DebugOutput.hpp> #include <NewKit/Stream.hpp> +#include <NewKit/ErrorOr.hpp> +#include <NewKit/Ref.hxx> -/// @brief Filesystem abstraction manager. +/// @brief Filesystem manager, abstraction over mounted filesystem. /// Works like the VFS or IFS. -#define cRestrictR "r" -#define cRestrictRB "rb" -#define cRestrictW "w" -#define cRestrictRW "rw" +#define cRestrictR "r" +#define cRestrictRB "rb" +#define cRestrictW "w" +#define cRestrictWB "rw" +#define cRestrictRWB "rwb" -/// refer to first enum. +#define cRestrictMax 5 + +#define node_cast(PTR) reinterpret_cast<Kernel::NodePtr>(PTR) + +/** + @note Refer to first enum. +*/ #define cFileOpsCount 4 -#define cFileMimeGeneric "application-type/*" +#define cFileMimeGeneric "n-application-kind/all" /** @brief invalid position. (n-pos) */ #define kNPos (SizeT)(-1); @@ -121,7 +133,7 @@ namespace Kernel virtual bool Rewind(_Input NodePtr node) = 0; }; -#ifdef __FSKIT_NEWFS__ +#ifdef __FSKIT_USE_NEWFS__ /** * @brief Based of FilesystemManagerInterface, takes care of managing NewFS * disks. @@ -145,7 +157,7 @@ namespace Kernel NodePtr Open(const Char* path, const Char* r) override; Void Write(NodePtr node, VoidPtr data, Int32 flags, SizeT sz) override; VoidPtr Read(NodePtr node, Int32 flags, SizeT sz) override; - bool Seek(NodePtr node, SizeT off); + bool Seek(NodePtr node, SizeT off) override; SizeT Tell(NodePtr node) override; bool Rewind(NodePtr node) override; @@ -172,7 +184,7 @@ namespace Kernel NewFSParser* fImpl{nullptr}; }; -#endif // ifdef __FSKIT_NEWFS__ +#endif // ifdef __FSKIT_USE_NEWFS__ /** * Usable FileStream @@ -194,6 +206,12 @@ namespace Kernel public: ErrorOr<Int64> WriteAll(const VoidPtr data) noexcept { + if (this->fFileRestrict != eRestrictReadWrite && + this->fFileRestrict != eRestrictReadWriteBinary && + this->fFileRestrict != eRestrictWrite && + this->fFileRestrict != eRestrictWriteBinary) + return ErrorOr<Int64>(kErrorInvalidData); + if (data == nullptr) return ErrorOr<Int64>(kErrorInvalidData); @@ -208,8 +226,14 @@ namespace Kernel return ErrorOr<Int64>(kErrorInvalidData); } - VoidPtr Read() noexcept + VoidPtr ReadAll() noexcept { + if (this->fFileRestrict != eRestrictReadWrite && + this->fFileRestrict != eRestrictReadWriteBinary && + this->fFileRestrict != eRestrictRead && + this->fFileRestrict != eRestrictReadBinary) + return nullptr; + auto man = FSClass::GetMounted(); if (man) @@ -223,6 +247,12 @@ namespace Kernel ErrorOr<Int64> WriteAll(const char* fName, const VoidPtr data) noexcept { + if (this->fFileRestrict != eRestrictReadWrite && + this->fFileRestrict != eRestrictReadWriteBinary && + this->fFileRestrict != eRestrictWrite && + this->fFileRestrict != eRestrictWriteBinary) + return ErrorOr<Int64>(kErrorInvalidData); + if (data == nullptr) return ErrorOr<Int64>(kErrorInvalidData); @@ -239,6 +269,12 @@ namespace Kernel VoidPtr Read(const char* fName) noexcept { + if (this->fFileRestrict != eRestrictReadWrite && + this->fFileRestrict != eRestrictReadWriteBinary && + this->fFileRestrict != eRestrictRead && + this->fFileRestrict != eRestrictReadBinary) + return nullptr; + auto man = FSClass::GetMounted(); if (man) @@ -250,8 +286,14 @@ namespace Kernel return nullptr; } - voidPtr Read(SizeT offset, SizeT sz) + VoidPtr Read(SizeT offset, SizeT sz) { + if (this->fFileRestrict != eRestrictReadWrite && + this->fFileRestrict != eRestrictReadWriteBinary && + this->fFileRestrict != eRestrictRead && + this->fFileRestrict != eRestrictReadBinary) + return nullptr; + auto man = FSClass::GetMounted(); if (man) @@ -267,6 +309,12 @@ namespace Kernel Void Write(SizeT offset, voidPtr data, SizeT sz) { + if (this->fFileRestrict != eRestrictReadWrite && + this->fFileRestrict != eRestrictReadWriteBinary && + this->fFileRestrict != eRestrictWrite && + this->fFileRestrict != eRestrictWriteBinary) + return; + auto man = FSClass::GetMounted(); if (man) @@ -276,6 +324,7 @@ namespace Kernel } } + public: /// @brief Leak node pointer. /// @return The node pointer. NodePtr Leak() @@ -283,14 +332,26 @@ namespace Kernel return fFile; } - public: - char* MIME() noexcept + /// @brief Leak MIME. + /// @return The MIME. + Char* MIME() noexcept { return const_cast<char*>(fMime); } + enum + { + eRestrictRead, + eRestrictReadBinary, + eRestrictWrite, + eRestrictWriteBinary, + eRestrictReadWrite, + eRestrictReadWriteBinary, + }; + private: - NodePtr fFile; + NodePtr fFile{nullptr}; + Int32 fFileRestrict{}; const Char* fMime{cFileMimeGeneric}; }; @@ -305,6 +366,47 @@ namespace Kernel const Encoding* restrict_type) : fFile(Class::GetMounted()->Open(path, restrict_type)) { + static const auto cLength = 255; + + struct StringMap final + { + Char fRestrict[cLength]; + Int32 fMappedTo; + }; + + const SizeT cRestrictCount = cRestrictMax; + const StringMap cRestrictList[] = { + { + .fRestrict = cRestrictR, + .fMappedTo = eRestrictRead, + }, + { + .fRestrict = cRestrictRB, + .fMappedTo = eRestrictReadBinary, + }, + { + .fRestrict = cRestrictRWB, + .fMappedTo = eRestrictReadWriteBinary, + }, + { + .fRestrict = cRestrictW, + .fMappedTo = eRestrictWrite, + }, + { + .fRestrict = cRestrictWB, + .fMappedTo = eRestrictReadWrite, + }}; + + for (SizeT index = 0; index < cRestrictCount; ++index) + { + if (rt_string_cmp(restrict_type, cRestrictList[index].fRestrict, + rt_string_len(cRestrictList[index].fRestrict)) == 0) + { + fFileRestrict = cRestrictList[index].fMappedTo; + break; + } + } + kcout << "newoskrnl: new file: " << path << ".\r"; } @@ -315,5 +417,3 @@ namespace Kernel delete fFile; } } // namespace Kernel - -#define node_cast(PTR) reinterpret_cast<Kernel::NodePtr>(PTR) diff --git a/Kernel/KernelKit/Framebuffer.hpp b/Kernel/KernelKit/Framebuffer.hpp index 6cafb767..3d0914ef 100644 --- a/Kernel/KernelKit/Framebuffer.hpp +++ b/Kernel/KernelKit/Framebuffer.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies File: Framebuffer.hpp Purpose: Framebuffer object. @@ -11,7 +11,7 @@ #define __INC_FB_HPP__ #include <NewKit/Defines.hpp> -#include <NewKit/Ref.hpp> +#include <NewKit/Ref.hxx> namespace Kernel { @@ -35,14 +35,8 @@ namespace Kernel class Framebuffer final { public: - explicit Framebuffer(Ref<FramebufferContext*>& addr) - : fFrameBufferAddr(addr) - { - } - - ~Framebuffer() - { - } + explicit Framebuffer(Ref<FramebufferContext*>& addr); + ~Framebuffer() = default; Framebuffer& operator=(const Framebuffer&) = delete; Framebuffer(const Framebuffer&) = default; diff --git a/Kernel/KernelKit/HError.hpp b/Kernel/KernelKit/HError.hpp index caee5718..df12641e 100644 --- a/Kernel/KernelKit/HError.hpp +++ b/Kernel/KernelKit/HError.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -11,9 +11,9 @@ /// @file HError.hpp /// @brief Local Process Codes. -#define ErrLocalIsOk() (Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetLocalCode() == Kernel::kErrorSuccess) -#define ErrLocalFailed() (Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetLocalCode() != Kernel::kErrorSuccess) -#define ErrLocal() Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetLocalCode() +#define ErrLocalIsOk() (Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetLocalCode() == Kernel::kErrorSuccess) +#define ErrLocalFailed() (Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetLocalCode() != Kernel::kErrorSuccess) +#define ErrLocal() Kernel::ProcessScheduler::The().Leak().TheCurrent().Leak().GetLocalCode() namespace Kernel { @@ -50,7 +50,6 @@ namespace Kernel inline constexpr HError kErrorSign = 60; inline constexpr HError kErrorUnimplemented = 0; - Void err_bug_check_raise(void) noexcept; + Void err_bug_check_raise(void) noexcept; Boolean err_bug_check(void) noexcept; } // namespace Kernel - diff --git a/Kernel/KernelKit/KernelHeap.hpp b/Kernel/KernelKit/Heap.hxx index 0d2f2188..0f673ffb 100644 --- a/Kernel/KernelKit/KernelHeap.hpp +++ b/Kernel/KernelKit/Heap.hxx @@ -1,13 +1,14 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ -#pragma once +#ifndef _INC_KERNEL_HEAP_HXX_ +#define _INC_KERNEL_HEAP_HXX_ // last-rev 30/01/24 -// file: KernelHeap.hpp +// file: KernelHeap.hxx // description: heap allocation for the kernel. #include <NewKit/Defines.hpp> @@ -15,29 +16,36 @@ namespace Kernel { /// @brief Declare pointer as free. - /// @param heapPtr the pointer. + /// @param allocatedPtr the pointer. /// @return Int32 ke_delete_ke_heap(voidPtr allocatedPtr); + /// @brief Declare a new size for allocatedPtr. + /// @param allocatedPtr the pointer. + /// @return + voidPtr ke_realloc_ke_heap(voidPtr allocatedPtr, SizeT newSz); + /// @brief Check if pointer is a valid kernel pointer. - /// @param heapPtr the pointer + /// @param allocatedPtr the pointer /// @return if it exists. - Boolean ke_is_valid_heap(VoidPtr ptr); + Boolean ke_is_valid_heap(VoidPtr allocatedPtr); /// @brief allocate chunk of memory. /// @param sz size of pointer /// @param rw read write (true to enable it) /// @param user is it accesible by user processes? /// @return the pointer - voidPtr ke_new_ke_heap(SizeT sz, const bool rw, const bool user); + voidPtr ke_new_ke_heap(const SizeT sz, const Bool rw, const Bool user); /// @brief Protect the heap with a CRC value. - /// @param heapPtr HIB pointer. + /// @param allocatedPtr pointer. /// @return if it valid: point has crc now., otherwise fail. - Boolean ke_protect_ke_heap(VoidPtr heapPtr); + Boolean ke_protect_ke_heap(VoidPtr allocatedPtr); /// @brief Makes a kernel heap page. - /// @param heapPtr + /// @param allocatedPtr the page pointer. /// @return - Int32 ke_make_ke_page(VoidPtr heapPtr); + Int32 ke_make_ke_page(VoidPtr allocatedPtr); } // namespace Kernel + +#endif // !_INC_KERNEL_HEAP_HXX_ diff --git a/Kernel/KernelKit/LoaderInterface.hpp b/Kernel/KernelKit/LoaderInterface.hpp index dce934e6..a6b54d8b 100644 --- a/Kernel/KernelKit/LoaderInterface.hpp +++ b/Kernel/KernelKit/LoaderInterface.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ diff --git a/Kernel/KernelKit/LockDelegate.hpp b/Kernel/KernelKit/LockDelegate.hpp index a4c9380a..24eab70a 100644 --- a/Kernel/KernelKit/LockDelegate.hpp +++ b/Kernel/KernelKit/LockDelegate.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ diff --git a/Kernel/KernelKit/MSDOS.hpp b/Kernel/KernelKit/MSDOS.hpp deleted file mode 100644 index 12d67488..00000000 --- a/Kernel/KernelKit/MSDOS.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/* ------------------------------------------- - - Copyright Zeta Electronics Corporation - - File: MSDOS.hpp - Purpose: MS-DOS header for Kernel. - - Revision History: - - 30/01/24: Added file (amlel) - -------------------------------------------- */ - -#ifndef __MSDOS_EXEC__ -#define __MSDOS_EXEC__ - -#include <KernelKit/PE.hxx> -#include <NewKit/Defines.hpp> - -// Last Rev -// Sat Feb 24 CET 2024 - -#define kMagMz0 'M' -#define kMagMz1 'Z' - -typedef Kernel::UInt32 DosWord; -typedef Kernel::Long DosLong; - -typedef struct _DosHeader -{ - Kernel::UInt8 eMagic[2]; - DosWord eMagLen; - DosWord ePagesCount; - DosWord eCrlc; - DosWord eCParHdr; - DosWord eMinAlloc; - DosWord eMaxAlloc; - DosWord eStackSeg; - DosWord eStackPtr; - DosWord eChksum; - DosWord eIp; - DosWord eCs; - DosWord eLfarlc; - DosWord eOvno; - DosWord eRes[4]; - DosWord eOemid; - DosWord eOeminfo; - DosWord eRes2[10]; - DosLong eLfanew; -} DosHeader, *DosHeaderPtr; - -namespace Kernel -{ - /// @brief Find the PE header inside the the blob. - inline auto rt_find_exec_header(DosHeaderPtr ptrDos) -> VoidPtr - { - if (!ptrDos) - return nullptr; - if (ptrDos->eMagic[0] != kMagMz0) - return nullptr; - if (ptrDos->eMagic[1] != kMagMz1) - return nullptr; - - return (VoidPtr)(&ptrDos->eLfanew + 1); - } -} // namespace Kernel - -#endif /* ifndef __MSDOS_EXEC__ */ diff --git a/Kernel/KernelKit/MSDOS.hxx b/Kernel/KernelKit/MSDOS.hxx new file mode 100644 index 00000000..62fc1c64 --- /dev/null +++ b/Kernel/KernelKit/MSDOS.hxx @@ -0,0 +1,52 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies + + File: MSDOS.hpp + Purpose: MS-DOS header for Kernel. + + Revision History: + + 30/01/24: Added file (amlel) + +------------------------------------------- */ + +#ifndef __MSDOS_EXEC__ +#define __MSDOS_EXEC__ + +#include <KernelKit/PE.hxx> +#include <NewKit/Defines.hpp> + +// Last Rev +// Sat Feb 24 CET 2024 + +#define kMagMz0 'M' +#define kMagMz1 'Z' + +typedef Kernel::UInt32 DosWord; +typedef Kernel::Long DosLong; + +typedef struct _DosHeader +{ + Kernel::UInt8 eMagic[2]; + DosWord eMagLen; + DosWord ePagesCount; + DosWord eCrlc; + DosWord eCParHdr; + DosWord eMinAlloc; + DosWord eMaxAlloc; + DosWord eStackSeg; + DosWord eStackPtr; + DosWord eChksum; + DosWord eIp; + DosWord eCs; + DosWord eLfarlc; + DosWord eOvno; + DosWord eRes[4]; + DosWord eOemid; + DosWord eOeminfo; + DosWord eRes2[10]; + DosLong eLfanew; +} DosHeader, *DosHeaderPtr; + +#endif /* ifndef __MSDOS_EXEC__ */ diff --git a/Kernel/KernelKit/PCI/Database.hpp b/Kernel/KernelKit/PCI/Database.hpp index a689306a..008cdb9a 100644 --- a/Kernel/KernelKit/PCI/Database.hpp +++ b/Kernel/KernelKit/PCI/Database.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ #pragma once diff --git a/Kernel/KernelKit/PCI/Device.hpp b/Kernel/KernelKit/PCI/Device.hpp index 8b5388c1..bee1f631 100644 --- a/Kernel/KernelKit/PCI/Device.hpp +++ b/Kernel/KernelKit/PCI/Device.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ #pragma once diff --git a/Kernel/KernelKit/PCI/Dma.hpp b/Kernel/KernelKit/PCI/Dma.hpp index 48db7587..dfac226f 100644 --- a/Kernel/KernelKit/PCI/Dma.hpp +++ b/Kernel/KernelKit/PCI/Dma.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -10,7 +10,7 @@ #include <KernelKit/PCI/Device.hpp> #include <NewKit/Array.hpp> #include <NewKit/OwnPtr.hpp> -#include <NewKit/Ref.hpp> +#include <NewKit/Ref.hxx> namespace Kernel { @@ -52,7 +52,7 @@ namespace Kernel T* Get(const UIntPtr off = 0); public: - operator bool(); + operator bool(); bool operator!(); public: diff --git a/Kernel/KernelKit/PCI/Dma.inl b/Kernel/KernelKit/PCI/Dma.inl index 1eca8081..10a69afc 100644 --- a/Kernel/KernelKit/PCI/Dma.inl +++ b/Kernel/KernelKit/PCI/Dma.inl @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -17,4 +17,4 @@ namespace Kernel { return reinterpret_cast<T*>((UIntPtr)fAddress + offset); } -} // namespace NewOS +} // namespace Kernel diff --git a/Kernel/KernelKit/PCI/Express.hpp b/Kernel/KernelKit/PCI/Express.hpp index 7276f183..71ba4c50 100644 --- a/Kernel/KernelKit/PCI/Express.hpp +++ b/Kernel/KernelKit/PCI/Express.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ diff --git a/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl b/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl index 08d33945..c1d1c0f5 100644 --- a/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl +++ b/Kernel/KernelKit/PCI/IO-Impl-AMD64.inl @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies File: IO-Impl-AMD64.hpp Purpose: I/O for AMD64. @@ -51,4 +51,4 @@ namespace Kernel break; } } -} // namespace NewOS +} // namespace Kernel diff --git a/Kernel/KernelKit/PCI/IO.hpp b/Kernel/KernelKit/PCI/IO.hpp index 262361ed..90e9244d 100644 --- a/Kernel/KernelKit/PCI/IO.hpp +++ b/Kernel/KernelKit/PCI/IO.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -9,7 +9,7 @@ #include <ArchKit/ArchKit.hpp> #include <NewKit/Array.hpp> #include <NewKit/Defines.hpp> -#include <NewKit/Ref.hpp> +#include <NewKit/Ref.hxx> namespace Kernel { diff --git a/Kernel/KernelKit/PCI/Iterator.hpp b/Kernel/KernelKit/PCI/Iterator.hpp index 2274df31..8c2df3b4 100644 --- a/Kernel/KernelKit/PCI/Iterator.hpp +++ b/Kernel/KernelKit/PCI/Iterator.hpp @@ -1,3 +1,9 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies + +------------------------------------------- */ + #ifndef __PCI_ITERATOR_HPP__ #define __PCI_ITERATOR_HPP__ @@ -5,7 +11,7 @@ #include <KernelKit/PCI/Device.hpp> #include <NewKit/Array.hpp> #include <NewKit/Defines.hpp> -#include <NewKit/Ref.hpp> +#include <NewKit/Ref.hxx> #define NEWOS_BUS_COUNT (256) #define NEWOS_DEVICE_COUNT (33) @@ -22,7 +28,6 @@ namespace Kernel::PCI explicit Iterator(const Types::PciDeviceKind& deviceType); Iterator& operator=(const Iterator&) = default; - Iterator(const Iterator&) = default; ~Iterator(); diff --git a/Kernel/KernelKit/PCI/PCI.hpp b/Kernel/KernelKit/PCI/PCI.hxx index a7101a33..e75215d6 100644 --- a/Kernel/KernelKit/PCI/PCI.hpp +++ b/Kernel/KernelKit/PCI/PCI.hxx @@ -1,18 +1,19 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ + #pragma once #include <NewKit/Defines.hpp> -#define PCI_CONFIG_ADDRESS (0xCF8) -#define PCI_CONFIG_DATA (0xCFC) +#define cPCIConfigAddressPort (0xCF8) +#define cPCIConfigDataPort (0xCFC) -#define PCI_DEVICE_COUNT (32) -#define PCI_FUNC_COUNT (8) -#define PCI_BUS_COUNT (255) +#define cPCIDeviceCount (32) +#define cPCIFuncCount (8) +#define cPCIBusCount (255) namespace Kernel::PCI { diff --git a/Kernel/KernelKit/PE.hxx b/Kernel/KernelKit/PE.hxx index 30b71cc9..debd6aba 100644 --- a/Kernel/KernelKit/PE.hxx +++ b/Kernel/KernelKit/PE.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies File: PE.hxx Purpose: Portable Executable for Kernel. @@ -11,13 +11,19 @@ ------------------------------------------- */ -#ifndef __PE__ -#define __PE__ +#ifndef __KERNELKIT_INC_PE_HXX__ +#define __KERNELKIT_INC_PE_HXX__ #include <NewKit/Defines.hpp> #define kPeMagic 0x00004550 +#define kMagPE32 0x010b +#define kMagPE64 0x020b + +#define kPEMachineAMD64 0x8664 +#define kPEMachineARM64 0xaa64 + typedef struct ExecHeader final { Kernel::UInt32 mMagic; // PE\0\0 or 0x00004550 @@ -28,59 +34,53 @@ typedef struct ExecHeader final Kernel::UInt32 mNumberOfSymbols; Kernel::UInt16 mSizeOfOptionalHeader; Kernel::UInt16 mCharacteristics; -} ALIGN(8) ExecHeader, *ExecHeaderPtr; - -#define kMagPE32 0x010b -#define kMagPE64 0x020b - -#define kPEMachineAMD64 0x8664 -#define kPEMachineARM64 0xaa64 +} PACKED ExecHeader, *ExecHeaderPtr; typedef struct ExecOptionalHeader final { - Kernel::UInt16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit) - Kernel::UChar mMajorLinkerVersion; - Kernel::UChar mMinorLinkerVersion; + Kernel::UInt16 mMagic; // 0x010b - PE32, 0x020b - PE32+ (64 bit) + Kernel::UChar mMajorLinkerVersion; + Kernel::UChar mMinorLinkerVersion; Kernel::UIntPtr mSizeOfCode; Kernel::UIntPtr mSizeOfInitializedData; Kernel::UIntPtr mSizeOfUninitializedData; - Kernel::UInt32 mAddressOfEntryPoint; - Kernel::UInt32 mBaseOfCode; + Kernel::UInt32 mAddressOfEntryPoint; + Kernel::UInt32 mBaseOfCode; Kernel::UIntPtr mImageBase; - Kernel::UInt32 mSectionAlignment; - Kernel::UInt32 mFileAlignment; - Kernel::UInt16 mMajorOperatingSystemVersion; - Kernel::UInt16 mMinorOperatingSystemVersion; - Kernel::UInt16 mMajorImageVersion; - Kernel::UInt16 mMinorImageVersion; - Kernel::UInt16 mMajorSubsystemVersion; - Kernel::UInt16 mMinorSubsystemVersion; - Kernel::UInt32 mWin32VersionValue; + Kernel::UInt32 mSectionAlignment; + Kernel::UInt32 mFileAlignment; + Kernel::UInt16 mMajorOperatingSystemVersion; + Kernel::UInt16 mMinorOperatingSystemVersion; + Kernel::UInt16 mMajorImageVersion; + Kernel::UInt16 mMinorImageVersion; + Kernel::UInt16 mMajorSubsystemVersion; + Kernel::UInt16 mMinorSubsystemVersion; + Kernel::UInt32 mWin32VersionValue; Kernel::UIntPtr mSizeOfImage; Kernel::UIntPtr mSizeOfHeaders; - Kernel::UInt32 mCheckSum; - Kernel::UInt16 mSubsystem; - Kernel::UInt16 mDllCharacteristics; + Kernel::UInt32 mCheckSum; + Kernel::UInt16 mSubsystem; + Kernel::UInt16 mDllCharacteristics; Kernel::UIntPtr mSizeOfStackReserve; Kernel::UIntPtr mSizeOfStackCommit; Kernel::UIntPtr mSizeOfHeapReserve; Kernel::UIntPtr mSizeOfHeapCommit; - Kernel::UInt32 mLoaderFlags; - Kernel::UInt32 mNumberOfRvaAndSizes; -} ExecOptionalHeader, *ExecOptionalHeaderPtr; + Kernel::UInt32 mLoaderFlags; + Kernel::UInt32 mNumberOfRvaAndSizes; +} PACKED ExecOptionalHeader, *ExecOptionalHeaderPtr; typedef struct ExecSectionHeader final { - CONST Kernel::UChar mName[8]; - Kernel::UInt32 mVirtualSize; - Kernel::UInt32 mVirtualAddress; - Kernel::UInt32 mSizeOfRawData; - Kernel::UInt32 mPointerToRawData; - Kernel::UInt32 mPointerToRelocations; - Kernel::UInt32 mPointerToLinenumbers; - Kernel::UInt16 mNumberOfRelocations; - Kernel::UInt16 mNumberOfLinenumbers; - Kernel::UInt32 mCharacteristics; + Kernel::UChar mName[8]; + Kernel::UInt32 mVirtualSize; + Kernel::UInt32 mVirtualAddress; + Kernel::UInt32 mSizeOfRawData; + Kernel::UInt32 mPointerToRawData; + Kernel::UInt32 mPointerToRelocations; + Kernel::UInt32 mPointerToLineNumbers; + Kernel::UInt16 mNumberOfRelocations; + Kernel::UInt16 mNumberOfLinenumbers; + Kernel::UInt32 mCharacteristics; } ExecSectionHeader, *ExecSectionHeaderPtr; enum kExecDataDirParams @@ -104,7 +104,7 @@ typedef struct ExecExportDirectory Kernel::UInt32 mAddressOfFunctions; // export table rva Kernel::UInt32 mAddressOfNames; Kernel::UInt32 mAddressOfNameOrdinal; // ordinal table rva -} ExecExportDirectory, *ExecExportDirectoryPtr; +} PACKED ExecExportDirectory, *ExecExportDirectoryPtr; typedef struct ExecImportDirectory { @@ -116,8 +116,8 @@ typedef struct ExecImportDirectory Kernel::UInt32 mForwarderChain; Kernel::UInt32 mNameRva; Kernel::UInt32 mThunkTableRva; -} ExecImportDirectory, *ExecImportDirectoryPtr; +} PACKED ExecImportDirectory, *ExecImportDirectoryPtr; -#define kPeStart "__hcore_subsys_start" +#define kPeStart "__ImageStart" -#endif /* ifndef __PE__ */ +#endif /* ifndef __KERNELKIT_INC_PE_HXX__ */ diff --git a/Kernel/KernelKit/PECodeManager.hxx b/Kernel/KernelKit/PECodeManager.hxx index b2971e6e..2de20405 100644 --- a/Kernel/KernelKit/PECodeManager.hxx +++ b/Kernel/KernelKit/PECodeManager.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies File: PECodeManager.hxx Purpose: PE32+ Code Manager and Shared Objects. diff --git a/Kernel/KernelKit/PEF.hpp b/Kernel/KernelKit/PEF.hxx index f27d8dd5..c3b1b94b 100644 --- a/Kernel/KernelKit/PEF.hpp +++ b/Kernel/KernelKit/PEF.hxx @@ -1,8 +1,8 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies - File: PEF.hpp + File: PEF.hxx Purpose: Preferred Executable Format for Kernel. Revision History: @@ -11,8 +11,8 @@ ------------------------------------------- */ -#ifndef __PEF__ -#define __PEF__ +#ifndef __KERNELKIT_INC_PEF_HXX__ +#define __KERNELKIT_INC_PEF_HXX__ #include <CompilerKit/CompilerKit.hxx> #include <KernelKit/LoaderInterface.hpp> @@ -95,6 +95,7 @@ namespace Kernel }; } // namespace Kernel +/* not mandatory, only for non fork based filesystems */ #define kPefExt ".exec" #define kPefDylibExt ".lib" #define kPefLibExt ".slib" @@ -109,4 +110,4 @@ namespace Kernel #define kPefForkKind kPefMagic #define kPefForkKindFAT kPefMagicFat -#endif /* ifndef __PEF__ */ +#endif /* ifndef __KERNELKIT_INC_PEF_HXX__ */ diff --git a/Kernel/KernelKit/PEFCodeManager.hxx b/Kernel/KernelKit/PEFCodeManager.hxx index 8bb5a7cd..5e48331a 100644 --- a/Kernel/KernelKit/PEFCodeManager.hxx +++ b/Kernel/KernelKit/PEFCodeManager.hxx @@ -1,13 +1,13 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ #ifndef _INC_CODE_MANAGER_PEF_HXX_ #define _INC_CODE_MANAGER_PEF_HXX_ -#include <KernelKit/PEF.hpp> +#include <KernelKit/PEF.hxx> #include <NewKit/ErrorOr.hpp> #include <NewKit/String.hpp> #include <KernelKit/FileManager.hpp> diff --git a/Kernel/KernelKit/PEFSharedObject.hxx b/Kernel/KernelKit/PEFSharedObject.hxx index 993e316d..f8119971 100644 --- a/Kernel/KernelKit/PEFSharedObject.hxx +++ b/Kernel/KernelKit/PEFSharedObject.hxx @@ -2,7 +2,7 @@ * ======================================================== * * Kernel - * Copyright Zeta Electronics Corporation, all rights reserved. + * Copyright ZKA Technologies, all rights reserved. * * ======================================================== */ @@ -11,7 +11,7 @@ #define __KERNELKIT_SHARED_OBJECT_HXX__ #include <KernelKit/LoaderInterface.hpp> -#include <KernelKit/PEF.hpp> +#include <KernelKit/PEF.hxx> #include <KernelKit/PEFCodeManager.hxx> #include <NewKit/Defines.hpp> diff --git a/Kernel/KernelKit/PermissionSelector.hxx b/Kernel/KernelKit/PermissionSelector.hxx deleted file mode 100644 index 7c01bcd4..00000000 --- a/Kernel/KernelKit/PermissionSelector.hxx +++ /dev/null @@ -1,57 +0,0 @@ -/* ------------------------------------------- - - Copyright Zeta Electronics Corporation - -------------------------------------------- */ - -#ifndef _INC_PERMISSION_SEL_HXX_ -#define _INC_PERMISSION_SEL_HXX_ - -#include <CompilerKit/CompilerKit.hxx> -#include <NewKit/Defines.hpp> - -// super admin mode user. -#define kMachineUser "Machine" - -// user mode users. -#define kSuperUser "Admin" -#define kGuestUser "Guest" - -// hash 'user@host:password' -> base64 encoded data -// use this data to then fetch specific data. - -namespace Kernel -{ - enum class RingKind - { - kRingUser = 3, - kRingDriver = 2, - kRingKernel = 0, - kRingUnknown = -1, - kRingCount = 4, - }; - - class PermissionSelector final - { - private: - explicit PermissionSelector(const Int32& sel); - explicit PermissionSelector(const RingKind& kind); - - ~PermissionSelector(); - - public: - NEWOS_COPY_DEFAULT(PermissionSelector) - - public: - bool operator==(const PermissionSelector& lhs); - bool operator!=(const PermissionSelector& lhs); - - public: - const RingKind& Ring() noexcept; - - private: - RingKind fRing; - }; -} // namespace Kernel - -#endif /* ifndef _INC_PERMISSION_SEL_HXX_ */ diff --git a/Kernel/KernelKit/UserHeap.hpp b/Kernel/KernelKit/ProcessHeap.hxx index 6f125fdc..7772398e 100644 --- a/Kernel/KernelKit/UserHeap.hpp +++ b/Kernel/KernelKit/ProcessHeap.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -10,12 +10,12 @@ #include <NewKit/ArrayList.hpp> #include <NewKit/ErrorOr.hpp> #include <NewKit/PageManager.hpp> -#include <NewKit/Ref.hpp> +#include <NewKit/Ref.hxx> #include <NewKit/Pmm.hpp> /// @version 5/11/23 -/// @file UserHeap.hpp -/// @brief memory heap for user programs. +/// @file ProcessHeap.hxx +/// @brief Heap for user processes. #define kUserHeapMaxSz (4096) #define kUserHeapMag (0xFAF0FEF0) @@ -24,8 +24,6 @@ namespace Kernel { typedef enum { - /// @brief Driver only heap. - kUserHeapDriver = 0x2, /// @brief Shared heap. kUserHeapShared = 0x4, /// @brief User and private heap. diff --git a/Kernel/KernelKit/ProcessScheduler.hxx b/Kernel/KernelKit/ProcessScheduler.hxx index 7d8518bb..4f9f99f6 100644 --- a/Kernel/KernelKit/ProcessScheduler.hxx +++ b/Kernel/KernelKit/ProcessScheduler.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -9,11 +9,11 @@ #include <ArchKit/ArchKit.hpp> #include <KernelKit/LockDelegate.hpp> -#include <KernelKit/PermissionSelector.hxx> -#include <KernelKit/UserHeap.hpp> +#include <KernelKit/User.hxx> +#include <KernelKit/ProcessHeap.hxx> #include <NewKit/MutableArray.hpp> -#define kSchedMinMicroTime (AffinityKind::kHartStandard) +#define kSchedMinMicroTime (AffinityKind::kStandard) #define kSchedInvalidPID (-1) #define kSchedProcessLimitPerTeam (16U) @@ -58,7 +58,7 @@ namespace Kernel kInvalid = 300, kVeryHigh = 250, kHigh = 200, - kHartStandard = 150, + kStandard = 150, kLowUsage = 100, kVeryLowUsage = 50, }; @@ -140,8 +140,8 @@ namespace Kernel NEWOS_COPY_DEFAULT(ProcessHeader) public: - void SetEntrypoint(UIntPtr& imageStart) noexcept; - const Int32& GetExitCode() noexcept; + void SetEntrypoint(UIntPtr& imageStart) noexcept; + const Int32& GetExitCode() noexcept; public: Char Name[kProcessLen] = {"Process"}; @@ -167,7 +167,7 @@ namespace Kernel kKindCount, }; - ProcessTime PTime; + ProcessTime PTime{0}; PID ProcessId{kSchedInvalidPID}; Int32 Kind{kAppKind}; @@ -178,25 +178,29 @@ namespace Kernel return Status != ProcessStatus::kDead; } - //! @brief Crash the app, exits with code ~0. - Void Crash(); + ///! @brief Crashes the app, exits with code ~0. + Void Crash(); - //! @brief Exits app. - Void Exit(Int32 exitCode = 0); + ///! @brief Exits the app. + Void Exit(const Int32& exit_code = 0); - //! @brief TLS Allocate - VoidPtr New(const SizeT& sz); + ///! @brief TLS allocate. + ///! @param sz size of new ptr. + VoidPtr New(const SizeT& sz); - //! @brief TLS Free. - Boolean Delete(VoidPtr ptr, const SizeT& sz); + ///! @brief TLS free. + ///! @param ptr the pointer to free. + ///! @param sz the size of it. + Boolean Delete(VoidPtr ptr, const SizeT& sz); - //! @brief Wakes up threads. - Void Wake(const bool wakeup = false); + ///! @brief Wakes up threads. + Void Wake(const bool wakeup = false); // ProcessHeader getters. public: - //! @brief ProcessHeader name getter, example: "C RunTime" - const Char* GetName() noexcept; + ///! @brief Get the process's name + ///! @example 'C Runtime Library' + const Char* GetProcessName() noexcept; //! @brief return local error code of process. //! @return Int32 local error code. @@ -207,8 +211,8 @@ namespace Kernel const AffinityKind& GetAffinity() noexcept; private: - Int32 fLastExitCode{0}; - Int32 fLocalCode{0}; + Int32 fLastExitCode{0}; + Int32 fLocalCode{0}; friend ProcessScheduler; friend ProcessHelper; @@ -226,7 +230,7 @@ namespace Kernel MutableArray<Ref<ProcessHeader>>& AsArray(); Ref<ProcessHeader>& AsRef(); - UInt64& Id() noexcept; + UInt64& Id() noexcept; public: MutableArray<Ref<ProcessHeader>> mProcessList; @@ -247,22 +251,22 @@ namespace Kernel NEWOS_COPY_DEFAULT(ProcessScheduler) - operator bool(); + operator bool(); bool operator!(); public: ProcessTeam& CurrentTeam(); public: - SizeT Add(Ref<ProcessHeader>& headerRef); - bool Remove(SizeT headerIndex); + SizeT Add(Ref<ProcessHeader>& processRef); + Bool Remove(SizeT processSlot); public: Ref<ProcessHeader>& TheCurrent(); SizeT Run() noexcept; public: - STATIC Ref<ProcessScheduler&> The(); + STATIC Ref<ProcessScheduler>& The(); private: ProcessTeam mTeam; diff --git a/Kernel/KernelKit/RLE.hxx b/Kernel/KernelKit/RLE.hxx new file mode 100644 index 00000000..9256c23b --- /dev/null +++ b/Kernel/KernelKit/RLE.hxx @@ -0,0 +1,15 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies + +------------------------------------------- */ + +#ifndef __KERNELKIT_RLE_HXX__ +#define __KERNELKIT_RLE_HXX__ + +#include <NewKit/Defines.hpp> + +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); + +#endif // !ifndef __KERNELKIT_RLE_HXX__ diff --git a/Kernel/KernelKit/SMPManager.hpp b/Kernel/KernelKit/SMPManager.hpp index 31e67bb7..a7af05d9 100644 --- a/Kernel/KernelKit/SMPManager.hpp +++ b/Kernel/KernelKit/SMPManager.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -9,10 +9,9 @@ #include <ArchKit/ArchKit.hpp> #include <CompilerKit/CompilerKit.hxx> -#include <NewKit/Ref.hpp> +#include <NewKit/Ref.hxx> -// Last Rev -// Sat Feb 24 CET 2024 +/// @note Last Rev Sun 28 Jul CET 2024 #define kMaxHarts 8 @@ -98,7 +97,7 @@ namespace Kernel public: Ref<HardwareThread*> operator[](const SizeT& idx); bool operator!() noexcept; - operator bool() noexcept; + operator bool() noexcept; public: /// @brief Shared instance of the SMP Manager. diff --git a/Kernel/KernelKit/Semaphore.hpp b/Kernel/KernelKit/Semaphore.hpp index 5dd7b407..29223b6f 100644 --- a/Kernel/KernelKit/Semaphore.hpp +++ b/Kernel/KernelKit/Semaphore.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ diff --git a/Kernel/KernelKit/ThreadLocalStorage.hxx b/Kernel/KernelKit/ThreadLocalStorage.hxx index fb3eec9b..4a0d7528 100644 --- a/Kernel/KernelKit/ThreadLocalStorage.hxx +++ b/Kernel/KernelKit/ThreadLocalStorage.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -21,11 +21,11 @@ /// Located in GS on AMD64, other architectures have their own stuff. (64x0, 32x0, ARM64) struct PACKED ThreadInformationBlock final { - Kernel::Char Cookie[kTLSCookieLen]; - Kernel::UIntPtr StartCode; // Start Address - Kernel::UIntPtr StartData; // Allocation Heap - Kernel::UIntPtr StartStack; // Stack Pointer. - Kernel::Int32 ThreadID; // Thread execution ID. + Kernel::Char Cookie[kTLSCookieLen]; // Process cookie. + Kernel::UIntPtr StartCode; // Start Address + Kernel::UIntPtr StartData; // Allocation Heap + Kernel::UIntPtr StartStack; // Stack Pointer. + Kernel::Int32 ThreadID; // Thread execution ID. }; typedef struct ThreadInformationBlock ProcessInformationBlock; @@ -39,7 +39,7 @@ T* tls_new_ptr(void); ///! @brief delete ptr syscall. template <typename T> -bool tls_delete_ptr(T* ptr); +Kernel::Boolean tls_delete_ptr(T* ptr); template <typename T, typename... Args> T* tls_new_class(Args&&... args); @@ -52,6 +52,6 @@ EXTERN_C Kernel::Void tls_check_syscall_impl(Kernel::VoidPtr TIB) noexcept; #include <KernelKit/ThreadLocalStorage.inl> -// last rev 1/29/24 +// last rev 7/7/24 #endif /* ifndef _KERNELKIT_TLS_HPP */ diff --git a/Kernel/KernelKit/ThreadLocalStorage.inl b/Kernel/KernelKit/ThreadLocalStorage.inl index c6e61059..0a860336 100644 --- a/Kernel/KernelKit/ThreadLocalStorage.inl +++ b/Kernel/KernelKit/ThreadLocalStorage.inl @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -25,7 +25,7 @@ inline T* tls_new_ptr(void) //! @brief TLS delete implementation. template <typename T> -inline bool tls_delete_ptr(T* ptr) +inline Kernel::Bool tls_delete_ptr(T* ptr) { if (!ptr) return false; @@ -64,8 +64,11 @@ T* tls_new_class(Args&&... args) /// @param ptr /// @return template <typename T> -inline bool tls_delete_class(T* ptr) +inline Kernel::Bool tls_delete_class(T* ptr) { + if (!ptr) + return false; + ptr->~T(); return tls_delete_ptr(ptr); } diff --git a/Kernel/KernelKit/Timer.hpp b/Kernel/KernelKit/Timer.hpp index 59364554..11ed0c81 100644 --- a/Kernel/KernelKit/Timer.hpp +++ b/Kernel/KernelKit/Timer.hpp @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ diff --git a/Kernel/KernelKit/User.hxx b/Kernel/KernelKit/User.hxx new file mode 100644 index 00000000..02ba475d --- /dev/null +++ b/Kernel/KernelKit/User.hxx @@ -0,0 +1,126 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies + +------------------------------------------- */ + +#ifndef _INC_PERMISSION_SEL_HXX_ +#define _INC_PERMISSION_SEL_HXX_ + +#include <CompilerKit/CompilerKit.hxx> +#include <NewKit/String.hpp> +#include <NewKit/Defines.hpp> + +// user mode users. +#define kSuperUser "Admin" +#define kGuestUser "Guest" + +#define kUsersDir "\\Users\\Store\\" + +#define kMaxUserNameLen (255) + +// hash 'password' -> base64+md5 encoded data +// use this data to then fetch specific data of the user.. + +namespace Kernel +{ + enum class RingKind + { + kRingStdUser = 1, + kRingSuperUser = 2, + kRingGuestUser = 5, + kRingCount = 5, + }; + + class User final + { + public: + explicit User() = default; + + User(const Int32& sel, const Char* userName); + User(const RingKind& kind, const Char* userName); + + ~User(); + + public: + NEWOS_COPY_DEFAULT(User) + + public: + bool operator==(const User& lhs); + bool operator!=(const User& lhs); + + public: + /// @brief Getters. + const RingKind& Ring() noexcept; + const StringView Name() noexcept; + + Bool IsStdUser() noexcept; + Bool IsSuperUser() noexcept; + + private: + RingKind fRing{RingKind::kRingStdUser}; + StringView fUserName{kMaxUserNameLen}; + }; + + class UserView final + { + UserView() = default; + ~UserView() = default; + + User* fCurrentUser = nullptr; + User* fLastLoggedOffUser = nullptr; + + public: + User* fRootUser = nullptr; + + public: + NEWOS_COPY_DELETE(UserView); + + STATIC UserView* The() noexcept + { + UserView* view = nullptr; + + if (!view) + view = new UserView(); + + return view; + } + + Void LogIn(User* user) noexcept + { + if (fCurrentUser) + { + if (!fLastLoggedOffUser) + { + fLastLoggedOffUser = fCurrentUser; + } + else + { + this->LogOff(); + } + } + + fCurrentUser = user; + } + + Void LogOff() noexcept + { + if (!fCurrentUser) + return; + + // an illegal operation just occured, we can't risk more. + if (fCurrentUser == fRootUser) + { + ke_stop(RUNTIME_CHECK_BOOTSTRAP); + } + + if (fLastLoggedOffUser) + delete fLastLoggedOffUser; + + fLastLoggedOffUser = nullptr; + fLastLoggedOffUser = fCurrentUser; + } + }; +} // namespace Kernel + +#endif /* ifndef _INC_PERMISSION_SEL_HXX_ */ diff --git a/Kernel/KernelKit/XCOFF.hxx b/Kernel/KernelKit/XCOFF.hxx index f5063900..4d5a93be 100644 --- a/Kernel/KernelKit/XCOFF.hxx +++ b/Kernel/KernelKit/XCOFF.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies File: XCOFF.hpp Purpose: XCOFF for Kernel. @@ -29,13 +29,13 @@ struct XCoffForkHeader; /// @brief XCoff file header, meant for POWER apps. typedef struct XCoffFileHeader { - Kernel::UInt16 fMagic; - Kernel::UInt16 fTarget; - Kernel::UInt16 fNumSecs; - Kernel::UInt32 fTimeDat; + Kernel::UInt16 fMagic; + Kernel::UInt16 fTarget; + Kernel::UInt16 fNumSecs; + Kernel::UInt32 fTimeDat; Kernel::UIntPtr fSymPtr; - Kernel::UInt32 fNumSyms; - Kernel::UInt16 fOptHdr; // ?: Number of bytes in optional header + Kernel::UInt32 fNumSyms; + Kernel::UInt16 fOptHdr; // ?: Number of bytes in optional header } XCoffFileHeader32, XCoffFileHeader64; #define cForkNameLen (255) diff --git a/Kernel/KernelKit/compile_flags.txt b/Kernel/KernelKit/compile_flags.txt index a37ae6bf..39b236a9 100644 --- a/Kernel/KernelKit/compile_flags.txt +++ b/Kernel/KernelKit/compile_flags.txt @@ -3,3 +3,4 @@ -std=c++20 -I./ -I../ +-D__ED__ |
