@@ -87,3 +87,99 @@ typ = { tag = "u32" }
name = "no_sharept"
description = "Set to _NOT_ share page tables between the CPU and the IOMMU when it would be possible to do so."
shift = 0
+
+################################################################################
+
+[[structs]]
+name = "xen_domctl_createdomain"
+description = """
+Create a new domain with the passed parameters.
+
+IMPORTANT: The domid part of the domctl is IN/OUT. When the passed
+domid is 0 or over `DOMID_FIRST_RESERVED` a new domid is auto-allocated
+and returned."""
+
+[[structs.fields]]
+name = "ssidref"
+description = "IN: `Source Security IDentifier` (See XSM)."
+typ = { tag = "u32" }
+
+[[structs.fields]]
+name = "handle"
+description = "IN: Unique identifier for this guest given by the toolstack."
+typ = { tag = "array", args = [{ tag = "u8" }, 16] }
+
+[[structs.fields]]
+name = "flags"
+description = "IN: Bitmap of domain features to enable/disable."
+typ = { tag = "bitmap", args = "xen_domctl_cdf" }
+
+[[structs.fields]]
+name = "iommu_opts"
+description = "IN: Bitmap of configuration settings for the IOMMU."
+typ = { tag = "bitmap", args = "xen_domctl_iommu_opts" }
+
+[[structs.fields]]
+name = "max_vcpus"
+description = "IN: Maximum number of CPUs this domain can hold, including hotplug."
+typ = { tag = "u32" }
+
+[[structs.fields]]
+name = "max_evtchn_port"
+description = "IN: Maximum number of usable event channels"
+typ = { tag = "u32" }
+
+[[structs.fields]]
+name = "max_grant_frames"
+description = '''
+IN: Maximum number of pages this domain is able
+ to grant access to for other domains.
+
+`< 0` means "use default value in the hypervisor."'''
+typ = { tag = "i32" }
+
+[[structs.fields]]
+name = "max_maptrack_frames"
+description = '''
+IN: Maximum number of pages of foreign domains
+ can be accessed via the grant mechanism.
+
+`< 0` means "use default value in the hypervisor."'''
+typ = { tag = "i32" }
+
+[[structs.fields]]
+name = "max_grant_version"
+description = "Maximum grant table version allowed for this domain"
+typ = { tag = "u8" }
+
+[[structs.fields]]
+name = "rsvd0_a"
+description = "Unused padding. Reserved to zero."
+typ = { tag = "array", args = [{ tag = "u8" }, 3] }
+
+[[structs.fields]]
+name = "altp2m_mode"
+description = "Which mode to configure altp2m with"
+typ = { tag = "u8" }
+
+[[structs.fields]]
+name = "rsvd0_b"
+description = "Unused padding. Reserved to zero."
+typ = { tag = "array", args = [{ tag = "u8" }, 3] }
+
+[[structs.fields]]
+name = "vmtrace_size"
+description = "IN: Per-vCPU buffer size in octets. 0 to disable."
+typ = { tag = "u32" }
+
+[[structs.fields]]
+name = "cpupool_id"
+description = "IN: CPU pool to use; 0 or an existing CPU pool."
+typ = { tag = "u32" }
+
+[[structs.fields]]
+name = "arch"
+description = """Arch-specific settings.
+
+Each architecture is free to make its fields IN/OUT/INOUT"""
+typ = { tag = "struct", args = "xen_arch_domainconfig" }
@@ -59,5 +59,59 @@ struct xen_domctl_iommu_opts {}; /* GREP FODDER */
/* Mask covering all defined bits */
#define XEN_DOMCTL_IOMMU_OPTS__ALL (0x1U)
+/*
+ * Create a new domain with the passed parameters.
+ *
+ * IMPORTANT: The domid part of the domctl is IN/OUT. When the passed
+ * domid is 0 or over `DOMID_FIRST_RESERVED` a new domid is auto-allocated
+ * and returned.
+ */
+struct xen_domctl_createdomain {
+ /* IN: `Source Security IDentifier` (See XSM). */
+ uint32_t ssidref;
+ /* IN: Unique identifier for this guest given by the toolstack. */
+ uint8_t handle[16];
+ /* IN: Bitmap of domain features to enable/disable. */
+ uint32_t flags /* See xen_domctl_cdf */;
+ /* IN: Bitmap of configuration settings for the IOMMU. */
+ uint32_t iommu_opts /* See xen_domctl_iommu_opts */;
+ /* IN: Maximum number of CPUs this domain can hold, including hotplug. */
+ uint32_t max_vcpus;
+ /* IN: Maximum number of usable event channels */
+ uint32_t max_evtchn_port;
+ /*
+ * IN: Maximum number of pages this domain is able
+ * to grant access to for other domains.
+ *
+ * `< 0` means "use default value in the hypervisor."
+ */
+ int32_t max_grant_frames;
+ /*
+ * IN: Maximum number of pages of foreign domains
+ * can be accessed via the grant mechanism.
+ *
+ * `< 0` means "use default value in the hypervisor."
+ */
+ int32_t max_maptrack_frames;
+ /* Maximum grant table version allowed for this domain */
+ uint8_t max_grant_version;
+ /* Unused padding. Reserved to zero. */
+ uint8_t rsvd0_a[3];
+ /* Which mode to configure altp2m with */
+ uint8_t altp2m_mode;
+ /* Unused padding. Reserved to zero. */
+ uint8_t rsvd0_b[3];
+ /* IN: Per-vCPU buffer size in octets. 0 to disable. */
+ uint32_t vmtrace_size;
+ /* IN: CPU pool to use; 0 or an existing CPU pool. */
+ uint32_t cpupool_id;
+ /*
+ * Arch-specific settings.
+ *
+ * Each architecture is free to make its fields IN/OUT/INOUT
+ */
+ struct xen_arch_domainconfig arch;
+};
+
#endif /* __XEN_AUTOGEN_DOMCTL_H */
@@ -33,62 +33,8 @@
*
* Last version bump: Xen 4.19
*/
-#define XEN_DOMCTL_INTERFACE_VERSION 0x00000017
-
-/*
- * NB. xen_domctl.domain is an IN/OUT parameter for this operation.
- * If it is specified as an invalid value (0 or >= DOMID_FIRST_RESERVED),
- * an id is auto-allocated and returned.
- */
-/* XEN_DOMCTL_createdomain */
-struct xen_domctl_createdomain {
- /* IN parameters */
- uint32_t ssidref;
- xen_domain_handle_t handle;
- /* See xen_domctl_cdf */
- uint32_t flags;
- /* See xen_domctl_iommu_opts */
- uint32_t iommu_opts;
-
- /*
- * Various domain limits, which impact the quantity of resources
- * (global mapping space, xenheap, etc) a guest may consume. For
- * max_grant_frames and max_maptrack_frames, < 0 means "use the
- * default maximum value in the hypervisor".
- */
- uint32_t max_vcpus;
- uint32_t max_evtchn_port;
- int32_t max_grant_frames;
- int32_t max_maptrack_frames;
-
- /*
- * Maximum grant table version the domain can be configured with.
- *
- * Domains always start with v1 (if CONFIG_GRANT_TABLE) and can be bumped
- * to use up to `max_grant_version` via GNTTABOP_set_version.
- *
- * Must be zero iff !CONFIG_GRANT_TABLE.
- */
- uint8_t max_grant_version;
-
- /* Unused. Reserved to zero. */
- uint8_t rsvd0_a[3];
-
- /* See xen_domctl_altp2m_mode */
- uint8_t altp2m_mode;
-
- /* Unused. Reserved to zero. */
- uint8_t rsvd0_b[3];
-
- /* Per-vCPU buffer size in bytes. 0 to disable. */
- uint32_t vmtrace_size;
-
- /* CPU pool to use; specify 0 or a specific existing pool */
- uint32_t cpupool_id;
-
- struct xen_arch_domainconfig arch;
-};
+#define XEN_DOMCTL_INTERFACE_VERSION 0x00000017
/* XEN_DOMCTL_getdomaininfo */
struct xen_domctl_getdomaininfo {
@@ -17,6 +17,7 @@
#include "xen.h"
#include "domctl.h"
#include "physdev.h"
+#include "autogen/sysctl.h"
#include "autogen/sysctl.h"
With xen_arch_domainconfig and every bitmap/enum already autogenerated, add the final piece to enable autogeneration of the createdomain hypercall. Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com> --- .../xenbindgen/extra/domctl/createdomain.toml | 96 +++++++++++++++++++ xen/include/public/autogen/domctl.h | 54 +++++++++++ xen/include/public/domctl.h | 56 +---------- xen/include/public/sysctl.h | 1 + 4 files changed, 152 insertions(+), 55 deletions(-)