freebsd-dev/sys/amd64/include
Stanislav Sedov e085f869d5 - Add cpuctl(4) pseudo-device driver to provide access to some low-level
features of CPUs like reading/writing machine-specific registers,
  retrieving cpuid data, and updating microcode.
- Add cpucontrol(8) utility, that provides userland access to
  the features of cpuctl(4).
- Add subsequent manpages.

The cpuctl(4) device operates as follows. The pseudo-device node cpuctlX
is created for each cpu present in the systems. The pseudo-device minor
number corresponds to the cpu number in the system. The cpuctl(4) pseudo-
device allows a number of ioctl to be preformed, namely RDMSR/WRMSR/CPUID
and UPDATE. The first pair alows the caller to read/write machine-specific
registers from the correspondent CPU. cpuid data could be retrieved using
the CPUID call, and microcode updates are applied via UPDATE.

The permissions are inforced based on the pseudo-device file permissions.
RDMSR/CPUID will be allowed when the caller has read access to the device
node, while WRMSR/UPDATE will be granted only when the node is opened
for writing. There're also a number of priv(9) checks.

The cpucontrol(8) utility is intened to provide userland access to
the cpuctl(4) device features. The utility also allows one to apply
cpu microcode updates.

Currently only Intel and AMD cpus are supported and were tested.

Approved by:	kib
Reviewed by:	rpaulo, cokane, Peter Jeremy
MFC after:	1 month
2008-08-08 16:26:53 +00:00
..
pc - Add constants for the different memory types in the SMAP table. 2007-10-28 21:23:49 +00:00
_bus.h Break out the definition of bus_space_{tag,handle}_t and a few other types 2005-04-18 21:45:34 +00:00
_inttypes.h
_limits.h Move MINSIGSTKSZ from <machine/signal.h> to <machine/_limits.h> and rename 2005-08-20 16:44:41 +00:00
_stdint.h
_types.h Translate from the i386. All FP constants and operations are evaluated 2008-01-17 13:12:46 +00:00
acpica_machdep.h Catch up with ACPI-CA 20070320 import. 2007-03-22 18:16:43 +00:00
apicreg.h JumboMFi386: use bitmapped IPI handler. Update elcr and default mptable 2005-01-21 06:01:20 +00:00
apicvar.h Handle CPUs with APIC IDs higher than 32 (at least one IBM server uses 2007-05-08 22:01:04 +00:00
asm.h Define an END() macro for use in i386 and amd64 assembly code, akin 2007-08-22 04:26:07 +00:00
asmacros.h Define an END() macro for use in i386 and amd64 assembly code, akin 2007-08-22 04:26:07 +00:00
atomic.h Implement atomic_fetchadd_long() for all architectures and document it. 2008-03-16 21:20:50 +00:00
bus_dma.h Fix $FreeBSD$. 2005-07-22 04:03:25 +00:00
bus.h Merge/sync with i386: various cosmetic tweaks 2006-03-14 00:01:56 +00:00
clock.h Now that all platforms use genclock, shuffle things around slightly 2008-04-22 19:38:30 +00:00
cpu.h Clean out sysctl machdep.* related defines. 2006-05-11 17:29:25 +00:00
cpufunc.h - Add cpuctl(4) pseudo-device driver to provide access to some low-level 2008-08-08 16:26:53 +00:00
cputypes.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
db_machdep.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
elf.h PR: 2006-10-04 21:37:10 +00:00
endian.h Match i386 rev 1.38 with __cplusplus support 2005-03-11 21:46:01 +00:00
exec.h Use a common multi-inclusion protection, and add such a 2005-02-19 21:16:48 +00:00
float.h Translate from the i386. All FP constants and operations are evaluated 2008-01-17 13:12:46 +00:00
floatingpoint.h The file machine/ieeefp.h needs sys/cdefs.h on amd64 and i386 after my 2005-04-02 17:31:42 +00:00
fpu.h
frame.h Tweak how the MD code calls the fooclock() methods some. Instead of 2005-12-22 22:16:09 +00:00
gdb_machdep.h Change GDB_BUFSZ to be large enough to hold a register dump where each 2007-02-05 21:48:32 +00:00
ieeefp.h Fix fpset*() to not trap if there is a currently unmasked exception. 2008-01-11 17:11:32 +00:00
in_cksum.h Remove diffs to i386 version that came in via the compiler support ifdefs. 2005-03-11 22:16:09 +00:00
intr_machdep.h Add preliminary support for binding interrupts to CPUs: 2008-03-14 19:41:48 +00:00
iodev.h Remove the unused major/minor numbers from iodev and memdev. 2008-06-25 07:45:31 +00:00
kdb.h Add kdb_cpu_sync_icache(), intended to synchronize instruction 2007-06-09 21:55:17 +00:00
legacyvar.h Make the PCI code aware of PCI domains (aka PCI segments) so we can 2007-09-30 11:05:18 +00:00
limits.h netchild's mega-patch to isolate compiler dependencies into a central 2005-03-02 21:33:29 +00:00
md_var.h Remove extern struct pcpu __pcpu[]; from the header file and 2007-05-19 05:03:59 +00:00
memdev.h Remove the unused major/minor numbers from iodev and memdev. 2008-06-25 07:45:31 +00:00
metadata.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
minidump.h Introduce minidumps. Full physical memory crash dumps are still available 2006-04-21 04:24:50 +00:00
mp_watchdog.h
mptable.h guard function decls with _KERNEL so user code can include this file 2006-03-01 05:59:56 +00:00
mutex.h Move clock_lock prototype into <machine/clock.h>, where it is more 2006-05-19 18:53:50 +00:00
nexusvar.h Rework how the nexus(4) device works on x86 to better handle the idea of 2008-03-13 20:39:04 +00:00
param.h Enhance pmap_change_attr() with the ability to demote 1GB page mappings. 2008-08-01 04:55:38 +00:00
pcb.h Bring back the save/restore of the %ds, %es, %fs and %gs registers for 2008-07-30 11:30:55 +00:00
pci_cfgreg.h Adjust the code to probe for the PCI config mechanism to use. 2007-11-28 22:20:08 +00:00
pcpu.h - Add an integer argument to idle to indicate how likely we are to wake 2008-04-25 05:18:50 +00:00
pmap.h Make pmap_kenter_attr() static. 2008-08-04 08:04:09 +00:00
pmc_mdep.h Make preparations for increasing the size of the kernel virtual 2008-06-20 05:22:09 +00:00
ppireg.h - Move timerreg.h to <arch>/include and split i8253 specific defines into 2005-05-14 09:10:02 +00:00
proc.h Move GET_STACK_USAGE from MI header to i386/amd64 MD ones. 2008-01-31 08:24:27 +00:00
profile.h In the userland .mcount(): 2006-10-28 13:12:06 +00:00
psl.h
ptrace.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
reg.h Add support for 8 byte hardware watches in long mode. Kernel hardware 2006-11-17 20:27:01 +00:00
reloc.h
resource.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
runq.h Begin all license/copyright comments with /*- 2005-01-05 20:17:21 +00:00
segments.h MFP4: Linux set_thread_area syscall (aka TLS) support for amd64. 2007-03-30 00:06:21 +00:00
setjmp.h Remove 3rd clause, renumber, ok per email 2007-01-12 07:26:21 +00:00
sf_buf.h MFi386: Update alc's copyright notice 2005-02-28 23:38:15 +00:00
sigframe.h
signal.h Move MINSIGSTKSZ from <machine/signal.h> to <machine/_limits.h> and rename 2005-08-20 16:44:41 +00:00
smp.h - Remove the old smp cpu topology specification with a new, more flexible 2008-03-02 07:58:42 +00:00
specialreg.h - Add cpuctl(4) pseudo-device driver to provide access to some low-level 2008-08-08 16:26:53 +00:00
stack.h Make preparations for increasing the size of the kernel virtual 2008-06-20 05:22:09 +00:00
stdarg.h Use __builtin_va_start instead of __builtin_stdarg_start. GCC4 obsoletes 2006-09-21 01:37:02 +00:00
sysarch.h Implement 32-bit compatable fsbase/gsbase methods so that we can run 2005-04-14 16:57:58 +00:00
timerreg.h The "free-lance" timer in the i8254 is only used for the speaker 2008-03-26 20:09:21 +00:00
trap.h MFi386: The SIGFPE macros were moved to signal.h (FPE_INTOVF etc) 2006-03-14 00:01:22 +00:00
tss.h Show that I can actually count. 2005-04-15 18:39:31 +00:00
ucontext.h
varargs.h Remove diffs to i386 version that came in via the compiler support ifdefs. 2005-03-11 22:16:09 +00:00
vmparam.h Eliminate pmap_growkernel()'s dependence on create_pagetables() preallocating 2008-07-08 22:59:17 +00:00