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, ®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);
Home |
Main Index |
Thread Index |
Old Index