1e085f869SStanislav Sedov.\" Copyright (c) 2006-2008 Stanislav Sedov <stas@FreeBSD.org> 2e085f869SStanislav Sedov.\" All rights reserved. 3e085f869SStanislav Sedov.\" 4e085f869SStanislav Sedov.\" Redistribution and use in source and binary forms, with or without 5e085f869SStanislav Sedov.\" modification, are permitted provided that the following conditions 6e085f869SStanislav Sedov.\" are met: 7e085f869SStanislav Sedov.\" 1. Redistributions of source code must retain the above copyright 8e085f869SStanislav Sedov.\" notice, this list of conditions and the following disclaimer. 9e085f869SStanislav Sedov.\" 2. Redistributions in binary form must reproduce the above copyright 10e085f869SStanislav Sedov.\" notice, this list of conditions and the following disclaimer in the 11e085f869SStanislav Sedov.\" documentation and/or other materials provided with the distribution. 12e085f869SStanislav Sedov.\" 13e085f869SStanislav Sedov.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14e085f869SStanislav Sedov.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15e085f869SStanislav Sedov.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16e085f869SStanislav Sedov.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 17e085f869SStanislav Sedov.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18e085f869SStanislav Sedov.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19e085f869SStanislav Sedov.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20e085f869SStanislav Sedov.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21e085f869SStanislav Sedov.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22e085f869SStanislav Sedov.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23e085f869SStanislav Sedov.\" SUCH DAMAGE. 24e085f869SStanislav Sedov.\" 25e085f869SStanislav Sedov.\" $FreeBSD$ 26e085f869SStanislav Sedov.\" 27cef789cdSKonstantin Belousov.Dd June 20, 2014 28e085f869SStanislav Sedov.Dt CPUCTL 4 29e085f869SStanislav Sedov.Os 30e085f869SStanislav Sedov.Sh NAME 31e085f869SStanislav Sedov.Nm cpuctl 32e085f869SStanislav Sedov.Nd cpuctl pseudo device 33e085f869SStanislav Sedov.Sh SYNOPSIS 34e085f869SStanislav SedovTo compile this driver into the kernel, 35e085f869SStanislav Sedovplace the following lines in your kernel 36e085f869SStanislav Sedovconfiguration file: 37e085f869SStanislav Sedov.Bd -ragged -offset indent 38e085f869SStanislav Sedov.Cd "device cpuctl" 39e085f869SStanislav Sedov.Ed 40e085f869SStanislav Sedov.Pp 41e085f869SStanislav SedovAlternatively, to load the driver as a module 42e085f869SStanislav Sedovat boot time, place the following in 43e085f869SStanislav Sedov.Xr loader.conf 5 : 44e085f869SStanislav Sedov.Bd -literal -offset indent 45e085f869SStanislav Sedovcpuctl_load="YES" 46e085f869SStanislav Sedov.Ed 47e085f869SStanislav Sedov.Sh DESCRIPTION 48d0bc5026SChristian BruefferThe special device 49e085f869SStanislav Sedov.Pa /dev/cpuctl 505256765fSChristian Bruefferpresents interface to the system CPU. 515256765fSChristian BruefferIt provides functionality to retrieve 52e085f869SStanislav SedovCPUID information, read/write machine specific registers (MSR) and perform 535256765fSChristian BruefferCPU firmware updates. 54e085f869SStanislav Sedov.Pp 55d0bc5026SChristian BruefferFor each CPU present in the system, the special device 56e085f869SStanislav Sedov.Pa /dev/cpuctl%d 575256765fSChristian Bruefferwith the appropriate index will be created. 58d0bc5026SChristian BruefferFor multicore CPUs such a 59d0bc5026SChristian Bruefferspecial device will be created for each core. 60e085f869SStanislav Sedov.Pp 61e085f869SStanislav SedovCurrently, only i386 and amd64 processors are 62e085f869SStanislav Sedovsupported. 63e085f869SStanislav Sedov.Sh IOCTL INTERFACE 64e085f869SStanislav SedovAll of the supported operations are invoked using the 655256765fSChristian Brueffer.Xr ioctl 2 665256765fSChristian Brueffersystem call. 675256765fSChristian BruefferCurrently, the following ioctls are defined: 68cef789cdSKonstantin Belousov.Bl -tag -width CPUCTL_CPUID_COUNT 69e085f869SStanislav Sedov.It Dv CPUCTL_RDMSR Fa cpuctl_msr_args_t *args 70e085f869SStanislav Sedov.It Dv CPUCTL_WRMSR Fa cpuctl_msr_args_t *args 715256765fSChristian BruefferRead/write CPU machine specific register. 725256765fSChristian BruefferThe 73e085f869SStanislav Sedov.Vt cpuctl_msr_args_t 745256765fSChristian Bruefferstructure is defined in 75e085f869SStanislav Sedov.In sys/cpuctl.h 76e085f869SStanislav Sedovas: 77e085f869SStanislav Sedov.Bd -literal 78e085f869SStanislav Sedovtypedef struct { 79e085f869SStanislav Sedov int msr; /* MSR to read */ 80e085f869SStanislav Sedov uint64_t data; 81e085f869SStanislav Sedov} cpuctl_msr_args_t; 82e085f869SStanislav Sedov.Ed 83b2d75854SStanislav Sedov.It Dv CPUCTL_MSRSBIT Fa cpuctl_msr_args_t *args 84b2d75854SStanislav Sedov.It Dv CPUCTL_MSRCBIT Fa cpuctl_msr_args_t *args 85b2d75854SStanislav SedovSet/clear MSR bits according to the mask given in the 86b2d75854SStanislav Sedov.Va data 87b2d75854SStanislav Sedovfield. 88e085f869SStanislav Sedov.It Dv CPUCTL_CPUID Fa cpuctl_cpuid_args_t *args 895256765fSChristian BruefferRetrieve CPUID information. 90cef789cdSKonstantin BelousovArguments are supplied in the following structure: 91cef789cdSKonstantin Belousov.Bd -literal 92cef789cdSKonstantin Belousovtypedef struct { 93cef789cdSKonstantin Belousov int level; /* CPUID level */ 94cef789cdSKonstantin Belousov uint32_t data[4]; 95cef789cdSKonstantin Belousov} cpuctl_cpuid_args_t; 96cef789cdSKonstantin Belousov.Ed 97cef789cdSKonstantin BelousovIt is equivalent to the 98cef789cdSKonstantin Belousov.Dv CPUCTL_CPUID_COUNT 99cef789cdSKonstantin Belousovrequest with 100cef789cdSKonstantin Belousov.Va level_type 101cef789cdSKonstantin Belousovset to 0. 102cef789cdSKonstantin Belousov.It Dv CPUCTL_CPUID_COUNT Fa cpuctl_cpuid_count_args_t *args 103cef789cdSKonstantin BelousovRetrieve CPUID information. 104cef789cdSKonstantin BelousovArguments are supplied in the following structure: 105e085f869SStanislav Sedov.Bd -literal 106e085f869SStanislav Sedovtypedef struct { 107e085f869SStanislav Sedov int level; /* CPUID level */ 108aa1cb750SAttilio Rao int level_type; /* CPUID level type */ 109e085f869SStanislav Sedov uint32_t data[4]; 110cef789cdSKonstantin Belousov} cpuctl_cpuid_count_args_t; 111e085f869SStanislav Sedov.Ed 112e085f869SStanislav SedovThe 113e085f869SStanislav Sedov.Va level 114cef789cdSKonstantin Belousovfield indicates the CPUID level to retrieve, 115cef789cdSKonstantin Belousovit is loaded into the 116cef789cdSKonstantin Belousov.Va %eax 117cef789cdSKonstantin Belousovregister before the CPUID instruction is executed, 118aa1cb750SAttilio RaoThe 119aa1cb750SAttilio Rao.Va level_type 120cef789cdSKonstantin Belousovfield indicates the CPUID level type to retrieve, 121cef789cdSKonstantin Belousovit is loaded into the 122cef789cdSKonstantin Belousov.Va %ecx 123cef789cdSKonstantin Belousovregister. 124cef789cdSKonstantin Belousov.Pp 125cef789cdSKonstantin BelousovThe 126e085f869SStanislav Sedov.Va data 1275256765fSChristian Bruefferfield is used to store the received CPUID data. 128cef789cdSKonstantin BelousovThat is, 129cef789cdSKonstantin Belousov.Va data[0] 130cef789cdSKonstantin Belousovcontains the value of 131cef789cdSKonstantin Belousov.Va %eax 132cef789cdSKonstantin Belousovregister after the CPUID instruction is executed, 133cef789cdSKonstantin Belousov.Va data[1] 134cef789cdSKonstantin Belousovis for 135cef789cdSKonstantin Belousov.Va %ebx , 136cef789cdSKonstantin Belousov.Va data[2] 137cef789cdSKonstantin Belousovfor 138cef789cdSKonstantin Belousov.Va %ecx , 139cef789cdSKonstantin Belousovand 140cef789cdSKonstantin Belousov.Va data[3] 141cef789cdSKonstantin Belousovfor 142cef789cdSKonstantin Belousov.Va %edx . 143e085f869SStanislav Sedov.It Dv CPUCTL_UPDATE cpuctl_update_args_t *args 1445256765fSChristian BruefferUpdate CPU firmware (microcode). 1455256765fSChristian BruefferThe structure is defined in 146e085f869SStanislav Sedov.In sys/cpuctl.h 147e085f869SStanislav Sedovas: 148e085f869SStanislav Sedov.Bd -literal 149e085f869SStanislav Sedovtypedef struct { 150e085f869SStanislav Sedov void *data; 151e085f869SStanislav Sedov size_t size; 152e085f869SStanislav Sedov} cpuctl_update_args_t; 153e085f869SStanislav Sedov.Ed 154e085f869SStanislav Sedov.Pp 155e085f869SStanislav SedovThe 156e085f869SStanislav Sedov.Va data 157e085f869SStanislav Sedovfield should point to the firmware image of size 158e085f869SStanislav Sedov.Va size . 159e085f869SStanislav Sedov.El 160e085f869SStanislav Sedov.Pp 161e085f869SStanislav SedovFor additional information refer to 162e085f869SStanislav Sedov.Pa cpuctl.h . 163*c6209be8SXin LI.Sh FILES 164*c6209be8SXin LI.Bl -tag -width /dev/cpuctl -compact 165*c6209be8SXin LI.It Pa /dev/cpuctl 166*c6209be8SXin LI.El 167*c6209be8SXin LI.Sh ERRORS 168e085f869SStanislav Sedov.Bl -tag -width Er 169e085f869SStanislav Sedov.It Bq Er ENXIO 17050d922a0SGlen BarberThe operation requested is not supported by the device (e.g., unsupported 17150d922a0SGlen Barberarchitecture or the CPU is disabled). 172e085f869SStanislav Sedov.It Bq Er EINVAL 173e085f869SStanislav SedovIncorrect request was supplied, or microcode image is not correct. 174e085f869SStanislav Sedov.It Bq Er ENOMEM 175e085f869SStanislav SedovNo physical memory was available to complete the request. 176e085f869SStanislav Sedov.It Bq Er EFAULT 1775256765fSChristian BruefferThe firmware image address points outside the process address space. 178e085f869SStanislav Sedov.El 179e085f869SStanislav Sedov.Sh SEE ALSO 180d0e00c8bSChristian Brueffer.Xr hwpmc 4 , 1815256765fSChristian Brueffer.Xr cpucontrol 8 182e085f869SStanislav Sedov.Sh HISTORY 183e085f869SStanislav SedovThe 184e085f869SStanislav Sedov.Nm 185e085f869SStanislav Sedovdriver first appeared in 1862a72feb4SChristian Brueffer.Fx 7.2 . 187e085f869SStanislav Sedov.Sh AUTHORS 188e085f869SStanislav SedovThe 189e085f869SStanislav Sedov.Nm 1905256765fSChristian Brueffermodule and this manual page were written by 1916c899950SBaptiste Daroussin.An Stanislav Sedov Aq Mt stas@FreeBSD.org . 1920afc94c1SUlrich Spörlein.Sh BUGS 1930afc94c1SUlrich SpörleinYes, probably, report if any. 194