]> xenbits.xensource.com Git - people/andrewcoop/xen-test-framework.git/commitdiff
domctls
authorAndrew Cooper <andrew.cooper3@citrix.com>
Sat, 21 Jul 2018 15:54:31 +0000 (16:54 +0100)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 22 Dec 2020 21:30:50 +0000 (21:30 +0000)
common/lib.c
include/xen/arch-x86/xen.h
include/xen/domctl.h [new file with mode: 0644]
include/xtf/hypercall.h
include/xtf/lib.h

index acf4da17d2894fbd97635cf341d9052950cbbbf0..9174140b025384c14c74a4fe2bd0744bafe11d29 100644 (file)
@@ -43,6 +43,21 @@ int xtf_probe_sysctl_interface_version(void)
     return -1;
 }
 
+int xtf_probe_domctl_interface_version(void)
+{
+    int i;
+    struct xen_domctl op = { .cmd = 0 };
+
+    for ( i = 0; i < 128; i++ )
+    {
+        op.interface_version = i;
+        if ( hypercall_domctl(&op) != -EACCES )
+            return i;
+    }
+
+    return -1;
+}
+
 int xtf_get_domid(void)
 {
     int rc = xenstore_init();
index 87747392c7d34e3e33012c584109cc1fa88bf2d2..b3361234b1c14f4d60afa43fdc4a533d4de2b322 100644 (file)
@@ -132,6 +132,43 @@ struct arch_shared_info {
 #endif
 };
 
+/*
+ * struct xen_arch_domainconfig's ABI is covered by
+ * XEN_DOMCTL_INTERFACE_VERSION.
+ */
+struct xen_arch_domainconfig {
+#define _XEN_X86_EMU_LAPIC          0
+#define XEN_X86_EMU_LAPIC           (1U<<_XEN_X86_EMU_LAPIC)
+#define _XEN_X86_EMU_HPET           1
+#define XEN_X86_EMU_HPET            (1U<<_XEN_X86_EMU_HPET)
+#define _XEN_X86_EMU_PM             2
+#define XEN_X86_EMU_PM              (1U<<_XEN_X86_EMU_PM)
+#define _XEN_X86_EMU_RTC            3
+#define XEN_X86_EMU_RTC             (1U<<_XEN_X86_EMU_RTC)
+#define _XEN_X86_EMU_IOAPIC         4
+#define XEN_X86_EMU_IOAPIC          (1U<<_XEN_X86_EMU_IOAPIC)
+#define _XEN_X86_EMU_PIC            5
+#define XEN_X86_EMU_PIC             (1U<<_XEN_X86_EMU_PIC)
+#define _XEN_X86_EMU_VGA            6
+#define XEN_X86_EMU_VGA             (1U<<_XEN_X86_EMU_VGA)
+#define _XEN_X86_EMU_IOMMU          7
+#define XEN_X86_EMU_IOMMU           (1U<<_XEN_X86_EMU_IOMMU)
+#define _XEN_X86_EMU_PIT            8
+#define XEN_X86_EMU_PIT             (1U<<_XEN_X86_EMU_PIT)
+#define _XEN_X86_EMU_USE_PIRQ       9
+#define XEN_X86_EMU_USE_PIRQ        (1U<<_XEN_X86_EMU_USE_PIRQ)
+#define _XEN_X86_EMU_VPCI           10
+#define XEN_X86_EMU_VPCI            (1U<<_XEN_X86_EMU_VPCI)
+
+#define XEN_X86_EMU_ALL             (XEN_X86_EMU_LAPIC | XEN_X86_EMU_HPET |  \
+                                     XEN_X86_EMU_PM | XEN_X86_EMU_RTC |      \
+                                     XEN_X86_EMU_IOAPIC | XEN_X86_EMU_PIC |  \
+                                     XEN_X86_EMU_VGA | XEN_X86_EMU_IOMMU |   \
+                                     XEN_X86_EMU_PIT | XEN_X86_EMU_USE_PIRQ |\
+                                     XEN_X86_EMU_VPCI)
+    uint32_t emulation_flags;
+};
+
 #endif
 
 /**
diff --git a/include/xen/domctl.h b/include/xen/domctl.h
new file mode 100644 (file)
index 0000000..c9c9483
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Xen public domctl hypercall interface
+ */
+
+#ifndef XEN_PUBLIC_DOMCTL_H
+#define XEN_PUBLIC_DOMCTL_H
+
+struct xen_domctl_createdomain {
+    /* IN parameters */
+    uint32_t ssidref;
+    uint8_t handle[16];
+ /* Is this an HVM guest (as opposed to a PVH or PV guest)? */
+#define _XEN_DOMCTL_CDF_hvm_guest     0
+#define XEN_DOMCTL_CDF_hvm_guest      (1U<<_XEN_DOMCTL_CDF_hvm_guest)
+ /* Use hardware-assisted paging if available? */
+#define _XEN_DOMCTL_CDF_hap           1
+#define XEN_DOMCTL_CDF_hap            (1U<<_XEN_DOMCTL_CDF_hap)
+ /* Should domain memory integrity be verifed by tboot during Sx? */
+#define _XEN_DOMCTL_CDF_s3_integrity  2
+#define XEN_DOMCTL_CDF_s3_integrity   (1U<<_XEN_DOMCTL_CDF_s3_integrity)
+ /* Disable out-of-sync shadow page tables? */
+#define _XEN_DOMCTL_CDF_oos_off       3
+#define XEN_DOMCTL_CDF_oos_off        (1U<<_XEN_DOMCTL_CDF_oos_off)
+ /* Is this a xenstore domain? */
+#define _XEN_DOMCTL_CDF_xs_domain     4
+#define XEN_DOMCTL_CDF_xs_domain      (1U<<_XEN_DOMCTL_CDF_xs_domain)
+    uint32_t flags;
+
+    /*
+     * Various domain limits, which impact the quantity of resources (global
+     * mapping space, xenheap, etc) a guest may consume.
+     */
+    uint32_t max_vcpus;
+    uint32_t max_evtchn_port;
+    uint32_t max_grant_frames;
+    uint32_t max_maptrack_frames;
+
+    struct xen_arch_domainconfig arch;
+};
+
+struct xen_domctl {
+    uint32_t cmd;
+#define XEN_DOMCTL_createdomain                   1
+#define XEN_DOMCTL_destroydomain                  2
+    uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
+    domid_t  domain;
+    union {
+        struct xen_domctl_createdomain      createdomain;
+        uint8_t                             pad[128];
+    } u;
+};
+typedef struct xen_domctl xen_domctl_t;
+
+#endif /* XEN_PUBLIC_DOMCTL_H */
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
index acda5926efdcc8a62a5c330f17b8aa58810c1d00..4f9358d1f6da8cc3d8542bbe8065fa30e2ad1940 100644 (file)
@@ -30,6 +30,7 @@ extern uint8_t hypercall_page[PAGE_SIZE];
 
 /* All Xen ABI for includers convenience .*/
 #include <xen/callback.h>
+#include <xen/domctl.h>
 #include <xen/elfnote.h>
 #include <xen/errno.h>
 #include <xen/event_channel.h>
@@ -170,6 +171,11 @@ static inline long hypercall_sysctl(xen_sysctl_t *arg)
     return HYPERCALL1(long, __HYPERVISOR_sysctl, arg);
 }
 
+static inline long hypercall_domctl(xen_domctl_t *arg)
+{
+    return HYPERCALL1(long, __HYPERVISOR_domctl, arg);
+}
+
 /*
  * Higher level hypercall helpers
  */
index 3348464b7069894687dba701bf59a4b1877b920b..d07172dceda262acc19b4ff9b69f6a2dc7120c5f 100644 (file)
@@ -89,6 +89,12 @@ static inline void exec_user_void(void (*fn)(void))
  */
 int xtf_probe_sysctl_interface_version(void);
 
+/**
+ * Probe for the DOMCTL_INTERFACE_VERSION in use by the hypervisor
+ * @returns version, or -1 on failure.
+ */
+int xtf_probe_domctl_interface_version(void);
+
 /**
  * Obtain the current domid.
  * @returns domid, or -1 on failure.