the linux realaudio doesn't work on netbsd under emulation.
authormickey <mickey@openbsd.org>
Mon, 16 Sep 1996 15:34:27 +0000 (15:34 +0000)
committermickey <mickey@openbsd.org>
Mon, 16 Sep 1996 15:34:27 +0000 (15:34 +0000)
from netbsd-pr port-i386/2581 <sommerfeld@orchard.medford.ma.us>

sys/compat/linux/linux_audio.c
sys/compat/linux/linux_audio.h

index 8e2bc23..8b13d4c 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: linux_audio.c,v 1.2 1996/04/18 21:21:38 niklas Exp $  */
+/*     $OpenBSD: linux_audio.c,v 1.3 1996/09/16 15:34:27 mickey Exp $  */
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -73,6 +73,21 @@ linux_ioctl_audio(p, uap, retval)
                if (error)
                        return error;
                break;
+       case LINUX_SNDCTL_DSP_WRITE_CHANNELS:
+               AUDIO_INITINFO(&tmpinfo);
+               error = copyin(SCARG(uap, data), &idat, sizeof idat);
+               if (error)
+                       return error;
+               tmpinfo.play.channels = idat;
+               (void) (*fp->f_ops->fo_ioctl)(fp, AUDIO_SETINFO, (caddr_t)&tmpinfo, p);
+               error = (*fp->f_ops->fo_ioctl)(fp, AUDIO_GETINFO, (caddr_t)&tmpinfo, p);
+               if (error)
+                       return error;
+               idat = tmpinfo.play.channels;
+               error = copyout(&idat, SCARG(uap, data), sizeof idat);
+               if (error)
+                       return error;
+               break;
        case LINUX_SNDCTL_DSP_STEREO:
                AUDIO_INITINFO(&tmpinfo);
                error = copyin(SCARG(uap, data), &idat, sizeof idat);
@@ -135,7 +150,26 @@ linux_ioctl_audio(p, uap, retval)
                error = (*fp->f_ops->fo_ioctl)(fp, AUDIO_GETINFO, (caddr_t)&tmpinfo, p);
                if (error)
                        return error;
-               /*XXXX*/
+               switch(tmpinfo.play.encoding) {
+               case AUDIO_ENCODING_LINEAR:
+                       if (tmpinfo.play.precision == 8)
+                               idat = LINUX_AFMT_U8;
+                       else if (tmpinfo.play.precision == 16)
+                               idat = LINUX_AFMT_S16_LE;
+                       else return EINVAL;
+                       break;
+               case AUDIO_ENCODING_ULAW:                                       
+                       idat = LINUX_AFMT_MU_LAW;
+                       break;
+               case AUDIO_ENCODING_ALAW:
+                       idat = LINUX_AFMT_A_LAW;
+                       break;
+               default:
+                       return EINVAL;
+               }
+               error = copyout(&idat, SCARG(uap, data), sizeof idat);          
+               if (error)
+                       return error;
                break;
        case LINUX_SNDCTL_DSP_SETFRAGMENT:
                AUDIO_INITINFO(&tmpinfo);
index 5edc222..fc91ec3 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: linux_audio.h,v 1.2 1996/04/18 21:21:38 niklas Exp $  */
+/*     $OpenBSD: linux_audio.h,v 1.3 1996/09/16 15:34:28 mickey Exp $  */
 
 #define LINUX_IOCPARM_MASK    0x7f            /* parameters must be < 128 bytes */
 #define LINUX_IOC_VOID        0x00000000      /* no parameters */
@@ -19,6 +19,7 @@
 #define        LINUX_SNDCTL_DSP_STEREO         _LINUX_IOWR('P', 3, int)
 #define        LINUX_SNDCTL_DSP_GETBLKSIZE     _LINUX_IOWR('P', 4, int)
 #define        LINUX_SNDCTL_DSP_SETFMT         _LINUX_IOWR('P', 5, int)
+#define        LINUX_SNDCTL_DSP_WRITE_CHANNELS _LINUX_IOWR('P', 6, int)
 #define        LINUX_SNDCTL_DSP_POST           _LINUX_IO('P', 8)
 #define        LINUX_SNDCTL_DSP_SETFRAGMENT    _LINUX_IOWR('P', 10, int)
 #define        LINUX_SNDCTL_DSP_GETFMTS        _LINUX_IOR('P', 11, int)