block_int.h 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. /*
  2. * QEMU System Emulator block driver
  3. *
  4. * Copyright (c) 2003 Fabrice Bellard
  5. *
  6. * Permission is hereby granted, free of charge, to any person obtaining a copy
  7. * of this software and associated documentation files (the "Software"), to deal
  8. * in the Software without restriction, including without limitation the rights
  9. * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10. * copies of the Software, and to permit persons to whom the Software is
  11. * furnished to do so, subject to the following conditions:
  12. *
  13. * The above copyright notice and this permission notice shall be included in
  14. * all copies or substantial portions of the Software.
  15. *
  16. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  19. * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20. * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21. * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  22. * THE SOFTWARE.
  23. */
  24. #ifndef BLOCK_INT_H
  25. #define BLOCK_INT_H
  26. #include "block.h"
  27. #include "qemu-option.h"
  28. #include "qemu-queue.h"
  29. #include "qemu-coroutine.h"
  30. #include "qemu-timer.h"
  31. #include "qapi-types.h"
  32. #define BLOCK_FLAG_ENCRYPT 1
  33. #define BLOCK_FLAG_COMPAT6 4
  34. #define BLOCK_OPT_SIZE "size"
  35. #define BLOCK_OPT_ENCRYPT "encryption"
  36. #define BLOCK_OPT_COMPAT6 "compat6"
  37. #define BLOCK_OPT_BACKING_FILE "backing_file"
  38. #define BLOCK_OPT_BACKING_FMT "backing_fmt"
  39. #define BLOCK_OPT_CLUSTER_SIZE "cluster_size"
  40. #define BLOCK_OPT_TABLE_SIZE "table_size"
  41. #define BLOCK_OPT_PREALLOC "preallocation"
  42. #define BLOCK_OPT_SUBFMT "subformat"
  43. typedef struct AIOPool {
  44. void (*cancel)(BlockDriverAIOCB *acb);
  45. int aiocb_size;
  46. BlockDriverAIOCB *free_aiocb;
  47. } AIOPool;
  48. struct BlockDriver {
  49. const char *format_name;
  50. int instance_size;
  51. int (*bdrv_probe)(const uint8_t *buf, int buf_size, const char *filename);
  52. int (*bdrv_probe_device)(const char *filename);
  53. int (*bdrv_open)(BlockDriverState *bs, int flags);
  54. int (*bdrv_file_open)(BlockDriverState *bs, const char *filename, int flags);
  55. int (*bdrv_read)(BlockDriverState *bs, int64_t sector_num,
  56. uint8_t *buf, int nb_sectors);
  57. int (*bdrv_write)(BlockDriverState *bs, int64_t sector_num,
  58. const uint8_t *buf, int nb_sectors);
  59. void (*bdrv_close)(BlockDriverState *bs);
  60. int (*bdrv_create)(const char *filename, QEMUOptionParameter *options);
  61. int (*bdrv_is_allocated)(BlockDriverState *bs, int64_t sector_num,
  62. int nb_sectors, int *pnum);
  63. int (*bdrv_set_key)(BlockDriverState *bs, const char *key);
  64. int (*bdrv_make_empty)(BlockDriverState *bs);
  65. /* aio */
  66. BlockDriverAIOCB *(*bdrv_aio_readv)(BlockDriverState *bs,
  67. int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
  68. BlockDriverCompletionFunc *cb, void *opaque);
  69. BlockDriverAIOCB *(*bdrv_aio_writev)(BlockDriverState *bs,
  70. int64_t sector_num, QEMUIOVector *qiov, int nb_sectors,
  71. BlockDriverCompletionFunc *cb, void *opaque);
  72. BlockDriverAIOCB *(*bdrv_aio_flush)(BlockDriverState *bs,
  73. BlockDriverCompletionFunc *cb, void *opaque);
  74. BlockDriverAIOCB *(*bdrv_aio_discard)(BlockDriverState *bs,
  75. int64_t sector_num, int nb_sectors,
  76. BlockDriverCompletionFunc *cb, void *opaque);
  77. int coroutine_fn (*bdrv_co_readv)(BlockDriverState *bs,
  78. int64_t sector_num, int nb_sectors, QEMUIOVector *qiov);
  79. int coroutine_fn (*bdrv_co_writev)(BlockDriverState *bs,
  80. int64_t sector_num, int nb_sectors, QEMUIOVector *qiov);
  81. int coroutine_fn (*bdrv_co_discard)(BlockDriverState *bs,
  82. int64_t sector_num, int nb_sectors);
  83. /*
  84. * Invalidate any cached meta-data.
  85. */
  86. void (*bdrv_invalidate_cache)(BlockDriverState *bs);
  87. /*
  88. * Flushes all data that was already written to the OS all the way down to
  89. * the disk (for example raw-posix calls fsync()).
  90. */
  91. int coroutine_fn (*bdrv_co_flush_to_disk)(BlockDriverState *bs);
  92. /*
  93. * Flushes all internal caches to the OS. The data may still sit in a
  94. * writeback cache of the host OS, but it will survive a crash of the qemu
  95. * process.
  96. */
  97. int coroutine_fn (*bdrv_co_flush_to_os)(BlockDriverState *bs);
  98. int (*bdrv_aio_multiwrite)(BlockDriverState *bs, BlockRequest *reqs,
  99. int num_reqs);
  100. int (*bdrv_merge_requests)(BlockDriverState *bs, BlockRequest* a,
  101. BlockRequest *b);
  102. const char *protocol_name;
  103. int (*bdrv_truncate)(BlockDriverState *bs, int64_t offset);
  104. int64_t (*bdrv_getlength)(BlockDriverState *bs);
  105. int64_t (*bdrv_get_allocated_file_size)(BlockDriverState *bs);
  106. int (*bdrv_write_compressed)(BlockDriverState *bs, int64_t sector_num,
  107. const uint8_t *buf, int nb_sectors);
  108. int (*bdrv_snapshot_create)(BlockDriverState *bs,
  109. QEMUSnapshotInfo *sn_info);
  110. int (*bdrv_snapshot_goto)(BlockDriverState *bs,
  111. const char *snapshot_id);
  112. int (*bdrv_snapshot_delete)(BlockDriverState *bs, const char *snapshot_id);
  113. int (*bdrv_snapshot_list)(BlockDriverState *bs,
  114. QEMUSnapshotInfo **psn_info);
  115. int (*bdrv_snapshot_load_tmp)(BlockDriverState *bs,
  116. const char *snapshot_name);
  117. int (*bdrv_get_info)(BlockDriverState *bs, BlockDriverInfo *bdi);
  118. int (*bdrv_save_vmstate)(BlockDriverState *bs, const uint8_t *buf,
  119. int64_t pos, int size);
  120. int (*bdrv_load_vmstate)(BlockDriverState *bs, uint8_t *buf,
  121. int64_t pos, int size);
  122. int (*bdrv_change_backing_file)(BlockDriverState *bs,
  123. const char *backing_file, const char *backing_fmt);
  124. /* removable device specific */
  125. int (*bdrv_is_inserted)(BlockDriverState *bs);
  126. int (*bdrv_media_changed)(BlockDriverState *bs);
  127. void (*bdrv_eject)(BlockDriverState *bs, int eject_flag);
  128. void (*bdrv_lock_medium)(BlockDriverState *bs, bool locked);
  129. /* to control generic scsi devices */
  130. int (*bdrv_ioctl)(BlockDriverState *bs, unsigned long int req, void *buf);
  131. BlockDriverAIOCB *(*bdrv_aio_ioctl)(BlockDriverState *bs,
  132. unsigned long int req, void *buf,
  133. BlockDriverCompletionFunc *cb, void *opaque);
  134. /* List of options for creating images, terminated by name == NULL */
  135. QEMUOptionParameter *create_options;
  136. /*
  137. * Returns 0 for completed check, -errno for internal errors.
  138. * The check results are stored in result.
  139. */
  140. int (*bdrv_check)(BlockDriverState* bs, BdrvCheckResult *result);
  141. void (*bdrv_debug_event)(BlockDriverState *bs, BlkDebugEvent event);
  142. /*
  143. * Returns 1 if newly created images are guaranteed to contain only
  144. * zeros, 0 otherwise.
  145. */
  146. int (*bdrv_has_zero_init)(BlockDriverState *bs);
  147. QLIST_ENTRY(BlockDriver) list;
  148. };
  149. struct BlockDriverState {
  150. int64_t total_sectors; /* if we are reading a disk image, give its
  151. size in sectors */
  152. int read_only; /* if true, the media is read only */
  153. int keep_read_only; /* if true, the media was requested to stay read only */
  154. int open_flags; /* flags used to open the file, re-used for re-open */
  155. int encrypted; /* if true, the media is encrypted */
  156. int valid_key; /* if true, a valid encryption key has been set */
  157. int sg; /* if true, the device is a /dev/sg* */
  158. BlockDriver *drv; /* NULL means no media */
  159. void *opaque;
  160. void *dev; /* attached device model, if any */
  161. /* TODO change to DeviceState when all users are qdevified */
  162. const BlockDevOps *dev_ops;
  163. void *dev_opaque;
  164. char filename[1024];
  165. char backing_file[1024]; /* if non zero, the image is a diff of
  166. this file image */
  167. char backing_format[16]; /* if non-zero and backing_file exists */
  168. int is_temporary;
  169. BlockDriverState *backing_hd;
  170. BlockDriverState *file;
  171. /* async read/write emulation */
  172. void *sync_aiocb;
  173. /* I/O stats (display with "info blockstats"). */
  174. uint64_t nr_bytes[BDRV_MAX_IOTYPE];
  175. uint64_t nr_ops[BDRV_MAX_IOTYPE];
  176. uint64_t total_time_ns[BDRV_MAX_IOTYPE];
  177. uint64_t wr_highest_sector;
  178. /* Whether the disk can expand beyond total_sectors */
  179. int growable;
  180. /* the memory alignment required for the buffers handled by this driver */
  181. int buffer_alignment;
  182. /* do we need to tell the quest if we have a volatile write cache? */
  183. int enable_write_cache;
  184. /* NOTE: the following infos are only hints for real hardware
  185. drivers. They are not used by the block driver */
  186. int cyls, heads, secs, translation;
  187. BlockErrorAction on_read_error, on_write_error;
  188. bool iostatus_enabled;
  189. BlockDeviceIoStatus iostatus;
  190. char device_name[32];
  191. unsigned long *dirty_bitmap;
  192. int64_t dirty_count;
  193. int in_use; /* users other than guest access, eg. block migration */
  194. QTAILQ_ENTRY(BlockDriverState) list;
  195. void *private;
  196. };
  197. struct BlockDriverAIOCB {
  198. AIOPool *pool;
  199. BlockDriverState *bs;
  200. BlockDriverCompletionFunc *cb;
  201. void *opaque;
  202. BlockDriverAIOCB *next;
  203. };
  204. void get_tmp_filename(char *filename, int size);
  205. void *qemu_aio_get(AIOPool *pool, BlockDriverState *bs,
  206. BlockDriverCompletionFunc *cb, void *opaque);
  207. void qemu_aio_release(void *p);
  208. #ifdef _WIN32
  209. int is_windows_drive(const char *filename);
  210. #endif
  211. #endif /* BLOCK_INT_H */