123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- #ifndef _HVM_H
- #define _HVM_H
-
- /** @file
- *
- * Xen HVM driver
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
- #include <stdint.h>
- #include <ipxe/xen.h>
- #include <xen/hvm/hvm_op.h>
- #include <xen/hvm/params.h>
-
- /** Minimum CPUID base */
- #define HVM_CPUID_MIN 0x40000000UL
-
- /** Maximum CPUID base */
- #define HVM_CPUID_MAX 0x4000ff00UL
-
- /** Increment between CPUID bases */
- #define HVM_CPUID_STEP 0x00000100UL
-
- /** Magic signature */
- #define HVM_CPUID_MAGIC "XenVMMXenVMM"
-
- /** Get Xen version */
- #define HVM_CPUID_VERSION 1
-
- /** Get number of hypercall pages */
- #define HVM_CPUID_PAGES 2
-
- /** PCI MMIO BAR */
- #define HVM_MMIO_BAR PCI_BASE_ADDRESS_1
-
- /** A Xen HVM device */
- struct hvm_device {
- /** Xen hypervisor */
- struct xen_hypervisor xen;
- /** CPUID base */
- uint32_t cpuid_base;
- /** Length of hypercall table */
- size_t hypercall_len;
- /** MMIO base address */
- unsigned long mmio;
- /** Current offset within MMIO address space */
- size_t mmio_offset;
- /** Length of MMIO address space */
- size_t mmio_len;
- };
-
- /**
- * Get HVM parameter value
- *
- * @v xen Xen hypervisor
- * @v index Parameter index
- * @v value Value to fill in
- * @ret xenrc Xen status code
- */
- static inline int xen_hvm_get_param ( struct xen_hypervisor *xen,
- unsigned int index, uint64_t *value ) {
- struct xen_hvm_param param;
- int xenrc;
-
- param.domid = DOMID_SELF;
- param.index = index;
- xenrc = xen_hypercall_2 ( xen, __HYPERVISOR_hvm_op, HVMOP_get_param,
- virt_to_phys ( ¶m ) );
- *value = param.value;
- return xenrc;
- }
-
- #endif /* _HVM_H */
|