diff options
Diffstat (limited to 'include/hw/xen/xen-block.h')
-rw-r--r-- | include/hw/xen/xen-block.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/include/hw/xen/xen-block.h b/include/hw/xen/xen-block.h new file mode 100644 index 000000000..d692ea758 --- /dev/null +++ b/include/hw/xen/xen-block.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2018 Citrix Systems Inc. + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + */ + +#ifndef HW_XEN_BLOCK_H +#define HW_XEN_BLOCK_H + +#include "hw/xen/xen-bus.h" +#include "hw/block/block.h" +#include "hw/block/dataplane/xen-block.h" +#include "sysemu/iothread.h" +#include "qom/object.h" + +typedef enum XenBlockVdevType { + XEN_BLOCK_VDEV_TYPE_INVALID, + XEN_BLOCK_VDEV_TYPE_DP, + XEN_BLOCK_VDEV_TYPE_XVD, + XEN_BLOCK_VDEV_TYPE_HD, + XEN_BLOCK_VDEV_TYPE_SD, + XEN_BLOCK_VDEV_TYPE__MAX +} XenBlockVdevType; + +typedef struct XenBlockVdev { + XenBlockVdevType type; + unsigned long disk; + unsigned long partition; + unsigned long number; +} XenBlockVdev; + + +typedef struct XenBlockProperties { + XenBlockVdev vdev; + BlockConf conf; + unsigned int max_ring_page_order; + IOThread *iothread; +} XenBlockProperties; + +typedef struct XenBlockDrive { + char *id; + char *node_name; +} XenBlockDrive; + +typedef struct XenBlockIOThread { + char *id; +} XenBlockIOThread; + +struct XenBlockDevice { + XenDevice xendev; + XenBlockProperties props; + const char *device_type; + unsigned int info; + XenBlockDataPlane *dataplane; + XenBlockDrive *drive; + XenBlockIOThread *iothread; +}; +typedef struct XenBlockDevice XenBlockDevice; + +typedef void (*XenBlockDeviceRealize)(XenBlockDevice *blockdev, Error **errp); +typedef void (*XenBlockDeviceUnrealize)(XenBlockDevice *blockdev); + +struct XenBlockDeviceClass { + /*< private >*/ + XenDeviceClass parent_class; + /*< public >*/ + XenBlockDeviceRealize realize; + XenBlockDeviceUnrealize unrealize; +}; + +#define TYPE_XEN_BLOCK_DEVICE "xen-block" +OBJECT_DECLARE_TYPE(XenBlockDevice, XenBlockDeviceClass, XEN_BLOCK_DEVICE) + +struct XenDiskDevice { + XenBlockDevice blockdev; +}; + +#define TYPE_XEN_DISK_DEVICE "xen-disk" +OBJECT_DECLARE_SIMPLE_TYPE(XenDiskDevice, XEN_DISK_DEVICE) + +struct XenCDRomDevice { + XenBlockDevice blockdev; +}; + +#define TYPE_XEN_CDROM_DEVICE "xen-cdrom" +OBJECT_DECLARE_SIMPLE_TYPE(XenCDRomDevice, XEN_CDROM_DEVICE) + +#endif /* HW_XEN_BLOCK_H */ |