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

2002/0410/pc/mp.c (diff list | history)

2002/0409/sys/src/9/pc/mp.c:19,252002/0410/sys/src/9/pc/mp.c:19,24 (short | long | prev | next)
1997/0327    
static Lock mprdthilock; 
static int mprdthi; 
1998/0910    
static Ref mpvnoref;			/* unique vector assignment */ 
1999/0402    
static Lock mpclocksynclock; 
1997/0327    
 
static char* buses[] = { 
	"CBUSI ", 
2002/0409/sys/src/9/pc/mp.c:43,832002/0410/sys/src/9/pc/mp.c:42,47
1997/0327    
	0, 
}; 
 
2002/0404    
void 
apicclkenable(void) 
{ 
	Apic *apic; 
                 
	/* Uniprocessor local apic init for apic clock */ 
	apic = &mpapic[0]; 
	apic->type = PcmpPROCESSOR; 
	apic->apicno = 0; 
	apic->flags = 0; 
	apic->lintr[0] = ApicIMASK; 
	apic->lintr[1] = ApicIMASK; 
	apic->machno = 0; 
	apic->addr = (ulong*)0xfee00000; 
	machno2apicno[0] = 0; 
                 
	/* 
	 * Map the local APIC. 
	 */ 
	if(mmukmap((ulong)apic->addr, 0, 1024) == 0) 
		return; 
                 
	/* 
	 * These interrupts are local to the processor 
	 * and do not appear in the I/O APIC so it is OK 
	 * to set them now. 
	 */ 
	intrenable(IrqTIMER, clockintr, 0, BUSUNKNOWN, "clock"); 
	intrenable(IrqERROR, lapicerror, 0, BUSUNKNOWN, "lapicerror"); 
	intrenable(IrqSPURIOUS, lapicspurious, 0, BUSUNKNOWN, "lapicspurious"); 
                 
	lapicinit(apic); 
	lapiconline(); 
} 
                 
1997/0327    
static Apic* 
mkprocessor(PCMPprocessor* p) 
{ 
2002/0409/sys/src/9/pc/mp.c:386,3932002/0410/sys/src/9/pc/mp.c:350,355
1997/0327    
static void 
squidboy(Apic* apic) 
{ 
1999/0310    
	ulong x; 
                 
1997/1101    
//	iprint("Hello Squidboy\n"); 
1998/0716    
 
1997/0327    
	machinit(); 
2002/0409/sys/src/9/pc/mp.c:401,4192002/0410/sys/src/9/pc/mp.c:363,371
1997/0327    
	mprdthi |= (1<<apic->apicno)<<24; 
	unlock(&mprdthilock); 
 
2002/0405    
	if(m->havetsc){ 
		/* 
		 * Restrain your octopus! Don't let it go out on the sea! 
		 */ 
		ilock(&mpclocksynclock); 
		x = MACHP(0)->ticks; 
		while(MACHP(0)->ticks == x) 
			; 
		wrmsr(0x10, MACHP(0)->lasttsc); /* synchronize fast counters */ 
		iunlock(&mpclocksynclock); 
	} 
1998/0716    
	lapicinit(apic); 
	lapiconline(); 
2002/0410    
	timersinit(); 
1997/0327    
 
	lock(&active); 
	active.machs |= 1<<m->machno; 
2002/0409/sys/src/9/pc/mp.c:587,5932002/0410/sys/src/9/pc/mp.c:539,545
1997/0405    
	 * and do not appear in the I/O APIC so it is OK 
	 * to set them now. 
	 */ 
1999/0819    
	intrenable(IrqTIMER, clockintr, 0, BUSUNKNOWN, "clock"); 
2002/0410    
	intrenable(IrqTIMER, lapicclock, 0, BUSUNKNOWN, "clock"); 
1999/0819    
	intrenable(IrqERROR, lapicerror, 0, BUSUNKNOWN, "lapicerror"); 
	intrenable(IrqSPURIOUS, lapicspurious, 0, BUSUNKNOWN, "lapicspurious"); 
1998/0716    
	lapiconline(); 


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