Adjustments to VFS API
This commit is contained in:
parent
e366dc75d8
commit
335b386463
|
|
@ -69,10 +69,11 @@ uint32_t module_api(uint32_t func, ...){
|
||||||
uint32_t count = va_arg(vars, uint32_t);
|
uint32_t count = va_arg(vars, uint32_t);
|
||||||
return_value = fread(file, buffer, offset, count);
|
return_value = fread(file, buffer, offset, count);
|
||||||
break;
|
break;
|
||||||
case MODULE_API_WRITE:
|
case MODULE_API_WRITE:
|
||||||
file = va_arg(vars, vfile_t *);
|
file = va_arg(vars, vfile_t *);
|
||||||
buffer = va_arg(vars, char *);
|
buffer = va_arg(vars, char *);
|
||||||
offset = va_arg(vars, uint32_t), count = va_arg(vars, uint32_t);
|
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);
|
return_value = fwrite(file, buffer, offset, count);
|
||||||
break;
|
break;
|
||||||
case MODULE_API_CREAT:
|
case MODULE_API_CREAT:
|
||||||
|
|
@ -91,6 +92,13 @@ uint32_t module_api(uint32_t func, ...){
|
||||||
name = va_arg(vars, char *);
|
name = va_arg(vars, char *);
|
||||||
return_value = (uint32_t)fopen(name);
|
return_value = (uint32_t)fopen(name);
|
||||||
break;
|
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:
|
case MODULE_API_MAP:
|
||||||
return_value = 0;
|
return_value = 0;
|
||||||
void *vaddr = va_arg(vars, void *);
|
void *vaddr = va_arg(vars, void *);
|
||||||
|
|
|
||||||
|
|
@ -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_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_DELET, //delete a virtual file
|
||||||
MODULE_API_OPEN,
|
MODULE_API_OPEN,
|
||||||
|
MODULE_API_READDIR,
|
||||||
MODULE_API_MAP, //map physical address to virtual address
|
MODULE_API_MAP, //map physical address to virtual address
|
||||||
MODULE_API_UNMAP, //unmap physical address to virtual address
|
MODULE_API_UNMAP, //unmap physical address to virtual address
|
||||||
MODULE_API_PADDR, //get physical address of memory
|
MODULE_API_PADDR, //get physical address of memory
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,8 @@ vfile_t root_dir = {"/", FS_FILE_IS_DIR | FS_FILE_SYSTEM};
|
||||||
|
|
||||||
void vfs_init(){
|
void vfs_init(){
|
||||||
mlog(MODULE_NAME, "Initializing VFS\n", MLOG_PRINT);
|
mlog(MODULE_NAME, "Initializing VFS\n", MLOG_PRINT);
|
||||||
// root_dir.access.data.ptr = kmalloc(1);
|
root_dir.ptr = kmalloc(1);
|
||||||
// root_dir.access.data.size_pgs = 1;
|
root_dir.size = 4096;//one page is 4096 bytes
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_file(vfile_t *vfile, vfile_t *current_dir){
|
void add_file(vfile_t *vfile, vfile_t *current_dir){
|
||||||
|
|
@ -25,7 +25,6 @@ int fdelete(vfile_t *file_entry){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// navya was here https://github.com/novabansal
|
|
||||||
int fwrite(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count){
|
int fwrite(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -34,7 +33,11 @@ int fread(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count
|
||||||
return 0;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,23 +15,26 @@ typedef struct virtual_file{
|
||||||
char name[256];
|
char name[256];
|
||||||
FS_FILE_FLAGS flags;
|
FS_FILE_FLAGS flags;
|
||||||
int (*delete)(struct virtual_file *file_entry);
|
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 (*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);
|
int (*read)(struct virtual_file *file_entry, void *data, uint32_t offset, uint32_t count);
|
||||||
struct virtual_file *(*open)(char *name);
|
struct virtual_file *(*open)(char *path);
|
||||||
struct virtual_file **(*lookup)(char *name);
|
// 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
|
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 size;
|
||||||
uint32_t offset; //for use in drivers
|
uint32_t offset; //for use in drivers
|
||||||
|
|
||||||
}vfile_t;
|
}vfile_t;
|
||||||
|
|
||||||
|
// vfile_t *lookup(char *name, vfile_t dir);
|
||||||
void vfs_init();
|
void vfs_init();
|
||||||
vfile_t *fcreate(char *name, FS_FILE_FLAGS flags);
|
vfile_t *fcreate(char *name, FS_FILE_FLAGS flags);
|
||||||
int fdelete(vfile_t* file_entry);
|
int fdelete(vfile_t* file_entry);
|
||||||
int fwrite(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count);
|
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);
|
int fread(vfile_t *file_entry, void *byte_array, uint32_t offset, uint32_t count);
|
||||||
vfile_t *lookup(char *name, vfile_t dir);
|
int readdir(vfile_t* file, struct virtual_file *buffer, uint32_t offset, uint32_t count);
|
||||||
vfile_t *fopen(char *name);
|
|
||||||
|
vfile_t *fopen(char *path);
|
||||||
|
|
@ -602,9 +602,16 @@ void init(KOS_MAPI_FP module_api, uint32_t api_version){
|
||||||
if(!pci_drive_dir){
|
if(!pci_drive_dir){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
vfile_t **dir_data = (pci_drive_dir->ptr);
|
// vfile_t **dir_data = (pci_drive_dir->ptr);
|
||||||
for(uint32_t i = 0; dir_data[i]; i++){
|
|
||||||
vfile_t *current_file = dir_data[i];
|
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;
|
uint32_t class = 0;
|
||||||
fread(api, current_file, &class, 0x8, 1);
|
fread(api, current_file, &class, 0x8, 1);
|
||||||
uint32_t progif = class >> 8 & 0xff;
|
uint32_t progif = class >> 8 & 0xff;
|
||||||
|
|
|
||||||
|
|
@ -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_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_DELET, //delete a virtual file
|
||||||
MODULE_API_OPEN,
|
MODULE_API_OPEN,
|
||||||
|
MODULE_API_READDIR,
|
||||||
MODULE_API_MAP, //map physical address to virtual address
|
MODULE_API_MAP, //map physical address to virtual address
|
||||||
MODULE_API_UNMAP, //unmap physical address to virtual address
|
MODULE_API_UNMAP, //unmap physical address to virtual address
|
||||||
MODULE_API_PADDR, //get physical address of memory
|
MODULE_API_PADDR, //get physical address of memory
|
||||||
|
|
@ -67,14 +68,15 @@ typedef struct virtual_file{
|
||||||
char name[256];
|
char name[256];
|
||||||
FS_FILE_FLAGS flags;
|
FS_FILE_FLAGS flags;
|
||||||
int (*delete)(struct virtual_file *file_entry);
|
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 (*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);
|
int (*read)(struct virtual_file *file_entry, void *data, uint32_t offset, uint32_t count);
|
||||||
struct virtual_file *(*open)(char *name);
|
struct virtual_file *(*open)(char *path);
|
||||||
struct virtual_file **(*lookup)(char *name);
|
// 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
|
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 size;
|
||||||
uint32_t offset; //for use in drivers
|
uint32_t offset; //for use in drivers
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue