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 | void blockdev_mark_auto_del(BlockBackend *blk); |
17 | void blockdev_auto_del(BlockBackend *blk); |
18 | |
19 | typedef enum { |
20 | IF_DEFAULT = -1, /* for use with drive_add() only */ |
21 | /* |
22 | * IF_NONE must be zero, because we want MachineClass member |
23 | * block_default_type to default-initialize to IF_NONE |
24 | */ |
25 | IF_NONE = 0, |
26 | IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN, |
27 | IF_COUNT |
28 | } BlockInterfaceType; |
29 | |
30 | struct DriveInfo { |
31 | BlockInterfaceType type; |
32 | int bus; |
33 | int unit; |
34 | int auto_del; /* see blockdev_mark_auto_del() */ |
35 | bool is_default; /* Added by default_drive() ? */ |
36 | int media_cd; |
37 | QemuOpts *opts; |
38 | QTAILQ_ENTRY(DriveInfo) next; |
39 | }; |
40 | |
41 | DriveInfo *blk_legacy_dinfo(BlockBackend *blk); |
42 | DriveInfo *blk_set_legacy_dinfo(BlockBackend *blk, DriveInfo *dinfo); |
43 | BlockBackend *blk_by_legacy_dinfo(DriveInfo *dinfo); |
44 | |
45 | void override_max_devs(BlockInterfaceType type, int max_devs); |
46 | |
47 | DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit); |
48 | void drive_check_orphaned(void); |
49 | DriveInfo *drive_get_by_index(BlockInterfaceType type, int index); |
50 | int drive_get_max_bus(BlockInterfaceType type); |
51 | int drive_get_max_devs(BlockInterfaceType type); |
52 | DriveInfo *drive_get_next(BlockInterfaceType type); |
53 | |
54 | QemuOpts *drive_def(const char *optstr); |
55 | QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file, |
56 | const char *optstr); |
57 | DriveInfo *drive_new(QemuOpts *arg, BlockInterfaceType block_default_type, |
58 | Error **errp); |
59 | |
60 | /* device-hotplug */ |
61 | |
62 | void hmp_commit(Monitor *mon, const QDict *qdict); |
63 | void hmp_drive_del(Monitor *mon, const QDict *qdict); |
64 | #endif |
65 | |