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 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_COUNT cpuctl_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 re-
			   trieve, 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	14.3			 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+14.3-RELEASE+and+Ports>

home | help