1 #ifndef __VKI_XEN_SYSCTL_H 2 #define __VKI_XEN_SYSCTL_H 3 4 /* 5 * The sysctl interface is versioned via the interface_version 6 * field. This structures in this header supports sysctl interfaces: 7 * 8 * - 0x00000008: Xen 4.1 9 * - 0x00000009: Xen 4.2 10 * - 0x0000000a: Xen 4.3 & 4.4 11 * - 0x0000000b: Xen 4.5 12 * 13 * When adding a new subop be sure to include the variants used by all 14 * of the above, both here and in syswrap-xen.c 15 * 16 * Structs which are identical in all supported versions have no 17 * version suffix. Structs which do differ are defined multiple times 18 * and use the suffix of the latest version to contain that particular 19 * variant. 20 */ 21 22 #define VKI_XEN_SYSCTL_readconsole 1 23 #define VKI_XEN_SYSCTL_tbuf_op 2 24 #define VKI_XEN_SYSCTL_physinfo 3 25 #define VKI_XEN_SYSCTL_sched_id 4 26 #define VKI_XEN_SYSCTL_perfc_op 5 27 #define VKI_XEN_SYSCTL_getdomaininfolist 6 28 #define VKI_XEN_SYSCTL_debug_keys 7 29 #define VKI_XEN_SYSCTL_getcpuinfo 8 30 #define VKI_XEN_SYSCTL_availheap 9 31 #define VKI_XEN_SYSCTL_get_pmstat 10 32 #define VKI_XEN_SYSCTL_cpu_hotplug 11 33 #define VKI_XEN_SYSCTL_pm_op 12 34 #define VKI_XEN_SYSCTL_page_offline_op 14 35 #define VKI_XEN_SYSCTL_lockprof_op 15 36 #define VKI_XEN_SYSCTL_topologyinfo 16 37 #define VKI_XEN_SYSCTL_numainfo 17 38 #define VKI_XEN_SYSCTL_cpupool_op 18 39 #define VKI_XEN_SYSCTL_scheduler_op 19 40 #define VKI_XEN_SYSCTL_coverage_op 20 41 42 struct vki_xen_sysctl_readconsole { 43 /* IN */ 44 vki_uint8_t clear; 45 vki_uint8_t incremental; 46 47 vki_uint8_t pad0, pad1; 48 49 /* 50 * IN: Start index for consumption if @incremental. 51 * OUT: End index after consuming from the console. 52 */ 53 vki_uint32_t index; 54 VKI_XEN_GUEST_HANDLE_64(char) buffer; /* IN */ 55 56 /* 57 * IN: size of buffer. 58 * OUT: bytes written into buffer. 59 */ 60 vki_uint32_t count; 61 }; 62 63 struct vki_xen_sysctl_getdomaininfolist_00000008 { 64 /* IN variables. */ 65 vki_xen_domid_t first_domain; 66 vki_uint32_t max_domains; 67 VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000007_t) buffer; 68 /* OUT variables. */ 69 vki_uint32_t num_domains; 70 }; 71 72 struct vki_xen_sysctl_getdomaininfolist_00000009 { 73 /* IN variables. */ 74 vki_xen_domid_t first_domain; 75 vki_uint32_t max_domains; 76 VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000008_t) buffer; 77 /* OUT variables. */ 78 vki_uint32_t num_domains; 79 }; 80 81 struct vki_xen_sysctl_getdomaininfolist_0000000a { 82 /* IN variables. */ 83 vki_xen_domid_t first_domain; 84 vki_uint32_t max_domains; 85 VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000009_t) buffer; 86 /* OUT variables. */ 87 vki_uint32_t num_domains; 88 }; 89 90 /* vki_xen_sysctl_getdomaininfolist_0000000b is the same as 0000000a */ 91 92 #define VKI_XEN_SYSCTL_CPUPOOL_OP_CREATE 1 /* C */ 93 #define VKI_XEN_SYSCTL_CPUPOOL_OP_DESTROY 2 /* D */ 94 #define VKI_XEN_SYSCTL_CPUPOOL_OP_INFO 3 /* I */ 95 #define VKI_XEN_SYSCTL_CPUPOOL_OP_ADDCPU 4 /* A */ 96 #define VKI_XEN_SYSCTL_CPUPOOL_OP_RMCPU 5 /* R */ 97 #define VKI_XEN_SYSCTL_CPUPOOL_OP_MOVEDOMAIN 6 /* M */ 98 #define VKI_XEN_SYSCTL_CPUPOOL_OP_FREEINFO 7 /* F */ 99 #define VKI_XEN_SYSCTL_CPUPOOL_PAR_ANY 0xFFFFFFFF 100 struct vki_xen_sysctl_cpupool_op { 101 vki_uint32_t op; /* IN */ 102 vki_uint32_t cpupool_id; /* IN: CDIARM OUT: CI */ 103 vki_uint32_t sched_id; /* IN: C OUT: I */ 104 vki_uint32_t domid; /* IN: M */ 105 vki_uint32_t cpu; /* IN: AR */ 106 vki_uint32_t n_dom; /* OUT: I */ 107 struct vki_xenctl_bitmap cpumap; /* OUT: IF */ 108 }; 109 110 struct vki_xen_sysctl_debug_keys { 111 /* IN variables. */ 112 VKI_XEN_GUEST_HANDLE_64(char) keys; 113 vki_uint32_t nr_keys; 114 }; 115 116 struct vki_xen_sysctl_topologyinfo { 117 vki_uint32_t max_cpu_index; 118 VKI_XEN_GUEST_HANDLE_64(vki_uint32) cpu_to_core; 119 VKI_XEN_GUEST_HANDLE_64(vki_uint32) cpu_to_socket; 120 VKI_XEN_GUEST_HANDLE_64(vki_uint32) cpu_to_node; 121 }; 122 123 struct vki_xen_sysctl_numainfo { 124 vki_uint32_t max_node_index; 125 VKI_XEN_GUEST_HANDLE_64(vki_uint64) node_to_memsize; 126 VKI_XEN_GUEST_HANDLE_64(vki_uint64) node_to_memfree; 127 VKI_XEN_GUEST_HANDLE_64(vki_uint32) node_to_node_distance; 128 }; 129 struct vki_xen_sysctl_physinfo_00000008 { 130 vki_uint32_t threads_per_core; 131 vki_uint32_t cores_per_socket; 132 vki_uint32_t nr_cpus; /* # CPUs currently online */ 133 vki_uint32_t max_cpu_id; /* Largest possible CPU ID on this host */ 134 vki_uint32_t nr_nodes; /* # nodes currently online */ 135 vki_uint32_t max_node_id; /* Largest possible node ID on this host */ 136 vki_uint32_t cpu_khz; 137 vki_xen_uint64_aligned_t total_pages; 138 vki_xen_uint64_aligned_t free_pages; 139 vki_xen_uint64_aligned_t scrub_pages; 140 vki_uint32_t hw_cap[8]; 141 142 vki_uint32_t capabilities; 143 }; 144 145 struct vki_xen_sysctl_physinfo_0000000a { 146 vki_uint32_t threads_per_core; 147 vki_uint32_t cores_per_socket; 148 vki_uint32_t nr_cpus; /* # CPUs currently online */ 149 vki_uint32_t max_cpu_id; /* Largest possible CPU ID on this host */ 150 vki_uint32_t nr_nodes; /* # nodes currently online */ 151 vki_uint32_t max_node_id; /* Largest possible node ID on this host */ 152 vki_uint32_t cpu_khz; 153 vki_xen_uint64_aligned_t total_pages; 154 vki_xen_uint64_aligned_t free_pages; 155 vki_xen_uint64_aligned_t scrub_pages; 156 vki_xen_uint64_aligned_t outstanding_pages; 157 vki_uint32_t hw_cap[8]; 158 159 vki_uint32_t capabilities; 160 }; 161 162 /* vki_xen_sysctl_physinfo_0000000b is the same as 0000000a */ 163 164 struct vki_xen_sysctl_sched_id { 165 /* OUT variable. */ 166 vki_uint32_t sched_id; 167 }; 168 169 struct vki_xen_sysctl { 170 vki_uint32_t cmd; 171 vki_uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */ 172 union { 173 struct vki_xen_sysctl_readconsole readconsole; 174 //struct vki_xen_sysctl_tbuf_op tbuf_op; 175 struct vki_xen_sysctl_physinfo_00000008 physinfo_00000008; 176 struct vki_xen_sysctl_physinfo_0000000a physinfo_0000000a; 177 struct vki_xen_sysctl_topologyinfo topologyinfo; 178 struct vki_xen_sysctl_numainfo numainfo; 179 struct vki_xen_sysctl_sched_id sched_id; 180 //struct vki_xen_sysctl_perfc_op perfc_op; 181 struct vki_xen_sysctl_getdomaininfolist_00000008 getdomaininfolist_00000008; 182 struct vki_xen_sysctl_getdomaininfolist_00000009 getdomaininfolist_00000009; 183 struct vki_xen_sysctl_getdomaininfolist_0000000a getdomaininfolist_0000000a; 184 struct vki_xen_sysctl_debug_keys debug_keys; 185 //struct vki_xen_sysctl_getcpuinfo getcpuinfo; 186 //struct vki_xen_sysctl_availheap availheap; 187 //struct vki_xen_sysctl_get_pmstat get_pmstat; 188 //struct vki_xen_sysctl_cpu_hotplug cpu_hotplug; 189 //struct vki_xen_sysctl_pm_op pm_op; 190 //struct vki_xen_sysctl_page_offline_op page_offline; 191 //struct vki_xen_sysctl_lockprof_op lockprof_op; 192 struct vki_xen_sysctl_cpupool_op cpupool_op; 193 //struct vki_xen_sysctl_scheduler_op scheduler_op; 194 //struct vki_xen_sysctl_coverage_op coverage_op; 195 196 vki_uint8_t pad[128]; 197 } u; 198 }; 199 200 #endif // __VKI_XEN_SYSCTL_H 201 202 /*--------------------------------------------------------------------*/ 203 /*--- end ---*/ 204 /*--------------------------------------------------------------------*/ 205