feat: add support for process to conduct Intel x87 and MMX related task.
[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->hd_dev->block_size;
17     twimap_printf(map, "%u", (bdev->end_lba - bdev->base_lba) * secsize);
18 }
19
20 void
21 __blk_rd_secsize(struct twimap* map)
22 {
23     struct block_dev* bdev = twimap_data(map, struct block_dev*);
24     size_t secsize = bdev->hd_dev->block_size;
25     twimap_printf(map, "%u", secsize);
26 }
27
28 void
29 __blk_rd_range(struct twimap* map)
30 {
31     struct block_dev* bdev = twimap_data(map, struct block_dev*);
32     twimap_printf(
33       map, "%u,%u", (uint32_t)bdev->base_lba, (uint32_t)bdev->end_lba);
34 }
35
36 void
37 __blk_rd_model(struct twimap* map)
38 {
39     struct block_dev* bdev = twimap_data(map, struct block_dev*);
40     twimap_printf(map, "%s", bdev->hd_dev->model);
41 }
42
43 void
44 __blk_rd_serial(struct twimap* map)
45 {
46     struct block_dev* bdev = twimap_data(map, struct block_dev*);
47     twimap_printf(map, "%s", bdev->hd_dev->serial_num);
48 }
49
50 void
51 __blk_rd_status(struct twimap* map)
52 {
53     struct block_dev* bdev = twimap_data(map, struct block_dev*);
54     twimap_printf(map, "%p", bdev->hd_dev->last_result.status);
55 }
56
57 void
58 __blk_rd_error(struct twimap* map)
59 {
60     struct block_dev* bdev = twimap_data(map, struct block_dev*);
61     twimap_printf(map, "%p", bdev->hd_dev->last_result.error);
62 }
63
64 void
65 __blk_rd_sense_key(struct twimap* map)
66 {
67     struct block_dev* bdev = twimap_data(map, struct block_dev*);
68     twimap_printf(map, "%p", bdev->hd_dev->last_result.sense_key);
69 }
70
71 void
72 __blk_rd_wwid(struct twimap* map)
73 {
74     struct block_dev* bdev = twimap_data(map, struct block_dev*);
75     uint32_t h = bdev->hd_dev->wwn >> 32;
76     uint32_t l = (uint32_t)bdev->hd_dev->wwn;
77     twimap_printf(map, "%x%x", h, l);
78 }
79
80 void
81 blk_set_blkmapping(struct block_dev* bdev)
82 {
83     struct twifs_node* dev_root = twifs_dir_node(blk_root, bdev->bdev_id);
84
85     struct twimap* map = twifs_mapping(dev_root, bdev, "size");
86     map->read = __blk_rd_size;
87
88     map = twifs_mapping(dev_root, bdev, "secsize");
89     map->read = __blk_rd_secsize;
90
91     map = twifs_mapping(dev_root, bdev, "range");
92     map->read = __blk_rd_range;
93
94     map = twifs_mapping(dev_root, bdev, "model");
95     map->read = __blk_rd_model;
96
97     map = twifs_mapping(dev_root, bdev, "serial");
98     map->read = __blk_rd_serial;
99
100     map = twifs_mapping(dev_root, bdev, "status");
101     map->read = __blk_rd_status;
102
103     map = twifs_mapping(dev_root, bdev, "error");
104     map->read = __blk_rd_error;
105
106     map = twifs_mapping(dev_root, bdev, "sense-key");
107     map->read = __blk_rd_sense_key;
108
109     map = twifs_mapping(dev_root, bdev, "wwid");
110     map->read = __blk_rd_wwid;
111 }