diff options
| author | Amlal <amlalelmahrouss@icloud.com> | 2024-06-19 07:59:04 +0000 |
|---|---|---|
| committer | Amlal <amlalelmahrouss@icloud.com> | 2024-06-19 07:59:04 +0000 |
| commit | b820eb6a5a7948597d81998137b05ddc0eb0dbad (patch) | |
| tree | db4eaea0b6863076c4f1476f361e2317823a663a /DDK | |
| parent | 36ff25861676cd1f5fb94b901fa59b015c614bc5 (diff) | |
| parent | 6735570c44516661260546dadb81f0f5c238d1db (diff) | |
Merged in MHR-31 (pull request #16)
MHR-31: Round robin scheduler.
Diffstat (limited to 'DDK')
| -rw-r--r-- | DDK/KernelCall.c | 16 | ||||
| -rw-r--r-- | DDK/KernelDev.c | 7 | ||||
| -rw-r--r-- | DDK/KernelPrint.c | 2 | ||||
| -rw-r--r-- | DDK/KernelStd.h | 8 | ||||
| -rw-r--r-- | DDK/KernelStdCxx.cc | 6 |
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); } |
