| Main index | Section 4 | Options |
Alternatively, to load the driver as a module at boot time, place the following in loader.conf(5):
cpuctl_load="YES"
For each CPU present in the system, the special device /dev/cpuctl%d with the appropriate index will be created. For multicore CPUs such a special device will be created for each core.
Currently, only i386 and amd64 processors are supported.
| CPUCTL_RDMSRcpuctl_msr_args_t, *args
CPUCTL_WRMSRcpuctl_msr_args_t, *args | |
Read/write CPU machine specific register.
The
cpuctl_msr_args_t
structure is defined in
<sys/cpuctl.h>
as:
typedef struct {
int msr; /* MSR to read */
uint64_t data;
} cpuctl_msr_args_t;
| |
| CPUCTL_MSRSBITcpuctl_msr_args_t, *args
CPUCTL_MSRCBITcpuctl_msr_args_t, *args | |
| Set/clear MSR bits according to the mask given in the data field. | |
| CPUCTL_CPUIDcpuctl_cpuid_args_t, *args | |
Retrieve CPUID information.
Arguments are supplied in the following structure:
typedef struct {
int level; /* CPUID level */
uint32_t data[4];
} cpuctl_cpuid_args_t;
It is equivalent to the
CPUCTL_CPUID_COUNT
request with
level_type
set to 0.
| |
| CPUCTL_CPUID_COUNTcpuctl_cpuid_count_args_t, *args | |
Retrieve CPUID information.
Arguments are supplied in the following structure:
typedef struct {
int level; /* CPUID level */
int level_type; /* CPUID level type */
uint32_t data[4];
} cpuctl_cpuid_count_args_t;
The
level
field indicates the CPUID level to retrieve,
it is loaded into the
%eax
register before the CPUID instruction is executed,
The
level_type
field indicates the CPUID level type to retrieve,
it is loaded into the
%ecx
register.
The data field is used to store the received CPUID data. That is, data[0] contains the value of %eax register after the CPUID instruction is executed, data[1] is for %ebx, data[2] for %ecx, and data[3] for %edx. | |
| CPUCTL_UPDATE cpuctl_update_args_t *args | |
Update CPU firmware (microcode).
The structure is defined in
<sys/cpuctl.h>
as:
typedef struct {
void *data;
size_t size;
} cpuctl_update_args_t;
The data field should point to the firmware image of size size. | |
For additional information refer to cpuctl.h.
| /dev/cpuctl | |
| [ENXIO] | |
| The operation requested is not supported by the device (e.g., unsupported architecture or the CPU is disabled). | |
| [EINVAL] | |
| Incorrect request was supplied, or microcode image is not correct. | |
| [ENOMEM] | |
| No physical memory was available to complete the request. | |
| [EFAULT] | |
| The firmware image address points outside the process address space. | |
| CPUCTL (4) | June 20, 2014 |
| Main index | Section 4 | Options |
Please direct any comments about this manual page service to Ben Bullock. Privacy policy.
