diff options
Diffstat (limited to 'kernel/src/drivers/disk.hpp')
| -rw-r--r-- | kernel/src/drivers/disk.hpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/kernel/src/drivers/disk.hpp b/kernel/src/drivers/disk.hpp index 584d94e..d1ac4b5 100644 --- a/kernel/src/drivers/disk.hpp +++ b/kernel/src/drivers/disk.hpp @@ -1,5 +1,13 @@ #pragma once #include <cstdint> +#include <klibc/stdio.hpp> + +enum class partition_style : std::uint8_t { + err = 0, + mbr = 1, + gpt = 2, + raw = 5 +}; struct disk { void* arg; @@ -7,4 +15,20 @@ struct disk { std::size_t disk_size; bool (*read)(void* arg, char* buffer, std::uint64_t lba, std::size_t len_in_blocks); bool (*write)(void* arg, char* buffer, std::uint64_t lba, std::size_t len_in_blocks); +}; + +struct bytes_to_block_res { + std::uint64_t lba; + std::uint64_t size_in_blocks; +}; + +inline static bytes_to_block_res bytes_to_blocks(std::uint64_t start, std::uint64_t size, std::uint64_t lba_size) { + bytes_to_block_res result; + result.lba = start / lba_size; + result.size_in_blocks = (size / lba_size) == 0 ? 1 : (size / lba_size); + return result; +} + +namespace drivers { + void init_disk(disk* new_disk); };
\ No newline at end of file |
