2
0

xen_backend.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #ifndef QEMU_HW_XEN_BACKEND_H
  2. #define QEMU_HW_XEN_BACKEND_H 1
  3. #include "xen_common.h"
  4. #include "sysemu/sysemu.h"
  5. #include "net/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 (*initialise)(struct XenDevice *xendev);
  19. void (*connected)(struct XenDevice *xendev);
  20. void (*event)(struct XenDevice *xendev);
  21. void (*disconnect)(struct XenDevice *xendev);
  22. int (*free)(struct XenDevice *xendev);
  23. void (*backend_changed)(struct XenDevice *xendev, const char *node);
  24. void (*frontend_changed)(struct XenDevice *xendev, const char *node);
  25. };
  26. struct XenDevice {
  27. const char *type;
  28. int dom;
  29. int dev;
  30. char name[64];
  31. int debug;
  32. enum xenbus_state be_state;
  33. enum xenbus_state fe_state;
  34. int online;
  35. char be[XEN_BUFSIZE];
  36. char *fe;
  37. char *protocol;
  38. int remote_port;
  39. int local_port;
  40. XenEvtchn evtchndev;
  41. XenGnttab gnttabdev;
  42. struct XenDevOps *ops;
  43. QTAILQ_ENTRY(XenDevice) next;
  44. };
  45. /* ------------------------------------------------------------- */
  46. /* variables */
  47. extern XenXC xen_xc;
  48. extern struct xs_handle *xenstore;
  49. extern const char *xen_protocol;
  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. char *xenstore_read_str(const char *base, const char *node);
  54. int xenstore_read_int(const char *base, const char *node, int *ival);
  55. int xenstore_write_be_str(struct XenDevice *xendev, const char *node, const char *val);
  56. int xenstore_write_be_int(struct XenDevice *xendev, const char *node, int ival);
  57. char *xenstore_read_be_str(struct XenDevice *xendev, const char *node);
  58. int xenstore_read_be_int(struct XenDevice *xendev, const char *node, int *ival);
  59. char *xenstore_read_fe_str(struct XenDevice *xendev, const char *node);
  60. int xenstore_read_fe_int(struct XenDevice *xendev, const char *node, int *ival);
  61. const char *xenbus_strstate(enum xenbus_state state);
  62. struct XenDevice *xen_be_find_xendev(const char *type, int dom, int dev);
  63. void xen_be_check_state(struct XenDevice *xendev);
  64. /* xen backend driver bits */
  65. int xen_be_init(void);
  66. int xen_be_register(const char *type, struct XenDevOps *ops);
  67. int xen_be_set_state(struct XenDevice *xendev, enum xenbus_state state);
  68. int xen_be_bind_evtchn(struct XenDevice *xendev);
  69. void xen_be_unbind_evtchn(struct XenDevice *xendev);
  70. int xen_be_send_notify(struct XenDevice *xendev);
  71. void xen_be_printf(struct XenDevice *xendev, int msg_level, const char *fmt, ...)
  72. GCC_FMT_ATTR(3, 4);
  73. /* actual backend drivers */
  74. extern struct XenDevOps xen_console_ops; /* xen_console.c */
  75. extern struct XenDevOps xen_kbdmouse_ops; /* xen_framebuffer.c */
  76. extern struct XenDevOps xen_framebuffer_ops; /* xen_framebuffer.c */
  77. extern struct XenDevOps xen_blkdev_ops; /* xen_disk.c */
  78. extern struct XenDevOps xen_netdev_ops; /* xen_nic.c */
  79. void xen_init_display(int domid);
  80. /* configuration (aka xenbus setup) */
  81. void xen_config_cleanup(void);
  82. int xen_config_dev_blk(DriveInfo *disk);
  83. int xen_config_dev_nic(NICInfo *nic);
  84. int xen_config_dev_vfb(int vdev, const char *type);
  85. int xen_config_dev_vkbd(int vdev);
  86. int xen_config_dev_console(int vdev);
  87. #endif /* QEMU_HW_XEN_BACKEND_H */