46e8f458ac59dc0189d5b130b193b7745a843a65
[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 void
13 __blk_rd_size(struct twimap* map)
14 {
15     struct block_dev* bdev = twimap_data(map, struct block_dev*);
16     size_t secsize = bdev->blk_size;
17     twimap_printf(map, "%u", bdev->end_lba * secsize);
18 }
19
20 void
21 __blk_rd_lblksz(struct twimap* map)
22 {
23     struct block_dev* bdev = twimap_data(map, struct block_dev*);
24     size_t lblksz = bdev->blk_size;
25     twimap_printf(map, "%u", lblksz);
26 }
27
28 void
29 __blk_rd_name(struct twimap* map)
30 {
31     struct block_dev* bdev = twimap_data(map, struct block_dev*);
32     twimap_printf(map, "%s", bdev->name);
33 }
34
35 void
36 blk_set_blkmapping(struct block_dev* bdev, void* fsnode)
37 {
38     struct twifs_node* dev_root = (struct twifs_node*)fsnode;
39
40     struct twimap* map = twifs_mapping(dev_root, bdev, "size");
41     map->read = __blk_rd_size;
42
43     map = twifs_mapping(dev_root, bdev, "lblk_size");
44     map->read = __blk_rd_lblksz;
45
46     map = twifs_mapping(dev_root, bdev, "name");
47     map->read = __blk_rd_name;
48 }