xref: /dflybsd-src/share/man/man4/cpuctl.4 (revision 1246b87e005e70a4c9807bd690f872f6f30adb66)
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