From e9db8f8f67e57f6edd5440ad8dbdf7dac3d05edd Mon Sep 17 00:00:00 2001 From: notsomeidiot123 Date: Wed, 27 Aug 2025 16:38:20 -0400 Subject: [PATCH] Update kernel module interface --- src/kernel/shared/kstdlib.c | 8 +++++ src/kernel/shared/kstdlib.h | 1 + src/kernel/system/modules.c | 63 ++++++++++++++++++++++++++++++++++--- src/kernel/system/modules.h | 5 ++- 4 files changed, 72 insertions(+), 5 deletions(-) diff --git a/src/kernel/shared/kstdlib.c b/src/kernel/shared/kstdlib.c index 260d25d..d9e0cc4 100644 --- a/src/kernel/shared/kstdlib.c +++ b/src/kernel/shared/kstdlib.c @@ -10,6 +10,14 @@ char* log_info_types[] = { "| ERROR" }; +void vmlog(char *module, char *str, uint32_t type, va_list vars){ + if(!type || type > 4){ + return; + } + printf("[ %s %s ]", module, log_info_types[type]); + vprintf(str, vars); +} + void mlog(char *module, char *str, uint32_t type, ...){ va_list vars; va_start(vars, type); diff --git a/src/kernel/shared/kstdlib.h b/src/kernel/shared/kstdlib.h index 76947df..aaaafcd 100644 --- a/src/kernel/shared/kstdlib.h +++ b/src/kernel/shared/kstdlib.h @@ -42,6 +42,7 @@ typedef struct kernel_info{ }__attribute__((packed)) kernel_info_t; void mlog(char *module, char *str, uint32_t type, ...); +void vmlog(char *module, char *str, uint32_t type, va_list vars); #define MODULE_TYPE_DISK 1 diff --git a/src/kernel/system/modules.c b/src/kernel/system/modules.c index 7aede02..3890d49 100644 --- a/src/kernel/system/modules.c +++ b/src/kernel/system/modules.c @@ -4,14 +4,69 @@ #include "../shared/memory.h" #include - #define MODULE_NAME "MLOADER" vector_t *modules; vector_t *module_deps; uint32_t module_api(uint32_t func, ...){ - + va_list vars; + va_start(vars, func); + uint32_t return_value = 0; + switch(func){ + case MODULE_API_REGISTER: + //do something + return_value = -1; + break; + case MODULE_API_ADDFUNC: + //do something + return_value = -1; + break; + case MODULE_API_DELFUNC: + //do something + return_value = -1; + break; + case MODULE_API_ADDINT: + return_value = -1; + //do something + break; + case MODULE_API_DELINT: + //do something + return_value = -1; + break; + case MODULE_API_PRINT: + // vmlog(MODULE_NAME, "Testing modules calling kernel functions\n", MLOG_PRINT, vars); + char *name = va_arg(vars, char *); + char *string = va_arg(vars, char *); + vmlog(name, string, MLOG_PRINT, vars); + break; + case MODULE_API_READ: + return_value = -1; + break; + case MODULE_API_WRITE: + return_value = -1; + break; + case MODULE_API_CREAT: + return_value = -1; + break; + case MODULE_API_DELET: + return_value = -1; + break; + case MODULE_API_MAP: + return_value = -1; + break; + case MODULE_API_UNMAP: + return_value = -1; + break; + case MODULE_API_MALLOC: + return_value = -1; + break; + case MODULE_API_FREE: + return_value = -1; + break; + } + va_end(vars); + return return_value; } void init_modules(kernel_info_t *kernel_info){ @@ -23,11 +78,11 @@ void init_modules(kernel_info_t *kernel_info){ if(!module->ptr){ continue; } - void (*entry)(void* api) = load_elf(module->ptr, PT_SYS); + void (*entry)(void* api, uint32_t version) = load_elf(module->ptr, PT_SYS); mlog(MODULE_NAME, "Loaded module with ID %x\n", MLOG_PRINT, module->id); // module->type |= 0x8000;//set present flag in type module->flags |= MODULE_PRESENT; module = module->link; - (*entry)(0); + (*entry)(module_api, 0); } } \ No newline at end of file diff --git a/src/kernel/system/modules.h b/src/kernel/system/modules.h index c0cefbc..77aec0d 100644 --- a/src/kernel/system/modules.h +++ b/src/kernel/system/modules.h @@ -19,7 +19,10 @@ #define MODULE_API_WRITE 7 //write to virtual file #define MODULE_API_CREAT 8 //create a virtual file and assigns it to the the proper module (requires having a read and write function passed) #define MODULE_API_DELET 9 - +#define MODULE_API_MAP 10 +#define MODULE_API_UNMAP 11 +#define MODULE_API_MALLOC 12 +#define MODULE_API_FREE 13 typedef struct module{ void *init_entry;