| plan 9 kernel history: overview | file list | diff list |
1992/0808/ss/main.c (diff list | history)
| 1992/0807/sys/src/9/ss/main.c:5,10 – 1992/0808/sys/src/9/ss/main.c:5,11 (short | long | prev | next) | ||
| 1990/1223 | #include "fns.h" #include "io.h" #include "init.h" | |
| 1992/0808 | #include "rom.h" | |
| 1990/1223 | ||
| 1992/0211 | #include <libg.h> | |
| 1990/1223 | #include <gnot.h> | |
| 1992/0807/sys/src/9/ss/main.c:12,21 – 1992/0808/sys/src/9/ss/main.c:13,24 | ||
| 1992/0807 | uchar *intrreg; int model; uchar idprom[32]; | |
| 1992/0808 | ROM *rom; /* open boot rom vector */ | |
| 1992/0807 | int cpuserver; | |
| 1992/0808 | void (*romputcxsegm)(int, ulong, int); | |
| 1992/0807 | ulong bank[2]; | |
| 1992/0808 | char rombuf[20000]; char mempres[256]; | |
| 1991/0110 | ||
| 1990/1223 | void main(void) | |
| 1992/0807/sys/src/9/ss/main.c:114,119 – 1992/0808/sys/src/9/ss/main.c:117,123 | ||
| 1992/0516 | kproc("alarm", alarmkproc, 0); chandevinit(); | |
| 1990/1226 | ||
| 1992/0808 | ||
| 1991/0926 | if(!waserror()){ | |
| 1991/1102 | ksetterm("sun %s"); | |
| 1991/0927 | ksetenv("cputype", "sparc"); | |
| 1992/0807/sys/src/9/ss/main.c:204,239 – 1992/0808/sys/src/9/ss/main.c:208,295 | ||
| 1991/0926 | systemreset(); | |
| 1990/1223 | } | |
| 1992/0807 |
| |
| 1992/0808 | void scanmem(char *mempres, int n) | |
| 1992/0807 | { int i; | |
| 1992/0808 | ulong va, addr; | |
| 1992/0807 |
| |
| 1992/0808 | for(i=0; i<n; i++){ mempres[i] = 0; addr = i*MB; putw4(va, PPN(addr)|PTEVALID|PTEKERNEL|PTENOCACHE|PTEWRITE|PTEMAINMEM); *(ulong*)va = addr; if(*(ulong*)va == addr){ addr = ~addr; *(ulong*)va = addr; if(*(ulong*)va == addr){ mempres[i] = 1; *(ulong*)va = i + '0'; } } | |
| 1992/0807 | } | |
| 1992/0808 | for(i=0; i<n; i++) if(mempres[i]){ addr = i*MB; putw4(va, PPN(addr)|PTEVALID|PTEKERNEL|PTENOCACHE|PTEWRITE|PTEMAINMEM); mempres[i] = *(ulong*)va; }else mempres[i] = 0; } char name[1024]; void romprops(ulong d, char *namep, ulong p) { static ulong romp; uchar buf[128]; int i, n; romp += sprint(rombuf+romp, "romprops %lux %lux\n", d, p); while(p && *(char*)p){ n = call(rom->conf->getproplen, d, p); if(n>=0 && n<sizeof buf){ call(rom->conf->getprop, d, p, buf); if(strcmp((char*)p, "name")==0){ strcpy(namep, (char*)buf); romp += sprint(rombuf+romp, "`%s'\n", name); }else{ romp += sprint(rombuf+romp, "%lux: %s: ", d, p); for(i=0; i<n; i++) romp += sprint(rombuf+romp, "%.2ux ", buf[i]); romp += sprint(rombuf+romp, "\n"); } }else romp += sprint(rombuf+romp, "%lux: %s(%d)\n", d, p, n); p = call(rom->conf->nextprop, d, p); | |
| 1992/0807 | } | |
| 1992/0808 | void romwalk(ulong d, char* namep) { char *endp; *namep++ = '/'; *namep = 0; while(d){ romprops(d, namep, call(rom->conf->nextprop, d, 0)); endp = namep+strlen(namep); romwalk(call(rom->conf->child, d), endp); *endp = 0; d = call(rom->conf->next, d); } } void fuck(void) { name[0] = 0; romwalk(call(rom->conf->next, 0), name); } | |
| 1990/1223 | Conf conf; void | |
| 1992/0807/sys/src/9/ss/main.c:240,247 – 1992/0808/sys/src/9/ss/main.c:296,303 | ||
| 1990/1223 | confinit(void) { int mul; | |
| 1992/0807 |
| |
| 1992/0808 | ulong i, j; ulong ktop, va, mbytes, nmeg, npg, v; | |
| 1990/1226 | ||
| 1990/1223 | conf.nmach = 1; if(conf.nmach > MAXMACH) | |
| 1992/0807/sys/src/9/ss/main.c:256,263 – 1992/0808/sys/src/9/ss/main.c:312,325 | ||
| 1992/0807 | putw4(va, INVALIDPTE); | |
| 1992/0619 | ||
| 1992/0807 | switch(idprom[1]){ | |
| 1992/0808 | /* sparcstation 1+ BUG: unknown! */ case 0x52: /* IPC 4/40 */ case 0x53: /* sparcstation 1+ 4/65 */ /* fall through */ /* sparcstation 1 */ case 0x51: /* sparcstation 1 4/60 */ case 0x54: /* slc 4/20 */ | |
| 1992/0807 | default: conf.ss2 = 0; conf.vacsize = 65536; | |
| 1992/0807/sys/src/9/ss/main.c:266,276 – 1992/0808/sys/src/9/ss/main.c:328,340 | ||
| 1992/0807 | conf.npmeg = 128; conf.ss2cachebug = 0; conf.monitor = 1; /* BUG */ | |
| 1992/0808 | nmeg = 64; | |
| 1992/0807 | break; | |
| 1992/0715 | ||
| 1992/0807 |
| |
| 1992/0808 | /* sparcstation 2 */ case 0x55: /* sparcstation 2 4/75 */ case 0x56: /* ELC 4/25 */ case 0x57: /* IPX 4/50 */ | |
| 1992/0807 | conf.ss2 = 1; conf.vacsize = 65536; conf.vaclinesize = 32; | |
| 1992/0807/sys/src/9/ss/main.c:278,295 – 1992/0808/sys/src/9/ss/main.c:342,371 | ||
| 1992/0807 | conf.npmeg = 256; conf.ss2cachebug = 1; conf.monitor = 0; /* BUG */ | |
| 1992/0808 | nmeg = 64; | |
| 1992/0807 | break; } | |
| 1992/0808 | scanmem(mempres, nmeg); for(i=0; i<nmeg; i++) if(mempres[i]){ v = mempres[i]; for(j=i+1; j<nmeg && mempres[j]>v; j++) v = mempres[j]; npg = ((v+1)-mempres[i])*MB/BY2PG; if(conf.npage0 == 0){ conf.base0 = i*MB; conf.npage0 = npg; }else if(conf.npage1 < npg){ conf.base1 = i*MB; conf.npage1 = npg; } i = v-'0'; } | |
| 1992/0807 |
| |
| 1992/0808 | bank[0] = conf.npage0*BY2PG/MB; bank[1] = conf.npage1*BY2PG/MB; | |
| 1992/0807 | conf.npage = conf.npage0+conf.npage1; conf.upages = (conf.npage*70)/100; if(cpuserver){ | |
| 1992/0807/sys/src/9/ss/main.c:297,302 – 1992/0808/sys/src/9/ss/main.c:373,380 | ||
| 1992/0807 | if(i > (6*MB)/BY2PG) conf.upages += i - ((6*MB)/BY2PG); } | |
| 1992/0808 | romputcxsegm = rom->putcxsegm; | |
| 1992/0807 | ||
| 1992/0715 | ktop = PGROUND((ulong)end); ktop = PADDR(ktop); | |