From 243e28075e223bd9be145251161b692873918764 Mon Sep 17 00:00:00 2001 From: Benji Dial Date: Sun, 5 Jan 2020 22:26:40 -0500 Subject: function to return pointers to functions to read from a constant interface, so we only have to check the interface once per macro operation --- src/kernel/diskio.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'src/kernel/diskio.c') diff --git a/src/kernel/diskio.c b/src/kernel/diskio.c index bd08136..69f5964 100644 --- a/src/kernel/diskio.c +++ b/src/kernel/diskio.c @@ -18,17 +18,30 @@ OF THIS SOFTWARE. */ #include "diskio.h" +#include "floppy.h" +#include "ide.h" +#include "ata.h" -uint32_t read_sectors(uint8_t drive, uint32_t start, uint32_t count, void *buffer) { - if ((drive >= 26) || !(drives[drive].flags & DISK_IN)) - return 0; - return 0;//TODO +read_sectors_t read_sectors_functions[] = { + &floppy_read_sectors, + &ide_read_sectors, + &ata_read_sectors +}; + +read_sectors_t get_read_sectors_function(uint8_t drive) { + return (drive >= 26) || !(drives[drive].flags & DISK_IN) ? 0 : + read_sectors_functions[drives[drive].interface]; } -uint32_t write_sectors(uint8_t drive, uint32_t start, uint32_t count, void *buffer) { - if ((drive >= 26) || !(drives[drive].flags & DISK_IN)) - return 0; - return 0;//TODO +write_sectors_t write_sectors_functions[] = { + &floppy_write_sectors, + &ide_write_sectors, + &ata_write_sectors +}; + +write_sectors_t get_write_sectors_function(uint8_t drive) { + return (drive >= 26) || !(drives[drive].flags & DISK_IN) ? 0 : + write_sectors_functions[drives[drive].interface]; } void update_status(uint8_t drive) { -- cgit v1.2.3