summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-03-26 17:02:24 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-03-26 17:02:24 +0100
commit6c09ce86367ef0729a25e58314eefc543aaa83b7 (patch)
tree6181305a9eac8976ebb06d0897b367269281749a /dev/kernel
parent3852d6115bcd5c9ad80451ffac2892d38f604333 (diff)
feat(kernel): SwapKit+kSwap variant type.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel')
-rw-r--r--dev/kernel/NewKit/Variant.h7
-rw-r--r--dev/kernel/SignalKit/Signals.h9
-rw-r--r--dev/kernel/SwapKit/SwapDisk.h70
-rw-r--r--dev/kernel/SystemKit/SwapDisk.h46
-rw-r--r--dev/kernel/amd64-ci.make2
-rw-r--r--dev/kernel/amd64-desktop.make2
-rw-r--r--dev/kernel/src/Swap/SwapDisk.cc67
-rw-r--r--dev/kernel/src/System/SwapDisk.cc53
-rw-r--r--dev/kernel/src/Variant.cc2
9 files changed, 154 insertions, 104 deletions
diff --git a/dev/kernel/NewKit/Variant.h b/dev/kernel/NewKit/Variant.h
index 82be6636..99768016 100644
--- a/dev/kernel/NewKit/Variant.h
+++ b/dev/kernel/NewKit/Variant.h
@@ -9,6 +9,7 @@
#include <NewKit/Defines.h>
#include <NewKit/KString.h>
#include <NewKit/Json.h>
+#include <SwapKit/SwapDisk.h>
namespace NeOS
{
@@ -22,6 +23,7 @@ namespace NeOS
kNull,
kJson,
kXML,
+ kSwap,
};
public:
@@ -48,6 +50,11 @@ namespace NeOS
{
}
+ explicit Variant(SWAP_DISK_HEADER* ptr)
+ : fPtr(ptr), fKind(VariantKind::kSwap)
+ {
+ }
+
explicit Variant(VoidPtr ptr)
: fPtr(ptr), fKind(VariantKind::kBlob)
{
diff --git a/dev/kernel/SignalKit/Signals.h b/dev/kernel/SignalKit/Signals.h
index 09d392f6..affec3ee 100644
--- a/dev/kernel/SignalKit/Signals.h
+++ b/dev/kernel/SignalKit/Signals.h
@@ -8,8 +8,6 @@
#include <NewKit/Defines.h>
-typedef NeOS::UInt32 SignalKind;
-
#define SIGKILL 0
#define SIGPAUS 1
#define SIGEXEC 2
@@ -19,4 +17,9 @@ typedef NeOS::UInt32 SignalKind;
#define SIGBREK 666
#define SIGATCH 661
-#define SIGDTCH 662 \ No newline at end of file
+#define SIGDTCH 662
+
+namespace NeOS
+{
+ typedef UInt32 SignalKind;
+} \ No newline at end of file
diff --git a/dev/kernel/SwapKit/SwapDisk.h b/dev/kernel/SwapKit/SwapDisk.h
new file mode 100644
index 00000000..b9c31a65
--- /dev/null
+++ b/dev/kernel/SwapKit/SwapDisk.h
@@ -0,0 +1,70 @@
+
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025 Amlal EL Mahrouss Labs, all rights reserved.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <NewKit/Defines.h>
+#include <CompilerKit/CompilerKit.h>
+
+#define kSwapBlockMaxSize (mib_cast(16))
+#define kSwapPageFile "/boot/pagefile.sys"
+
+/// @file SwapDisk.h
+/// @brief Virtual memory swap disk.
+
+namespace NeOS
+{
+ struct SWAP_DISK_HEADER;
+
+ /// @brief Virtual memory interface to swap memory chunks onto disk.
+ class SwapDiskInterface final
+ {
+ public:
+ explicit SwapDiskInterface() = default;
+ ~SwapDiskInterface() = default;
+
+ NE_COPY_DEFAULT(SwapDiskInterface);
+
+ public:
+ /***********************************************************************************/
+ /// @brief Write memory chunk onto disk.
+ /// @param fork_name The swap name to recognize this memory region.
+ /// @param fork_name_len length of fork name.
+ /// @param data the data packet.
+ /// @return Whether the swap was written to disk, or not.
+ /***********************************************************************************/
+ BOOL Write(const Char* fork_name, const SizeT fork_name_len, SWAP_DISK_HEADER* data);
+
+ /***********************************************************************************/
+ /// @brief Read memory chunk from disk.
+ /// @param fork_name The swap name to recognize this memory region.
+ /// @param fork_name_len length of fork name.
+ /// @param data the data packet length.
+ /// @return Whether the swap was fetched to disk, or not.
+ /***********************************************************************************/
+ SWAP_DISK_HEADER* Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len);
+ };
+
+ /// @brief Swap disk header, containing information about the held virtual memory.
+ /// @param fMagic Ident number.
+ /// @param fHeaderSz This header size.
+ /// @param fTeamID Process Team ID.
+ /// @param fProcessID Process ID.
+ /// @param fVirtualAddress Virtual address pointed by data.
+ /// @param fBlobSz Blob's size.
+ /// @param fBlob Data blob.
+ typedef struct SWAP_DISK_HEADER
+ {
+ UInt32 fMagic;
+ SizeT fHeaderSz;
+ UInt64 fTeamID;
+ UInt64 fProcessID;
+ UInt64 fVirtualAddress;
+ SizeT fBlobSz;
+ UInt8 fBlob[];
+ } PACKED SWAP_DISK_HEADER;
+} // namespace NeOS
diff --git a/dev/kernel/SystemKit/SwapDisk.h b/dev/kernel/SystemKit/SwapDisk.h
deleted file mode 100644
index 11cc6332..00000000
--- a/dev/kernel/SystemKit/SwapDisk.h
+++ /dev/null
@@ -1,46 +0,0 @@
-
-/* -------------------------------------------
-
- Copyright (C) 2024-2025 Amlal EL Mahrouss Labs, all rights reserved.
-
-------------------------------------------- */
-
-#pragma once
-
-#include <NewKit/Defines.h>
-#include <CompilerKit/CompilerKit.h>
-
-#define kSwapBlockMaxSize (mib_cast(16))
-#define kSwapPageFile "/boot/pagefile.sys"
-
-/// @file SwapDisk.h
-/// @brief Virtual memory swap disk.
-
-namespace NeOS
-{
- struct SWAP_DISK_HEADER;
-
- /// @brief This class is a disk swap delegate for any data. available as a syscall too.
- class SwapDisk final
- {
- public:
- explicit SwapDisk() = default;
- ~SwapDisk() = default;
-
- NE_COPY_DEFAULT(SwapDisk);
-
- BOOL Write(const Char* fork_name, const SizeT fork_name_len, SWAP_DISK_HEADER* data, const SizeT data_len);
- SWAP_DISK_HEADER* Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len);
- };
-
- typedef struct SWAP_DISK_HEADER
- {
- UInt32 fMagic;
- SizeT fHeaderSz;
- UInt64 fTeamID;
- UInt64 fProcessID;
- UInt64 fVirtualAddress;
- SizeT fBlobSz;
- Char fBlob[];
- } PACKED SWAP_DISK_HEADER;
-} // namespace NeOS
diff --git a/dev/kernel/amd64-ci.make b/dev/kernel/amd64-ci.make
index e2177e58..692b7b54 100644
--- a/dev/kernel/amd64-ci.make
+++ b/dev/kernel/amd64-ci.make
@@ -50,7 +50,7 @@ WINDRES=x86_64-w64-mingw32-windres
.PHONY: newos-amd64-epm
newos-amd64-epm: clean
$(WINDRES) KernelRsrc.rsrc -O coff -o KernelRsrc.obj
- $(CXX) $(CCFLAGS) $(DISK_DRV) $(DEBUG_MACRO) $(wildcard src/*.cc) $(wildcard HALKit/AMD64/PCI/*.cc) $(wildcard src/Network/*.cc) $(wildcard src/Storage/*.cc) $(wildcard src/FS/*.cc) $(wildcard HALKit/AMD64/Storage/*.cc) $(wildcard HALKit/AMD64/*.cc) $(wildcard src/System/*.cc) $(wildcard HALKit/AMD64/*.s)
+ $(CXX) $(CCFLAGS) $(DISK_DRV) $(DEBUG_MACRO) $(wildcard src/*.cc) $(wildcard HALKit/AMD64/PCI/*.cc) $(wildcard src/Network/*.cc) $(wildcard src/Storage/*.cc) $(wildcard src/FS/*.cc) $(wildcard HALKit/AMD64/Storage/*.cc) $(wildcard HALKit/AMD64/*.cc) $(wildcard src/Swap/*.cc) $(wildcard HALKit/AMD64/*.s)
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalInterruptAPI.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalCommonAPI.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalBootHeader.asm
diff --git a/dev/kernel/amd64-desktop.make b/dev/kernel/amd64-desktop.make
index e2177e58..692b7b54 100644
--- a/dev/kernel/amd64-desktop.make
+++ b/dev/kernel/amd64-desktop.make
@@ -50,7 +50,7 @@ WINDRES=x86_64-w64-mingw32-windres
.PHONY: newos-amd64-epm
newos-amd64-epm: clean
$(WINDRES) KernelRsrc.rsrc -O coff -o KernelRsrc.obj
- $(CXX) $(CCFLAGS) $(DISK_DRV) $(DEBUG_MACRO) $(wildcard src/*.cc) $(wildcard HALKit/AMD64/PCI/*.cc) $(wildcard src/Network/*.cc) $(wildcard src/Storage/*.cc) $(wildcard src/FS/*.cc) $(wildcard HALKit/AMD64/Storage/*.cc) $(wildcard HALKit/AMD64/*.cc) $(wildcard src/System/*.cc) $(wildcard HALKit/AMD64/*.s)
+ $(CXX) $(CCFLAGS) $(DISK_DRV) $(DEBUG_MACRO) $(wildcard src/*.cc) $(wildcard HALKit/AMD64/PCI/*.cc) $(wildcard src/Network/*.cc) $(wildcard src/Storage/*.cc) $(wildcard src/FS/*.cc) $(wildcard HALKit/AMD64/Storage/*.cc) $(wildcard HALKit/AMD64/*.cc) $(wildcard src/Swap/*.cc) $(wildcard HALKit/AMD64/*.s)
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalInterruptAPI.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalCommonAPI.asm
$(ASM) $(ASMFLAGS) HALKit/AMD64/HalBootHeader.asm
diff --git a/dev/kernel/src/Swap/SwapDisk.cc b/dev/kernel/src/Swap/SwapDisk.cc
new file mode 100644
index 00000000..fbc63b2f
--- /dev/null
+++ b/dev/kernel/src/Swap/SwapDisk.cc
@@ -0,0 +1,67 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025 Amlal EL Mahrouss Labs, all rights reserved.
+
+------------------------------------------- */
+
+#include <SwapKit/SwapDisk.h>
+#include <KernelKit/FileMgr.h>
+
+namespace NeOS
+{
+ /***********************************************************************************/
+ /// @brief Write memory chunk onto disk.
+ /// @param fork_name The swap name to recognize this memory region.
+ /// @param fork_name_len length of fork name.
+ /// @param data the data packet.
+ /// @return Whether the swap was written to disk, or not.
+ /***********************************************************************************/
+ BOOL SwapDiskInterface::Write(const Char* fork_name, const SizeT fork_name_len, SWAP_DISK_HEADER* data)
+ {
+ if (!fork_name || !fork_name_len)
+ return NO;
+
+ if (*fork_name == 0)
+ return NO;
+
+ if (!data)
+ return NO;
+
+ FileStream file(kSwapPageFile, "wb");
+
+ auto ret = file.Write(fork_name, data, sizeof(SWAP_DISK_HEADER) + data->fBlobSz);
+
+ if (ret.Error())
+ return NO;
+
+ return YES;
+ }
+
+ /***********************************************************************************/
+ /// @brief Read memory chunk from disk.
+ /// @param fork_name The swap name to recognize this memory region.
+ /// @param fork_name_len length of fork name.
+ /// @param data the data packet length.
+ /// @return Whether the swap was fetched to disk, or not.
+ /***********************************************************************************/
+ SWAP_DISK_HEADER* SwapDiskInterface::Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len)
+ {
+ if (!fork_name || !fork_name_len)
+ return nullptr;
+
+ if (*fork_name == 0)
+ return nullptr;
+
+ if (data_len > kSwapBlockMaxSize)
+ return nullptr;
+
+ if (data_len == 0)
+ return nullptr;
+
+ FileStream file(kSwapPageFile, "rb");
+
+ VoidPtr blob = file.Read(fork_name, sizeof(SWAP_DISK_HEADER) + data_len);
+
+ return reinterpret_cast<SWAP_DISK_HEADER*>(blob);
+ }
+} // namespace NeOS
diff --git a/dev/kernel/src/System/SwapDisk.cc b/dev/kernel/src/System/SwapDisk.cc
deleted file mode 100644
index 80c75684..00000000
--- a/dev/kernel/src/System/SwapDisk.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-/* -------------------------------------------
-
- Copyright (C) 2024-2025 Amlal EL Mahrouss Labs, all rights reserved.
-
-------------------------------------------- */
-
-#include <SystemKit/SwapDisk.h>
-#include <KernelKit/FileMgr.h>
-
-namespace NeOS
-{
- BOOL SwapDisk::Write(const Char* fork_name, const SizeT fork_name_len, SWAP_DISK_HEADER* data, const SizeT data_len)
- {
- if (!fork_name || !fork_name_len)
- return NO;
-
- if (*fork_name == 0)
- return NO;
-
- if (data_len > kSwapBlockMaxSize)
- return NO;
-
- if (!data)
- return NO;
-
- FileStream file(kSwapPageFile, "wb");
-
- auto ret = file.Write(fork_name, data, sizeof(SWAP_DISK_HEADER) + data_len);
-
- if (ret.Error())
- return NO;
-
- return YES;
- }
-
- SWAP_DISK_HEADER* SwapDisk::Read(const Char* fork_name, const SizeT fork_name_len, const SizeT data_len)
- {
- if (!fork_name || !fork_name_len)
- return nullptr;
-
- if (*fork_name == 0)
- return nullptr;
-
- if (data_len > kSwapBlockMaxSize)
- return nullptr;
-
- FileStream file(kSwapPageFile, "rb");
-
- VoidPtr blob = file.Read(fork_name, sizeof(SWAP_DISK_HEADER) + data_len);
-
- return (SWAP_DISK_HEADER*)blob;
- }
-} // namespace NeOS
diff --git a/dev/kernel/src/Variant.cc b/dev/kernel/src/Variant.cc
index cfa29d3a..7b4b0389 100644
--- a/dev/kernel/src/Variant.cc
+++ b/dev/kernel/src/Variant.cc
@@ -22,6 +22,8 @@ namespace NeOS
return ("Class:{Blob}");
case VariantKind::kNull:
return ("Class:{Null}");
+ case VariantKind::kSwap:
+ return ("Class:{Swap}");
default:
return ("Class:{Unknown}");
}