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