xref: /qemu/include/hw/xen/xen_pvdev.h (revision 49442d96)
1f0021dbaSEmil Condrea #ifndef QEMU_HW_XEN_PVDEV_H
2f0021dbaSEmil Condrea #define QEMU_HW_XEN_PVDEV_H
3f0021dbaSEmil Condrea 
4f0021dbaSEmil Condrea #include "hw/xen/xen_common.h"
5f0021dbaSEmil Condrea /* ------------------------------------------------------------- */
6f0021dbaSEmil Condrea 
7f0021dbaSEmil Condrea #define XEN_BUFSIZE 1024
8f0021dbaSEmil Condrea 
9f0021dbaSEmil Condrea struct XenDevice;
10f0021dbaSEmil Condrea 
11f0021dbaSEmil Condrea /* driver uses grant tables  ->  open gntdev device (xendev->gnttabdev) */
12f0021dbaSEmil Condrea #define DEVOPS_FLAG_NEED_GNTDEV   1
13f0021dbaSEmil Condrea /* don't expect frontend doing correct state transitions (aka console quirk) */
14f0021dbaSEmil Condrea #define DEVOPS_FLAG_IGNORE_STATE  2
15f0021dbaSEmil Condrea 
16f0021dbaSEmil Condrea struct XenDevOps {
17f0021dbaSEmil Condrea     size_t    size;
18f0021dbaSEmil Condrea     uint32_t  flags;
19f0021dbaSEmil Condrea     void      (*alloc)(struct XenDevice *xendev);
20f0021dbaSEmil Condrea     int       (*init)(struct XenDevice *xendev);
21f0021dbaSEmil Condrea     int       (*initialise)(struct XenDevice *xendev);
22f0021dbaSEmil Condrea     void      (*connected)(struct XenDevice *xendev);
23f0021dbaSEmil Condrea     void      (*event)(struct XenDevice *xendev);
24f0021dbaSEmil Condrea     void      (*disconnect)(struct XenDevice *xendev);
25f0021dbaSEmil Condrea     int       (*free)(struct XenDevice *xendev);
26f0021dbaSEmil Condrea     void      (*backend_changed)(struct XenDevice *xendev, const char *node);
27f0021dbaSEmil Condrea     void      (*frontend_changed)(struct XenDevice *xendev, const char *node);
28f0021dbaSEmil Condrea     int       (*backend_register)(void);
29f0021dbaSEmil Condrea };
30f0021dbaSEmil Condrea 
31f0021dbaSEmil Condrea struct XenDevice {
32f0021dbaSEmil Condrea     const char         *type;
33f0021dbaSEmil Condrea     int                dom;
34f0021dbaSEmil Condrea     int                dev;
35f0021dbaSEmil Condrea     char               name[64];
36f0021dbaSEmil Condrea     int                debug;
37f0021dbaSEmil Condrea 
38f0021dbaSEmil Condrea     enum xenbus_state  be_state;
39f0021dbaSEmil Condrea     enum xenbus_state  fe_state;
40f0021dbaSEmil Condrea     int                online;
41f0021dbaSEmil Condrea     char               be[XEN_BUFSIZE];
42f0021dbaSEmil Condrea     char               *fe;
43f0021dbaSEmil Condrea     char               *protocol;
44f0021dbaSEmil Condrea     int                remote_port;
45f0021dbaSEmil Condrea     int                local_port;
46f0021dbaSEmil Condrea 
47f0021dbaSEmil Condrea     xenevtchn_handle   *evtchndev;
48f0021dbaSEmil Condrea     xengnttab_handle   *gnttabdev;
49f0021dbaSEmil Condrea 
50f0021dbaSEmil Condrea     struct XenDevOps   *ops;
51f0021dbaSEmil Condrea     QTAILQ_ENTRY(XenDevice) next;
52f0021dbaSEmil Condrea };
53f0021dbaSEmil Condrea 
54f0021dbaSEmil Condrea /* ------------------------------------------------------------- */
55f0021dbaSEmil Condrea 
56f0021dbaSEmil Condrea /* xenstore helper functions */
57f0021dbaSEmil Condrea int xenstore_write_str(const char *base, const char *node, const char *val);
58f0021dbaSEmil Condrea int xenstore_write_int(const char *base, const char *node, int ival);
59f0021dbaSEmil Condrea int xenstore_write_int64(const char *base, const char *node, int64_t ival);
60f0021dbaSEmil Condrea char *xenstore_read_str(const char *base, const char *node);
61f0021dbaSEmil Condrea int xenstore_read_int(const char *base, const char *node, int *ival);
62f0021dbaSEmil Condrea int xenstore_read_uint64(const char *base, const char *node, uint64_t *uval);
63046db9beSEmil Condrea void xenstore_update(void *unused);
64f0021dbaSEmil Condrea 
65f0021dbaSEmil Condrea const char *xenbus_strstate(enum xenbus_state state);
66f0021dbaSEmil Condrea 
67*49442d96SEmil Condrea void xen_pv_evtchn_event(void *opaque);
68148512e0SEmil Condrea void xen_pv_insert_xendev(struct XenDevice *xendev);
69148512e0SEmil Condrea void xen_be_del_xendev(struct XenDevice *xendev);
70148512e0SEmil Condrea struct XenDevice *xen_be_find_xendev(const char *type, int dom, int dev);
71148512e0SEmil Condrea 
7265807f4bSEmil Condrea void xen_pv_unbind_evtchn(struct XenDevice *xendev);
73ba18fa2aSEmil Condrea int xen_pv_send_notify(struct XenDevice *xendev);
7431c17aa5SEmil Condrea 
7596c77dbaSEmil Condrea void xen_pv_printf(struct XenDevice *xendev, int msg_level,
76f0021dbaSEmil Condrea                    const char *fmt, ...)  GCC_FMT_ATTR(3, 4);
77f0021dbaSEmil Condrea 
78f0021dbaSEmil Condrea #endif /* QEMU_HW_XEN_PVDEV_H */
79