|
|
1.1 root 1: /*
2: * machine-specific hardware routines,
3: * these for nautilus
4: */
5:
6: #include "sys/mtpr.h"
7: #include "sys/cons.h"
8:
9: int delayfact = 5; /* for DELAY macro */
10:
11: #define NICTRL 0x80 /* nmi interrupt enables: */
12: #define MEMENB 0x20 /* memory/fault */
13: #define NB1ENB 0x40 /* device 1 */
14: #define NB0ENB 0x80 /* device 0 */
15: #define COR 0x85 /* cache on */
16:
17: static int nmienable = MEMENB;
18:
19: /*
20: * adjust physical top of memory to useful top of memory
21: * (some vaxes put important console stuff there)
22: * called with mapping off
23: */
24: machmem(hi)
25: int hi;
26: {
27: return (hi);
28: }
29:
30: /*
31: * miscellaneous machine-dependent initialization
32: * called just after mapping turned on
33: */
34: machinit()
35: {
36:
37: mtpr(COR, 1); /* turn on the cache */
38: mcrinit();
39: mtpr(NICTRL, nmienable);
40: }
41:
42: /*
43: * enable interrupts from one of the NBIAs
44: */
45:
46: setnmi(dev)
47: int dev;
48: {
49: nmienable |= dev ? NB1ENB : NB0ENB;
50: mtpr(NICTRL, nmienable);
51: }
52:
53: /*
54: * stray interrupt handling:
55: * just decrypt it and return
56: */
57:
58: long passintr;
59:
60: strayintr(v)
61: int v;
62: {
63: if ((v & 0x1ff) == 0) {
64: passintr++;
65: return;
66: }
67: printf("stray interrupt at 0x%x == 0%o\n", v, v); /* temp */
68: }
69:
70: /*
71: * read the time-of-year clock, which is buried in the wretched console
72: */
73:
74: #define CMDID 0xf
75: #define READTOY 0x8
76: #define WRITTOY 0x9
77: #define RTOYID 0xd
78: #define WTOYID 0xd
79:
80: int *cniread(), *cniwrite();
81: static char rtbusy, wtbusy;
82: long
83: gettodr()
84: {
85: register int i;
86: register int *p;
87: static char rtoy = READTOY;
88: static long toy;
89:
90: if (rtbusy)
91: return (0);
92: rtbusy++;
93: for (i = 0; i < 2; i++) {
94: p = cniread(RTOYID, (char *)&toy, 4);
95: cniwrite(CMDID, &rtoy, 1);
96: if (cniwait(p, 2) == 0) {
97: rtbusy = 0;
98: return (toy);
99: }
100: }
101: rtbusy = 0;
102: return (0);
103: }
104:
105: /*
106: * set time-of-year clock
107: * 10% of the time, it is mysteriously set wrong;
108: * try a couple of times
109: */
110:
111: settodr(toy)
112: unsigned long toy;
113: {
114: register int i;
115: register unsigned long ntoy;
116:
117: if (wtbusy)
118: return;
119: wtbusy++;
120: for (i = 0; i < 4; i++) {
121: csettodr(toy);
122: ntoy = gettodr();
123: if (ntoy >= toy && ntoy < toy + 100)
124: break;
125: }
126: wtbusy = 0;
127: }
128:
129: csettodr(toy)
130: long toy;
131: {
132: static char wtoy = WRITTOY;
133: static long tbuf;
134:
135: if (cniwait(cniwrite(CMDID, &wtoy, 1), 2))
136: return;
137: tbuf = toy;
138: cniwait(cniwrite(WTOYID, (char *)&tbuf, 4));
139: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.