From 0d820bb7dbaee50ef5d47caaf49721aca9b2dc96 Mon Sep 17 00:00:00 2001 From: dfr Date: Tue, 6 Oct 1998 08:40:18 +0000 Subject: Add support for adjkerntz (largely untested). --- sys/alpha/alpha/clock.c | 12 +++++++++++- sys/alpha/alpha/machdep.c | 23 +++++++++++++++++++++-- sys/alpha/include/clock.h | 3 ++- sys/alpha/include/cpu.h | 10 ++++++++-- sys/powerpc/include/clock.h | 3 ++- 5 files changed, 44 insertions(+), 7 deletions(-) (limited to 'sys') diff --git a/sys/alpha/alpha/clock.c b/sys/alpha/alpha/clock.c index 26a8969..ef32268 100644 --- a/sys/alpha/alpha/clock.c +++ b/sys/alpha/alpha/clock.c @@ -1,4 +1,4 @@ -/* $Id: clock.c,v 1.2 1998/06/14 13:44:38 dfr Exp $ */ +/* $Id: clock.c,v 1.3 1998/07/22 08:16:34 dfr Exp $ */ /* $NetBSD: clock.c,v 1.20 1998/01/31 10:32:47 ross Exp $ */ /* @@ -67,6 +67,8 @@ device_t clockdev; int clockinitted; int tickfix; int tickfixinterval; +int adjkerntz; /* local offset from GMT in seconds */ +int disable_rtc_set; /* disable resettodr() if != 0 */ int wall_cmos_clock; /* wall CMOS clock assumed if != 0 */ static int beeping = 0; @@ -280,6 +282,8 @@ inittodr(base) s = splclock(); ts.tv_sec = days * SECDAY + ct.hour * SECHOUR + ct.min * SECMIN + ct.sec; + if (wall_cmos_clock) + ts.tv_sec += adjkerntz; ts.tv_nsec = 0; set_timecounter(&ts); splx(s); @@ -315,6 +319,9 @@ resettodr() struct clocktime ct; unsigned long tm; + if (disable_rtc_set) + return; + s = splclock(); tm = time_second; splx(s); @@ -322,6 +329,9 @@ resettodr() if (!clockinitted) return; + /* Calculate local time to put in RTC */ + tm -= (wall_cmos_clock ? adjkerntz : 0); + /* compute the day of week. */ t2 = tm / SECDAY; ct.dow = (t2 + 4) % 7; /* 1/1/1970 was thursday */ diff --git a/sys/alpha/alpha/machdep.c b/sys/alpha/alpha/machdep.c index d1164b6..5816af8 100644 --- a/sys/alpha/alpha/machdep.c +++ b/sys/alpha/alpha/machdep.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: machdep.c,v 1.13 1998/09/14 22:43:19 jdp Exp $ + * $Id: machdep.c,v 1.14 1998/09/17 09:35:31 dfr Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -154,7 +154,6 @@ struct pcb* curpcb; u_int64_t cycles_per_usec; u_int32_t cycles_per_sec; int whichqs, whichrtqs, whichidqs; -int adjkerntz; int cold = 1; struct platform platform; alpha_chipset_t chipset; @@ -1828,3 +1827,23 @@ bad: return(-1); } + +static int +sysctl_machdep_adjkerntz SYSCTL_HANDLER_ARGS +{ + int error; + error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, + req); + if (!error && req->newptr) + resettodr(); + return (error); +} + +SYSCTL_PROC(_machdep, CPU_ADJKERNTZ, adjkerntz, CTLTYPE_INT|CTLFLAG_RW, + &adjkerntz, 0, sysctl_machdep_adjkerntz, "I", ""); + +SYSCTL_INT(_machdep, CPU_DISRTCSET, disable_rtc_set, + CTLFLAG_RW, &disable_rtc_set, 0, ""); + +SYSCTL_INT(_machdep, CPU_WALLCLOCK, wall_cmos_clock, + CTLFLAG_RW, &wall_cmos_clock, 0, ""); diff --git a/sys/alpha/include/clock.h b/sys/alpha/include/clock.h index 15e4fa7..e191523 100644 --- a/sys/alpha/include/clock.h +++ b/sys/alpha/include/clock.h @@ -3,7 +3,7 @@ * Garrett Wollman, September 1994. * This file is in the public domain. * - * $Id: clock.h,v 1.1 1998/06/10 10:54:35 dfr Exp $ + * $Id: clock.h,v 1.2 1998/07/22 08:26:23 dfr Exp $ */ #ifndef _MACHINE_CLOCK_H_ @@ -11,6 +11,7 @@ #ifdef KERNEL +extern int disable_rtc_set; extern int wall_cmos_clock; extern int adjkerntz; diff --git a/sys/alpha/include/cpu.h b/sys/alpha/include/cpu.h index b63efaf..5a0a15a 100644 --- a/sys/alpha/include/cpu.h +++ b/sys/alpha/include/cpu.h @@ -1,4 +1,4 @@ -/* $Id: cpu.h,v 1.2 1998/06/10 10:54:45 dfr Exp $ */ +/* $Id: cpu.h,v 1.3 1998/07/12 16:32:06 dfr Exp $ */ /* From: NetBSD: cpu.h,v 1.18 1997/09/23 23:17:49 mjacob Exp */ /* @@ -107,7 +107,10 @@ u_int32_t want_resched; /* resched() was called */ #define CPU_UNALIGNED_FIX 4 /* int: fix unaligned accesses */ #define CPU_UNALIGNED_SIGBUS 5 /* int: SIGBUS unaligned accesses */ #define CPU_BOOTED_KERNEL 6 /* string: booted kernel name */ -#define CPU_MAXID 7 /* 6 valid machdep IDs */ +#define CPU_ADJKERNTZ 7 /* int: timezone offset (seconds) */ +#define CPU_DISRTCSET 8 /* int: disable resettodr() call */ +#define CPU_WALLCLOCK 9 /* int: indicates wall CMOS clock */ +#define CPU_MAXID 9 /* 9 valid machdep IDs */ #define CTL_MACHDEP_NAMES { \ { 0, 0 }, \ @@ -117,6 +120,9 @@ u_int32_t want_resched; /* resched() was called */ { "unaligned_fix", CTLTYPE_INT }, \ { "unaligned_sigbus", CTLTYPE_INT }, \ { "booted_kernel", CTLTYPE_STRING }, \ + { "adjkerntz", CTLTYPE_INT }, \ + { "disable_rtc_set", CTLTYPE_INT }, \ + { "wall_cmos_clock", CTLTYPE_INT }, \ } #ifdef KERNEL diff --git a/sys/powerpc/include/clock.h b/sys/powerpc/include/clock.h index 15e4fa7..e191523 100644 --- a/sys/powerpc/include/clock.h +++ b/sys/powerpc/include/clock.h @@ -3,7 +3,7 @@ * Garrett Wollman, September 1994. * This file is in the public domain. * - * $Id: clock.h,v 1.1 1998/06/10 10:54:35 dfr Exp $ + * $Id: clock.h,v 1.2 1998/07/22 08:26:23 dfr Exp $ */ #ifndef _MACHINE_CLOCK_H_ @@ -11,6 +11,7 @@ #ifdef KERNEL +extern int disable_rtc_set; extern int wall_cmos_clock; extern int adjkerntz; -- cgit v1.1