Statistics
| Branch: | Revision:

root / block / raw.c @ afbaa7b4

History | View | Annotate | Download (3.7 kB)

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