From owner-svn-src-head@FreeBSD.ORG Thu Feb 25 14:13:40 2010 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 71A861065679; Thu, 25 Feb 2010 14:13:40 +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 5C27F8FC16; Thu, 25 Feb 2010 14:13:40 +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 o1PEDebk033611; Thu, 25 Feb 2010 14:13:40 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o1PEDdKV033584; Thu, 25 Feb 2010 14:13:39 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201002251413.o1PEDdKV033584@svn.freebsd.org> From: Attilio Rao Date: Thu, 25 Feb 2010 14:13:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r204309 - in head/sys: amd64/amd64 amd64/isa conf i386/bios i386/cpufreq i386/i386 i386/isa i386/xen isa modules/bios/smbios modules/bios/vpd modules/cpufreq pc98/pc98 x86 x86/bios x86/... X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Feb 2010 14:13:40 -0000 Author: attilio Date: Thu Feb 25 14:13:39 2010 New Revision: 204309 URL: http://svn.freebsd.org/changeset/base/204309 Log: Introduce the new kernel sub-tree x86 which should contain all the code shared and generalized between our current amd64, i386 and pc98. This is just an initial step that should lead to a more complete effort. For the moment, a very simple porting of cpufreq modules, BIOS calls and the whole MD specific ISA bus part is added to the sub-tree but ideally a lot of code might be added and more shared support should grow. Sponsored by: Sandvine Incorporated Reviewed by: emaste, kib, jhb, imp Discussed on: arch MFC: 3 weeks Added: head/sys/amd64/amd64/atpic_vector.S - copied unchanged from r203846, head/sys/amd64/isa/atpic_vector.S head/sys/i386/i386/atpic_vector.s - copied unchanged from r203846, head/sys/i386/isa/atpic_vector.s head/sys/x86/ head/sys/x86/bios/ - copied from r203846, head/sys/i386/bios/ head/sys/x86/cpufreq/ - copied from r203846, head/sys/i386/cpufreq/ head/sys/x86/isa/ head/sys/x86/isa/atpic.c - copied, changed from r203846, head/sys/i386/isa/atpic.c head/sys/x86/isa/atrtc.c - copied unchanged from r203846, head/sys/isa/atrtc.c head/sys/x86/isa/clock.c - copied, changed from r203846, head/sys/i386/isa/clock.c head/sys/x86/isa/elcr.c - copied unchanged from r203846, head/sys/i386/isa/elcr.c head/sys/x86/isa/icu.h - copied, changed from r203846, head/sys/i386/isa/icu.h head/sys/x86/isa/isa.c - copied, changed from r203846, head/sys/i386/isa/isa.c head/sys/x86/isa/isa.h - copied, changed from r203846, head/sys/i386/isa/isa.h head/sys/x86/isa/isa_dma.c - copied, changed from r203846, head/sys/i386/isa/isa_dma.c head/sys/x86/isa/nmi.c - copied unchanged from r203846, head/sys/i386/isa/nmi.c head/sys/x86/isa/orm.c - copied unchanged from r203846, head/sys/isa/orm.c Deleted: head/sys/amd64/isa/ head/sys/i386/bios/smbios.c head/sys/i386/bios/vpd.c head/sys/i386/cpufreq/ head/sys/i386/isa/atpic.c head/sys/i386/isa/atpic_vector.s head/sys/i386/isa/clock.c head/sys/i386/isa/elcr.c head/sys/i386/isa/icu.h head/sys/i386/isa/isa.c head/sys/i386/isa/isa.h head/sys/i386/isa/isa_dma.c head/sys/i386/isa/nmi.c head/sys/isa/atrtc.c head/sys/isa/orm.c head/sys/x86/bios/apm.c head/sys/x86/bios/apm.h head/sys/x86/bios/mca_machdep.c head/sys/x86/bios/mca_machdep.h head/sys/x86/bios/smapi.c head/sys/x86/bios/smapi_bios.S Modified: head/sys/amd64/amd64/exception.S head/sys/amd64/amd64/identcpu.c head/sys/amd64/amd64/intr_machdep.c head/sys/amd64/amd64/machdep.c head/sys/amd64/amd64/nexus.c head/sys/amd64/amd64/vm_machdep.c head/sys/conf/files.amd64 head/sys/conf/files.i386 head/sys/conf/files.pc98 head/sys/i386/i386/exception.s head/sys/i386/i386/machdep.c head/sys/i386/i386/nexus.c head/sys/i386/i386/vm_machdep.c head/sys/i386/xen/clock.c head/sys/modules/bios/smbios/Makefile head/sys/modules/bios/vpd/Makefile head/sys/modules/cpufreq/Makefile head/sys/pc98/pc98/machdep.c Copied: head/sys/amd64/amd64/atpic_vector.S (from r203846, head/sys/amd64/isa/atpic_vector.S) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/amd64/amd64/atpic_vector.S Thu Feb 25 14:13:39 2010 (r204309, copy of r203846, head/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: head/sys/amd64/amd64/exception.S ============================================================================== --- head/sys/amd64/amd64/exception.S Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/amd64/amd64/exception.S Thu Feb 25 14:13:39 2010 (r204309) @@ -595,7 +595,7 @@ MCOUNT_LABEL(bintr) .text SUPERALIGN_TEXT -#include +#include #endif .text Modified: head/sys/amd64/amd64/identcpu.c ============================================================================== --- head/sys/amd64/amd64/identcpu.c Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/amd64/amd64/identcpu.c Thu Feb 25 14:13:39 2010 (r204309) @@ -61,7 +61,7 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include /* XXX - should be in header file: */ void printcpuinfo(void); Modified: head/sys/amd64/amd64/intr_machdep.c ============================================================================== --- head/sys/amd64/amd64/intr_machdep.c Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/amd64/amd64/intr_machdep.c Thu Feb 25 14:13:39 2010 (r204309) @@ -62,8 +62,8 @@ #include #include #include -#include -#include +#include +#include #endif #define MAX_STRAY_LOG 5 Modified: head/sys/amd64/amd64/machdep.c ============================================================================== --- head/sys/amd64/amd64/machdep.c Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/amd64/amd64/machdep.c Thu Feb 25 14:13:39 2010 (r204309) @@ -128,7 +128,7 @@ __FBSDID("$FreeBSD$"); #endif #ifdef DEV_ATPIC -#include +#include #else #include #endif Modified: head/sys/amd64/amd64/nexus.c ============================================================================== --- head/sys/amd64/amd64/nexus.c Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/amd64/amd64/nexus.c Thu Feb 25 14:13:39 2010 (r204309) @@ -69,7 +69,7 @@ __FBSDID("$FreeBSD$"); #ifdef DEV_ISA #include -#include +#include #endif #include Modified: head/sys/amd64/amd64/vm_machdep.c ============================================================================== --- head/sys/amd64/amd64/vm_machdep.c Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/amd64/amd64/vm_machdep.c Thu Feb 25 14:13:39 2010 (r204309) @@ -80,7 +80,7 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include static void cpu_reset_real(void); #ifdef SMP Modified: head/sys/conf/files.amd64 ============================================================================== --- head/sys/conf/files.amd64 Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/conf/files.amd64 Thu Feb 25 14:13:39 2010 (r204309) @@ -131,13 +131,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 @@ -228,8 +221,6 @@ dev/syscons/scvgarndr.c optional sc vga dev/syscons/scvtb.c optional sc dev/uart/uart_cpu_amd64.c optional uart dev/wpi/if_wpi.c optional wpi -isa/atrtc.c standard -isa/orm.c optional isa isa/syscons_isa.c optional sc isa/vga_isa.c optional vga kern/link_elf_obj.c standard @@ -289,12 +280,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 @@ -303,3 +288,20 @@ libkern/memset.c standard # compat/x86bios/x86bios.c optional x86bios | atkbd | dpms | vesa contrib/x86emu/x86emu.c optional x86bios | atkbd | dpms | vesa +# +# 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 optional atpic +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/isa/orm.c optional isa Modified: head/sys/conf/files.i386 ============================================================================== --- head/sys/conf/files.i386 Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/conf/files.i386 Thu Feb 25 14:13:39 2010 (r204309) @@ -244,13 +244,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}" @@ -329,17 +322,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 @@ -362,8 +348,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/orm.c optional isa isa/syscons_isa.c optional sc isa/vga_isa.c optional vga kern/imgact_aout.c optional compat_aout @@ -387,3 +371,21 @@ i386/xbox/pic16l.s optional xbox # compat/x86bios/x86bios.c optional x86bios | atkbd | dpms | vesa contrib/x86emu/x86emu.c optional x86bios | atkbd | dpms | vesa +# +# 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/isa/orm.c optional isa Modified: head/sys/conf/files.pc98 ============================================================================== --- head/sys/conf/files.pc98 Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/conf/files.pc98 Thu Feb 25 14:13:39 2010 (r204309) @@ -195,7 +195,6 @@ 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 Copied: head/sys/i386/i386/atpic_vector.s (from r203846, head/sys/i386/isa/atpic_vector.s) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/i386/i386/atpic_vector.s Thu Feb 25 14:13:39 2010 (r204309, copy of r203846, head/sys/i386/isa/atpic_vector.s) @@ -0,0 +1,77 @@ +/*- + * 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 ; \ +; \ + 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: head/sys/i386/i386/exception.s ============================================================================== --- head/sys/i386/i386/exception.s Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/i386/i386/exception.s Thu Feb 25 14:13:39 2010 (r204309) @@ -294,7 +294,7 @@ ENTRY(fork_trampoline) SUPERALIGN_TEXT MCOUNT_LABEL(bintr) -#include +#include #ifdef DEV_APIC .data Modified: head/sys/i386/i386/machdep.c ============================================================================== --- head/sys/i386/i386/machdep.c Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/i386/i386/machdep.c Thu Feb 25 14:13:39 2010 (r204309) @@ -132,7 +132,7 @@ __FBSDID("$FreeBSD$"); #endif #ifdef DEV_ISA -#include +#include #endif #ifdef XBOX Modified: head/sys/i386/i386/nexus.c ============================================================================== --- head/sys/i386/i386/nexus.c Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/i386/i386/nexus.c Thu Feb 25 14:13:39 2010 (r204309) @@ -72,7 +72,7 @@ __FBSDID("$FreeBSD$"); #ifdef PC98 #include #else -#include +#include #endif #endif #include Modified: head/sys/i386/i386/vm_machdep.c ============================================================================== --- head/sys/i386/i386/vm_machdep.c Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/i386/i386/vm_machdep.c Thu Feb 25 14:13:39 2010 (r204309) @@ -95,7 +95,7 @@ __FBSDID("$FreeBSD$"); #ifdef PC98 #include #else -#include +#include #endif #ifdef XBOX Modified: head/sys/i386/xen/clock.c ============================================================================== --- head/sys/i386/xen/clock.c Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/i386/xen/clock.c Thu Feb 25 14:13:39 2010 (r204309) @@ -74,8 +74,8 @@ __FBSDID("$FreeBSD$"); #include #include -#include -#include +#include +#include #include #include Modified: head/sys/modules/bios/smbios/Makefile ============================================================================== --- head/sys/modules/bios/smbios/Makefile Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/modules/bios/smbios/Makefile Thu Feb 25 14:13:39 2010 (r204309) @@ -1,7 +1,7 @@ # $FreeBSD$ # -.PATH: ${.CURDIR}/../../../i386/bios +.PATH: ${.CURDIR}/../../../x86/bios KMOD= smbios SRCS= smbios.c \ Modified: head/sys/modules/bios/vpd/Makefile ============================================================================== --- head/sys/modules/bios/vpd/Makefile Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/modules/bios/vpd/Makefile Thu Feb 25 14:13:39 2010 (r204309) @@ -1,7 +1,7 @@ # $FreeBSD$ # -.PATH: ${.CURDIR}/../../../i386/bios +.PATH: ${.CURDIR}/../../../x86/bios KMOD= vpd SRCS= vpd.c \ Modified: head/sys/modules/cpufreq/Makefile ============================================================================== --- head/sys/modules/cpufreq/Makefile Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/modules/cpufreq/Makefile Thu Feb 25 14:13:39 2010 (r204309) @@ -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 Modified: head/sys/pc98/pc98/machdep.c ============================================================================== --- head/sys/pc98/pc98/machdep.c Thu Feb 25 13:53:09 2010 (r204308) +++ head/sys/pc98/pc98/machdep.c Thu Feb 25 14:13:39 2010 (r204309) @@ -129,7 +129,7 @@ __FBSDID("$FreeBSD$"); #endif #ifdef DEV_ISA -#include +#include #endif /* Sanity check for __curthread() */ Copied and modified: head/sys/x86/isa/atpic.c (from r203846, head/sys/i386/isa/atpic.c) ============================================================================== --- head/sys/i386/isa/atpic.c Sat Feb 13 19:17:06 2010 (r203846, copy source) +++ head/sys/x86/isa/atpic.c Thu Feb 25 14:13:39 2010 (r204309) @@ -53,14 +53,22 @@ __FBSDID("$FreeBSD$"); #include #include -#include +#include #ifdef PC98 #include #else -#include +#include #endif #include +#ifdef __amd64__ +#define SDT_ATPIC SDT_SYSIGT +#define GSEL_ATPIC 0 +#else +#define SDT_ATPIC SDT_SYS386IGT +#define GSEL_ATPIC GSEL(GCODE_SEL, SEL_KPL) +#endif + #define MASTER 0 #define SLAVE 1 @@ -468,8 +476,7 @@ atpic_startup(void) ai->at_intsrc.is_count = &ai->at_count; ai->at_intsrc.is_straycount = &ai->at_straycount; setidt(((struct atpic *)ai->at_intsrc.is_pic)->at_intbase + - ai->at_irq, ai->at_intr, SDT_SYS386IGT, SEL_KPL, - GSEL(GCODE_SEL, SEL_KPL)); + ai->at_irq, ai->at_intr, SDT_ATPIC, SEL_KPL, GSEL_ATPIC); } #ifdef DEV_MCA Copied: head/sys/x86/isa/atrtc.c (from r203846, head/sys/isa/atrtc.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/x86/isa/atrtc.c Thu Feb 25 14:13:39 2010 (r204309, copy of r203846, head/sys/isa/atrtc.c) @@ -0,0 +1,331 @@ +/*- + * Copyright (c) 2008 Poul-Henning Kamp + * 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. + * + * $FreeBSD$ + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "opt_isa.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#ifdef DEV_ISA +#include +#include +#endif + +#define RTC_LOCK mtx_lock_spin(&clock_lock) +#define RTC_UNLOCK mtx_unlock_spin(&clock_lock) + +int atrtcclock_disable = 0; + +static int rtc_reg = -1; +static u_char rtc_statusa = RTCSA_DIVIDER | RTCSA_NOPROF; +static u_char rtc_statusb = RTCSB_24HR; + +/* + * RTC support routines + */ + +int +rtcin(int reg) +{ + u_char val; + + RTC_LOCK; + if (rtc_reg != reg) { + inb(0x84); + outb(IO_RTC, reg); + rtc_reg = reg; + inb(0x84); + } + val = inb(IO_RTC + 1); + RTC_UNLOCK; + return (val); +} + +void +writertc(int reg, u_char val) +{ + + RTC_LOCK; + if (rtc_reg != reg) { + inb(0x84); + outb(IO_RTC, reg); + rtc_reg = reg; + inb(0x84); + } + outb(IO_RTC + 1, val); + inb(0x84); + RTC_UNLOCK; +} + +static __inline int +readrtc(int port) +{ + return(bcd2bin(rtcin(port))); +} + +void +atrtc_start(void) +{ + + writertc(RTC_STATUSA, rtc_statusa); + writertc(RTC_STATUSB, RTCSB_24HR); +} + +void +atrtc_rate(unsigned rate) +{ + + rtc_statusa = RTCSA_DIVIDER | rate; + writertc(RTC_STATUSA, rtc_statusa); +} + +void +atrtc_enable_intr(void) +{ + + rtc_statusb |= RTCSB_PINTR; + writertc(RTC_STATUSB, rtc_statusb); + rtcin(RTC_INTR); +} + +void +atrtc_restore(void) +{ + + /* Restore all of the RTC's "status" (actually, control) registers. */ + rtcin(RTC_STATUSA); /* dummy to get rtc_reg set */ + writertc(RTC_STATUSB, RTCSB_24HR); + writertc(RTC_STATUSA, rtc_statusa); + writertc(RTC_STATUSB, rtc_statusb); + rtcin(RTC_INTR); +} + +int +atrtc_setup_clock(void) +{ + int diag; + + if (atrtcclock_disable) + return (0); + + diag = rtcin(RTC_DIAG); + if (diag != 0) { + printf("RTC BIOS diagnostic error %b\n", + diag, RTCDG_BITS); + return (0); + } + + stathz = RTC_NOPROFRATE; + profhz = RTC_PROFRATE; + + return (1); +} + +/********************************************************************** + * RTC driver for subr_rtc + */ + +#include "clock_if.h" + +#include + +struct atrtc_softc { + int port_rid, intr_rid; + struct resource *port_res; + struct resource *intr_res; +}; + +/* + * Attach to the ISA PnP descriptors for the timer and realtime clock. + */ +static struct isa_pnp_id atrtc_ids[] = { + { 0x000bd041 /* PNP0B00 */, "AT realtime clock" }, + { 0 } +}; + +static int +atrtc_probe(device_t dev) +{ + int result; + + device_set_desc(dev, "AT Real Time Clock"); + result = ISA_PNP_PROBE(device_get_parent(dev), dev, atrtc_ids); + /* ENXIO if wrong PnP-ID, ENOENT ifno PnP-ID, zero if good PnP-iD */ + if (result != ENOENT) + return(result); + /* All PC's have an RTC, and we're hosed without it, so... */ + return (BUS_PROBE_LOW_PRIORITY); +} + +static int +atrtc_attach(device_t dev) +{ + struct atrtc_softc *sc; + int i; + + /* + * Not that we need them or anything, but grab our resources + * so they show up, correctly attributed, in the big picture. + */ + + sc = device_get_softc(dev); + if (!(sc->port_res = bus_alloc_resource(dev, SYS_RES_IOPORT, + &sc->port_rid, IO_RTC, IO_RTC + 1, 2, RF_ACTIVE))) + device_printf(dev,"Warning: Couldn't map I/O.\n"); + if (!(sc->intr_res = bus_alloc_resource(dev, SYS_RES_IRQ, + &sc->intr_rid, 8, 8, 1, RF_ACTIVE))) + device_printf(dev,"Warning: Couldn't map Interrupt.\n"); + clock_register(dev, 1000000); + if (resource_int_value("atrtc", 0, "clock", &i) == 0 && i == 0) + atrtcclock_disable = 1; + return(0); +} + +static int +atrtc_resume(device_t dev) +{ + + atrtc_restore(); + return(0); +} + +static int +atrtc_settime(device_t dev __unused, struct timespec *ts) +{ + struct clocktime ct; + + clock_ts_to_ct(ts, &ct); + + /* Disable RTC updates and interrupts. */ + writertc(RTC_STATUSB, RTCSB_HALT | RTCSB_24HR); + + writertc(RTC_SEC, bin2bcd(ct.sec)); /* Write back Seconds */ + writertc(RTC_MIN, bin2bcd(ct.min)); /* Write back Minutes */ + writertc(RTC_HRS, bin2bcd(ct.hour)); /* Write back Hours */ + + writertc(RTC_WDAY, ct.dow + 1); /* Write back Weekday */ + writertc(RTC_DAY, bin2bcd(ct.day)); /* Write back Day */ + writertc(RTC_MONTH, bin2bcd(ct.mon)); /* Write back Month */ + writertc(RTC_YEAR, bin2bcd(ct.year % 100)); /* Write back Year */ +#ifdef USE_RTC_CENTURY + writertc(RTC_CENTURY, bin2bcd(ct.year / 100)); /* ... and Century */ +#endif + + /* Reenable RTC updates and interrupts. */ + writertc(RTC_STATUSB, rtc_statusb); + rtcin(RTC_INTR); + return (0); +} + +static int +atrtc_gettime(device_t dev, struct timespec *ts) +{ + struct clocktime ct; + int s; + + /* Look if we have a RTC present and the time is valid */ + if (!(rtcin(RTC_STATUSD) & RTCSD_PWR)) { + device_printf(dev, "WARNING: Battery failure indication\n"); + return (EINVAL); + } + + /* wait for time update to complete */ + /* If RTCSA_TUP is zero, we have at least 244us before next update */ + s = splhigh(); + while (rtcin(RTC_STATUSA) & RTCSA_TUP) { + splx(s); + s = splhigh(); + } + ct.nsec = 0; + ct.sec = readrtc(RTC_SEC); + ct.min = readrtc(RTC_MIN); + ct.hour = readrtc(RTC_HRS); + ct.day = readrtc(RTC_DAY); + ct.dow = readrtc(RTC_WDAY) - 1; + ct.mon = readrtc(RTC_MONTH); + ct.year = readrtc(RTC_YEAR); +#ifdef USE_RTC_CENTURY + ct.year += readrtc(RTC_CENTURY) * 100; +#else + ct.year += 2000; +#endif + /* Set dow = -1 because some clocks don't set it correctly. */ + ct.dow = -1; + return (clock_ct_to_ts(&ct, ts)); +} + +static device_method_t atrtc_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, atrtc_probe), + DEVMETHOD(device_attach, atrtc_attach), + DEVMETHOD(device_detach, bus_generic_detach), + DEVMETHOD(device_shutdown, bus_generic_shutdown), + DEVMETHOD(device_suspend, bus_generic_suspend), + /* XXX stop statclock? */ + DEVMETHOD(device_resume, atrtc_resume), + + /* clock interface */ + DEVMETHOD(clock_gettime, atrtc_gettime), + DEVMETHOD(clock_settime, atrtc_settime), + + { 0, 0 } +}; + +static driver_t atrtc_driver = { + "atrtc", + atrtc_methods, + sizeof(struct atrtc_softc), +}; + +static devclass_t atrtc_devclass; + +DRIVER_MODULE(atrtc, isa, atrtc_driver, atrtc_devclass, 0, 0); +DRIVER_MODULE(atrtc, acpi, atrtc_driver, atrtc_devclass, 0, 0); + +#include "opt_ddb.h" +#ifdef DDB +#include + +DB_SHOW_COMMAND(rtc, rtc) +{ + printf("%02x/%02x/%02x %02x:%02x:%02x, A = %02x, B = %02x, C = %02x\n", + rtcin(RTC_YEAR), rtcin(RTC_MONTH), rtcin(RTC_DAY), + rtcin(RTC_HRS), rtcin(RTC_MIN), rtcin(RTC_SEC), + rtcin(RTC_STATUSA), rtcin(RTC_STATUSB), rtcin(RTC_INTR)); +} +#endif /* DDB */ Copied and modified: head/sys/x86/isa/clock.c (from r203846, head/sys/i386/isa/clock.c) ============================================================================== --- head/sys/i386/isa/clock.c Sat Feb 13 19:17:06 2010 (r203846, copy source) +++ head/sys/x86/isa/clock.c Thu Feb 25 14:13:39 2010 (r204309) @@ -39,12 +39,13 @@ __FBSDID("$FreeBSD$"); * Routines to handle clock hardware. */ +#ifndef __amd64__ #include "opt_apic.h" +#endif #include "opt_clock.h" #include "opt_kdtrace.h" #include "opt_isa.h" #include "opt_mca.h" -#include "opt_xbox.h" #include #include @@ -62,7 +63,6 @@ __FBSDID("$FreeBSD$"); #include #include -#include #include #include #include @@ -480,12 +480,15 @@ i8254_restore(void) mtx_unlock_spin(&clock_lock); } +#ifndef __amd64__ /* * Restore all the timers non-atomically (XXX: should be atomically). * * This function is called from pmtimer_resume() to restore all the timers. * This should not be necessary, but there are broken laptops that do not * restore all the timers on resume. + * As long as pmtimer is not part of amd64 suport, skip this for the amd64 + * case. */ void timer_restore(void) @@ -494,6 +497,7 @@ timer_restore(void) i8254_restore(); /* restore i8254_freq and hz */ atrtc_restore(); /* reenable RTC interrupts */ } +#endif /* This is separate from startrtclock() so that it can be called early. */ void @@ -523,7 +527,7 @@ void cpu_initclocks() { -#ifdef DEV_APIC +#if defined(__amd64__) || defined(DEV_APIC) using_lapic_timer = lapic_setup_clock(); #endif /* @@ -625,11 +629,15 @@ i8254_simple_get_timecount(struct timeco static unsigned i8254_get_timecount(struct timecounter *tc) { + register_t flags; u_int count; u_int high, low; - u_int eflags; - eflags = read_eflags(); +#ifdef __amd64__ + flags = read_rflags(); +#else + flags = read_eflags(); +#endif mtx_lock_spin(&clock_lock); /* Select timer0 and latch counter value. */ @@ -640,7 +648,7 @@ i8254_get_timecount(struct timecounter * count = i8254_max_count - ((high << 8) | low); if (count < i8254_lastcount || (!i8254_ticked && (clkintr_pending || - ((count < 20 || (!(eflags & PSL_I) && + ((count < 20 || (!(flags & PSL_I) && count < i8254_max_count / 2u)) && i8254_pending != NULL && i8254_pending(i8254_intsrc))))) { i8254_ticked = 1; @@ -678,6 +686,14 @@ attimer_attach(device_t dev) return(0); } +static int +attimer_resume(device_t dev) +{ + + i8254_restore(); + return (0); +} + static device_method_t attimer_methods[] = { /* Device interface */ DEVMETHOD(device_probe, attimer_probe), @@ -685,7 +701,7 @@ static device_method_t attimer_methods[] DEVMETHOD(device_detach, bus_generic_detach), DEVMETHOD(device_shutdown, bus_generic_shutdown), DEVMETHOD(device_suspend, bus_generic_suspend), - DEVMETHOD(device_resume, bus_generic_resume), + DEVMETHOD(device_resume, attimer_resume), { 0, 0 } }; Copied: head/sys/x86/isa/elcr.c (from r203846, head/sys/i386/isa/elcr.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/x86/isa/elcr.c Thu Feb 25 14:13:39 2010 (r204309, copy of r203846, head/sys/i386/isa/elcr.c) @@ -0,0 +1,139 @@ +/*- + * Copyright (c) 2004 John Baldwin + * 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. + * 3. Neither the name of the author nor the names of any co-contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * 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$"); + +/* + * The ELCR is a register that controls the trigger mode and polarity of + * EISA and ISA interrupts. In FreeBSD 3.x and 4.x, the ELCR was only + * consulted for determining the appropriate trigger mode of EISA + * interrupts when using an APIC. However, it seems that almost all + * systems that include PCI also include an ELCR that manages the ISA + * IRQs 0 through 15. Thus, we check for the presence of an ELCR on + * every machine by checking to see if the values found at bootup are + * sane. Note that the polarity of ISA and EISA IRQs are linked to the + * trigger mode. All edge triggered IRQs use active-hi polarity, and + * all level triggered interrupts use active-lo polarity. + * + * The format of the ELCR is simple: it is a 16-bit bitmap where bit 0 + * controls IRQ 0, bit 1 controls IRQ 1, etc. If the bit is zero, the + * associated IRQ is edge triggered. If the bit is one, the IRQ is + * level triggered. + */ + +#include +#include +#include +#include + +#define ELCR_PORT 0x4d0 +#define ELCR_MASK(irq) (1 << (irq)) + *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***