summaryrefslogtreecommitdiff
path: root/src/kernel/drive.c
diff options
context:
space:
mode:
authorBenji Dial <Benji3.141@gmail.com>2020-08-11 11:33:21 -0400
committerBenji Dial <Benji3.141@gmail.com>2020-08-11 11:33:21 -0400
commit63167f223e1f54910f6b80e698390ee60aec79ee (patch)
tree41844f646bdcb5c9ba241bb5867c5e4f51737d52 /src/kernel/drive.c
parent77d7a284c02bc6b1b3a3a92ad5d957172cee9b81 (diff)
downloadportland-os-63167f223e1f54910f6b80e698390ee60aec79ee.tar.gz
lots of progress
currently, BAR fields of IDE drives are all returning zero, and the ATA read function isn't working. i'm not sure why. i'm going to work on VESA next, and come back to the IDE driver later
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