Update kernel module interface

This commit is contained in:
notsomeidiot123 2025-08-27 16:38:20 -04:00
parent 1d85b89d37
commit e9db8f8f67
4 changed files with 72 additions and 5 deletions

View File

@ -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);

View File

@ -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

View File

@ -4,14 +4,69 @@
#include "../shared/memory.h"
#include <stdarg.h>
#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);
}
}

View File

@ -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;