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 55*61d993d4SPhilippe Mathieu-Daudé const 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