Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
CPUCTL(4)		    Kernel Interfaces Manual		     CPUCTL(4)

NAME
       cpuctl -- cpuctl	pseudo device

SYNOPSIS
       To  compile  this  driver into the kernel, place	the following lines in
       your kernel configuration file:

	     device cpuctl

       Alternatively, to load the driver as a module at	boot time,  place  the
       following in loader.conf(5):

	     cpuctl_load="YES"

DESCRIPTION
       The  special  device  /dev/cpuctl presents interface to the system CPU.
       It provides functionality to retrieve CPUID information,	read/write ma-
       chine specific registers	(MSR) and perform CPU firmware updates.

       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.

IOCTL INTERFACE
       All of the supported operations are invoked using the  ioctl(2)	system
       call.  Currently, the following ioctls are defined:

       CPUCTL_RDMSR cpuctl_msr_args_t *args

       CPUCTL_WRMSR cpuctl_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_MSRSBIT cpuctl_msr_args_t	*args

       CPUCTL_MSRCBIT cpuctl_msr_args_t	*args
	       Set/clear MSR bits according to the  mask  given	 in  the  data
	       field.

       CPUCTL_CPUID cpuctl_cpuid_args_t	*args
	       Retrieve	CPUID information.  Arguments are supplied in the fol-
	       lowing 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_COUNT cpuctl_cpuid_count_args_t *args
	       Retrieve	CPUID information.  Arguments are supplied in the fol-
	       lowing 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.

FILES
       /dev/cpuctl

ERRORS
       [ENXIO]		  The  operation requested is not supported by the de-
			  vice (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 re-
			  quest.

       [EFAULT]		  The  firmware	 image	address	 points	 outside   the
			  process address space.

SEE ALSO
       hwpmc(4), cpucontrol(8)

HISTORY
       The cpuctl driver first appeared	in FreeBSD 7.2.

AUTHORS
       The  cpuctl module and this manual page were written by Stanislav Sedov
       <stas@FreeBSD.org>.

BUGS
       Yes, probably, report if	any.

FreeBSD	ports 15.1		 June 20, 2014			     CPUCTL(4)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=cpuctl&sektion=4&manpath=FreeBSD+15.1-RELEASE+and+Ports>

home | help