summaryrefslogtreecommitdiffhomepage
path: root/Kernel/KernelKit
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/KernelKit')
-rw-r--r--Kernel/KernelKit/CodeManager.hpp2
-rw-r--r--Kernel/KernelKit/DebugOutput.hpp10
-rw-r--r--Kernel/KernelKit/Defines.hpp2
-rw-r--r--Kernel/KernelKit/DeviceManager.hpp8
-rw-r--r--Kernel/KernelKit/DriveManager.hxx2
-rw-r--r--Kernel/KernelKit/FileManager.hpp142
-rw-r--r--Kernel/KernelKit/Framebuffer.hpp14
-rw-r--r--Kernel/KernelKit/HError.hpp11
-rw-r--r--Kernel/KernelKit/Heap.hxx (renamed from Kernel/KernelKit/KernelHeap.hpp)30
-rw-r--r--Kernel/KernelKit/LoaderInterface.hpp2
-rw-r--r--Kernel/KernelKit/LockDelegate.hpp2
-rw-r--r--Kernel/KernelKit/MSDOS.hpp68
-rw-r--r--Kernel/KernelKit/MSDOS.hxx52
-rw-r--r--Kernel/KernelKit/PCI/Database.hpp2
-rw-r--r--Kernel/KernelKit/PCI/Device.hpp2
-rw-r--r--Kernel/KernelKit/PCI/Dma.hpp6
-rw-r--r--Kernel/KernelKit/PCI/Dma.inl4
-rw-r--r--Kernel/KernelKit/PCI/Express.hpp2
-rw-r--r--Kernel/KernelKit/PCI/IO-Impl-AMD64.inl4
-rw-r--r--Kernel/KernelKit/PCI/IO.hpp4
-rw-r--r--Kernel/KernelKit/PCI/Iterator.hpp9
-rw-r--r--Kernel/KernelKit/PCI/PCI.hxx (renamed from Kernel/KernelKit/PCI/PCI.hpp)13
-rw-r--r--Kernel/KernelKit/PE.hxx88
-rw-r--r--Kernel/KernelKit/PECodeManager.hxx2
-rw-r--r--Kernel/KernelKit/PEF.hxx (renamed from Kernel/KernelKit/PEF.hpp)11
-rw-r--r--Kernel/KernelKit/PEFCodeManager.hxx4
-rw-r--r--Kernel/KernelKit/PEFSharedObject.hxx4
-rw-r--r--Kernel/KernelKit/PermissionSelector.hxx57
-rw-r--r--Kernel/KernelKit/ProcessHeap.hxx (renamed from Kernel/KernelKit/UserHeap.hpp)10
-rw-r--r--Kernel/KernelKit/ProcessScheduler.hxx58
-rw-r--r--Kernel/KernelKit/RLE.hxx15
-rw-r--r--Kernel/KernelKit/SMPManager.hpp9
-rw-r--r--Kernel/KernelKit/Semaphore.hpp2
-rw-r--r--Kernel/KernelKit/ThreadLocalStorage.hxx16
-rw-r--r--Kernel/KernelKit/ThreadLocalStorage.inl9
-rw-r--r--Kernel/KernelKit/Timer.hpp2
-rw-r--r--Kernel/KernelKit/User.hxx126
-rw-r--r--Kernel/KernelKit/XCOFF.hxx14
-rw-r--r--Kernel/KernelKit/compile_flags.txt1
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__