26#include <xen/xen-os.h>
27#include <xen/hypervisor.h>
29#include <contrib/xen/hvm/params.h>
38static inline unsigned long
39hvm_get_parameter(
int index)
41 struct xen_hvm_param xhv;
44 xhv.domid = DOMID_SELF;
46 error = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv);
48 printf(
"%s: error %d trying to get %d\n", __func__,
60 HVM_CB_TYPE_MASK = 0xFF,
61 HVM_CB_TYPE_SHIFT = 56
66 HVM_CB_GSI_GSI_MASK = 0xFFFFFFFF,
67 HVM_CB_GSI_GSI_SHIFT = 0
69#define HVM_CALLBACK_GSI(gsi) \
70 (((uint64_t)HVM_CB_TYPE_GSI << HVM_CB_TYPE_SHIFT) \
71 | ((gsi) & HVM_CB_GSI_GSI_MASK) << HVM_CB_GSI_GSI_SHIFT)
75 HVM_CB_PCI_INTX_INTPIN_MASK = 0x3,
76 HVM_CB_PCI_INTX_INTPIN_SHIFT = 0,
77 HVM_CB_PCI_INTX_SLOT_MASK = 0x1F,
78 HVM_CB_PCI_INTX_SLOT_SHIFT = 11,
80#define HVM_CALLBACK_PCI_INTX(slot, pin) \
81 (((uint64_t)HVM_CB_TYPE_PCI_INTX << HVM_CB_TYPE_SHIFT) \
82 | (((slot) & HVM_CB_PCI_INTX_SLOT_MASK) << HVM_CB_PCI_INTX_SLOT_SHIFT) \
83 | (((pin) & HVM_CB_PCI_INTX_INTPIN_MASK) << HVM_CB_PCI_INTX_INTPIN_SHIFT))
87 HVM_CB_VECTOR_VECTOR_MASK = 0xFFFFFFFF,
88 HVM_CB_VECTOR_VECTOR_SHIFT = 0
90#define HVM_CALLBACK_VECTOR(vector) \
91 (((uint64_t)HVM_CB_TYPE_VECTOR << HVM_CB_TYPE_SHIFT) \
92 | (((vector) & HVM_CB_GSI_GSI_MASK) << HVM_CB_GSI_GSI_SHIFT))
94enum xen_hvm_init_type {
97 XEN_HVM_INIT_CANCELLED_SUSPEND,
101int xen_hvm_init_hypercall_stubs(
enum xen_hvm_init_type);
102void xen_hvm_set_callback(device_t);
103void xen_hvm_suspend(
void);
104void xen_hvm_resume(
bool suspend_cancelled);
106extern uint32_t hvm_start_flags;
107extern bool xen_evtchn_needs_ack;