|
|
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.