Fix panic caused by full duplex operation.

From the PR:
---snip---
The vibra16X supports full duplex. I traced the Windows driver, and what is
does is that it programs one DMA channel 8-bit, and the other 16-bit. There
might be some kind of auto detection logic here, because it always uses 8-bit
for playback, even if I play 16-bit sound ...
---snip---

PR:		80977
Submitted by:	Hans Petter Selasky <hselasky@c2i.net>
This commit is contained in:
Alexander Leidinger 2005-09-10 17:33:58 +00:00
parent fe0fc7efe3
commit 0725262365
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=149948

View File

@ -494,7 +494,7 @@ static void
sb_intr(void *arg)
{
struct sb_info *sb = (struct sb_info *)arg;
int reason = 3, c;
int reason, c;
/*
* The Vibra16X has separate flags for 8 and 16 bit transfers, but
@ -570,8 +570,9 @@ sb_setup(struct sb_info *sb)
sb_reset_dsp(sb);
if (sb->bd_flags & BD_F_SB16X) {
/* full-duplex doesn't work! */
pprio = sb->pch.run? 1 : 0;
sndbuf_dmasetup(sb->pch.buffer, pprio? sb->drq1 : NULL);
sndbuf_dmasetup(sb->pch.buffer, pprio? sb->drq1 : sb->drq2);
sb->pch.dch = pprio? 1 : 0;
sndbuf_dmasetup(sb->rch.buffer, pprio? sb->drq2 : sb->drq1);
sb->rch.dch = pprio? 2 : 1;