summaryrefslogtreecommitdiffhomepage
path: root/DDK
diff options
context:
space:
mode:
authorAmlal <amlal@zka.com>2024-07-12 01:03:21 +0200
committerAmlal <amlal@zka.com>2024-07-12 01:03:21 +0200
commita268a7d3551523fb82b1495808f3ea2516b6fdaa (patch)
tree0a7fab583aafca52bccf5bac143517f559b3a247 /DDK
parent0a076b2bcc21d4fc94b83569e1b5198f9e4acd0b (diff)
[IMP && FIX] Various patches and implementations.
Most importantly: - JSON parser. Signed-off-by: Amlal <amlal@zka.com>
Diffstat (limited to 'DDK')
-rw-r--r--DDK/DispatchKernelCall.S (renamed from DDK/KernelDispatchCall.S)8
-rw-r--r--DDK/KernelCall.c23
-rw-r--r--DDK/compile_flags.txt2
3 files changed, 18 insertions, 15 deletions
diff --git a/DDK/KernelDispatchCall.S b/DDK/DispatchKernelCall.S
index acdf3f13..b6ce8004 100644
--- a/DDK/KernelDispatchCall.S
+++ b/DDK/DispatchKernelCall.S
@@ -3,7 +3,7 @@
compiler: gnu
*/
-.globl __kernelDispatchCall
+.globl __kernelCallDispatch
.text
@@ -13,14 +13,14 @@
#ifdef __DDK_AMD64__
/* args rcx, rdx, r8, r9 */
-__kernelDispatchCall:
+__kernelCallDispatch:
int $0x33
ret
#elif defined(__DDK_POWER64__)
/* args r8, r9, r10, r11 */
-__kernelDispatchCall:
+__kernelCallDispatch:
/* There is no specific interrupt request id for a system call in POWER. */
sc
blr
@@ -28,7 +28,7 @@ __kernelDispatchCall:
#elif defined(__DDK_ARM64__)
/* args x0, x8, x9, x10, x11 is kept to tell that this is a kernel call */
-__kernelDispatchCall:
+__kernelCallDispatch:
/* There is no specific interrupt request id for a system call in ARM64 as well. */
mov x11, #0x33
svc #0
diff --git a/DDK/KernelCall.c b/DDK/KernelCall.c
index 911027f5..18d544ef 100644
--- a/DDK/KernelCall.c
+++ b/DDK/KernelCall.c
@@ -10,26 +10,27 @@
#include <stdarg.h>
/// @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 Call kernel (interrupt 0x33)
-/// @param kernelRpcName
-/// @param cnt number of elements in **dat**
-/// @param dat data ptr
-/// @param sz sz of whole data ptr.
-/// @return result of call
+DK_EXTERN __attribute__((naked)) void* __kernelCallDispatch(const char* name, int32_t cnt, void* data, size_t sz);
+
+/// @brief Interupt kernel
+/// @param kernelRpcName RPC name
+/// @param cnt number of elements in **data** pointer.
+/// @param data data pointer.
+/// @param sz The size of the whole data pointer.
+/// @retval void* kernel call was successful.
+/// @retval nil kernel call failed, call kernelLastError(void)
DK_EXTERN void* kernelCall(const char* kernelRpcName, int32_t cnt, void* data, size_t sz)
{
if (!kernelRpcName || cnt == 0)
return nil;
- return __kernelDispatchCall(kernelRpcName, cnt, data, sz);
+ return __kernelCallDispatch(kernelRpcName, cnt, data, sz);
}
-/// @brief add system call.
+/// @brief Add system call.
/// @param slot system call slot
/// @param slotFn, syscall slot.
DK_EXTERN void kernelAddSyscall(const int slot, void (*slotFn)(void* a0))
{
kernelCall("AddSyscall", slot, slotFn, 0);
-} \ No newline at end of file
+}
diff --git a/DDK/compile_flags.txt b/DDK/compile_flags.txt
new file mode 100644
index 00000000..48dfa8fe
--- /dev/null
+++ b/DDK/compile_flags.txt
@@ -0,0 +1,2 @@
+-std=c17
+-I../