2 #include "../port/lib.h"
7 #include "../port/error.h"
11 Isr = Saturn + 0x0400,
12 Ipol = Saturn + 0x0404,
13 Issr = Saturn + 0x0500,
14 Ier = Saturn + 0x0504,
15 Ipri = Saturn + 0x0600,
16 Ithresh = Saturn + 0x0706,
21 Syscfg = Saturn + 0x0100,
24 static uchar intprio[] = {
55 for(i=0; i<nelem(intprio)/2; i++)
56 ((uchar*)Ipri)[i] = (intprio[2*i]<<4)|intprio[2*i+1];
64 for(i=0; i<nelem(intprio); i++)
65 if(v->irq==intprio[i]){
66 *(ulong*)Ier |= 1<<(31-i);
69 print("intrenable: cannot enable intr %d\n", v->irq);
78 for(i=0; i<nelem(intprio); i++)
79 if(v->irq==intprio[i]){
80 *(ulong*)Ier &= ~(1<<(31-i));
91 iar = *(ushort*)Iar; // push(prio) onto stack
92 for(i=0; i<nelem(intprio); i++)
96 iprint("saturnint: no vector %d\n", iar);
104 *(ushort*)Ithresh = 0; // pop(prio) stack
112 extern char* plan9inistr;
115 memset(m, 0, sizeof(*m));
116 m->cputype = getpvr()>>16;
117 m->imap = (Imap*)INTMEM;
121 rrate = (*(ushort*)Syscfg >> 6) & 3;
130 m->bushz = 100000000;
133 m->bushz = 133333333;
137 if(getpll() == 0x80000000)
138 m->cpuhz = 300000000;
140 m->cpuhz = 200000000; /* 750FX? */
141 m->cyclefreq = m->bushz / 4;
146 putmsr(getmsr() | MSR_ME);
148 dcflush((void*)KZERO, 0x2000000);
150 putl2cr(l2cr|BIT(10));
155 hid |= BIT(28)|BIT(26)|BIT(24);
160 "ether0=type=saturn\n"
163 "authdom=cs.bell-labs.com\n"
165 "ntp=135.104.9.52\n";
178 for(i = 0x0; i < 0x2000; i += 0x100)
181 dcflush(KADDR(0), 0x2000);
182 icflush(KADDR(0), 0x2000);
184 putmsr(getmsr() & ~MSR_IP);
188 reboot(void*, void*, ulong)