## diffname carrera/main.c 1993/0903
## diff -e /dev/null /n/fornaxdump/1993/0903/sys/src/brazil/carrera/main.c
0a
#include "u.h"
#include "../port/lib.h"
#include "mem.h"
#include "dat.h"
#include "fns.h"
#include "io.h"
#include "init.h"
/*
* args passed by boot process
*/
int _argc; char **_argv; char **_env;
/*
* arguments passed to initcode and /boot
*/
char argbuf[128];
/*
* environment passed to boot -- sysname, consname, diskid
*/
char consname[NAMELEN];
char bootdisk[NAMELEN];
char screenldepth[NAMELEN];
/*
* software tlb simulation
*/
Softtlb stlb[MAXMACH][STLBSIZE];
Conf conf;
FPsave initfp;
void
main(void)
{
*(uchar*)(Uart0) = '*';
tlbinit(); /* Very early to establish IO mappings */
ioinit();
arginit();
confinit();
savefpregs(&initfp);
machinit();
active.exiting = 0;
active.machs = 1;
kmapinit();
xinit();
printinit();
NS16552setup(Uart0, UartFREQ);
NS16552special(0, 9600, &kbdq, &printq, kbdcr2nl);
vecinit();
iprint("\n\nBrazil\n");
pageinit();
procinit0();
initseg();
chandevreset();
rootfiles();
swapinit();
userinit();
schedinit();
}
/*
* copy arguments passed by the boot kernel (or ROM) into a temporary buffer.
* we do this because the arguments are in memory that may be allocated
* to processes or kernel buffers.
*
* also grab any environment variables that might be useful
*/
struct
{
char *name;
char *val;
}bootenv[] = {
{"netaddr=", sysname},
{"console=", consname},
{"bootdisk=", bootdisk},
{"ldepth=", screenldepth},
};
char *sp;
char *
pusharg(char *p)
{
int n;
n = strlen(p)+1;
sp -= n;
memmove(sp, p, n);
return sp;
}
void
arginit(void)
{
int i, n;
char **av;
/*
* get boot env variables
*/
if(*sysname == 0)
for(av = _env; *av; av++)
for(i=0; i < sizeof bootenv/sizeof bootenv[0]; i++){
n = strlen(bootenv[i].name);
if(strncmp(*av, bootenv[i].name, n) == 0){
strncpy(bootenv[i].val, (*av)+n, NAMELEN);
bootenv[i].val[NAMELEN-1] = '\0';
break;
}
}
/*
* pack args into buffer
*/
av = (char**)argbuf;
sp = argbuf + sizeof(argbuf);
for(i = 0; i < _argc; i++){
if(strchr(_argv[i], '='))
break;
av[i] = pusharg(_argv[i]);
}
av[i] = 0;
}
/*
* initialize a processor's mach structure. each processor does this
* for itself.
*/
void
machinit(void)
{
int n;
/* Ensure CU1 is off */
clrfpintr();
/* scrub cache */
cleancache();
n = m->machno;
m->stb = &stlb[n][0];
clockinit();
}
/*
* Map IO address space in wired down TLB entry 1
*/
void
ioinit(void)
{
ulong phys;
phys = PPN(Devicephys)|PTEGLOBL|PTEVALID|PTEWRITE|PTEUNCACHED;
puttlbx(1, Devicevirt, phys, PTEGLOBL, PGSZ256K);
}
/*
* setup MIPS trap vectors
*/
void
vecinit(void)
{
memmove((ulong*)UTLBMISS, (ulong*)vector0, 0x100);
memmove((ulong*)CACHETRAP, (ulong*)vector100, 0x80);
memmove((ulong*)EXCEPTION, (ulong*)vector180, 0x80);
icflush((ulong*)UTLBMISS, 32*1024);
}
void
init0(void)
{
char buf[2*NAMELEN];
spllo();
/*
* These are o.k. because rootinit is null.
* Then early kproc's will have a root and dot.
*/
up->slash = namec("#/", Atodir, 0, 0);
up->dot = clone(up->slash, 0);
iallocinit();
chandevinit();
if(!waserror()){
ksetenv("cputype", "mips");
sprint(buf, "sgi %s 4D", conffile);
ksetenv("terminal", buf);
ksetenv("sysname", sysname);
poperror();
}
kproc("alarm", alarmkproc, 0);
touser((uchar*)(USTKTOP-sizeof(argbuf)));
}
FPsave initfp;
void
userinit(void)
{
Proc *p;
KMap *k;
Page *pg;
char **av;
Segment *s;
p = newproc();
p->pgrp = newpgrp();
p->egrp = smalloc(sizeof(Egrp));
p->egrp->ref = 1;
p->fgrp = smalloc(sizeof(Fgrp));
p->fgrp->ref = 1;
p->procmode = 0640;
strcpy(p->text, "*init*");
strcpy(p->user, eve);
p->fpstate = FPinit;
p->fpsave.fpstatus = initfp.fpstatus;
/*
* Kernel Stack
*/
p->sched.pc = (ulong)init0;
p->sched.sp = (ulong)p->kstack+KSTACK-(1+MAXSYSARG)*BY2WD;
/*
* User Stack, pass input arguments to boot process
*/
s = newseg(SG_STACK, USTKTOP-USTKSIZE, USTKSIZE/BY2PG);
p->seg[SSEG] = s;
pg = newpage(1, 0, USTKTOP-BY2PG);
segpage(s, pg);
k = kmap(pg);
for(av = (char**)argbuf; *av; av++)
*av += (USTKTOP - sizeof(argbuf)) - (ulong)argbuf;
memmove((uchar*)VA(k) + BY2PG - sizeof(argbuf), argbuf, sizeof argbuf);
kunmap(k);
/* Text */
s = newseg(SG_TEXT, UTZERO, 1);
s->flushme++;
p->seg[TSEG] = s;
pg = newpage(1, 0, UTZERO);
memset(pg->cachectl, PG_TXTFLUSH, sizeof(pg->cachectl));
segpage(s, pg);
k = kmap(s->map[0]->pages[0]);
memmove((ulong*)VA(k), initcode, sizeof initcode);
kunmap(k);
ready(p);
}
void
exit(long type)
{
int timer;
spllo();
print("cpu %d exiting %d\n", m->machno, type);
timer = 0;
while(active.machs || consactive()) {
if(timer++ > 400)
break;
delay(10);
}
splhi();
for(;;)
;
}
void
confinit(void)
{
ulong ktop, top;
/*
* divide memory twixt user pages and kernel. Since
* the kernel can't use anything above .5G unmapped,
* make sure all that memory goes to the user.
*/
ktop = PGROUND((ulong)end);
ktop = PADDR(ktop);
top = (16*1024*1024)/BY2PG;
conf.base0 = 0;
conf.npage0 = top;
conf.npage = conf.npage0;
conf.npage0 -= ktop/BY2PG;
conf.base0 += ktop;
conf.npage1 = 0;
conf.base1 = 0;
conf.upages = (conf.npage*90)/100;
if(top - conf.upages > (256*1024*1024)/BY2PG)
conf.upages = top - (256*1024*1024)/BY2PG;
conf.nmach = 1;
/* set up other configuration parameters */
conf.nproc = 100;
conf.nswap = 262144;
conf.nimage = 200;
conf.ipif = 8;
conf.ip = 64;
conf.arp = 32;
conf.frag = 32;
conf.copymode = 0; /* copy on reference */
}
/*
* for the sake of devcons
*/
void
lights(int v)
{
USED(v);
}
void
buzz(int f, int d)
{
USED(f);
USED(d);
}
int
mouseputc(IOQ *q, int c)
{
USED(q);
USED(c);
return 0;
}
.
## diffname carrera/main.c 1993/0904
## diff -e /n/fornaxdump/1993/0903/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/0904/sys/src/brazil/carrera/main.c
307c
conf.nswap = conf.npage*3;
.
299c
conf.upages = (conf.npage*70)/100;
.
271d
266,269c
while(consactive())
.
169c
icflush((ulong*)UTLBMISS, 8*1024);
.
157c
/*
* Map Interrupt control
*/
phys = PPN(Intctlphys)|PTEGLOBL|PTEVALID|PTEWRITE|PTEUNCACHED;
puttlbx(2, Intctlvirt, phys, PTEGLOBL, PGSZ4K);
*(ushort*)Intenareg = 0xffff;
.
155a
puttlbx(1, Devicevirt, phys, PTEGLOBL, PGSZ64K);
.
154a
/*
* Map devices
*/
.
143a
.
75c
}bootenv[] =
{
.
63d
50a
.
49c
NS16552setup(Uart1, UartFREQ);
.
37d
## diffname carrera/main.c 1993/0905
## diff -e /n/fornaxdump/1993/0904/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/0905/sys/src/brazil/carrera/main.c
323c
conf.copymode = 0; /* copy on write */
.
309,310d
291,295d
278c
print("cpu %d exiting\n", m->machno);
.
275c
USED(type);
.
172a
* All DMA and ether IO buffers must reside in the first 16M bytes of
* memory to be covered by the translation registers
*/
void
iomapinit(void)
{
int i;
Tte *t;
t = xspanalloc(Ntranslation*sizeof(Tte), BY2PG, 0);
for(i = 0; i < Ntranslation; i++)
t[i].lo = i<<PGSHIFT;
/* Set the translation table */
IO(ulong, Ttbr) = PADDR(t);
IO(ulong, Tlrb) = (Ntranslation-1)*sizeof(Tte);
/* Invalidate the old entries */
IO(ulong, Tir) = 0;
}
/*
.
171a
void
enetaddr(uchar *ea)
{
/** BUG get from PROM */
static uchar tea[] = { 0x00, 0x00, 0x77, 0x01, 0xD2, 0xba };
memmove(ea, tea, sizeof(tea));
}
.
169c
/* Enable all devce interrupt */
IO(ushort, Intenareg) = 0xffff;
.
149a
* Set up a console on serial port 2
*/
void
serialinit(void)
{
NS16552setup(Uart1, UartFREQ);
NS16552special(0, 9600, &kbdq, &printq, kbdcr2nl);
}
/*
.
146a
active.exiting = 0;
active.machs = 1;
.
145a
m->speed = 50;
.
60a
enab();
spllo();
for(;;)
;
.
48,51c
serialinit();
.
46a
iomapinit();
.
43,44d
## diffname carrera/main.c 1993/0906
## diff -e /n/fornaxdump/1993/0905/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/0906/sys/src/brazil/carrera/main.c
382,390d
362a
conf.monitor = 1;
.
193c
for(i = 0; i < 8; i++)
tbuf[i] = ((uchar*)(NvramRO+Enetoffset))[i];
print("ether:");
for(i = 0; i < 6; i++) {
ea[i] = tbuf[7-i];
print("%2.2ux", ea[i]);
}
print("\n");
.
190,191c
int i;
uchar tbuf[8];
.
186a
/*
* Pull the ethernet address out of NVRAM
*/
.
180,181c
intphys = PPN(Intctlphys)|PTEGLOBL|PTEVALID|PTEWRITE|PTEUNCACHED;
puttlbx(2, Intctlvirt, intphys, PTEGLOBL, PGSZ4K);
.
176a
puttlbx(1, Devicevirt, devphys, isaphys, PGSZ64K);
.
174,175c
devphys = PPN(Devicephys)|PTEGLOBL|PTEVALID|PTEWRITE|PTEUNCACHED;
isaphys = PPN(Eisaphys)|PTEGLOBL|PTEVALID|PTEWRITE|PTEUNCACHED;
.
172c
* Map devices and the Eisa control space
.
169c
ulong devphys, isaphys, intphys;
.
57,60c
screeninit();
.
## diffname carrera/main.c 1993/0907
## diff -e /n/fornaxdump/1993/0906/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/0907/sys/src/brazil/carrera/main.c
382,386d
373c
conf.monitor = 0;
.
271,272d
181a
puttlbx(2, Intctlvirt, intphys, isamphys, PGSZ1M);
.
180c
isamphys = PPN(Eisamphys)|PTEGLOBL|PTEVALID|PTEWRITE|PTEUNCACHED;
.
177c
* Map Interrupt control & Eisa memory
.
166c
ulong devphys, isaphys, intphys, isamphys;
.
157a
kbdinit();
.
57d
49a
/*screeninit();*/
.
## diffname carrera/main.c 1993/0908
## diff -e /n/fornaxdump/1993/0907/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/0908/sys/src/brazil/carrera/main.c
187a
/* Look at the first 16M of Eisa memory */
iprint("write latch\n");
/* IO(uchar, EisaLatch) = 0; /**/
iprint("done\n");
.
181,182c
intphys = IOPTE|PPN(Intctlphys);
isamphys = IOPTE|PPN(Eisamphys);
.
173,174c
devphys = IOPTE|PPN(Devicephys);
isaphys = IOPTE|PPN(Eisaphys);
.
50c
screeninit(); /**/
.
## diffname carrera/main.c 1993/0909
## diff -e /n/fornaxdump/1993/0908/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/0909/sys/src/brazil/carrera/main.c
50c
screeninit();
.
## diffname carrera/main.c 1993/0914
## diff -e /n/fornaxdump/1993/0909/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/0914/sys/src/brazil/carrera/main.c
174c
isaphys = /* IOPTE|PPN(Eisaphys) */ PTEGLOBL;
.
50c
/* screeninit(); */
.
## diffname carrera/main.c 1993/0915
## diff -e /n/fornaxdump/1993/0914/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/0915/sys/src/brazil/carrera/main.c
182c
isamphys = /* IOPTE|PPN(Eisamphys) */ PTEGLOBL;
.
55d
53a
links();
.
## diffname carrera/main.c 1993/0918
## diff -e /n/fornaxdump/1993/0915/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/0918/sys/src/brazil/carrera/main.c
380c
conf.monitor = 1;
.
367c
conf.upages = (conf.npage*50)/100;
.
192d
190d
182d
174d
170a
* If you want to segattach the eisa space these
* mappings must be turned off to prevent duplication
* of the tlb entries
*/
if(mapeisa) {
isaphys = IOPTE|PPN(Eisaphys)|PTEGLOBL;
isamphys = 0x04000000|IOPTE|PTEGLOBL;
}
else {
isaphys = PTEGLOBL;
isamphys = PTEGLOBL;
}
/*
.
166c
ioinit(int mapeisa)
.
49,50c
screeninit();
print("\n\nBrazil\n");
.
38c
ioinit(1);
.
## diffname carrera/main.c 1993/0930
## diff -e /n/fornaxdump/1993/0918/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/0930/sys/src/brazil/carrera/main.c
280c
sprint(buf, "%s R4400PC", conffile);
.
## diffname carrera/main.c 1993/1005
## diff -e /n/fornaxdump/1993/0930/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/1005/sys/src/brazil/carrera/main.c
280c
sprint(buf, "carrera %s R4400PC", conffile);
.
## diffname carrera/main.c 1993/1015
## diff -e /n/fornaxdump/1993/1005/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/1015/sys/src/brazil/carrera/main.c
377c
conf.upages = (conf.npage*70)/100;
.
139a
memset(m, 0, sizeof(Mach));
.
50c
iprint("\n\nBrazil\n");
.
## diffname carrera/main.c 1993/1208
## diff -e /n/fornaxdump/1993/1015/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/1208/sys/src/brazil/carrera/main.c
204a
}
void puttlbxx(int, ulong, ulong, ulong, int);
void puttlbx(int a, ulong b, ulong c, ulong d, int e)
{
static int done[4];
if(((c|d)&PTEVALID) && a < 4){
if(done[a]++)
puttlbx(a, b, c, d, e);
}
puttlbxx(a, b, c, d, e);
.
200c
/* Enable all device interrupts */
.
## diffname carrera/main.c 1993/1209
## diff -e /n/fornaxdump/1993/1208/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/1209/sys/src/brazil/carrera/main.c
8a
int junk[32];
.
## diffname carrera/main.c 1993/1210
## diff -e /n/fornaxdump/1993/1209/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/1210/sys/src/brazil/carrera/main.c
420a
}
void
rdbginit(void)
{
memmove((void*)0xA001C000, rdbgcode, rdbglen);
.
209,220d
59a
rdbginit();
.
35a
extern uchar rdbgcode[];
extern ulong rdbglen;
.
9,10d
## diffname carrera/main.c 1993/1214
## diff -e /n/fornaxdump/1993/1210/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/1214/sys/src/brazil/carrera/main.c
417a
void
procsave(Proc *p)
{
/* keep track of tlbfaults */
up->counter[TLBCNTR] += m->tlbfault - m->otlbfault;
m->otlbfault = m->tlbfault;
}
.
## diffname carrera/main.c 1993/1216
## diff -e /n/fornaxdump/1993/1214/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/1216/sys/src/brazil/carrera/main.c
421a
USED(p);
.
## diffname carrera/main.c 1993/1217
## diff -e /n/fornaxdump/1993/1216/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/1217/sys/src/brazil/carrera/main.c
424,426c
/* Only interested in the PC */
Mipsjmpbuf.pc = 0xA001C020;
/* Link an NMI handler to the debugger
* - addresses from the ARCS rom source
*/
vec = (uchar*)0xA0000420;
jba = (ulong)UNCACHED(void, &Mipsjmpbuf);
vec[0] = 'N';
vec[1] = 'm';
vec[2] = 'i';
vec[3] = 's';
vec[4] = jba>>24;
vec[5] = jba>>16;
vec[6] = jba>>8;
vec[7] = jba;
/* Install the debugger code in a known place */
memmove((void*)0xA001C000, rdbgcode, rdbglen);
.
422c
uchar *vec;
ulong jba;
.
420c
rdbginit(void)
.
416,417c
ulong pc;
ulong sp;
ulong fp;
ulong s[7];
} Mipsjmpbuf;
.
413,414c
/*
register offsets of ARCS prom jmpbuf
JB_PC 0
JB_SP 1
JB_FP 2
JB_S0 3
JB_S1 4
JB_S2 5
JB_S3 6
JB_S4 7
JB_S5 8
JB_S6 9
JB_S7 10
*/
struct
.
402,404c
/* keep track of tlbfaults */
up->counter[TLBCNTR] += m->tlbfault - m->otlbfault;
m->otlbfault = m->tlbfault;
}
.
400a
void
procsave(Proc *p)
{
USED(p);
.
64a
.
40,41c
rdbginit();
tlbinit();
ioinit(1); /* Very early to establish IO mappings */
.
## diffname carrera/main.c 1993/1218
## diff -e /n/fornaxdump/1993/1217/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/1218/sys/src/brazil/carrera/main.c
209,210c
/* Map the rom back into Promvirt to allow NMI handling */
promphys = IOPTE|PPN(Promphys);
puttlbx(3, Promvirt, promphys, PTEGLOBL, PGSZ1M);
.
176c
ulong devphys, isaphys, intphys, isamphys, promphys;
.
40d
## diffname carrera/main.c 1993/1219
## diff -e /n/fornaxdump/1993/1218/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/1219/sys/src/brazil/carrera/main.c
394,397d
## diffname carrera/main.c 1993/1221
## diff -e /n/fornaxdump/1993/1219/sys/src/brazil/carrera/main.c /n/fornaxdump/1993/1221/sys/src/brazil/carrera/main.c
365,366c
/* Turn off the NMI hander for the debugger */
vec = (uchar*)0xA0000420;
vec[0] = 0;
/* Call the prom */
((void(*)(void))0xBFC00000)();
.
363a
.
357a
uchar *vec;
.
## diffname carrera/main.c 1994/0115
## diff -e /n/fornaxdump/1993/1221/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0115/sys/src/brazil/carrera/main.c
251c
IO(ulong, Tlrb) = Ntranslation*sizeof(Tte);
.
## diffname carrera/main.c 1994/0126
## diff -e /n/fornaxdump/1994/0115/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0126/sys/src/brazil/carrera/main.c
471c
memmove((void*)0x8001C000, rdbgcode, rdbglen);
.
453c
Mipsjmpbuf.pc = 0x8001C020;
.
## diffname carrera/main.c 1994/0207
## diff -e /n/fornaxdump/1994/0126/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0207/sys/src/brazil/carrera/main.c
274a
.
## diffname carrera/main.c 1994/0210
## diff -e /n/fornaxdump/1994/0207/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0210/sys/src/brazil/carrera/main.c
274d
211a
/* 8 MB video ram config */
v = IO(ulong, 0xE0000004);
v &= ~(3<<8);
v |= (2<<8);
IO(ulong, 0xE0000004) = v;
/* Map the display hardware */
ptec = PPN(VideoCTL)|PTEGLOBL|PTEVALID|PTEWRITE|PTEUNCACHED;
ptes = PPN(VideoMEM)|PTEGLOBL|PTEVALID|PTEWRITE|PTEUNCACHED;
puttlbx(4, Screenvirt, ptes, ptec, PGSZ4M);
.
210d
202d
195d
175c
ulong devphys, isaphys, intphys, isamphys, promphys, ptec, ptes, v;
.
## diffname carrera/main.c 1994/0225
## diff -e /n/fornaxdump/1994/0210/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0225/sys/src/brazil/carrera/main.c
219a
/* for PC weenies */
/*
* Set up the first 8259 interrupt processor.
* Make 8259 interrupts start at CPU vector Int0vec.
* Set the 8259 as master with edge triggered
* input with fully nested interrupts.
*/
EISAOUTB(Int0ctl, 0x11); /* ICW1 - edge triggered, master,
ICW4 will be sent */
EISAOUTB(Int0aux, Int0vec); /* ICW2 - interrupt vector offset */
EISAOUTB(Int0aux, 0x04); /* ICW3 - have slave on level 2 */
EISAOUTB(Int0aux, 0x01); /* ICW4 - 8086 mode, not buffered */
/*
* Set up the second 8259 interrupt processor.
* Make 8259 interrupts start at CPU vector Int0vec.
* Set the 8259 as master with edge triggered
* input with fully nested interrupts.
*/
EISAOUTB(Int1ctl, 0x11); /* ICW1 - edge triggered, master,
ICW4 will be sent */
EISAOUTB(Int1aux, Int1vec); /* ICW2 - interrupt vector offset */
EISAOUTB(Int1aux, 0x02); /* ICW3 - I am a slave on level 2 */
EISAOUTB(Int1aux, 0x01); /* ICW4 - 8086 mode, not buffered */
/*
* pass #2 8259 interrupts to #1
*/
int0mask &= ~0x04;
EISAOUTB(Int0aux, int0mask);
/* enable all PC interrupts except the clock */
int0mask |= 1<<(Clockvec&7);
EISAOUTB(Int0aux, int0mask);
int1mask = 0;
EISAOUTB(Int1aux, int1mask);
.
33a
int int0mask = 0xff; /* interrupts enabled for first 8259 */
int int1mask = 0xff; /* interrupts enabled for second 8259 */
.
## diffname carrera/main.c 1994/0305
## diff -e /n/fornaxdump/1994/0225/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0305/sys/src/brazil/carrera/main.c
243,247c
EISAOUTB(Int1ctl, 0x11); /* ICW1 - edge triggered, master,
ICW4 will be sent */
EISAOUTB(Int1aux, Int1vec); /* ICW2 - interrupt vector offset */
EISAOUTB(Int1aux, 0x02); /* ICW3 - I am a slave on level 2 */
EISAOUTB(Int1aux, 0x01); /* ICW4 - 8086 mode, not buffered */
.
231,235c
EISAOUTB(Int0ctl, 0x11); /* ICW1 - edge triggered, master,
ICW4 will be sent */
EISAOUTB(Int0aux, Int0vec); /* ICW2 - interrupt vector offset */
EISAOUTB(Int0aux, 0x04); /* ICW3 - have slave on level 2 */
EISAOUTB(Int0aux, 0x01); /* ICW4 - 8086 mode, not buffered */
.
## diffname carrera/main.c 1994/0306
## diff -e /n/fornaxdump/1994/0305/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0306/sys/src/brazil/carrera/main.c
259a
IO(ulong, R4030ier) = 0xf; /* enable eisa interrupts */
.
257a
.
255a
int0mask &= ~((1<<2)|(1<<5));
.
252,253d
## diffname carrera/main.c 1994/0307
## diff -e /n/fornaxdump/1994/0306/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0307/sys/src/brazil/carrera/main.c
254c
int0mask = 0;
.
## diffname carrera/main.c 1994/0308
## diff -e /n/fornaxdump/1994/0307/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0308/sys/src/brazil/carrera/main.c
501a
return; /* Not installed now */
.
## diffname carrera/main.c 1994/0322
## diff -e /n/fornaxdump/1994/0308/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0322/sys/src/brazil/carrera/main.c
501,502d
442a
conf.ialloc = ((conf.npage-conf.upages)/2)*BY2PG;
.
334d
157a
/* Setup call back ring buffer */
m->cbin = m->calls;
m->cbout = m->calls;
m->cbend = &m->calls[NCALLBACK];
.
64d
44a
rdbginit();
.
## diffname carrera/main.c 1994/0327
## diff -e /n/fornaxdump/1994/0322/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0327/sys/src/brazil/carrera/main.c
506c
return;
.
## diffname carrera/main.c 1994/0330
## diff -e /n/fornaxdump/1994/0327/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0330/sys/src/brazil/carrera/main.c
212c
IO(ushort, Intenareg) = 0xfff7;
.
146c
((void(*)(void))((ulong)cleancache|0xA0000000))();
.
## diffname carrera/main.c 1994/0405
## diff -e /n/fornaxdump/1994/0330/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0405/sys/src/brazil/carrera/main.c
506c
return;/**/
.
## diffname carrera/main.c 1994/0410
## diff -e /n/fornaxdump/1994/0405/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0410/sys/src/brazil/carrera/main.c
526c
memmove((void*)0xA001C000, rdbgcode, rdbglen);
.
506c
/*return;/**/
.
## diffname carrera/main.c 1994/0411
## diff -e /n/fornaxdump/1994/0410/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0411/sys/src/brazil/carrera/main.c
526c
memmove((void*)0x8001C000, rdbgcode, rdbglen);
.
## diffname carrera/main.c 1994/0413
## diff -e /n/fornaxdump/1994/0411/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0413/sys/src/brazil/carrera/main.c
506c
return;/**/
.
## diffname carrera/main.c 1994/0415
## diff -e /n/fornaxdump/1994/0413/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0415/sys/src/brazil/carrera/main.c
526c
memmove((void*)0xA001C000, rdbgcode, rdbglen);
.
508c
Mipsjmpbuf.pc = 0xA001C020;
.
## diffname carrera/main.c 1994/0508
## diff -e /n/fornaxdump/1994/0415/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0508/sys/src/brazil/carrera/main.c
158,162d
## diffname carrera/main.c 1994/0516
## diff -e /n/fornaxdump/1994/0508/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0516/sys/src/brazil/carrera/main.c
207c
IO(ushort, Intenareg) = 0xffff;
.
## diffname carrera/main.c 1994/0519
## diff -e /n/fornaxdump/1994/0516/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0519/sys/src/brazil/carrera/main.c
57a
iprint("M(PRID) = 0x%.8lux\n", getprid());
.
## diffname carrera/main.c 1994/0520
## diff -e /n/fornaxdump/1994/0519/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0520/sys/src/brazil/carrera/main.c
58d
## diffname carrera/main.c 1994/0528
## diff -e /n/fornaxdump/1994/0520/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0528/sys/src/brazil/carrera/main.c
420,421c
firmware(type);
.
412c
print("cpu%d exiting\n", m->machno);
.
## diffname carrera/main.c 1994/0609
## diff -e /n/fornaxdump/1994/0528/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0609/sys/src/brazil/carrera/main.c
313c
memmove((ulong*)UTLBMISS, (ulong*)vector0, 0x80);
memmove((ulong*)XEXCEPTION, (ulong*)vector0, 0x80);
.
## diffname carrera/main.c 1994/0612
## diff -e /n/fornaxdump/1994/0609/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0612/sys/src/brazil/carrera/main.c
463d
## diffname carrera/main.c 1994/0617
## diff -e /n/fornaxdump/1994/0612/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0617/sys/src/brazil/carrera/main.c
313,314c
memmove((ulong*)UTLBMISS, (ulong*)vector0, 0x100);
.
## diffname carrera/main.c 1994/0619
## diff -e /n/fornaxdump/1994/0617/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0619/sys/src/brazil/carrera/main.c
313c
memmove((ulong*)UTLBMISS, (ulong*)vector0, 0x80);
memmove((ulong*)XEXCEPTION, (ulong*)vector0, 0x80);
.
## diffname carrera/main.c 1994/0621
## diff -e /n/fornaxdump/1994/0619/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0621/sys/src/brazil/carrera/main.c
167,168d
## diffname carrera/main.c 1994/0728
## diff -e /n/fornaxdump/1994/0621/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0728/sys/src/brazil/carrera/main.c
456,464d
## diffname carrera/main.c 1994/0806
## diff -e /n/fornaxdump/1994/0728/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0806/sys/src/brazil/carrera/main.c
415a
if(type == 1)
for(;;);
.
## diffname carrera/main.c 1994/0812
## diff -e /n/fornaxdump/1994/0806/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0812/sys/src/brazil/carrera/main.c
361a
p->rgrp = newrgrp();
.
## diffname carrera/main.c 1994/0902
## diff -e /n/fornaxdump/1994/0812/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/0902/sys/src/brazil/carrera/main.c
166c
ns16552install();
.
## diffname carrera/main.c 1994/1019
## diff -e /n/fornaxdump/1994/0902/sys/src/brazil/carrera/main.c /n/fornaxdump/1994/1019/sys/src/brazil/carrera/main.c
434c
top = memsize()/BY2PG;
.
426a
ulong
memsize(void)
{
ulong gcr;
gcr = IO(ulong, MCTgcr);
/* Check for bank one enable -
* assumes both have 4Meg SIMMS
*/
if(gcr & 0x20){
memset(UNCACHED(void, 16*MB), 0, 16*MB);
return 32*MB;
}
return 16*MB;
}
.
## diffname carrera/main.c 1995/0131
## diff -e /n/fornaxdump/1994/1019/sys/src/brazil/carrera/main.c /n/fornaxdump/1995/0131/sys/src/brazil/carrera/main.c
324a
{
uchar *p;
int x;
for(p = (uchar*)(0xA0000000|16*MB); p<(uchar*)(0xA0000000|32*MB); p+=16){
if((((ulong)p) & 0x3FFF)==0)
print("%lux ", p);
x = *p;
}
}
.
57c
print("\n\nBrazil\n");
.
## diffname carrera/main.c 1995/0201
## diff -e /n/fornaxdump/1995/0131/sys/src/brazil/carrera/main.c /n/fornaxdump/1995/0201/sys/src/brazil/carrera/main.c
325,334d
## diffname carrera/main.c 1995/0214
## diff -e /n/fornaxdump/1995/0201/sys/src/brazil/carrera/main.c /n/fornaxdump/1995/0214/sys/src/brazil/carrera/main.c
482a
* dummy routine for interoperability with pc's
*/
int
isaconfig(char *class, int ctlrno, ISAConf *isa)
{
if(strcmp(class, "audio") == 0 && ctlrno == 0){
strcpy(isa->type, "sb16");
isa->port = 0x220;
isa->irq = 7;
return 1;
}
return 0;
}
/*
.
## diffname carrera/main.c 1995/0215
## diff -e /n/fornaxdump/1995/0214/sys/src/brazil/carrera/main.c /n/fornaxdump/1995/0215/sys/src/brazil/carrera/main.c
490,491d
## diffname carrera/main.c 1995/0308
## diff -e /n/fornaxdump/1995/0215/sys/src/brazil/carrera/main.c /n/fornaxdump/1995/0308/sys/src/brazil/carrera/main.c
57c
/* iprint("\n\nBrazil\n"); /**/
.
## diffname carrera/main.c 1997/0117
## diff -e /n/fornaxdump/1995/0308/sys/src/brazil/carrera/main.c /n/fornaxdump/1997/0117/sys/src/brazil/carrera/main.c
405c
exit(int type)
.
## diffname carrera/main.c 1997/0201
## diff -e /n/fornaxdump/1997/0117/sys/src/brazil/carrera/main.c /n/emeliedump/1997/0201/sys/src/brazil/carrera/main.c
336c
ksetenv("cputype", "mips2");
.
## diffname carrera/main.c 1997/0202
## diff -e /n/emeliedump/1997/0201/sys/src/brazil/carrera/main.c /n/emeliedump/1997/0202/sys/src/brazil/carrera/main.c
336c
ksetenv("cputype", "mips");
.
## diffname carrera/main.c 1997/0327
## diff -e /n/emeliedump/1997/0202/sys/src/brazil/carrera/main.c /n/emeliedump/1997/0327/sys/src/brazil/carrera/main.c
331c
up->dot = cclone(up->slash, 0);
.
111c
for(i=0; i < nelem(bootenv); i++){
.
## diffname carrera/main.c 1997/0603
## diff -e /n/emeliedump/1997/0327/sys/src/brazil/carrera/main.c /n/emeliedump/1997/0603/sys/src/brazil/carrera/main.c
361a
p->fgrp->fd = smalloc(DELTAFD*sizeof(Chan*));
p->fgrp->nfd = DELTAFD;
.
## diffname carrera/main.c 1997/0606
## diff -e /n/emeliedump/1997/0603/sys/src/brazil/carrera/main.c /n/emeliedump/1997/0606/sys/src/brazil/carrera/main.c
360,363c
p->fgrp = dupfgrp(nil);
.
## diffname carrera/main.c 1997/1101
## diff -e /n/emeliedump/1997/0606/sys/src/brazil/carrera/main.c /n/emeliedump/1997/1101/sys/src/brazil/carrera/main.c
459c
if(top > 16*MB){
conf.upages = (conf.npage*60)/100;
poolsetparam("Image", 0, 0, 4*1024*1024);
}else
conf.upages = (conf.npage*40)/100;
.
61d
7a
#include "pool.h"
.
## diffname carrera/main.c 1997/1210
## diff -e /n/emeliedump/1997/1101/sys/src/brazil/carrera/main.c /n/emeliedump/1997/1210/sys/src/brazil/carrera/main.c
492a
return 1;
}
if(cistrcmp(class, "ether") == 0 && ctlrno == 0){
strcpy(isa->type, "sonic");
.
491c
if(cistrcmp(class, "audio") == 0 && ctlrno == 0){
.
484a
int
cistrcmp(char *a, char *b)
{
int ac, bc;
for(;;){
ac = *a++;
bc = *b++;
if(ac >= 'A' && ac <= 'Z')
ac = 'a' + (ac - 'A');
if(bc >= 'A' && bc <= 'Z')
bc = 'a' + (bc - 'A');
ac -= bc;
if(ac)
return ac;
if(bc == 0)
break;
}
return 0;
}
.
## diffname carrera/main.c 1997/1211
## diff -e /n/emeliedump/1997/1210/sys/src/brazil/carrera/main.c /n/emeliedump/1997/1211/sys/src/brazil/carrera/main.c
302a
/* Invalidate R4030 I/O cache */
for(i=0; i<8; i++){
*(ulong*)0xE0000034 = i<<2;
*(ulong*)0xE000004C = 0;
}
.
## diffname carrera/main.c 1998/0121
## diff -e /n/emeliedump/1997/1211/sys/src/brazil/carrera/main.c /n/emeliedump/1998/0121/sys/src/brazil/carrera/main.c
465c
if(top > 16*MB/BY2PG){
.
## diffname carrera/main.c 1998/0502
## diff -e /n/emeliedump/1998/0121/sys/src/brazil/carrera/main.c /n/emeliedump/1998/0502/sys/src/brazil/carrera/main.c
61a
links();
.
## diffname carrera/main.c 1998/0610
## diff -e /n/emeliedump/1998/0502/sys/src/brazil/carrera/main.c /n/emeliedump/1998/0610/sys/src/brazil/carrera/main.c
415a
lock(&active);
active.machs &= ~(1<<m->machno);
active.exiting = 1;
unlock(&active);
.
147c
configreg = ((int(*)(void))((ulong)cleancache|0xA0000000))();
.
58a
print("Brazil config reg %#lux\n", configreg);
.
33a
int configreg;
.
## diffname carrera/main.c 1998/0916
## diff -e /n/emeliedump/1998/0610/sys/src/brazil/carrera/main.c /n/emeliedump/1998/0916/sys/src/brazil/carrera/main.c
484a
conf.nswppo = 4096;
.
## diffname carrera/main.c 1999/0128
## diff -e /n/emeliedump/1998/0916/sys/src/brazil/carrera/main.c /n/emeliedump/1999/0128/sys/src/brazil/carrera/main.c
475c
poolsetparam("Image", 0, 0, 4*1024*1024, nil);
.
## diffname carrera/main.c 1999/0629
## diff -e /n/emeliedump/1999/0128/sys/src/brazil/carrera/main.c /n/emeliedump/1999/0629/sys/src/brazil/carrera/main.c
339a
cnameclose(up->slash->name);
up->slash->name = newcname("/");
.
60c
print("Brazil config reg %#ux\n", configreg);
.
## diffname carrera/main.c 1999/0711
## diff -e /n/emeliedump/1999/0629/sys/src/brazil/carrera/main.c /n/emeliedump/1999/0711/sys/src/brazil/carrera/main.c
477c
poolconfig(imagmem, 0, 4*1024*1024, 0, nil);
.
## diffname carrera/main.c 1999/0712
## diff -e /n/emeliedump/1999/0711/sys/src/brazil/carrera/main.c /n/emeliedump/1999/0712/sys/src/brazil/carrera/main.c
477c
poolsetparam("Image", 0, 0, 4*1024*1024, nil);
.
## diffname carrera/main.c 1999/0713
## diff -e /n/emeliedump/1999/0712/sys/src/brazil/carrera/main.c /n/emeliedump/1999/0713/sys/src/brazil/carrera/main.c
477c
imagmem->minarena = 4*1024*1024;
.
## diffname carrera/main.c 1999/1005
## diff -e /n/emeliedump/1999/0713/sys/src/brazil/carrera/main.c /n/emeliedump/1999/1005/sys/src/brazil/carrera/main.c
433c
rdb();
.
67a
noprint = 0;
.
59,60c
// print("Brazil config reg %#ux\n", configreg);
.
56a
iprint("Brazil\n"); /**/
.
44a
noprint = 1;
.
40a
extern int noprint;
.
## diffname carrera/main.c 1999/1031
## diff -e /n/emeliedump/1999/1005/sys/src/brazil/carrera/main.c /n/emeliedump/1999/1031/sys/src/9/carrera/main.c
62d
59c
iprint("Plan 9\n"); /**/
.
## diffname carrera/main.c 2001/0424
## diff -e /n/emeliedump/1999/1031/sys/src/9/carrera/main.c /n/emeliedump/2001/0424/sys/src/9/carrera/main.c
591a
}
/*
* physical segs unique to the carrera
*/
static Physseg myphyssegs[] =
{
{ SG_PHYSICAL, "eisaio", Eisaphys, 64*1024, 0, 0 },
{ SG_PHYSICAL, "eisavga", Eisavgaphys, 128*1024, 0, 0 },
{ SG_PHYSICAL, "bootrom", 0x1fc00000, 256*1024, 0, 0 },
{ SG_PHYSICAL, "nvram", 0xe0009000, 12*1024, 0, 0 },
{ SG_PHYSICAL, "fb", 0x40000000, 4*1024*1024, 0, 0 },
};
static void
addps(void)
{
int i;
for(i = 0; i < nelem(myphyssegs); i++)
addphysseg(&myphyssegs[i]);
.
65a
addps();
.
42a
static void addps(void);
.
## diffname carrera/main.c 2001/0527 # deleted
## diff -e /n/emeliedump/2001/0424/sys/src/9/carrera/main.c /n/emeliedump/2001/0527/sys/src/9/carrera/main.c
1,616d
|