X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/3b6a05fc894d0c1a3d431045ee5a53955ba093a0..0fd474df7001837bde53da0e42e83081827c9641:/lunaix-os/kernel/block/blk_mapping.c diff --git a/lunaix-os/kernel/block/blk_mapping.c b/lunaix-os/kernel/block/blk_mapping.c index 46e8f45..ddc360a 100644 --- a/lunaix-os/kernel/block/blk_mapping.c +++ b/lunaix-os/kernel/block/blk_mapping.c @@ -9,27 +9,55 @@ blk_mapping_init() blk_root = twifs_dir_node(NULL, "block"); } -void -__blk_rd_size(struct twimap* map) +static void +__twimap_read_lblk_size(struct twimap* map) { struct block_dev* bdev = twimap_data(map, struct block_dev*); - size_t secsize = bdev->blk_size; - twimap_printf(map, "%u", bdev->end_lba * secsize); + size_t lblksz = bdev->blk_size; + twimap_printf(map, "%u", lblksz); } -void -__blk_rd_lblksz(struct twimap* map) +static void +__twimap_read_name(struct twimap* map) { struct block_dev* bdev = twimap_data(map, struct block_dev*); - size_t lblksz = bdev->blk_size; - twimap_printf(map, "%u", lblksz); + twimap_printf(map, "%s", bdev->name); } -void -__blk_rd_name(struct twimap* map) +static void +__twimap_read_lba_begin(struct twimap* map) { struct block_dev* bdev = twimap_data(map, struct block_dev*); - twimap_printf(map, "%s", bdev->name); + twimap_printf(map, "%d", bdev->start_lba); +} + +static void +__twimap_read_lba_end(struct twimap* map) +{ + struct block_dev* bdev = twimap_data(map, struct block_dev*); + twimap_printf(map, "%d", bdev->end_lba); +} + +static void +__twimap_read_size(struct twimap* map) +{ + struct block_dev* bdev = twimap_data(map, struct block_dev*); + twimap_printf( + map, "%u", (u32_t)(bdev->end_lba - bdev->start_lba) * bdev->blk_size); +} + +void +__map_internal(struct block_dev* bdev, void* fsnode) +{ + struct twifs_node* dev_root; + + dev_root = (struct twifs_node*)fsnode; + + twimap_export_value(dev_root, size, FSACL_aR, bdev); + twimap_export_value(dev_root, lblk_size, FSACL_aR, bdev); + twimap_export_value(dev_root, name, FSACL_aR, bdev); + twimap_export_value(dev_root, lba_begin, FSACL_aR, bdev); + twimap_export_value(dev_root, lba_end, FSACL_aR, bdev); } void @@ -37,12 +65,12 @@ blk_set_blkmapping(struct block_dev* bdev, void* fsnode) { struct twifs_node* dev_root = (struct twifs_node*)fsnode; - struct twimap* map = twifs_mapping(dev_root, bdev, "size"); - map->read = __blk_rd_size; - - map = twifs_mapping(dev_root, bdev, "lblk_size"); - map->read = __blk_rd_lblksz; + __map_internal(bdev, dev_root); - map = twifs_mapping(dev_root, bdev, "name"); - map->read = __blk_rd_name; + struct block_dev *pos, *n; + llist_for_each(pos, n, &bdev->parts, parts) + { + struct twifs_node* part_node = twifs_dir_node(dev_root, pos->bdev_id); + __map_internal(pos, part_node); + } } \ No newline at end of file