xref: /qemu/include/hw/xen/xen_pvdev.h (revision e2abfe5e)
1f0021dbaSEmil Condrea #ifndef QEMU_HW_XEN_PVDEV_H
2f0021dbaSEmil Condrea #define QEMU_HW_XEN_PVDEV_H
3f0021dbaSEmil Condrea 
4e2abfe5eSDavid Woodhouse #include "hw/qdev-core.h"
5b6cacfeaSDavid Woodhouse #include "hw/xen/xen_backend_ops.h"
6e2abfe5eSDavid Woodhouse 
7f0021dbaSEmil Condrea /* ------------------------------------------------------------- */
8f0021dbaSEmil Condrea 
9f0021dbaSEmil Condrea #define XEN_BUFSIZE 1024
10f0021dbaSEmil Condrea 
112d0ed5e6SPaul Durrant struct XenLegacyDevice;
12f0021dbaSEmil Condrea 
13f0021dbaSEmil Condrea /* driver uses grant tables  ->  open gntdev device (xendev->gnttabdev) */
14f0021dbaSEmil Condrea #define DEVOPS_FLAG_NEED_GNTDEV   1
15f0021dbaSEmil Condrea /* don't expect frontend doing correct state transitions (aka console quirk) */
16f0021dbaSEmil Condrea #define DEVOPS_FLAG_IGNORE_STATE  2
17f0021dbaSEmil Condrea 
18f0021dbaSEmil Condrea struct XenDevOps {
19f0021dbaSEmil Condrea     size_t    size;
20f0021dbaSEmil Condrea     uint32_t  flags;
212d0ed5e6SPaul Durrant     void      (*alloc)(struct XenLegacyDevice *xendev);
222d0ed5e6SPaul Durrant     int       (*init)(struct XenLegacyDevice *xendev);
232d0ed5e6SPaul Durrant     int       (*initialise)(struct XenLegacyDevice *xendev);
242d0ed5e6SPaul Durrant     void      (*connected)(struct XenLegacyDevice *xendev);
252d0ed5e6SPaul Durrant     void      (*event)(struct XenLegacyDevice *xendev);
262d0ed5e6SPaul Durrant     void      (*disconnect)(struct XenLegacyDevice *xendev);
272d0ed5e6SPaul Durrant     int       (*free)(struct XenLegacyDevice *xendev);
282d0ed5e6SPaul Durrant     void      (*backend_changed)(struct XenLegacyDevice *xendev,
292d0ed5e6SPaul Durrant                                  const char *node);
302d0ed5e6SPaul Durrant     void      (*frontend_changed)(struct XenLegacyDevice *xendev,
312d0ed5e6SPaul Durrant                                   const char *node);
32f0021dbaSEmil Condrea     int       (*backend_register)(void);
33f0021dbaSEmil Condrea };
34f0021dbaSEmil Condrea 
352d0ed5e6SPaul Durrant struct XenLegacyDevice {
363a6c9172SJuergen Gross     DeviceState        qdev;
37f0021dbaSEmil Condrea     const char         *type;
38f0021dbaSEmil Condrea     int                dom;
39f0021dbaSEmil Condrea     int                dev;
40f0021dbaSEmil Condrea     char               name[64];
41f0021dbaSEmil Condrea     int                debug;
42f0021dbaSEmil Condrea 
43ba2a92dbSPaul Durrant     struct qemu_xs_watch *watch;
44f0021dbaSEmil Condrea     enum xenbus_state  be_state;
45f0021dbaSEmil Condrea     enum xenbus_state  fe_state;
46f0021dbaSEmil Condrea     int                online;
47f0021dbaSEmil Condrea     char               be[XEN_BUFSIZE];
48f0021dbaSEmil Condrea     char               *fe;
49f0021dbaSEmil Condrea     char               *protocol;
50f0021dbaSEmil Condrea     int                remote_port;
51f0021dbaSEmil Condrea     int                local_port;
52f0021dbaSEmil Condrea 
53f0021dbaSEmil Condrea     xenevtchn_handle   *evtchndev;
54f0021dbaSEmil Condrea     xengnttab_handle   *gnttabdev;
55f0021dbaSEmil Condrea 
56f0021dbaSEmil Condrea     struct XenDevOps   *ops;
572d0ed5e6SPaul Durrant     QTAILQ_ENTRY(XenLegacyDevice) next;
58f0021dbaSEmil Condrea };
59f0021dbaSEmil Condrea 
60f0021dbaSEmil Condrea /* ------------------------------------------------------------- */
61f0021dbaSEmil Condrea 
62f0021dbaSEmil Condrea /* xenstore helper functions */
63f0021dbaSEmil Condrea int xenstore_write_str(const char *base, const char *node, const char *val);
64f0021dbaSEmil Condrea int xenstore_write_int(const char *base, const char *node, int ival);
65f0021dbaSEmil Condrea int xenstore_write_int64(const char *base, const char *node, int64_t ival);
66f0021dbaSEmil Condrea char *xenstore_read_str(const char *base, const char *node);
67f0021dbaSEmil Condrea int xenstore_read_int(const char *base, const char *node, int *ival);
68f0021dbaSEmil Condrea int xenstore_read_uint64(const char *base, const char *node, uint64_t *uval);
69f0021dbaSEmil Condrea 
70f0021dbaSEmil Condrea const char *xenbus_strstate(enum xenbus_state state);
71f0021dbaSEmil Condrea 
7249442d96SEmil Condrea void xen_pv_evtchn_event(void *opaque);
732d0ed5e6SPaul Durrant void xen_pv_insert_xendev(struct XenLegacyDevice *xendev);
742d0ed5e6SPaul Durrant void xen_pv_del_xendev(struct XenLegacyDevice *xendev);
752d0ed5e6SPaul Durrant struct XenLegacyDevice *xen_pv_find_xendev(const char *type, int dom, int dev);
76148512e0SEmil Condrea 
772d0ed5e6SPaul Durrant void xen_pv_unbind_evtchn(struct XenLegacyDevice *xendev);
782d0ed5e6SPaul Durrant int xen_pv_send_notify(struct XenLegacyDevice *xendev);
7931c17aa5SEmil Condrea 
802d0ed5e6SPaul Durrant void xen_pv_printf(struct XenLegacyDevice *xendev, int msg_level,
819edc6313SMarc-André Lureau                    const char *fmt, ...)  G_GNUC_PRINTF(3, 4);
82f0021dbaSEmil Condrea 
83f0021dbaSEmil Condrea #endif /* QEMU_HW_XEN_PVDEV_H */
84