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

1994/1120/pc/devastar.c (diff list | history)

1994/1119/sys/src/9/pc/devastar.c:43,491994/1120/sys/src/9/pc/devastar.c:43,49 (short | long | prev | next)
1994/1106    
	 ISA186ien=	 1<<7,		/*  I186 irq enable bit state */ 
	 ISA186idata=	 1<<6,		/*  I186 irq data bit state */ 
1994/1107    
	 ISAmen=	 1<<4,		/*  enable memory to respond to ISA cycles */ 
	 ISAmbank=	 0,		/*  shift for 4 bit memory bank */ 
1994/1120    
	 ISAmbank=	 0xf<<0,		/*  shift for 4 bit memory bank */ 
1994/1107    
	ISAmaddr=	3,		/* bits 14-19 of the boards mem address */ 
1994/1106    
	ISAstat1=	4,		/* board status (1 bit per channel) */ 
	ISAstat2=	5,		/* board status (1 bit per channel) */ 
1994/1119/sys/src/9/pc/devastar.c:297,3081994/1120/sys/src/9/pc/devastar.c:297,310
1994/1114    
static void 
1994/1113    
setpage(Astar *a, ulong offset) 
{ 
	int i; 
1994/1120    
	int i, c; 
1994/1113    
 
	i = APAGE(offset); 
	if(i == a->page) 
		return; 
	outb(a->port+ISActl2, ISAmen|i); 
1994/1120    
 
	c = inb(a->port+ISActl2) & ~ISAmbank; 
	outb(a->port+ISActl2, ISAmen|i|c); 
1994/1113    
	a->page = i; 
} 
 
1994/1119/sys/src/9/pc/devastar.c:394,3991994/1120/sys/src/9/pc/devastar.c:396,402
1994/1118    
			continue; 
1994/1106    
		} 
 
1994/1120    
		/* check all possible names */ 
1994/1107    
		if(strcmp(a->type, "a100i") == 0 || strcmp(a->type,"A100I") == 0) 
			a->ramsize = 16*1024; 
		else if(strcmp(a->type, "a200i") == 0 || strcmp(a->type,"A200I") == 0) 
1994/1119/sys/src/9/pc/devastar.c:404,4091994/1120/sys/src/9/pc/devastar.c:407,413
1994/1107    
			continue; 
1994/1118    
		} 
1994/1108    
 
1994/1120    
		/* defaults */ 
1994/1107    
		if(a->mem == 0) 
1994/1108    
			a->mem = 0xD4000; 
1994/1107    
		if(a->irq == 0) 
1994/1119/sys/src/9/pc/devastar.c:415,4351994/1120/sys/src/9/pc/devastar.c:419,427
1994/1109    
			astar[nastar] = 0; 
1994/1107    
			continue; 
		} 
1994/1119    
		print("serial%d avanstar port 0x%lux addr %lux irq %d\n", i, a->port, 
1994/1120    
		print("serial%d avanstar port 0x%lux addr %lux irq %d\n", a->id, a->port, 
1994/1115    
			a->addr, a->irq); 
1994/1109    
		nastar++; 
1994/1114    
                 
1994/1119    
		/* disable ISA memory response */ 
		c = inb(a->port+ISActl2); 
		outb(a->port+ISActl2, c & ~ISAmen); 
                 
		/* download mode to turn off cpu */ 
1994/1118    
		c = inb(a->port+ISActl1); 
		outb(a->port+ISActl1, c & ~ISAnotdl); 
		a->memsize = Pramsize; 
		a->page = -1; 
1994/1119    
                 
		setvec(Int0vec + a->irq, astarintr, a); 
1994/1107    
	} 
} 
 
1994/1119/sys/src/9/pc/devastar.c:453,4591994/1120/sys/src/9/pc/devastar.c:445,451
1994/1109    
static int 
1994/1107    
astarsetup(Astar *a) 
{ 
1994/1112    
	int i, found; 
1994/1120    
	int i, c, found; 
1994/1107    
 
	/* see if the card exists */ 
	found = 0; 
1994/1119/sys/src/9/pc/devastar.c:473,4891994/1120/sys/src/9/pc/devastar.c:465,494
1994/1107    
		return -1; 
	} 
 
	/* set memory address */ 
1994/1113    
	outb(a->port+ISAmaddr, (a->mem>>12) & 0xfc); 
1994/1115    
	a->gcb = (GCB*)(KZERO | a->mem); 
	a->addr = (uchar*)(KZERO | a->mem); 
1994/1107    
                 
	/* set interrupt level */ 
1994/1120    
	/* check interrupt level */ 
1994/1112    
	if(isairqcode[a->irq] == -1){ 
1994/1107    
		print("Avanstar %d bad irq %d\n", a->id, a->irq); 
		return -1; 
	} 
1994/1111    
 
1994/1120    
	/* set ISA memory address */ 
	outb(a->port+ISAmaddr, (a->mem>>12) & 0xfc); 
	a->gcb = (GCB*)(KZERO | a->mem); 
	a->addr = (uchar*)(KZERO | a->mem); 
 
	/* set up interrupt level, reset processor, leave interrupts off */ 
	c = inb(a->port+ISActl1); 
	c &= ~(ISAnotdl|ISAien|ISAirq); 
	c |= isairqcode[a->irq]; 
	outb(a->port+ISActl1, c); 
	setvec(Int0vec + a->irq, astarintr, a); 
 
	/* disable ISA memory response */ 
	c = inb(a->port+ISActl2); 
	outb(a->port+ISActl2, c & ~ISAmen); 
	a->memsize = 0; 
	a->page = -1; 
 
1994/1111    
	return 0; 
} 
 
1994/1119/sys/src/9/pc/devastar.c:717,7231994/1120/sys/src/9/pc/devastar.c:722,728
1994/1113    
static void 
startcp(Astar *a) 
{ 
	int n, i, sz; 
1994/1120    
	int c, n, i, sz; 
1994/1113    
	uchar *x; 
	CCB *ccb; 
1994/1114    
	Astarchan *ac; 
1994/1119/sys/src/9/pc/devastar.c:727,7351994/1120/sys/src/9/pc/devastar.c:732,740
1994/1113    
 
	/* take board out of download mode and enable IRQ */ 
1994/1119    
print("out of download\n"); 
1994/1113    
	outb(a->port+ISActl1, ISAien|isairqcode[a->irq]|ISAnotdl); 
1994/1120    
	c = inb(a->port+ISActl1); 
	outb(a->port+ISActl1, c|ISAien|ISAnotdl); 
1994/1113    
	a->memsize = a->ramsize; 
1994/1116    
	setpage(a, 0); 
	if(a->memsize <= Pagesize) 
		a->needpage = 0; 
	else 
1994/1119/sys/src/9/pc/devastar.c:827,8321994/1120/sys/src/9/pc/devastar.c:832,838
1994/1116    
		a->needpage = 1; 
1994/1113    
 
		/* enable ISA access to first 16k */ 
1994/1120    
		a->page = -1; 
1994/1116    
		setpage(a, 0); 
1994/1113    
 
1994/1115    
	} else if(strncmp(cmsg, "sharedmem", 9) == 0){ 
1994/1119/sys/src/9/pc/devastar.c:836,8421994/1120/sys/src/9/pc/devastar.c:842,849
1994/1115    
		a->memsize = a->ramsize; 
 
		/* enable ISA access to first 16k */ 
		outb(a->port+ISActl2, ISAmen); 
1994/1120    
		a->page = -1; 
		setpage(a, 0); 
1994/1115    
 
1994/1113    
	} else if(strncmp(cmsg, "run", 3) == 0){ 
1994/1115    
		/* start up downloaded program */ 


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