1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #ifndef _IPXE_XEN_H
- #define _IPXE_XEN_H
-
- /** @file
- *
- * Xen interface
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
- /* Define Xen interface version before including any Xen header files */
- #define __XEN_INTERFACE_VERSION__ 0x00040400
-
- #include <stdint.h>
- #include <ipxe/bitops.h>
- #include <ipxe/uaccess.h>
- #include <xen/xen.h>
- #include <xen/event_channel.h>
-
- /* Memory barrier macros used by ring.h */
- #define xen_mb() mb()
- #define xen_rmb() rmb()
- #define xen_wmb() wmb()
-
- struct xen_hypercall;
-
- /** A Xen grant table */
- struct xen_grant {
- /** Grant table entries */
- struct grant_entry_v1 *table;
- /** Total grant table length */
- size_t len;
- /** Entry size shift (for later version tables) */
- unsigned int shift;
- /** Number of grant table entries in use */
- unsigned int used;
- /** Most recently used grant reference */
- unsigned int ref;
- };
-
- /** A XenStore */
- struct xen_store {
- /** XenStore domain interface */
- struct xenstore_domain_interface *intf;
- /** Event channel */
- evtchn_port_t port;
- };
-
- /** A Xen hypervisor */
- struct xen_hypervisor {
- /** Hypercall table */
- struct xen_hypercall *hypercall;
- /** Shared info page */
- struct shared_info *shared;
- /** Grant table */
- struct xen_grant grant;
- /** XenStore */
- struct xen_store store;
- };
-
- /**
- * Test and clear pending event
- *
- * @v xen Xen hypervisor
- * @v port Event channel port
- * @ret pending Event was pending
- */
- static inline __attribute__ (( always_inline )) int
- xenevent_pending ( struct xen_hypervisor *xen, evtchn_port_t port ) {
-
- return test_and_clear_bit ( port, xen->shared->evtchn_pending );
- }
-
- #include <bits/xen.h>
-
- /**
- * Convert a Xen status code to an iPXE status code
- *
- * @v xenrc Xen status code (negated)
- * @ret rc iPXE status code (before negation)
- *
- * Xen status codes are defined in the file include/xen/errno.h in the
- * Xen repository. They happen to match the Linux error codes, some
- * of which can be found in our include/ipxe/errno/linux.h.
- */
- #define EXEN( xenrc ) EPLATFORM ( EINFO_EPLATFORM, -(xenrc) )
-
- #endif /* _IPXE_XEN_H */
|