[BACK]Return to clock.c CVS log [TXT][DIR] Up to [local] / sys / arch / mvme88k / stand / sboot

Annotation of sys/arch/mvme88k/stand/sboot/clock.c, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: clock.c,v 1.4 2006/05/16 22:52:26 miod Exp $ */
                      2:
                      3: /*
                      4:  * Copyright (c) 1992, 1993
                      5:  *     The Regents of the University of California.  All rights reserved.
                      6:  * Copyright (c) 1994 Gordon W. Ross
                      7:  * Copyright (c) 1993 Adam Glass
                      8:  *
                      9:  * This software was developed by the Computer Systems Engineering group
                     10:  * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66 and
                     11:  * contributed to Berkeley.
                     12:  *
                     13:  * All advertising materials mentioning features or use of this software
                     14:  * must display the following acknowledgement:
                     15:  *     This product includes software developed by the University of
                     16:  *     California, Lawrence Berkeley Laboratory.
                     17:  *
                     18:  * Redistribution and use in source and binary forms, with or without
                     19:  * modification, are permitted provided that the following conditions
                     20:  * are met:
                     21:  * 1. Redistributions of source code must retain the above copyright
                     22:  *    notice, this list of conditions and the following disclaimer.
                     23:  * 2. Redistributions in binary form must reproduce the above copyright
                     24:  *    notice, this list of conditions and the following disclaimer in the
                     25:  *    documentation and/or other materials provided with the distribution.
                     26:  * 3. Neither the name of the University nor the names of its contributors
                     27:  *    may be used to endorse or promote products derived from this software
                     28:  *    without specific prior written permission.
                     29:  *
                     30:  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
                     31:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     32:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     33:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
                     34:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     35:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     36:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     37:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     38:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     39:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     40:  * SUCH DAMAGE.
                     41:  *
                     42:  *     @(#)clock.c     8.1 (Berkeley) 6/11/93
                     43:  */
                     44:
                     45: /*
                     46:  * Clock driver.
                     47:  */
                     48:
                     49: #include <sys/cdefs.h>
                     50: #include "sboot.h"
                     51: #include "clockreg.h"
                     52:
                     53: static struct clockreg *clockreg = (struct clockreg *) CLOCK_ADDR;
                     54:
                     55: /*
                     56:  * BCD to decimal and decimal to BCD.
                     57:  */
                     58: #define        FROMBCD(x)      (((x) >> 4) * 10 + ((x) & 0xf))
                     59: #define        TOBCD(x)        (((x) / 10 * 16) + ((x) % 10))
                     60:
                     61: #define        SECDAY          (24 * 60 * 60)
                     62: #define        SECYR           (SECDAY * 365)
                     63: #define        LEAPYEAR(y)     (((y) & 3) == 0)
                     64:
                     65: /*
                     66:  * This code is defunct after 2068.
                     67:  * Will Unix still be here then??
                     68:  */
                     69: const short dayyr[12] =
                     70:     {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
                     71:
                     72: static u_long
                     73: chiptotime(sec, min, hour, day, mon, year)
                     74:        register int sec, min, hour, day, mon, year;
                     75: {
                     76:        register int days, yr;
                     77:
                     78:        sec = FROMBCD(sec);
                     79:        min = FROMBCD(min);
                     80:        hour = FROMBCD(hour);
                     81:        day = FROMBCD(day);
                     82:        mon = FROMBCD(mon);
                     83:        year = FROMBCD(year) + YEAR0;
                     84:        if (year < 70)
                     85:                year = 70;
                     86:
                     87:        /* simple sanity checks */
                     88:        if (year < 70 || mon < 1 || mon > 12 || day < 1 || day > 31)
                     89:                return (0);
                     90:        days = 0;
                     91:        for (yr = 70; yr < year; yr++)
                     92:                days += LEAPYEAR(yr) ? 366 : 365;
                     93:        days += dayyr[mon - 1] + day - 1;
                     94:        if (LEAPYEAR(yr) && mon > 2)
                     95:                days++;
                     96:        /* now have days since Jan 1, 1970; the rest is easy... */
                     97:        return (days * SECDAY + hour * 3600 + min * 60 + sec);
                     98: }
                     99:
                    100: /*
                    101:  * Set up the system's time, given a `reasonable' time value.
                    102:  */
                    103: u_long
                    104: time()
                    105: {
                    106:        register struct clockreg *cl = clockreg;
                    107:        int     sec, min, hour, day, mon, year;
                    108:
                    109:        cl->cl_csr |= CLK_READ; /* enable read (stop time) */
                    110:        sec = cl->cl_sec;
                    111:        min = cl->cl_min;
                    112:        hour = cl->cl_hour;
                    113:        day = cl->cl_mday;
                    114:        mon = cl->cl_month;
                    115:        year = cl->cl_year;
                    116:        cl->cl_csr &= ~CLK_READ;/* time wears on */
                    117:        return (chiptotime(sec, min, hour, day, mon, year));
                    118: }

CVSweb