xref: /qemu/include/hw/xen/xen_pvdev.h (revision 88f5ed70)
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 };
33f0021dbaSEmil Condrea 
342d0ed5e6SPaul Durrant struct XenLegacyDevice {
353a6c9172SJuergen Gross     DeviceState        qdev;
36f0021dbaSEmil Condrea     const char         *type;
37f0021dbaSEmil Condrea     int                dom;
38f0021dbaSEmil Condrea     int                dev;
39f0021dbaSEmil Condrea     char               name[64];
40f0021dbaSEmil Condrea     int                debug;
41f0021dbaSEmil Condrea 
42ba2a92dbSPaul Durrant     struct qemu_xs_watch *watch;
43f0021dbaSEmil Condrea     enum xenbus_state  be_state;
44f0021dbaSEmil Condrea     enum xenbus_state  fe_state;
45f0021dbaSEmil Condrea     int                online;
46f0021dbaSEmil Condrea     char               be[XEN_BUFSIZE];
47f0021dbaSEmil Condrea     char               *fe;
48f0021dbaSEmil Condrea     char               *protocol;
49f0021dbaSEmil Condrea     int                remote_port;
50f0021dbaSEmil Condrea     int                local_port;
51f0021dbaSEmil Condrea 
52f0021dbaSEmil Condrea     xenevtchn_handle   *evtchndev;
53f0021dbaSEmil Condrea     xengnttab_handle   *gnttabdev;
54f0021dbaSEmil Condrea 
55f0021dbaSEmil Condrea     struct XenDevOps   *ops;
562d0ed5e6SPaul Durrant     QTAILQ_ENTRY(XenLegacyDevice) next;
57f0021dbaSEmil Condrea };
58f0021dbaSEmil Condrea 
59f0021dbaSEmil Condrea /* ------------------------------------------------------------- */
60f0021dbaSEmil Condrea 
61f0021dbaSEmil Condrea /* xenstore helper functions */
62f0021dbaSEmil Condrea int xenstore_write_str(const char *base, const char *node, const char *val);
63f0021dbaSEmil Condrea int xenstore_write_int(const char *base, const char *node, int ival);
64f0021dbaSEmil Condrea int xenstore_write_int64(const char *base, const char *node, int64_t ival);
65f0021dbaSEmil Condrea char *xenstore_read_str(const char *base, const char *node);
66f0021dbaSEmil Condrea int xenstore_read_int(const char *base, const char *node, int *ival);
67f0021dbaSEmil Condrea int xenstore_read_uint64(const char *base, const char *node, uint64_t *uval);
68f0021dbaSEmil Condrea 
69f0021dbaSEmil Condrea const char *xenbus_strstate(enum xenbus_state state);
70f0021dbaSEmil Condrea 
7149442d96SEmil Condrea void xen_pv_evtchn_event(void *opaque);
722d0ed5e6SPaul Durrant void xen_pv_insert_xendev(struct XenLegacyDevice *xendev);
732d0ed5e6SPaul Durrant void xen_pv_del_xendev(struct XenLegacyDevice *xendev);
742d0ed5e6SPaul Durrant struct XenLegacyDevice *xen_pv_find_xendev(const char *type, int dom, int dev);
75148512e0SEmil Condrea 
762d0ed5e6SPaul Durrant void xen_pv_unbind_evtchn(struct XenLegacyDevice *xendev);
772d0ed5e6SPaul Durrant int xen_pv_send_notify(struct XenLegacyDevice *xendev);
7831c17aa5SEmil Condrea 
792d0ed5e6SPaul Durrant void xen_pv_printf(struct XenLegacyDevice *xendev, int msg_level,
809edc6313SMarc-André Lureau                    const char *fmt, ...)  G_GNUC_PRINTF(3, 4);
81f0021dbaSEmil Condrea 
82f0021dbaSEmil Condrea #endif /* QEMU_HW_XEN_PVDEV_H */
83