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 13cb42a1b1461e02efb034582ac5d8f71534723b92David 'Digit' Turner#include "block.h" 14cb42a1b1461e02efb034582ac5d8f71534723b92David '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