From cdce7694e25294e8faa2c326ed0ffce48d199eeb Mon Sep 17 00:00:00 2001 From: jake Date: Fri, 10 Aug 2001 04:49:33 +0000 Subject: Add code to program the tick register and to setup its interrupt handler. --- sys/sparc64/include/tick.h | 39 ++++++++++++++++++++++++++++++ sys/sparc64/sparc64/tick.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 sys/sparc64/include/tick.h create mode 100644 sys/sparc64/sparc64/tick.c 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 +#include +#include + +#include +#include +#include + +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); +} -- cgit v1.1