Files
Deshab-OS/CODE/UTSM/kernel/block.c
T

80 lines
2.4 KiB
C
Raw Normal View History

#include <utsm/block.h>
#include <utsm/log.h>
static dkm_block_device_desc g_devices[DKM_BLOCK_MAX_DEVICES];
static u32 g_device_count;
void block_init(void) {
g_device_count = 0;
log_info("[BLOCK] registry init");
}
static int block_register_device_impl(const dkm_block_device_desc *desc) {
if (!desc || !desc->read || !desc->sector_size) return -1;
if (g_device_count >= DKM_BLOCK_MAX_DEVICES) return -2;
u32 index = g_device_count++;
g_devices[index] = *desc;
log_info("[BLOCK] device registered");
if (desc->name) log_info(desc->name);
log_hex64("[BLOCK] index=", index);
log_hex64("[BLOCK] sector_size=", desc->sector_size);
log_hex64("[BLOCK] sector_count=", desc->sector_count);
return (int)index;
}
static u32 block_device_count_impl(void) {
return g_device_count;
}
static int block_read_impl(u32 index, u64 lba, u32 count, void *buffer) {
if (index >= g_device_count || !buffer || count == 0) return -1;
dkm_block_device_desc *dev = &g_devices[index];
if (!dev->read) return -2;
return dev->read(dev->ctx, lba, count, buffer);
}
static int block_write_impl(u32 index, u64 lba, u32 count, const void *buffer) {
if (index >= g_device_count || !buffer || count == 0) return -1;
dkm_block_device_desc *dev = &g_devices[index];
if (!dev->write) return -2;
return dev->write(dev->ctx, lba, count, buffer);
}
static u64 block_sector_size_impl(u32 index) {
if (index >= g_device_count) return 0;
return g_devices[index].sector_size;
}
static const char *block_device_name_impl(u32 index) {
if (index >= g_device_count) return 0;
return g_devices[index].name;
}
static int block_set_write_fn_impl(u32 index, dkm_block_write_fn fn) {
if (index >= g_device_count) return -1;
g_devices[index].write = fn;
return 0;
}
2026-08-29 18:47:54 +08:00
static u64 block_sector_count_impl(u32 index) {
if (index >= g_device_count) return 0;
return g_devices[index].sector_count;
}
static const dkm_block_api g_block_api = {
.register_device = block_register_device_impl,
.device_count = block_device_count_impl,
.read = block_read_impl,
.write = block_write_impl,
.sector_size = block_sector_size_impl,
.device_name = block_device_name_impl,
2026-08-29 18:47:54 +08:00
.set_write_fn = block_set_write_fn_impl,
.sector_count = block_sector_count_impl
};
const dkm_block_api *block_get_api(void) {
return &g_block_api;
}