svn commit: r215026 - in stable/8/sys: amd64/amd64 amd64/isa conf i386/bios i386/cpufreq i386/i386 i386/isa isa modules/bios/smbios modules/bios/vpd modules/cpufreq x86/bios x86/cpufreq x86/isa

Attilio Rao attilio at FreeBSD.org
Tue Nov 9 01:57:56 UTC 2010


Author: attilio
Date: Tue Nov  9 01:57:56 2010
New Revision: 215026
URL: http://svn.freebsd.org/changeset/base/215026

Log:
  MFC r204309, r204313 and r204319 by nyan:
  Introduce the x86 subtree for code shared between amd64, i386 and pc98.
  
  Differently from the HEAD version, the headers are not moved around,
  in order to avoid breaking the KPI but it can be eventually done once the
  core mechanism of r214629 is MFCed.
  
  MFCing this patch does allow for simpler MFCs handling on i386/amd64
  specific code.
  
  Sponsored by:   Sandvine Incorporated

Added:
  stable/8/sys/amd64/amd64/atpic_vector.S
     - copied unchanged from r214988, stable/8/sys/amd64/isa/atpic_vector.S
  stable/8/sys/i386/i386/atpic_vector.s
     - copied unchanged from r214988, stable/8/sys/i386/isa/atpic_vector.s
  stable/8/sys/x86/bios/
  stable/8/sys/x86/bios/smbios.c
     - copied unchanged from r214988, stable/8/sys/i386/bios/smbios.c
  stable/8/sys/x86/bios/vpd.c
     - copied unchanged from r214988, stable/8/sys/i386/bios/vpd.c
  stable/8/sys/x86/cpufreq/
  stable/8/sys/x86/cpufreq/est.c
     - copied unchanged from r214988, stable/8/sys/i386/cpufreq/est.c
  stable/8/sys/x86/cpufreq/hwpstate.c
     - copied unchanged from r214988, stable/8/sys/i386/cpufreq/hwpstate.c
  stable/8/sys/x86/cpufreq/p4tcc.c
     - copied unchanged from r214988, stable/8/sys/i386/cpufreq/p4tcc.c
  stable/8/sys/x86/cpufreq/powernow.c
     - copied unchanged from r214988, stable/8/sys/i386/cpufreq/powernow.c
  stable/8/sys/x86/cpufreq/smist.c
     - copied unchanged from r214988, stable/8/sys/i386/cpufreq/smist.c
  stable/8/sys/x86/isa/
  stable/8/sys/x86/isa/atpic.c
     - copied, changed from r214988, stable/8/sys/i386/isa/atpic.c
  stable/8/sys/x86/isa/atrtc.c
     - copied unchanged from r214988, stable/8/sys/isa/atrtc.c
  stable/8/sys/x86/isa/clock.c
     - copied, changed from r214988, stable/8/sys/i386/isa/clock.c
  stable/8/sys/x86/isa/elcr.c
     - copied unchanged from r214988, stable/8/sys/i386/isa/elcr.c
  stable/8/sys/x86/isa/isa.c
     - copied, changed from r214988, stable/8/sys/i386/isa/isa.c
  stable/8/sys/x86/isa/isa_dma.c
     - copied, changed from r214988, stable/8/sys/i386/isa/isa_dma.c
  stable/8/sys/x86/isa/nmi.c
     - copied unchanged from r214988, stable/8/sys/i386/isa/nmi.c
Deleted:
  stable/8/sys/amd64/isa/atpic.c
  stable/8/sys/amd64/isa/atpic_vector.S
  stable/8/sys/amd64/isa/clock.c
  stable/8/sys/amd64/isa/elcr.c
  stable/8/sys/amd64/isa/isa.c
  stable/8/sys/amd64/isa/isa_dma.c
  stable/8/sys/amd64/isa/nmi.c
  stable/8/sys/i386/bios/smbios.c
  stable/8/sys/i386/bios/vpd.c
  stable/8/sys/i386/cpufreq/
  stable/8/sys/i386/isa/atpic.c
  stable/8/sys/i386/isa/atpic_vector.s
  stable/8/sys/i386/isa/clock.c
  stable/8/sys/i386/isa/elcr.c
  stable/8/sys/i386/isa/isa.c
  stable/8/sys/i386/isa/isa_dma.c
  stable/8/sys/i386/isa/nmi.c
  stable/8/sys/isa/atrtc.c
Modified:
  stable/8/sys/amd64/amd64/exception.S
  stable/8/sys/conf/files.amd64
  stable/8/sys/conf/files.i386
  stable/8/sys/conf/files.pc98
  stable/8/sys/i386/i386/exception.s
  stable/8/sys/modules/bios/smbios/Makefile
  stable/8/sys/modules/bios/vpd/Makefile
  stable/8/sys/modules/cpufreq/Makefile
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/dev/xen/xenpci/   (props changed)

Copied: stable/8/sys/amd64/amd64/atpic_vector.S (from r214988, stable/8/sys/amd64/isa/atpic_vector.S)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/8/sys/amd64/amd64/atpic_vector.S	Tue Nov  9 01:57:56 2010	(r215026, copy of r214988, stable/8/sys/amd64/isa/atpic_vector.S)
@@ -0,0 +1,73 @@
+/*-
+ * Copyright (c) 1989, 1990 William F. Jolitz.
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	from: vector.s, 386BSD 0.1 unknown origin
+ * $FreeBSD$
+ */
+
+/*
+ * Interrupt entry points for external interrupts triggered by the 8259A
+ * master and slave interrupt controllers.
+ */
+
+#include <machine/asmacros.h>
+
+#include "assym.s"
+
+/*
+ * Macros for interrupt entry, call to handler, and exit.
+ */
+#define	INTR(irq_num, vec_name) \
+	.text ;								\
+	SUPERALIGN_TEXT ;						\
+IDTVEC(vec_name) ;							\
+	PUSH_FRAME ;							\
+	FAKE_MCOUNT(TF_RIP(%rsp)) ;					\
+	movq	%rsp, %rsi	;                                       \
+	movl	$irq_num, %edi; 	/* pass the IRQ */		\
+	call	atpic_handle_intr ;					\
+	MEXITCOUNT ;							\
+	jmp	doreti
+
+	INTR(0, atpic_intr0)
+	INTR(1, atpic_intr1)
+	INTR(2, atpic_intr2)
+	INTR(3, atpic_intr3)
+	INTR(4, atpic_intr4)
+	INTR(5, atpic_intr5)
+	INTR(6, atpic_intr6)
+	INTR(7, atpic_intr7)
+	INTR(8, atpic_intr8)
+	INTR(9, atpic_intr9)
+	INTR(10, atpic_intr10)
+	INTR(11, atpic_intr11)
+	INTR(12, atpic_intr12)
+	INTR(13, atpic_intr13)
+	INTR(14, atpic_intr14)
+	INTR(15, atpic_intr15)

Modified: stable/8/sys/amd64/amd64/exception.S
==============================================================================
--- stable/8/sys/amd64/amd64/exception.S	Tue Nov  9 01:52:09 2010	(r215025)
+++ stable/8/sys/amd64/amd64/exception.S	Tue Nov  9 01:57:56 2010	(r215026)
@@ -600,7 +600,7 @@ MCOUNT_LABEL(bintr)
 	.text
 	SUPERALIGN_TEXT
 
-#include <amd64/isa/atpic_vector.S>
+#include <amd64/amd64/atpic_vector.S>
 #endif
 
 	.text

Modified: stable/8/sys/conf/files.amd64
==============================================================================
--- stable/8/sys/conf/files.amd64	Tue Nov  9 01:52:09 2010	(r215025)
+++ stable/8/sys/conf/files.amd64	Tue Nov  9 01:57:56 2010	(r215026)
@@ -140,13 +140,6 @@ amd64/amd64/tsc.c		standard
 amd64/amd64/uio_machdep.c	standard
 amd64/amd64/uma_machdep.c	standard
 amd64/amd64/vm_machdep.c	standard
-amd64/isa/atpic.c		optional	atpic isa
-#amd64/isa/atpic_vector.S	optional	atpic isa
-amd64/isa/clock.c		standard
-amd64/isa/elcr.c		standard
-amd64/isa/isa.c			standard
-amd64/isa/isa_dma.c		standard
-amd64/isa/nmi.c			standard
 amd64/pci/pci_bus.c		optional	pci
 amd64/pci/pci_cfgreg.c		optional	pci
 crypto/blowfish/bf_enc.c	optional	crypto | ipsec 
@@ -239,7 +232,6 @@ dev/syscons/scvtb.c		optional	sc
 dev/syscons/teken/teken.c	optional sc
 dev/uart/uart_cpu_amd64.c	optional	uart
 dev/wpi/if_wpi.c		optional	wpi
-isa/atrtc.c			standard
 isa/syscons_isa.c		optional	sc
 isa/vga_isa.c			optional	vga
 kern/link_elf_obj.c		standard
@@ -299,12 +291,6 @@ compat/ndis/subr_ntoskrnl.c	optional	ndi
 compat/ndis/subr_pe.c		optional	ndisapi pci
 compat/ndis/subr_usbd.c		optional	ndisapi pci
 compat/ndis/winx64_wrap.S	optional	ndisapi pci
-i386/bios/smbios.c		optional	smbios
-i386/bios/vpd.c			optional	vpd
-i386/cpufreq/powernow.c		optional	cpufreq
-i386/cpufreq/est.c		optional	cpufreq
-i386/cpufreq/hwpstate.c		optional	cpufreq
-i386/cpufreq/p4tcc.c		optional	cpufreq
 #
 libkern/memmove.c		standard
 libkern/memset.c		standard
@@ -316,4 +302,17 @@ contrib/x86emu/x86emu.c		optional x86bio
 #
 # x86 shared code between IA32, AMD64 and PC98 architectures
 #
+x86/bios/smbios.c		optional	smbios
+x86/bios/vpd.c			optional	vpd
+x86/cpufreq/powernow.c		optional	cpufreq
+x86/cpufreq/est.c		optional	cpufreq
+x86/cpufreq/hwpstate.c		optional	cpufreq
+x86/cpufreq/p4tcc.c		optional	cpufreq
+x86/isa/atpic.c			optional	atpic isa
+x86/isa/atrtc.c			standard
+x86/isa/clock.c			standard
+x86/isa/elcr.c			standard
+x86/isa/isa.c			standard
+x86/isa/isa_dma.c		standard
+x86/isa/nmi.c			standard
 x86/pci/qpi.c			standard

Modified: stable/8/sys/conf/files.i386
==============================================================================
--- stable/8/sys/conf/files.i386	Tue Nov  9 01:52:09 2010	(r215025)
+++ stable/8/sys/conf/files.i386	Tue Nov  9 01:57:56 2010	(r215026)
@@ -246,13 +246,6 @@ i386/bios/apm.c			optional apm
 i386/bios/mca_machdep.c		optional mca
 i386/bios/smapi.c		optional smapi
 i386/bios/smapi_bios.S		optional smapi
-i386/bios/smbios.c		optional smbios
-i386/bios/vpd.c			optional vpd
-i386/cpufreq/est.c		optional cpufreq
-i386/cpufreq/hwpstate.c		optional cpufreq
-i386/cpufreq/p4tcc.c		optional cpufreq
-i386/cpufreq/powernow.c		optional cpufreq
-i386/cpufreq/smist.c		optional cpufreq
 #i386/i386/apic_vector.s		optional apic
 i386/i386/atomic.c		standard		\
 	compile-with	"${CC} -c ${CFLAGS} ${DEFINED_PROF:S/^$/-fomit-frame-pointer/} ${.IMPSRC}"
@@ -331,17 +324,10 @@ i386/ibcs2/ibcs2_util.c		optional ibcs2
 i386/ibcs2/ibcs2_xenix.c	optional ibcs2
 i386/ibcs2/ibcs2_xenix_sysent.c	optional ibcs2
 i386/ibcs2/imgact_coff.c	optional ibcs2
-i386/isa/atpic.c		optional atpic	
-#i386/isa/atpic_vector.s		standard
-i386/isa/clock.c		optional native
 i386/xen/clock.c		optional xen
 i386/xen/xen_clock_util.c	optional xen
 i386/xen/xen_rtc.c		optional xen
-i386/isa/elcr.c			standard
 i386/isa/elink.c		optional ep | ie
-i386/isa/isa.c			optional isa
-i386/isa/isa_dma.c		optional isa
-i386/isa/nmi.c			standard
 i386/isa/npx.c			optional npx
 i386/isa/pmtimer.c		optional pmtimer
 i386/isa/prof_machdep.c		optional profiling-routine
@@ -364,7 +350,6 @@ i386/svr4/svr4_locore.s		optional compat
 	warning "COMPAT_SVR4 is broken and should be avoided"
 i386/svr4/svr4_machdep.c	optional compat_svr4
 #
-isa/atrtc.c			optional atpic
 isa/syscons_isa.c		optional sc
 isa/vga_isa.c			optional vga
 kern/imgact_aout.c		optional compat_aout
@@ -391,4 +376,18 @@ contrib/x86emu/x86emu.c		optional x86bio
 #
 # x86 shared code between IA32, AMD64 and PC98 architectures
 #
+x86/bios/smbios.c		optional smbios
+x86/bios/vpd.c			optional vpd
+x86/cpufreq/est.c		optional cpufreq
+x86/cpufreq/hwpstate.c		optional cpufreq
+x86/cpufreq/p4tcc.c		optional cpufreq
+x86/cpufreq/powernow.c		optional cpufreq
+x86/cpufreq/smist.c		optional cpufreq
+x86/isa/atpic.c			optional atpic	
+x86/isa/atrtc.c			optional atpic
+x86/isa/clock.c			optional native
+x86/isa/elcr.c			standard
+x86/isa/isa.c			optional isa
+x86/isa/isa_dma.c		optional isa
+x86/isa/nmi.c			standard
 x86/pci/qpi.c			standard

Modified: stable/8/sys/conf/files.pc98
==============================================================================
--- stable/8/sys/conf/files.pc98	Tue Nov  9 01:52:09 2010	(r215025)
+++ stable/8/sys/conf/files.pc98	Tue Nov  9 01:57:56 2010	(r215026)
@@ -195,10 +195,7 @@ i386/ibcs2/ibcs2_util.c		optional ibcs2
 i386/ibcs2/ibcs2_xenix.c	optional ibcs2
 i386/ibcs2/ibcs2_xenix_sysent.c	optional ibcs2
 i386/ibcs2/imgact_coff.c	optional ibcs2
-i386/isa/atpic.c		optional atpic	
-#i386/isa/atpic_vector.s		standard
 i386/isa/elink.c		optional ep | ie
-i386/isa/isa.c			optional isa
 i386/isa/npx.c			optional npx
 i386/isa/pmtimer.c		optional pmtimer
 i386/isa/prof_machdep.c		optional profiling-routine
@@ -256,3 +253,8 @@ pc98/pc98/canbus.c		optional canbus
 pc98/pc98/canbus_if.m		optional canbus
 pc98/pc98/machdep.c		standard
 pc98/pc98/pc98_machdep.c	standard
+#
+# x86 shared code between IA32, AMD64 and PC98 architectures
+#
+x86/isa/atpic.c			optional atpic	
+x86/isa/isa.c			optional isa

Copied: stable/8/sys/i386/i386/atpic_vector.s (from r214988, stable/8/sys/i386/isa/atpic_vector.s)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/8/sys/i386/i386/atpic_vector.s	Tue Nov  9 01:57:56 2010	(r215026, copy of r214988, stable/8/sys/i386/isa/atpic_vector.s)
@@ -0,0 +1,78 @@
+/*-
+ * Copyright (c) 1989, 1990 William F. Jolitz.
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	from: vector.s, 386BSD 0.1 unknown origin
+ * $FreeBSD$
+ */
+
+/*
+ * Interrupt entry points for external interrupts triggered by the 8259A
+ * master and slave interrupt controllers.
+ */
+
+#include <machine/asmacros.h>
+
+#include "assym.s"
+
+/*
+ * Macros for interrupt entry, call to handler, and exit.
+ */
+#define	INTR(irq_num, vec_name) \
+	.text ;								\
+	SUPERALIGN_TEXT ;						\
+IDTVEC(vec_name) ;							\
+	PUSH_FRAME ;							\
+	SET_KERNEL_SREGS ;						\
+	cld ;								\
+;									\
+	FAKE_MCOUNT(TF_EIP(%esp)) ;					\
+	pushl	%esp		;                                       \
+	pushl	$irq_num; 	/* pass the IRQ */			\
+	call	atpic_handle_intr ;					\
+	addl	$8, %esp ;	/* discard the parameters */		\
+;									\
+	MEXITCOUNT ;							\
+	jmp	doreti
+
+	INTR(0, atpic_intr0)
+	INTR(1, atpic_intr1)
+	INTR(2, atpic_intr2)
+	INTR(3, atpic_intr3)
+	INTR(4, atpic_intr4)
+	INTR(5, atpic_intr5)
+	INTR(6, atpic_intr6)
+	INTR(7, atpic_intr7)
+	INTR(8, atpic_intr8)
+	INTR(9, atpic_intr9)
+	INTR(10, atpic_intr10)
+	INTR(11, atpic_intr11)
+	INTR(12, atpic_intr12)
+	INTR(13, atpic_intr13)
+	INTR(14, atpic_intr14)
+	INTR(15, atpic_intr15)

Modified: stable/8/sys/i386/i386/exception.s
==============================================================================
--- stable/8/sys/i386/i386/exception.s	Tue Nov  9 01:52:09 2010	(r215025)
+++ stable/8/sys/i386/i386/exception.s	Tue Nov  9 01:57:56 2010	(r215026)
@@ -297,7 +297,7 @@ ENTRY(fork_trampoline)
 	SUPERALIGN_TEXT
 MCOUNT_LABEL(bintr)
 
-#include <i386/isa/atpic_vector.s>
+#include <i386/i386/atpic_vector.s>
 
 #ifdef DEV_APIC
 	.data

Modified: stable/8/sys/modules/bios/smbios/Makefile
==============================================================================
--- stable/8/sys/modules/bios/smbios/Makefile	Tue Nov  9 01:52:09 2010	(r215025)
+++ stable/8/sys/modules/bios/smbios/Makefile	Tue Nov  9 01:57:56 2010	(r215026)
@@ -1,7 +1,7 @@
 # $FreeBSD$
 #
 
-.PATH:  ${.CURDIR}/../../../i386/bios
+.PATH:  ${.CURDIR}/../../../x86/bios
 
 KMOD=	smbios
 SRCS=	smbios.c \

Modified: stable/8/sys/modules/bios/vpd/Makefile
==============================================================================
--- stable/8/sys/modules/bios/vpd/Makefile	Tue Nov  9 01:52:09 2010	(r215025)
+++ stable/8/sys/modules/bios/vpd/Makefile	Tue Nov  9 01:57:56 2010	(r215026)
@@ -1,7 +1,7 @@
 # $FreeBSD$
 #
 
-.PATH:  ${.CURDIR}/../../../i386/bios
+.PATH:  ${.CURDIR}/../../../x86/bios
 
 KMOD=	vpd
 SRCS=	vpd.c \

Modified: stable/8/sys/modules/cpufreq/Makefile
==============================================================================
--- stable/8/sys/modules/cpufreq/Makefile	Tue Nov  9 01:52:09 2010	(r215025)
+++ stable/8/sys/modules/cpufreq/Makefile	Tue Nov  9 01:57:56 2010	(r215026)
@@ -8,7 +8,7 @@ SRCS=	ichss.c
 SRCS+=	bus_if.h cpufreq_if.h device_if.h pci_if.h
 
 .if ${MACHINE} == "i386" || ${MACHINE} == "amd64"
-.PATH:	${.CURDIR}/../../i386/cpufreq
+.PATH:	${.CURDIR}/../../x86/cpufreq
 
 SRCS+=	acpi_if.h opt_acpi.h
 SRCS+=	est.c hwpstate.c p4tcc.c powernow.c

Copied: stable/8/sys/x86/bios/smbios.c (from r214988, stable/8/sys/i386/bios/smbios.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/8/sys/x86/bios/smbios.c	Tue Nov  9 01:57:56 2010	(r215026, copy of r214988, stable/8/sys/i386/bios/smbios.c)
@@ -0,0 +1,277 @@
+/*-
+ * Copyright (c) 2003 Matthew N. Dodd <winter at jurai.net>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+
+#include <sys/module.h>
+#include <sys/bus.h>
+
+#include <machine/bus.h>
+#include <machine/resource.h>
+#include <sys/rman.h>
+
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/pmap.h>
+#include <machine/md_var.h>
+#include <machine/pc/bios.h>
+
+/*
+ * System Management BIOS Reference Specification, v2.4 Final
+ * http://www.dmtf.org/standards/published_documents/DSP0134.pdf
+ */
+
+/*
+ * SMBIOS Entry Point Structure
+ */
+struct smbios_eps {
+	u_int8_t	Anchor[4];		/* '_SM_' */
+	u_int8_t	Checksum;
+	u_int8_t	Length;
+
+	u_int8_t	SMBIOS_Major;
+	u_int8_t	SMBIOS_Minor;
+	u_int16_t	Max_Size;
+	u_int8_t	Revision;
+	u_int8_t	Formatted_Area[5];
+
+	u_int8_t	Intermediate_Anchor[5];	/* '_DMI_' */
+	u_int8_t	Intermediate_Checksum;
+
+	u_int16_t	Structure_Table_Length;
+	u_int32_t	Structure_Table_Address;
+	u_int16_t	Structure_Count;
+
+	u_int8_t	SMBIOS_BCD_Revision;
+} __packed;
+
+struct smbios_softc {
+	device_t		dev;
+	struct resource *	res;
+	int			rid;
+
+	struct smbios_eps *	eps;
+};
+
+#define	SMBIOS_START	0xf0000
+#define	SMBIOS_STEP	0x10
+#define	SMBIOS_OFF	0
+#define	SMBIOS_LEN	4
+#define	SMBIOS_SIG	"_SM_"
+
+#define	RES2EPS(res)	((struct smbios_eps *)rman_get_virtual(res))
+#define	ADDR2EPS(addr)  ((struct smbios_eps *)BIOS_PADDRTOVADDR(addr))
+
+static devclass_t	smbios_devclass;
+
+static void	smbios_identify	(driver_t *, device_t);
+static int	smbios_probe	(device_t);
+static int	smbios_attach	(device_t);
+static int	smbios_detach	(device_t);
+static int	smbios_modevent	(module_t, int, void *);
+
+static int	smbios_cksum	(struct smbios_eps *);
+
+static void
+smbios_identify (driver_t *driver, device_t parent)
+{
+	device_t child;
+	u_int32_t addr;
+	int length;
+	int rid;
+
+	if (!device_is_alive(parent))
+		return;
+
+	addr = bios_sigsearch(SMBIOS_START, SMBIOS_SIG, SMBIOS_LEN,
+			      SMBIOS_STEP, SMBIOS_OFF);
+	if (addr != 0) {
+		rid = 0;
+		length = ADDR2EPS(addr)->Length;
+
+		if (length != 0x1f) {
+			u_int8_t major, minor;
+
+			major = ADDR2EPS(addr)->SMBIOS_Major;
+			minor = ADDR2EPS(addr)->SMBIOS_Minor;
+
+			/* SMBIOS v2.1 implementation might use 0x1e. */
+			if (length == 0x1e && major == 2 && minor == 1)
+				length = 0x1f;
+			else
+				return;
+		}
+
+		child = BUS_ADD_CHILD(parent, 5, "smbios", -1);
+		device_set_driver(child, driver);
+		bus_set_resource(child, SYS_RES_MEMORY, rid, addr, length);
+		device_set_desc(child, "System Management BIOS");
+	}
+
+	return;
+}
+
+static int
+smbios_probe (device_t dev)
+{
+	struct resource *res;
+	int rid;
+	int error;
+
+	error = 0;
+	rid = 0;
+	res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
+	if (res == NULL) {
+		device_printf(dev, "Unable to allocate memory resource.\n");
+		error = ENOMEM;
+		goto bad;
+	}
+
+	if (smbios_cksum(RES2EPS(res))) {
+		device_printf(dev, "SMBIOS checksum failed.\n");
+		error = ENXIO;
+		goto bad;
+	}
+
+bad:
+	if (res)
+		bus_release_resource(dev, SYS_RES_MEMORY, rid, res);
+	return (error);
+}
+
+static int
+smbios_attach (device_t dev)
+{
+	struct smbios_softc *sc;
+	int error;
+
+	sc = device_get_softc(dev);
+	error = 0;
+
+	sc->dev = dev;
+	sc->rid = 0;
+	sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->rid,
+		RF_ACTIVE);
+	if (sc->res == NULL) {
+		device_printf(dev, "Unable to allocate memory resource.\n");
+		error = ENOMEM;
+		goto bad;
+	}
+	sc->eps = RES2EPS(sc->res);
+
+	device_printf(dev, "Version: %u.%u",
+		sc->eps->SMBIOS_Major, sc->eps->SMBIOS_Minor);
+	if (bcd2bin(sc->eps->SMBIOS_BCD_Revision))
+		printf(", BCD Revision: %u.%u",
+			bcd2bin(sc->eps->SMBIOS_BCD_Revision >> 4),
+			bcd2bin(sc->eps->SMBIOS_BCD_Revision & 0x0f));
+	printf("\n");
+
+	return (0);
+bad:
+	if (sc->res)
+		bus_release_resource(dev, SYS_RES_MEMORY, sc->rid, sc->res);
+	return (error);
+}
+
+static int
+smbios_detach (device_t dev)
+{
+	struct smbios_softc *sc;
+
+	sc = device_get_softc(dev);
+
+	if (sc->res)
+		bus_release_resource(dev, SYS_RES_MEMORY, sc->rid, sc->res);
+
+	return (0);
+}
+
+static int
+smbios_modevent (mod, what, arg)
+        module_t        mod;
+        int             what;
+        void *          arg;
+{
+	device_t *	devs;
+	int		count;
+	int		i;
+
+	switch (what) {
+	case MOD_LOAD:
+		break;
+	case MOD_UNLOAD:
+		devclass_get_devices(smbios_devclass, &devs, &count);
+		for (i = 0; i < count; i++) {
+			device_delete_child(device_get_parent(devs[i]), devs[i]);
+		}
+		break;
+	default:
+		break;
+	}
+
+	return (0);
+}
+
+static device_method_t smbios_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_identify,      smbios_identify),
+	DEVMETHOD(device_probe,         smbios_probe),
+	DEVMETHOD(device_attach,        smbios_attach),
+	DEVMETHOD(device_detach,        smbios_detach),
+	{ 0, 0 }
+};
+
+static driver_t smbios_driver = {
+	"smbios",
+	smbios_methods,
+	sizeof(struct smbios_softc),
+};
+
+DRIVER_MODULE(smbios, nexus, smbios_driver, smbios_devclass, smbios_modevent, 0);
+MODULE_VERSION(smbios, 1);
+
+static int
+smbios_cksum (struct smbios_eps *e)
+{
+	u_int8_t *ptr;
+	u_int8_t cksum;
+	int i;
+
+	ptr = (u_int8_t *)e;
+	cksum = 0;
+	for (i = 0; i < e->Length; i++) {
+		cksum += ptr[i];
+	}
+
+	return (cksum);
+}

Copied: stable/8/sys/x86/bios/vpd.c (from r214988, stable/8/sys/i386/bios/vpd.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/8/sys/x86/bios/vpd.c	Tue Nov  9 01:57:56 2010	(r215026, copy of r214988, stable/8/sys/i386/bios/vpd.c)
@@ -0,0 +1,297 @@
+/*-
+ * Copyright (c) 2003 Matthew N. Dodd <winter at jurai.net>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*
+ * VPD decoder for IBM systems (Thinkpads)
+ * http://www-1.ibm.com/support/docview.wss?uid=psg1MIGR-45120
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+#include <sys/sysctl.h>
+
+#include <sys/module.h>
+#include <sys/bus.h>
+
+#include <machine/bus.h>
+#include <machine/resource.h>
+#include <sys/rman.h>
+
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/pmap.h>
+#include <machine/md_var.h>
+#include <machine/pc/bios.h>
+
+/*
+ * Vital Product Data
+ */
+struct vpd {
+	u_int16_t	Header;			/* 0x55AA */
+	u_int8_t	Signature[3];		/* Always 'VPD' */
+	u_int8_t	Length;			/* Sructure Length */
+
+	u_int8_t	Reserved[7];		/* Reserved */
+
+	u_int8_t	BuildID[9];		/* BIOS Build ID */
+	u_int8_t	BoxSerial[7];		/* Box Serial Number */
+	u_int8_t	PlanarSerial[11];	/* Motherboard Serial Number */
+	u_int8_t	MachType[7];		/* Machine Type/Model */
+	u_int8_t	Checksum;		/* Checksum */
+} __packed;
+
+struct vpd_softc {
+	device_t		dev;
+	struct resource *	res;
+	int			rid;
+
+	struct vpd *		vpd;
+
+	struct sysctl_ctx_list  ctx;
+
+	char		BuildID[10];
+	char		BoxSerial[8];
+	char		PlanarSerial[12];
+	char		MachineType[5];
+	char		MachineModel[4];
+};
+
+#define	VPD_START	0xf0000
+#define	VPD_STEP	0x10
+#define	VPD_OFF		2
+#define	VPD_LEN		3
+#define	VPD_SIG		"VPD"
+
+#define	RES2VPD(res)	((struct vpd *)rman_get_virtual(res))
+#define	ADDR2VPD(addr)	((struct vpd *)BIOS_PADDRTOVADDR(addr))
+
+static devclass_t vpd_devclass;
+
+static void	vpd_identify	(driver_t *, device_t);
+static int	vpd_probe	(device_t);
+static int	vpd_attach	(device_t);
+static int	vpd_detach	(device_t);
+static int	vpd_modevent	(module_t, int, void *);
+
+static int	vpd_cksum	(struct vpd *);
+
+SYSCTL_NODE(_hw, OID_AUTO, vpd, CTLFLAG_RD, NULL, NULL);
+SYSCTL_NODE(_hw_vpd, OID_AUTO, machine, CTLFLAG_RD, NULL, NULL);
+SYSCTL_NODE(_hw_vpd_machine, OID_AUTO, type, CTLFLAG_RD, NULL, NULL);
+SYSCTL_NODE(_hw_vpd_machine, OID_AUTO, model, CTLFLAG_RD, NULL, NULL);
+SYSCTL_NODE(_hw_vpd, OID_AUTO, build_id, CTLFLAG_RD, NULL, NULL);
+SYSCTL_NODE(_hw_vpd, OID_AUTO, serial, CTLFLAG_RD, NULL, NULL);
+SYSCTL_NODE(_hw_vpd_serial, OID_AUTO, box, CTLFLAG_RD, NULL, NULL);
+SYSCTL_NODE(_hw_vpd_serial, OID_AUTO, planar, CTLFLAG_RD, NULL, NULL);
+
+static void
+vpd_identify (driver_t *driver, device_t parent)
+{
+	device_t child;
+	u_int32_t addr;
+	int length;
+	int rid;
+
+	if (!device_is_alive(parent))
+		return;
+
+	addr = bios_sigsearch(VPD_START, VPD_SIG, VPD_LEN, VPD_STEP, VPD_OFF);
+	if (addr != 0) {
+		rid = 0;
+		length = ADDR2VPD(addr)->Length;
+
+		child = BUS_ADD_CHILD(parent, 5, "vpd", -1);
+		device_set_driver(child, driver);
+		bus_set_resource(child, SYS_RES_MEMORY, rid, addr, length);
+		device_set_desc(child, "Vital Product Data Area");
+	}
+		
+	return;
+}
+
+static int
+vpd_probe (device_t dev)
+{
+	struct resource *res;
+	int rid;
+	int error;
+
+	error = 0;
+	rid = 0;
+	res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
+	if (res == NULL) {
+		device_printf(dev, "Unable to allocate memory resource.\n");
+		error = ENOMEM;
+		goto bad;
+	}
+
+	if (vpd_cksum(RES2VPD(res)))
+		device_printf(dev, "VPD checksum failed.  BIOS update may be required.\n");
+
+bad:
+	if (res)
+		bus_release_resource(dev, SYS_RES_MEMORY, rid, res);
+	return (error);
+}
+
+static int
+vpd_attach (device_t dev)
+{
+	struct vpd_softc *sc;
+	char unit[4];
+	int error;
+
+	sc = device_get_softc(dev);
+	error = 0;
+
+	sc->dev = dev;
+	sc->rid = 0;
+	sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->rid,
+		RF_ACTIVE);
+	if (sc->res == NULL) {
+		device_printf(dev, "Unable to allocate memory resource.\n");
+		error = ENOMEM;
+		goto bad;
+	}
+	sc->vpd = RES2VPD(sc->res);
+
+	snprintf(unit, sizeof(unit), "%d", device_get_unit(sc->dev));
+	snprintf(sc->MachineType, 5, "%.4s", sc->vpd->MachType);
+	snprintf(sc->MachineModel, 4, "%.3s", sc->vpd->MachType+4);
+	snprintf(sc->BuildID, 10, "%.9s", sc->vpd->BuildID);
+	snprintf(sc->BoxSerial, 8, "%.7s", sc->vpd->BoxSerial);
+	snprintf(sc->PlanarSerial, 12, "%.11s", sc->vpd->PlanarSerial);
+
+	sysctl_ctx_init(&sc->ctx);
+	SYSCTL_ADD_STRING(&sc->ctx,
+		SYSCTL_STATIC_CHILDREN(_hw_vpd_machine_type), OID_AUTO,
+		unit, CTLFLAG_RD|CTLFLAG_DYN, sc->MachineType, 0, NULL);
+	SYSCTL_ADD_STRING(&sc->ctx,
+		SYSCTL_STATIC_CHILDREN(_hw_vpd_machine_model), OID_AUTO,
+		unit, CTLFLAG_RD|CTLFLAG_DYN, sc->MachineModel, 0, NULL);
+	SYSCTL_ADD_STRING(&sc->ctx,
+		SYSCTL_STATIC_CHILDREN(_hw_vpd_build_id), OID_AUTO,
+		unit, CTLFLAG_RD|CTLFLAG_DYN, sc->BuildID, 0, NULL);
+	SYSCTL_ADD_STRING(&sc->ctx,
+		SYSCTL_STATIC_CHILDREN(_hw_vpd_serial_box), OID_AUTO,
+		unit, CTLFLAG_RD|CTLFLAG_DYN, sc->BoxSerial, 0, NULL);
+	SYSCTL_ADD_STRING(&sc->ctx,
+		SYSCTL_STATIC_CHILDREN(_hw_vpd_serial_planar), OID_AUTO,
+		unit, CTLFLAG_RD|CTLFLAG_DYN, sc->PlanarSerial, 0, NULL);
+
+	device_printf(dev, "Machine Type: %.4s, Model: %.3s, Build ID: %.9s\n",
+		sc->MachineType, sc->MachineModel, sc->BuildID);
+	device_printf(dev, "Box Serial: %.7s, Planar Serial: %.11s\n",
+		sc->BoxSerial, sc->PlanarSerial);
+		
+	return (0);
+bad:
+	if (sc->res)
+		bus_release_resource(dev, SYS_RES_MEMORY, sc->rid, sc->res);
+	return (error);
+}
+
+static int
+vpd_detach (device_t dev)
+{
+	struct vpd_softc *sc;
+
+	sc = device_get_softc(dev);
+
+	if (sc->res)
+		bus_release_resource(dev, SYS_RES_MEMORY, sc->rid, sc->res);
+
+	sysctl_ctx_free(&sc->ctx);
+
+	return (0);
+}
+
+static int
+vpd_modevent (mod, what, arg)
+        module_t        mod;
+        int             what;
+        void *          arg;
+{
+	device_t *	devs;
+	int		count;
+	int		i;
+
+	switch (what) {
+	case MOD_LOAD:
+		break;
+	case MOD_UNLOAD:
+		devclass_get_devices(vpd_devclass, &devs, &count);
+		for (i = 0; i < count; i++) {
+			device_delete_child(device_get_parent(devs[i]), devs[i]);
+		}
+		break;
+	default:
+		break;
+	}
+
+	return (0);
+}
+
+static device_method_t vpd_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_identify,      vpd_identify),
+	DEVMETHOD(device_probe,         vpd_probe),
+	DEVMETHOD(device_attach,        vpd_attach),
+	DEVMETHOD(device_detach,        vpd_detach),
+	{ 0, 0 }
+};
+
+static driver_t vpd_driver = {
+	"vpd",
+	vpd_methods,
+	sizeof(struct vpd_softc),
+};
+
+DRIVER_MODULE(vpd, nexus, vpd_driver, vpd_devclass, vpd_modevent, 0);
+MODULE_VERSION(vpd, 1);
+
+/*
+ * Perform a checksum over the VPD structure, starting with
+ * the BuildID.  (Jean Delvare <khali at linux-fr.org>)
+ */
+static int
+vpd_cksum (struct vpd *v)
+{
+	u_int8_t *ptr;
+	u_int8_t cksum;
+	int i;
+
+	ptr = (u_int8_t *)v;
+	cksum = 0;
+	for (i = offsetof(struct vpd, BuildID); i < v->Length ; i++)
+		cksum += ptr[i];
+	return (cksum);
+}

Copied: stable/8/sys/x86/cpufreq/est.c (from r214988, stable/8/sys/i386/cpufreq/est.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ stable/8/sys/x86/cpufreq/est.c	Tue Nov  9 01:57:56 2010	(r215026, copy of r214988, stable/8/sys/i386/cpufreq/est.c)
@@ -0,0 +1,1401 @@
+/*-
+ * Copyright (c) 2004 Colin Percival
+ * Copyright (c) 2005 Nate Lawson
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted providing that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR``AS IS'' AND ANY EXPRESS OR 
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 
+ * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/cpu.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+#include <sys/smp.h>
+#include <sys/systm.h>
+
+#include "cpufreq_if.h"
+#include <machine/clock.h>
+#include <machine/cputypes.h>
+#include <machine/md_var.h>
+#include <machine/specialreg.h>
+
+#include <contrib/dev/acpica/include/acpi.h>
+
+#include <dev/acpica/acpivar.h>
+#include "acpi_if.h"
+
+/* Status/control registers (from the IA-32 System Programming Guide). */
+#define MSR_PERF_STATUS		0x198
+#define MSR_PERF_CTL		0x199
+
+/* Register and bit for enabling SpeedStep. */
+#define MSR_MISC_ENABLE		0x1a0
+#define MSR_SS_ENABLE		(1<<16)
+
+/* Frequency and MSR control values. */
+typedef struct {
+	uint16_t	freq;
+	uint16_t	volts;
+	uint16_t	id16;
+	int		power;
+} freq_info;
+
+/* Identifying characteristics of a processor and supported frequencies. */

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-all mailing list