1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24: #ifndef BLOCK_INT_H
25: #define BLOCK_INT_H
26:
27: #include "block.h"
28:
29: #define BLOCK_FLAG_ENCRYPT 1
30: #define BLOCK_FLAG_COMPRESS 2
31: #define BLOCK_FLAG_COMPAT6 4
32:
33: struct BlockDriver {
34: const char *format_name;
35: int instance_size;
36: int (*bdrv_probe)(const uint8_t *buf, int buf_size, const char *filename);
37: int (*bdrv_open)(BlockDriverState *bs, const char *filename, int flags);
38: int (*bdrv_read)(BlockDriverState *bs, int64_t sector_num,
39: uint8_t *buf, int nb_sectors);
40: int (*bdrv_write)(BlockDriverState *bs, int64_t sector_num,
41: const uint8_t *buf, int nb_sectors);
42: void (*bdrv_close)(BlockDriverState *bs);
43: int (*bdrv_create)(const char *filename, int64_t total_sectors,
44: const char *backing_file, int flags);
45: void (*bdrv_flush)(BlockDriverState *bs);
46: int (*bdrv_is_allocated)(BlockDriverState *bs, int64_t sector_num,
47: int nb_sectors, int *pnum);
48: int (*bdrv_set_key)(BlockDriverState *bs, const char *key);
49: int (*bdrv_make_empty)(BlockDriverState *bs);
50:
51: BlockDriverAIOCB *(*bdrv_aio_read)(BlockDriverState *bs,
52: int64_t sector_num, uint8_t *buf, int nb_sectors,
53: BlockDriverCompletionFunc *cb, void *opaque);
54: BlockDriverAIOCB *(*bdrv_aio_write)(BlockDriverState *bs,
55: int64_t sector_num, const uint8_t *buf, int nb_sectors,
56: BlockDriverCompletionFunc *cb, void *opaque);
57: void (*bdrv_aio_cancel)(BlockDriverAIOCB *acb);
58: int aiocb_size;
59:
60: const char *protocol_name;
61: int (*bdrv_pread)(BlockDriverState *bs, int64_t offset,
62: uint8_t *buf, int count);
63: int (*bdrv_pwrite)(BlockDriverState *bs, int64_t offset,
64: const uint8_t *buf, int count);
65: int (*bdrv_truncate)(BlockDriverState *bs, int64_t offset);
66: int64_t (*bdrv_getlength)(BlockDriverState *bs);
67: int (*bdrv_write_compressed)(BlockDriverState *bs, int64_t sector_num,
68: const uint8_t *buf, int nb_sectors);
69:
70: int (*bdrv_snapshot_create)(BlockDriverState *bs,
71: QEMUSnapshotInfo *sn_info);
72: int (*bdrv_snapshot_goto)(BlockDriverState *bs,
73: const char *snapshot_id);
74: int (*bdrv_snapshot_delete)(BlockDriverState *bs, const char *snapshot_id);
75: int (*bdrv_snapshot_list)(BlockDriverState *bs,
76: QEMUSnapshotInfo **psn_info);
77: int (*bdrv_get_info)(BlockDriverState *bs, BlockDriverInfo *bdi);
78:
79:
80: int (*bdrv_is_inserted)(BlockDriverState *bs);
81: int (*bdrv_media_changed)(BlockDriverState *bs);
82: int (*bdrv_eject)(BlockDriverState *bs, int eject_flag);
83: int (*bdrv_set_locked)(BlockDriverState *bs, int locked);
84:
85:
86: int (*bdrv_ioctl)(BlockDriverState *bs, unsigned long int req, void *buf);
87:
88: BlockDriverAIOCB *free_aiocb;
89: struct BlockDriver *next;
90: };
91:
92: struct BlockDriverState {
93: int64_t total_sectors;
94:
95: int read_only;
96: int removable;
97: int locked;
98: int encrypted;
99: int sg;
100:
101: void (*change_cb)(void *opaque);
102: void *change_opaque;
103:
104: BlockDriver *drv;
105: void *opaque;
106:
107: int boot_sector_enabled;
108: uint8_t boot_sector_data[512];
109:
110: char filename[1024];
111: char backing_file[1024];
112:
113: int is_temporary;
114: int media_changed;
115:
116: BlockDriverState *backing_hd;
117:
118:
119: void *sync_aiocb;
120:
121:
122: uint64_t rd_bytes;
123: uint64_t wr_bytes;
124: uint64_t rd_ops;
125: uint64_t wr_ops;
126:
127:
128:
129: int cyls, heads, secs, translation;
130: int type;
131: char device_name[32];
132: BlockDriverState *next;
133: };
134:
135: struct BlockDriverAIOCB {
136: BlockDriverState *bs;
137: BlockDriverCompletionFunc *cb;
138: void *opaque;
139: BlockDriverAIOCB *next;
140: };
141:
142: void get_tmp_filename(char *filename, int size);
143:
144: void *qemu_aio_get(BlockDriverState *bs, BlockDriverCompletionFunc *cb,
145: void *opaque);
146: void qemu_aio_release(void *p);
147:
148: BlockDriverState *bdrv_first;
149:
150: #endif