1 /* $OpenBSD: linux_ioctl.c,v 1.10 2003/07/23 20:18:10 tedu Exp $ */ 2 /* $NetBSD: linux_ioctl.c,v 1.14 1996/04/05 00:01:28 christos Exp $ */ 3 4 /* 5 * Copyright (c) 1995 Frank van der Linden 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 1. Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 3. All advertising materials mentioning features or use of this software 17 * must display the following acknowledgement: 18 * This product includes software developed for the NetBSD Project 19 * by Frank van der Linden 20 * 4. The name of the author may not be used to endorse or promote products 21 * derived from this software without specific prior written permission 22 * 23 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 24 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 25 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 28 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 29 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 30 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 32 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 */ 34 35 #include <sys/param.h> 36 #include <sys/proc.h> 37 #include <sys/systm.h> 38 #include <sys/ioctl.h> 39 #include <sys/mount.h> 40 41 #include <sys/socket.h> 42 #include <net/if.h> 43 #include <sys/sockio.h> 44 45 #include <sys/syscallargs.h> 46 47 #include <compat/linux/linux_types.h> 48 #include <compat/linux/linux_signal.h> 49 #include <compat/linux/linux_syscallargs.h> 50 #include <compat/linux/linux_ioctl.h> 51 52 #include <compat/ossaudio/ossaudio.h> 53 #define LINUX_TO_OSS(v) (v) /* do nothing, same ioctl() encoding */ 54 55 /* 56 * Most ioctl command are just converted to their OpenBSD values, 57 * and passed on. The ones that take structure pointers and (flag) 58 * values need some massaging. This is done the usual way by 59 * allocating stackgap memory, letting the actual ioctl call do its 60 * work their and converting back the data afterwards. 61 */ 62 int 63 linux_sys_ioctl(p, v, retval) 64 register struct proc *p; 65 void *v; 66 register_t *retval; 67 { 68 register struct linux_sys_ioctl_args /* { 69 syscallarg(int) fd; 70 syscallarg(u_long) com; 71 syscallarg(caddr_t) data; 72 } */ *uap = v; 73 74 switch (LINUX_IOCGROUP(SCARG(uap, com))) { 75 case 'M': 76 return oss_ioctl_mixer(p, LINUX_TO_OSS(v), retval); 77 case 'Q': 78 return oss_ioctl_sequencer(p, LINUX_TO_OSS(v), retval); 79 case 'P': 80 return oss_ioctl_audio(p, LINUX_TO_OSS(v), retval); 81 case 't': 82 case 'f': 83 case 'T': /* XXX MIDI sequencer uses 'T' as well */ 84 return linux_ioctl_termios(p, uap, retval); 85 case 'S': 86 return linux_ioctl_cdrom(p, uap, retval); 87 case 'r': /* VFAT ioctls; not yet support */ 88 return (EINVAL); 89 case 0x89: 90 return linux_ioctl_socket(p, uap, retval); 91 case 0x03: 92 return linux_ioctl_hdio(p, uap, retval); 93 case 0x02: 94 return linux_ioctl_fdio(p, uap, retval); 95 case 0x12: 96 return linux_ioctl_blkio(p, uap, retval); 97 default: 98 return linux_machdepioctl(p, uap, retval); 99 } 100 }