Statistics
| Branch: | Revision:

root / block / raw.c @ c6df7102

History | View | Annotate | Download (3.9 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 205ef796 Kevin Wolf
static int raw_flush(BlockDriverState *bs)
43 84a12e66 Christoph Hellwig
{
44 205ef796 Kevin Wolf
    return 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 bb8bf76f Christoph Hellwig
static int raw_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors)
69 bb8bf76f Christoph Hellwig
{
70 bb8bf76f Christoph Hellwig
    return bdrv_discard(bs->file, sector_num, nb_sectors);
71 bb8bf76f Christoph Hellwig
}
72 bb8bf76f Christoph Hellwig
73 84a12e66 Christoph Hellwig
static int raw_is_inserted(BlockDriverState *bs)
74 84a12e66 Christoph Hellwig
{
75 66f82cee Kevin Wolf
    return bdrv_is_inserted(bs->file);
76 84a12e66 Christoph Hellwig
}
77 84a12e66 Christoph Hellwig
78 84a12e66 Christoph Hellwig
static int raw_eject(BlockDriverState *bs, int eject_flag)
79 84a12e66 Christoph Hellwig
{
80 66f82cee Kevin Wolf
    return bdrv_eject(bs->file, eject_flag);
81 84a12e66 Christoph Hellwig
}
82 84a12e66 Christoph Hellwig
83 84a12e66 Christoph Hellwig
static int raw_set_locked(BlockDriverState *bs, int locked)
84 84a12e66 Christoph Hellwig
{
85 66f82cee Kevin Wolf
    bdrv_set_locked(bs->file, locked);
86 84a12e66 Christoph Hellwig
    return 0;
87 84a12e66 Christoph Hellwig
}
88 84a12e66 Christoph Hellwig
89 84a12e66 Christoph Hellwig
static int raw_ioctl(BlockDriverState *bs, unsigned long int req, void *buf)
90 84a12e66 Christoph Hellwig
{
91 66f82cee Kevin Wolf
   return bdrv_ioctl(bs->file, req, buf);
92 84a12e66 Christoph Hellwig
}
93 84a12e66 Christoph Hellwig
94 84a12e66 Christoph Hellwig
static BlockDriverAIOCB *raw_aio_ioctl(BlockDriverState *bs,
95 84a12e66 Christoph Hellwig
        unsigned long int req, void *buf,
96 84a12e66 Christoph Hellwig
        BlockDriverCompletionFunc *cb, void *opaque)
97 84a12e66 Christoph Hellwig
{
98 66f82cee Kevin Wolf
   return bdrv_aio_ioctl(bs->file, req, buf, cb, opaque);
99 84a12e66 Christoph Hellwig
}
100 84a12e66 Christoph Hellwig
101 84a12e66 Christoph Hellwig
static int raw_create(const char *filename, QEMUOptionParameter *options)
102 84a12e66 Christoph Hellwig
{
103 84a12e66 Christoph Hellwig
    return bdrv_create_file(filename, options);
104 84a12e66 Christoph Hellwig
}
105 84a12e66 Christoph Hellwig
106 84a12e66 Christoph Hellwig
static QEMUOptionParameter raw_create_options[] = {
107 84a12e66 Christoph Hellwig
    {
108 84a12e66 Christoph Hellwig
        .name = BLOCK_OPT_SIZE,
109 84a12e66 Christoph Hellwig
        .type = OPT_SIZE,
110 84a12e66 Christoph Hellwig
        .help = "Virtual disk size"
111 84a12e66 Christoph Hellwig
    },
112 84a12e66 Christoph Hellwig
    { NULL }
113 84a12e66 Christoph Hellwig
};
114 84a12e66 Christoph Hellwig
115 336c1c12 Kevin Wolf
static int raw_has_zero_init(BlockDriverState *bs)
116 336c1c12 Kevin Wolf
{
117 336c1c12 Kevin Wolf
    return bdrv_has_zero_init(bs->file);
118 336c1c12 Kevin Wolf
}
119 336c1c12 Kevin Wolf
120 84a12e66 Christoph Hellwig
static BlockDriver bdrv_raw = {
121 84a12e66 Christoph Hellwig
    .format_name        = "raw",
122 84a12e66 Christoph Hellwig
123 66f82cee Kevin Wolf
    /* It's really 0, but we need to make qemu_malloc() happy */
124 66f82cee Kevin Wolf
    .instance_size      = 1,
125 84a12e66 Christoph Hellwig
126 84a12e66 Christoph Hellwig
    .bdrv_open          = raw_open,
127 84a12e66 Christoph Hellwig
    .bdrv_close         = raw_close,
128 84a12e66 Christoph Hellwig
    .bdrv_read          = raw_read,
129 84a12e66 Christoph Hellwig
    .bdrv_write         = raw_write,
130 84a12e66 Christoph Hellwig
    .bdrv_flush         = raw_flush,
131 84a12e66 Christoph Hellwig
    .bdrv_probe         = raw_probe,
132 84a12e66 Christoph Hellwig
    .bdrv_getlength     = raw_getlength,
133 84a12e66 Christoph Hellwig
    .bdrv_truncate      = raw_truncate,
134 84a12e66 Christoph Hellwig
135 84a12e66 Christoph Hellwig
    .bdrv_aio_readv     = raw_aio_readv,
136 84a12e66 Christoph Hellwig
    .bdrv_aio_writev    = raw_aio_writev,
137 84a12e66 Christoph Hellwig
    .bdrv_aio_flush     = raw_aio_flush,
138 bb8bf76f Christoph Hellwig
    .bdrv_discard       = raw_discard,
139 84a12e66 Christoph Hellwig
140 84a12e66 Christoph Hellwig
    .bdrv_is_inserted   = raw_is_inserted,
141 84a12e66 Christoph Hellwig
    .bdrv_eject         = raw_eject,
142 84a12e66 Christoph Hellwig
    .bdrv_set_locked    = raw_set_locked,
143 84a12e66 Christoph Hellwig
    .bdrv_ioctl         = raw_ioctl,
144 84a12e66 Christoph Hellwig
    .bdrv_aio_ioctl     = raw_aio_ioctl,
145 84a12e66 Christoph Hellwig
146 84a12e66 Christoph Hellwig
    .bdrv_create        = raw_create,
147 84a12e66 Christoph Hellwig
    .create_options     = raw_create_options,
148 336c1c12 Kevin Wolf
    .bdrv_has_zero_init = raw_has_zero_init,
149 84a12e66 Christoph Hellwig
};
150 84a12e66 Christoph Hellwig
151 84a12e66 Christoph Hellwig
static void bdrv_raw_init(void)
152 84a12e66 Christoph Hellwig
{
153 84a12e66 Christoph Hellwig
    bdrv_register(&bdrv_raw);
154 84a12e66 Christoph Hellwig
}
155 84a12e66 Christoph Hellwig
156 84a12e66 Christoph Hellwig
block_init(bdrv_raw_init);