1d4ef6694SJoris Giovannangeli.\" Copyright (c) 2006-2008 Stanislav Sedov <stas@FreeBSD.org> 2d4ef6694SJoris Giovannangeli.\" All rights reserved. 3d4ef6694SJoris Giovannangeli.\" 4d4ef6694SJoris Giovannangeli.\" Redistribution and use in source and binary forms, with or without 5d4ef6694SJoris Giovannangeli.\" modification, are permitted provided that the following conditions 6d4ef6694SJoris Giovannangeli.\" are met: 7d4ef6694SJoris Giovannangeli.\" 1. Redistributions of source code must retain the above copyright 8d4ef6694SJoris Giovannangeli.\" notice, this list of conditions and the following disclaimer. 9d4ef6694SJoris Giovannangeli.\" 2. Redistributions in binary form must reproduce the above copyright 10d4ef6694SJoris Giovannangeli.\" notice, this list of conditions and the following disclaimer in the 11d4ef6694SJoris Giovannangeli.\" documentation and/or other materials provided with the distribution. 12d4ef6694SJoris Giovannangeli.\" 13d4ef6694SJoris Giovannangeli.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14d4ef6694SJoris Giovannangeli.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15d4ef6694SJoris Giovannangeli.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16d4ef6694SJoris Giovannangeli.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17d4ef6694SJoris Giovannangeli.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18d4ef6694SJoris Giovannangeli.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19d4ef6694SJoris Giovannangeli.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20d4ef6694SJoris Giovannangeli.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21d4ef6694SJoris Giovannangeli.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22d4ef6694SJoris Giovannangeli.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23d4ef6694SJoris Giovannangeli.\" SUCH DAMAGE. 24d4ef6694SJoris Giovannangeli.\" 25*1246b87eSzrj.\" $FreeBSD: head/share/man/man4/cpuctl.4 267938 2014-06-26 21:46:14Z bapt $ 26d4ef6694SJoris Giovannangeli.\" 27*1246b87eSzrj.Dd April 12, 2016 28d4ef6694SJoris Giovannangeli.Dt CPUCTL 4 29d4ef6694SJoris Giovannangeli.Os 30d4ef6694SJoris Giovannangeli.Sh NAME 31d4ef6694SJoris Giovannangeli.Nm cpuctl 32d4ef6694SJoris Giovannangeli.Nd cpuctl pseudo device 33d4ef6694SJoris Giovannangeli.Sh SYNOPSIS 34d4ef6694SJoris GiovannangeliTo compile this driver into the kernel, 35d4ef6694SJoris Giovannangeliplace the following lines in your kernel 36d4ef6694SJoris Giovannangeliconfiguration file: 37d4ef6694SJoris Giovannangeli.Bd -ragged -offset indent 38d4ef6694SJoris Giovannangeli.Cd "device cpuctl" 39d4ef6694SJoris Giovannangeli.Ed 40d4ef6694SJoris Giovannangeli.Pp 41d4ef6694SJoris GiovannangeliAlternatively, to load the driver as a module 42d4ef6694SJoris Giovannangeliat boot time, place the following in 43d4ef6694SJoris Giovannangeli.Xr loader.conf 5 : 44d4ef6694SJoris Giovannangeli.Bd -literal -offset indent 45d4ef6694SJoris Giovannangelicpuctl_load="YES" 46d4ef6694SJoris Giovannangeli.Ed 47d4ef6694SJoris Giovannangeli.Sh DESCRIPTION 48d4ef6694SJoris GiovannangeliThe special device 49d4ef6694SJoris Giovannangeli.Pa /dev/cpuctl 50d4ef6694SJoris Giovannangelipresents interface to the system CPU. 51d4ef6694SJoris GiovannangeliIt provides functionality to retrieve 52d4ef6694SJoris GiovannangeliCPUID information, read/write machine specific registers (MSR) and perform 53d4ef6694SJoris GiovannangeliCPU firmware updates. 54d4ef6694SJoris Giovannangeli.Pp 55d4ef6694SJoris GiovannangeliFor each CPU present in the system, the special device 56d4ef6694SJoris Giovannangeli.Pa /dev/cpuctl%d 57d4ef6694SJoris Giovannangeliwith the appropriate index will be created. 58d4ef6694SJoris GiovannangeliFor multicore CPUs such a 59d4ef6694SJoris Giovannangelispecial device will be created for each core. 60d4ef6694SJoris Giovannangeli.Pp 61cf37dc20SSascha WildnerCurrently, only x86_64 processors are supported. 62d4ef6694SJoris Giovannangeli.Sh IOCTL INTERFACE 63d4ef6694SJoris GiovannangeliAll of the supported operations are invoked using the 64d4ef6694SJoris Giovannangeli.Xr ioctl 2 65d4ef6694SJoris Giovannangelisystem call. 66d4ef6694SJoris GiovannangeliCurrently, the following ioctls are defined: 67*1246b87eSzrj.Bl -tag -width ".Dv CPUCTL_CPUID_COUNT" 68d4ef6694SJoris Giovannangeli.It Dv CPUCTL_RDMSR Fa cpuctl_msr_args_t *args 69d4ef6694SJoris Giovannangeli.It Dv CPUCTL_WRMSR Fa cpuctl_msr_args_t *args 70d4ef6694SJoris GiovannangeliRead/write CPU machine specific register. 71d4ef6694SJoris GiovannangeliThe 72d4ef6694SJoris Giovannangeli.Vt cpuctl_msr_args_t 73d4ef6694SJoris Giovannangelistructure is defined in 74d4ef6694SJoris Giovannangeli.In sys/cpuctl.h 75d4ef6694SJoris Giovannangelias: 76d4ef6694SJoris Giovannangeli.Bd -literal 77d4ef6694SJoris Giovannangelitypedef struct { 78d4ef6694SJoris Giovannangeli int msr; /* MSR to read */ 79d4ef6694SJoris Giovannangeli uint64_t data; 80d4ef6694SJoris Giovannangeli} cpuctl_msr_args_t; 81d4ef6694SJoris Giovannangeli.Ed 82d4ef6694SJoris Giovannangeli.It Dv CPUCTL_MSRSBIT Fa cpuctl_msr_args_t *args 83d4ef6694SJoris Giovannangeli.It Dv CPUCTL_MSRCBIT Fa cpuctl_msr_args_t *args 84d4ef6694SJoris GiovannangeliSet/clear MSR bits according to the mask given in the 85d4ef6694SJoris Giovannangeli.Va data 86d4ef6694SJoris Giovannangelifield. 87d4ef6694SJoris Giovannangeli.It Dv CPUCTL_CPUID Fa cpuctl_cpuid_args_t *args 88d4ef6694SJoris GiovannangeliRetrieve CPUID information. 89*1246b87eSzrjArguments are supplied in the following structure: 90d4ef6694SJoris Giovannangeli.Bd -literal 91d4ef6694SJoris Giovannangelitypedef struct { 92d4ef6694SJoris Giovannangeli int level; /* CPUID level */ 93d4ef6694SJoris Giovannangeli uint32_t data[4]; 94d4ef6694SJoris Giovannangeli} cpuctl_cpuid_args_t; 95d4ef6694SJoris Giovannangeli.Ed 96*1246b87eSzrjIt is equivalent to the 97*1246b87eSzrj.Dv CPUCTL_CPUID_COUNT 98*1246b87eSzrjrequest with 99*1246b87eSzrj.Va level_type 100*1246b87eSzrjset to 0. 101*1246b87eSzrj.It Dv CPUCTL_CPUID_COUNT Fa cpuctl_cpuid_count_args_t *args 102*1246b87eSzrjRetrieve CPUID information. 103*1246b87eSzrjArguments are supplied in the following structure: 104*1246b87eSzrj.Bd -literal 105*1246b87eSzrjtypedef struct { 106*1246b87eSzrj int level; /* CPUID level */ 107*1246b87eSzrj int level_type; /* CPUID level type */ 108*1246b87eSzrj uint32_t data[4]; 109*1246b87eSzrj} cpuctl_cpuid_count_args_t; 110*1246b87eSzrj.Ed 111d4ef6694SJoris GiovannangeliThe 112d4ef6694SJoris Giovannangeli.Va level 113*1246b87eSzrjfield indicates the CPUID level to retrieve, 114*1246b87eSzrjit is loaded into the 115*1246b87eSzrj.Va %eax 116*1246b87eSzrjregister before the CPUID instruction is executed, 117*1246b87eSzrjThe 118*1246b87eSzrj.Va level_type 119*1246b87eSzrjfield indicates the CPUID level type to retrieve, 120*1246b87eSzrjit is loaded into the 121*1246b87eSzrj.Va %ecx 122*1246b87eSzrjregister. 123*1246b87eSzrj.Pp 124*1246b87eSzrjThe 125d4ef6694SJoris Giovannangeli.Va data 126d4ef6694SJoris Giovannangelifield is used to store the received CPUID data. 127*1246b87eSzrjThat is, 128*1246b87eSzrj.Va data[0] 129*1246b87eSzrjcontains the value of 130*1246b87eSzrj.Va %eax 131*1246b87eSzrjregister after the CPUID instruction is executed, 132*1246b87eSzrj.Va data[1] 133*1246b87eSzrjis for 134*1246b87eSzrj.Va %ebx , 135*1246b87eSzrj.Va data[2] 136*1246b87eSzrjfor 137*1246b87eSzrj.Va %ecx , 138*1246b87eSzrjand 139*1246b87eSzrj.Va data[3] 140*1246b87eSzrjfor 141*1246b87eSzrj.Va %edx . 142d4ef6694SJoris Giovannangeli.It Dv CPUCTL_UPDATE cpuctl_update_args_t *args 143d4ef6694SJoris GiovannangeliUpdate CPU firmware (microcode). 144d4ef6694SJoris GiovannangeliThe structure is defined in 145d4ef6694SJoris Giovannangeli.In sys/cpuctl.h 146d4ef6694SJoris Giovannangelias: 147d4ef6694SJoris Giovannangeli.Bd -literal 148d4ef6694SJoris Giovannangelitypedef struct { 149d4ef6694SJoris Giovannangeli void *data; 150d4ef6694SJoris Giovannangeli size_t size; 151d4ef6694SJoris Giovannangeli} cpuctl_update_args_t; 152d4ef6694SJoris Giovannangeli.Ed 153d4ef6694SJoris Giovannangeli.Pp 154d4ef6694SJoris GiovannangeliThe 155d4ef6694SJoris Giovannangeli.Va data 156d4ef6694SJoris Giovannangelifield should point to the firmware image of size 157d4ef6694SJoris Giovannangeli.Va size . 158d4ef6694SJoris Giovannangeli.El 159d4ef6694SJoris Giovannangeli.Pp 160d4ef6694SJoris GiovannangeliFor additional information refer to 161d4ef6694SJoris Giovannangeli.Pa cpuctl.h . 162fae1c9a2SSascha Wildner.Sh FILES 163fae1c9a2SSascha Wildner.Bl -tag -width /dev/cpuctl -compact 164fae1c9a2SSascha Wildner.It Pa /dev/cpuctl 165fae1c9a2SSascha Wildner.El 166fae1c9a2SSascha Wildner.Sh ERRORS 167d4ef6694SJoris Giovannangeli.Bl -tag -width Er 168d4ef6694SJoris Giovannangeli.It Bq Er ENXIO 169d4ef6694SJoris GiovannangeliThe operation requested is not supported by the device (e.g., unsupported 170d4ef6694SJoris Giovannangeliarchitecture or the CPU is disabled). 171d4ef6694SJoris Giovannangeli.It Bq Er EINVAL 172d4ef6694SJoris GiovannangeliIncorrect request was supplied, or microcode image is not correct. 173d4ef6694SJoris Giovannangeli.It Bq Er ENOMEM 174d4ef6694SJoris GiovannangeliNo physical memory was available to complete the request. 175d4ef6694SJoris Giovannangeli.It Bq Er EFAULT 176d4ef6694SJoris GiovannangeliThe firmware image address points outside the process address space. 177d4ef6694SJoris Giovannangeli.El 178d4ef6694SJoris Giovannangeli.Sh SEE ALSO 179fae1c9a2SSascha Wildner.\".Xr hwpmc 4 , 180d4ef6694SJoris Giovannangeli.Xr cpucontrol 8 181d4ef6694SJoris Giovannangeli.Sh HISTORY 182d4ef6694SJoris GiovannangeliThe 183d4ef6694SJoris Giovannangeli.Nm 184d4ef6694SJoris Giovannangelidriver first appeared in 185d4ef6694SJoris Giovannangeli.Fx 7.2 . 186d4ef6694SJoris Giovannangeli.Sh AUTHORS 187d4ef6694SJoris GiovannangeliThe 188d4ef6694SJoris Giovannangeli.Nm 189d4ef6694SJoris Giovannangelimodule and this manual page were written by 190fae1c9a2SSascha Wildner.An Stanislav Sedov Aq Mt stas@FreeBSD.org . 191d4ef6694SJoris Giovannangeli.Sh BUGS 192d4ef6694SJoris GiovannangeliYes, probably, report if any. 193