diff options
Diffstat (limited to 'src/kernel/diskio.c')
-rw-r--r-- | src/kernel/diskio.c | 29 |
1 files changed, 21 insertions, 8 deletions
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) { |