Subject: kern/21323: full-duplex audio broken
To: None <gnats-bugs@gnats.netbsd.org>
From: None <g.mcgarry@ieee.org>
List: netbsd-bugs
Date: 04/26/2003 11:00:48
>Number:         21323
>Category:       kern
>Synopsis:       full-duplex audio broken
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    kern-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Apr 25 23:01:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Gregory McGarry
>Release:        NetBSD 1.6R
>Organization:
	
>Environment:

System: NetBSD 1.6R
Architecture: i686

eap0 at pci0 dev 10 function 0: vendor 0x1274 product 0x5880 CT5880-C (rev. 0x02
)
eap0: interrupting at irq 5
eap0: SigmaTel STAC9721/23 codec; 18 bit DAC, 18 bit ADC, SigmaTel 3D
audio0 at eap0: full duplex, mmap, independent
cmpci0 at pci0 dev 11 function 0: vendor 0x13f6 product 0x0111 (rev. 0x10)
cmpci0: interrupting at irq 10
audio1 at cmpci0: full duplex, mmap, independent
opl at cmpci0 not configured
mpu at cmpci0 not configured

>Description:

Full-duplex audio is broken.  I think it used to work on 1.5.
I can verify if required.

I've tested it on the hardware listed above and the symptoms are
the same, therefore I suspect the MI audio layer.

In half-duplex mode, either playing or recording, the audio works fine.
In full-duplex mode, the output audio plays OK.  The input audio
is corrupted on the first time round the recording buffer.

The recording buffer is filled with audio.  It is returned to
userspace successfully.  Reads of the recording buffer from user
space on the second time round the receiver buffer return blocks
alternatively filled with new audio and audio from the last time
round the receive buffer.  The problem seems to work itself out
after the second time round, and continues returning data
synchronised with the duplicated first-buffer audio.

At a guess, I think that during full-duplex mode only, a receive
buffer pointer is incorrectly initialised to cause audio_read()
to not synchronise itself with the receive interrupt.

>How-To-Repeat:

Try full-duplex audio operation.

>Fix:

N/A

>Release-Note:
>Audit-Trail:
>Unformatted: