xen_devconfig.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "qemu/osdep.h"
  2. #include "hw/xen/xen-legacy-backend.h"
  3. #include "qemu/option.h"
  4. #include "system/blockdev.h"
  5. #include "system/system.h"
  6. /* ------------------------------------------------------------- */
  7. static int xen_config_dev_dirs(const char *ftype, const char *btype, int vdev,
  8. char *fe, char *be, int len)
  9. {
  10. char *dom;
  11. dom = qemu_xen_xs_get_domain_path(xenstore, xen_domid);
  12. snprintf(fe, len, "%s/device/%s/%d", dom, ftype, vdev);
  13. free(dom);
  14. dom = qemu_xen_xs_get_domain_path(xenstore, 0);
  15. snprintf(be, len, "%s/backend/%s/%d/%d", dom, btype, xen_domid, vdev);
  16. free(dom);
  17. xenstore_mkdir(fe, XS_PERM_READ | XS_PERM_WRITE);
  18. xenstore_mkdir(be, XS_PERM_READ);
  19. return 0;
  20. }
  21. static int xen_config_dev_all(char *fe, char *be)
  22. {
  23. /* frontend */
  24. if (xen_protocol)
  25. xenstore_write_str(fe, "protocol", xen_protocol);
  26. xenstore_write_int(fe, "state", XenbusStateInitialising);
  27. xenstore_write_int(fe, "backend-id", 0);
  28. xenstore_write_str(fe, "backend", be);
  29. /* backend */
  30. xenstore_write_str(be, "domain", qemu_name ? qemu_name : "no-name");
  31. xenstore_write_int(be, "online", 1);
  32. xenstore_write_int(be, "state", XenbusStateInitialising);
  33. xenstore_write_int(be, "frontend-id", xen_domid);
  34. xenstore_write_str(be, "frontend", fe);
  35. return 0;
  36. }
  37. /* ------------------------------------------------------------- */
  38. int xen_config_dev_vfb(int vdev, const char *type)
  39. {
  40. char fe[256], be[256];
  41. xen_config_dev_dirs("vfb", "vfb", vdev, fe, be, sizeof(fe));
  42. /* backend */
  43. xenstore_write_str(be, "type", type);
  44. /* common stuff */
  45. return xen_config_dev_all(fe, be);
  46. }
  47. int xen_config_dev_vkbd(int vdev)
  48. {
  49. char fe[256], be[256];
  50. xen_config_dev_dirs("vkbd", "vkbd", vdev, fe, be, sizeof(fe));
  51. return xen_config_dev_all(fe, be);
  52. }