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/...
Attilio Rao
attilio at FreeBSD.org
Thu Feb 25 14:13:40 UTC 2010
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 <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: 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 <amd64/isa/atpic_vector.S>
+#include <amd64/amd64/atpic_vector.S>
#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 <machine/specialreg.h>
#include <machine/md_var.h>
-#include <amd64/isa/icu.h>
+#include <x86/isa/icu.h>
/* 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 <machine/segments.h>
#include <machine/frame.h>
#include <dev/ic/i8259.h>
-#include <amd64/isa/icu.h>
-#include <amd64/isa/isa.h>
+#include <x86/isa/icu.h>
+#include <x86/isa/isa.h>
#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 <amd64/isa/icu.h>
+#include <x86/isa/icu.h>
#else
#include <machine/apicvar.h>
#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 <isa/isavar.h>
-#include <amd64/isa/isa.h>
+#include <x86/isa/isa.h>
#endif
#include <sys/rtprio.h>
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 <vm/vm_map.h>
#include <vm/vm_param.h>
-#include <amd64/isa/isa.h>
+#include <x86/isa/isa.h>
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 <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 ; \
+; \
+ 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 <i386/isa/atpic_vector.s>
+#include <i386/i386/atpic_vector.s>
#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 <i386/isa/icu.h>
+#include <x86/isa/icu.h>
#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 <pc98/cbus/cbus.h>
#else
-#include <i386/isa/isa.h>
+#include <x86/isa/isa.h>
#endif
#endif
#include <sys/rtprio.h>
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 <pc98/cbus/cbus.h>
#else
-#include <i386/isa/isa.h>
+#include <x86/isa/isa.h>
#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 <machine/specialreg.h>
#include <machine/timerreg.h>
-#include <i386/isa/icu.h>
-#include <i386/isa/isa.h>
+#include <x86/isa/icu.h>
+#include <x86/isa/isa.h>
#include <isa/rtc.h>
#include <xen/xen_intr.h>
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 <i386/isa/icu.h>
+#include <x86/isa/icu.h>
#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 <machine/segments.h>
#include <dev/ic/i8259.h>
-#include <i386/isa/icu.h>
+#include <x86/isa/icu.h>
#ifdef PC98
#include <pc98/cbus/cbus.h>
#else
-#include <i386/isa/isa.h>
+#include <x86/isa/isa.h>
#endif
#include <isa/isavar.h>
+#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 <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include "opt_isa.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/bus.h>
+#include <sys/clock.h>
+#include <sys/lock.h>
+#include <sys/mutex.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+
+#include <isa/rtc.h>
+#ifdef DEV_ISA
+#include <isa/isareg.h>
+#include <isa/isavar.h>
+#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 <sys/rman.h>
+
+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 <ddb/ddb.h>
+
+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 <sys/param.h>
#include <sys/systm.h>
@@ -62,7 +63,6 @@ __FBSDID("$FreeBSD$");
#include <machine/clock.h>
#include <machine/cpu.h>
-#include <machine/frame.h>
#include <machine/intr_machdep.h>
#include <machine/md_var.h>
#include <machine/apicvar.h>
@@ -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 <jhb at FreeBSD.org>
+ * 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 <sys/cdefs.h>
+__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 <sys/param.h>
+#include <sys/bus.h>
+#include <sys/systm.h>
+#include <machine/intr_machdep.h>
+
+#define ELCR_PORT 0x4d0
+#define ELCR_MASK(irq) (1 << (irq))
+
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-head
mailing list