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