Multiuser, Capabilities and Access Controls (#54)
[lunaix-os.git] / lunaix-os / kernel / block / blk_mapping.c
index 46e8f458ac59dc0189d5b130b193b7745a843a65..ddc360a4e952a9250bb96b6b032d663585753812 100644 (file)
@@ -9,27 +9,55 @@ blk_mapping_init()
     blk_root = twifs_dir_node(NULL, "block");
 }
 
     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*);
 {
     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*);
 {
     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*);
 {
     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
 }
 
 void
@@ -37,12 +65,12 @@ blk_set_blkmapping(struct block_dev* bdev, void* fsnode)
 {
     struct twifs_node* dev_root = (struct twifs_node*)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
 }
\ No newline at end of file