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

1999/1005/port/devaudio.c (diff list | history)

1999/0504/sys/src/9/port/devaudio.c:18,231999/1005/sys/src/9/port/devaudio.c:18,24 (short | long | prev | next)
1995/0119    
	Qdir		= 0, 
	Qaudio, 
	Qvolume, 
1999/1005    
	Qstatus, 
1995/0119    
 
	Fmono		= 1, 
1995/0221    
	Fin		= 2, 
1999/0504/sys/src/9/port/devaudio.c:47,521999/1005/sys/src/9/port/devaudio.c:48,54
1995/0119    
{ 
	"audio",	{Qaudio},		0,	0666, 
	"volume",	{Qvolume},		0,	0666, 
1999/1005    
	"audiostat",{Qstatus},		0,	0444, 
1995/0119    
}; 
 
struct	Buf 
1999/0504/sys/src/9/port/devaudio.c:76,811999/1005/sys/src/9/port/devaudio.c:78,85
1995/0221    
	int	lovol[Nvol]; 
1995/0119    
	int	major;		/* SB16 major version number (sb 4) */ 
	int	minor;		/* SB16 minor version number */ 
1999/1005    
	ulong	totcount;	/* how many bytes processed since open */ 
	vlong	tottime;	/* time at which totcount bytes were processed */ 
1995/0119    
 
	Buf	buf[Nbuf];	/* buffers and queues */ 
1995/0217    
	AQueue	empty; 
1999/0504/sys/src/9/port/devaudio.c:399,4041999/1005/sys/src/9/port/devaudio.c:403,409
1995/0119    
	sbcmd(count>>8); 
 
	audio.active = 1; 
1999/1005    
	audio.tottime = todget(nil); 
1995/0119    
	contindma(); 
1995/0214    
	iunlock(&blaster); 
1995/0119    
} 
1999/0504/sys/src/9/port/devaudio.c:490,4951999/1005/sys/src/9/port/devaudio.c:495,501
1998/0317    
	ess1688w(0xB8, x|0x05); 
 
	audio.active = 1; 
1999/1005    
	audio.tottime = todget(nil); 
1998/0317    
	contindma(); 
	iunlock(&blaster); 
} 
1999/0504/sys/src/9/port/devaudio.c:516,5211999/1005/sys/src/9/port/devaudio.c:522,529
1995/0119    
		if(stat & 2) { 
1995/0214    
			ilock(&blaster); 
			dummy = inb(blaster.clri16); 
1999/1005    
			audio.totcount += Bufsize; 
			audio.tottime = todget(nil); 
1995/0119    
			contindma(); 
1995/0214    
			iunlock(&blaster); 
1995/0119    
			audio.intr = 1; 
1999/0504/sys/src/9/port/devaudio.c:538,5431999/1005/sys/src/9/port/devaudio.c:546,553
1998/0317    
 
	if(audio.active){ 
		ilock(&blaster); 
1999/1005    
		audio.totcount += Bufsize; 
		audio.tottime = todget(nil); 
1998/0317    
		contindma(); 
		dummy = inb(blaster.clri8); 
		iunlock(&blaster); 
1999/0504/sys/src/9/port/devaudio.c:625,6301999/1005/sys/src/9/port/devaudio.c:635,642
1995/0119    
	audio.filling = 0; 
	for(i=0; i<Nbuf; i++) 
		putbuf(&audio.empty, &audio.buf[i]); 
1999/1005    
	audio.totcount = 0; 
	audio.tottime = 0LL; 
1995/0214    
	iunlock(&blaster); 
1995/0119    
} 
 
1999/0504/sys/src/9/port/devaudio.c:707,7131999/1005/sys/src/9/port/devaudio.c:719,726
1995/0119    
audioinit(void) 
{ 
1995/0214    
	ISAConf sbconf; 
1995/0119    
	int i; 
1999/1005    
	int i, x; 
	static int irq[] = {2,5,7,10}; 
1995/0119    
 
1995/0214    
	sbconf.port = 0x220; 
1996/1025    
	sbconf.dma = Dma; 
1999/0504/sys/src/9/port/devaudio.c:752,7601999/1005/sys/src/9/port/devaudio.c:765,770
1998/0317    
	blaster.startdma = sb16startdma; 
	blaster.intr = sb16intr; 
 
1996/1024    
	seteisadma(blaster.dma, audiodmaintr); 
1995/0214    
	setvec(Int0vec+sbconf.irq, pcaudiosbintr, 0); 
1995/0119    
                 
1995/0214    
	audio.amode = Aclosed; 
1995/0119    
	resetlevel(); 
 
1999/0504/sys/src/9/port/devaudio.c:789,7951999/1005/sys/src/9/port/devaudio.c:799,811
1995/0119    
	mxvolume(); 
 
	/* 
	 * set up irq/dma chans 
1999/1005    
	 * Attempt to set IRQ/DMA channels. 
	 * On old ISA boards, these registers are writable. 
	 * On Plug-n-Play boards, these are read-only. 
	 * 
	 * To accomodate both, we write to the registers, 
	 * but then use the contents in case the write is 
	 * disallowed. 
1995/0119    
	 */ 
	mxcmd(0x80,			/* irq */ 
1995/0214    
		(sbconf.irq==2)? 1: 
1999/0504/sys/src/9/port/devaudio.c:798,8031999/1005/sys/src/9/port/devaudio.c:814,836
1995/0214    
		(sbconf.irq==10)? 8: 
1995/0119    
		0); 
1996/1024    
	mxcmd(0x81, 1<<blaster.dma);	/* dma */ 
1999/1005    
 
	x = mxread(0x81); 
	for(i=5; i<=7; i++) 
		if(x & (1<<i)){ 
			blaster.dma = i; 
			break; 
		} 
 
	x = mxread(0x80); 
	for(i=0; i<=3; i++) 
		if(x & (1<<i)){ 
			sbconf.irq = irq[i]; 
			break; 
		} 
 
	seteisadma(blaster.dma, audiodmaintr); 
	setvec(Int0vec+sbconf.irq, pcaudiosbintr, 0); 
1995/0119    
} 
 
1997/0327    
static Chan* 
1999/0504/sys/src/9/port/devaudio.c:831,8361999/1005/sys/src/9/port/devaudio.c:864,872
1995/0119    
		error(Eperm); 
		break; 
 
1999/1005    
	case Qstatus: 
		if((omode&7) != OREAD) 
			error(Eperm); 
1995/0119    
	case Qvolume: 
	case Qdir: 
		break; 
1999/0504/sys/src/9/port/devaudio.c:875,8801999/1005/sys/src/9/port/devaudio.c:911,917
1995/0119    
 
	case Qdir: 
	case Qvolume: 
1999/1005    
	case Qstatus: 
1995/0119    
		break; 
 
	case Qaudio: 
1999/0504/sys/src/9/port/devaudio.c:965,9701999/1005/sys/src/9/port/devaudio.c:1002,1013
1995/0214    
		qunlock(&audio); 
1995/0119    
		break; 
 
1999/1005    
	case Qstatus: 
		buf[0] = 0; 
		snprint(buf, sizeof(buf), "bytes %lud\ntime %lld\n", 
			audio.totcount, audio.tottime); 
		return readstr(offset, a, n, buf); 
 
1995/0119    
	case Qvolume: 
		j = 0; 
1995/0221    
		buf[0] = 0; 
1999/0504/sys/src/9/port/devaudio.c:1004,10101999/1005/sys/src/9/port/devaudio.c:1047,1052
1995/0119    
			} 
1995/0221    
			j += snprint(buf+j, sizeof(buf)-j, "\n"); 
1995/0119    
		} 
                 
		return readstr(offset, a, n, buf); 
	} 
	return n0-n; 


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