From 9a54c41ad07ec00316bb8fcdeba51c215446d454 Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Mon, 22 Aug 2022 15:12:25 +0200 Subject: ext2 as multiboot2 module --- kernel/src/devices/disc.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 kernel/src/devices/disc.c (limited to 'kernel/src/devices') diff --git a/kernel/src/devices/disc.c b/kernel/src/devices/disc.c new file mode 100644 index 0000000..8d34473 --- /dev/null +++ b/kernel/src/devices/disc.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include + +#define KERNEL_VMA 0xc0000000 + +disc_sector_t* disc; + +void disc_init() +{ + disc = (disc_sector_t*)(uint64_t)ext2_module->mod_start; + if (disc == NULL) { + printf("Error opening disc\n"); + } + + uint32_t disc_size = ext2_module->mod_end - ext2_module->mod_start; + for (size_t i = 0; i < upper_div(disc_size, PAGE_SIZE) + 1; i++) { + map_addr((uint64_t)((char*)disc + i * PAGE_SIZE), (uint64_t)((char*)disc + i * PAGE_SIZE), FLAG_PRESENT | FLAG_WRITABLE | FLAG_HUGE); + } +} + +void read_sector(size_t sector_num, disc_sector_t* disc_sector) +{ + memcpy(disc_sector, disc + sector_num, SECTOR_SIZE); +} + +void write_sector(size_t sector_num, disc_sector_t* disc_sector) +{ + memcpy(disc + sector_num, disc_sector, SECTOR_SIZE); +} -- cgit v1.2.3