kern/80977: panic with the vibra16x when trying to record

Hans Petter Selasky hselasky at c2i.net
Fri May 13 13:00:14 GMT 2005


>Number:         80977
>Category:       kern
>Synopsis:       panic with the vibra16x when trying to record
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri May 13 13:00:12 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     HPS
>Release:        FreeBSD 6.0-CURRENT i386
>Organization:
>Environment:
System: FreeBSD 6.0-CURRENT FreeBSD 6.0-CURRENT #45: Mon Mar 21 15:40:17 CET 
2005 root@:/usr/obj/usr/src/sys/custom i386

>Description:
panic with the vibra16x when trying to record

>How-To-Repeat:

>Fix:

*** sys/dev/sound/isa/sb16.c.ref        Wed Oct 20 22:10:18 2004
--- sys/dev/sound/isa/sb16.c    Mon Nov 22 17:56:05 2004
***************
*** 478,484 ****
  sb_intr(void *arg)
  {
        struct sb_info *sb = (struct sb_info *)arg;
!       int reason = 3, c;
  
        /*
         * The Vibra16X has separate flags for 8 and 16 bit transfers, but
--- 478,484 ----
  sb_intr(void *arg)
  {
        struct sb_info *sb = (struct sb_info *)arg;
!       int reason, c;
  
        /*
         * The Vibra16X has separate flags for 8 and 16 bit transfers, but
***************
*** 554,561 ****
        sb_reset_dsp(sb);
  
        if (sb->bd_flags & BD_F_SB16X) {
                pprio = sb->pch.run? 1 : 0;
!               sndbuf_dmasetup(sb->pch.buffer, pprio? sb->drq1 : NULL);
                sb->pch.dch = pprio? 1 : 0;
                sndbuf_dmasetup(sb->rch.buffer, pprio? sb->drq2 : sb->drq1);
                sb->rch.dch = pprio? 2 : 1;
--- 554,562 ----
        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 : sb->drq2);
                sb->pch.dch = pprio? 1 : 0;
                sndbuf_dmasetup(sb->rch.buffer, pprio? sb->drq2 : sb->drq1);
                sb->rch.dch = pprio? 2 : 1;


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 ...
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list