1cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner/*
2cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner * QEMU host block devices
3cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner *
4cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner * Copyright (c) 2003-2008 Fabrice Bellard
5cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner *
6cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner * This work is licensed under the terms of the GNU GPL, version 2 or
7cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner * later.  See the COPYING file in the top-level directory.
8cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner */
9cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
10cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#ifndef BLOCKDEV_H
11cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define BLOCKDEV_H
12cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
13e1e03df288d5a44bfbffbd86588395c7cbbc27dfDavid 'Digit' Turner#include "block/block.h"
14031d655004e505a15e92580a16a181d1d247c4d5David 'Digit' Turner#include "qemu/queue.h"
15cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
16cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid blockdev_mark_auto_del(BlockDriverState *bs);
17cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid blockdev_auto_del(BlockDriverState *bs);
18cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
19cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define BLOCK_SERIAL_STRLEN 20
20cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
21cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerstruct DriveInfo {
22cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    BlockDriverState *bdrv;
23cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    char *id;
24cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    const char *devaddr;
25cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    BlockInterfaceType type;
26cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    int bus;
27cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    int unit;
28cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    int auto_del;               /* see blockdev_mark_auto_del() */
29cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    QemuOpts *opts;
30cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    char serial[BLOCK_SERIAL_STRLEN + 1];
31cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner    QTAILQ_ENTRY(DriveInfo) next;
32cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner};
33cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
34cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define MAX_IDE_DEVS	2
35cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#define MAX_SCSI_DEVS	7
36cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
37cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerextern DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
38cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerextern int drive_get_max_bus(BlockInterfaceType type);
39cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerextern void drive_uninit(DriveInfo *dinfo);
40cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerextern DriveInfo *drive_get_by_blockdev(BlockDriverState *bs);
41cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
42cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerextern QemuOpts *drive_add(const char *file, const char *fmt, ...);
43cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerextern DriveInfo *drive_init(QemuOpts *arg, int default_to_scsi,
44cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner                             int *fatal_error);
45cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
46cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner/* device-hotplug */
47cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
48cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' TurnerDriveInfo *add_init_drive(const char *opts);
49cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
50cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnervoid do_commit(Monitor *mon, const QDict *qdict);
51cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint do_eject(Monitor *mon, const QDict *qdict, QObject **ret_data);
52cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint do_block_set_passwd(Monitor *mon, const QDict *qdict, QObject **ret_data);
53cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turnerint do_change_block(Monitor *mon, const char *device,
54cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner                    const char *filename, const char *fmt);
55cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner
56cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#endif
57