};
DEFINE_GUEST_HANDLE_STRUCT(xen_remove_from_physmap);
+/*
+ * Used by guest to get vNUMA topology information from hypervisor.
+ */
+#define XENMEM_get_vnuma_info 26
+struct vmemrange {
+ uint64_t start, end;
+ unsigned int flags;
+ unsigned int nid;
+};
+DEFINE_GUEST_HANDLE_STRUCT(vmemrange);
+
+/*
+ * vNUMA topology specifies vNUMA node number, distance table, memory
+ * ranges and vcpu mapping provided for guests. XENMEM_get_vnumainfo
+ * hypercall expects to see from guest nr_vnodes, nr_vmemranges and
+ * nr_vcpus to indicate available memory. After filling guests
+ * structures, nr_vnodes, nr_vmemranges and nr_vcpus copied back to
+ * guest. Domain returns expected values of nr_vnodes, nr_vmemranges
+ * and nr_vcpus to guest if the values where incorrect.
+ */
+struct vnuma_topology_info {
+ /* IN */
+ domid_t domid;
+ /* IN / OUT */
+ unsigned int nr_vnodes;
+ unsigned int nr_vcpus;
+ unsigned int nr_vmemranges;
+ /* OUT */
+ union {
+ GUEST_HANDLE(uint) h;
+ uint64_t pad;
+ } vdistance;
+ union {
+ GUEST_HANDLE(uint) h;
+ uint64_t pad;
+ } vcpu_to_vnode;
+ union {
+ GUEST_HANDLE(vmemrange) h;
+ uint64_t pad;
+ } vmemrange;
+};
+DEFINE_GUEST_HANDLE_STRUCT(vnuma_topology_info);
+
#endif /* __XEN_PUBLIC_MEMORY_H__ */