fix dependency check logic cause config always disabled
[lunaix-os.git] / lunaix-os / kernel / block / blk_mapping.c
1 #include <lunaix/block.h>
2 #include <lunaix/fs/twifs.h>
3
4 static struct twifs_node* blk_root;
5
6 void
7 blk_mapping_init()
8 {
9     blk_root = twifs_dir_node(NULL, "block");
10 }
11
12 static void
13 __twimap_read_lblk_size(struct twimap* map)
14 {
15     struct block_dev* bdev = twimap_data(map, struct block_dev*);
16     size_t lblksz = bdev->blk_size;
17     twimap_printf(map, "%u", lblksz);
18 }
19
20 static void
21 __twimap_read_name(struct twimap* map)
22 {
23     struct block_dev* bdev = twimap_data(map, struct block_dev*);
24     twimap_printf(map, "%s", bdev->name);
25 }
26
27 static void
28 __twimap_read_lba_begin(struct twimap* map)
29 {
30     struct block_dev* bdev = twimap_data(map, struct block_dev*);
31     twimap_printf(map, "%d", bdev->start_lba);
32 }
33
34 static void
35 __twimap_read_lba_end(struct twimap* map)
36 {
37     struct block_dev* bdev = twimap_data(map, struct block_dev*);
38     twimap_printf(map, "%d", bdev->end_lba);
39 }
40
41 static void
42 __twimap_read_size(struct twimap* map)
43 {
44     struct block_dev* bdev = twimap_data(map, struct block_dev*);
45     twimap_printf(
46       map, "%u", (u32_t)(bdev->end_lba - bdev->start_lba) * bdev->blk_size);
47 }
48
49 void
50 __map_internal(struct block_dev* bdev, void* fsnode)
51 {
52     struct twifs_node* dev_root;
53     
54     dev_root = (struct twifs_node*)fsnode;
55     
56     twimap_export_value(dev_root, size,      FSACL_aR, bdev);
57     twimap_export_value(dev_root, lblk_size, FSACL_aR, bdev);
58     twimap_export_value(dev_root, name,      FSACL_aR, bdev);
59     twimap_export_value(dev_root, lba_begin, FSACL_aR, bdev);
60     twimap_export_value(dev_root, lba_end,   FSACL_aR, bdev);
61 }
62
63 void
64 blk_set_blkmapping(struct block_dev* bdev, void* fsnode)
65 {
66     struct twifs_node* dev_root = (struct twifs_node*)fsnode;
67
68     __map_internal(bdev, dev_root);
69
70     struct block_dev *pos, *n;
71     llist_for_each(pos, n, &bdev->parts, parts)
72     {
73         struct twifs_node* part_node = twifs_dir_node(dev_root, pos->bdev_id);
74         __map_internal(pos, part_node);
75     }
76 }