summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-04-15 17:04:45 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-04-15 17:04:45 +0200
commit0b0f61ae48bbd8827d6088feab6cf58e7837bf92 (patch)
treed54948563b5bb2a2cc72ca4a88cc3032a75657ee
parent56a97ff6398c03de22dabd7b93f54b1292f66b97 (diff)
dev, user: drafting a system call map.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
-rw-r--r--dev/user/Macros.h34
-rw-r--r--dev/user/src/SystemCalls.cc48
-rw-r--r--public/frameworks/DiskImage.fwrk/headers/DiskImage.h1
-rw-r--r--public/tools/diutil/diutil.json4
4 files changed, 82 insertions, 5 deletions
diff --git a/dev/user/Macros.h b/dev/user/Macros.h
index 98beeb0d..556833ea 100644
--- a/dev/user/Macros.h
+++ b/dev/user/Macros.h
@@ -90,4 +90,36 @@ IMPORT_C void _rtl_assert(Bool expr, const Char* origin);
#define ARRAY_SIZE(X) \
(((sizeof(X) / sizeof(*(X))) / \
(static_cast<SizeT>(!(sizeof(X) % sizeof(*(X)))))))
-#endif \ No newline at end of file
+#endif
+
+#ifndef KIB
+#define KIB(X) (UInt64)((X) / 1024)
+#endif
+
+#ifndef kib_cast
+#define kib_cast(X) (UInt64)((X)*1024)
+#endif
+
+#ifndef MIB
+#define MIB(X) (UInt64)((UInt64)KIB(X) / 1024)
+#endif
+
+#ifndef mib_cast
+#define mib_cast(X) (UInt64)((UInt64)kib_cast(X) * 1024)
+#endif
+
+#ifndef GIB
+#define GIB(X) (UInt64)((UInt64)MIB(X) / 1024)
+#endif
+
+#ifndef gib_cast
+#define gib_cast(X) (UInt64)((UInt64)mib_cast(X) * 1024)
+#endif
+
+#ifndef TIB
+#define TIB(X) (UInt64)((UInt64)GIB(X) / 1024)
+#endif
+
+#ifndef tib_cast
+#define tib_cast(X) ((UInt64)gib_cast(X) * 1024)
+#endif
diff --git a/dev/user/src/SystemCalls.cc b/dev/user/src/SystemCalls.cc
index 2dd27dc0..7ad0fe6f 100644
--- a/dev/user/src/SystemCalls.cc
+++ b/dev/user/src/SystemCalls.cc
@@ -6,9 +6,14 @@
#include <user/SystemCalls.h>
-/// @file libsci.cc
+/// @file SystemCalls.cc
/// @brief Source file for the memory functions of the libsci.
+IMPORT_C VoidPtr sci_syscall_arg_1(SizeT id);
+IMPORT_C VoidPtr sci_syscall_arg_2(SizeT id, VoidPtr arg1);
+IMPORT_C VoidPtr sci_syscall_arg_3(SizeT id, VoidPtr arg1, VoidPtr arg3);
+IMPORT_C VoidPtr sci_syscall_arg_4(SizeT id, VoidPtr arg1, VoidPtr arg3, VoidPtr arg4);
+
/// @brief Copy memory region.
IMPORT_C VoidPtr MmCopyMemory(_Input VoidPtr dest, _Input VoidPtr src, _Input SizeT len)
{
@@ -27,6 +32,21 @@ IMPORT_C VoidPtr MmCopyMemory(_Input VoidPtr dest, _Input VoidPtr src, _Input Si
return dest;
}
+IMPORT_C SInt64 MmStrLen(const Char* in)
+{
+ if (!in)
+ return 0;
+
+ SizeT len{0};
+
+ do
+ {
+ ++len;
+ } while (in[len] != '\0');
+
+ return len;
+}
+
/// @brief Fill memory region **dest** with **value**.
IMPORT_C VoidPtr MmFillMemory(_Input VoidPtr dest, _Input SizeT len, _Input UInt8 value)
{
@@ -43,3 +63,29 @@ IMPORT_C VoidPtr MmFillMemory(_Input VoidPtr dest, _Input SizeT len, _Input UInt
return dest;
}
+
+IMPORT_C Ref IoOpenFile(_Input const Char* path, _Input const Char* drv_letter)
+{
+ return sci_syscall_arg_3(1, reinterpret_cast<VoidPtr>(const_cast<Char*>(path)),
+ reinterpret_cast<VoidPtr>(const_cast<Char*>(drv_letter)));
+}
+
+IMPORT_C Void IoCloseFile(_Input Ref desc)
+{
+ sci_syscall_arg_2(2, desc);
+}
+
+IMPORT_C UInt64 IoSeekFile(_Input Ref desc, _Input UInt64 off)
+{
+ auto ret = (UInt64*)sci_syscall_arg_3(3, reinterpret_cast<VoidPtr>(desc),
+ reinterpret_cast<VoidPtr>(&off));
+
+ MUST_PASS((*ret) != ~0UL);
+ return *ret;
+}
+
+IMPORT_C UInt64 IoTellFile(_Input Ref desc)
+{
+ auto ret = (UInt64*)sci_syscall_arg_2(4, reinterpret_cast<VoidPtr>(desc));
+ return *ret;
+}
diff --git a/public/frameworks/DiskImage.fwrk/headers/DiskImage.h b/public/frameworks/DiskImage.fwrk/headers/DiskImage.h
index 1dc23c0a..c0566485 100644
--- a/public/frameworks/DiskImage.fwrk/headers/DiskImage.h
+++ b/public/frameworks/DiskImage.fwrk/headers/DiskImage.h
@@ -10,7 +10,6 @@
#pragma once
#include <user/SystemCalls.h>
-#include <NewKit/Defines.h>
#define kDISectorSz (512)
#define kDIMinDiskSz mib_cast(1)
diff --git a/public/tools/diutil/diutil.json b/public/tools/diutil/diutil.json
index 0805e69f..19b845c5 100644
--- a/public/tools/diutil/diutil.json
+++ b/public/tools/diutil/diutil.json
@@ -1,8 +1,8 @@
{
"compiler_path": "g++",
"compiler_std": "c++20",
- "headers_path": ["./", "../../../dev/kernel", "../../../dev/", "./"],
- "sources_path": ["src/CommandLine.cc"],
+ "headers_path": ["./", "../../../dev/kernel", "../../../public/frameworks/", "../../../dev/", "./"],
+ "sources_path": ["src/CommandLine.cc", "../../../public/frameworks/DiskImage.fwrk/src/*.cc", "../../../dev/user/src/*.cc"],
"output_name": "./dist/diutil",
"cpp_macros": [
"kDUTILVersion=0x0100",