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
This commit is contained in:
scf 2010-12-30 02:18:04 +00:00
parent d34b4913e6
commit 3e36dcd710
2 changed files with 7 additions and 2 deletions

View File

@ -1749,7 +1749,7 @@ linux_ioctl_sound(struct thread *td, struct linux_ioctl_args *args)
strncpy(info.id, "OSS", sizeof(info.id) - 1); strncpy(info.id, "OSS", sizeof(info.id) - 1);
strncpy(info.name, "FreeBSD OSS Mixer", sizeof(info.name) - 1); strncpy(info.name, "FreeBSD OSS Mixer", sizeof(info.name) - 1);
copyout(&info, (void *)args->arg, sizeof(info)); copyout(&info, (void *)args->arg, sizeof(info));
break; return (0);
} }
case 0x0030: { /* SOUND_OLD_MIXER_INFO */ case 0x0030: { /* SOUND_OLD_MIXER_INFO */
struct linux_old_mixer_info info; struct linux_old_mixer_info info;
@ -1757,7 +1757,7 @@ linux_ioctl_sound(struct thread *td, struct linux_ioctl_args *args)
strncpy(info.id, "OSS", sizeof(info.id) - 1); strncpy(info.id, "OSS", sizeof(info.id) - 1);
strncpy(info.name, "FreeBSD OSS Mixer", sizeof(info.name) - 1); strncpy(info.name, "FreeBSD OSS Mixer", sizeof(info.name) - 1);
copyout(&info, (void *)args->arg, sizeof(info)); copyout(&info, (void *)args->arg, sizeof(info));
break; return (0);
} }
default: default:
return (ENOIOCTL); return (ENOIOCTL);
@ -1774,6 +1774,10 @@ linux_ioctl_sound(struct thread *td, struct linux_ioctl_args *args)
args->cmd = SOUND_MIXER_READ_STEREODEVS; args->cmd = SOUND_MIXER_READ_STEREODEVS;
return (ioctl(td, (struct ioctl_args *)args)); 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: case LINUX_SOUND_MIXER_READ_RECMASK:
args->cmd = SOUND_MIXER_READ_RECMASK; args->cmd = SOUND_MIXER_READ_RECMASK;
return (ioctl(td, (struct ioctl_args *)args)); return (ioctl(td, (struct ioctl_args *)args));

View File

@ -267,6 +267,7 @@
#define LINUX_SOUND_MIXER_INFO 0x4d65 #define LINUX_SOUND_MIXER_INFO 0x4d65
#define LINUX_OSS_GETVERSION 0x4d76 #define LINUX_OSS_GETVERSION 0x4d76
#define LINUX_SOUND_MIXER_READ_STEREODEVS 0x4dfb #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_RECMASK 0x4dfd
#define LINUX_SOUND_MIXER_READ_DEVMASK 0x4dfe #define LINUX_SOUND_MIXER_READ_DEVMASK 0x4dfe
#define LINUX_SOUND_MIXER_WRITE_RECSRC 0x4dff #define LINUX_SOUND_MIXER_WRITE_RECSRC 0x4dff