xref: /freebsd/share/man/man4/cpuctl.4 (revision aa1cb7501fead18583f08c616f38f4a1e89f0e5f)
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.\"
27b2d75854SStanislav Sedov.Dd June 30, 2009
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:
68e085f869SStanislav Sedov.Bl -tag -width CPUCTL_UPDATE
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
89*aa1cb750SAttilio Rao.It Dv CPUCTL_CPUID_COUNT Fa cpuctl_cpuid_args_t *args
905256765fSChristian BruefferRetrieve CPUID information.
915256765fSChristian BruefferArguments are supplied in
92e085f869SStanislav Sedovthe following struct:
93e085f869SStanislav Sedov.Bd -literal
94e085f869SStanislav Sedovtypedef struct {
95e085f869SStanislav Sedov	int		level;		/* CPUID level */
96*aa1cb750SAttilio Rao	int		level_type;	/* CPUID level type */
97e085f869SStanislav Sedov	uint32_t	data[4];
98e085f869SStanislav Sedov} cpuctl_cpuid_args_t;
99e085f869SStanislav Sedov.Ed
100e085f869SStanislav Sedov.Pp
101e085f869SStanislav SedovThe
102e085f869SStanislav Sedov.Va level
103*aa1cb750SAttilio Raofield indicates the CPUID level to retrieve.
104*aa1cb750SAttilio RaoThe
105*aa1cb750SAttilio Rao.Va level_type
106*aa1cb750SAttilio Raofield indicates the CPUID level type to retrieve.
107*aa1cb750SAttilio RaoIt is overriden to 0 for
108*aa1cb750SAttilio Rao.Va CPUCTL_CPUID .
109*aa1cb750SAttilio RaoFinally, the
110e085f869SStanislav Sedov.Va data
1115256765fSChristian Bruefferfield is used to store the received CPUID data.
112e085f869SStanislav Sedov.It Dv CPUCTL_UPDATE cpuctl_update_args_t *args
1135256765fSChristian BruefferUpdate CPU firmware (microcode).
1145256765fSChristian BruefferThe structure is defined in
115e085f869SStanislav Sedov.In sys/cpuctl.h
116e085f869SStanislav Sedovas:
117e085f869SStanislav Sedov.Bd -literal
118e085f869SStanislav Sedovtypedef struct {
119e085f869SStanislav Sedov	void	*data;
120e085f869SStanislav Sedov	size_t	size;
121e085f869SStanislav Sedov} cpuctl_update_args_t;
122e085f869SStanislav Sedov.Ed
123e085f869SStanislav Sedov.Pp
124e085f869SStanislav SedovThe
125e085f869SStanislav Sedov.Va data
126e085f869SStanislav Sedovfield should point to the firmware image of size
127e085f869SStanislav Sedov.Va size .
128e085f869SStanislav Sedov.El
129e085f869SStanislav Sedov.Pp
130e085f869SStanislav SedovFor additional information refer to
131e085f869SStanislav Sedov.Pa cpuctl.h .
132e085f869SStanislav Sedov.Sh RETURN VALUES
133e085f869SStanislav Sedov.Bl -tag -width Er
134e085f869SStanislav Sedov.It Bq Er ENXIO
13550d922a0SGlen BarberThe operation requested is not supported by the device (e.g., unsupported
13650d922a0SGlen Barberarchitecture or the CPU is disabled).
137e085f869SStanislav Sedov.It Bq Er EINVAL
138e085f869SStanislav SedovIncorrect request was supplied, or microcode image is not correct.
139e085f869SStanislav Sedov.It Bq Er ENOMEM
140e085f869SStanislav SedovNo physical memory was available to complete the request.
141e085f869SStanislav Sedov.It Bq Er EFAULT
1425256765fSChristian BruefferThe firmware image address points outside the process address space.
143e085f869SStanislav Sedov.El
144e085f869SStanislav Sedov.Sh FILES
145e085f869SStanislav Sedov.Bl -tag -width /dev/cpuctl -compact
146e085f869SStanislav Sedov.It Pa /dev/cpuctl
147e085f869SStanislav Sedov.El
148e085f869SStanislav Sedov.Sh SEE ALSO
149d0e00c8bSChristian Brueffer.Xr hwpmc 4 ,
1505256765fSChristian Brueffer.Xr cpucontrol 8
151e085f869SStanislav Sedov.Sh HISTORY
152e085f869SStanislav SedovThe
153e085f869SStanislav Sedov.Nm
154e085f869SStanislav Sedovdriver first appeared in
1552a72feb4SChristian Brueffer.Fx 7.2 .
156e085f869SStanislav Sedov.Sh AUTHORS
157e085f869SStanislav SedovThe
158e085f869SStanislav Sedov.Nm
1595256765fSChristian Brueffermodule and this manual page were written by
160e085f869SStanislav Sedov.An Stanislav Sedov Aq stas@FreeBSD.org .
1610afc94c1SUlrich Spörlein.Sh BUGS
1620afc94c1SUlrich SpörleinYes, probably, report if any.
163