summaryrefslogtreecommitdiff
path: root/kernel/fs/fs.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--kernel/fs/fs.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/kernel/fs/fs.c b/kernel/fs/fs.c
new file mode 100644
index 0000000..763907f
--- /dev/null
+++ b/kernel/fs/fs.c
@@ -0,0 +1,59 @@
+#include <lib.h>
+#include <comus/fs.h>
+
+struct disk fs_disks[MAX_DISKS];
+struct file_system fs_loaded_file_systems[MAX_DISKS];
+
+void fs_init(void) {
+
+ // zero structures
+ memsetv(fs_disks, 0, sizeof(fs_disks));
+ memsetv(fs_loaded_file_systems, 0, sizeof(fs_loaded_file_systems));
+
+ // TODO: go though ide and/or sata drivers to load all disks into `fs_disks` structures
+
+ // TODO: go though each disk and attempt to load a file system
+
+}
+
+struct disk *fs_get_root_disk(void) {
+ // NOTE: currently im just getting the first disk
+ // found, is this fine?
+
+ for (int i = 0; i < MAX_DISKS; i++) {
+ struct disk *disk = &fs_disks[i];
+ if (disk->present)
+ return disk;
+ }
+
+ return NULL;
+}
+
+struct file_system *fs_get_root_file_system(void) {
+ // NOTE: currently im just getting the first file system
+ // found, is this fine?
+
+ for (int i = 0; i < MAX_DISKS; i++) {
+ struct file_system *fs = &fs_loaded_file_systems[i];
+ if (fs->present)
+ return fs;
+ }
+
+ return NULL;
+}
+
+struct file *fs_find_file_abs(struct file_system *fs, char *abs_path)
+{
+ (void) fs;
+ (void) abs_path;
+
+ panic("fs_find_file_abs NOT YET IMPLEMENTED");
+}
+
+struct file *fs_find_file_rel(struct file *rel, char *rel_path)
+{
+ (void) rel;
+ (void) rel_path;
+
+ panic("fs_find_file_rel NOT YET IMPLEMENTED");
+}