X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/a4ec38a4c7ef61b04b92d34637c846a8e2e95f7f..97901724584e74554916b89dfb8e95dc6497e687:/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 f6d1346..7dae2b8 100644 --- a/lunaix-os/kernel/block/blk_mapping.c +++ b/lunaix-os/kernel/block/blk_mapping.c @@ -10,102 +10,74 @@ blk_mapping_init() } void -__blk_rd_size(struct twimap* map) -{ - struct block_dev* bdev = twimap_data(map, struct block_dev*); - size_t secsize = bdev->hd_dev->block_size; - twimap_printf(map, "%u", (bdev->end_lba - bdev->base_lba) * secsize); -} - -void -__blk_rd_secsize(struct twimap* map) -{ - struct block_dev* bdev = twimap_data(map, struct block_dev*); - size_t secsize = bdev->hd_dev->block_size; - twimap_printf(map, "%u", secsize); -} - -void -__blk_rd_range(struct twimap* map) -{ - struct block_dev* bdev = twimap_data(map, struct block_dev*); - twimap_printf( - map, "%u,%u", (uint32_t)bdev->base_lba, (uint32_t)bdev->end_lba); -} - -void -__blk_rd_model(struct twimap* map) -{ - struct block_dev* bdev = twimap_data(map, struct block_dev*); - twimap_printf(map, "%s", bdev->hd_dev->model); -} - -void -__blk_rd_serial(struct twimap* map) +__blk_rd_lblksz(struct twimap* map) { struct block_dev* bdev = twimap_data(map, struct block_dev*); - twimap_printf(map, "%s", bdev->hd_dev->serial_num); + size_t lblksz = bdev->blk_size; + twimap_printf(map, "%u", lblksz); } void -__blk_rd_status(struct twimap* map) +__blk_rd_name(struct twimap* map) { struct block_dev* bdev = twimap_data(map, struct block_dev*); - twimap_printf(map, "%p", bdev->hd_dev->last_result.status); + twimap_printf(map, "%s", bdev->name); } void -__blk_rd_error(struct twimap* map) +__blk_rd_start_lba(struct twimap* map) { struct block_dev* bdev = twimap_data(map, struct block_dev*); - twimap_printf(map, "%p", bdev->hd_dev->last_result.error); + twimap_printf(map, "%d", bdev->start_lba); } void -__blk_rd_sense_key(struct twimap* map) +__blk_rd_end_lba(struct twimap* map) { struct block_dev* bdev = twimap_data(map, struct block_dev*); - twimap_printf(map, "%p", bdev->hd_dev->last_result.sense_key); + twimap_printf(map, "%d", bdev->end_lba); } void -__blk_rd_wwid(struct twimap* map) +__blk_rd_size(struct twimap* map) { struct block_dev* bdev = twimap_data(map, struct block_dev*); - uint32_t h = bdev->hd_dev->wwn >> 32; - uint32_t l = (uint32_t)bdev->hd_dev->wwn; - twimap_printf(map, "%x%x", h, l); + twimap_printf( + map, "%u", (u32_t)(bdev->end_lba - bdev->start_lba) * bdev->blk_size); } void -blk_set_blkmapping(struct block_dev* bdev) +__map_internal(struct block_dev* bdev, void* fsnode) { - struct twifs_node* dev_root = twifs_dir_node(blk_root, bdev->bdev_id); + 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, "secsize"); - map->read = __blk_rd_secsize; - - map = twifs_mapping(dev_root, bdev, "range"); - map->read = __blk_rd_range; + map = twifs_mapping(dev_root, bdev, "lblk_size"); + map->read = __blk_rd_lblksz; - map = twifs_mapping(dev_root, bdev, "model"); - map->read = __blk_rd_model; + map = twifs_mapping(dev_root, bdev, "name"); + map->read = __blk_rd_name; - map = twifs_mapping(dev_root, bdev, "serial"); - map->read = __blk_rd_serial; + map = twifs_mapping(dev_root, bdev, "begin"); + map->read = __blk_rd_start_lba; - map = twifs_mapping(dev_root, bdev, "status"); - map->read = __blk_rd_status; + map = twifs_mapping(dev_root, bdev, "end"); + map->read = __blk_rd_end_lba; +} - map = twifs_mapping(dev_root, bdev, "error"); - map->read = __blk_rd_error; +void +blk_set_blkmapping(struct block_dev* bdev, void* fsnode) +{ + struct twifs_node* dev_root = (struct twifs_node*)fsnode; - map = twifs_mapping(dev_root, bdev, "sense-key"); - map->read = __blk_rd_sense_key; + __map_internal(bdev, dev_root); - map = twifs_mapping(dev_root, bdev, "wwid"); - map->read = __blk_rd_wwid; + 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