1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#include <common.h>
26#include <blk.h>
27#include <config.h>
28#include <fs_internal.h>
29#include <ext4fs.h>
30#include <ext_common.h>
31#include "ext4_common.h"
32#include <log.h>
33
34lbaint_t part_offset;
35
36static struct blk_desc *ext4fs_blk_desc;
37static struct disk_partition *part_info;
38
39void ext4fs_set_blk_dev(struct blk_desc *rbdd, struct disk_partition *info)
40{
41 assert(rbdd->blksz == (1 << rbdd->log2blksz));
42 ext4fs_blk_desc = rbdd;
43 get_fs()->dev_desc = rbdd;
44 part_info = info;
45 part_offset = info->start;
46 get_fs()->total_sect = ((uint64_t)info->size * info->blksz) >>
47 get_fs()->dev_desc->log2blksz;
48}
49
50int ext4fs_devread(lbaint_t sector, int byte_offset, int byte_len,
51 char *buffer)
52{
53 return fs_devread(get_fs()->dev_desc, part_info, sector, byte_offset,
54 byte_len, buffer);
55}
56
57int ext4_read_superblock(char *buffer)
58{
59 struct ext_filesystem *fs = get_fs();
60 int sect = SUPERBLOCK_START >> fs->dev_desc->log2blksz;
61 int off = SUPERBLOCK_START % fs->dev_desc->blksz;
62
63 return ext4fs_devread(sect, off, SUPERBLOCK_SIZE,
64 buffer);
65}
66