xen_backend.h 3.9 KB

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