--- vg_syscall_mem.c.orig	Thu May 23 17:33:12 2002
+++ vg_syscall_mem.c	Thu May 23 19:23:37 2002
@@ -1840,26 +1840,48 @@
                break;
 
             /* linux/soundcard interface (OSS) */
+            /* soundcard: _SIOR */
             case SNDCTL_SEQ_GETOUTCOUNT:
             case SNDCTL_SEQ_GETINCOUNT:
-            case SNDCTL_SEQ_PERCMODE:
-            case SNDCTL_SEQ_TESTMIDI:
-            case SNDCTL_SEQ_RESETSAMPLES:
             case SNDCTL_SEQ_NRSYNTHS:
             case SNDCTL_SEQ_NRMIDIS:
             case SNDCTL_SEQ_GETTIME:
             case SNDCTL_DSP_GETFMTS:
-            case SNDCTL_DSP_GETTRIGGER:
             case SNDCTL_DSP_GETODELAY:
 #           if defined(SNDCTL_DSP_GETSPDIF)
             case SNDCTL_DSP_GETSPDIF:
 #           endif
             case SNDCTL_DSP_GETCAPS:
+            case SNDCTL_DSP_GETTRIGGER:
             case SOUND_PCM_READ_RATE:
             case SOUND_PCM_READ_CHANNELS:
             case SOUND_PCM_READ_BITS:
-            case (SOUND_PCM_READ_BITS|0x40000000): /* what the fuck ? */
             case SOUND_PCM_READ_FILTER:
+            case SOUND_MIXER_READ_VOLUME:
+            case SOUND_MIXER_READ_BASS:
+            case SOUND_MIXER_READ_TREBLE:
+            case SOUND_MIXER_READ_SYNTH:
+            case SOUND_MIXER_READ_PCM:
+            case SOUND_MIXER_READ_SPEAKER:
+            case SOUND_MIXER_READ_LINE:
+            case SOUND_MIXER_READ_MIC:
+            case SOUND_MIXER_READ_CD:
+            case SOUND_MIXER_READ_IMIX:
+            case SOUND_MIXER_READ_ALTPCM:
+            case SOUND_MIXER_READ_RECLEV:
+            case SOUND_MIXER_READ_IGAIN:
+            case SOUND_MIXER_READ_OGAIN:
+            case SOUND_MIXER_READ_LINE1:
+            case SOUND_MIXER_READ_LINE2:
+            case SOUND_MIXER_READ_LINE3:
+            case SOUND_MIXER_READ_RECSRC:
+            case SOUND_MIXER_READ_DEVMASK:
+            case SOUND_MIXER_READ_RECMASK:
+            case SOUND_MIXER_READ_STEREODEVS:
+            case SOUND_MIXER_READ_CAPS:
+#           if defined(OSS_GETVERSION)
+            case OSS_GETVERSION:
+#           endif
                must_be_writable(tst,"ioctl(SNDCTL_XXX|SOUND_XXX (SIOR, int))", 
                                 arg3,
                                 sizeof(int));
@@ -1867,10 +1889,73 @@
                if (!VG_(is_kerror)(res) && res == 0)
                   make_readable (arg3, sizeof(int));
                break;
+            case SNDCTL_DSP_GETOSPACE:
+            case SNDCTL_DSP_GETISPACE:
+               must_be_writable(tst, 
+                                "ioctl(SNDCTL_DSP_GETxSPACE "
+                                "(SIOR, audio_buf_info))", arg3,
+                                sizeof(audio_buf_info));
+               KERNEL_DO_SYSCALL(tid,res);
+               if (!VG_(is_kerror)(res) && res == 0)
+                  make_readable (arg3, sizeof(audio_buf_info));
+               break;
+            case SNDCTL_DSP_GETIPTR:
+            case SNDCTL_DSP_GETOPTR:
+               must_be_writable(tst, 
+                                "ioctl(SNDCTL_DSP_GETxPTR "
+                                "(SIOR, count_info))", arg3,
+                                sizeof(count_info));
+               KERNEL_DO_SYSCALL(tid,res);
+               if (!VG_(is_kerror)(res) && res == 0)
+                  make_readable (arg3, sizeof(count_info));
+               break;
+            case SNDCTL_DSP_MAPINBUF:
+            case SNDCTL_DSP_MAPOUTBUF:
+               must_be_writable(tst, 
+                                "ioctl(SNDCTL_DSP_MAPxxxBUF "
+                                "(SIOR, buffmem_desc))", arg3,
+                                sizeof(buffmem_desc));
+               KERNEL_DO_SYSCALL(tid,res);
+               if (!VG_(is_kerror)(res) && res == 0)
+                  make_readable (arg3, sizeof(buffmem_desc));
+               break;
+            case SOUND_MIXER_INFO:
+               must_be_writable(tst,"ioctl(SOUND_MIXER_INFO)", 
+                                arg3,
+                                sizeof(mixer_info));
+               KERNEL_DO_SYSCALL(tid,res);
+               if (!VG_(is_kerror)(res) && res == 0)
+                  make_readable (arg3, sizeof(mixer_info));
+               break;
+            case SOUND_OLD_MIXER_INFO:
+               must_be_writable(tst,"ioctl(SOUND_OLD_MIXER_INFO)", 
+                                arg3,
+                                sizeof(_old_mixer_info));
+               KERNEL_DO_SYSCALL(tid,res);
+               if (!VG_(is_kerror)(res) && res == 0)
+                  make_readable (arg3, sizeof(_old_mixer_info));
+               break;
+
+	    /* soundcard: _SIOWR() */
+            case SNDCTL_SYNTH_INFO:
+            case SNDCTL_SYNTH_ID:
+               must_be_readable(tst, "ioctl(SNDCTL_SYNTH_XXX "
+                                     "(SIOWR, synth_info))",
+                                arg3, sizeof(struct synth_info));
+               must_be_writable(tst, "ioctl(SNDCTL_SYNTH_XXX "
+                                     "(SIOWR, synth_info))",
+                                arg3, sizeof(struct synth_info));
+               KERNEL_DO_SYSCALL(tid,res);
+               break;
             case SNDCTL_SEQ_CTRLRATE:
+            case SNDCTL_SYNTH_MEMAVL:
+            case SNDCTL_TMR_TIMEBASE:
+            case SNDCTL_TMR_TEMPO:
+            case SNDCTL_TMR_SOURCE:
             case SNDCTL_DSP_SPEED:
             case SNDCTL_DSP_STEREO:
-            case SNDCTL_DSP_GETBLKSIZE: 
+            case SNDCTL_DSP_GETBLKSIZE:
+            case SNDCTL_DSP_SETFMT:
             case SNDCTL_DSP_CHANNELS:
             case SOUND_PCM_WRITE_FILTER:
             case SNDCTL_DSP_SUBDIVIDE:
@@ -1881,11 +1966,39 @@
 #           if defined(SNDCTL_DSP_BIND_CHANNEL)
             case SNDCTL_DSP_BIND_CHANNEL:
 #           endif
-            case SNDCTL_TMR_TIMEBASE:
-            case SNDCTL_TMR_TEMPO:
-            case SNDCTL_TMR_SOURCE:
             case SNDCTL_MIDI_PRETIME:
             case SNDCTL_MIDI_MPUMODE:
+            case SOUND_MIXER_WRITE_VOLUME:
+            case SOUND_MIXER_WRITE_BASS:
+            case SOUND_MIXER_WRITE_TREBLE:
+            case SOUND_MIXER_WRITE_SYNTH:
+            case SOUND_MIXER_WRITE_PCM:
+            case SOUND_MIXER_WRITE_SPEAKER:
+            case SOUND_MIXER_WRITE_LINE:
+            case SOUND_MIXER_WRITE_MIC:
+            case SOUND_MIXER_WRITE_CD:
+            case SOUND_MIXER_WRITE_IMIX:
+            case SOUND_MIXER_WRITE_ALTPCM:
+            case SOUND_MIXER_WRITE_RECLEV:
+            case SOUND_MIXER_WRITE_IGAIN:
+            case SOUND_MIXER_WRITE_OGAIN:
+            case SOUND_MIXER_WRITE_LINE1:
+            case SOUND_MIXER_WRITE_LINE2:
+            case SOUND_MIXER_WRITE_LINE3:
+            case SOUND_MIXER_WRITE_RECSRC:
+#           if defined (SOUND_MIXER_AGC)
+            case SOUND_MIXER_AGC:
+#           endif
+#           if defined (SOUND_MIXER_3DSE)
+            case SOUND_MIXER_3DSE:
+#           endif
+#           if defined (SOUND_MIXER_PRIVATE1)
+            case SOUND_MIXER_PRIVATE1:
+            case SOUND_MIXER_PRIVATE2:
+            case SOUND_MIXER_PRIVATE3:
+            case SOUND_MIXER_PRIVATE4:
+            case SOUND_MIXER_PRIVATE5:
+#           endif
                must_be_readable(tst, "ioctl(SNDCTL_XXX|SOUND_XXX "
                                      "(SIOWR, int))", 
                                 arg3, sizeof(int));
@@ -1894,19 +2007,113 @@
                                 arg3, sizeof(int));
                KERNEL_DO_SYSCALL(tid,res);
                break;
-            case SNDCTL_DSP_GETOSPACE:
-            case SNDCTL_DSP_GETISPACE:
-               must_be_writable(tst, 
-                                "ioctl(SNDCTL_XXX|SOUND_XXX "
-                                "(SIOR, audio_buf_info))", arg3,
-                                sizeof(audio_buf_info));
+            case SNDCTL_MIDI_INFO:
+               must_be_readable(tst, "ioctl(SNDCTL_MIDI_INFO)",
+                                arg3, sizeof(struct midi_info));
+               must_be_writable(tst, "ioctl(SNDCTL_MIDI_INFO)",
+                                arg3, sizeof(struct midi_info));
+               KERNEL_DO_SYSCALL(tid,res);
+               break;
+            case SNDCTL_SYNTH_CONTROL:
+               must_be_readable(tst, "ioctl(SNDCTL_SYNTH_CONTROL)",
+                                arg3, sizeof(struct synth_control));
+               must_be_writable(tst, "ioctl(SNDCTL_SYNTH_CONTROL)",
+                                arg3, sizeof(struct synth_control));
+               KERNEL_DO_SYSCALL(tid,res);
+               break;
+            case SNDCTL_SYNTH_REMOVESAMPLE:
+               must_be_readable(tst, "ioctl(SNDCTL_SYNTH_REMOVESAMPLE)",
+                                arg3, sizeof(struct remove_sample));
+               must_be_writable(tst, "ioctl(SNDCTL_SYNTH_REMOVESAMPLE)",
+                                arg3, sizeof(struct remove_sample));
+               KERNEL_DO_SYSCALL(tid,res);
+               break;
+            case SNDCTL_MIDI_MPUCMD:
+               must_be_readable(tst, "ioctl(SNDCTL_MIDI_MPUCMD)",
+                                arg3, sizeof(mpu_command_rec));
+               must_be_writable(tst, "ioctl(SNDCTL_MIDI_MPUCMD)",
+                                arg3, sizeof(mpu_command_rec));
+               KERNEL_DO_SYSCALL(tid,res);
+               break;
+            case SNDCTL_COPR_LOAD:
+               must_be_readable(tst, "ioctl(SNDCTL_COPR_LOAD)",
+                                arg3, sizeof(copr_buffer));
+               must_be_writable(tst, "ioctl(SNDCTL_COPR_LOAD)",
+                                arg3, sizeof(copr_buffer));
                KERNEL_DO_SYSCALL(tid,res);
-               if (!VG_(is_kerror)(res) && res == 0)
-                  make_readable (arg3, sizeof(audio_buf_info));
                break;
+            case SNDCTL_COPR_RDATA:
+            case SNDCTL_COPR_RCODE:
+            case SNDCTL_COPR_WDATA:
+            case SNDCTL_COPR_WCODE:
+            case SNDCTL_COPR_RUN:
+            case SNDCTL_COPR_HALT:
+               must_be_readable(tst, "ioctl(SNDCTL_COPR_XXX "
+                                     "(SIOWR, copr_debug_buf))",
+                                arg3, sizeof(copr_debug_buf));
+               must_be_writable(tst, "ioctl(SNDCTL_COPR_XXX "
+                                     "(SIOWR, copr_debug_buf))",
+                                arg3, sizeof(copr_debug_buf));
+               KERNEL_DO_SYSCALL(tid,res);
+               break;
+            case SNDCTL_COPR_SENDMSG:
+            case SNDCTL_COPR_RCVMSG:
+               must_be_readable(tst, "ioctl(SNDCTL_COPR_xxxMSG "
+                                     "(SIOWR, copr_msg))",
+                                arg3, sizeof(copr_msg));
+               must_be_writable(tst, "ioctl(SNDCTL_COPR_xxxMSG "
+                                     "(SIOWR, copr_msg))",
+                                arg3, sizeof(copr_msg));
+               KERNEL_DO_SYSCALL(tid,res);
+               break;
+#           if defined(SOUND_MIXER_ACCESS)
+            case SOUND_MIXER_ACCESS:
+               must_be_readable(tst, "ioctl(SOUND_MIXER_ACCESS)",
+                                arg3, sizeof(mixer_record));
+               must_be_writable(tst, "ioctl(SOUND_MIXER_ACCESS)",
+                                arg3, sizeof(mixer_record));
+               KERNEL_DO_SYSCALL(tid,res);
+               break;
+#           endif
+#           if defined (SOUND_MIXER_GETLEVELS)
+            case SOUND_MIXER_GETLEVELS:
+            case SOUND_MIXER_SETLEVELS:
+               must_be_readable(tst, "ioctl(SOUND_MIXER_xxxLEVELS "
+                                     "(SIOWR, mixer_vol_table))",
+                                arg3, sizeof(mixer_vol_table));
+               must_be_writable(tst, "ioctl(SOUND_MIXER_xxxLEVELS "
+                                     "(SIOWR, mixer_vol_table))",
+                                arg3, sizeof(mixer_vol_table));
+               KERNEL_DO_SYSCALL(tid,res);
+               break;
+#           endif
+
+            /* soundcard: _SIOW() */
+            case SNDCTL_SEQ_PERCMODE:
+            case SNDCTL_SEQ_TESTMIDI:
+            case SNDCTL_SEQ_RESETSAMPLES:
+            case SNDCTL_SEQ_THRESHOLD:
+            case SNDCTL_FM_4OP_ENABLE:
+            case SNDCTL_TMR_METRONOME:
+            case SNDCTL_TMR_SELECT:
             case SNDCTL_DSP_SETTRIGGER:
-               must_be_readable(tst, "ioctl(SNDCTL_XXX|SOUND_XXX (SIOW, int))", 
+#           if defined(SNDCTL_DSP_SETSPDIF)
+            case SNDCTL_DSP_SETSPDIF:
+#           endif
+            case SNDCTL_DSP_PROFILE:
+               must_be_readable(tst, "ioctl(SNDCTL_XXX|SOUND_XXX "
+                                     "(SIOW, int))", 
                                 arg3, sizeof(int));
+               KERNEL_DO_SYSCALL(tid,res);
+               break;
+            case SNDCTL_FM_LOAD_INSTR:
+               must_be_readable(tst, "ioctl(SNDCTL_FM_LOAD_INSTRUMENT)",
+                                arg3, sizeof(struct sbi_instrument));
+               KERNEL_DO_SYSCALL(tid,res);
+               break;
+            case SNDCTL_SEQ_OUTOFBAND:
+               must_be_readable(tst, "ioctl(SNDCTL_SEQ_OUTOFBAND)",
+                                arg3, sizeof(struct seq_event_rec));
                KERNEL_DO_SYSCALL(tid,res);
                break;
 
