iPXE
hvm.h
Go to the documentation of this file.
1#ifndef _HVM_H
2#define _HVM_H
3
4/** @file
5 *
6 * Xen HVM driver
7 *
8 */
9
10FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11FILE_SECBOOT ( PERMITTED );
12
13#include <stdint.h>
14#include <ipxe/xen.h>
15#include <xen/hvm/hvm_op.h>
16#include <xen/hvm/params.h>
17
18/** Minimum CPUID base */
19#define HVM_CPUID_MIN 0x40000000UL
20
21/** Maximum CPUID base */
22#define HVM_CPUID_MAX 0x4000ff00UL
23
24/** Increment between CPUID bases */
25#define HVM_CPUID_STEP 0x00000100UL
26
27/** Magic signature */
28#define HVM_CPUID_MAGIC "XenVMMXenVMM"
29
30/** Get Xen version */
31#define HVM_CPUID_VERSION 1
32
33/** Get number of hypercall pages */
34#define HVM_CPUID_PAGES 2
35
36/** PCI MMIO BAR */
37#define HVM_MMIO_BAR PCI_BASE_ADDRESS_1
38
39/** A Xen HVM device */
40struct hvm_device {
41 /** Xen hypervisor */
43 /** PCI device */
44 struct pci_device *pci;
45 /** CPUID base */
47 /** Length of hypercall table */
49 /** MMIO base address */
50 unsigned long mmio;
51 /** Current offset within MMIO address space */
53 /** Length of MMIO address space */
54 size_t mmio_len;
55};
56
57/**
58 * Get HVM parameter value
59 *
60 * @v xen Xen hypervisor
61 * @v index Parameter index
62 * @v value Value to fill in
63 * @ret xenrc Xen status code
64 */
65static inline int xen_hvm_get_param ( struct xen_hypervisor *xen,
66 unsigned int index, uint64_t *value ) {
67 struct xen_hvm_param param;
68 int xenrc;
69
70 param.domid = DOMID_SELF;
71 param.index = index;
72 xenrc = xen_hypercall_2 ( xen, __HYPERVISOR_hvm_op, HVMOP_get_param,
73 virt_to_phys ( &param ) );
74 *value = param.value;
75 return xenrc;
76}
77
78#endif /* _HVM_H */
pseudo_bit_t value[0x00020]
Definition arbel.h:2
unsigned int uint32_t
Definition stdint.h:12
unsigned long long uint64_t
Definition stdint.h:13
long index
Definition bigint.h:65
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
Definition compiler.h:926
static int xen_hvm_get_param(struct xen_hypervisor *xen, unsigned int index, uint64_t *value)
Get HVM parameter value.
Definition hvm.h:65
#define HVMOP_get_param
Definition hvm_op.h:18
struct hv_monitor_parameter param[4][32]
Parameters.
Definition hyperv.h:13
Xen interface.
#define __HYPERVISOR_hvm_op
Definition xen.h:115
#define DOMID_SELF
Definition xen.h:581
A Xen HVM device.
Definition hvm.h:40
uint32_t cpuid_base
CPUID base.
Definition hvm.h:46
unsigned long mmio
MMIO base address.
Definition hvm.h:50
size_t hypercall_len
Length of hypercall table.
Definition hvm.h:48
struct xen_hypervisor xen
Xen hypervisor.
Definition hvm.h:42
size_t mmio_len
Length of MMIO address space.
Definition hvm.h:54
size_t mmio_offset
Current offset within MMIO address space.
Definition hvm.h:52
struct pci_device * pci
PCI device.
Definition hvm.h:44
A PCI device.
Definition pci.h:211
A Xen hypervisor.
Definition xen.h:51