summaryrefslogtreecommitdiffhomepage
path: root/dev/ddk/src/ddk_kernel_call.c
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-08-25 09:50:27 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-08-25 09:50:27 +0200
commita7939c9a20d5f4b83d5df34aa652a88a0764042c (patch)
treed773fa076011ac6a54c1de93755797b09e7bd3ca /dev/ddk/src/ddk_kernel_call.c
parentd864e0c6281024ce4b9bd654aa83308a50f583d8 (diff)
feat! ddk -> libDDK, use syscall on AMD64.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/ddk/src/ddk_kernel_call.c')
-rw-r--r--dev/ddk/src/ddk_kernel_call.c76
1 files changed, 0 insertions, 76 deletions
diff --git a/dev/ddk/src/ddk_kernel_call.c b/dev/ddk/src/ddk_kernel_call.c
deleted file mode 100644
index 1ac0a0aa..00000000
--- a/dev/ddk/src/ddk_kernel_call.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* -------------------------------------------
-
- DDK
- Copyright Amlal El Mahrouss.
-
- Author: Amlal El Mahrouss
- Purpose: DDK kernel dispatch system.
-
-------------------------------------------- */
-
-#include <DriverKit/ddk.h>
-#include <stdarg.h>
-
-/// @brief this is an internal call, do not use it.
-DDK_EXTERN ATTRIBUTE(naked) void* __ke_call_dispatch(const int32_t name, int32_t cnt, void* data,
- size_t sz);
-/// @brief This function hashes the path into a FNV symbol.
-/// @param path the path to hash.
-/// @retval 0 symbol wasn't hashed.
-/// @retval > 0 hashed symbol.
-static uint64_t ddk_fnv_64(const char* path) {
- if (path == nil || *path == 0) return 0;
-
- const uint64_t kFnvOffsetBase = 0xcbf29ce484222325ULL;
- const uint64_t kFnvPrime64 = 0x100000001b3ULL;
-
- uint64_t hash = kFnvOffsetBase;
-
- while (*path) {
- hash ^= (char) (*path++);
- hash *= kFnvPrime64;
- }
-
- return hash;
-}
-
-/// @brief Interrupt Kernel and call it's RPC.
-/// @param name 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)
-DDK_EXTERN void* ke_call_dispatch(const char* name, int32_t cnt, void* data, size_t sz) {
- if (name == nil || *name == 0 || data == nil || cnt == 0) return nil;
- return __ke_call_dispatch(ddk_fnv_64(name), cnt, data, sz);
-}
-
-/// @brief Add system call.
-/// @param slot system call slot
-/// @param slotFn, syscall slot.
-DDK_EXTERN void ke_set_syscall(const int slot, void (*slotFn)(void* a0)) {
- ke_call_dispatch("ke_set_syscall", slot, slotFn, 1);
-}
-
-/// @brief Get a Kernel object.
-/// @param slot property id (always 0)
-/// @param name the object's name.
-/// @return Object manifest.
-DDK_EXTERN struct DDK_OBJECT_MANIFEST* ke_get_obj(const int slot, const char* name) {
- struct DDK_OBJECT_MANIFEST* manifest =
- (struct DDK_OBJECT_MANIFEST*) ke_call_dispatch("cfkit_get_kobj", slot, (void*) name, 1);
-
- if (!manifest) return nil;
-
- return manifest;
-}
-
-/// @brief Set a Kernel object.
-/// @param slot property id (always 0)
-/// @param name the object's name.
-/// @param ddk_pr pointer to a object's DDK_OBJECT_MANIFEST.
-/// @return property's object.
-DDK_EXTERN void* ke_set_obj(const int slot, const struct DDK_OBJECT_MANIFEST* ddk_pr) {
- return ke_call_dispatch("cfkit_set_kobj", slot, (void*) ddk_pr, 1);
-}