19c17d615SPaolo Bonzini /* 29c17d615SPaolo Bonzini * QEMU host block devices 39c17d615SPaolo Bonzini * 49c17d615SPaolo Bonzini * Copyright (c) 2003-2008 Fabrice Bellard 59c17d615SPaolo Bonzini * 69c17d615SPaolo Bonzini * This work is licensed under the terms of the GNU GPL, version 2 or 79c17d615SPaolo Bonzini * later. See the COPYING file in the top-level directory. 89c17d615SPaolo Bonzini */ 99c17d615SPaolo Bonzini 109c17d615SPaolo Bonzini #ifndef BLOCKDEV_H 119c17d615SPaolo Bonzini #define BLOCKDEV_H 129c17d615SPaolo Bonzini 139c17d615SPaolo Bonzini #include "block/block.h" 149c17d615SPaolo Bonzini #include "qemu/queue.h" 159c17d615SPaolo Bonzini 169c17d615SPaolo Bonzini typedef enum { 179c17d615SPaolo Bonzini IF_DEFAULT = -1, /* for use with drive_add() only */ 189c17d615SPaolo Bonzini /* 19a27fa28fSMarkus Armbruster * IF_NONE must be zero, because we want MachineClass member 20a27fa28fSMarkus Armbruster * block_default_type to default-initialize to IF_NONE 219c17d615SPaolo Bonzini */ 22a27fa28fSMarkus Armbruster IF_NONE = 0, 23a27fa28fSMarkus Armbruster IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN, 249c17d615SPaolo Bonzini IF_COUNT 259c17d615SPaolo Bonzini } BlockInterfaceType; 269c17d615SPaolo Bonzini 279c17d615SPaolo Bonzini struct DriveInfo { 289c17d615SPaolo Bonzini BlockInterfaceType type; 299c17d615SPaolo Bonzini int bus; 309c17d615SPaolo Bonzini int unit; 319c17d615SPaolo Bonzini int auto_del; /* see blockdev_mark_auto_del() */ 32a66c9dc7SJohn Snow bool is_default; /* Added by default_drive() ? */ 339c17d615SPaolo Bonzini int media_cd; 349c17d615SPaolo Bonzini QemuOpts *opts; 359c17d615SPaolo Bonzini QTAILQ_ENTRY(DriveInfo) next; 369c17d615SPaolo Bonzini }; 379c17d615SPaolo Bonzini 38*75695831SEmanuele Giuseppe Esposito /* 39*75695831SEmanuele Giuseppe Esposito * Global state (GS) API. These functions run under the BQL. 40*75695831SEmanuele Giuseppe Esposito * 41*75695831SEmanuele Giuseppe Esposito * See include/block/block-global-state.h for more information about 42*75695831SEmanuele Giuseppe Esposito * the GS API. 43*75695831SEmanuele Giuseppe Esposito */ 44*75695831SEmanuele Giuseppe Esposito 45*75695831SEmanuele Giuseppe Esposito void blockdev_mark_auto_del(BlockBackend *blk); 46*75695831SEmanuele Giuseppe Esposito void blockdev_auto_del(BlockBackend *blk); 47*75695831SEmanuele Giuseppe Esposito 4818e46a03SMarkus Armbruster DriveInfo *blk_legacy_dinfo(BlockBackend *blk); 4918e46a03SMarkus Armbruster DriveInfo *blk_set_legacy_dinfo(BlockBackend *blk, DriveInfo *dinfo); 5018e46a03SMarkus Armbruster BlockBackend *blk_by_legacy_dinfo(DriveInfo *dinfo); 5118e46a03SMarkus Armbruster 5221dff8cfSJohn Snow void override_max_devs(BlockInterfaceType type, int max_devs); 5321dff8cfSJohn Snow 549c17d615SPaolo Bonzini DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit); 55720b8dc0SMarkus Armbruster void drive_check_orphaned(void); 569c17d615SPaolo Bonzini DriveInfo *drive_get_by_index(BlockInterfaceType type, int index); 579c17d615SPaolo Bonzini int drive_get_max_bus(BlockInterfaceType type); 589c17d615SPaolo Bonzini 599c17d615SPaolo Bonzini QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file, 609c17d615SPaolo Bonzini const char *optstr); 61c4f26c9fSMarkus Armbruster DriveInfo *drive_new(QemuOpts *arg, BlockInterfaceType block_default_type, 62c4f26c9fSMarkus Armbruster Error **errp); 639c17d615SPaolo Bonzini 649c17d615SPaolo Bonzini #endif 65