From d2ee3b1c6dc96b3bcead9b6874be36cccb617157 Mon Sep 17 00:00:00 2001 From: Baptiste Wicht Date: Sat, 8 Mar 2014 17:27:40 +0100 Subject: [PATCH] Cleanup --- kernel/include/ata.hpp | 4 +- kernel/include/disks.hpp | 3 -- kernel/src/ata.cpp | 92 +++++++++++----------------------------- kernel/src/disks.cpp | 23 +--------- 4 files changed, 29 insertions(+), 93 deletions(-) diff --git a/kernel/include/ata.hpp b/kernel/include/ata.hpp index a0899fdf..963801b2 100644 --- a/kernel/include/ata.hpp +++ b/kernel/include/ata.hpp @@ -30,8 +30,8 @@ void detect_disks(); uint8_t number_of_disks(); drive_descriptor& drive(uint8_t disk); -bool read_sectors(drive_descriptor& drive, uint64_t start, uint8_t count, void* destination); -bool write_sectors(drive_descriptor& drive, uint64_t start, uint8_t count, void* source); +size_t read_sectors(drive_descriptor& drive, uint64_t start, uint8_t count, void* destination, size_t& read); +size_t write_sectors(drive_descriptor& drive, uint64_t start, uint8_t count, const void* source, size_t& written); struct ata_driver : devfs::dev_driver { size_t read(void* data, char* buffer, size_t count, size_t offset, size_t& read); diff --git a/kernel/include/disks.hpp b/kernel/include/disks.hpp index c51c78c7..1b46f98f 100644 --- a/kernel/include/disks.hpp +++ b/kernel/include/disks.hpp @@ -43,9 +43,6 @@ void detect_disks(); disk_descriptor& disk_by_index(uint64_t index); disk_descriptor& disk_by_uuid(uint64_t uuid); -//bool read_sectors(const disk_descriptor& disk, uint64_t start, uint8_t count, void* destination); -//bool write_sectors(const disk_descriptor& disk, uint64_t start, uint8_t count, void* destination); - std::unique_heap_array partitions(disk_descriptor& disk); } diff --git a/kernel/src/ata.cpp b/kernel/src/ata.cpp index ff878247..21981168 100644 --- a/kernel/src/ata.cpp +++ b/kernel/src/ata.cpp @@ -372,18 +372,7 @@ size_t ata::ata_driver::read(void* data, char* destination, size_t count, size_t auto descriptor = reinterpret_cast(data); auto disk = reinterpret_cast(descriptor->descriptor); - auto buffer = reinterpret_cast(destination); - - for(size_t i = 0; i < sectors; ++i){ - if(!read_write_sector(*disk, start + i, buffer, true)){ - return std::ERROR_FAILED; - } - - buffer += BLOCK_SIZE; - read += BLOCK_SIZE; - } - - return 0; + return ata::read_sectors(*disk, start, sectors, destination, read); } size_t ata::ata_driver::write(void* data, const char* source, size_t count, size_t offset, size_t& written){ @@ -403,18 +392,7 @@ size_t ata::ata_driver::write(void* data, const char* source, size_t count, size auto descriptor = reinterpret_cast(data); auto disk = reinterpret_cast(descriptor->descriptor); - auto buffer = reinterpret_cast(const_cast(source)); - - for(size_t i = 0; i < sectors; ++i){ - if(!read_write_sector(*disk, start + i, buffer, false)){ - return std::ERROR_FAILED; - } - - buffer += BLOCK_SIZE; - written += BLOCK_SIZE; - } - - return 0; + return ata::write_sectors(*disk, start, sectors, source, written); } size_t ata::ata_part_driver::read(void* data, char* destination, size_t count, size_t offset, size_t& read){ @@ -437,18 +415,7 @@ size_t ata::ata_part_driver::read(void* data, char* destination, size_t count, s start += part_descriptor->start; - auto buffer = reinterpret_cast(destination); - - for(size_t i = 0; i < sectors; ++i){ - if(!read_write_sector(*disk, start + i, buffer, true)){ - return std::ERROR_FAILED; - } - - buffer += BLOCK_SIZE; - read += BLOCK_SIZE; - } - - return 0; + return ata::read_sectors(*disk, start, sectors, destination, read); } size_t ata::ata_part_driver::write(void* data, const char* source, size_t count, size_t offset, size_t& written){ @@ -471,10 +438,29 @@ size_t ata::ata_part_driver::write(void* data, const char* source, size_t count, start += part_descriptor->start; - auto buffer = reinterpret_cast(const_cast(source)); + return ata::write_sectors(*disk, start, sectors, source, written); +} - for(size_t i = 0; i < sectors; ++i){ - if(!read_write_sector(*disk, start + i, buffer, false)){ +size_t ata::read_sectors(drive_descriptor& drive, uint64_t start, uint8_t count, void* destination, size_t& read){ + auto buffer = reinterpret_cast(destination); + + for(size_t i = 0; i < count; ++i){ + if(!read_write_sector(drive, start + i, buffer, true)){ + return std::ERROR_FAILED; + } + + buffer += BLOCK_SIZE; + read += BLOCK_SIZE; + } + + return 0; +} + +size_t ata::write_sectors(drive_descriptor& drive, uint64_t start, uint8_t count, const void* source, size_t& written){ + auto buffer = reinterpret_cast(const_cast(source)); + + for(size_t i = 0; i < count; ++i){ + if(!read_write_sector(drive, start + i, buffer, false)){ return std::ERROR_FAILED; } @@ -484,31 +470,3 @@ size_t ata::ata_part_driver::write(void* data, const char* source, size_t count, return 0; } - -bool ata::read_sectors(drive_descriptor& drive, uint64_t start, uint8_t count, void* destination){ - auto buffer = reinterpret_cast(destination); - - for(size_t i = 0; i < count; ++i){ - if(!read_write_sector(drive, start + i, buffer, true)){ - return false; - } - - buffer += BLOCK_SIZE;; - } - - return true; -} - -bool ata::write_sectors(drive_descriptor& drive, uint64_t start, uint8_t count, void* source){ - auto buffer = reinterpret_cast(source); - - for(size_t i = 0; i < count; ++i){ - if(!read_write_sector(drive, start + i, buffer, false)){ - return false; - } - - buffer += BLOCK_SIZE; - } - - return true; -} diff --git a/kernel/src/disks.cpp b/kernel/src/disks.cpp index b56f249d..bb193342 100644 --- a/kernel/src/disks.cpp +++ b/kernel/src/disks.cpp @@ -104,30 +104,11 @@ disks::disk_descriptor& disks::disk_by_uuid(uint64_t uuid){ __builtin_unreachable(); } -/*bool disks::read_sectors(const disk_descriptor& disk, uint64_t start, uint8_t count, void* destination){ - switch(disk.type){ - case disk_type::ATA: - return ata::read_sectors(*static_cast(disk.descriptor), start, count, destination); - - default: - return false; - } -} - -bool disks::write_sectors(const disk_descriptor& disk, uint64_t start, uint8_t count, void* destination){ - switch(disk.type){ - case disk_type::ATA: - return ata::write_sectors(*static_cast(disk.descriptor), start, count, destination); - - default: - return false; - } -}*/ - std::unique_heap_array disks::partitions(disk_descriptor& disk){ std::unique_ptr boot_record(new boot_record_t()); - if(!ata::read_sectors(*static_cast(disk.descriptor), 0, 1, boot_record.get())){ + size_t read; + if(ata::read_sectors(*static_cast(disk.descriptor), 0, 1, boot_record.get(), read) > 0){ k_print_line("Read Boot Record failed"); return {};