xref: /qemu/include/hw/xen/xen_pvdev.h (revision 3a6c9172)
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 {
32*3a6c9172SJuergen Gross     DeviceState        qdev;
33f0021dbaSEmil Condrea     const char         *type;
34f0021dbaSEmil Condrea     int                dom;
35f0021dbaSEmil Condrea     int                dev;
36f0021dbaSEmil Condrea     char               name[64];
37f0021dbaSEmil Condrea     int                debug;
38f0021dbaSEmil Condrea 
39f0021dbaSEmil Condrea     enum xenbus_state  be_state;
40f0021dbaSEmil Condrea     enum xenbus_state  fe_state;
41f0021dbaSEmil Condrea     int                online;
42f0021dbaSEmil Condrea     char               be[XEN_BUFSIZE];
43f0021dbaSEmil Condrea     char               *fe;
44f0021dbaSEmil Condrea     char               *protocol;
45f0021dbaSEmil Condrea     int                remote_port;
46f0021dbaSEmil Condrea     int                local_port;
47f0021dbaSEmil Condrea 
48f0021dbaSEmil Condrea     xenevtchn_handle   *evtchndev;
49f0021dbaSEmil Condrea     xengnttab_handle   *gnttabdev;
50f0021dbaSEmil Condrea 
51f0021dbaSEmil Condrea     struct XenDevOps   *ops;
52f0021dbaSEmil Condrea     QTAILQ_ENTRY(XenDevice) next;
53f0021dbaSEmil Condrea };
54f0021dbaSEmil Condrea 
55f0021dbaSEmil Condrea /* ------------------------------------------------------------- */
56f0021dbaSEmil Condrea 
57f0021dbaSEmil Condrea /* xenstore helper functions */
58f0021dbaSEmil Condrea int xenstore_write_str(const char *base, const char *node, const char *val);
59f0021dbaSEmil Condrea int xenstore_write_int(const char *base, const char *node, int ival);
60f0021dbaSEmil Condrea int xenstore_write_int64(const char *base, const char *node, int64_t ival);
61f0021dbaSEmil Condrea char *xenstore_read_str(const char *base, const char *node);
62f0021dbaSEmil Condrea int xenstore_read_int(const char *base, const char *node, int *ival);
63f0021dbaSEmil Condrea int xenstore_read_uint64(const char *base, const char *node, uint64_t *uval);
64046db9beSEmil Condrea void xenstore_update(void *unused);
65f0021dbaSEmil Condrea 
66f0021dbaSEmil Condrea const char *xenbus_strstate(enum xenbus_state state);
67f0021dbaSEmil Condrea 
6849442d96SEmil Condrea void xen_pv_evtchn_event(void *opaque);
69148512e0SEmil Condrea void xen_pv_insert_xendev(struct XenDevice *xendev);
7071981364SEmil Condrea void xen_pv_del_xendev(struct XenDevice *xendev);
71fa0253d0SEmil Condrea struct XenDevice *xen_pv_find_xendev(const char *type, int dom, int dev);
72148512e0SEmil Condrea 
7365807f4bSEmil Condrea void xen_pv_unbind_evtchn(struct XenDevice *xendev);
74ba18fa2aSEmil Condrea int xen_pv_send_notify(struct XenDevice *xendev);
7531c17aa5SEmil Condrea 
7696c77dbaSEmil Condrea void xen_pv_printf(struct XenDevice *xendev, int msg_level,
77f0021dbaSEmil Condrea                    const char *fmt, ...)  GCC_FMT_ATTR(3, 4);
78f0021dbaSEmil Condrea 
79f0021dbaSEmil Condrea #endif /* QEMU_HW_XEN_PVDEV_H */
80