1
2
3
# ifndef BLOCK_H
# define BLOCK_H
4
# include "qemu-aio.h"
5
# include "qemu-common.h"
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* block.c */
typedef struct BlockDriver BlockDriver ;
extern BlockDriver bdrv_raw ;
extern BlockDriver bdrv_host_device ;
extern BlockDriver bdrv_cow ;
extern BlockDriver bdrv_qcow ;
extern BlockDriver bdrv_vmdk ;
extern BlockDriver bdrv_cloop ;
extern BlockDriver bdrv_dmg ;
extern BlockDriver bdrv_bochs ;
extern BlockDriver bdrv_vpc ;
extern BlockDriver bdrv_vvfat ;
extern BlockDriver bdrv_qcow2 ;
extern BlockDriver bdrv_parallels ;
ths
authored
17 years ago
22
extern BlockDriver bdrv_nbd ;
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
typedef struct BlockDriverInfo {
/* in bytes, 0 if irrelevant */
int cluster_size ;
/* offset at which the VM state can be saved (0 if not possible) */
int64_t vm_state_offset ;
} BlockDriverInfo ;
typedef struct QEMUSnapshotInfo {
char id_str [ 128 ]; /* unique snapshot id */
/* the following fields are informative . They are not needed for
the consistency of the snapshot */
char name [ 256 ]; /* user choosen name */
uint32_t vm_state_size ; /* VM state info size */
uint32_t date_sec ; /* UTC date of the snapshot */
uint32_t date_nsec ;
uint64_t vm_clock_nsec ; /* VM clock relative to boot */
} QEMUSnapshotInfo ;
# define BDRV_O_RDONLY 0x0000
# define BDRV_O_RDWR 0x0002
# define BDRV_O_ACCESS 0x0003
# define BDRV_O_CREAT 0x0004 /* create an empty file */
# define BDRV_O_SNAPSHOT 0x0008 /* open the file read only and save writes in a snapshot */
# define BDRV_O_FILE 0x0010 /* open as a raw file ( do not try to
use a disk image format on top of
it ( default for
bdrv_file_open ()) */
51
52
# define BDRV_O_NOCACHE 0x0020 /* do not use the host page cache */
# define BDRV_O_CACHE_WB 0x0040 /* use write-back caching */
53
# define BDRV_O_CACHE_DEF 0x0080 /* use default caching */
54
55
# define BDRV_O_CACHE_MASK ( BDRV_O_NOCACHE | BDRV_O_CACHE_WB | BDRV_O_CACHE_DEF )
56
57
58
void bdrv_info ( Monitor * mon );
void bdrv_info_stats ( Monitor * mon );
59
60
61
62
63
64
void bdrv_init ( void );
BlockDriver * bdrv_find_format ( const char * format_name );
int bdrv_create ( BlockDriver * drv ,
const char * filename , int64_t size_in_sectors ,
const char * backing_file , int flags );
65
66
67
68
int bdrv_create2 ( BlockDriver * drv ,
const char * filename , int64_t size_in_sectors ,
const char * backing_file , const char * backing_format ,
int flags );
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
BlockDriverState * bdrv_new ( const char * device_name );
void bdrv_delete ( BlockDriverState * bs );
int bdrv_file_open ( BlockDriverState ** pbs , const char * filename , int flags );
int bdrv_open ( BlockDriverState * bs , const char * filename , int flags );
int bdrv_open2 ( BlockDriverState * bs , const char * filename , int flags ,
BlockDriver * drv );
void bdrv_close ( BlockDriverState * bs );
int bdrv_read ( BlockDriverState * bs , int64_t sector_num ,
uint8_t * buf , int nb_sectors );
int bdrv_write ( BlockDriverState * bs , int64_t sector_num ,
const uint8_t * buf , int nb_sectors );
int bdrv_pread ( BlockDriverState * bs , int64_t offset ,
void * buf , int count );
int bdrv_pwrite ( BlockDriverState * bs , int64_t offset ,
const void * buf , int count );
int bdrv_truncate ( BlockDriverState * bs , int64_t offset );
int64_t bdrv_getlength ( BlockDriverState * bs );
ths
authored
17 years ago
86
void bdrv_get_geometry ( BlockDriverState * bs , uint64_t * nb_sectors_ptr );
87
void bdrv_guess_geometry ( BlockDriverState * bs , int * pcyls , int * pheads , int * psecs );
88
89
90
91
92
int bdrv_commit ( BlockDriverState * bs );
/* async block I/O */
typedef struct BlockDriverAIOCB BlockDriverAIOCB ;
typedef void BlockDriverCompletionFunc ( void * opaque , int ret );
93
94
95
96
97
98
BlockDriverAIOCB * bdrv_aio_readv ( BlockDriverState * bs , int64_t sector_num ,
QEMUIOVector * iov , int nb_sectors ,
BlockDriverCompletionFunc * cb , void * opaque );
BlockDriverAIOCB * bdrv_aio_writev ( BlockDriverState * bs , int64_t sector_num ,
QEMUIOVector * iov , int nb_sectors ,
BlockDriverCompletionFunc * cb , void * opaque );
99
100
void bdrv_aio_cancel ( BlockDriverAIOCB * acb );
101
/* sg packet commands */
102
103
104
105
int bdrv_ioctl ( BlockDriverState * bs , unsigned long int req , void * buf );
BlockDriverAIOCB * bdrv_aio_ioctl ( BlockDriverState * bs ,
unsigned long int req , void * buf ,
BlockDriverCompletionFunc * cb , void * opaque );
106
107
108
/* Ensure contents are flushed to disk. */
void bdrv_flush ( BlockDriverState * bs );
109
110
void bdrv_flush_all ( void );
ths
authored
17 years ago
111
112
int bdrv_is_allocated ( BlockDriverState * bs , int64_t sector_num , int nb_sectors ,
int * pnum );
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# define BDRV_TYPE_HD 0
# define BDRV_TYPE_CDROM 1
# define BDRV_TYPE_FLOPPY 2
# define BIOS_ATA_TRANSLATION_AUTO 0
# define BIOS_ATA_TRANSLATION_NONE 1
# define BIOS_ATA_TRANSLATION_LBA 2
# define BIOS_ATA_TRANSLATION_LARGE 3
# define BIOS_ATA_TRANSLATION_RECHS 4
void bdrv_set_geometry_hint ( BlockDriverState * bs ,
int cyls , int heads , int secs );
void bdrv_set_type_hint ( BlockDriverState * bs , int type );
void bdrv_set_translation_hint ( BlockDriverState * bs , int translation );
void bdrv_get_geometry_hint ( BlockDriverState * bs ,
int * pcyls , int * pheads , int * psecs );
int bdrv_get_type_hint ( BlockDriverState * bs );
int bdrv_get_translation_hint ( BlockDriverState * bs );
int bdrv_is_removable ( BlockDriverState * bs );
int bdrv_is_read_only ( BlockDriverState * bs );
ths
authored
17 years ago
133
int bdrv_is_sg ( BlockDriverState * bs );
134
135
136
137
138
139
140
141
142
int bdrv_is_inserted ( BlockDriverState * bs );
int bdrv_media_changed ( BlockDriverState * bs );
int bdrv_is_locked ( BlockDriverState * bs );
void bdrv_set_locked ( BlockDriverState * bs , int locked );
void bdrv_eject ( BlockDriverState * bs , int eject_flag );
void bdrv_set_change_cb ( BlockDriverState * bs ,
void ( * change_cb )( void * opaque ), void * opaque );
void bdrv_get_format ( BlockDriverState * bs , char * buf , int buf_size );
BlockDriverState * bdrv_find ( const char * name );
143
144
void bdrv_iterate ( void ( * it )( void * opaque , BlockDriverState * bs ),
void * opaque );
145
int bdrv_is_encrypted ( BlockDriverState * bs );
146
int bdrv_key_required ( BlockDriverState * bs );
147
int bdrv_set_key ( BlockDriverState * bs , const char * key );
148
int bdrv_query_missing_keys ( void );
149
150
151
152
153
154
155
void bdrv_iterate_format ( void ( * it )( void * opaque , const char * name ),
void * opaque );
const char * bdrv_get_device_name ( BlockDriverState * bs );
int bdrv_write_compressed ( BlockDriverState * bs , int64_t sector_num ,
const uint8_t * buf , int nb_sectors );
int bdrv_get_info ( BlockDriverState * bs , BlockDriverInfo * bdi );
156
const char * bdrv_get_encrypted_filename ( BlockDriverState * bs );
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
void bdrv_get_backing_filename ( BlockDriverState * bs ,
char * filename , int filename_size );
int bdrv_snapshot_create ( BlockDriverState * bs ,
QEMUSnapshotInfo * sn_info );
int bdrv_snapshot_goto ( BlockDriverState * bs ,
const char * snapshot_id );
int bdrv_snapshot_delete ( BlockDriverState * bs , const char * snapshot_id );
int bdrv_snapshot_list ( BlockDriverState * bs ,
QEMUSnapshotInfo ** psn_info );
char * bdrv_snapshot_dump ( char * buf , int buf_size , QEMUSnapshotInfo * sn );
char * get_human_readable_size ( char * buf , int buf_size , int64_t size );
int path_is_absolute ( const char * path );
void path_combine ( char * dest , int dest_size ,
const char * base_path ,
const char * filename );
174
175
176
177
178
int bdrv_put_buffer ( BlockDriverState * bs , const uint8_t * buf ,
int64_t pos , int size );
int bdrv_get_buffer ( BlockDriverState * bs , uint8_t * buf , int64_t pos , int size );
179
# endif