Module Name: src Committed By: tsutsui Date: Tue Jan 12 15:01:48 UTC 2010
Modified Files: src/sys/arch/sgimips/dev: dsclock.c Log Message: Switch to using todr_[gs]ettime_ymdhms() format which doesn't require struct timeval details. To generate a diff of this commit: cvs rdiff -u -r1.2 -r1.3 src/sys/arch/sgimips/dev/dsclock.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sgimips/dev/dsclock.c diff -u src/sys/arch/sgimips/dev/dsclock.c:1.2 src/sys/arch/sgimips/dev/dsclock.c:1.3 --- src/sys/arch/sgimips/dev/dsclock.c:1.2 Sat Dec 12 14:44:09 2009 +++ src/sys/arch/sgimips/dev/dsclock.c Tue Jan 12 15:01:48 2010 @@ -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, ®s) 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, ®s); 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, ®s);