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