#include "block.h"
#include "qemu-option.h"
+#include "qemu-queue.h"
#define BLOCK_FLAG_ENCRYPT 1
#define BLOCK_FLAG_COMPRESS 2
int instance_size;
int (*bdrv_probe)(const uint8_t *buf, int buf_size, const char *filename);
int (*bdrv_probe_device)(const char *filename);
- int (*bdrv_open)(BlockDriverState *bs, const char *filename, int flags);
+ int (*bdrv_open)(BlockDriverState *bs, int flags);
+ int (*bdrv_file_open)(BlockDriverState *bs, const char *filename, int flags);
int (*bdrv_read)(BlockDriverState *bs, int64_t sector_num,
uint8_t *buf, int nb_sectors);
int (*bdrv_write)(BlockDriverState *bs, int64_t sector_num,
/* Returns number of errors in image, -errno for internal errors */
int (*bdrv_check)(BlockDriverState* bs);
+ void (*bdrv_debug_event)(BlockDriverState *bs, BlkDebugEvent event);
+
/* Set if newly created images are not guaranteed to contain only zeros */
int no_zero_init;
- struct BlockDriver *next;
+ QLIST_ENTRY(BlockDriver) list;
};
struct BlockDriverState {
int media_changed;
BlockDriverState *backing_hd;
+ BlockDriverState *file;
+
/* async read/write emulation */
void *sync_aiocb;
char device_name[32];
unsigned long *dirty_bitmap;
int64_t dirty_count;
- BlockDriverState *next;
+ QTAILQ_ENTRY(BlockDriverState) list;
void *private;
};
void *qemu_blockalign(BlockDriverState *bs, size_t size);
-extern BlockDriverState *bdrv_first;
-
#ifdef _WIN32
int is_windows_drive(const char *filename);
#endif
typedef struct BlockConf {
struct DriveInfo *dinfo;
uint16_t physical_block_size;
+ uint16_t logical_block_size;
uint16_t min_io_size;
uint32_t opt_io_size;
} BlockConf;
#define DEFINE_BLOCK_PROPERTIES(_state, _conf) \
DEFINE_PROP_DRIVE("drive", _state, _conf.dinfo), \
+ DEFINE_PROP_UINT16("logical_block_size", _state, \
+ _conf.logical_block_size, 512), \
DEFINE_PROP_UINT16("physical_block_size", _state, \
_conf.physical_block_size, 512), \
DEFINE_PROP_UINT16("min_io_size", _state, _conf.min_io_size, 512), \