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

1996/1024/port/devaudio.c (diff list | history)

1996/0315/sys/src/9/port/devaudio.c:121,1311996/1024/sys/src/9/port/devaudio.c:121,132 (short | long | prev | next)
1995/0214    
	int	clri8; 
	int	clri16; 
	int	clri401; 
1996/1024    
	int	dma; 
1995/0214    
} blaster; 
 
1995/0119    
static	void	swab(uchar*); 
 
1995/0214    
static	char	Emajor[]	= "SoundBlaster version too old"; 
1996/1024    
static	char	Emajor[]	= "soundblaster not responding/wrong version"; 
1995/0119    
static	char	Emode[]		= "illegal open mode"; 
static	char	Evolume[]	= "illegal volume specifier"; 
 
1996/0315/sys/src/9/port/devaudio.c:334,3441996/1024/sys/src/9/port/devaudio.c:335,345
1995/0119    
	if(b == 0) 
		goto shutdown; 
 
1995/0214    
	dmasetup(Dma, b->virt, Bufsize, audio.amode == Aread); 
1996/1024    
	dmasetup(blaster.dma, b->virt, Bufsize, audio.amode == Aread); 
1995/0119    
	return; 
 
shutdown: 
1995/0214    
	dmaend(Dma); 
1996/1024    
	dmaend(blaster.dma); 
1995/0119    
	sbcmd(0xd9);				/* exit at end of count */ 
	sbcmd(0xd5);				/* pause */ 
	audio.curcount = 0; 
1996/0315/sys/src/9/port/devaudio.c:356,3621996/1024/sys/src/9/port/devaudio.c:357,363
1995/0221    
	int speed; 
1995/0119    
 
1995/0214    
	ilock(&blaster); 
	dmaend(Dma); 
1996/1024    
	dmaend(blaster.dma); 
1995/0221    
	if(audio.amode == Aread) { 
1995/0119    
		sbcmd(0x42);			/* input sampling rate */ 
1995/0221    
		speed = audio.livol[Vspeed]; 
1996/0315/sys/src/9/port/devaudio.c:511,5161996/1024/sys/src/9/port/devaudio.c:512,518
1995/0119    
	int i; 
 
1995/0214    
	sbconf.port = 0x220; 
1996/1024    
	sbconf.dma = 5; 
1995/0214    
	sbconf.irq = 7; 
	if(isaconfig("audio", 0, &sbconf) == 0) 
		return; 
1996/0315/sys/src/9/port/devaudio.c:523,5291996/1024/sys/src/9/port/devaudio.c:525,531
1995/0214    
	case 0x280: 
		break; 
	default: 
		print("bad sb16 port 0x%x\n", sbconf.port); 
1996/1024    
		print("devaudio: bad sb16 port 0x%x\n", sbconf.port); 
1995/0214    
		return; 
	} 
	switch(sbconf.irq){ 
1996/0315/sys/src/9/port/devaudio.c:533,5421996/1024/sys/src/9/port/devaudio.c:535,546
1995/0214    
	case 10: 
		break; 
	default: 
		print("bad sb16 irq %d\n", sbconf.irq); 
1996/1024    
		print("devaudio: bad sb16 irq %d\n", sbconf.irq); 
1995/0214    
		return; 
	} 
 
1996/1024    
	blaster.dma = sbconf.dma; 
 
1995/0214    
	blaster.reset = sbconf.port + 0x6; 
	blaster.read = sbconf.port + 0xa; 
	blaster.write = sbconf.port + 0xc; 
1996/0315/sys/src/9/port/devaudio.c:548,5541996/1024/sys/src/9/port/devaudio.c:552,558
1995/0214    
	blaster.clri16 = sbconf.port + 0xf; 
	blaster.clri401 = sbconf.port + 0x100; 
 
1995/0119    
	seteisadma(Dma, audiodmaintr); 
1996/1024    
	seteisadma(blaster.dma, audiodmaintr); 
1995/0214    
	setvec(Int0vec+sbconf.irq, pcaudiosbintr, 0); 
1995/0119    
 
1995/0214    
	audio.amode = Aclosed; 
1996/0315/sys/src/9/port/devaudio.c:570,5761996/1024/sys/src/9/port/devaudio.c:574,580
1995/0119    
	audio.minor = sbread(); 
 
	if(audio.major != 4) { 
		print("bad soundblaster model #%.2x #.2x\n", audio.major, audio.minor); 
1996/1024    
		print("bad soundblaster model #%.2x #%.2x; not SB 16\n", audio.major, audio.minor); 
1995/0119    
		return; 
	} 
	/* 
1996/0315/sys/src/9/port/devaudio.c:588,5941996/1024/sys/src/9/port/devaudio.c:592,598
1995/0214    
		(sbconf.irq==7)? 4: 
		(sbconf.irq==10)? 8: 
1995/0119    
		0); 
	mxcmd(0x81, 1<<Dma);	/* dma */ 
1996/1024    
	mxcmd(0x81, 1<<blaster.dma);	/* dma */ 
1995/0119    
} 
 
Chan* 


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