regression: elf loading
[lunaix-os.git] / lunaix-os / kernel / block / blk_mapping.c
index f6d1346b7e5bacad0e65660576eee4caaf54de49..7dae2b8c67f2548f4f1a21c41f0a3a721fa62d61 100644 (file)
@@ -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