Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Simple wrappers around HVM functions */
0003 #ifndef XEN_HVM_H__
0004 #define XEN_HVM_H__
0005 
0006 #include <xen/interface/hvm/params.h>
0007 #include <asm/xen/hypercall.h>
0008 
0009 static const char *param_name(int op)
0010 {
0011 #define PARAM(x) [HVM_PARAM_##x] = #x
0012     static const char *const names[] = {
0013         PARAM(CALLBACK_IRQ),
0014         PARAM(STORE_PFN),
0015         PARAM(STORE_EVTCHN),
0016         PARAM(PAE_ENABLED),
0017         PARAM(IOREQ_PFN),
0018         PARAM(BUFIOREQ_PFN),
0019         PARAM(TIMER_MODE),
0020         PARAM(HPET_ENABLED),
0021         PARAM(IDENT_PT),
0022         PARAM(DM_DOMAIN),
0023         PARAM(ACPI_S_STATE),
0024         PARAM(VM86_TSS),
0025         PARAM(VPT_ALIGN),
0026         PARAM(CONSOLE_PFN),
0027         PARAM(CONSOLE_EVTCHN),
0028     };
0029 #undef PARAM
0030 
0031     if (op >= ARRAY_SIZE(names))
0032         return "unknown";
0033 
0034     if (!names[op])
0035         return "reserved";
0036 
0037     return names[op];
0038 }
0039 static inline int hvm_get_parameter(int idx, uint64_t *value)
0040 {
0041     struct xen_hvm_param xhv;
0042     int r;
0043 
0044     xhv.domid = DOMID_SELF;
0045     xhv.index = idx;
0046     r = HYPERVISOR_hvm_op(HVMOP_get_param, &xhv);
0047     if (r < 0) {
0048         pr_err("Cannot get hvm parameter %s (%d): %d!\n",
0049                param_name(idx), idx, r);
0050         return r;
0051     }
0052     *value = xhv.value;
0053     return r;
0054 }
0055 
0056 #define HVM_CALLBACK_VIA_TYPE_VECTOR 0x2
0057 #define HVM_CALLBACK_VIA_TYPE_SHIFT 56
0058 #define HVM_CALLBACK_VECTOR(x) (((uint64_t)HVM_CALLBACK_VIA_TYPE_VECTOR)<<\
0059         HVM_CALLBACK_VIA_TYPE_SHIFT | (x))
0060 
0061 void xen_setup_callback_vector(void);
0062 
0063 int xen_set_upcall_vector(unsigned int cpu);
0064 
0065 #endif /* XEN_HVM_H__ */