-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathblkdev.h
More file actions
69 lines (56 loc) · 2.05 KB
/
Copy pathblkdev.h
File metadata and controls
69 lines (56 loc) · 2.05 KB
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#ifndef _BLKDEV_H
#define _BLKDEV_H
/**
* 最大支持的块设备数量
*/
#define MAX_BLOCK_DEV_NR 2
/*
数据页表格式:
32位格式:10,10,12
*/
#define BLOCK_SHIFT 12
#define BLOCK_SIZE (1 << BLOCK_SHIFT) /* 4kb block */
#define BLOCK_MASK (BLOCK_SIZE - 1)
#define GET_BLOCK_OFF(addr) (((addr) & BLOCK_MASK) >> 0)
#define BMD_SHIFT (BLOCK_SHIFT + 10)
#define BMD_SIZE (1 << BMD_SHIFT)
#define BMD_MASK (BMD_SIZE - 1)
#define GET_BMD_OFF(addr) (((addr) & BMD_MASK) >> BLOCK_SHIFT)
#define BGD_SHIFT (BMD_SHIFT + 10)
#define BGD_SIZE (1 << BGD_SHIFT)
#define BGD_MASK (BGD_SIZE - 1)
#define GET_BGD_OFF(addr) (((addr) & BGD_MASK) >> BMD_SHIFT)
#define __IO
#define BLOCK_DATA_SIZE (256 * 1024 * 1024) // 256 MB
#define MAX_BLOCK_NR (BLOCK_DATA_SIZE / BLOCK_SIZE)
#define SECTOR_SIZE 512
struct blkdev {
char *name;
unsigned long blksz;
unsigned long blkcnt;
int (*open)(struct blkdev *bdev, int flags);
int (*close)(struct blkdev *bdev);
int (*read)(struct blkdev *bdev, unsigned long lba, void *buf, unsigned long sectors);
int (*write)(struct blkdev *bdev, unsigned long lba, void *buf, unsigned long sectors);
void *data;
int ref;
};
extern int add_blkdev(struct blkdev *bdev);
extern int del_blkdev(struct blkdev *bdev);
extern int open_blkdev(struct blkdev *bdev, int flags);
extern int close_blkdev(struct blkdev *bdev);
extern __IO long write_block(struct blkdev *bdev, unsigned long blk, unsigned long off, void *buf, long len);
extern __IO long read_block(struct blkdev *bdev, unsigned long blk, unsigned long off, void *buf, long len);
extern long get_capacity(struct blkdev *bdev);
extern struct blkdev *search_blkdev(char *name);
void init_blkdev(void);
void exit_blkdev(void);
void list_blkdev(void);
void sync_all_blkdev(void);
/**
* 使用缓存的块读写函数
*/
extern __IO long cached_read_block(struct blkdev *bdev, unsigned long blk, void *buf);
extern __IO long cached_write_block(struct blkdev *bdev, unsigned long blk, void *buf);
extern int sync_cached_blocks(struct blkdev *bdev);
#endif /* _BLKDEV_H */