xen_pvdev.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #ifndef QEMU_HW_XEN_PVDEV_H
  2. #define QEMU_HW_XEN_PVDEV_H
  3. #include "hw/qdev-core.h"
  4. #include "hw/xen/xen_backend_ops.h"
  5. /* ------------------------------------------------------------- */
  6. #define XEN_BUFSIZE 1024
  7. struct XenLegacyDevice;
  8. /* driver uses grant tables -> open gntdev device (xendev->gnttabdev) */
  9. #define DEVOPS_FLAG_NEED_GNTDEV 1
  10. /* don't expect frontend doing correct state transitions (aka console quirk) */
  11. #define DEVOPS_FLAG_IGNORE_STATE 2
  12. struct XenDevOps {
  13. size_t size;
  14. uint32_t flags;
  15. void (*alloc)(struct XenLegacyDevice *xendev);
  16. int (*init)(struct XenLegacyDevice *xendev);
  17. int (*initialise)(struct XenLegacyDevice *xendev);
  18. void (*connected)(struct XenLegacyDevice *xendev);
  19. void (*event)(struct XenLegacyDevice *xendev);
  20. void (*disconnect)(struct XenLegacyDevice *xendev);
  21. int (*free)(struct XenLegacyDevice *xendev);
  22. void (*backend_changed)(struct XenLegacyDevice *xendev,
  23. const char *node);
  24. void (*frontend_changed)(struct XenLegacyDevice *xendev,
  25. const char *node);
  26. int (*backend_register)(void);
  27. };
  28. struct XenLegacyDevice {
  29. DeviceState qdev;
  30. const char *type;
  31. int dom;
  32. int dev;
  33. char name[64];
  34. int debug;
  35. struct qemu_xs_watch *watch;
  36. enum xenbus_state be_state;
  37. enum xenbus_state fe_state;
  38. int online;
  39. char be[XEN_BUFSIZE];
  40. char *fe;
  41. char *protocol;
  42. int remote_port;
  43. int local_port;
  44. xenevtchn_handle *evtchndev;
  45. xengnttab_handle *gnttabdev;
  46. struct XenDevOps *ops;
  47. QTAILQ_ENTRY(XenLegacyDevice) next;
  48. };
  49. /* ------------------------------------------------------------- */
  50. /* xenstore helper functions */
  51. int xenstore_write_str(const char *base, const char *node, const char *val);
  52. int xenstore_write_int(const char *base, const char *node, int ival);
  53. int xenstore_write_int64(const char *base, const char *node, int64_t ival);
  54. char *xenstore_read_str(const char *base, const char *node);
  55. int xenstore_read_int(const char *base, const char *node, int *ival);
  56. int xenstore_read_uint64(const char *base, const char *node, uint64_t *uval);
  57. const char *xenbus_strstate(enum xenbus_state state);
  58. void xen_pv_evtchn_event(void *opaque);
  59. void xen_pv_insert_xendev(struct XenLegacyDevice *xendev);
  60. void xen_pv_del_xendev(struct XenLegacyDevice *xendev);
  61. struct XenLegacyDevice *xen_pv_find_xendev(const char *type, int dom, int dev);
  62. void xen_pv_unbind_evtchn(struct XenLegacyDevice *xendev);
  63. int xen_pv_send_notify(struct XenLegacyDevice *xendev);
  64. void xen_pv_printf(struct XenLegacyDevice *xendev, int msg_level,
  65. const char *fmt, ...) G_GNUC_PRINTF(3, 4);
  66. #endif /* QEMU_HW_XEN_PVDEV_H */