|
|
1.1 root 1: /*
2: * Copyright (c) 1988 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: *
17: * @(#)clock.c 7.2 (Berkeley) 6/29/88
18: */
19:
20: #include "param.h"
21: #include "time.h"
22: #include "kernel.h"
23:
24: #include "pte.h"
25: #include "cpu.h"
26: #include "mtpr.h"
27: #include "clock.h"
28: #include "cp.h"
29:
30: /*
31: * Machine-dependent clock routines.
32: *
33: * Startrtclock restarts the real-time clock, which provides
34: * hardclock interrupts to kern_clock.c.
35: *
36: * Inittodr initializes any time of day hardware which provides
37: * date functions. Its primary function is to use some file
38: * system information in case the hardare clock lost state.
39: */
40:
41: /*
42: * Start the real-time clock by initializing the
43: * interval timer on the console processor card
44: * according to hz.
45: */
46: startrtclock()
47: {
48: register int t;
49: static struct cphdr cpclock; /* must be in data space */
50:
51: cpclock.cp_unit = CPCLOCK;
52: cpclock.cp_comm = CPWRITE;
53: if (hz == 0) {
54: extern int tickadj; /* XXX */
55: hz = 60;
56: tick = 1000000 / hz;
57: tickadj = 240000 / (60 * hz);
58: printf("clock set to %dhz\n", hz);
59: }
60: cpclock.cp_count = hztocount(hz);
61: if (cnlast) {
62: /* try to insure last cmd was taken by cp */
63: for (t = 30000; (cnlast->cp_unit&CPTAKE) == 0 && t > 0; t--)
64: uncache(&cnlast->cp_unit);
65: cnlast = 0;
66: }
67: mtpr(CPMDCB, kvtophys(&cpclock));
68: for (t = 30000; (cpclock.cp_unit&CPDONE) == 0 && t > 0; t--)
69: uncache(&cpclock.cp_unit);
70: }
71:
72: /*
73: * Initialze the time of day register, based on
74: * the time base which is, e.g. from a filesystem.
75: */
76: inittodr(base)
77: time_t base;
78: {
79:
80: if (base < 5*SECYR) {
81: printf("WARNING: preposterous time in file system ");
82: time.tv_sec = 6*SECYR + 186*SECDAY + SECDAY/2;
83: } else
84: time.tv_sec = base;
85: printf("CHECK AND RESET THE DATE!\n");
86: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.