plan 9 kernel history: overview | file list | diff list

1992/0807/ss/main.c (diff list | history)

1992/0802/sys/src/9/ss/main.c:9,151992/0807/sys/src/9/ss/main.c:9,21 (short | long | prev | next)
Created.
rsc Fri Mar 4 12:44:25 2005
1992/0211    
#include	<libg.h> 
1990/1223    
#include	<gnot.h> 
 
1991/0110    
uchar *intrreg; 
1992/0807    
uchar	*intrreg; 
int	model; 
uchar	idprom[32]; 
ulong	romvec;		/* open boot rom vector */ 
int	cpuserver; 
ulong	romputcxsegm; 
ulong	bank[2]; 
1991/0110    
 
1990/1223    
void 
main(void) 
1992/0802/sys/src/9/ss/main.c:23,341992/0807/sys/src/9/ss/main.c:29,43
1990/1223    
	confinit(); 
1992/0619    
	xinit(); 
1990/1226    
	mmuinit(); 
1991/0604    
	screeninit(); 
1992/0807    
	if(conf.monitor) 
		screeninit(); 
1990/1226    
	printinit(); 
1992/0619    
	pageinit(); 
1990/1226    
	trapinit(); 
1990/1223    
	kmapinit(); 
1991/0604    
	ioinit(); 
1992/0807    
	if(!conf.monitor) 
		sccspecial(2, &printq, &kbdq, 9600); 
	pageinit(); 
1990/1226    
	cacheinit(); 
1991/0110    
	intrinit(); 
1990/1223    
	procinit0(); 
1992/0802/sys/src/9/ss/main.c:54,601992/0807/sys/src/9/ss/main.c:63,69
1991/0926    
systemreset(void) 
1990/1223    
{ 
	delay(100); 
1990/1226    
	putb2(ENAB, ENABRESET); 
1992/0807    
	putenab(ENABRESET); 
1990/1223    
} 
 
 
1992/0802/sys/src/9/ss/main.c:98,1031992/0807/sys/src/9/ss/main.c:107,113
1990/1223    
	u->p->mach = m; 
	spllo(); 
1992/0722    
 
1992/0807    
	print("bank 0: %dM  1: %dM\n", bank[0], bank[1]); 
1990/1223    
	u->slash = (*devtab[0].attach)(0); 
	u->dot = clone(u->slash, 0); 
1992/0516    
 
1992/0802/sys/src/9/ss/main.c:194,1991992/0807/sys/src/9/ss/main.c:204,239
1991/0926    
	systemreset(); 
1990/1223    
} 
 
1992/0807    
int 
banksize(ulong addr, ulong nbytes) 
{ 
	int i; 
	ulong min, max, t; 
	ulong va, pa; 
	ulong nmeg; 
 
	nmeg = nbytes/MB; 
	va = 1*MB-2*BY2PG; 
	for(i=0; i<nmeg; i++){ 
		pa = addr+i*MB; 
		putw4(va, PPN(pa)|PTEVALID|PTEKERNEL|PTENOCACHE|PTEWRITE|PTEMAINMEM); 
		*(ulong*)va = pa; 
	} 
	min = ~0; 
	max = 0; 
	for(i=0; i<nmeg; i++){ 
		pa = addr+i*MB; 
		putw4(va, PPN(pa)|PTEVALID|PTEKERNEL|PTENOCACHE|PTEWRITE|PTEMAINMEM); 
		t = *(ulong*)va; 
		if(min > t) 
			min = t; 
		if(max < t) 
			max = t; 
	} 
	putw4(va, INVALIDPTE); 
	return (max-min)/MB+1; 
} 
 
1990/1223    
Conf	conf; 
 
void 
1992/0802/sys/src/9/ss/main.c:200,2291992/0807/sys/src/9/ss/main.c:240,318
1990/1223    
confinit(void) 
{ 
	int mul; 
1992/0715    
	ulong ktop; 
1992/0807    
	ulong i; 
	ulong ktop, va, mbytes; 
1990/1226    
 
1990/1223    
	conf.nmach = 1; 
	if(conf.nmach > MAXMACH) 
		panic("confinit"); 
1992/0619    
 
1992/0801    
	conf.ss2 = 0; 
1991/0111    
	conf.npage0 = (4*1024*1024)/BY2PG;	/* BUG */ 
1991/0115    
	conf.npage1 = (4*1024*1024)/BY2PG;	/* BUG */ 
1990/1223    
	conf.base0 = 0; 
1991/0112    
	conf.base1 = 32*1024*1024; 
1990/1223    
	conf.npage = conf.npage0+conf.npage1; 
1992/0807    
	/* map id prom */ 
	va = 1*MB-BY2PG; 
	putw4(va, PPN(EEPROM)|PTEVALID|PTEKERNEL|PTENOCACHE|PTEIO); 
	memmove(idprom, (char*)(va+0x7d8), 32); 
	if(idprom[0]!=1 || (idprom[1]&0xF0)!=0x50) 
		*(ulong*)va = 0; 
	putw4(va, INVALIDPTE); 
1992/0619    
 
	conf.upages = 1400; 
1992/0807    
	switch(idprom[1]){ 
	case 0x51:		/* sparcstation 1 */ 
	case 0x54:		/* slc */ 
	default: 
		conf.ss2 = 0; 
		conf.vacsize = 65536; 
		conf.vaclinesize = 16; 
		conf.ncontext = 8; 
		conf.npmeg = 128; 
		conf.ss2cachebug = 0; 
		conf.monitor = 1;		/* BUG */ 
		conf.base0 = 0; 
		conf.base1 = 32*MB; 
		break; 
1992/0715    
 
1992/0807    
	case 0x55:		/* sparcstation 2 */ 
		conf.ss2 = 1; 
		conf.vacsize = 65536; 
		conf.vaclinesize = 32; 
		conf.ncontext = 16; 
		conf.npmeg = 256; 
		conf.ss2cachebug = 1; 
		conf.monitor = 0;		/* BUG */ 
		conf.base0 = 0; 
		conf.base1 = 16*MB; 
		break; 
	} 
 
	bank[0] = banksize(conf.base0, 16*MB); 
	bank[1] = banksize(conf.base1, 16*MB); 
	conf.npage0 = (bank[0]*MB)/BY2PG; 
	conf.npage1 = (bank[1]*MB)/BY2PG; 
 
	romputcxsegm = *(ulong*)(romvec+260); 
 
	conf.npage = conf.npage0+conf.npage1; 
	conf.upages = (conf.npage*70)/100; 
	if(cpuserver){ 
		i = conf.npage-conf.upages; 
		if(i > (6*MB)/BY2PG) 
			conf.upages +=  i - ((6*MB)/BY2PG); 
	} 
 
1992/0715    
	ktop = PGROUND((ulong)end); 
	ktop = PADDR(ktop); 
	conf.npage0 -= ktop/BY2PG; 
	conf.base0 += ktop; 
1992/0619    
 
1992/0620    
	mul = conf.upages/700; 
1992/0807    
	mbytes = (conf.npage*BY2PG)>>20; 
	mul = 1 + (mbytes+11)/12; 
	if(mul > 2) 
		mul = 2; 
1992/0620    
 
1990/1223    
	conf.nproc = 50*mul; 
1991/0706    
	conf.nswap = 4096; 
1992/0807    
	if(cpuserver) 
		conf.nswap = conf.npage*2; 
	else 
		conf.nswap = 4096; 
1991/0706    
	conf.nimage = 50; 
1990/1223    
	conf.copymode = 0;		/* copy on write */ 
1991/0926    
	conf.ipif = 8; 
1992/0802/sys/src/9/ss/main.c:230,2351992/0807/sys/src/9/ss/main.c:319,326
1991/0926    
	conf.ip = 64; 
	conf.arp = 32; 
	conf.frag = 32; 
1992/0807    
	if(cpuserver) 
		conf.nproc = 500; 
1990/1231    
} 
 
/* 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)