Some bugs and patches

Luigi Rizzo rizzo at icir.org
Tue Apr 19 10:43:20 PDT 2005


hi,
you should surely post submit a PR so the patches are archived.
I suggest to post the things separately so people can deal with them
one at the time.

	cheers
	luigi

On Tue, Apr 19, 2005 at 08:36:11PM +0200, Hans Petter Selasky wrote:
> Hi,
> 
> Do I have to post a PR or can I just post patches like this to get it 
> committed?
> 
> 1) I have some problems with an old soundblaster-8 (original)
> 
> *** sys/dev/sound/isa/sb8.c.ref Wed Oct 20 22:10:18 2004
> --- sys/dev/sound/isa/sb8.c     Wed Oct 20 22:20:09 2004
> ***************
> *** 565,571 ****
>         if (sb->bd_flags & BD_F_HISPEED)
>                 sb_reset_dsp(sb);
>         else
> !               sb_cmd(sb, DSP_CMD_DMAEXIT_8);
>   
>         if (play)
>                 sb_cmd(sb, DSP_CMD_SPKOFF); /* speaker off */
> --- 565,578 ----
>         if (sb->bd_flags & BD_F_HISPEED)
>                 sb_reset_dsp(sb);
>         else
> !       {
> !               /* sb_cmd(sb, DSP_CMD_DMAEXIT_8);
> !                * NOTE: DSP_CMD_DMAEXIT_8
> !                * does not work with old
> !                * soundblaster 
> !                */
> !               sb_reset_dsp(sb);
> !       }
>   
>         if (play)
>                 sb_cmd(sb, DSP_CMD_SPKOFF); /* speaker off */
> 
> 
> 2) there is panic with the vibra16x when trying to record:
> 
> *** 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 ...
> 
> 3) Missing PCI-ID:
> 
> *** sbc.orig    Wed Dec 25 21:34:52 2002
> --- sbc.c       Wed Dec 25 18:53:21 2002
> ***************
> *** 251,256 ****
> --- 251,257 ----
>   
>         {0x81167316, "ESS ES1681"},                     /* ESS1681 */
>         {0x02017316, "ESS ES1688"},                     /* ESS1688 */
> +       {0x68097316, "ESS ES1688"},                     /* ESS1688 */
>         {0x68187316, "ESS ES1868"},                     /* ESS1868 */
>         {0x03007316, "ESS ES1869"},                     /* ESS1869 */
>         {0x69187316, "ESS ES1869"},                     /* ESS1869 */
> 
> 
> 4) There is a bug regarding the setting of the SIMPLEX flag (which is 
> currently not working!)
> 
> Several device drivers call "pcm_setflags" before "pcm_register". The problem 
> is that "pcm_register" clears these flags. Maybe the device drivers should be 
> changed, or maybe "pcm_register" should be changed.
> 
> Here is my solution: In the file "pcm/sound.c" in the function 
> "pcm_register()" "d->flags = 0;" should be changed into:
> 
>         /* d->flags = 0; should be cleared by allocator of softc;
>          * cannot clear this field here, because several devices set
>          * this flag before calling pcm_register()
>          */
> 
> For example see sb8.c:
> pcm_setflags(dev, pcm_getflags(dev) | SD_F_SIMPLEX);
> 
> 
> 5) I have a problem with one of my soundcards. When I try to 
> "cat /dev/dsp0.0", the samplerate is always 48000Hz instead of 8000Hz. Is 
> this a bug in the driver? How can I fix it?
> 
> pcm0: <Intel ICH4 (82801DB)> port 0x1c00-0x1cff,0x18c0-0x18ff mem 
> 0xe0100c00-0xe0100dff,0xe0100800-0xe01008ff irq 10 at device 31.5 on pci0
> pcm0: [GIANT-LOCKED]
> pcm0: <Unknown AC97 Codec (id = 0x43585430)>
> 
> 
> 6) I have modified the sound driver so that it can be opened from within the 
> kernel. This enables me to make a sound-bridge that moves data from an 
> ISDN/telephony device to a sound device (full duplex). This works very well 
> and the delay is very little. Are there any plans to make such support 
> generic or what do you think?
> 
> 
> Yours
>   HPS
> _______________________________________________
> freebsd-multimedia at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-multimedia
> To unsubscribe, send any mail to "freebsd-multimedia-unsubscribe at freebsd.org"


More information about the freebsd-multimedia mailing list