15084Sjohnlev /****************************************************************************** 25084Sjohnlev * sysctl.h 35084Sjohnlev * 45084Sjohnlev * System management operations. For use by node control stack. 55084Sjohnlev * 65084Sjohnlev * Permission is hereby granted, free of charge, to any person obtaining a copy 75084Sjohnlev * of this software and associated documentation files (the "Software"), to 85084Sjohnlev * deal in the Software without restriction, including without limitation the 95084Sjohnlev * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 105084Sjohnlev * sell copies of the Software, and to permit persons to whom the Software is 115084Sjohnlev * furnished to do so, subject to the following conditions: 125084Sjohnlev * 135084Sjohnlev * The above copyright notice and this permission notice shall be included in 145084Sjohnlev * all copies or substantial portions of the Software. 155084Sjohnlev * 165084Sjohnlev * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 175084Sjohnlev * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 185084Sjohnlev * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 195084Sjohnlev * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 205084Sjohnlev * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 215084Sjohnlev * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 225084Sjohnlev * DEALINGS IN THE SOFTWARE. 235084Sjohnlev * 245084Sjohnlev * Copyright (c) 2002-2006, K Fraser 255084Sjohnlev */ 265084Sjohnlev 275084Sjohnlev #ifndef __XEN_PUBLIC_SYSCTL_H__ 285084Sjohnlev #define __XEN_PUBLIC_SYSCTL_H__ 295084Sjohnlev 305084Sjohnlev #if !defined(__XEN__) && !defined(__XEN_TOOLS__) 315084Sjohnlev #error "sysctl operations are intended for use by node control tools only" 325084Sjohnlev #endif 335084Sjohnlev 345084Sjohnlev #include "xen.h" 355084Sjohnlev #include "domctl.h" 365084Sjohnlev 3710175SStuart.Maybee@Sun.COM #define XEN_SYSCTL_INTERFACE_VERSION 0x00000006 385084Sjohnlev 395084Sjohnlev /* 405084Sjohnlev * Read console content from Xen buffer ring. 415084Sjohnlev */ 425084Sjohnlev #define XEN_SYSCTL_readconsole 1 435084Sjohnlev struct xen_sysctl_readconsole { 4410175SStuart.Maybee@Sun.COM /* IN: Non-zero -> clear after reading. */ 4510175SStuart.Maybee@Sun.COM uint8_t clear; 4610175SStuart.Maybee@Sun.COM /* IN: Non-zero -> start index specified by @index field. */ 4710175SStuart.Maybee@Sun.COM uint8_t incremental; 4810175SStuart.Maybee@Sun.COM uint8_t pad0, pad1; 4910175SStuart.Maybee@Sun.COM /* 5010175SStuart.Maybee@Sun.COM * IN: Start index for consuming from ring buffer (if @incremental); 5110175SStuart.Maybee@Sun.COM * OUT: End index after consuming from ring buffer. 5210175SStuart.Maybee@Sun.COM */ 5310175SStuart.Maybee@Sun.COM uint32_t index; 5410175SStuart.Maybee@Sun.COM /* IN: Virtual address to write console data. */ 5510175SStuart.Maybee@Sun.COM XEN_GUEST_HANDLE_64(char) buffer; 5610175SStuart.Maybee@Sun.COM /* IN: Size of buffer; OUT: Bytes written to buffer. */ 5710175SStuart.Maybee@Sun.COM uint32_t count; 585084Sjohnlev }; 595084Sjohnlev typedef struct xen_sysctl_readconsole xen_sysctl_readconsole_t; 605084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_sysctl_readconsole_t); 615084Sjohnlev 625084Sjohnlev /* Get trace buffers machine base address */ 635084Sjohnlev #define XEN_SYSCTL_tbuf_op 2 645084Sjohnlev struct xen_sysctl_tbuf_op { 655084Sjohnlev /* IN variables */ 665084Sjohnlev #define XEN_SYSCTL_TBUFOP_get_info 0 675084Sjohnlev #define XEN_SYSCTL_TBUFOP_set_cpu_mask 1 685084Sjohnlev #define XEN_SYSCTL_TBUFOP_set_evt_mask 2 695084Sjohnlev #define XEN_SYSCTL_TBUFOP_set_size 3 705084Sjohnlev #define XEN_SYSCTL_TBUFOP_enable 4 715084Sjohnlev #define XEN_SYSCTL_TBUFOP_disable 5 725084Sjohnlev uint32_t cmd; 735084Sjohnlev /* IN/OUT variables */ 745084Sjohnlev struct xenctl_cpumap cpu_mask; 755084Sjohnlev uint32_t evt_mask; 765084Sjohnlev /* OUT variables */ 776144Srab uint64_aligned_t buffer_mfn; 785084Sjohnlev uint32_t size; 795084Sjohnlev }; 805084Sjohnlev typedef struct xen_sysctl_tbuf_op xen_sysctl_tbuf_op_t; 815084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_sysctl_tbuf_op_t); 825084Sjohnlev 835084Sjohnlev /* 845084Sjohnlev * Get physical information about the host machine 855084Sjohnlev */ 865084Sjohnlev #define XEN_SYSCTL_physinfo 3 8710175SStuart.Maybee@Sun.COM /* (x86) The platform supports HVM guests. */ 8810175SStuart.Maybee@Sun.COM #define _XEN_SYSCTL_PHYSCAP_hvm 0 8910175SStuart.Maybee@Sun.COM #define XEN_SYSCTL_PHYSCAP_hvm (1u<<_XEN_SYSCTL_PHYSCAP_hvm) 9010175SStuart.Maybee@Sun.COM /* (x86) The platform supports HVM-guest direct access to I/O devices. */ 9110175SStuart.Maybee@Sun.COM #define _XEN_SYSCTL_PHYSCAP_hvm_directio 1 9210175SStuart.Maybee@Sun.COM #define XEN_SYSCTL_PHYSCAP_hvm_directio (1u<<_XEN_SYSCTL_PHYSCAP_hvm_directio) 935084Sjohnlev struct xen_sysctl_physinfo { 945084Sjohnlev uint32_t threads_per_core; 955084Sjohnlev uint32_t cores_per_socket; 9610175SStuart.Maybee@Sun.COM uint32_t nr_cpus; 975084Sjohnlev uint32_t nr_nodes; 985084Sjohnlev uint32_t cpu_khz; 996144Srab uint64_aligned_t total_pages; 1006144Srab uint64_aligned_t free_pages; 1016144Srab uint64_aligned_t scrub_pages; 1025084Sjohnlev uint32_t hw_cap[8]; 10310175SStuart.Maybee@Sun.COM 10410175SStuart.Maybee@Sun.COM /* 10510175SStuart.Maybee@Sun.COM * IN: maximum addressable entry in the caller-provided cpu_to_node array. 10610175SStuart.Maybee@Sun.COM * OUT: largest cpu identifier in the system. 10710175SStuart.Maybee@Sun.COM * If OUT is greater than IN then the cpu_to_node array is truncated! 10810175SStuart.Maybee@Sun.COM */ 10910175SStuart.Maybee@Sun.COM uint32_t max_cpu_id; 11010175SStuart.Maybee@Sun.COM /* 11110175SStuart.Maybee@Sun.COM * If not NULL, this array is filled with node identifier for each cpu. 11210175SStuart.Maybee@Sun.COM * If a cpu has no node information (e.g., cpu not present) then the 11310175SStuart.Maybee@Sun.COM * sentinel value ~0u is written. 11410175SStuart.Maybee@Sun.COM * The size of this array is specified by the caller in @max_cpu_id. 11510175SStuart.Maybee@Sun.COM * If the actual @max_cpu_id is smaller than the array then the trailing 11610175SStuart.Maybee@Sun.COM * elements of the array will not be written by the sysctl. 11710175SStuart.Maybee@Sun.COM */ 11810175SStuart.Maybee@Sun.COM XEN_GUEST_HANDLE_64(uint32) cpu_to_node; 11910175SStuart.Maybee@Sun.COM 12010175SStuart.Maybee@Sun.COM /* XEN_SYSCTL_PHYSCAP_??? */ 12110175SStuart.Maybee@Sun.COM uint32_t capabilities; 1225084Sjohnlev }; 1235084Sjohnlev typedef struct xen_sysctl_physinfo xen_sysctl_physinfo_t; 1245084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_sysctl_physinfo_t); 1255084Sjohnlev 1265084Sjohnlev /* 1275084Sjohnlev * Get the ID of the current scheduler. 1285084Sjohnlev */ 1295084Sjohnlev #define XEN_SYSCTL_sched_id 4 1305084Sjohnlev struct xen_sysctl_sched_id { 1315084Sjohnlev /* OUT variable */ 1325084Sjohnlev uint32_t sched_id; 1335084Sjohnlev }; 1345084Sjohnlev typedef struct xen_sysctl_sched_id xen_sysctl_sched_id_t; 1355084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_sysctl_sched_id_t); 1365084Sjohnlev 1375084Sjohnlev /* Interface for controlling Xen software performance counters. */ 1385084Sjohnlev #define XEN_SYSCTL_perfc_op 5 1395084Sjohnlev /* Sub-operations: */ 1405084Sjohnlev #define XEN_SYSCTL_PERFCOP_reset 1 /* Reset all counters to zero. */ 1415084Sjohnlev #define XEN_SYSCTL_PERFCOP_query 2 /* Get perfctr information. */ 1425084Sjohnlev struct xen_sysctl_perfc_desc { 1435084Sjohnlev char name[80]; /* name of perf counter */ 1445084Sjohnlev uint32_t nr_vals; /* number of values for this counter */ 1455084Sjohnlev }; 1465084Sjohnlev typedef struct xen_sysctl_perfc_desc xen_sysctl_perfc_desc_t; 1475084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_desc_t); 1485084Sjohnlev typedef uint32_t xen_sysctl_perfc_val_t; 1495084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_val_t); 1505084Sjohnlev 1515084Sjohnlev struct xen_sysctl_perfc_op { 1525084Sjohnlev /* IN variables. */ 1535084Sjohnlev uint32_t cmd; /* XEN_SYSCTL_PERFCOP_??? */ 1545084Sjohnlev /* OUT variables. */ 1555084Sjohnlev uint32_t nr_counters; /* number of counters description */ 1565084Sjohnlev uint32_t nr_vals; /* number of values */ 1575084Sjohnlev /* counter information (or NULL) */ 1586144Srab XEN_GUEST_HANDLE_64(xen_sysctl_perfc_desc_t) desc; 1595084Sjohnlev /* counter values (or NULL) */ 1606144Srab XEN_GUEST_HANDLE_64(xen_sysctl_perfc_val_t) val; 1615084Sjohnlev }; 1625084Sjohnlev typedef struct xen_sysctl_perfc_op xen_sysctl_perfc_op_t; 1635084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_op_t); 1645084Sjohnlev 1655084Sjohnlev #define XEN_SYSCTL_getdomaininfolist 6 1665084Sjohnlev struct xen_sysctl_getdomaininfolist { 1675084Sjohnlev /* IN variables. */ 1685084Sjohnlev domid_t first_domain; 1695084Sjohnlev uint32_t max_domains; 1706144Srab XEN_GUEST_HANDLE_64(xen_domctl_getdomaininfo_t) buffer; 1715084Sjohnlev /* OUT variables. */ 1725084Sjohnlev uint32_t num_domains; 1735084Sjohnlev }; 1745084Sjohnlev typedef struct xen_sysctl_getdomaininfolist xen_sysctl_getdomaininfolist_t; 1755084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getdomaininfolist_t); 1765084Sjohnlev 1776144Srab /* Inject debug keys into Xen. */ 1786144Srab #define XEN_SYSCTL_debug_keys 7 1796144Srab struct xen_sysctl_debug_keys { 1806144Srab /* IN variables. */ 1816144Srab XEN_GUEST_HANDLE_64(char) keys; 1826144Srab uint32_t nr_keys; 1836144Srab }; 1846144Srab typedef struct xen_sysctl_debug_keys xen_sysctl_debug_keys_t; 1856144Srab DEFINE_XEN_GUEST_HANDLE(xen_sysctl_debug_keys_t); 1866144Srab 1876144Srab /* Get physical CPU information. */ 1886144Srab #define XEN_SYSCTL_getcpuinfo 8 1896144Srab struct xen_sysctl_cpuinfo { 19010175SStuart.Maybee@Sun.COM uint64_aligned_t idletime; 1916144Srab }; 1926144Srab typedef struct xen_sysctl_cpuinfo xen_sysctl_cpuinfo_t; 1936144Srab DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpuinfo_t); 1946144Srab struct xen_sysctl_getcpuinfo { 1956144Srab /* IN variables. */ 1966144Srab uint32_t max_cpus; 1976144Srab XEN_GUEST_HANDLE_64(xen_sysctl_cpuinfo_t) info; 1986144Srab /* OUT variables. */ 1996144Srab uint32_t nr_cpus; 2006144Srab }; 2016144Srab typedef struct xen_sysctl_getcpuinfo xen_sysctl_getcpuinfo_t; 2026144Srab DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getcpuinfo_t); 2036144Srab 20410175SStuart.Maybee@Sun.COM #define XEN_SYSCTL_availheap 9 20510175SStuart.Maybee@Sun.COM struct xen_sysctl_availheap { 20610175SStuart.Maybee@Sun.COM /* IN variables. */ 20710175SStuart.Maybee@Sun.COM uint32_t min_bitwidth; /* Smallest address width (zero if don't care). */ 20810175SStuart.Maybee@Sun.COM uint32_t max_bitwidth; /* Largest address width (zero if don't care). */ 20910175SStuart.Maybee@Sun.COM int32_t node; /* NUMA node of interest (-1 for all nodes). */ 21010175SStuart.Maybee@Sun.COM /* OUT variables. */ 21110175SStuart.Maybee@Sun.COM uint64_aligned_t avail_bytes;/* Bytes available in the specified region. */ 21210175SStuart.Maybee@Sun.COM }; 21310175SStuart.Maybee@Sun.COM typedef struct xen_sysctl_availheap xen_sysctl_availheap_t; 21410175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_sysctl_availheap_t); 21510175SStuart.Maybee@Sun.COM 21610175SStuart.Maybee@Sun.COM #define XEN_SYSCTL_get_pmstat 10 21710175SStuart.Maybee@Sun.COM struct pm_px_val { 21810175SStuart.Maybee@Sun.COM uint64_aligned_t freq; /* Px core frequency */ 21910175SStuart.Maybee@Sun.COM uint64_aligned_t residency; /* Px residency time */ 22010175SStuart.Maybee@Sun.COM uint64_aligned_t count; /* Px transition count */ 22110175SStuart.Maybee@Sun.COM }; 22210175SStuart.Maybee@Sun.COM typedef struct pm_px_val pm_px_val_t; 22310175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(pm_px_val_t); 22410175SStuart.Maybee@Sun.COM 22510175SStuart.Maybee@Sun.COM struct pm_px_stat { 22610175SStuart.Maybee@Sun.COM uint8_t total; /* total Px states */ 22710175SStuart.Maybee@Sun.COM uint8_t usable; /* usable Px states */ 22810175SStuart.Maybee@Sun.COM uint8_t last; /* last Px state */ 22910175SStuart.Maybee@Sun.COM uint8_t cur; /* current Px state */ 23010175SStuart.Maybee@Sun.COM XEN_GUEST_HANDLE_64(uint64) trans_pt; /* Px transition table */ 23110175SStuart.Maybee@Sun.COM XEN_GUEST_HANDLE_64(pm_px_val_t) pt; 23210175SStuart.Maybee@Sun.COM }; 23310175SStuart.Maybee@Sun.COM typedef struct pm_px_stat pm_px_stat_t; 23410175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(pm_px_stat_t); 23510175SStuart.Maybee@Sun.COM 23610175SStuart.Maybee@Sun.COM struct pm_cx_stat { 23710175SStuart.Maybee@Sun.COM uint32_t nr; /* entry nr in triggers & residencies, including C0 */ 23810175SStuart.Maybee@Sun.COM uint32_t last; /* last Cx state */ 23910175SStuart.Maybee@Sun.COM uint64_aligned_t idle_time; /* idle time from boot */ 24010175SStuart.Maybee@Sun.COM XEN_GUEST_HANDLE_64(uint64) triggers; /* Cx trigger counts */ 24110175SStuart.Maybee@Sun.COM XEN_GUEST_HANDLE_64(uint64) residencies; /* Cx residencies */ 24210175SStuart.Maybee@Sun.COM }; 24310175SStuart.Maybee@Sun.COM 24410175SStuart.Maybee@Sun.COM struct xen_sysctl_get_pmstat { 24510175SStuart.Maybee@Sun.COM #define PMSTAT_CATEGORY_MASK 0xf0 24610175SStuart.Maybee@Sun.COM #define PMSTAT_PX 0x10 24710175SStuart.Maybee@Sun.COM #define PMSTAT_CX 0x20 24810175SStuart.Maybee@Sun.COM #define PMSTAT_get_max_px (PMSTAT_PX | 0x1) 24910175SStuart.Maybee@Sun.COM #define PMSTAT_get_pxstat (PMSTAT_PX | 0x2) 25010175SStuart.Maybee@Sun.COM #define PMSTAT_reset_pxstat (PMSTAT_PX | 0x3) 25110175SStuart.Maybee@Sun.COM #define PMSTAT_get_max_cx (PMSTAT_CX | 0x1) 25210175SStuart.Maybee@Sun.COM #define PMSTAT_get_cxstat (PMSTAT_CX | 0x2) 25310175SStuart.Maybee@Sun.COM #define PMSTAT_reset_cxstat (PMSTAT_CX | 0x3) 25410175SStuart.Maybee@Sun.COM uint32_t type; 25510175SStuart.Maybee@Sun.COM uint32_t cpuid; 25610175SStuart.Maybee@Sun.COM union { 25710175SStuart.Maybee@Sun.COM struct pm_px_stat getpx; 25810175SStuart.Maybee@Sun.COM struct pm_cx_stat getcx; 25910175SStuart.Maybee@Sun.COM /* other struct for tx, etc */ 26010175SStuart.Maybee@Sun.COM } u; 26110175SStuart.Maybee@Sun.COM }; 26210175SStuart.Maybee@Sun.COM typedef struct xen_sysctl_get_pmstat xen_sysctl_get_pmstat_t; 26310175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_sysctl_get_pmstat_t); 26410175SStuart.Maybee@Sun.COM 26510175SStuart.Maybee@Sun.COM /* 26610175SStuart.Maybee@Sun.COM * Status codes. Must be greater than 0 to avoid confusing 26710175SStuart.Maybee@Sun.COM * sysctl callers that see 0 as a plain successful return. 26810175SStuart.Maybee@Sun.COM */ 269*11120SMark.Johnson@Sun.COM #define XEN_CPU_HOTPLUG_STATUS_OFFLINE 1 270*11120SMark.Johnson@Sun.COM #define XEN_CPU_HOTPLUG_STATUS_ONLINE 2 271*11120SMark.Johnson@Sun.COM #define XEN_CPU_HOTPLUG_STATUS_NEW 3 27210175SStuart.Maybee@Sun.COM 27310175SStuart.Maybee@Sun.COM #define XEN_SYSCTL_cpu_hotplug 11 27410175SStuart.Maybee@Sun.COM struct xen_sysctl_cpu_hotplug { 27510175SStuart.Maybee@Sun.COM /* IN variables */ 27610175SStuart.Maybee@Sun.COM uint32_t cpu; /* Physical cpu. */ 27710175SStuart.Maybee@Sun.COM #define XEN_SYSCTL_CPU_HOTPLUG_ONLINE 0 27810175SStuart.Maybee@Sun.COM #define XEN_SYSCTL_CPU_HOTPLUG_OFFLINE 1 27910175SStuart.Maybee@Sun.COM #define XEN_SYSCTL_CPU_HOTPLUG_STATUS 2 28010175SStuart.Maybee@Sun.COM uint32_t op; /* hotplug opcode */ 28110175SStuart.Maybee@Sun.COM }; 28210175SStuart.Maybee@Sun.COM typedef struct xen_sysctl_cpu_hotplug xen_sysctl_cpu_hotplug_t; 28310175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpu_hotplug_t); 28410175SStuart.Maybee@Sun.COM 285*11120SMark.Johnson@Sun.COM /* 286*11120SMark.Johnson@Sun.COM * Get/set xen power management, include 287*11120SMark.Johnson@Sun.COM * 1. cpufreq governors and related parameters 288*11120SMark.Johnson@Sun.COM */ 289*11120SMark.Johnson@Sun.COM #define XEN_SYSCTL_pm_op 12 290*11120SMark.Johnson@Sun.COM struct xen_userspace { 291*11120SMark.Johnson@Sun.COM uint32_t scaling_setspeed; 292*11120SMark.Johnson@Sun.COM }; 293*11120SMark.Johnson@Sun.COM typedef struct xen_userspace xen_userspace_t; 294*11120SMark.Johnson@Sun.COM 295*11120SMark.Johnson@Sun.COM struct xen_ondemand { 296*11120SMark.Johnson@Sun.COM uint32_t sampling_rate_max; 297*11120SMark.Johnson@Sun.COM uint32_t sampling_rate_min; 298*11120SMark.Johnson@Sun.COM 299*11120SMark.Johnson@Sun.COM uint32_t sampling_rate; 300*11120SMark.Johnson@Sun.COM uint32_t up_threshold; 301*11120SMark.Johnson@Sun.COM }; 302*11120SMark.Johnson@Sun.COM typedef struct xen_ondemand xen_ondemand_t; 303*11120SMark.Johnson@Sun.COM 304*11120SMark.Johnson@Sun.COM /* 305*11120SMark.Johnson@Sun.COM * cpufreq para name of this structure named 306*11120SMark.Johnson@Sun.COM * same as sysfs file name of native linux 307*11120SMark.Johnson@Sun.COM */ 308*11120SMark.Johnson@Sun.COM #define CPUFREQ_NAME_LEN 16 309*11120SMark.Johnson@Sun.COM struct xen_get_cpufreq_para { 310*11120SMark.Johnson@Sun.COM /* IN/OUT variable */ 311*11120SMark.Johnson@Sun.COM uint32_t cpu_num; 312*11120SMark.Johnson@Sun.COM uint32_t freq_num; 313*11120SMark.Johnson@Sun.COM uint32_t gov_num; 314*11120SMark.Johnson@Sun.COM 315*11120SMark.Johnson@Sun.COM /* for all governors */ 316*11120SMark.Johnson@Sun.COM /* OUT variable */ 317*11120SMark.Johnson@Sun.COM XEN_GUEST_HANDLE_64(uint32) affected_cpus; 318*11120SMark.Johnson@Sun.COM XEN_GUEST_HANDLE_64(uint32) scaling_available_frequencies; 319*11120SMark.Johnson@Sun.COM XEN_GUEST_HANDLE_64(char) scaling_available_governors; 320*11120SMark.Johnson@Sun.COM char scaling_driver[CPUFREQ_NAME_LEN]; 321*11120SMark.Johnson@Sun.COM 322*11120SMark.Johnson@Sun.COM uint32_t cpuinfo_cur_freq; 323*11120SMark.Johnson@Sun.COM uint32_t cpuinfo_max_freq; 324*11120SMark.Johnson@Sun.COM uint32_t cpuinfo_min_freq; 325*11120SMark.Johnson@Sun.COM uint32_t scaling_cur_freq; 326*11120SMark.Johnson@Sun.COM 327*11120SMark.Johnson@Sun.COM char scaling_governor[CPUFREQ_NAME_LEN]; 328*11120SMark.Johnson@Sun.COM uint32_t scaling_max_freq; 329*11120SMark.Johnson@Sun.COM uint32_t scaling_min_freq; 330*11120SMark.Johnson@Sun.COM 331*11120SMark.Johnson@Sun.COM /* for specific governor */ 332*11120SMark.Johnson@Sun.COM union { 333*11120SMark.Johnson@Sun.COM struct xen_userspace userspace; 334*11120SMark.Johnson@Sun.COM struct xen_ondemand ondemand; 335*11120SMark.Johnson@Sun.COM } u; 336*11120SMark.Johnson@Sun.COM }; 337*11120SMark.Johnson@Sun.COM 338*11120SMark.Johnson@Sun.COM struct xen_set_cpufreq_gov { 339*11120SMark.Johnson@Sun.COM char scaling_governor[CPUFREQ_NAME_LEN]; 340*11120SMark.Johnson@Sun.COM }; 341*11120SMark.Johnson@Sun.COM 342*11120SMark.Johnson@Sun.COM struct xen_set_cpufreq_para { 343*11120SMark.Johnson@Sun.COM #define SCALING_MAX_FREQ 1 344*11120SMark.Johnson@Sun.COM #define SCALING_MIN_FREQ 2 345*11120SMark.Johnson@Sun.COM #define SCALING_SETSPEED 3 346*11120SMark.Johnson@Sun.COM #define SAMPLING_RATE 4 347*11120SMark.Johnson@Sun.COM #define UP_THRESHOLD 5 348*11120SMark.Johnson@Sun.COM 349*11120SMark.Johnson@Sun.COM uint32_t ctrl_type; 350*11120SMark.Johnson@Sun.COM uint32_t ctrl_value; 351*11120SMark.Johnson@Sun.COM }; 352*11120SMark.Johnson@Sun.COM 353*11120SMark.Johnson@Sun.COM /* Get physical CPU topology information. */ 354*11120SMark.Johnson@Sun.COM #define INVALID_TOPOLOGY_ID (~0U) 355*11120SMark.Johnson@Sun.COM struct xen_get_cputopo { 356*11120SMark.Johnson@Sun.COM /* IN: maximum addressable entry in 357*11120SMark.Johnson@Sun.COM * the caller-provided cpu_to_core/socket. 358*11120SMark.Johnson@Sun.COM */ 359*11120SMark.Johnson@Sun.COM uint32_t max_cpus; 360*11120SMark.Johnson@Sun.COM XEN_GUEST_HANDLE_64(uint32) cpu_to_core; 361*11120SMark.Johnson@Sun.COM XEN_GUEST_HANDLE_64(uint32) cpu_to_socket; 362*11120SMark.Johnson@Sun.COM 363*11120SMark.Johnson@Sun.COM /* OUT: number of cpus returned 364*11120SMark.Johnson@Sun.COM * If OUT is greater than IN then the cpu_to_core/socket is truncated! 365*11120SMark.Johnson@Sun.COM */ 366*11120SMark.Johnson@Sun.COM uint32_t nr_cpus; 367*11120SMark.Johnson@Sun.COM }; 368*11120SMark.Johnson@Sun.COM 369*11120SMark.Johnson@Sun.COM struct xen_sysctl_pm_op { 370*11120SMark.Johnson@Sun.COM #define PM_PARA_CATEGORY_MASK 0xf0 371*11120SMark.Johnson@Sun.COM #define CPUFREQ_PARA 0x10 372*11120SMark.Johnson@Sun.COM 373*11120SMark.Johnson@Sun.COM /* cpufreq command type */ 374*11120SMark.Johnson@Sun.COM #define GET_CPUFREQ_PARA (CPUFREQ_PARA | 0x01) 375*11120SMark.Johnson@Sun.COM #define SET_CPUFREQ_GOV (CPUFREQ_PARA | 0x02) 376*11120SMark.Johnson@Sun.COM #define SET_CPUFREQ_PARA (CPUFREQ_PARA | 0x03) 377*11120SMark.Johnson@Sun.COM #define GET_CPUFREQ_AVGFREQ (CPUFREQ_PARA | 0x04) 378*11120SMark.Johnson@Sun.COM 379*11120SMark.Johnson@Sun.COM /* get CPU topology */ 380*11120SMark.Johnson@Sun.COM #define XEN_SYSCTL_pm_op_get_cputopo 0x20 381*11120SMark.Johnson@Sun.COM 382*11120SMark.Johnson@Sun.COM /* set/reset scheduler power saving option */ 383*11120SMark.Johnson@Sun.COM #define XEN_SYSCTL_pm_op_set_sched_opt_smt 0x21 384*11120SMark.Johnson@Sun.COM 385*11120SMark.Johnson@Sun.COM /* cpuidle max_cstate access command */ 386*11120SMark.Johnson@Sun.COM #define XEN_SYSCTL_pm_op_get_max_cstate 0x22 387*11120SMark.Johnson@Sun.COM #define XEN_SYSCTL_pm_op_set_max_cstate 0x23 388*11120SMark.Johnson@Sun.COM 389*11120SMark.Johnson@Sun.COM /* set scheduler migration cost value */ 390*11120SMark.Johnson@Sun.COM #define XEN_SYSCTL_pm_op_set_vcpu_migration_delay 0x24 391*11120SMark.Johnson@Sun.COM #define XEN_SYSCTL_pm_op_get_vcpu_migration_delay 0x25 392*11120SMark.Johnson@Sun.COM 393*11120SMark.Johnson@Sun.COM uint32_t cmd; 394*11120SMark.Johnson@Sun.COM uint32_t cpuid; 395*11120SMark.Johnson@Sun.COM union { 396*11120SMark.Johnson@Sun.COM struct xen_get_cpufreq_para get_para; 397*11120SMark.Johnson@Sun.COM struct xen_set_cpufreq_gov set_gov; 398*11120SMark.Johnson@Sun.COM struct xen_set_cpufreq_para set_para; 399*11120SMark.Johnson@Sun.COM uint64_t get_avgfreq; 400*11120SMark.Johnson@Sun.COM struct xen_get_cputopo get_topo; 401*11120SMark.Johnson@Sun.COM uint32_t set_sched_opt_smt; 402*11120SMark.Johnson@Sun.COM uint32_t get_max_cstate; 403*11120SMark.Johnson@Sun.COM uint32_t set_max_cstate; 404*11120SMark.Johnson@Sun.COM uint32_t get_vcpu_migration_delay; 405*11120SMark.Johnson@Sun.COM uint32_t set_vcpu_migration_delay; 406*11120SMark.Johnson@Sun.COM } u; 407*11120SMark.Johnson@Sun.COM }; 408*11120SMark.Johnson@Sun.COM 409*11120SMark.Johnson@Sun.COM #define XEN_SYSCTL_page_offline_op 14 410*11120SMark.Johnson@Sun.COM struct xen_sysctl_page_offline_op { 411*11120SMark.Johnson@Sun.COM /* IN: range of page to be offlined */ 412*11120SMark.Johnson@Sun.COM #define sysctl_page_offline 1 413*11120SMark.Johnson@Sun.COM #define sysctl_page_online 2 414*11120SMark.Johnson@Sun.COM #define sysctl_query_page_offline 3 415*11120SMark.Johnson@Sun.COM uint32_t cmd; 416*11120SMark.Johnson@Sun.COM uint32_t start; 417*11120SMark.Johnson@Sun.COM uint32_t end; 418*11120SMark.Johnson@Sun.COM /* OUT: result of page offline request */ 419*11120SMark.Johnson@Sun.COM /* 420*11120SMark.Johnson@Sun.COM * bit 0~15: result flags 421*11120SMark.Johnson@Sun.COM * bit 16~31: owner 422*11120SMark.Johnson@Sun.COM */ 423*11120SMark.Johnson@Sun.COM XEN_GUEST_HANDLE(uint32) status; 424*11120SMark.Johnson@Sun.COM }; 425*11120SMark.Johnson@Sun.COM 426*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_STATUS_MASK (0xFFUL) 427*11120SMark.Johnson@Sun.COM 428*11120SMark.Johnson@Sun.COM /* The result is invalid, i.e. HV does not handle it */ 429*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_INVALID (0x1UL << 0) 430*11120SMark.Johnson@Sun.COM 431*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_OFFLINED (0x1UL << 1) 432*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_PENDING (0x1UL << 2) 433*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_FAILED (0x1UL << 3) 434*11120SMark.Johnson@Sun.COM 435*11120SMark.Johnson@Sun.COM #define PG_ONLINE_FAILED PG_OFFLINE_FAILED 436*11120SMark.Johnson@Sun.COM #define PG_ONLINE_ONLINED PG_OFFLINE_OFFLINED 437*11120SMark.Johnson@Sun.COM 438*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_STATUS_OFFLINED (0x1UL << 1) 439*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_STATUS_ONLINE (0x1UL << 2) 440*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_STATUS_OFFLINE_PENDING (0x1UL << 3) 441*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_STATUS_BROKEN (0x1UL << 4) 442*11120SMark.Johnson@Sun.COM 443*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_MISC_MASK (0xFFUL << 4) 444*11120SMark.Johnson@Sun.COM 445*11120SMark.Johnson@Sun.COM /* only valid when PG_OFFLINE_FAILED */ 446*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_XENPAGE (0x1UL << 8) 447*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_DOM0PAGE (0x1UL << 9) 448*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_ANONYMOUS (0x1UL << 10) 449*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_NOT_CONV_RAM (0x1UL << 11) 450*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_OWNED (0x1UL << 12) 451*11120SMark.Johnson@Sun.COM 452*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_BROKEN (0x1UL << 13) 453*11120SMark.Johnson@Sun.COM #define PG_ONLINE_BROKEN PG_OFFLINE_BROKEN 454*11120SMark.Johnson@Sun.COM 455*11120SMark.Johnson@Sun.COM #define PG_OFFLINE_OWNER_SHIFT 16 45610175SStuart.Maybee@Sun.COM 4575084Sjohnlev struct xen_sysctl { 4585084Sjohnlev uint32_t cmd; 4595084Sjohnlev uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */ 4605084Sjohnlev union { 4615084Sjohnlev struct xen_sysctl_readconsole readconsole; 4625084Sjohnlev struct xen_sysctl_tbuf_op tbuf_op; 4635084Sjohnlev struct xen_sysctl_physinfo physinfo; 4645084Sjohnlev struct xen_sysctl_sched_id sched_id; 4655084Sjohnlev struct xen_sysctl_perfc_op perfc_op; 4665084Sjohnlev struct xen_sysctl_getdomaininfolist getdomaininfolist; 4676144Srab struct xen_sysctl_debug_keys debug_keys; 4686144Srab struct xen_sysctl_getcpuinfo getcpuinfo; 46910175SStuart.Maybee@Sun.COM struct xen_sysctl_availheap availheap; 47010175SStuart.Maybee@Sun.COM struct xen_sysctl_get_pmstat get_pmstat; 47110175SStuart.Maybee@Sun.COM struct xen_sysctl_cpu_hotplug cpu_hotplug; 472*11120SMark.Johnson@Sun.COM struct xen_sysctl_pm_op pm_op; 473*11120SMark.Johnson@Sun.COM struct xen_sysctl_page_offline_op page_offline; 4745084Sjohnlev uint8_t pad[128]; 4755084Sjohnlev } u; 4765084Sjohnlev }; 4775084Sjohnlev typedef struct xen_sysctl xen_sysctl_t; 4785084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_sysctl_t); 4795084Sjohnlev 4805084Sjohnlev #endif /* __XEN_PUBLIC_SYSCTL_H__ */ 4815084Sjohnlev 4825084Sjohnlev /* 4835084Sjohnlev * Local variables: 4845084Sjohnlev * mode: C 4855084Sjohnlev * c-set-style: "BSD" 4865084Sjohnlev * c-basic-offset: 4 4875084Sjohnlev * tab-width: 4 4885084Sjohnlev * indent-tabs-mode: nil 4895084Sjohnlev * End: 4905084Sjohnlev */ 491