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 { 32f0021dbaSEmil Condrea const char *type; 33f0021dbaSEmil Condrea int dom; 34f0021dbaSEmil Condrea int dev; 35f0021dbaSEmil Condrea char name[64]; 36f0021dbaSEmil Condrea int debug; 37f0021dbaSEmil Condrea 38f0021dbaSEmil Condrea enum xenbus_state be_state; 39f0021dbaSEmil Condrea enum xenbus_state fe_state; 40f0021dbaSEmil Condrea int online; 41f0021dbaSEmil Condrea char be[XEN_BUFSIZE]; 42f0021dbaSEmil Condrea char *fe; 43f0021dbaSEmil Condrea char *protocol; 44f0021dbaSEmil Condrea int remote_port; 45f0021dbaSEmil Condrea int local_port; 46f0021dbaSEmil Condrea 47f0021dbaSEmil Condrea xenevtchn_handle *evtchndev; 48f0021dbaSEmil Condrea xengnttab_handle *gnttabdev; 49f0021dbaSEmil Condrea 50f0021dbaSEmil Condrea struct XenDevOps *ops; 51f0021dbaSEmil Condrea QTAILQ_ENTRY(XenDevice) next; 52f0021dbaSEmil Condrea }; 53f0021dbaSEmil Condrea 54f0021dbaSEmil Condrea /* ------------------------------------------------------------- */ 55f0021dbaSEmil Condrea 56f0021dbaSEmil Condrea /* xenstore helper functions */ 57f0021dbaSEmil Condrea int xenstore_write_str(const char *base, const char *node, const char *val); 58f0021dbaSEmil Condrea int xenstore_write_int(const char *base, const char *node, int ival); 59f0021dbaSEmil Condrea int xenstore_write_int64(const char *base, const char *node, int64_t ival); 60f0021dbaSEmil Condrea char *xenstore_read_str(const char *base, const char *node); 61f0021dbaSEmil Condrea int xenstore_read_int(const char *base, const char *node, int *ival); 62f0021dbaSEmil Condrea int xenstore_read_uint64(const char *base, const char *node, uint64_t *uval); 63046db9beSEmil Condrea void xenstore_update(void *unused); 64f0021dbaSEmil Condrea 65f0021dbaSEmil Condrea const char *xenbus_strstate(enum xenbus_state state); 66f0021dbaSEmil Condrea 67*49442d96SEmil Condrea void xen_pv_evtchn_event(void *opaque); 68148512e0SEmil Condrea void xen_pv_insert_xendev(struct XenDevice *xendev); 69148512e0SEmil Condrea void xen_be_del_xendev(struct XenDevice *xendev); 70148512e0SEmil Condrea struct XenDevice *xen_be_find_xendev(const char *type, int dom, int dev); 71148512e0SEmil Condrea 7265807f4bSEmil Condrea void xen_pv_unbind_evtchn(struct XenDevice *xendev); 73ba18fa2aSEmil Condrea int xen_pv_send_notify(struct XenDevice *xendev); 7431c17aa5SEmil Condrea 7596c77dbaSEmil Condrea void xen_pv_printf(struct XenDevice *xendev, int msg_level, 76f0021dbaSEmil Condrea const char *fmt, ...) GCC_FMT_ATTR(3, 4); 77f0021dbaSEmil Condrea 78f0021dbaSEmil Condrea #endif /* QEMU_HW_XEN_PVDEV_H */ 79