#define BLOCK_FLAG_COMPRESS 2
#define BLOCK_FLAG_COMPAT6 4
+typedef struct AIOPool {
+ void (*cancel)(BlockDriverAIOCB *acb);
+ int aiocb_size;
+ BlockDriverAIOCB *free_aiocb;
+} AIOPool;
+
struct BlockDriver {
const char *format_name;
int instance_size;
int aiocb_size;
const char *protocol_name;
- int (*bdrv_pread)(BlockDriverState *bs, int64_t offset,
- uint8_t *buf, int count);
- int (*bdrv_pwrite)(BlockDriverState *bs, int64_t offset,
- const uint8_t *buf, int count);
int (*bdrv_truncate)(BlockDriverState *bs, int64_t offset);
int64_t (*bdrv_getlength)(BlockDriverState *bs);
int (*bdrv_write_compressed)(BlockDriverState *bs, int64_t sector_num,
/* to control generic scsi devices */
int (*bdrv_ioctl)(BlockDriverState *bs, unsigned long int req, void *buf);
- int (*bdrv_sg_send_command)(BlockDriverState *bs, void *buf, int count);
- int (*bdrv_sg_recv_response)(BlockDriverState *bs, void *buf, int count);
- BlockDriverAIOCB *(*bdrv_sg_aio_read)(BlockDriverState *bs,
- void *buf, int count,
- BlockDriverCompletionFunc *cb,
- void *opaque);
- BlockDriverAIOCB *(*bdrv_sg_aio_write)(BlockDriverState *bs,
- void *buf, int count,
- BlockDriverCompletionFunc *cb,
- void *opaque);
+ BlockDriverAIOCB *(*bdrv_aio_ioctl)(BlockDriverState *bs,
+ unsigned long int req, void *buf,
+ BlockDriverCompletionFunc *cb, void *opaque);
+
+ AIOPool aio_pool;
+
+ /* new create with backing file format */
+ int (*bdrv_create2)(const char *filename, int64_t total_sectors,
+ const char *backing_file, const char *backing_format,
+ int flags);
- BlockDriverAIOCB *free_aiocb;
struct BlockDriver *next;
};
char filename[1024];
char backing_file[1024]; /* if non zero, the image is a diff of
this file image */
+ char backing_format[16]; /* if non-zero and backing_file exists */
int is_temporary;
int media_changed;
};
struct BlockDriverAIOCB {
+ AIOPool *pool;
BlockDriverState *bs;
BlockDriverCompletionFunc *cb;
void *opaque;
void get_tmp_filename(char *filename, int size);
+void aio_pool_init(AIOPool *pool, int aiocb_size,
+ void (*cancel)(BlockDriverAIOCB *acb));
+
void *qemu_aio_get(BlockDriverState *bs, BlockDriverCompletionFunc *cb,
void *opaque);
+void *qemu_aio_get_pool(AIOPool *pool, BlockDriverState *bs,
+ BlockDriverCompletionFunc *cb, void *opaque);
void qemu_aio_release(void *p);
extern BlockDriverState *bdrv_first;