Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 May 2005 14:50:51 +0200
From:      Hans Petter Selasky <hselasky@c2i.net>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   kern/80977: panic with the vibra16x when trying to record
Message-ID:  <200505131450.52312.hselasky@c2i.net>
Resent-Message-ID: <200505131300.j4DD0Cwm010096@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>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:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200505131450.52312.hselasky>