summaryrefslogtreecommitdiffhomepage
path: root/DDK
diff options
context:
space:
mode:
authorAmlal <amlalelmahrouss@icloud.com>2024-06-19 07:59:04 +0000
committerAmlal <amlalelmahrouss@icloud.com>2024-06-19 07:59:04 +0000
commitb820eb6a5a7948597d81998137b05ddc0eb0dbad (patch)
treedb4eaea0b6863076c4f1476f361e2317823a663a /DDK
parent36ff25861676cd1f5fb94b901fa59b015c614bc5 (diff)
parent6735570c44516661260546dadb81f0f5c238d1db (diff)
Merged in MHR-31 (pull request #16)
MHR-31: Round robin scheduler.
Diffstat (limited to 'DDK')
-rw-r--r--DDK/KernelCall.c16
-rw-r--r--DDK/KernelDev.c7
-rw-r--r--DDK/KernelPrint.c2
-rw-r--r--DDK/KernelStd.h8
-rw-r--r--DDK/KernelStdCxx.cc6
5 files changed, 21 insertions, 18 deletions
diff --git a/DDK/KernelCall.c b/DDK/KernelCall.c
index c20a4894..7dc5761c 100644
--- a/DDK/KernelCall.c
+++ b/DDK/KernelCall.c
@@ -9,22 +9,18 @@
#include <DDK/KernelStd.h>
#include <stdarg.h>
-DK_EXTERN __attribute__((naked)) void __kernelDispatchCall(int32_t cnt, ...);
+/// @brief this is an internal call, do not use it.
+DK_EXTERN __attribute__((naked)) void* __kernelDispatchCall(const char* name, int32_t cnt, void* data, size_t sz);
/// @brief Execute a function on the kernel.
/// @param kernelRpcName the name of the function.
/// @param cnt number of arguments.
-/// @param
-/// @return
-DK_EXTERN void* kernelCall(const char* kernelRpcName, int32_t cnt, ...)
+/// @param
+/// @return
+DK_EXTERN void* kernelCall(const char* kernelRpcName, int32_t cnt, void* data, size_t sz)
{
if (!kernelRpcName || cnt == 0)
return NIL;
- va_list arg;
- va_start(arg, cnt);
-
- __kernelDispatchCall(cnt, arg);
-
- va_end(arg);
+ return __kernelDispatchCall(kernelRpcName, cnt, data, sz);
}
diff --git a/DDK/KernelDev.c b/DDK/KernelDev.c
index f19f85c6..6a6aac99 100644
--- a/DDK/KernelDev.c
+++ b/DDK/KernelDev.c
@@ -7,6 +7,7 @@
------------------------------------------- */
#include <DDK/KernelDev.h>
+#include <DDK/KernelString.h>
/// @brief Open a new binary device from path.
DK_EXTERN kernelDeviceRef kernelOpenBinaryDevice(const char* devicePath)
@@ -14,7 +15,7 @@ DK_EXTERN kernelDeviceRef kernelOpenBinaryDevice(const char* devicePath)
if (!devicePath)
return NIL;
- return kernelCall("OpenBinaryDevice", 1, devicePath);
+ return kernelCall("OpenBinaryDevice", 1, devicePath, kernelStringLength(devicePath));
}
/// @brief Open a new character device from path.
@@ -23,7 +24,7 @@ DK_EXTERN kernelDeviceRef kernelOpenCharDevice(const char* devicePath)
if (!devicePath)
return NIL;
- return kernelCall("OpenCharDevice", 1, devicePath);
+ return kernelCall("OpenCharDevice", 1, devicePath, kernelStringLength(devicePath));
}
/// @brief Close any device.
@@ -33,5 +34,5 @@ DK_EXTERN void kernelCloseDevice(kernelDeviceRef device)
if (!device)
return;
- kernelCall("CloseDevice", 1, device);
+ kernelCall("CloseDevice", 1, device, sizeof(kernelDevice));
}
diff --git a/DDK/KernelPrint.c b/DDK/KernelPrint.c
index b7513149..77f70280 100644
--- a/DDK/KernelPrint.c
+++ b/DDK/KernelPrint.c
@@ -10,7 +10,7 @@
DK_EXTERN void kernelPrintChar(const char ch)
{
- kernelCall("WriteCharacter", 1, ch);
+ kernelCall("WriteCharacter", 1, ch, 1);
}
/// @brief print string to UART.
diff --git a/DDK/KernelStd.h b/DDK/KernelStd.h
index 61bc23a9..0486479c 100644
--- a/DDK/KernelStd.h
+++ b/DDK/KernelStd.h
@@ -19,4 +19,10 @@
#include <stdint.h>
#include <stddef.h>
-DK_EXTERN void* kernelCall(const char* kernelRpcName, int32_t cnt, ...);
+/// @brief Call kernel (interrupt 0x33)
+/// @param kernelRpcName
+/// @param cnt
+/// @param dat
+/// @param sz
+/// @return
+DK_EXTERN void* kernelCall(const char* kernelRpcName, int32_t cnt, void* dat, size_t sz);
diff --git a/DDK/KernelStdCxx.cc b/DDK/KernelStdCxx.cc
index b1d233fa..cdca85dc 100644
--- a/DDK/KernelStdCxx.cc
+++ b/DDK/KernelStdCxx.cc
@@ -11,8 +11,8 @@
void* operator new(size_t sz) {
if (!sz) ++sz;
- auto ptr = kernelCall("NewKernelHeap", 1, sz);
- kernelCall("ProtectKernelHeap", 1, ptr);
+ auto ptr = kernelCall("NewKernelHeap", 1, &sz, sizeof(size_t));
+ kernelCall("ProtectKernelHeap", 1, ptr, sz);
return ptr;
}
@@ -20,5 +20,5 @@ void* operator new(size_t sz) {
void operator delete(void* ptr) noexcept {
if (!ptr) return;
- kernelCall("DeleteKernelHeap", 1,ptr);
+ kernelCall("DeleteKernelHeap", 1, ptr, 0);
}