summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjake <jake@FreeBSD.org>2001-08-10 04:49:33 +0000
committerjake <jake@FreeBSD.org>2001-08-10 04:49:33 +0000
commitcdce7694e25294e8faa2c326ed0ffce48d199eeb (patch)
tree82c937cea514468f13d42d7e941cf5b1660ee2ee
parent3aedfd619614c9599301adf94dc0e607a5ef8347 (diff)
downloadFreeBSD-src-cdce7694e25294e8faa2c326ed0ffce48d199eeb.zip
FreeBSD-src-cdce7694e25294e8faa2c326ed0ffce48d199eeb.tar.gz
Add code to program the tick register and to setup its interrupt handler.
-rw-r--r--sys/sparc64/include/tick.h39
-rw-r--r--sys/sparc64/sparc64/tick.c60
2 files changed, 99 insertions, 0 deletions
diff --git a/sys/sparc64/include/tick.h b/sys/sparc64/include/tick.h
new file mode 100644
index 0000000..411aa86
--- /dev/null
+++ b/sys/sparc64/include/tick.h
@@ -0,0 +1,39 @@
+/*-
+ * Copyright (c) 2001 Jake Burkholder.
+ * 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$
+ */
+
+#ifndef _MACHINE_TICK_H_
+#define _MACHINE_TICK_H_
+
+typedef void tick_func_t(struct clockframe *);
+
+void tick_start(u_long clock, tick_func_t *func);
+void tick_stop(void);
+
+tick_func_t tick_hardclock;
+
+#endif
diff --git a/sys/sparc64/sparc64/tick.c b/sys/sparc64/sparc64/tick.c
new file mode 100644
index 0000000..e1b57e0
--- /dev/null
+++ b/sys/sparc64/sparc64/tick.c
@@ -0,0 +1,60 @@
+/*-
+ * Copyright (c) 2001 Jake Burkholder.
+ * 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/param.h>
+#include <sys/kernel.h>
+#include <sys/systm.h>
+
+#include <machine/frame.h>
+#include <machine/intr_machdep.h>
+#include <machine/tick.h>
+
+static u_long tick_increment;
+
+void
+tick_hardclock(struct clockframe *cf)
+{
+ hardclock(cf);
+ wr(asr23, rd(asr23) + tick_increment, 0);
+}
+
+void
+tick_start(u_long clock, tick_func_t *func)
+{
+ intr_setup(PIL_TICK, (ih_func_t *)func, -1, NULL, NULL);
+ tick_increment = clock / hz;
+ wrpr(tick, 0, 0);
+ wr(asr23, clock / hz, 0);
+}
+
+void
+tick_stop(void)
+{
+ wrpr(tick, 0, 0);
+ wr(asr23, 1L << 63, 0);
+}
OpenPOWER on IntegriCloud