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-stable
mailing list