Author: scf
Date: Thu Dec 30 02:18:04 2010
New Revision: 216813
URL: http://svn.freebsd.org/changeset/base/216813

Log:
  Fix the LINUX_SOUND_MIXER_INFO ioctl to return success after the
  information is set to FreeBSD.  It had been falling through to the end
  of linux_ioctl_sound() and returning ENOIOCTL.  Noticed when running the
  Linux ALSA amixer tool.
  
  Add a LINUX_SOUND_MIXER_READ_CAPS ioctl which is used by the Skype
  v2.1.0.81 binary.
  
  Reviewed by:  gavin
  MFC after:    2 weeks

Modified:
  head/sys/compat/linux/linux_ioctl.c
  head/sys/compat/linux/linux_ioctl.h

Modified: head/sys/compat/linux/linux_ioctl.c
==============================================================================
--- head/sys/compat/linux/linux_ioctl.c Thu Dec 30 01:28:56 2010        
(r216812)
+++ head/sys/compat/linux/linux_ioctl.c Thu Dec 30 02:18:04 2010        
(r216813)
@@ -1749,7 +1749,7 @@ linux_ioctl_sound(struct thread *td, str
                        strncpy(info.id, "OSS", sizeof(info.id) - 1);
                        strncpy(info.name, "FreeBSD OSS Mixer", 
sizeof(info.name) - 1);
                        copyout(&info, (void *)args->arg, sizeof(info));
-                       break;
+                       return (0);
                }
                case 0x0030: {  /* SOUND_OLD_MIXER_INFO */
                        struct linux_old_mixer_info info;
@@ -1757,7 +1757,7 @@ linux_ioctl_sound(struct thread *td, str
                        strncpy(info.id, "OSS", sizeof(info.id) - 1);
                        strncpy(info.name, "FreeBSD OSS Mixer", 
sizeof(info.name) - 1);
                        copyout(&info, (void *)args->arg, sizeof(info));
-                       break;
+                       return (0);
                }
                default:
                        return (ENOIOCTL);
@@ -1774,6 +1774,10 @@ linux_ioctl_sound(struct thread *td, str
                args->cmd = SOUND_MIXER_READ_STEREODEVS;
                return (ioctl(td, (struct ioctl_args *)args));
 
+       case LINUX_SOUND_MIXER_READ_CAPS:
+               args->cmd = SOUND_MIXER_READ_CAPS;
+               return (ioctl(td, (struct ioctl_args *)args));
+
        case LINUX_SOUND_MIXER_READ_RECMASK:
                args->cmd = SOUND_MIXER_READ_RECMASK;
                return (ioctl(td, (struct ioctl_args *)args));

Modified: head/sys/compat/linux/linux_ioctl.h
==============================================================================
--- head/sys/compat/linux/linux_ioctl.h Thu Dec 30 01:28:56 2010        
(r216812)
+++ head/sys/compat/linux/linux_ioctl.h Thu Dec 30 02:18:04 2010        
(r216813)
@@ -267,6 +267,7 @@
 #define        LINUX_SOUND_MIXER_INFO          0x4d65
 #define        LINUX_OSS_GETVERSION            0x4d76
 #define        LINUX_SOUND_MIXER_READ_STEREODEVS       0x4dfb
+#define        LINUX_SOUND_MIXER_READ_CAPS     0x4dfc
 #define        LINUX_SOUND_MIXER_READ_RECMASK  0x4dfd
 #define        LINUX_SOUND_MIXER_READ_DEVMASK  0x4dfe
 #define        LINUX_SOUND_MIXER_WRITE_RECSRC  0x4dff
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to