Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/sgimips/dev Switch to using todr_[gs]ettime_ymdhms(...



details:   https://anonhg.NetBSD.org/src/rev/be569dcdd750
branches:  trunk
changeset: 750731:be569dcdd750
user:      tsutsui <tsutsui%NetBSD.org@localhost>
date:      Tue Jan 12 15:01:48 2010 +0000

description:
Switch to using todr_[gs]ettime_ymdhms() format
which doesn't require struct timeval details.

diffstat:

 sys/arch/sgimips/dev/dsclock.c |  74 ++++++++++++++++++-----------------------
 1 files changed, 32 insertions(+), 42 deletions(-)

diffs (148 lines):

diff -r 87bf7df5e4f7 -r be569dcdd750 sys/arch/sgimips/dev/dsclock.c
--- a/sys/arch/sgimips/dev/dsclock.c    Tue Jan 12 14:51:43 2010 +0000
+++ b/sys/arch/sgimips/dev/dsclock.c    Tue Jan 12 15:01:48 2010 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: dsclock.c,v 1.2 2009/12/12 14:44:09 tsutsui Exp $      */
+/*     $NetBSD: dsclock.c,v 1.3 2010/01/12 15:01:48 tsutsui Exp $      */
 
 /*
  * Copyright (c) 2001 Rafal K. Boni
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dsclock.c,v 1.2 2009/12/12 14:44:09 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dsclock.c,v 1.3 2010/01/12 15:01:48 tsutsui Exp $");
 
 #include <sys/param.h>
 #include <sys/kernel.h>
@@ -63,8 +63,10 @@
 
 static int     dsclock_match(struct device *, struct cfdata *, void *);
 static void    dsclock_attach(struct device *, struct device *, void *);
-static int     dsclock_gettime(struct todr_chip_handle *, struct timeval *);
-static int     dsclock_settime(struct todr_chip_handle *, struct timeval *);
+static int     dsclock_gettime_ymdhms(struct todr_chip_handle *,
+                   struct clock_ymdhms *);
+static int     dsclock_settime_ymdhms(struct todr_chip_handle *,
+                   struct clock_ymdhms *);
 
 CFATTACH_DECL(dsclock, sizeof(struct dsclock_softc),
     dsclock_match, dsclock_attach, NULL, NULL);
@@ -102,8 +104,8 @@
        }
 
        sc->sc_todrch.cookie = sc;
-       sc->sc_todrch.todr_gettime = dsclock_gettime;
-       sc->sc_todrch.todr_settime = dsclock_settime;
+       sc->sc_todrch.todr_gettime_ymdhms = dsclock_gettime_ymdhms;
+       sc->sc_todrch.todr_settime_ymdhms = dsclock_settime_ymdhms;
        sc->sc_todrch.todr_setwen = NULL;
 
        todr_attach(&sc->sc_todrch);
@@ -113,10 +115,9 @@
  * Get the time of day, based on the clock's value and/or the base value.
  */
 static int
-dsclock_gettime(struct todr_chip_handle *todrch, struct timeval *tv)
+dsclock_gettime_ymdhms(struct todr_chip_handle *todrch, struct clock_ymdhms *dt)
 {
-       struct dsclock_softc *sc = (struct dsclock_softc *)todrch->cookie;
-       struct clock_ymdhms dt;
+       struct dsclock_softc *sc = todrch->cookie;
        ds1286_todregs regs;
        int s;
 
@@ -124,38 +125,30 @@
        DS1286_GETTOD(sc, &regs)
        splx(s);
 
-       dt.dt_sec = FROMBCD(regs[DS1286_SEC]);
-       dt.dt_min = FROMBCD(regs[DS1286_MIN]);
+       dt->dt_sec = FROMBCD(regs[DS1286_SEC]);
+       dt->dt_min = FROMBCD(regs[DS1286_MIN]);
 
        if (regs[DS1286_HOUR] & DS1286_HOUR_12MODE) {
-               dt.dt_hour = FROMBCD(regs[DS1286_HOUR] & DS1286_HOUR_12HR_MASK) 
-                       + ((regs[DS1286_HOUR] & DS1286_HOUR_12HR_PM) ? 12 : 0);
+               dt->dt_hour =
+                   FROMBCD(regs[DS1286_HOUR] & DS1286_HOUR_12HR_MASK) 
+                   + ((regs[DS1286_HOUR] & DS1286_HOUR_12HR_PM) ? 12 : 0);
 
                /*
                 * In AM/PM mode, hour range is 01-12, so adding in 12 hours
                 * for PM gives us 01-24, whereas we want 00-23, so map hour
                 * 24 to hour 0.
                 */
-               if (dt.dt_hour == 24)
-                       dt.dt_hour = 0;
+               if (dt->dt_hour == 24)
+                       dt->dt_hour = 0;
        } else {
-                dt.dt_hour= FROMBCD(regs[DS1286_HOUR] & DS1286_HOUR_24HR_MASK);
+                dt->dt_hour =
+                   FROMBCD(regs[DS1286_HOUR] & DS1286_HOUR_24HR_MASK);
        }
 
-       dt.dt_wday = FROMBCD(regs[DS1286_DOW]);
-       dt.dt_day = FROMBCD(regs[DS1286_DOM]);
-       dt.dt_mon = FROMBCD(regs[DS1286_MONTH] & DS1286_MONTH_MASK);
-       dt.dt_year = FROM_IRIX_YEAR(FROMBCD(regs[DS1286_YEAR]));
-
-       /* simple sanity checks */
-       if (dt.dt_mon > 12 || dt.dt_day > 31 ||
-           dt.dt_hour >= 24 || dt.dt_min >= 60 || dt.dt_sec >= 60)
-               return (EIO);
-
-       tv->tv_sec = (long)clock_ymdhms_to_secs(&dt);
-       if (tv->tv_sec == -1)
-               return (ERANGE);
-       tv->tv_usec = 0;
+       dt->dt_wday = FROMBCD(regs[DS1286_DOW]);
+       dt->dt_day = FROMBCD(regs[DS1286_DOM]);
+       dt->dt_mon = FROMBCD(regs[DS1286_MONTH] & DS1286_MONTH_MASK);
+       dt->dt_year = FROM_IRIX_YEAR(FROMBCD(regs[DS1286_YEAR]));
 
        return (0);
 }
@@ -164,31 +157,28 @@
  * Reset the TODR based on the time value.
  */
 static int
-dsclock_settime(struct todr_chip_handle *todrch, struct timeval *tv)
+dsclock_settime_ymdhms(struct todr_chip_handle *todrch, struct clock_ymdhms *dt)
 {
-       struct dsclock_softc *sc = (struct dsclock_softc *)todrch->cookie;
-       struct clock_ymdhms dt;
+       struct dsclock_softc *sc = todrch->cookie;
        ds1286_todregs regs;
        int s;
 
-       clock_secs_to_ymdhms((time_t)(tv->tv_sec + (tv->tv_usec > 500000)),&dt);
-
        s = splhigh();
        DS1286_GETTOD(sc, &regs);
        splx(s);
 
        regs[DS1286_SUBSEC] = 0;
-       regs[DS1286_SEC] = TOBCD(dt.dt_sec);
-       regs[DS1286_MIN] = TOBCD(dt.dt_min);
-       regs[DS1286_HOUR] = TOBCD(dt.dt_hour) & DS1286_HOUR_24HR_MASK;
-       regs[DS1286_DOW] = TOBCD(dt.dt_wday);
-       regs[DS1286_DOM] = TOBCD(dt.dt_day);
+       regs[DS1286_SEC] = TOBCD(dt->dt_sec);
+       regs[DS1286_MIN] = TOBCD(dt->dt_min);
+       regs[DS1286_HOUR] = TOBCD(dt->dt_hour) & DS1286_HOUR_24HR_MASK;
+       regs[DS1286_DOW] = TOBCD(dt->dt_wday);
+       regs[DS1286_DOM] = TOBCD(dt->dt_day);
 
        /* Leave wave-generator bits as set originally */
        regs[DS1286_MONTH] &=  ~DS1286_MONTH_MASK;
-       regs[DS1286_MONTH] |=  TOBCD(dt.dt_mon) & DS1286_MONTH_MASK;
+       regs[DS1286_MONTH] |=  TOBCD(dt->dt_mon) & DS1286_MONTH_MASK;
 
-       regs[DS1286_YEAR] = TOBCD(TO_IRIX_YEAR(dt.dt_year));
+       regs[DS1286_YEAR] = TOBCD(TO_IRIX_YEAR(dt->dt_year));
 
        s = splhigh();
        DS1286_PUTTOD(sc, &regs);



Home | Main Index | Thread Index | Old Index