summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPoul-Henning Kamp <phk@FreeBSD.org>1999-09-20 07:52:39 +0000
committerPoul-Henning Kamp <phk@FreeBSD.org>1999-09-20 07:52:39 +0000
commit24514292fa6e66d4ccd79de128f8bbb41cc9664e (patch)
tree350ae5d042ed765f091715f76364c5d5267577cb
parentabad681b036e4a30378c701a1e17c48abf149922 (diff)
Notes
-rw-r--r--sys/conf/files.i3861
-rw-r--r--sys/i386/conf/files.i3861
-rw-r--r--sys/i386/i386/mp_clock.c88
3 files changed, 90 insertions, 0 deletions
diff --git a/sys/conf/files.i386 b/sys/conf/files.i386
index c900da458e79..f89ff33b5709 100644
--- a/sys/conf/files.i386
+++ b/sys/conf/files.i386
@@ -141,6 +141,7 @@ i386/i386/initcpu.c standard
i386/i386/machdep.c standard
i386/i386/math_emulate.c optional math_emulate
i386/i386/mem.c standard
+i386/i386/mp_clock.c optional smp
i386/i386/mp_machdep.c optional smp
i386/i386/mpapic.c optional smp
i386/i386/mpboot.s optional smp
diff --git a/sys/i386/conf/files.i386 b/sys/i386/conf/files.i386
index c900da458e79..f89ff33b5709 100644
--- a/sys/i386/conf/files.i386
+++ b/sys/i386/conf/files.i386
@@ -141,6 +141,7 @@ i386/i386/initcpu.c standard
i386/i386/machdep.c standard
i386/i386/math_emulate.c optional math_emulate
i386/i386/mem.c standard
+i386/i386/mp_clock.c optional smp
i386/i386/mp_machdep.c optional smp
i386/i386/mpapic.c optional smp
i386/i386/mpboot.s optional smp
diff --git a/sys/i386/i386/mp_clock.c b/sys/i386/i386/mp_clock.c
new file mode 100644
index 000000000000..b60e80db89a8
--- /dev/null
+++ b/sys/i386/i386/mp_clock.c
@@ -0,0 +1,88 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <phk@FreeBSD.ORG> wrote this file. As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
+ * ----------------------------------------------------------------------------
+ *
+ * $FreeBSD$
+ *
+ */
+
+#include "opt_bus.h"
+#include "opt_pci.h"
+#include "opt_smp.h"
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/time.h>
+#include <sys/kernel.h>
+#include <sys/sysctl.h>
+#include <sys/bus.h>
+
+#include <pci/pcivar.h>
+#include <pci/pcireg.h>
+
+static unsigned piix_get_timecount(struct timecounter *tc);
+
+static u_int32_t piix_timecounter_address;
+
+static struct timecounter piix_timecounter = {
+ piix_get_timecount,
+ 0,
+ 0xffffff,
+ 14318182/4,
+ "PIIX"
+};
+
+SYSCTL_OPAQUE(_debug, OID_AUTO, piix_timecounter, CTLFLAG_RD,
+ &piix_timecounter, sizeof(piix_timecounter), "S,timecounter", "");
+
+static unsigned
+piix_get_timecount(struct timecounter *tc)
+{
+ return (inl(piix_timecounter_address));
+}
+
+static int
+piix_probe (device_t dev)
+{
+ u_int32_t d;
+
+ switch (pci_get_devid(dev)) {
+ case 0x71138086:
+ d = pci_read_config(dev, 0x4, 2);
+ if (!(d & 1))
+ return 0; /* IO space not mapped */
+ d = pci_read_config(dev, 0x40, 4);
+ piix_timecounter_address = (d & 0xffc0) + 8;
+ init_timecounter(&piix_timecounter);
+ return (ENXIO);
+ };
+ return (ENXIO);
+}
+
+static int
+piix_attach (device_t dev)
+{
+
+ return 0;
+}
+
+static device_method_t piix_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, piix_probe),
+ DEVMETHOD(device_attach, piix_attach),
+ { 0, 0 }
+};
+
+static driver_t piix_driver = {
+ "piix",
+ piix_methods,
+ 1,
+};
+
+static devclass_t piix_devclass;
+
+DRIVER_MODULE(piix, pci, piix_driver, piix_devclass, 0, 0);