mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
xen: add implementations of xen-block connect and disconnect functions...
...and wire in the dataplane. This patch adds the remaining code to make the xen-block XenDevice functional. The parameters that a block frontend expects to find are populated in the backend xenstore area, and the 'ring-ref' and 'event-channel' values specified in the frontend xenstore area are mapped/bound and used to set up the dataplane. 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>
This commit is contained in:
parent
d4683cf952
commit
b6af8926fb
5 changed files with 353 additions and 26 deletions
|
@ -9,6 +9,9 @@
|
|||
#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,
|
||||
|
@ -28,11 +31,17 @@ typedef struct XenBlockVdev {
|
|||
|
||||
typedef struct XenBlockProperties {
|
||||
XenBlockVdev vdev;
|
||||
BlockConf conf;
|
||||
unsigned int max_ring_page_order;
|
||||
IOThread *iothread;
|
||||
} XenBlockProperties;
|
||||
|
||||
typedef struct XenBlockDevice {
|
||||
XenDevice xendev;
|
||||
XenBlockProperties props;
|
||||
const char *device_type;
|
||||
unsigned int info;
|
||||
XenBlockDataPlane *dataplane;
|
||||
} XenBlockDevice;
|
||||
|
||||
typedef void (*XenBlockDeviceRealize)(XenBlockDevice *blockdev, Error **errp);
|
||||
|
|
|
@ -23,7 +23,9 @@ typedef struct XenDevice {
|
|||
char *backend_path, *frontend_path;
|
||||
enum xenbus_state backend_state, frontend_state;
|
||||
Notifier exit;
|
||||
XenWatch *frontend_state_watch;
|
||||
XenWatch *backend_state_watch, *frontend_state_watch;
|
||||
bool backend_online;
|
||||
XenWatch *backend_online_watch;
|
||||
xengnttab_handle *xgth;
|
||||
bool feature_grant_copy;
|
||||
xenevtchn_handle *xeh;
|
||||
|
@ -83,6 +85,16 @@ void xen_device_backend_set_state(XenDevice *xendev,
|
|||
enum xenbus_state state);
|
||||
enum xenbus_state xen_device_backend_get_state(XenDevice *xendev);
|
||||
|
||||
void xen_device_backend_printf(XenDevice *xendev, const char *key,
|
||||
const char *fmt, ...)
|
||||
GCC_FMT_ATTR(3, 4);
|
||||
void xen_device_frontend_printf(XenDevice *xendev, const char *key,
|
||||
const char *fmt, ...)
|
||||
GCC_FMT_ATTR(3, 4);
|
||||
|
||||
int xen_device_frontend_scanf(XenDevice *xendev, const char *key,
|
||||
const char *fmt, ...);
|
||||
|
||||
void xen_device_set_max_grant_refs(XenDevice *xendev, unsigned int nr_refs,
|
||||
Error **errp);
|
||||
void *xen_device_map_grant_refs(XenDevice *xendev, uint32_t *refs,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue