|
|
1.1 root 1: /* clkinit.c - clkinit */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <sleep.h>
6: #include <procreg.h>
7:
8: /* real-time clock variables and sleeping process queue pointers */
9:
10: #ifdef RTCLOCK
11: int clmutex; /* mutual exclusion for time-of-day */
12: long clktime; /* current time in seconds since 1/1/70 */
13: int tickctr; /* counts 10ths of a second 10-0 */
14: int defclk; /* non-zero, then deferring clock count */
15: int clkdiff; /* deferred clock ticks */
16: int slnempty; /* FALSE if the sleep queue is empty */
17: short *sltop; /* address of key part of top entry in */
18: /* the sleep queue if slnonempty==TRUE */
19: int clockq; /* head of queue of sleeping processes */
20: int preempt; /* preemption counter. Current process */
21: /* is preempted when it reaches zero; */
22: /* set in resched; counts in ticks */
23: int clkruns = TRUE; /* set TRUE iff clock exists */
24: #else
25: int clkruns = FALSE; /* no clock configured; be sure sleep */
26: #endif /* doesn't wait forever */
27: #if defined(UVAX)
28: int count10; /* counts 100ths of a second 10-0 */
29: #endif
30:
31: /*
32: *------------------------------------------------------------------------
33: * clkinit - initialize the clock and sleep queue (called at startup)
34: *------------------------------------------------------------------------
35: */
36: clkinit()
37: {
38: *CVECTOR = (int) clkint; /* call clkint on interrupt */
39: clmutex = screate(1); /* semaphore for tod clock */
40: clktime = 0L; /* initially a low number */
41: preempt = QUANTUM; /* initial time quantum */
42: slnempty = FALSE; /* initially, no process asleep */
43: clkdiff = 0; /* zero deferred ticks */
44: defclk = 0; /* clock is not deferred */
45: clockq = newqueue(); /* allocate clock queue in q */
46: tickctr = 10; /* 10ths of a second counter */
47: #if defined(UVAX)
48: count10 = 10; /* 100ths of a sec. counter */
49: mtpr(STRTUCLK, ICCS); /* start real-time clock */
50: #else
51: mtpr(-CLKINTVL, NICR); /* set interval to 0.1 sec */
52: mtpr(STRTCLK, ICCS); /* start interval timer, */
53: /* enable clock to interrupt */
54: #endif
55: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.