1#ifndef HW_XEN_LEGACY_BACKEND_H
2#define HW_XEN_LEGACY_BACKEND_H
3
4#include "hw/xen/xen_common.h"
5#include "hw/xen/xen_pvdev.h"
6#include "sysemu/sysemu.h"
7#include "net/net.h"
8
9#define TYPE_XENSYSDEV "xen-sysdev"
10#define TYPE_XENSYSBUS "xen-sysbus"
11#define TYPE_XENBACKEND "xen-backend"
12
13#define XENBACKEND_DEVICE(obj) \
14 OBJECT_CHECK(XenLegacyDevice, (obj), TYPE_XENBACKEND)
15
16
17extern struct xs_handle *xenstore;
18extern const char *xen_protocol;
19extern DeviceState *xen_sysdev;
20extern BusState *xen_sysbus;
21
22int xenstore_mkdir(char *path, int p);
23int xenstore_write_be_str(struct XenLegacyDevice *xendev, const char *node,
24 const char *val);
25int xenstore_write_be_int(struct XenLegacyDevice *xendev, const char *node,
26 int ival);
27int xenstore_write_be_int64(struct XenLegacyDevice *xendev, const char *node,
28 int64_t ival);
29char *xenstore_read_be_str(struct XenLegacyDevice *xendev, const char *node);
30int xenstore_read_be_int(struct XenLegacyDevice *xendev, const char *node,
31 int *ival);
32void xenstore_update_fe(char *watch, struct XenLegacyDevice *xendev);
33void xenstore_update_be(char *watch, char *type, int dom,
34 struct XenDevOps *ops);
35char *xenstore_read_fe_str(struct XenLegacyDevice *xendev, const char *node);
36int xenstore_read_fe_int(struct XenLegacyDevice *xendev, const char *node,
37 int *ival);
38int xenstore_read_fe_uint64(struct XenLegacyDevice *xendev, const char *node,
39 uint64_t *uval);
40
41void xen_be_check_state(struct XenLegacyDevice *xendev);
42
43
44int xen_be_init(void);
45void xen_be_register_common(void);
46int xen_be_register(const char *type, struct XenDevOps *ops);
47int xen_be_set_state(struct XenLegacyDevice *xendev, enum xenbus_state state);
48int xen_be_bind_evtchn(struct XenLegacyDevice *xendev);
49void xen_be_set_max_grant_refs(struct XenLegacyDevice *xendev,
50 unsigned int nr_refs);
51void *xen_be_map_grant_refs(struct XenLegacyDevice *xendev, uint32_t *refs,
52 unsigned int nr_refs, int prot);
53void xen_be_unmap_grant_refs(struct XenLegacyDevice *xendev, void *ptr,
54 unsigned int nr_refs);
55
56typedef struct XenGrantCopySegment {
57 union {
58 void *virt;
59 struct {
60 uint32_t ref;
61 off_t offset;
62 } foreign;
63 } source, dest;
64 size_t len;
65} XenGrantCopySegment;
66
67int xen_be_copy_grant_refs(struct XenLegacyDevice *xendev,
68 bool to_domain, XenGrantCopySegment segs[],
69 unsigned int nr_segs);
70
71static inline void *xen_be_map_grant_ref(struct XenLegacyDevice *xendev,
72 uint32_t ref, int prot)
73{
74 return xen_be_map_grant_refs(xendev, &ref, 1, prot);
75}
76
77static inline void xen_be_unmap_grant_ref(struct XenLegacyDevice *xendev,
78 void *ptr)
79{
80 return xen_be_unmap_grant_refs(xendev, ptr, 1);
81}
82
83
84extern struct XenDevOps xen_console_ops;
85extern struct XenDevOps xen_kbdmouse_ops;
86extern struct XenDevOps xen_framebuffer_ops;
87extern struct XenDevOps xen_blkdev_ops;
88#ifdef CONFIG_VIRTFS
89extern struct XenDevOps xen_9pfs_ops;
90#endif
91extern struct XenDevOps xen_netdev_ops;
92#ifdef CONFIG_USB_LIBUSB
93extern struct XenDevOps xen_usb_ops;
94#endif
95
96
97void xen_config_cleanup(void);
98int xen_config_dev_blk(DriveInfo *disk);
99int xen_config_dev_nic(NICInfo *nic);
100int xen_config_dev_vfb(int vdev, const char *type);
101int xen_config_dev_vkbd(int vdev);
102int xen_config_dev_console(int vdev);
103
104#endif
105