Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/x68k Use MI clock_subr.c.
details: https://anonhg.NetBSD.org/src/rev/6a7fd09d8c0d
branches: trunk
changeset: 502093:6a7fd09d8c0d
user: minoura <minoura%NetBSD.org@localhost>
date: Thu Jan 11 16:09:42 2001 +0000
description:
Use MI clock_subr.c.
diffstat:
sys/arch/x68k/conf/files.x68k | 3 +-
sys/arch/x68k/dev/rtclock.c | 112 +++++++++++----------------------------
sys/arch/x68k/dev/rtclock_var.h | 11 +---
sys/arch/x68k/x68k/clock.c | 8 +-
4 files changed, 41 insertions(+), 93 deletions(-)
diffs (243 lines):
diff -r 5def681a87b1 -r 6a7fd09d8c0d sys/arch/x68k/conf/files.x68k
--- a/sys/arch/x68k/conf/files.x68k Thu Jan 11 15:10:46 2001 +0000
+++ b/sys/arch/x68k/conf/files.x68k Thu Jan 11 16:09:42 2001 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: files.x68k,v 1.34 2000/11/24 06:55:22 minoura Exp $
+# $NetBSD: files.x68k,v 1.35 2001/01/11 16:09:42 minoura Exp $
#
# new style config file for x68k architecture
#
@@ -100,6 +100,7 @@
device rtc
attach rtc at intio
file arch/x68k/dev/rtclock.c rtc
+file dev/clock_subr.c rtc
device dmac
attach dmac at intio
diff -r 5def681a87b1 -r 6a7fd09d8c0d sys/arch/x68k/dev/rtclock.c
--- a/sys/arch/x68k/dev/rtclock.c Thu Jan 11 15:10:46 2001 +0000
+++ b/sys/arch/x68k/dev/rtclock.c Thu Jan 11 16:09:42 2001 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rtclock.c,v 1.7 2001/01/09 11:38:32 minoura Exp $ */
+/* $NetBSD: rtclock.c,v 1.8 2001/01/11 16:09:42 minoura Exp $ */
/*
* Copyright 1993, 1994 Masaru Oki
@@ -47,10 +47,12 @@
#include <machine/bus.h>
+#include <dev/clock_subr.h>
+
#include <arch/x68k/dev/rtclock_var.h>
#include <arch/x68k/dev/intiovar.h>
-static u_long rtgettod __P((void));
+static time_t rtgettod __P((void));
static int rtsettod __P((long));
static int rtc_match __P((struct device *, struct cfdata *, void *));
@@ -118,7 +120,7 @@
* x68k/clock.c calls thru this vector, if it is set, to read
* the realtime clock.
*/
-u_long (*gettod) __P((void));
+time_t (*gettod) __P((void));
int (*settod) __P((long));
int
@@ -133,66 +135,40 @@
return 1;
}
-static int month_days[12] = {
- 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
-};
-
-static u_long
+static time_t
rtgettod()
{
- register int i;
- register u_long tmp;
- int year, month, day, hour, min, sec;
+ struct clock_ymdhms dt;
/* hold clock */
RTC_WRITE(RTC_MODE, RTC_HOLD_CLOCK);
/* read it */
- sec = RTC_REG(RTC_SEC10) * 10 + RTC_REG(RTC_SEC);
- min = RTC_REG(RTC_MIN10) * 10 + RTC_REG(RTC_MIN);
- hour = RTC_REG(RTC_HOUR10) * 10 + RTC_REG(RTC_HOUR);
- day = RTC_REG(RTC_DAY10) * 10 + RTC_REG(RTC_DAY);
- month = RTC_REG(RTC_MON10) * 10 + RTC_REG(RTC_MON);
- year = RTC_REG(RTC_YEAR10) * 10 + RTC_REG(RTC_YEAR) + 1980;
+ dt.dt_sec = RTC_REG(RTC_SEC10) * 10 + RTC_REG(RTC_SEC);
+ dt.dt_min = RTC_REG(RTC_MIN10) * 10 + RTC_REG(RTC_MIN);
+ dt.dt_hour = RTC_REG(RTC_HOUR10) * 10 + RTC_REG(RTC_HOUR);
+ dt.dt_day = RTC_REG(RTC_DAY10) * 10 + RTC_REG(RTC_DAY);
+ dt.dt_mon = RTC_REG(RTC_MON10) * 10 + RTC_REG(RTC_MON);
+ dt.dt_year = RTC_REG(RTC_YEAR10) * 10 + RTC_REG(RTC_YEAR) + 1980;
/* let it run again.. */
RTC_WRITE(RTC_MODE, RTC_FREE_CLOCK);
#ifdef DIAGNOSTIC
- range_test(hour, 0, 23);
- range_test(day, 1, 31);
- range_test(month, 1, 12);
- range_test(year, STARTOFTIME, 2079);
+ range_test(dt.dt_hour, 0, 23);
+ range_test(dt.dt_day, 1, 31);
+ range_test(dt.dt_mon, 1, 12);
+ range_test(dt.dt_year, STARTOFTIME, 2079);
#endif
- tmp = 0;
-
- for (i = STARTOFTIME; i < year; i++)
- tmp += days_in_year(i);
- if (leapyear(year) && month > FEBRUARY)
- tmp++;
-
- for (i = 1; i < month; i++)
- tmp += days_in_month(i);
-
- tmp += (day - 1);
-
- tmp = ((tmp * 24 + hour) * 60 + min + rtc_offset) * 60 + sec;
-
- return tmp;
+ return clock_ymdhms_to_secs (&dt);
}
static int
rtsettod (tim)
- long tim;
+ time_t tim;
{
- /*
- * I don't know if setting the clock is analogous
- * to reading it, I don't have demo-code for setting.
- * just give it a try..
- */
- register int i;
- register long hms, day;
+ struct clock_ymdhms dt;
u_char sec1, sec2;
u_char min1, min2;
u_char hour1, hour2;
@@ -200,44 +176,22 @@
u_char mon1, mon2;
u_char year1, year2;
- tim -= (rtc_offset * 60);
+ clock_secs_to_ymdhms (tim, &dt);
/* prepare values to be written to clock */
- day = tim / SECDAY;
- hms = tim % SECDAY;
-
- hour2 = hms / 3600;
- hour1 = hour2 / 10;
- hour2 %= 10;
-
- min2 = (hms % 3600) / 60;
- min1 = min2 / 10;
- min2 %= 10;
-
- sec2 = (hms % 3600) % 60;
- sec1 = sec2 / 10;
- sec2 %= 10;
+ sec1 = dt.dt_sec / 10;
+ sec2 = dt.dt_sec % 10;
+ min1 = dt.dt_min / 10;
+ min2 = dt.dt_min % 10;
+ hour1 = dt.dt_hour / 10;
+ hour2 = dt.dt_hour % 10;
- /* Number of years in days */
- for (i = STARTOFTIME - 1980; day >= days_in_year(i); i++)
- day -= days_in_year(i);
- year1 = i / 10;
- year2 = i % 10;
-
- /* Number of months in days left */
- if (leapyear(i))
- days_in_month(FEBRUARY) = 29;
- for (i = 1; day >= days_in_month(i); i++)
- day -= days_in_month(i);
- days_in_month(FEBRUARY) = 28;
-
- mon1 = i / 10;
- mon2 = i % 10;
-
- /* Days are what is left over (+1) from all that. */
- day ++;
- day1 = day / 10;
- day2 = day % 10;
+ day1 = dt.dt_day / 10;
+ day2 = dt.dt_day % 10;
+ mon1 = dt.dt_mon / 10;
+ mon2 = dt.dt_mon % 10;
+ year1 = (dt.dt_year - 1980) / 10;
+ year2 = dt.dt_year % 10;
RTC_WRITE(RTC_MODE, RTC_HOLD_CLOCK);
RTC_WRITE(RTC_SEC10, sec1);
diff -r 5def681a87b1 -r 6a7fd09d8c0d sys/arch/x68k/dev/rtclock_var.h
--- a/sys/arch/x68k/dev/rtclock_var.h Thu Jan 11 15:10:46 2001 +0000
+++ b/sys/arch/x68k/dev/rtclock_var.h Thu Jan 11 16:09:42 2001 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rtclock_var.h,v 1.2 1999/03/16 16:30:20 minoura Exp $ */
+/* $NetBSD: rtclock_var.h,v 1.3 2001/01/11 16:09:43 minoura Exp $ */
/*
* Copyright 1993, 1994 Masaru Oki
@@ -86,15 +86,6 @@
#define RTC_LEAP 0x17
#define RTC_UNUSED2 0x19
-
-#define FEBRUARY 2
-#define STARTOFTIME 1970
-#define SECDAY 86400L
-#define SECYR (SECDAY * 365)
-
-#define leapyear(year) ((year) % 4 == 0)
#define range_test(n, l, h) if ((n) < (l) || (n) > (h)) return(0)
-#define days_in_year(a) (leapyear(a) ? 366 : 365)
-#define days_in_month(a) (month_days[(a) - 1])
#endif /* _RTCLOCKVAR_H_ */
diff -r 5def681a87b1 -r 6a7fd09d8c0d sys/arch/x68k/x68k/clock.c
--- a/sys/arch/x68k/x68k/clock.c Thu Jan 11 15:10:46 2001 +0000
+++ b/sys/arch/x68k/x68k/clock.c Thu Jan 11 16:09:42 2001 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: clock.c,v 1.9 2000/06/29 07:07:55 mrg Exp $ */
+/* $NetBSD: clock.c,v 1.10 2001/01/11 16:09:43 minoura Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -55,6 +55,8 @@
#include <machine/cpu.h>
#include <machine/bus.h>
+#include <dev/clock_subr.h>
+
#include <arch/x68k/dev/mfp.h>
#include <arch/x68k/dev/rtclock_var.h>
@@ -491,8 +493,8 @@
/* this is a hook set by a clock driver for the configured realtime clock,
returning plain current unix-time */
-long (*gettod) __P((void)) = 0;
-long (*settod) __P((long)) = 0;
+time_t (*gettod) __P((void)) = 0;
+int (*settod) __P((long)) = 0;
/*
* Initialize the time of day register, based on the time base which is, e.g.
Home |
Main Index |
Thread Index |
Old Index