Adjustments to VFS API

This commit is contained in:
notsomeidiot123 2026-03-15 13:31:17 -04:00
parent e366dc75d8
commit 335b386463
6 changed files with 42 additions and 18 deletions

View File

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

View File

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

View File

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

View File

@ -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);
int readdir(vfile_t* file, struct virtual_file *buffer, uint32_t offset, uint32_t count);
vfile_t *fopen(char *path);

View File

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

View File

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