summaryrefslogtreecommitdiffhomepage
path: root/dev/libDDK
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-09-28 14:18:55 +0200
committerGitHub <noreply@github.com>2025-09-28 14:18:55 +0200
commit643fd1890646442e97f61c323bb1342ccae8c46b (patch)
tree1dccc97ea6d52012d682f664995959fe7db9ddd1 /dev/libDDK
parentdfad97487744840f26ea8046d1a011688bd9edd0 (diff)
parent2d673e164b98db5eb08d4c41c6225fbe73ee82d7 (diff)
Merge pull request #66 from 0xf00sec/patch-2
feat: `T.Value` (ErrorOr.h)
Diffstat (limited to 'dev/libDDK')
-rw-r--r--dev/libDDK/DriverKit/ddk.h4
-rw-r--r--dev/libDDK/DriverKit/dki/contract.h32
-rw-r--r--dev/libDDK/src/ddk_dev.c4
-rw-r--r--dev/libDDK/src/ddk_io.c8
-rw-r--r--dev/libDDK/src/ddk_kernel_call.c4
-rw-r--r--dev/libDDK/src/ddk_kernel_call_dispatch.S3
-rw-r--r--dev/libDDK/src/ddk_str.c2
7 files changed, 49 insertions, 8 deletions
diff --git a/dev/libDDK/DriverKit/ddk.h b/dev/libDDK/DriverKit/ddk.h
index 254137f9..2e2dddf0 100644
--- a/dev/libDDK/DriverKit/ddk.h
+++ b/dev/libDDK/DriverKit/ddk.h
@@ -1,6 +1,6 @@
/* -------------------------------------------
- Copyright Amlal El Mahrouss.
+ Copyright Amlal El Mahrouss 2025, all rights reserved.
FILE: ddk.h
PURPOSE: DDK Driver model base header.
@@ -29,6 +29,8 @@ struct DDK_STATUS_STRUCT DDK_FINAL {
struct DDK_OBJECT_MANIFEST* s_object;
};
+typedef void* ptr_t;
+
/// @brief Call Kernel procedure.
/// @param name the procedure name.
/// @param cnt number of elements in **dat**
diff --git a/dev/libDDK/DriverKit/dki/contract.h b/dev/libDDK/DriverKit/dki/contract.h
new file mode 100644
index 00000000..23884e02
--- /dev/null
+++ b/dev/libDDK/DriverKit/dki/contract.h
@@ -0,0 +1,32 @@
+/* -------------------------------------------
+
+ Copyright Amlal El Mahrouss 2025, all rights reserved.
+
+ FILE: ddk.h
+ PURPOSE: Driver Kernel Interface Model base header.
+
+ ------------------------------------------- */
+
+#pragma once
+
+#include <CompilerKit/CompilerKit.h>
+#include <DriverKit/macros.h>
+
+#define DKI_CONTRACT_IMPL : public ::Kernel::DKIContract
+
+/// @author Amlal El Mahrouss
+
+namespace Kernel::DKI {
+class DKIContract {
+ public:
+ explicit DKIContract() = default;
+ virtual ~DKIContract() = default;
+
+ NE_COPY_DEFAULT(DKIContract);
+
+ virtual BOOL IsCastable() { return false; }
+ virtual BOOL IsActive() { return false; }
+ virtual VoidPtr Leak() { return nullptr; }
+ virtual Int32 Type() { return 0; }
+};
+} // namespace Kernel::DKI
diff --git a/dev/libDDK/src/ddk_dev.c b/dev/libDDK/src/ddk_dev.c
index 32ec2442..d20684aa 100644
--- a/dev/libDDK/src/ddk_dev.c
+++ b/dev/libDDK/src/ddk_dev.c
@@ -11,7 +11,7 @@
/// @brief Open a new binary device from path.
DDK_EXTERN DDK_DEVICE_PTR open(const char* devicePath) {
- if (!devicePath) return nil;
+ if (nil == devicePath) return nil;
return ke_call_dispatch("dk_open_dev", 1, (void*) devicePath, kstrlen(devicePath));
}
@@ -19,7 +19,7 @@ DDK_EXTERN DDK_DEVICE_PTR open(const char* devicePath) {
/// @brief Close any device.
/// @param device valid device.
DDK_EXTERN BOOL close(DDK_DEVICE_PTR device) {
- if (!device) return NO;
+ if (nil == device) return NO;
ke_call_dispatch("dk_close_dev", 1, device, sizeof(DDK_DEVICE));
return YES;
diff --git a/dev/libDDK/src/ddk_io.c b/dev/libDDK/src/ddk_io.c
index c6cdd457..825e82a7 100644
--- a/dev/libDDK/src/ddk_io.c
+++ b/dev/libDDK/src/ddk_io.c
@@ -1,7 +1,9 @@
/* -------------------------------------------
- Copyright Amlal El Mahrouss.
+ libDDK.
+ Copyright 2025 - Amlal El Mahrouss and NeKernel contributors.
+ File: ddk_io.c
Purpose: DDK Text I/O.
------------------------------------------- */
@@ -9,6 +11,8 @@
#include <DriverKit/io.h>
DDK_EXTERN void kputc(const char ch) {
+ if (!ch) return;
+
char assembled[2] = {0};
assembled[0] = ch;
assembled[1] = 0;
@@ -19,7 +23,7 @@ DDK_EXTERN void kputc(const char ch) {
/// @brief print string to UART.
/// @param message UART to transmit.
DDK_EXTERN void kprint(const char* message) {
- if (!message) return;
+ if (nil == message) return;
if (*message == 0) return;
size_t index = 0;
diff --git a/dev/libDDK/src/ddk_kernel_call.c b/dev/libDDK/src/ddk_kernel_call.c
index 1ac0a0aa..5976665b 100644
--- a/dev/libDDK/src/ddk_kernel_call.c
+++ b/dev/libDDK/src/ddk_kernel_call.c
@@ -12,8 +12,8 @@
#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);
+DDK_EXTERN ATTRIBUTE(naked) ptr_t
+ __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.
diff --git a/dev/libDDK/src/ddk_kernel_call_dispatch.S b/dev/libDDK/src/ddk_kernel_call_dispatch.S
index 7b7a26cb..a607fe40 100644
--- a/dev/libDDK/src/ddk_kernel_call_dispatch.S
+++ b/dev/libDDK/src/ddk_kernel_call_dispatch.S
@@ -21,10 +21,11 @@ __ke_call_dispatch:
push rbp
mov rbp, rsp
+ /* registers have already been pushed. */
+
int kKernelCallTrapId
pop rbp
-
ret
#elif defined(__DDK_POWER64__)
diff --git a/dev/libDDK/src/ddk_str.c b/dev/libDDK/src/ddk_str.c
index 514cddc7..1e2fde19 100644
--- a/dev/libDDK/src/ddk_str.c
+++ b/dev/libDDK/src/ddk_str.c
@@ -23,6 +23,8 @@ DDK_EXTERN size_t kstrlen(const char* in) {
}
DDK_EXTERN int kstrncpy(char* dst, const char* src, size_t len) {
+ if (nil == dst || nil == src) return 0;
+
size_t index = 0;
while (index != len) {