]> Git Repo - qemu.git/blob - block/raw.c
Copy snapshots out of QCOW2 disk
[qemu.git] / block / raw.c
1
2 #include "qemu-common.h"
3 #include "block_int.h"
4 #include "module.h"
5
6 static int raw_open(BlockDriverState *bs, int flags)
7 {
8     bs->sg = bs->file->sg;
9     return 0;
10 }
11
12 static int raw_read(BlockDriverState *bs, int64_t sector_num,
13                     uint8_t *buf, int nb_sectors)
14 {
15     return bdrv_read(bs->file, sector_num, buf, nb_sectors);
16 }
17
18 static int raw_write(BlockDriverState *bs, int64_t sector_num,
19                      const uint8_t *buf, int nb_sectors)
20 {
21     return bdrv_write(bs->file, sector_num, buf, nb_sectors);
22 }
23
24 static BlockDriverAIOCB *raw_aio_readv(BlockDriverState *bs,
25     int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
26     BlockDriverCompletionFunc *cb, void *opaque)
27 {
28     return bdrv_aio_readv(bs->file, sector_num, qiov, nb_sectors, cb, opaque);
29 }
30
31 static BlockDriverAIOCB *raw_aio_writev(BlockDriverState *bs,
32     int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
33     BlockDriverCompletionFunc *cb, void *opaque)
34 {
35     return bdrv_aio_writev(bs->file, sector_num, qiov, nb_sectors, cb, opaque);
36 }
37
38 static void raw_close(BlockDriverState *bs)
39 {
40 }
41
42 static void raw_flush(BlockDriverState *bs)
43 {
44     bdrv_flush(bs->file);
45 }
46
47 static BlockDriverAIOCB *raw_aio_flush(BlockDriverState *bs,
48     BlockDriverCompletionFunc *cb, void *opaque)
49 {
50     return bdrv_aio_flush(bs->file, cb, opaque);
51 }
52
53 static int64_t raw_getlength(BlockDriverState *bs)
54 {
55     return bdrv_getlength(bs->file);
56 }
57
58 static int raw_truncate(BlockDriverState *bs, int64_t offset)
59 {
60     return bdrv_truncate(bs->file, offset);
61 }
62
63 static int raw_probe(const uint8_t *buf, int buf_size, const char *filename)
64 {
65    return 1; /* everything can be opened as raw image */
66 }
67
68 static int raw_is_inserted(BlockDriverState *bs)
69 {
70     return bdrv_is_inserted(bs->file);
71 }
72
73 static int raw_eject(BlockDriverState *bs, int eject_flag)
74 {
75     return bdrv_eject(bs->file, eject_flag);
76 }
77
78 static int raw_set_locked(BlockDriverState *bs, int locked)
79 {
80     bdrv_set_locked(bs->file, locked);
81     return 0;
82 }
83
84 static int raw_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
85 {
86    return bdrv_ioctl(bs->file, req, buf);
87 }
88
89 static BlockDriverAIOCB *raw_aio_ioctl(BlockDriverState *bs,
90         unsigned long int req, void *buf,
91         BlockDriverCompletionFunc *cb, void *opaque)
92 {
93    return bdrv_aio_ioctl(bs->file, req, buf, cb, opaque);
94 }
95
96 static int raw_create(const char *filename, QEMUOptionParameter *options)
97 {
98     return bdrv_create_file(filename, options);
99 }
100
101 static QEMUOptionParameter raw_create_options[] = {
102     {
103         .name = BLOCK_OPT_SIZE,
104         .type = OPT_SIZE,
105         .help = "Virtual disk size"
106     },
107     { NULL }
108 };
109
110 static int raw_has_zero_init(BlockDriverState *bs)
111 {
112     return bdrv_has_zero_init(bs->file);
113 }
114
115 static BlockDriver bdrv_raw = {
116     .format_name        = "raw",
117
118     /* It's really 0, but we need to make qemu_malloc() happy */
119     .instance_size      = 1,
120
121     .bdrv_open          = raw_open,
122     .bdrv_close         = raw_close,
123     .bdrv_read          = raw_read,
124     .bdrv_write         = raw_write,
125     .bdrv_flush         = raw_flush,
126     .bdrv_probe         = raw_probe,
127     .bdrv_getlength     = raw_getlength,
128     .bdrv_truncate      = raw_truncate,
129
130     .bdrv_aio_readv     = raw_aio_readv,
131     .bdrv_aio_writev    = raw_aio_writev,
132     .bdrv_aio_flush     = raw_aio_flush,
133
134     .bdrv_is_inserted   = raw_is_inserted,
135     .bdrv_eject         = raw_eject,
136     .bdrv_set_locked    = raw_set_locked,
137     .bdrv_ioctl         = raw_ioctl,
138     .bdrv_aio_ioctl     = raw_aio_ioctl,
139
140     .bdrv_create        = raw_create,
141     .create_options     = raw_create_options,
142     .bdrv_has_zero_init = raw_has_zero_init,
143 };
144
145 static void bdrv_raw_init(void)
146 {
147     bdrv_register(&bdrv_raw);
148 }
149
150 block_init(bdrv_raw_init);
This page took 0.031987 seconds and 4 git commands to generate.