diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-15 17:04:45 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-15 17:04:45 +0200 |
| commit | 0b0f61ae48bbd8827d6088feab6cf58e7837bf92 (patch) | |
| tree | d54948563b5bb2a2cc72ca4a88cc3032a75657ee | |
| parent | 56a97ff6398c03de22dabd7b93f54b1292f66b97 (diff) | |
dev, user: drafting a system call map.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
| -rw-r--r-- | dev/user/Macros.h | 34 | ||||
| -rw-r--r-- | dev/user/src/SystemCalls.cc | 48 | ||||
| -rw-r--r-- | public/frameworks/DiskImage.fwrk/headers/DiskImage.h | 1 | ||||
| -rw-r--r-- | public/tools/diutil/diutil.json | 4 |
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", |
