| #ifndef __VKI_XEN_SYSCTL_H |
| #define __VKI_XEN_SYSCTL_H |
| |
| /* |
| * The sysctl interface is versioned via the interface_version |
| * field. This structures in this header supports sysctl interfaces: |
| * |
| * - 00000008: Xen 4.1 |
| * - 00000009: Xen 4.2 |
| * - 0000000a: Xen 4.3 |
| * |
| * When adding a new subop be sure to include the variants used by all |
| * of the above, both here and in syswrap-xen.c |
| * |
| * Structs which are identical in all supported versions have no |
| * version suffix. Structs which do differ are defined multiple times |
| * and use the suffix of the latest version to contain that particular |
| * variant. |
| */ |
| |
| #define VKI_XEN_SYSCTL_readconsole 1 |
| #define VKI_XEN_SYSCTL_tbuf_op 2 |
| #define VKI_XEN_SYSCTL_physinfo 3 |
| #define VKI_XEN_SYSCTL_sched_id 4 |
| #define VKI_XEN_SYSCTL_perfc_op 5 |
| #define VKI_XEN_SYSCTL_getdomaininfolist 6 |
| #define VKI_XEN_SYSCTL_debug_keys 7 |
| #define VKI_XEN_SYSCTL_getcpuinfo 8 |
| #define VKI_XEN_SYSCTL_availheap 9 |
| #define VKI_XEN_SYSCTL_get_pmstat 10 |
| #define VKI_XEN_SYSCTL_cpu_hotplug 11 |
| #define VKI_XEN_SYSCTL_pm_op 12 |
| #define VKI_XEN_SYSCTL_page_offline_op 14 |
| #define VKI_XEN_SYSCTL_lockprof_op 15 |
| #define VKI_XEN_SYSCTL_topologyinfo 16 |
| #define VKI_XEN_SYSCTL_numainfo 17 |
| #define VKI_XEN_SYSCTL_cpupool_op 18 |
| #define VKI_XEN_SYSCTL_scheduler_op 19 |
| #define VKI_XEN_SYSCTL_coverage_op 20 |
| |
| struct vki_xen_sysctl_readconsole { |
| /* IN */ |
| vki_uint8_t clear; |
| vki_uint8_t incremental; |
| |
| vki_uint8_t pad0, pad1; |
| |
| /* |
| * IN: Start index for consumption if @incremental. |
| * OUT: End index after consuming from the console. |
| */ |
| vki_uint32_t index; |
| VKI_XEN_GUEST_HANDLE_64(char) buffer; /* IN */ |
| |
| /* |
| * IN: size of buffer. |
| * OUT: bytes written into buffer. |
| */ |
| vki_uint32_t count; |
| }; |
| |
| struct vki_xen_sysctl_getdomaininfolist_00000008 { |
| /* IN variables. */ |
| vki_xen_domid_t first_domain; |
| vki_uint32_t max_domains; |
| VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000007_t) buffer; |
| /* OUT variables. */ |
| vki_uint32_t num_domains; |
| }; |
| |
| struct vki_xen_sysctl_getdomaininfolist_00000009 { |
| /* IN variables. */ |
| vki_xen_domid_t first_domain; |
| vki_uint32_t max_domains; |
| VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000008_t) buffer; |
| /* OUT variables. */ |
| vki_uint32_t num_domains; |
| }; |
| |
| struct vki_xen_sysctl_getdomaininfolist_0000000a { |
| /* IN variables. */ |
| vki_xen_domid_t first_domain; |
| vki_uint32_t max_domains; |
| VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000009_t) buffer; |
| /* OUT variables. */ |
| vki_uint32_t num_domains; |
| }; |
| |
| #define VKI_XEN_SYSCTL_CPUPOOL_OP_CREATE 1 /* C */ |
| #define VKI_XEN_SYSCTL_CPUPOOL_OP_DESTROY 2 /* D */ |
| #define VKI_XEN_SYSCTL_CPUPOOL_OP_INFO 3 /* I */ |
| #define VKI_XEN_SYSCTL_CPUPOOL_OP_ADDCPU 4 /* A */ |
| #define VKI_XEN_SYSCTL_CPUPOOL_OP_RMCPU 5 /* R */ |
| #define VKI_XEN_SYSCTL_CPUPOOL_OP_MOVEDOMAIN 6 /* M */ |
| #define VKI_XEN_SYSCTL_CPUPOOL_OP_FREEINFO 7 /* F */ |
| #define VKI_XEN_SYSCTL_CPUPOOL_PAR_ANY 0xFFFFFFFF |
| struct vki_xen_sysctl_cpupool_op { |
| vki_uint32_t op; /* IN */ |
| vki_uint32_t cpupool_id; /* IN: CDIARM OUT: CI */ |
| vki_uint32_t sched_id; /* IN: C OUT: I */ |
| vki_uint32_t domid; /* IN: M */ |
| vki_uint32_t cpu; /* IN: AR */ |
| vki_uint32_t n_dom; /* OUT: I */ |
| struct vki_xenctl_bitmap cpumap; /* OUT: IF */ |
| }; |
| |
| struct vki_xen_sysctl_debug_keys { |
| /* IN variables. */ |
| VKI_XEN_GUEST_HANDLE_64(char) keys; |
| vki_uint32_t nr_keys; |
| }; |
| |
| struct vki_xen_sysctl_topologyinfo { |
| vki_uint32_t max_cpu_index; |
| VKI_XEN_GUEST_HANDLE_64(vki_uint32) cpu_to_core; |
| VKI_XEN_GUEST_HANDLE_64(vki_uint32) cpu_to_socket; |
| VKI_XEN_GUEST_HANDLE_64(vki_uint32) cpu_to_node; |
| }; |
| |
| struct vki_xen_sysctl_numainfo { |
| vki_uint32_t max_node_index; |
| VKI_XEN_GUEST_HANDLE_64(vki_uint64) node_to_memsize; |
| VKI_XEN_GUEST_HANDLE_64(vki_uint64) node_to_memfree; |
| VKI_XEN_GUEST_HANDLE_64(vki_uint32) node_to_node_distance; |
| }; |
| struct vki_xen_sysctl_physinfo_00000008 { |
| vki_uint32_t threads_per_core; |
| vki_uint32_t cores_per_socket; |
| vki_uint32_t nr_cpus; /* # CPUs currently online */ |
| vki_uint32_t max_cpu_id; /* Largest possible CPU ID on this host */ |
| vki_uint32_t nr_nodes; /* # nodes currently online */ |
| vki_uint32_t max_node_id; /* Largest possible node ID on this host */ |
| vki_uint32_t cpu_khz; |
| vki_xen_uint64_aligned_t total_pages; |
| vki_xen_uint64_aligned_t free_pages; |
| vki_xen_uint64_aligned_t scrub_pages; |
| vki_uint32_t hw_cap[8]; |
| |
| vki_uint32_t capabilities; |
| }; |
| |
| struct vki_xen_sysctl_physinfo_0000000a { |
| vki_uint32_t threads_per_core; |
| vki_uint32_t cores_per_socket; |
| vki_uint32_t nr_cpus; /* # CPUs currently online */ |
| vki_uint32_t max_cpu_id; /* Largest possible CPU ID on this host */ |
| vki_uint32_t nr_nodes; /* # nodes currently online */ |
| vki_uint32_t max_node_id; /* Largest possible node ID on this host */ |
| vki_uint32_t cpu_khz; |
| vki_xen_uint64_aligned_t total_pages; |
| vki_xen_uint64_aligned_t free_pages; |
| vki_xen_uint64_aligned_t scrub_pages; |
| vki_xen_uint64_aligned_t outstanding_pages; |
| vki_uint32_t hw_cap[8]; |
| |
| vki_uint32_t capabilities; |
| }; |
| |
| struct vki_xen_sysctl_sched_id { |
| /* OUT variable. */ |
| vki_uint32_t sched_id; |
| }; |
| |
| struct vki_xen_sysctl { |
| vki_uint32_t cmd; |
| vki_uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */ |
| union { |
| struct vki_xen_sysctl_readconsole readconsole; |
| //struct vki_xen_sysctl_tbuf_op tbuf_op; |
| struct vki_xen_sysctl_physinfo_00000008 physinfo_00000008; |
| struct vki_xen_sysctl_physinfo_0000000a physinfo_0000000a; |
| struct vki_xen_sysctl_topologyinfo topologyinfo; |
| struct vki_xen_sysctl_numainfo numainfo; |
| struct vki_xen_sysctl_sched_id sched_id; |
| //struct vki_xen_sysctl_perfc_op perfc_op; |
| struct vki_xen_sysctl_getdomaininfolist_00000008 getdomaininfolist_00000008; |
| struct vki_xen_sysctl_getdomaininfolist_00000009 getdomaininfolist_00000009; |
| struct vki_xen_sysctl_getdomaininfolist_0000000a getdomaininfolist_0000000a; |
| struct vki_xen_sysctl_debug_keys debug_keys; |
| //struct vki_xen_sysctl_getcpuinfo getcpuinfo; |
| //struct vki_xen_sysctl_availheap availheap; |
| //struct vki_xen_sysctl_get_pmstat get_pmstat; |
| //struct vki_xen_sysctl_cpu_hotplug cpu_hotplug; |
| //struct vki_xen_sysctl_pm_op pm_op; |
| //struct vki_xen_sysctl_page_offline_op page_offline; |
| //struct vki_xen_sysctl_lockprof_op lockprof_op; |
| struct vki_xen_sysctl_cpupool_op cpupool_op; |
| //struct vki_xen_sysctl_scheduler_op scheduler_op; |
| //struct vki_xen_sysctl_coverage_op coverage_op; |
| |
| vki_uint8_t pad[128]; |
| } u; |
| }; |
| |
| #endif // __VKI_XEN_SYSCTL_H |
| |
| /*--------------------------------------------------------------------*/ |
| /*--- end ---*/ |
| /*--------------------------------------------------------------------*/ |