aboutsummaryrefslogtreecommitdiff
path: root/include/hw/xen/xen-bus.h
diff options
context:
space:
mode:
authorPaul Durrant <paul.durrant@citrix.com>2019-01-08 14:48:49 +0000
committerAnthony PERARD <anthony.perard@citrix.com>2019-01-14 13:45:40 +0000
commit094a22399f1b3e796727fc7e584c7a1f2beca24b (patch)
tree0847863e115f47588149d2cba3f049d0f1ede2e9 /include/hw/xen/xen-bus.h
parent1a72d9ae31517b2f83ec7923c820daf1887fde50 (diff)
xen: create xenstore areas for XenDevice-s
This patch adds a new source module, xen-bus-helper.c, which builds on basic libxenstore primitives to provide functions to create (setting permissions appropriately) and destroy xenstore areas, and functions to 'printf' and 'scanf' nodes therein. The main xen-bus code then uses these primitives [1] to initialize and destroy the frontend and backend areas for a XenDevice during realize and unrealize respectively. The 'xen-block' implementation is extended with a 'get_name' method that returns the VBD number. This number is required to 'name' the xenstore areas. NOTE: An exit handler is also added to make sure the xenstore areas are cleaned up if QEMU terminates without devices being unrealized. [1] The 'scanf' functions are actually not yet needed, but they will be needed by code delivered in subsequent patches. Signed-off-by: Paul Durrant <paul.durrant@citrix.com> Reviewed-by: Anthony Perard <anthony.perard@citrix.com> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Diffstat (limited to 'include/hw/xen/xen-bus.h')
-rw-r--r--include/hw/xen/xen-bus.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/include/hw/xen/xen-bus.h b/include/hw/xen/xen-bus.h
index 0cb12464ce..85a75d8dec 100644
--- a/include/hw/xen/xen-bus.h
+++ b/include/hw/xen/xen-bus.h
@@ -8,12 +8,19 @@
#ifndef HW_XEN_BUS_H
#define HW_XEN_BUS_H
+#include "hw/xen/xen_common.h"
#include "hw/sysbus.h"
typedef struct XenDevice {
DeviceState qdev;
+ domid_t frontend_id;
+ char *name;
+ char *backend_path, *frontend_path;
+ enum xenbus_state backend_state, frontend_state;
+ Notifier exit;
} XenDevice;
+typedef char *(*XenDeviceGetName)(XenDevice *xendev, Error **errp);
typedef void (*XenDeviceRealize)(XenDevice *xendev, Error **errp);
typedef void (*XenDeviceUnrealize)(XenDevice *xendev, Error **errp);
@@ -21,6 +28,9 @@ typedef struct XenDeviceClass {
/*< private >*/
DeviceClass parent_class;
/*< public >*/
+ const char *backend;
+ const char *device;
+ XenDeviceGetName get_name;
XenDeviceRealize realize;
XenDeviceUnrealize unrealize;
} XenDeviceClass;
@@ -35,6 +45,8 @@ typedef struct XenDeviceClass {
typedef struct XenBus {
BusState qbus;
+ domid_t backend_id;
+ struct xs_handle *xsh;
} XenBus;
typedef struct XenBusClass {