razzle/kernel/drivers/blk/ramblk/ramblk.c
2025-02-28 21:25:17 -05:00

46 lines
1.1 KiB
C

#include "./ramblk.h"
#include "../../../memory/memory.h"
#include "../blk.h"
#define RAMFS_BYTES (1024 * 1024 * 5) // 5 MB
#define SECTOR_SIZE (512)
char ramfs_blocks[RAMFS_BYTES];
uint32_t RAMBLK__read_sector(uint32_t device, uint32_t sector, char *out) {
if (sector * SECTOR_SIZE >= RAMFS_BYTES) {
// Out of bounds
return 0;
}
uint32_t byte = sector * SECTOR_SIZE;
memcpy(ramfs_blocks + byte, out, SECTOR_SIZE);
return 1;
}
uint32_t RAMBLK__write_sector(uint32_t device, uint32_t sector, char *in) {
if ((sector + 1) * SECTOR_SIZE >= RAMFS_BYTES) {
// Out of bounds
return 0;
}
uint32_t byte = sector * SECTOR_SIZE;
memcpy(in, ramfs_blocks + byte, SECTOR_SIZE);
return 1;
}
void RAMBLK__init() {
memset(ramfs_blocks, 0x00, RAMFS_BYTES);
struct block_dev bd = {
.name = "RAM_BLK",
.sector_size = SECTOR_SIZE,
.device_no = 0,
.num_sectors = RAMFS_BYTES / SECTOR_SIZE,
.read_sector = &RAMBLK__read_sector,
.write_sector = &RAMBLK__write_sector
};
BLK__register_device(&bd);
}