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