Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc
[linux-2.6] / arch / parisc / hpux / ioctl.c
1 /*
2  *    Implements some necessary HPUX ioctls.
3  *
4  *    Copyright (C) 1999-2002 Matthew Wilcox <willy with parisc-linux.org>
5  *
6  *    This program is free software; you can redistribute it and/or modify
7  *    it under the terms of the GNU General Public License as published by
8  *    the Free Software Foundation; either version 2 of the License, or
9  *    (at your option) any later version.
10  *
11  *    This program is distributed in the hope that it will be useful,
12  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *    GNU General Public License for more details.
15  *
16  *    You should have received a copy of the GNU General Public License
17  *    along with this program; if not, write to the Free Software
18  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 /*
22  * Supported ioctls:
23  *   TCGETA
24  *   TCSETA
25  *   TCSETAW
26  *   TCSETAF
27  *   TCSBRK
28  *   TCXONC
29  *   TCFLSH
30  *   TIOCGWINSZ
31  *   TIOCSWINSZ
32  *   TIOCGPGRP
33  *   TIOCSPGRP
34  */
35
36 #include <linux/sched.h>
37 #include <linux/syscalls.h>
38 #include <asm/errno.h>
39 #include <asm/ioctl.h>
40 #include <asm/termios.h>
41 #include <asm/uaccess.h>
42
43 static int hpux_ioctl_t(int fd, unsigned long cmd, unsigned long arg)
44 {
45         int result = -EOPNOTSUPP;
46         int nr = _IOC_NR(cmd);
47         switch (nr) {
48         case 106:
49                 result = sys_ioctl(fd, TIOCSWINSZ, arg);
50                 break;
51         case 107:
52                 result = sys_ioctl(fd, TIOCGWINSZ, arg);
53                 break;
54         }
55         return result;
56 }
57
58 int hpux_ioctl(int fd, unsigned long cmd, unsigned long arg)
59 {
60         int result = -EOPNOTSUPP;
61         int type = _IOC_TYPE(cmd);
62         switch (type) {
63         case 'T':
64                 /* Our structures are now compatible with HPUX's */
65                 result = sys_ioctl(fd, cmd, arg);
66                 break;
67         case 't':
68                 result = hpux_ioctl_t(fd, cmd, arg);
69                 break;
70         }
71         return result;
72 }