summaryrefslogtreecommitdiff
path: root/src/kernel/drive.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/drive.c')
-rw-r--r--src/kernel/drive.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/kernel/drive.c b/src/kernel/drive.c
new file mode 100644
index 0000000..bf27ec6
--- /dev/null
+++ b/src/kernel/drive.c
@@ -0,0 +1,38 @@
+#include "drive.h"
+#include "fat.h"
+#include "panic.h"
+
+uint8_t n_drives = 0;
+struct drive drives[256];
+
+drive_file_id_t unknown_get_file(struct drive *d, char *path) {
+ return 0;
+}
+
+void unknown_free_file(struct drive *d, drive_file_id_t fid) {
+ panic("Free file called on unknown file system");
+}
+
+void unknown_load_sector(struct drive *d, drive_file_id_t fid, uint32_t sector, void *at) {
+ panic("Load sector called on unknown file system");
+}
+
+uint32_t unknown_get_free_sectors(struct drive *d) {
+ return d->n_sectors;
+}
+
+void determine_fs(struct drive *d) {
+ if (try_fat_init_drive(d))
+ return;
+
+ d->fs_type = "Unknown";
+ d->get_file = &unknown_get_file;
+ d->free_file = &unknown_free_file;
+ d->load_sector = &unknown_load_sector;
+ d->get_free_sectors = &unknown_get_free_sectors;
+}
+
+void commit_drive(struct drive data) {
+ determine_fs(&data);
+ drives[n_drives++] = data;
+} \ No newline at end of file