summaryrefslogtreecommitdiffhomepage
path: root/Private/KernelKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-24 09:04:34 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-24 09:04:34 +0100
commit917eae9453ecac6d9aeb04254d5d5c97e5a6c9e1 (patch)
tree767f6aeabb24f02c119e073e3efd2c710aabed5d /Private/KernelKit
parent5563deabd8f7ce3fc713ea23f8cf5bbac33b4024 (diff)
Kernel: MS-1: Microkernel and bootloader.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/KernelKit')
-rw-r--r--Private/KernelKit/DeviceManager.hpp23
-rw-r--r--Private/KernelKit/HError.hpp7
-rw-r--r--Private/KernelKit/Loader.hpp36
3 files changed, 42 insertions, 24 deletions
diff --git a/Private/KernelKit/DeviceManager.hpp b/Private/KernelKit/DeviceManager.hpp
index 9a689b26..582d1194 100644
--- a/Private/KernelKit/DeviceManager.hpp
+++ b/Private/KernelKit/DeviceManager.hpp
@@ -24,6 +24,8 @@
#include <NewKit/ErrorOr.hpp>
#include <NewKit/Ref.hpp>
+#include "NewKit/KernelCheck.hpp"
+
namespace HCore {
template <typename T>
class DeviceInterface;
@@ -61,10 +63,18 @@ class DeviceInterface {
void (*m_In)(T Data);
};
+///
+///
+/// @brief Input Output Buffer
+/// Used mainly to communicate between hardware.
+///
template <typename T>
class IOBuf final {
public:
- explicit IOBuf(T Dat) : m_Data(Dat) {}
+ explicit IOBuf(T Dat) : m_Data(Dat) {
+ // at least pass something valid when instancating this struct.
+ MUST_PASS(Dat);
+ }
IOBuf &operator=(const IOBuf<T> &) = default;
IOBuf(const IOBuf<T> &) = default;
@@ -72,8 +82,15 @@ class IOBuf final {
~IOBuf() = default;
public:
- T operator->() const { return m_Data; }
- T &operator[](Size index) const { return m_Data[index]; }
+ template <typename R>
+ R operator->() const {
+ return m_Data;
+ }
+
+ template <typename R>
+ R &operator[](Size index) const {
+ return m_Data[index];
+ }
private:
T m_Data;
diff --git a/Private/KernelKit/HError.hpp b/Private/KernelKit/HError.hpp
index 0d412154..247608f9 100644
--- a/Private/KernelKit/HError.hpp
+++ b/Private/KernelKit/HError.hpp
@@ -31,5 +31,8 @@ inline constexpr HError kErrorHeapOutOfMemory = 44;
Boolean ke_bug_check(void) noexcept;
} // namespace HCore
-#define KernIsOk(HERR) (HERR == HCore::kErrorSuccess)
-#define KernHasFailed(HERR) (HERR != HCore::kErrorSuccess)
+#define IsOk(HERR) (HERR == HCore::kErrorSuccess)
+#define HasFailed(HERR) (HERR != HCore::kErrorSuccess)
+#define GetLastError() LastError
+
+inline HCore::HError LastError = 0;
diff --git a/Private/KernelKit/Loader.hpp b/Private/KernelKit/Loader.hpp
index a293e2e4..36da444f 100644
--- a/Private/KernelKit/Loader.hpp
+++ b/Private/KernelKit/Loader.hpp
@@ -9,26 +9,24 @@
#pragma once
-#include <NewKit/ErrorOr.hpp>
-#include <NewKit/Defines.hpp>
#include <CompilerKit/CompilerKit.hpp>
+#include <NewKit/Defines.hpp>
+#include <NewKit/ErrorOr.hpp>
-namespace HCore
-{
- class Loader
- {
- public:
- Loader() = default;
- virtual ~Loader() = default;
-
- HCORE_COPY_DEFAULT(Loader);
+namespace HCore {
+/// This interface is used to make loader contracts (MSCOFF, PEF).
+class Loader {
+ public:
+ Loader() = default;
+ virtual ~Loader() = default;
- public:
- virtual const char* Format() = 0;
- virtual const char* MIME() = 0;
- virtual const char* Path() = 0;
- virtual ErrorOr<VoidPtr> LoadStart() = 0;
- virtual VoidPtr FindSymbol(const char* name, Int32 kind) = 0;
+ HCORE_COPY_DEFAULT(Loader);
- };
-}
+ public:
+ virtual const char* Format() = 0;
+ virtual const char* MIME() = 0;
+ virtual const char* Path() = 0;
+ virtual ErrorOr<VoidPtr> LoadStart() = 0;
+ virtual VoidPtr FindSymbol(const char* name, Int32 kind) = 0;
+};
+} // namespace HCore