From 335b386463b5d649e4041ae6d2143c3d25b00910 Mon Sep 17 00:00:00 2001 From: notsomeidiot123 Date: Sun, 15 Mar 2026 13:31:17 -0400 Subject: [PATCH] Adjustments to VFS API --- src/kernel/system/modules.c | 10 +++++++++- src/kernel/system/modules.h | 1 + src/kernel/system/vfs.c | 11 +++++++---- src/kernel/system/vfs.h | 15 +++++++++------ src/kmodules/disk_driver.c | 13 ++++++++++--- src/kmodules/modlib.h | 10 ++++++---- 6 files changed, 42 insertions(+), 18 deletions(-) diff --git a/src/kernel/system/modules.c b/src/kernel/system/modules.c index 86eb29e..49bea13 100644 --- a/src/kernel/system/modules.c +++ b/src/kernel/system/modules.c @@ -69,10 +69,11 @@ uint32_t module_api(uint32_t func, ...){ uint32_t count = va_arg(vars, uint32_t); return_value = fread(file, buffer, offset, count); break; - case MODULE_API_WRITE: + case MODULE_API_WRITE: file = va_arg(vars, vfile_t *); buffer = va_arg(vars, char *); offset = va_arg(vars, uint32_t), count = va_arg(vars, uint32_t); + count = va_arg(vars, uint32_t); return_value = fwrite(file, buffer, offset, count); break; case MODULE_API_CREAT: @@ -91,6 +92,13 @@ uint32_t module_api(uint32_t func, ...){ name = va_arg(vars, char *); return_value = (uint32_t)fopen(name); break; + case MODULE_API_READDIR: + file = va_arg(vars, vfile_t *); + buffer = va_arg(vars, void *); + offset = va_arg(vars, uint32_t); + count = va_arg(vars, uint32_t); + return_value = readdir(file, buffer, offset, count); + break; case MODULE_API_MAP: return_value = 0; void *vaddr = va_arg(vars, void *); diff --git a/src/kernel/system/modules.h b/src/kernel/system/modules.h index 4edefe3..a42bd6f 100644 --- a/src/kernel/system/modules.h +++ b/src/kernel/system/modules.h @@ -24,6 +24,7 @@ enum MODULE_API_FUNCS{ MODULE_API_CREAT, //create a virtual file and assigns it to the the proper module (requires having a read and write function passed) MODULE_API_DELET, //delete a virtual file MODULE_API_OPEN, + MODULE_API_READDIR, MODULE_API_MAP, //map physical address to virtual address MODULE_API_UNMAP, //unmap physical address to virtual address MODULE_API_PADDR, //get physical address of memory diff --git a/src/kernel/system/vfs.c b/src/kernel/system/vfs.c index 8e0c6e7..1b2f866 100644 --- a/src/kernel/system/vfs.c +++ b/src/kernel/system/vfs.c @@ -9,8 +9,8 @@ vfile_t root_dir = {"/", FS_FILE_IS_DIR | FS_FILE_SYSTEM}; void vfs_init(){ mlog(MODULE_NAME, "Initializing VFS\n", MLOG_PRINT); - // root_dir.access.data.ptr = kmalloc(1); - // root_dir.access.data.size_pgs = 1; + root_dir.ptr = kmalloc(1); + root_dir.size = 4096;//one page is 4096 bytes } void add_file(vfile_t *vfile, vfile_t *current_dir){ @@ -25,7 +25,6 @@ int fdelete(vfile_t *file_entry){ return 0; } -// navya was here https://github.com/novabansal int fwrite(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count){ return 0; } @@ -34,7 +33,11 @@ int fread(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count return 0; } -vfile_t *lookup(char *name, vfile_t dir){ +// vfile_t *lookup(char *name, vfile_t dir){ +// return 0; +// } + +int readdir(vfile_t* file, vfile_t *buffer, uint32_t offset, uint32_t count){ return 0; } diff --git a/src/kernel/system/vfs.h b/src/kernel/system/vfs.h index 9562ec6..d51cf81 100644 --- a/src/kernel/system/vfs.h +++ b/src/kernel/system/vfs.h @@ -15,23 +15,26 @@ typedef struct virtual_file{ char name[256]; FS_FILE_FLAGS flags; int (*delete)(struct virtual_file *file_entry); - struct virtual_file *(*create)(char *name, FS_FILE_FLAGS flags); + struct virtual_file *(*create)(char *path, FS_FILE_FLAGS flags); int (*write)(struct virtual_file *file_entry, void *data, uint32_t offset, uint32_t count); int (*read)(struct virtual_file *file_entry, void *data, uint32_t offset, uint32_t count); - struct virtual_file *(*open)(char *name); - struct virtual_file **(*lookup)(char *name); + struct virtual_file *(*open)(char *path); + // struct virtual_file **(*lookup)(char *name); + int (*readdir)(struct virtual_file* file, struct virtual_file *buffer, uint32_t count, uint32_t offset); uint32_t id;//for use in drivers - void * ptr; //also for use in drivers + void *ptr; //also for use in drivers uint32_t size; uint32_t offset; //for use in drivers }vfile_t; +// vfile_t *lookup(char *name, vfile_t dir); void vfs_init(); vfile_t *fcreate(char *name, FS_FILE_FLAGS flags); int fdelete(vfile_t* file_entry); int fwrite(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count); int fread(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count); -vfile_t *lookup(char *name, vfile_t dir); -vfile_t *fopen(char *name); \ No newline at end of file +int readdir(vfile_t* file, struct virtual_file *buffer, uint32_t offset, uint32_t count); + +vfile_t *fopen(char *path); \ No newline at end of file diff --git a/src/kmodules/disk_driver.c b/src/kmodules/disk_driver.c index 8a34880..b16655d 100644 --- a/src/kmodules/disk_driver.c +++ b/src/kmodules/disk_driver.c @@ -602,9 +602,16 @@ void init(KOS_MAPI_FP module_api, uint32_t api_version){ if(!pci_drive_dir){ return; } - vfile_t **dir_data = (pci_drive_dir->ptr); - for(uint32_t i = 0; dir_data[i]; i++){ - vfile_t *current_file = dir_data[i]; + // vfile_t **dir_data = (pci_drive_dir->ptr); + + const uint32_t PCI_SEARCH_COUNT = 64; + + vfile_t *dir_data = malloc(api, (PCI_SEARCH_COUNT * sizeof(vfile_t) + 4095)/4096); + + api(MODULE_API_READDIR, pci_drive_dir, dir_data, 0, 128); + + for(uint32_t i = 0; PCI_SEARCH_COUNT; i++){ + vfile_t *current_file = &(dir_data[i]); uint32_t class = 0; fread(api, current_file, &class, 0x8, 1); uint32_t progif = class >> 8 & 0xff; diff --git a/src/kmodules/modlib.h b/src/kmodules/modlib.h index 439434a..b186772 100644 --- a/src/kmodules/modlib.h +++ b/src/kmodules/modlib.h @@ -14,6 +14,7 @@ enum MODULE_API_FUNCS{ MODULE_API_CREAT, //create a virtual file and assigns it to the the proper module (requires having a read and write function passed) MODULE_API_DELET, //delete a virtual file MODULE_API_OPEN, + MODULE_API_READDIR, MODULE_API_MAP, //map physical address to virtual address MODULE_API_UNMAP, //unmap physical address to virtual address MODULE_API_PADDR, //get physical address of memory @@ -67,14 +68,15 @@ typedef struct virtual_file{ char name[256]; FS_FILE_FLAGS flags; int (*delete)(struct virtual_file *file_entry); - struct virtual_file *(*create)(char *name, FS_FILE_FLAGS flags); + struct virtual_file *(*create)(char *path, FS_FILE_FLAGS flags); int (*write)(struct virtual_file *file_entry, void *data, uint32_t offset, uint32_t count); int (*read)(struct virtual_file *file_entry, void *data, uint32_t offset, uint32_t count); - struct virtual_file *(*open)(char *name); - struct virtual_file **(*lookup)(char *name); + struct virtual_file *(*open)(char *path); + // struct virtual_file **(*lookup)(char *name); + int (*readdir)(struct virtual_file* file, struct virtual_file *buffer, uint32_t count, uint32_t offset); uint32_t id;//for use in drivers - void * ptr; //also for use in drivers + void *ptr; //also for use in drivers uint32_t size; uint32_t offset; //for use in drivers