xref: /openbmc/qemu/include/sysemu/blockdev.h (revision 75695831)
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