From owner-svn-src-stable@FreeBSD.ORG Tue Nov 9 01:57:56 2010 Return-Path: Delivered-To: svn-src-stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 90600106566C; Tue, 9 Nov 2010 01:57:56 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 79A3A8FC12; Tue, 9 Nov 2010 01:57:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id oA91vu7N071645; Tue, 9 Nov 2010 01:57:56 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id oA91vuux071630; Tue, 9 Nov 2010 01:57:56 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201011090157.oA91vuux071630@svn.freebsd.org> From: Attilio Rao Date: Tue, 9 Nov 2010 01:57:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org X-SVN-Group: stable-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: 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 X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Nov 2010 01:57:56 -0000 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 + +#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 +#include #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 + +#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 +#include #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 + * 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 +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +/* + * 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 + * 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 +__FBSDID("$FreeBSD$"); + +/* + * VPD decoder for IBM systems (Thinkpads) + * http://www-1.ibm.com/support/docview.wss?uid=psg1MIGR-45120 + */ + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include + +/* + * 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 ) + */ +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 +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cpufreq_if.h" +#include +#include +#include +#include + +#include + +#include +#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 ***