xref: /openbmc/qemu/include/sysemu/blockdev.h (revision 03ff4f8d)
1 /*
2  * QEMU host block devices
3  *
4  * Copyright (c) 2003-2008 Fabrice Bellard
5  *
6  * This work is licensed under the terms of the GNU GPL, version 2 or
7  * later.  See the COPYING file in the top-level directory.
8  */
9 
10 #ifndef BLOCKDEV_H
11 #define BLOCKDEV_H
12 
13 #include "block/block.h"
14 #include "qemu/queue.h"
15 
16 typedef enum {
17     IF_DEFAULT = -1,            /* for use with drive_add() only */
18     /*
19      * IF_NONE must be zero, because we want MachineClass member
20      * block_default_type to default-initialize to IF_NONE
21      */
22     IF_NONE = 0,
23     IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN,
24     IF_COUNT
25 } BlockInterfaceType;
26 
27 struct DriveInfo {
28     BlockInterfaceType type;
29     int bus;
30     int unit;
31     int auto_del;               /* see blockdev_mark_auto_del() */
32     bool is_default;            /* Added by default_drive() ?  */
33     int media_cd;
34     QemuOpts *opts;
35     QTAILQ_ENTRY(DriveInfo) next;
36 };
37 
38 /*
39  * Global state (GS) API. These functions run under the BQL.
40  *
41  * See include/block/block-global-state.h for more information about
42  * the GS API.
43  */
44 
45 void blockdev_mark_auto_del(BlockBackend *blk);
46 void blockdev_auto_del(BlockBackend *blk);
47 
48 DriveInfo *blk_legacy_dinfo(BlockBackend *blk);
49 DriveInfo *blk_set_legacy_dinfo(BlockBackend *blk, DriveInfo *dinfo);
50 BlockBackend *blk_by_legacy_dinfo(DriveInfo *dinfo);
51 
52 void override_max_devs(BlockInterfaceType type, int max_devs);
53 
54 DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
55 void drive_check_orphaned(void);
56 DriveInfo *drive_get_by_index(BlockInterfaceType type, int index);
57 int drive_get_max_bus(BlockInterfaceType type);
58 
59 QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file,
60                     const char *optstr);
61 DriveInfo *drive_new(QemuOpts *arg, BlockInterfaceType block_default_type,
62                      Error **errp);
63 
64 #endif
65