18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef BLOCK_H 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define BLOCK_H 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 4749dfb869375c380c2b4dc03cc7fa0fece11796aDavid 'Digit' Turner#include "block/aio.h" 55d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "qemu-common.h" 693e0d9cfb6d950b638ba93cf5318e5689e4ba64eDavid 'Digit' Turner#include "qemu/option.h" 71c31e3e43ce4cca85a707dfff631e5e102fdecedDavid 'Digit' Turner#include "qapi/qmp/qobject.h" 85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* block.c */ 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct BlockDriver BlockDriver; 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct BlockDriverInfo { 138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* in bytes, 0 if irrelevant */ 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int cluster_size; 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* offset at which the VM state can be saved (0 if not possible) */ 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int64_t vm_state_offset; 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} BlockDriverInfo; 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct QEMUSnapshotInfo { 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project char id_str[128]; /* unique snapshot id */ 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* the following fields are informative. They are not needed for 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project the consistency of the snapshot */ 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project char name[256]; /* user choosen name */ 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project uint32_t vm_state_size; /* VM state info size */ 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project uint32_t date_sec; /* UTC date of the snapshot */ 268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project uint32_t date_nsec; 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project uint64_t vm_clock_nsec; /* VM clock relative to boot */ 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project} QEMUSnapshotInfo; 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define BDRV_O_RDWR 0x0002 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define BDRV_O_SNAPSHOT 0x0008 /* open the file read only and save writes in a snapshot */ 325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define BDRV_O_NOCACHE 0x0020 /* do not use the host page cache */ 335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define BDRV_O_CACHE_WB 0x0040 /* use write-back caching */ 34cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define BDRV_O_NATIVE_AIO 0x0080 /* use native AIO instead of the thread pool */ 35cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define BDRV_O_NO_BACKING 0x0100 /* don't open the backing file */ 36cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define BDRV_O_NO_FLUSH 0x0200 /* disable flushing on this disk */ 375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 38cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define BDRV_O_CACHE_MASK (BDRV_O_NOCACHE | BDRV_O_CACHE_WB) 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 40cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define BDRV_SECTOR_BITS 9 41cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define BDRV_SECTOR_SIZE (1ULL << BDRV_SECTOR_BITS) 42cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define BDRV_SECTOR_MASK ~(BDRV_SECTOR_SIZE - 1) 43cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 44cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnertypedef enum { 45cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLOCK_ERR_REPORT, BLOCK_ERR_IGNORE, BLOCK_ERR_STOP_ENOSPC, 46cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLOCK_ERR_STOP_ANY 47cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner} BlockErrorAction; 48cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 49cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnertypedef enum { 50cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BDRV_ACTION_REPORT, BDRV_ACTION_IGNORE, BDRV_ACTION_STOP 51cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner} BlockMonEventAction; 52cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 53cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_mon_event(const BlockDriverState *bdrv, 54cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BlockMonEventAction action, int is_read); 55cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_info_print(Monitor *mon, const QObject *data); 56cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_info(Monitor *mon, QObject **ret_data); 57cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_stats_print(Monitor *mon, const QObject *data); 58cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_info_stats(Monitor *mon, QObject **ret_data); 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_init(void); 61cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_init_with_whitelist(void); 62cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' TurnerBlockDriver *bdrv_find_protocol(const char *filename); 638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectBlockDriver *bdrv_find_format(const char *format_name); 64cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' TurnerBlockDriver *bdrv_find_whitelisted_format(const char *format_name); 655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint bdrv_create(BlockDriver *drv, const char* filename, 665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner QEMUOptionParameter *options); 67cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_create_file(const char* filename, QEMUOptionParameter *options); 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectBlockDriverState *bdrv_new(const char *device_name); 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_delete(BlockDriverState *bs); 708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_file_open(BlockDriverState **pbs, const char *filename, int flags); 71cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_open(BlockDriverState *bs, const char *filename, int flags, 72cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BlockDriver *drv); 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_close(BlockDriverState *bs); 74cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_attach(BlockDriverState *bs, DeviceState *qdev); 75cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_detach(BlockDriverState *bs, DeviceState *qdev); 76cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' TurnerDeviceState *bdrv_get_attached(BlockDriverState *bs); 778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_read(BlockDriverState *bs, int64_t sector_num, 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project uint8_t *buf, int nb_sectors); 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_write(BlockDriverState *bs, int64_t sector_num, 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const uint8_t *buf, int nb_sectors); 818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_pread(BlockDriverState *bs, int64_t offset, 828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void *buf, int count); 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_pwrite(BlockDriverState *bs, int64_t offset, 848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const void *buf, int count); 85cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_pwrite_sync(BlockDriverState *bs, int64_t offset, 86cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner const void *buf, int count); 87cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_write_sync(BlockDriverState *bs, int64_t sector_num, 88cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner const uint8_t *buf, int nb_sectors); 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_truncate(BlockDriverState *bs, int64_t offset); 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint64_t bdrv_getlength(BlockDriverState *bs); 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); 925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid bdrv_guess_geometry(BlockDriverState *bs, int *pcyls, int *pheads, int *psecs); 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_commit(BlockDriverState *bs); 94cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_commit_all(void); 95cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_change_backing_file(BlockDriverState *bs, 96cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner const char *backing_file, const char *backing_fmt); 975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid bdrv_register(BlockDriver *bdrv); 985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 99cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 100cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnertypedef struct BdrvCheckResult { 101cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner int corruptions; 102cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner int leaks; 103cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner int check_errors; 104cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner} BdrvCheckResult; 105cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 106cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_check(BlockDriverState *bs, BdrvCheckResult *res); 107cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* async block I/O */ 1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef struct BlockDriverAIOCB BlockDriverAIOCB; 1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef void BlockDriverCompletionFunc(void *opaque, int ret); 111cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnertypedef void BlockDriverDirtyHandler(BlockDriverState *bs, int64_t sector, 112cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner int sector_num); 1135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerBlockDriverAIOCB *bdrv_aio_readv(BlockDriverState *bs, int64_t sector_num, 1145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner QEMUIOVector *iov, int nb_sectors, 1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project BlockDriverCompletionFunc *cb, void *opaque); 1165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerBlockDriverAIOCB *bdrv_aio_writev(BlockDriverState *bs, int64_t sector_num, 1175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner QEMUIOVector *iov, int nb_sectors, 1185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BlockDriverCompletionFunc *cb, void *opaque); 119cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' TurnerBlockDriverAIOCB *bdrv_aio_flush(BlockDriverState *bs, 120cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BlockDriverCompletionFunc *cb, void *opaque); 1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_aio_cancel(BlockDriverAIOCB *acb); 1228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 123cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnertypedef struct BlockRequest { 124cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner /* Fields to be filled by multiwrite caller */ 125cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner int64_t sector; 126cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner int nb_sectors; 127cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner QEMUIOVector *qiov; 128cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BlockDriverCompletionFunc *cb; 129cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner void *opaque; 130cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 131cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner /* Filled by multiwrite implementation */ 132cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner int error; 133cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner} BlockRequest; 134cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 135cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_aio_multiwrite(BlockDriverState *bs, BlockRequest *reqs, 136cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner int num_reqs); 137cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 1385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* sg packet commands */ 1395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint bdrv_ioctl(BlockDriverState *bs, unsigned long int req, void *buf); 1405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' TurnerBlockDriverAIOCB *bdrv_aio_ioctl(BlockDriverState *bs, 1415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner unsigned long int req, void *buf, 1425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner BlockDriverCompletionFunc *cb, void *opaque); 1438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Ensure contents are flushed to disk. */ 1458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_flush(BlockDriverState *bs); 1465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid bdrv_flush_all(void); 147cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_close_all(void); 1485d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 149cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_has_zero_init(BlockDriverState *bs); 1508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_is_allocated(BlockDriverState *bs, int64_t sector_num, int nb_sectors, 1518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int *pnum); 1528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define BDRV_TYPE_HD 0 1548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define BDRV_TYPE_CDROM 1 1558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define BDRV_TYPE_FLOPPY 2 1568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define BIOS_ATA_TRANSLATION_AUTO 0 1578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define BIOS_ATA_TRANSLATION_NONE 1 1588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define BIOS_ATA_TRANSLATION_LBA 2 1598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define BIOS_ATA_TRANSLATION_LARGE 3 1608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define BIOS_ATA_TRANSLATION_RECHS 4 1618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 1628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_set_geometry_hint(BlockDriverState *bs, 1638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int cyls, int heads, int secs); 1648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_set_type_hint(BlockDriverState *bs, int type); 1658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_set_translation_hint(BlockDriverState *bs, int translation); 1668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_get_geometry_hint(BlockDriverState *bs, 1678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int *pcyls, int *pheads, int *psecs); 1688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_get_type_hint(BlockDriverState *bs); 1698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_get_translation_hint(BlockDriverState *bs); 170cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_set_on_error(BlockDriverState *bs, BlockErrorAction on_read_error, 171cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BlockErrorAction on_write_error); 172cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' TurnerBlockErrorAction bdrv_get_on_error(BlockDriverState *bs, int is_read); 173cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_set_removable(BlockDriverState *bs, int removable); 1748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_is_removable(BlockDriverState *bs); 1758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_is_read_only(BlockDriverState *bs); 1768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_is_sg(BlockDriverState *bs); 177cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_enable_write_cache(BlockDriverState *bs); 1788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_is_inserted(BlockDriverState *bs); 1798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_media_changed(BlockDriverState *bs); 1808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_is_locked(BlockDriverState *bs); 1818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_set_locked(BlockDriverState *bs, int locked); 1825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint bdrv_eject(BlockDriverState *bs, int eject_flag); 1838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_set_change_cb(BlockDriverState *bs, 1848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void (*change_cb)(void *opaque), void *opaque); 1858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_get_format(BlockDriverState *bs, char *buf, int buf_size); 1868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source ProjectBlockDriverState *bdrv_find(const char *name); 187cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' TurnerBlockDriverState *bdrv_next(BlockDriverState *bs); 1885d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid bdrv_iterate(void (*it)(void *opaque, BlockDriverState *bs), 1895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner void *opaque); 1908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_is_encrypted(BlockDriverState *bs); 1915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint bdrv_key_required(BlockDriverState *bs); 1928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_set_key(BlockDriverState *bs, const char *key); 1935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint bdrv_query_missing_keys(void); 1948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_iterate_format(void (*it)(void *opaque, const char *name), 1958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project void *opaque); 1968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectconst char *bdrv_get_device_name(BlockDriverState *bs); 1978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_write_compressed(BlockDriverState *bs, int64_t sector_num, 1988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const uint8_t *buf, int nb_sectors); 1998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_get_info(BlockDriverState *bs, BlockDriverInfo *bdi); 2008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerconst char *bdrv_get_encrypted_filename(BlockDriverState *bs); 2028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid bdrv_get_backing_filename(BlockDriverState *bs, 2038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project char *filename, int filename_size); 2048f2de6dd4f99bf15ab55b07b88f61c1ba4c65187Ot ten Thijeint bdrv_can_snapshot(BlockDriverState *bs); 205cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_is_snapshot(BlockDriverState *bs); 206cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' TurnerBlockDriverState *bdrv_snapshots(void); 2078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_snapshot_create(BlockDriverState *bs, 2088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QEMUSnapshotInfo *sn_info); 2098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_snapshot_goto(BlockDriverState *bs, 2108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const char *snapshot_id); 2118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_snapshot_delete(BlockDriverState *bs, const char *snapshot_id); 2128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint bdrv_snapshot_list(BlockDriverState *bs, 2138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project QEMUSnapshotInfo **psn_info); 2148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectchar *bdrv_snapshot_dump(char *buf, int buf_size, QEMUSnapshotInfo *sn); 2158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 2168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectchar *get_human_readable_size(char *buf, int buf_size, int64_t size); 2175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint path_is_absolute(const char *path); 2188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid path_combine(char *dest, int dest_size, 2198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const char *base_path, 2208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const char *filename); 2218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 222cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_save_vmstate(BlockDriverState *bs, const uint8_t *buf, 223cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner int64_t pos, int size); 224cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 225cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_load_vmstate(BlockDriverState *bs, uint8_t *buf, 226cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner int64_t pos, int size); 227cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 228cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define BDRV_SECTORS_PER_DIRTY_CHUNK 2048 229cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 230cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_set_dirty_tracking(BlockDriverState *bs, int enable); 231cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint bdrv_get_dirty(BlockDriverState *bs, int64_t sector); 232cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_reset_dirty(BlockDriverState *bs, int64_t cur_sector, 233cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner int nr_sectors); 234cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint64_t bdrv_get_dirty_count(BlockDriverState *bs); 235cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 236cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 237cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnertypedef enum { 238cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_L1_UPDATE, 239cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 240cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_L1_GROW_ALLOC_TABLE, 241cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_L1_GROW_WRITE_TABLE, 242cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_L1_GROW_ACTIVATE_TABLE, 243cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 244cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_L2_LOAD, 245cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_L2_UPDATE, 246cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_L2_UPDATE_COMPRESSED, 247cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_L2_ALLOC_COW_READ, 248cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_L2_ALLOC_WRITE, 249cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 250cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_READ, 251cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_READ_AIO, 252cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_READ_BACKING, 253cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_READ_BACKING_AIO, 254cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_READ_COMPRESSED, 255cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 256cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_WRITE_AIO, 257cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_WRITE_COMPRESSED, 258cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 259cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_VMSTATE_LOAD, 260cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_VMSTATE_SAVE, 261cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 262cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_COW_READ, 263cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_COW_WRITE, 264cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 265cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_REFTABLE_LOAD, 266cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_REFTABLE_GROW, 267cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 268cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_REFBLOCK_LOAD, 269cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_REFBLOCK_UPDATE, 270cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_REFBLOCK_UPDATE_PART, 271cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_REFBLOCK_ALLOC, 272cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_REFBLOCK_ALLOC_HOOKUP, 273cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_REFBLOCK_ALLOC_WRITE, 274cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_REFBLOCK_ALLOC_WRITE_BLOCKS, 275cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_REFBLOCK_ALLOC_WRITE_TABLE, 276cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_REFBLOCK_ALLOC_SWITCH_TABLE, 277cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 278cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_CLUSTER_ALLOC, 279cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_CLUSTER_ALLOC_BYTES, 280cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_CLUSTER_FREE, 281cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner 282cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner BLKDBG_EVENT_MAX, 283cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner} BlkDebugEvent; 2845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 285cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define BLKDBG_EVENT(bs, evt) bdrv_debug_event(bs, evt) 286cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid bdrv_debug_event(BlockDriverState *bs, BlkDebugEvent event); 2875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 2888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 289