11a72d9aeSPaul Durrant /* 21a72d9aeSPaul Durrant * Copyright (c) 2018 Citrix Systems Inc. 31a72d9aeSPaul Durrant * 41a72d9aeSPaul Durrant * This work is licensed under the terms of the GNU GPL, version 2 or later. 51a72d9aeSPaul Durrant * See the COPYING file in the top-level directory. 61a72d9aeSPaul Durrant */ 71a72d9aeSPaul Durrant 81a72d9aeSPaul Durrant #ifndef HW_XEN_BLOCK_H 91a72d9aeSPaul Durrant #define HW_XEN_BLOCK_H 101a72d9aeSPaul Durrant 111a72d9aeSPaul Durrant #include "hw/xen/xen-bus.h" 12b6af8926SPaul Durrant #include "hw/block/block.h" 13b6af8926SPaul Durrant #include "hw/block/dataplane/xen-block.h" 14b6af8926SPaul Durrant #include "sysemu/iothread.h" 15db1015e9SEduardo Habkost #include "qom/object.h" 161a72d9aeSPaul Durrant 171a72d9aeSPaul Durrant typedef enum XenBlockVdevType { 181a72d9aeSPaul Durrant XEN_BLOCK_VDEV_TYPE_INVALID, 191a72d9aeSPaul Durrant XEN_BLOCK_VDEV_TYPE_DP, 201a72d9aeSPaul Durrant XEN_BLOCK_VDEV_TYPE_XVD, 211a72d9aeSPaul Durrant XEN_BLOCK_VDEV_TYPE_HD, 221a72d9aeSPaul Durrant XEN_BLOCK_VDEV_TYPE_SD, 231a72d9aeSPaul Durrant XEN_BLOCK_VDEV_TYPE__MAX 241a72d9aeSPaul Durrant } XenBlockVdevType; 251a72d9aeSPaul Durrant 261a72d9aeSPaul Durrant typedef struct XenBlockVdev { 271a72d9aeSPaul Durrant XenBlockVdevType type; 281a72d9aeSPaul Durrant unsigned long disk; 291a72d9aeSPaul Durrant unsigned long partition; 301a72d9aeSPaul Durrant unsigned long number; 311a72d9aeSPaul Durrant } XenBlockVdev; 321a72d9aeSPaul Durrant 33db9ff46eSPaul Durrant 341a72d9aeSPaul Durrant typedef struct XenBlockProperties { 351a72d9aeSPaul Durrant XenBlockVdev vdev; 36b6af8926SPaul Durrant BlockConf conf; 37b6af8926SPaul Durrant unsigned int max_ring_page_order; 38b6af8926SPaul Durrant IOThread *iothread; 391a72d9aeSPaul Durrant } XenBlockProperties; 401a72d9aeSPaul Durrant 41db9ff46eSPaul Durrant typedef struct XenBlockDrive { 42db9ff46eSPaul Durrant char *id; 43db9ff46eSPaul Durrant char *node_name; 44db9ff46eSPaul Durrant } XenBlockDrive; 45db9ff46eSPaul Durrant 46db9ff46eSPaul Durrant typedef struct XenBlockIOThread { 47db9ff46eSPaul Durrant char *id; 48db9ff46eSPaul Durrant } XenBlockIOThread; 49db9ff46eSPaul Durrant 50db1015e9SEduardo Habkost struct XenBlockDevice { 511a72d9aeSPaul Durrant XenDevice xendev; 521a72d9aeSPaul Durrant XenBlockProperties props; 53b6af8926SPaul Durrant const char *device_type; 54b6af8926SPaul Durrant unsigned int info; 55b6af8926SPaul Durrant XenBlockDataPlane *dataplane; 56db9ff46eSPaul Durrant XenBlockDrive *drive; 57db9ff46eSPaul Durrant XenBlockIOThread *iothread; 58db1015e9SEduardo Habkost }; 59db1015e9SEduardo Habkost typedef struct XenBlockDevice XenBlockDevice; 601a72d9aeSPaul Durrant 611a72d9aeSPaul Durrant typedef void (*XenBlockDeviceRealize)(XenBlockDevice *blockdev, Error **errp); 62b69c3c21SMarkus Armbruster typedef void (*XenBlockDeviceUnrealize)(XenBlockDevice *blockdev); 631a72d9aeSPaul Durrant 64db1015e9SEduardo Habkost struct XenBlockDeviceClass { 651a72d9aeSPaul Durrant /*< private >*/ 661a72d9aeSPaul Durrant XenDeviceClass parent_class; 671a72d9aeSPaul Durrant /*< public >*/ 681a72d9aeSPaul Durrant XenBlockDeviceRealize realize; 691a72d9aeSPaul Durrant XenBlockDeviceUnrealize unrealize; 70db1015e9SEduardo Habkost }; 711a72d9aeSPaul Durrant 721a72d9aeSPaul Durrant #define TYPE_XEN_BLOCK_DEVICE "xen-block" 73a489d195SEduardo Habkost OBJECT_DECLARE_TYPE(XenBlockDevice, XenBlockDeviceClass, XEN_BLOCK_DEVICE) 741a72d9aeSPaul Durrant 75db1015e9SEduardo Habkost struct XenDiskDevice { 761a72d9aeSPaul Durrant XenBlockDevice blockdev; 77db1015e9SEduardo Habkost }; 781a72d9aeSPaul Durrant 791a72d9aeSPaul Durrant #define TYPE_XEN_DISK_DEVICE "xen-disk" 80*8063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(XenDiskDevice, XEN_DISK_DEVICE) 811a72d9aeSPaul Durrant 82db1015e9SEduardo Habkost struct XenCDRomDevice { 831a72d9aeSPaul Durrant XenBlockDevice blockdev; 84db1015e9SEduardo Habkost }; 851a72d9aeSPaul Durrant 861a72d9aeSPaul Durrant #define TYPE_XEN_CDROM_DEVICE "xen-cdrom" 87*8063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(XenCDRomDevice, XEN_CDROM_DEVICE) 881a72d9aeSPaul Durrant 891a72d9aeSPaul Durrant #endif /* HW_XEN_BLOCK_H */ 90