/* * 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" 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; typedef struct XenBlockDevice { XenDevice xendev; XenBlockProperties props; const char *device_type; unsigned int info; XenBlockDataPlane *dataplane; XenBlockDrive *drive; XenBlockIOThread *iothread; } XenBlockDevice; typedef void (*XenBlockDeviceRealize)(XenBlockDevice *blockdev, Error **errp); typedef void (*XenBlockDeviceUnrealize)(XenBlockDevice *blockdev, Error **errp); typedef struct XenBlockDeviceClass { /*< private >*/ XenDeviceClass parent_class; /*< public >*/ XenBlockDeviceRealize realize; XenBlockDeviceUnrealize unrealize; } XenBlockDeviceClass; #define TYPE_XEN_BLOCK_DEVICE "xen-block" #define XEN_BLOCK_DEVICE(obj) \ OBJECT_CHECK(XenBlockDevice, (obj), TYPE_XEN_BLOCK_DEVICE) #define XEN_BLOCK_DEVICE_CLASS(class) \ OBJECT_CLASS_CHECK(XenBlockDeviceClass, (class), TYPE_XEN_BLOCK_DEVICE) #define XEN_BLOCK_DEVICE_GET_CLASS(obj) \ OBJECT_GET_CLASS(XenBlockDeviceClass, (obj), TYPE_XEN_BLOCK_DEVICE) typedef struct XenDiskDevice { XenBlockDevice blockdev; } XenDiskDevice; #define TYPE_XEN_DISK_DEVICE "xen-disk" #define XEN_DISK_DEVICE(obj) \ OBJECT_CHECK(XenDiskDevice, (obj), TYPE_XEN_DISK_DEVICE) typedef struct XenCDRomDevice { XenBlockDevice blockdev; } XenCDRomDevice; #define TYPE_XEN_CDROM_DEVICE "xen-cdrom" #define XEN_CDROM_DEVICE(obj) \ OBJECT_CHECK(XenCDRomDevice, (obj), TYPE_XEN_CDROM_DEVICE) #endif /* HW_XEN_BLOCK_H */