You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

xenbus.h 1.8KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #ifndef _IPXE_XENBUS_H
  2. #define _IPXE_XENBUS_H
  3. /** @file
  4. *
  5. * Xen device bus
  6. *
  7. */
  8. FILE_LICENCE ( GPL2_OR_LATER );
  9. #include <ipxe/device.h>
  10. #include <ipxe/tables.h>
  11. #include <ipxe/xen.h>
  12. #include <xen/io/xenbus.h>
  13. /** A Xen device */
  14. struct xen_device {
  15. /** Generic iPXE device */
  16. struct device dev;
  17. /** Xen hypervisor */
  18. struct xen_hypervisor *xen;
  19. /** XenStore key */
  20. char *key;
  21. /** Backend XenStore key */
  22. char *backend;
  23. /** Backend domain ID */
  24. unsigned long backend_id;
  25. /** Driver */
  26. struct xen_driver *driver;
  27. /** Driver-private data */
  28. void *priv;
  29. };
  30. /** A Xen device driver */
  31. struct xen_driver {
  32. /** Name */
  33. const char *name;
  34. /** Device type */
  35. const char *type;
  36. /** Probe device
  37. *
  38. * @v xendev Xen device
  39. * @ret rc Return status code
  40. */
  41. int ( * probe ) ( struct xen_device *xendev );
  42. /** Remove device
  43. *
  44. * @v xendev Xen device
  45. */
  46. void ( * remove ) ( struct xen_device *xendev );
  47. };
  48. /** Xen device driver table */
  49. #define XEN_DRIVERS __table ( struct xen_driver, "xen_drivers" )
  50. /** Declare a Xen device driver */
  51. #define __xen_driver __table_entry ( XEN_DRIVERS, 01 )
  52. /**
  53. * Set Xen device driver-private data
  54. *
  55. * @v xendev Xen device
  56. * @v priv Private data
  57. */
  58. static inline void xen_set_drvdata ( struct xen_device *xendev, void *priv ) {
  59. xendev->priv = priv;
  60. }
  61. /**
  62. * Get Xen device driver-private data
  63. *
  64. * @v xendev Xen device
  65. * @ret priv Private data
  66. */
  67. static inline void * xen_get_drvdata ( struct xen_device *xendev ) {
  68. return xendev->priv;
  69. }
  70. extern int xenbus_set_state ( struct xen_device *xendev, int state );
  71. extern int xenbus_backend_wait ( struct xen_device *xendev, int state );
  72. extern int xenbus_probe ( struct xen_hypervisor *xen, struct device *parent );
  73. extern void xenbus_remove ( struct xen_hypervisor *xen, struct device *parent );
  74. #endif /* _IPXE_XENBUS_H */