1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/*
* 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 */
|