From b323d403149db3d720a63af1087d44718821bd67 Mon Sep 17 00:00:00 2001 From: Amlal Date: Thu, 12 Sep 2024 03:16:15 +0200 Subject: Kernel improvements, and Paging API changes. ZKA: - Updated and fixed 4KB pages on ARM64. - Fixed 4KB pages on AMD64. - Refactor BMP allocator. ZBA: - Refactor Handover protocol. DDK: - Refactor and breaking API changes. HPFS: - Update code according to DDK. Signed-off-by: Amlal --- dev/DDK/KernelCall.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'dev/DDK/KernelCall.c') diff --git a/dev/DDK/KernelCall.c b/dev/DDK/KernelCall.c index 16c36f43..49bf57b5 100644 --- a/dev/DDK/KernelCall.c +++ b/dev/DDK/KernelCall.c @@ -10,7 +10,7 @@ #include /// @brief this is an internal call, do not use it. -DK_EXTERN __attribute__((naked)) void* __KernelCallDispatch(const char* name, int32_t cnt, void* data, size_t sz); +DK_EXTERN ATTRIBUTE(naked) void* __KernelCallDispatch(const char* name, int32_t cnt, void* data, size_t sz); /// @brief Interupt Kernel /// @param KernelRpcName RPC name @@ -19,12 +19,12 @@ DK_EXTERN __attribute__((naked)) void* __KernelCallDispatch(const char* name, in /// @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) +DK_EXTERN void* KernelCall(const char* name, int32_t cnt, void* data, size_t sz) { - if (!KernelRpcName || cnt == 0) + if (!name || *name == 0 || cnt == 0) return nil; - return __KernelCallDispatch(KernelRpcName, cnt, data, sz); + return __KernelCallDispatch(name, cnt, data, sz); } /// @brief Add system call. @@ -37,19 +37,24 @@ DK_EXTERN void KernelAddSyscall(const int slot, void (*slotFn)(void* a0)) /// @brief Get a Kernel property. /// @param slot property id (always 0) -/// @param name the prperty's name. -/// @return property's object. -DK_EXTERN void* KernelGetProperty(const int slot, const char* name) +/// @param name the object's name. +/// @return Object manifest. +DK_EXTERN struct DDK_OBJECT_MANIFEST* KernelGetObject(const int slot, const char* name) { - return KernelCall("RtlGetProperty", slot, (void*)name, 1); + struct DDK_OBJECT_MANIFEST* manifest = (struct DDK_OBJECT_MANIFEST*)KernelCall("RtlGetObject", slot, (void*)name, 1); + + if (!manifest) + return nil; + + return manifest; } /// @brief Set a Kernel property. /// @param slot property id (always 0) -/// @param name the property's name. -/// @param ddk_pr pointer to a property's DDK_PROPERTY_RECORD. +/// @param name the object's name. +/// @param ddk_pr pointer to a object's DDK_OBJECT_MANIFEST. /// @return property's object. -DK_EXTERN void* KernelSetProperty(const int slot, const struct DDK_PROPERTY_RECORD* ddk_pr) +DK_EXTERN void* KernelSetObject(const int slot, const struct DDK_OBJECT_MANIFEST* ddk_pr) { - return KernelCall("RtlSetProperty", slot, (void*)ddk_pr, 1); + return KernelCall("RtlSetObject", slot, (void*)ddk_pr, 1); } -- cgit v1.2.3