xref: /openbmc/qemu/include/hw/xen/xen-block.h (revision 4dad0a9aa818698e0735c8352bf7925a1660df6f)
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