xen_backend.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #ifndef QEMU_HW_XEN_BACKEND_H
  2. #define QEMU_HW_XEN_BACKEND_H 1
  3. #include "xen_common.h"
  4. #include "sysemu.h"
  5. #include "net.h"
  6. /* ------------------------------------------------------------- */
  7. #define XEN_BUFSIZE 1024
  8. struct XenDevice;
  9. /* driver uses grant tables -> open gntdev device (xendev->gnttabdev) */
  10. #define DEVOPS_FLAG_NEED_GNTDEV 1
  11. /* don't expect frontend doing correct state transitions (aka console quirk) */
  12. #define DEVOPS_FLAG_IGNORE_STATE 2
  13. struct XenDevOps {
  14. size_t size;
  15. uint32_t flags;
  16. void (*alloc)(struct XenDevice *xendev);
  17. int (*init)(struct XenDevice *xendev);
  18. int (*connect)(struct XenDevice *xendev);
  19. void (*event)(struct XenDevice *xendev);
  20. void (*disconnect)(struct XenDevice *xendev);
  21. int (*free)(struct XenDevice *xendev);
  22. void (*backend_changed)(struct XenDevice *xendev, const char *node);
  23. void (*frontend_changed)(struct XenDevice *xendev, const char *node);
  24. };
  25. struct XenDevice {
  26. const char *type;
  27. int dom;
  28. int dev;
  29. char name[64];
  30. int debug;
  31. enum xenbus_state be_state;
  32. enum xenbus_state fe_state;
  33. int online;
  34. char be[XEN_BUFSIZE];
  35. char *fe;
  36. char *protocol;
  37. int remote_port;
  38. int local_port;
  39. XenEvtchn evtchndev;
  40. XenGnttab gnttabdev;
  41. struct XenDevOps *ops;
  42. QTAILQ_ENTRY(XenDevice) next;
  43. };
  44. /* ------------------------------------------------------------- */
  45. /* variables */
  46. extern XenXC xen_xc;
  47. extern struct xs_handle *xenstore;
  48. extern const char *xen_protocol;
  49. /* xenstore helper functions */
  50. int xenstore_write_str(const char *base, const char *node, const char *val);
  51. int xenstore_write_int(const char *base, const char *node, int ival);
  52. char *xenstore_read_str(const char *base, const char *node);
  53. int xenstore_read_int(const char *base, const char *node, int *ival);
  54. int xenstore_write_be_str(struct XenDevice *xendev, const char *node, const char *val);
  55. int xenstore_write_be_int(struct XenDevice *xendev, const char *node, int ival);
  56. char *xenstore_read_be_str(struct XenDevice *xendev, const char *node);
  57. int xenstore_read_be_int(struct XenDevice *xendev, const char *node, int *ival);
  58. char *xenstore_read_fe_str(struct XenDevice *xendev, const char *node);
  59. int xenstore_read_fe_int(struct XenDevice *xendev, const char *node, int *ival);
  60. const char *xenbus_strstate(enum xenbus_state state);
  61. struct XenDevice *xen_be_find_xendev(const char *type, int dom, int dev);
  62. void xen_be_check_state(struct XenDevice *xendev);
  63. /* xen backend driver bits */
  64. int xen_be_init(void);
  65. int xen_be_register(const char *type, struct XenDevOps *ops);
  66. int xen_be_set_state(struct XenDevice *xendev, enum xenbus_state state);
  67. int xen_be_bind_evtchn(struct XenDevice *xendev);
  68. void xen_be_unbind_evtchn(struct XenDevice *xendev);
  69. int xen_be_send_notify(struct XenDevice *xendev);
  70. void xen_be_printf(struct XenDevice *xendev, int msg_level, const char *fmt, ...)
  71. GCC_FMT_ATTR(3, 4);
  72. /* actual backend drivers */
  73. extern struct XenDevOps xen_console_ops; /* xen_console.c */
  74. extern struct XenDevOps xen_kbdmouse_ops; /* xen_framebuffer.c */
  75. extern struct XenDevOps xen_framebuffer_ops; /* xen_framebuffer.c */
  76. extern struct XenDevOps xen_blkdev_ops; /* xen_disk.c */
  77. extern struct XenDevOps xen_netdev_ops; /* xen_nic.c */
  78. void xen_init_display(int domid);
  79. /* configuration (aka xenbus setup) */
  80. void xen_config_cleanup(void);
  81. int xen_config_dev_blk(DriveInfo *disk);
  82. int xen_config_dev_nic(NICInfo *nic);
  83. int xen_config_dev_vfb(int vdev, const char *type);
  84. int xen_config_dev_vkbd(int vdev);
  85. int xen_config_dev_console(int vdev);
  86. #endif /* QEMU_HW_XEN_BACKEND_H */