aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/asm-x86/hvm/viridian.h
diff options
context:
space:
mode:
Diffstat (limited to 'xen/include/asm-x86/hvm/viridian.h')
-rw-r--r--xen/include/asm-x86/hvm/viridian.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/xen/include/asm-x86/hvm/viridian.h b/xen/include/asm-x86/hvm/viridian.h
new file mode 100644
index 0000000000..ac16966172
--- /dev/null
+++ b/xen/include/asm-x86/hvm/viridian.h
@@ -0,0 +1,65 @@
+/*****************************************************************************
+ *
+ * include/xen/viridian.h
+ *
+ * Copyright (c) 2008 Citrix Corp.
+ *
+ */
+
+#ifndef __ASM_X86_HVM_VIRIDIAN_H__
+#define __ASM_X86_HVM_VIRIDIAN_H__
+
+union viridian_guest_os_id
+{
+ uint64_t raw;
+ struct
+ {
+ uint64_t build_number:16;
+ uint64_t service_pack:8;
+ uint64_t minor:8;
+ uint64_t major:8;
+ uint64_t os:8;
+ uint64_t vendor:16;
+ } fields;
+};
+
+union viridian_hypercall_gpa
+{ uint64_t raw;
+ struct
+ {
+ uint64_t enabled:1;
+ uint64_t reserved_preserved:11;
+ uint64_t pfn:48;
+ } fields;
+};
+
+struct viridian_domain
+{
+ union viridian_guest_os_id guest_os_id;
+ union viridian_hypercall_gpa hypercall_gpa;
+};
+
+int
+cpuid_viridian_leaves(
+ unsigned int leaf,
+ unsigned int *eax,
+ unsigned int *ebx,
+ unsigned int *ecx,
+ unsigned int *edx);
+
+int
+wrmsr_viridian_regs(
+ uint32_t idx,
+ uint32_t eax,
+ uint32_t edx);
+
+int
+rdmsr_viridian_regs(
+ uint32_t idx,
+ uint32_t *eax,
+ uint32_t *edx);
+
+int
+viridian_hypercall(struct cpu_user_regs *regs);
+
+#endif /* __ASM_X86_HVM_VIRIDIAN_H__ */