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

1994/0619/carrera/trap.c (diff list | history)

1993/0903/sys/src/9/carrera/trap.c:278,2891993/0904/sys/src/9/carrera/trap.c:278,323 (short | long)
1993/0903    
void 
intr(Ureg *ur) 
{ 
1993/0904    
	uchar devint; 
1993/0903    
	ulong cause = ur->cause; 
 
	m->intr++; 
	cause &= INTR7|INTR6|INTR5|INTR4|INTR3|INTR2|INTR1|INTR0; 
 
	iprint("intr %lux\n", cause); 
1993/0904    
	if(cause & INTR3) { 
		devint = *(uchar*)Intcause; 
		switch(devint) { 
		default: 
			panic("unknown devint=#%lux", devint); 
 
		case 0x28:		/* Serial 1 */ 
			NS16552intr(0); 
			break; 
		case 0x24:		/* Serial 2 */ 
			NS16552intr(1); 
			break; 
		case 0x14: 
			etherintr(); 
			break; 
		} 
		cause &= ~INTR3; 
	} 
 
	if(cause & INTR4) { 
		devint = *(uchar*)I386ack; 
		iprint("i386ack=#%lux\n", devint); 
		cause &= ~INTR4; 
	} 
 
	if(cause & INTR7) { 
		clock(ur); 
		cause &= ~INTR7; 
	} 
 
	if(cause) { 
		iprint("cause %lux\n", cause); 
		exit(1); 
	} 
1993/0903    
} 
 
char* 
1993/0903/sys/src/9/carrera/trap.c:512,5381993/0904/sys/src/9/carrera/trap.c:546,576
1993/0903    
	up->nerrlab = 0; 
	sp = ur->sp; 
	ret = -1; 
	if(!waserror()) { 
		if(up->scallnr >= sizeof systab/sizeof systab[0]){ 
			pprint("bad sys call number %d pc %lux\n", up->scallnr, ur->pc); 
			postnote(up, 1, "sys: bad sys call", NDebug); 
			error(Ebadarg); 
		} 
1993/0904    
	if(waserror()) 
		goto error; 
1993/0903    
 
		if(sp & (BY2WD-1)){ 
			pprint("odd sp in sys call pc %lux sp %lux\n", ur->pc, ur->sp); 
			postnote(up, 1, "sys: odd stack", NDebug); 
			error(Ebadarg); 
		} 
1993/0904    
	if(up->scallnr >= sizeof systab/sizeof systab[0]){ 
		pprint("bad sys call %d pc %lux\n", up->scallnr, ur->pc); 
		postnote(up, 1, "sys: bad sys call", NDebug); 
		error(Ebadarg); 
	} 
1993/0903    
 
		if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-sizeof(Sargs))) 
			validaddr(sp, sizeof(Sargs), 0); 
                 
		up->s = *((Sargs*)(sp+BY2WD)); 
		up->psstate = sysctab[up->scallnr]; 
		ret = (*systab[up->scallnr])(up->s.args); 
		poperror(); 
1993/0904    
	if(sp & (BY2WD-1)){ 
		pprint("odd sp in sys call pc %lux sp %lux\n", ur->pc, ur->sp); 
		postnote(up, 1, "sys: odd stack", NDebug); 
		error(Ebadarg); 
1993/0903    
	} 
1993/0904    
 
	if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-sizeof(Sargs))) 
		validaddr(sp, sizeof(Sargs), 0); 
 
	up->s = *((Sargs*)(sp+BY2WD)); 
	up->psstate = sysctab[up->scallnr]; 
 
	ret = (*systab[up->scallnr])(up->s.args); 
	poperror(); 
 
error: 
1993/0903    
	ur->pc += 4; 
	up->nerrlab = 0; 
	up->psstate = 0; 
1993/0904/sys/src/9/carrera/trap.c:205,2101993/0905/sys/src/9/carrera/trap.c:205,211 (short | long)
1993/0903    
			kernfault(ur, ecode); 
 
		if(!user && (ur->badvaddr & KSEGM) == KSEG3) { 
1993/0905    
iprint("kf %lux %lux\n", ur->pc, ur->r31); 
1993/0903    
			kfault(ur->badvaddr); 
			break; 
		} 
1993/0904/sys/src/9/carrera/trap.c:285,2911993/0905/sys/src/9/carrera/trap.c:286,292
1993/0903    
	cause &= INTR7|INTR6|INTR5|INTR4|INTR3|INTR2|INTR1|INTR0; 
 
1993/0904    
	if(cause & INTR3) { 
		devint = *(uchar*)Intcause; 
1993/0905    
		devint = IO(uchar, Intcause); 
1993/0904    
		switch(devint) { 
		default: 
			panic("unknown devint=#%lux", devint); 
1993/0904/sys/src/9/carrera/trap.c:304,3101993/0905/sys/src/9/carrera/trap.c:305,311
1993/0904    
	} 
 
	if(cause & INTR4) { 
		devint = *(uchar*)I386ack; 
1993/0905    
		devint = IO(uchar, I386ack); 
1993/0904    
		iprint("i386ack=#%lux\n", devint); 
		cause &= ~INTR4; 
	} 
1993/0905/sys/src/9/carrera/trap.c:204,2111993/0906/sys/src/9/carrera/trap.c:204,210 (short | long)
1993/0903    
		if(up == 0) 
			kernfault(ur, ecode); 
 
		if(!user && (ur->badvaddr & KSEGM) == KSEG3) { 
1993/0905    
iprint("kf %lux %lux\n", ur->pc, ur->r31); 
1993/0906    
		if(!user && (ur->badvaddr & KMAPMASK) == KMAPADDR) { 
1993/0903    
			kfault(ur->badvaddr); 
			break; 
		} 
1993/0905/sys/src/9/carrera/trap.c:392,3981993/0906/sys/src/9/carrera/trap.c:391,397
1993/0903    
 
	l = &ur->status; 
	for(i=0; i<sizeof regname/sizeof(char*); i+=2, l+=2) 
		print("%s\t%.8lux\t%s\t%.8lux\n", regname[i], l[0], regname[i+1], l[1]); 
1993/0906    
		print("%s\t0x%.8lux\t%s\t0x%.8lux\n", regname[i], l[0], regname[i+1], l[1]); 
1993/0903    
} 
 
int 
1993/0906/sys/src/9/carrera/trap.c:244,2501993/0907/sys/src/9/carrera/trap.c:244,250 (short | long)
1993/0903    
			postnote(up, 1, buf, NDebug); 
			break; 
		} 
		print("kernel%d %s pc=%lux\n", m->machno, excname[ecode], ur->pc); 
1993/0907    
		print("kernel %s pc=%lux\n", excname[ecode], ur->pc); 
1993/0903    
		dumpregs(ur); 
		dumpstack(); 
		if(m->machno == 0) 
1993/0906/sys/src/9/carrera/trap.c:285,3041993/0907/sys/src/9/carrera/trap.c:285,311
1993/0903    
	cause &= INTR7|INTR6|INTR5|INTR4|INTR3|INTR2|INTR1|INTR0; 
 
1993/0904    
	if(cause & INTR3) { 
1993/0905    
		devint = IO(uchar, Intcause); 
1993/0904    
		switch(devint) { 
		default: 
			panic("unknown devint=#%lux", devint); 
1993/0907    
		for(;;) { 
			devint = IO(uchar, Intcause); 
			if(devint == 0) 
				break; 
			switch(devint) { 
			default: 
				panic("unknown devint=#%lux", devint); 
1993/0904    
 
		case 0x28:		/* Serial 1 */ 
			NS16552intr(0); 
			break; 
		case 0x24:		/* Serial 2 */ 
			NS16552intr(1); 
			break; 
		case 0x14: 
			etherintr(); 
			break; 
1993/0907    
			case 0x28:		/* Serial 1 */ 
				NS16552intr(0); 
				break; 
			case 0x24:		/* Serial 2 */ 
				NS16552intr(1); 
				break; 
			case 0x14: 
				etherintr(); 
				break; 
			case 0x1C: 
				kbdintr(); 
				break; 
			} 
1993/0904    
		} 
		cause &= ~INTR3; 
	} 
1993/0907/sys/src/9/carrera/trap.c:309,3151993/0908/sys/src/9/carrera/trap.c:309,322 (short | long)
1993/0904    
		} 
		cause &= ~INTR3; 
	} 
                 
1993/0908    
	if(cause & INTR2) { 
		iprint("R4030 Interrupt\n"); 
		iprint(" ISR #%lux\n", IO(ulong, R4030Isr)); 
		iprint(" ET  #%lux\n", IO(ulong, R4030Et)); 
		iprint(" RFA #%lux\n", IO(ulong, R4030Rfa)); 
		iprint(" MFA #%lux\n", IO(ulong, R4030Mfa)); 
		cause &= ~INTR2; 
	} 
1993/0904    
	if(cause & INTR4) { 
1993/0905    
		devint = IO(uchar, I386ack); 
1993/0904    
		iprint("i386ack=#%lux\n", devint); 
1993/0908/sys/src/9/carrera/trap.c:368,3761993/0918/sys/src/9/carrera/trap.c:368,376 (short | long)
1993/0903    
kernfault(Ureg *ur, int code) 
{ 
	print("panic: kfault %s badvaddr=0x%lux\n", excname[code], ur->badvaddr); 
	kpteprint(ur); 
	print("u=0x%lux status=0x%lux pc=0x%lux sp=0x%lux\n", 
				up, ur->status, ur->pc, ur->sp); 
1993/0918    
	kpteprint(ur); 
1993/0903    
	panic("kfault"); 
} 
 
1993/0918/sys/src/9/carrera/trap.c:613,6181993/0930/sys/src/9/carrera/trap.c:613,619 (short | long)
1993/0903    
	memmove(cur, ur, sizeof(Ureg)); 
 
	cur->pc += 4; 
1993/0930    
	cur->status |= CU0; 
1993/0903    
 
	/* Things from bottom of syscall we never got to execute */ 
	p->psstate = 0; 
1993/0930/sys/src/9/carrera/trap.c:305,3101993/1001/sys/src/9/carrera/trap.c:305,313 (short | long)
1993/0907    
			case 0x1C: 
				kbdintr(); 
				break; 
1993/1001    
			case 0x20: 
				mouseintr(); 
				break; 
1993/0907    
			} 
1993/0904    
		} 
		cause &= ~INTR3; 
1993/1001/sys/src/9/carrera/trap.c:370,3781993/1005/sys/src/9/carrera/trap.c:370,378 (short | long)
1993/0903    
void 
kernfault(Ureg *ur, int code) 
{ 
	print("panic: kfault %s badvaddr=0x%lux\n", excname[code], ur->badvaddr); 
	print("u=0x%lux status=0x%lux pc=0x%lux sp=0x%lux\n", 
				up, ur->status, ur->pc, ur->sp); 
1993/1005    
	print("kfault %s badvaddr=0x%lux\n", excname[code], ur->badvaddr); 
	print("UP=0x%lux SR=0x%lux PC=0x%lux R31=%lux SP=0x%lux\n", 
				up, ur->status, ur->pc, ur->r31, ur->sp); 
1993/0918    
	kpteprint(ur); 
1993/0903    
	panic("kfault"); 
} 
1993/1001/sys/src/9/carrera/trap.c:471,4761993/1005/sys/src/9/carrera/trap.c:471,477
1993/0903    
	*(ulong*)(sp+2*BY2WD) = sp+3*BY2WD;	/* arg 2 is string */ 
	up->svr1 = ur->r1;			/* save away r1 */ 
	ur->r1 = (ulong)up->ureg;		/* arg 1 is ureg* */ 
1993/1005    
	*(ulong*)(sp+1*BY2WD) = (ulong)u->ureg;	/* arg 1 0(FP) is ureg* */ 
1993/0903    
	*(ulong*)(sp+0*BY2WD) = 0;		/* arg 0 is pc */ 
	ur->usp = sp; 
	ur->pc = (ulong)up->notify; 
1993/1005/sys/src/9/carrera/trap.c:471,4771993/1006/sys/src/9/carrera/trap.c:471,477 (short | long)
1993/0903    
	*(ulong*)(sp+2*BY2WD) = sp+3*BY2WD;	/* arg 2 is string */ 
	up->svr1 = ur->r1;			/* save away r1 */ 
	ur->r1 = (ulong)up->ureg;		/* arg 1 is ureg* */ 
1993/1005    
	*(ulong*)(sp+1*BY2WD) = (ulong)u->ureg;	/* arg 1 0(FP) is ureg* */ 
1993/1006    
	*(ulong*)(sp+1*BY2WD) = (ulong)up->ureg;	/* arg 1 0(FP) is ureg* */ 
1993/0903    
	*(ulong*)(sp+0*BY2WD) = 0;		/* arg 0 is pc */ 
	ur->usp = sp; 
	ur->pc = (ulong)up->notify; 
1993/1006/sys/src/9/carrera/trap.c:205,2111993/1013/sys/src/9/carrera/trap.c:205,211 (short | long)
1993/0903    
			kernfault(ur, ecode); 
 
1993/0906    
		if(!user && (ur->badvaddr & KMAPMASK) == KMAPADDR) { 
1993/0903    
			kfault(ur->badvaddr); 
1993/1013    
			kfault(ur); 
1993/0903    
			break; 
		} 
 
1993/1013/sys/src/9/carrera/trap.c:406,4111993/1015/sys/src/9/carrera/trap.c:406,412 (short | long)
1993/0903    
	else 
		print("registers for kernel\n"); 
 
1993/1015    
 
1993/0903    
	l = &ur->status; 
	for(i=0; i<sizeof regname/sizeof(char*); i+=2, l+=2) 
1993/0906    
		print("%s\t0x%.8lux\t%s\t0x%.8lux\n", regname[i], l[0], regname[i+1], l[1]); 
1993/1015/sys/src/9/carrera/trap.c:681,6831993/1022/sys/src/9/carrera/trap.c:681,694 (short | long)
1993/0903    
	memmove(pureg, uva, n); 
	xp->status = status; 
} 
1993/1022    
 
/* Give enough context in the ureg to produce a kernel stack for 
 * a sleeping process 
 */ 
void 
setkernur(Ureg *xp, Proc *p) 
{ 
	xp->pc = p->sched.pc; 
	xp->sp = p->sched.sp; 
	xp->r31 = (ulong)sched; 
} 
1993/1022/sys/src/9/carrera/trap.c:201,2061993/1209/sys/src/9/carrera/trap.c:201,213 (short | long)
1993/0903    
	case CTLBM: 
	case CTLBL: 
	case CTLBS: 
1993/1209    
{ 
((ulong*)0xA0090000)[0] = ur->pc; 
((ulong*)0xA0090000)[1] = ur->badvaddr; 
((ulong*)0xA0090000)[2] = ur->cause; 
((ulong*)0xA0090000)[3] = 0x12345678; 
((ulong*)0xA0090000)[4] = 0x87654321; 
} 
1993/0903    
		if(up == 0) 
			kernfault(ur, ecode); 
 
1993/1209/sys/src/9/carrera/trap.c:201,2131993/1212/sys/src/9/carrera/trap.c:201,206 (short | long)
1993/0903    
	case CTLBM: 
	case CTLBL: 
	case CTLBS: 
1993/1209    
{ 
((ulong*)0xA0090000)[0] = ur->pc; 
((ulong*)0xA0090000)[1] = ur->badvaddr; 
((ulong*)0xA0090000)[2] = ur->cause; 
((ulong*)0xA0090000)[3] = 0x12345678; 
((ulong*)0xA0090000)[4] = 0x87654321; 
} 
1993/0903    
		if(up == 0) 
			kernfault(ur, ecode); 
 
1993/1209/sys/src/9/carrera/trap.c:299,3051993/1212/sys/src/9/carrera/trap.c:292,297
1993/0907    
			switch(devint) { 
			default: 
				panic("unknown devint=#%lux", devint); 
1993/0904    
                 
1993/0907    
			case 0x28:		/* Serial 1 */ 
				NS16552intr(0); 
				break; 
1993/1209/sys/src/9/carrera/trap.c:329,3351993/1212/sys/src/9/carrera/trap.c:321,327
1993/0908    
	} 
1993/0904    
	if(cause & INTR4) { 
1993/0905    
		devint = IO(uchar, I386ack); 
1993/0904    
		iprint("i386ack=#%lux\n", devint); 
1993/1212    
		iprint("i386ACK #%lux\n", devint); 
1993/0904    
		cause &= ~INTR4; 
	} 
 
1993/1212/sys/src/9/carrera/trap.c:617,6231993/1217/sys/src/9/carrera/trap.c:617,622 (short | long)
1993/0903    
	memmove(cur, ur, sizeof(Ureg)); 
 
	cur->pc += 4; 
1993/0930    
	cur->status |= CU0; 
1993/0903    
 
	/* Things from bottom of syscall we never got to execute */ 
	p->psstate = 0; 
1993/1217/sys/src/9/carrera/trap.c:238,2431993/1219/sys/src/9/carrera/trap.c:238,246 (short | long)
1993/0903    
 
	Default: 
	default: 
1993/1219    
		((ulong*)0xA0020000)[7] = 0x87654321; 
		((void(*)(void))0xA001C020)(); 
 
1993/0903    
		if(user) { 
			spllo(); 
			sprint(buf, "sys: %s", excname[ecode]); 
1993/1217/sys/src/9/carrera/trap.c:278,2841993/1219/sys/src/9/carrera/trap.c:281,287
1993/0903    
void 
intr(Ureg *ur) 
{ 
1993/0904    
	uchar devint; 
1993/1219    
	static uchar devint; 
1993/0903    
	ulong cause = ur->cause; 
 
	m->intr++; 
1993/1217/sys/src/9/carrera/trap.c:285,3131993/1219/sys/src/9/carrera/trap.c:288,312
1993/0903    
	cause &= INTR7|INTR6|INTR5|INTR4|INTR3|INTR2|INTR1|INTR0; 
 
1993/0904    
	if(cause & INTR3) { 
1993/0907    
		for(;;) { 
			devint = IO(uchar, Intcause); 
			if(devint == 0) 
				break; 
			switch(devint) { 
			default: 
				panic("unknown devint=#%lux", devint); 
			case 0x28:		/* Serial 1 */ 
				NS16552intr(0); 
				break; 
			case 0x24:		/* Serial 2 */ 
				NS16552intr(1); 
				break; 
			case 0x14: 
				etherintr(); 
				break; 
			case 0x1C: 
				kbdintr(); 
				break; 
1993/1001    
			case 0x20: 
				mouseintr(); 
				break; 
1993/0907    
			} 
1993/1219    
		devint = IO(uchar, Intcause); 
		switch(devint) { 
		default: 
			panic("unknown devint=#%lux", devint); 
		case 0x28:		/* Serial 1 */ 
			NS16552intr(0); 
			break; 
		case 0x24:		/* Serial 2 */ 
			NS16552intr(1); 
			break; 
		case 0x14: 
			etherintr(); 
			break; 
		case 0x1C: 
			kbdintr(); 
			break; 
		case 0x20: 
			mouseintr(); 
			break; 
1993/0904    
		} 
		cause &= ~INTR3; 
	} 
1993/1219/sys/src/9/carrera/trap.c:238,2441993/1220/sys/src/9/carrera/trap.c:238,244 (short | long)
1993/0903    
 
	Default: 
	default: 
1993/1219    
		((ulong*)0xA0020000)[7] = 0x87654321; 
1993/1220    
		((ulong*)0x80020000)[7] = 0x87654321; 
1993/1219    
		((void(*)(void))0xA001C020)(); 
 
1993/0903    
		if(user) { 
1993/1220/sys/src/9/carrera/trap.c:238,2461993/1222/sys/src/9/carrera/trap.c:238,243 (short | long)
1993/0903    
 
	Default: 
	default: 
1993/1220    
		((ulong*)0x80020000)[7] = 0x87654321; 
1993/1219    
		((void(*)(void))0xA001C020)(); 
                 
1993/0903    
		if(user) { 
			spllo(); 
			sprint(buf, "sys: %s", excname[ecode]); 
1993/1222/sys/src/9/carrera/trap.c:172,1771993/1229/sys/src/9/carrera/trap.c:172,186 (short | long)
1993/0903    
	int user, cop, x, fpchk; 
	char buf[2*ERRLEN], buf1[ERRLEN], *fpexcep; 
 
1993/1229    
	/* 
	 * Retry failed probes of legal addresses from tstbadvaddr 
	 * workaround for the R4400 >2.3 
	 */ 
	if(m->vaddrtst) { 
		m->vaddrtst = 0; 
		return; 
	} 
 
1993/0903    
	ecode = (ur->cause>>2)&EXCMASK; 
	user = ur->status&KUSER; 
 
1993/1229/sys/src/9/carrera/trap.c:329,3351994/0115/sys/src/9/carrera/trap.c:329,334 (short | long)
1993/1212    
		iprint("i386ACK #%lux\n", devint); 
1993/0904    
		cause &= ~INTR4; 
	} 
                 
	if(cause & INTR7) { 
		clock(ur); 
		cause &= ~INTR7; 
1994/0115/sys/src/9/carrera/trap.c:614,6201994/0209/sys/src/9/carrera/trap.c:614,620 (short | long)
1993/0903    
{ 
	Ureg *cur; 
 
	p->sched.sp = (ulong)p->kstack+KSTACK-(sizeof(Ureg)+2*BY2WD); 
1994/0209    
	p->sched.sp = (ulong)p->kstack+KSTACK-UREGSIZE; 
1993/0903    
	p->sched.pc = (ulong)forkret; 
 
	cur = (Ureg*)(p->sched.sp+2*BY2WD); 
1994/0209/sys/src/9/carrera/trap.c:412,4181994/0210/sys/src/9/carrera/trap.c:412,422 (short | long)
1993/1015    
 
1993/0903    
	l = &ur->status; 
	for(i=0; i<sizeof regname/sizeof(char*); i+=2, l+=2) 
1994/0210    
/* 
1993/0906    
		print("%s\t0x%.8lux\t%s\t0x%.8lux\n", regname[i], l[0], regname[i+1], l[1]); 
1994/0210    
*/ 
		print("%s 0x%.8lux %s 0x%.8lux ", regname[i], l[0], regname[i+1], l[1]); 
 
1993/0903    
} 
 
int 
1994/0210/sys/src/9/carrera/trap.c:289,2941994/0220/sys/src/9/carrera/trap.c:289,295 (short | long)
1993/0903    
{ 
1993/1219    
	static uchar devint; 
1993/0903    
	ulong cause = ur->cause; 
1994/0220    
	ulong isr; 
1993/0903    
 
	m->intr++; 
	cause &= INTR7|INTR6|INTR5|INTR4|INTR3|INTR2|INTR1|INTR0; 
1994/0210/sys/src/9/carrera/trap.c:317,3271994/0220/sys/src/9/carrera/trap.c:318,335
1993/0904    
		cause &= ~INTR3; 
	} 
1993/0908    
	if(cause & INTR2) { 
		iprint("R4030 Interrupt\n"); 
		iprint(" ISR #%lux\n", IO(ulong, R4030Isr)); 
		iprint(" ET  #%lux\n", IO(ulong, R4030Et)); 
		iprint(" RFA #%lux\n", IO(ulong, R4030Rfa)); 
		iprint(" MFA #%lux\n", IO(ulong, R4030Mfa)); 
1994/0220    
		isr = IO(ulong, R4030Isr); 
		if(isr & (1<<5)) { 
			audiointr(); 
			isr &= ~(1<<5); 
		} 
		if(isr) { 
			iprint("R4030 Interrupt\n"); 
			iprint(" ISR #%lux\n", IO(ulong, R4030Isr)); 
			iprint(" ET  #%lux\n", IO(ulong, R4030Et)); 
			iprint(" RFA #%lux\n", IO(ulong, R4030Rfa)); 
			iprint(" MFA #%lux\n", IO(ulong, R4030Mfa)); 
		} 
1993/0908    
		cause &= ~INTR2; 
	} 
1993/0904    
	if(cause & INTR4) { 
1994/0220/sys/src/9/carrera/trap.c:289,2951994/0225/sys/src/9/carrera/trap.c:289,295 (short | long)
1993/0903    
{ 
1993/1219    
	static uchar devint; 
1993/0903    
	ulong cause = ur->cause; 
1994/0220    
	ulong isr; 
1994/0225    
	ulong isr, vec; 
1993/0903    
 
	m->intr++; 
	cause &= INTR7|INTR6|INTR5|INTR4|INTR3|INTR2|INTR1|INTR0; 
1994/0220/sys/src/9/carrera/trap.c:319,3261994/0225/sys/src/9/carrera/trap.c:319,327
1993/0904    
	} 
1993/0908    
	if(cause & INTR2) { 
1994/0220    
		isr = IO(ulong, R4030Isr); 
1994/0225    
 
1994/0220    
		if(isr & (1<<5)) { 
			audiointr(); 
1994/0225    
			audiodmaintr(); 
1994/0220    
			isr &= ~(1<<5); 
		} 
		if(isr) { 
1994/0220/sys/src/9/carrera/trap.c:334,3401994/0225/sys/src/9/carrera/trap.c:335,356
1993/0908    
	} 
1993/0904    
	if(cause & INTR4) { 
1993/0905    
		devint = IO(uchar, I386ack); 
1993/1212    
		iprint("i386ACK #%lux\n", devint); 
1994/0225    
		vec = devint&~0x7; 
 
		/* reenable the 8259 interrupt */ 
		if(vec == Int0vec || vec == Int1vec){ 
			EISAOUTB(Int0ctl, EOI); 
			if(vec == Int1vec) 
				EISAOUTB(Int1ctl, EOI); 
		} 
		switch(devint) { 
		default: 
			iprint("i386ACK #%lux\n", devint); 
			break; 
		case 5: 
			audiosbintr(); 
			break; 
		} 
1993/0904    
		cause &= ~INTR4; 
	} 
	if(cause & INTR7) { 
Too many diffs (26 > 25). Stopping.


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