1/* $NetBSD: ibcs2_ioctl.c,v 1.6 1995/03/14 15:12:28 scottb Exp $ */ 2 3/* 4 * Copyright (c) 1994, 1995 Scott Bartram 5 * All rights reserved. 6 * 7 * based on compat/sunos/sun_ioctl.c 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 *
| 1/* $NetBSD: ibcs2_ioctl.c,v 1.6 1995/03/14 15:12:28 scottb Exp $ */ 2 3/* 4 * Copyright (c) 1994, 1995 Scott Bartram 5 * All rights reserved. 6 * 7 * based on compat/sunos/sun_ioctl.c 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. The name of the author may not be used to endorse or promote products 15 * derived from this software without specific prior written permission 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 *
|
28 * $FreeBSD: head/sys/i386/ibcs2/ibcs2_ioctl.c 86468 2001-11-16 20:32:32Z iedowse $
| 28 * $FreeBSD: head/sys/i386/ibcs2/ibcs2_ioctl.c 89306 2002-01-13 11:58:06Z alfred $
|
29 */ 30 31#include <sys/param.h> 32#include <sys/systm.h> 33#include <sys/consio.h> 34#include <sys/fcntl.h> 35#include <sys/file.h> 36#include <sys/filedesc.h> 37#include <sys/filio.h> 38#include <sys/ioctl_compat.h> 39#include <sys/kbio.h> 40#include <sys/lock.h> 41#include <sys/mutex.h> 42#include <sys/sysproto.h> 43#include <sys/tty.h> 44 45#include <i386/ibcs2/ibcs2_signal.h> 46#include <i386/ibcs2/ibcs2_socksys.h> 47#include <i386/ibcs2/ibcs2_stropts.h> 48#include <i386/ibcs2/ibcs2_proto.h> 49#include <i386/ibcs2/ibcs2_termios.h> 50#include <i386/ibcs2/ibcs2_util.h> 51#include <i386/ibcs2/ibcs2_ioctl.h> 52 53static void stios2btios __P((struct ibcs2_termios *, struct termios *)); 54static void btios2stios __P((struct termios *, struct ibcs2_termios *)); 55static void stios2stio __P((struct ibcs2_termios *, struct ibcs2_termio *)); 56static void stio2stios __P((struct ibcs2_termio *, struct ibcs2_termios *));
| 29 */ 30 31#include <sys/param.h> 32#include <sys/systm.h> 33#include <sys/consio.h> 34#include <sys/fcntl.h> 35#include <sys/file.h> 36#include <sys/filedesc.h> 37#include <sys/filio.h> 38#include <sys/ioctl_compat.h> 39#include <sys/kbio.h> 40#include <sys/lock.h> 41#include <sys/mutex.h> 42#include <sys/sysproto.h> 43#include <sys/tty.h> 44 45#include <i386/ibcs2/ibcs2_signal.h> 46#include <i386/ibcs2/ibcs2_socksys.h> 47#include <i386/ibcs2/ibcs2_stropts.h> 48#include <i386/ibcs2/ibcs2_proto.h> 49#include <i386/ibcs2/ibcs2_termios.h> 50#include <i386/ibcs2/ibcs2_util.h> 51#include <i386/ibcs2/ibcs2_ioctl.h> 52 53static void stios2btios __P((struct ibcs2_termios *, struct termios *)); 54static void btios2stios __P((struct termios *, struct ibcs2_termios *)); 55static void stios2stio __P((struct ibcs2_termios *, struct ibcs2_termio *)); 56static void stio2stios __P((struct ibcs2_termio *, struct ibcs2_termios *));
|
| 57static int ibcs2_do_ioctl __P((struct proc *, struct ibcs2_ioctl_args *, 58 struct file *));
|
57 58 59int 60ibcs2_gtty(struct thread *td, struct ibcs2_gtty_args *args) 61{ 62 struct ioctl_args ioctl_arg; 63 64 ioctl_arg.fd = args->fd; 65 ioctl_arg.com = TIOCGETC; 66 ioctl_arg.data = (caddr_t)args->buf; 67 68 return ioctl(td, &ioctl_arg); 69} 70 71int 72ibcs2_stty(struct thread *td, struct ibcs2_stty_args *args) 73{ 74 struct ioctl_args ioctl_arg; 75 76 ioctl_arg.fd = args->fd; 77 ioctl_arg.com = TIOCSETC; 78 ioctl_arg.data = (caddr_t)args->buf; 79 80 return ioctl(td, &ioctl_arg); 81} 82 83 84/* 85 * iBCS2 ioctl calls. 86 */ 87 88static struct speedtab sptab[] = { 89 { 0, 0 }, 90 { 50, 1 }, 91 { 75, 2 }, 92 { 110, 3 }, 93 { 134, 4 }, 94 { 135, 4 }, 95 { 150, 5 }, 96 { 200, 6 }, 97 { 300, 7 }, 98 { 600, 8 }, 99 { 1200, 9 }, 100 { 1800, 10 }, 101 { 2400, 11 }, 102 { 4800, 12 }, 103 { 9600, 13 }, 104 { 19200, 14 }, 105 { 38400, 15 }, 106 { -1, -1 } 107}; 108 109static u_long s2btab[] = { 110 0, 111 50, 112 75, 113 110, 114 134, 115 150, 116 200, 117 300, 118 600, 119 1200, 120 1800, 121 2400, 122 4800, 123 9600, 124 19200, 125 38400, 126}; 127 128static void 129stios2btios(st, bt) 130 struct ibcs2_termios *st; 131 struct termios *bt; 132{ 133 register u_long l, r; 134 135 l = st->c_iflag; r = 0; 136 if (l & IBCS2_IGNBRK) r |= IGNBRK; 137 if (l & IBCS2_BRKINT) r |= BRKINT; 138 if (l & IBCS2_IGNPAR) r |= IGNPAR; 139 if (l & IBCS2_PARMRK) r |= PARMRK; 140 if (l & IBCS2_INPCK) r |= INPCK; 141 if (l & IBCS2_ISTRIP) r |= ISTRIP; 142 if (l & IBCS2_INLCR) r |= INLCR; 143 if (l & IBCS2_IGNCR) r |= IGNCR; 144 if (l & IBCS2_ICRNL) r |= ICRNL; 145 if (l & IBCS2_IXON) r |= IXON; 146 if (l & IBCS2_IXANY) r |= IXANY; 147 if (l & IBCS2_IXOFF) r |= IXOFF; 148 if (l & IBCS2_IMAXBEL) r |= IMAXBEL; 149 bt->c_iflag = r; 150 151 l = st->c_oflag; r = 0; 152 if (l & IBCS2_OPOST) r |= OPOST; 153 if (l & IBCS2_ONLCR) r |= ONLCR; 154 if (l & IBCS2_TAB3) r |= OXTABS; 155 bt->c_oflag = r; 156 157 l = st->c_cflag; r = 0; 158 switch (l & IBCS2_CSIZE) { 159 case IBCS2_CS5: r |= CS5; break; 160 case IBCS2_CS6: r |= CS6; break; 161 case IBCS2_CS7: r |= CS7; break; 162 case IBCS2_CS8: r |= CS8; break; 163 } 164 if (l & IBCS2_CSTOPB) r |= CSTOPB; 165 if (l & IBCS2_CREAD) r |= CREAD; 166 if (l & IBCS2_PARENB) r |= PARENB; 167 if (l & IBCS2_PARODD) r |= PARODD; 168 if (l & IBCS2_HUPCL) r |= HUPCL; 169 if (l & IBCS2_CLOCAL) r |= CLOCAL; 170 bt->c_cflag = r; 171 172 bt->c_ispeed = bt->c_ospeed = s2btab[l & 0x0000000f]; 173 174 l = st->c_lflag; r = 0; 175 if (l & IBCS2_ISIG) r |= ISIG; 176 if (l & IBCS2_ICANON) r |= ICANON; 177 if (l & IBCS2_ECHO) r |= ECHO; 178 if (l & IBCS2_ECHOE) r |= ECHOE; 179 if (l & IBCS2_ECHOK) r |= ECHOK; 180 if (l & IBCS2_ECHONL) r |= ECHONL; 181 if (l & IBCS2_NOFLSH) r |= NOFLSH; 182 if (l & IBCS2_TOSTOP) r |= TOSTOP; 183 bt->c_lflag = r; 184 185 bt->c_cc[VINTR] = 186 st->c_cc[IBCS2_VINTR] ? st->c_cc[IBCS2_VINTR] : _POSIX_VDISABLE; 187 bt->c_cc[VQUIT] = 188 st->c_cc[IBCS2_VQUIT] ? st->c_cc[IBCS2_VQUIT] : _POSIX_VDISABLE; 189 bt->c_cc[VERASE] = 190 st->c_cc[IBCS2_VERASE] ? st->c_cc[IBCS2_VERASE] : _POSIX_VDISABLE; 191 bt->c_cc[VKILL] = 192 st->c_cc[IBCS2_VKILL] ? st->c_cc[IBCS2_VKILL] : _POSIX_VDISABLE; 193 if (bt->c_lflag & ICANON) { 194 bt->c_cc[VEOF] = 195 st->c_cc[IBCS2_VEOF] ? st->c_cc[IBCS2_VEOF] : _POSIX_VDISABLE; 196 bt->c_cc[VEOL] = 197 st->c_cc[IBCS2_VEOL] ? st->c_cc[IBCS2_VEOL] : _POSIX_VDISABLE; 198 } else { 199 bt->c_cc[VMIN] = st->c_cc[IBCS2_VMIN]; 200 bt->c_cc[VTIME] = st->c_cc[IBCS2_VTIME]; 201 } 202 bt->c_cc[VEOL2] = 203 st->c_cc[IBCS2_VEOL2] ? st->c_cc[IBCS2_VEOL2] : _POSIX_VDISABLE; 204#if 0 205 bt->c_cc[VSWTCH] = 206 st->c_cc[IBCS2_VSWTCH] ? st->c_cc[IBCS2_VSWTCH] : _POSIX_VDISABLE; 207#endif 208 bt->c_cc[VSTART] = 209 st->c_cc[IBCS2_VSTART] ? st->c_cc[IBCS2_VSTART] : _POSIX_VDISABLE; 210 bt->c_cc[VSTOP] = 211 st->c_cc[IBCS2_VSTOP] ? st->c_cc[IBCS2_VSTOP] : _POSIX_VDISABLE; 212 bt->c_cc[VSUSP] = 213 st->c_cc[IBCS2_VSUSP] ? st->c_cc[IBCS2_VSUSP] : _POSIX_VDISABLE; 214 bt->c_cc[VDSUSP] = _POSIX_VDISABLE; 215 bt->c_cc[VREPRINT] = _POSIX_VDISABLE; 216 bt->c_cc[VDISCARD] = _POSIX_VDISABLE; 217 bt->c_cc[VWERASE] = _POSIX_VDISABLE; 218 bt->c_cc[VLNEXT] = _POSIX_VDISABLE; 219 bt->c_cc[VSTATUS] = _POSIX_VDISABLE; 220} 221 222static void 223btios2stios(bt, st) 224 struct termios *bt; 225 struct ibcs2_termios *st; 226{ 227 register u_long l, r; 228 229 l = bt->c_iflag; r = 0; 230 if (l & IGNBRK) r |= IBCS2_IGNBRK; 231 if (l & BRKINT) r |= IBCS2_BRKINT; 232 if (l & IGNPAR) r |= IBCS2_IGNPAR; 233 if (l & PARMRK) r |= IBCS2_PARMRK; 234 if (l & INPCK) r |= IBCS2_INPCK; 235 if (l & ISTRIP) r |= IBCS2_ISTRIP; 236 if (l & INLCR) r |= IBCS2_INLCR; 237 if (l & IGNCR) r |= IBCS2_IGNCR; 238 if (l & ICRNL) r |= IBCS2_ICRNL; 239 if (l & IXON) r |= IBCS2_IXON; 240 if (l & IXANY) r |= IBCS2_IXANY; 241 if (l & IXOFF) r |= IBCS2_IXOFF; 242 if (l & IMAXBEL) r |= IBCS2_IMAXBEL; 243 st->c_iflag = r; 244 245 l = bt->c_oflag; r = 0; 246 if (l & OPOST) r |= IBCS2_OPOST; 247 if (l & ONLCR) r |= IBCS2_ONLCR; 248 if (l & OXTABS) r |= IBCS2_TAB3; 249 st->c_oflag = r; 250 251 l = bt->c_cflag; r = 0; 252 switch (l & CSIZE) { 253 case CS5: r |= IBCS2_CS5; break; 254 case CS6: r |= IBCS2_CS6; break; 255 case CS7: r |= IBCS2_CS7; break; 256 case CS8: r |= IBCS2_CS8; break; 257 } 258 if (l & CSTOPB) r |= IBCS2_CSTOPB; 259 if (l & CREAD) r |= IBCS2_CREAD; 260 if (l & PARENB) r |= IBCS2_PARENB; 261 if (l & PARODD) r |= IBCS2_PARODD; 262 if (l & HUPCL) r |= IBCS2_HUPCL; 263 if (l & CLOCAL) r |= IBCS2_CLOCAL; 264 st->c_cflag = r; 265 266 l = bt->c_lflag; r = 0; 267 if (l & ISIG) r |= IBCS2_ISIG; 268 if (l & ICANON) r |= IBCS2_ICANON; 269 if (l & ECHO) r |= IBCS2_ECHO; 270 if (l & ECHOE) r |= IBCS2_ECHOE; 271 if (l & ECHOK) r |= IBCS2_ECHOK; 272 if (l & ECHONL) r |= IBCS2_ECHONL; 273 if (l & NOFLSH) r |= IBCS2_NOFLSH; 274 if (l & TOSTOP) r |= IBCS2_TOSTOP; 275 st->c_lflag = r; 276 277 l = ttspeedtab(bt->c_ospeed, sptab); 278 if ((int)l >= 0) 279 st->c_cflag |= l; 280 281 st->c_cc[IBCS2_VINTR] = 282 bt->c_cc[VINTR] != _POSIX_VDISABLE ? bt->c_cc[VINTR] : 0; 283 st->c_cc[IBCS2_VQUIT] = 284 bt->c_cc[VQUIT] != _POSIX_VDISABLE ? bt->c_cc[VQUIT] : 0; 285 st->c_cc[IBCS2_VERASE] = 286 bt->c_cc[VERASE] != _POSIX_VDISABLE ? bt->c_cc[VERASE] : 0; 287 st->c_cc[IBCS2_VKILL] = 288 bt->c_cc[VKILL] != _POSIX_VDISABLE ? bt->c_cc[VKILL] : 0; 289 if (bt->c_lflag & ICANON) { 290 st->c_cc[IBCS2_VEOF] = 291 bt->c_cc[VEOF] != _POSIX_VDISABLE ? bt->c_cc[VEOF] : 0; 292 st->c_cc[IBCS2_VEOL] = 293 bt->c_cc[VEOL] != _POSIX_VDISABLE ? bt->c_cc[VEOL] : 0; 294 } else { 295 st->c_cc[IBCS2_VMIN] = bt->c_cc[VMIN]; 296 st->c_cc[IBCS2_VTIME] = bt->c_cc[VTIME]; 297 } 298 st->c_cc[IBCS2_VEOL2] = 299 bt->c_cc[VEOL2] != _POSIX_VDISABLE ? bt->c_cc[VEOL2] : 0; 300 st->c_cc[IBCS2_VSWTCH] = 301 0; 302 st->c_cc[IBCS2_VSUSP] = 303 bt->c_cc[VSUSP] != _POSIX_VDISABLE ? bt->c_cc[VSUSP] : 0; 304 st->c_cc[IBCS2_VSTART] = 305 bt->c_cc[VSTART] != _POSIX_VDISABLE ? bt->c_cc[VSTART] : 0; 306 st->c_cc[IBCS2_VSTOP] = 307 bt->c_cc[VSTOP] != _POSIX_VDISABLE ? bt->c_cc[VSTOP] : 0; 308 309 st->c_line = 0; 310} 311 312static void 313stios2stio(ts, t) 314 struct ibcs2_termios *ts; 315 struct ibcs2_termio *t; 316{ 317 t->c_iflag = ts->c_iflag; 318 t->c_oflag = ts->c_oflag; 319 t->c_cflag = ts->c_cflag; 320 t->c_lflag = ts->c_lflag; 321 t->c_line = ts->c_line; 322 bcopy(ts->c_cc, t->c_cc, IBCS2_NCC); 323} 324 325static void 326stio2stios(t, ts) 327 struct ibcs2_termio *t; 328 struct ibcs2_termios *ts; 329{ 330 ts->c_iflag = t->c_iflag; 331 ts->c_oflag = t->c_oflag; 332 ts->c_cflag = t->c_cflag; 333 ts->c_lflag = t->c_lflag; 334 ts->c_line = t->c_line; 335 bcopy(t->c_cc, ts->c_cc, IBCS2_NCC); 336} 337 338int 339ibcs2_ioctl(td, uap) 340 struct thread *td; 341 struct ibcs2_ioctl_args *uap; 342{ 343 struct proc *p = td->td_proc;
| 59 60 61int 62ibcs2_gtty(struct thread *td, struct ibcs2_gtty_args *args) 63{ 64 struct ioctl_args ioctl_arg; 65 66 ioctl_arg.fd = args->fd; 67 ioctl_arg.com = TIOCGETC; 68 ioctl_arg.data = (caddr_t)args->buf; 69 70 return ioctl(td, &ioctl_arg); 71} 72 73int 74ibcs2_stty(struct thread *td, struct ibcs2_stty_args *args) 75{ 76 struct ioctl_args ioctl_arg; 77 78 ioctl_arg.fd = args->fd; 79 ioctl_arg.com = TIOCSETC; 80 ioctl_arg.data = (caddr_t)args->buf; 81 82 return ioctl(td, &ioctl_arg); 83} 84 85 86/* 87 * iBCS2 ioctl calls. 88 */ 89 90static struct speedtab sptab[] = { 91 { 0, 0 }, 92 { 50, 1 }, 93 { 75, 2 }, 94 { 110, 3 }, 95 { 134, 4 }, 96 { 135, 4 }, 97 { 150, 5 }, 98 { 200, 6 }, 99 { 300, 7 }, 100 { 600, 8 }, 101 { 1200, 9 }, 102 { 1800, 10 }, 103 { 2400, 11 }, 104 { 4800, 12 }, 105 { 9600, 13 }, 106 { 19200, 14 }, 107 { 38400, 15 }, 108 { -1, -1 } 109}; 110 111static u_long s2btab[] = { 112 0, 113 50, 114 75, 115 110, 116 134, 117 150, 118 200, 119 300, 120 600, 121 1200, 122 1800, 123 2400, 124 4800, 125 9600, 126 19200, 127 38400, 128}; 129 130static void 131stios2btios(st, bt) 132 struct ibcs2_termios *st; 133 struct termios *bt; 134{ 135 register u_long l, r; 136 137 l = st->c_iflag; r = 0; 138 if (l & IBCS2_IGNBRK) r |= IGNBRK; 139 if (l & IBCS2_BRKINT) r |= BRKINT; 140 if (l & IBCS2_IGNPAR) r |= IGNPAR; 141 if (l & IBCS2_PARMRK) r |= PARMRK; 142 if (l & IBCS2_INPCK) r |= INPCK; 143 if (l & IBCS2_ISTRIP) r |= ISTRIP; 144 if (l & IBCS2_INLCR) r |= INLCR; 145 if (l & IBCS2_IGNCR) r |= IGNCR; 146 if (l & IBCS2_ICRNL) r |= ICRNL; 147 if (l & IBCS2_IXON) r |= IXON; 148 if (l & IBCS2_IXANY) r |= IXANY; 149 if (l & IBCS2_IXOFF) r |= IXOFF; 150 if (l & IBCS2_IMAXBEL) r |= IMAXBEL; 151 bt->c_iflag = r; 152 153 l = st->c_oflag; r = 0; 154 if (l & IBCS2_OPOST) r |= OPOST; 155 if (l & IBCS2_ONLCR) r |= ONLCR; 156 if (l & IBCS2_TAB3) r |= OXTABS; 157 bt->c_oflag = r; 158 159 l = st->c_cflag; r = 0; 160 switch (l & IBCS2_CSIZE) { 161 case IBCS2_CS5: r |= CS5; break; 162 case IBCS2_CS6: r |= CS6; break; 163 case IBCS2_CS7: r |= CS7; break; 164 case IBCS2_CS8: r |= CS8; break; 165 } 166 if (l & IBCS2_CSTOPB) r |= CSTOPB; 167 if (l & IBCS2_CREAD) r |= CREAD; 168 if (l & IBCS2_PARENB) r |= PARENB; 169 if (l & IBCS2_PARODD) r |= PARODD; 170 if (l & IBCS2_HUPCL) r |= HUPCL; 171 if (l & IBCS2_CLOCAL) r |= CLOCAL; 172 bt->c_cflag = r; 173 174 bt->c_ispeed = bt->c_ospeed = s2btab[l & 0x0000000f]; 175 176 l = st->c_lflag; r = 0; 177 if (l & IBCS2_ISIG) r |= ISIG; 178 if (l & IBCS2_ICANON) r |= ICANON; 179 if (l & IBCS2_ECHO) r |= ECHO; 180 if (l & IBCS2_ECHOE) r |= ECHOE; 181 if (l & IBCS2_ECHOK) r |= ECHOK; 182 if (l & IBCS2_ECHONL) r |= ECHONL; 183 if (l & IBCS2_NOFLSH) r |= NOFLSH; 184 if (l & IBCS2_TOSTOP) r |= TOSTOP; 185 bt->c_lflag = r; 186 187 bt->c_cc[VINTR] = 188 st->c_cc[IBCS2_VINTR] ? st->c_cc[IBCS2_VINTR] : _POSIX_VDISABLE; 189 bt->c_cc[VQUIT] = 190 st->c_cc[IBCS2_VQUIT] ? st->c_cc[IBCS2_VQUIT] : _POSIX_VDISABLE; 191 bt->c_cc[VERASE] = 192 st->c_cc[IBCS2_VERASE] ? st->c_cc[IBCS2_VERASE] : _POSIX_VDISABLE; 193 bt->c_cc[VKILL] = 194 st->c_cc[IBCS2_VKILL] ? st->c_cc[IBCS2_VKILL] : _POSIX_VDISABLE; 195 if (bt->c_lflag & ICANON) { 196 bt->c_cc[VEOF] = 197 st->c_cc[IBCS2_VEOF] ? st->c_cc[IBCS2_VEOF] : _POSIX_VDISABLE; 198 bt->c_cc[VEOL] = 199 st->c_cc[IBCS2_VEOL] ? st->c_cc[IBCS2_VEOL] : _POSIX_VDISABLE; 200 } else { 201 bt->c_cc[VMIN] = st->c_cc[IBCS2_VMIN]; 202 bt->c_cc[VTIME] = st->c_cc[IBCS2_VTIME]; 203 } 204 bt->c_cc[VEOL2] = 205 st->c_cc[IBCS2_VEOL2] ? st->c_cc[IBCS2_VEOL2] : _POSIX_VDISABLE; 206#if 0 207 bt->c_cc[VSWTCH] = 208 st->c_cc[IBCS2_VSWTCH] ? st->c_cc[IBCS2_VSWTCH] : _POSIX_VDISABLE; 209#endif 210 bt->c_cc[VSTART] = 211 st->c_cc[IBCS2_VSTART] ? st->c_cc[IBCS2_VSTART] : _POSIX_VDISABLE; 212 bt->c_cc[VSTOP] = 213 st->c_cc[IBCS2_VSTOP] ? st->c_cc[IBCS2_VSTOP] : _POSIX_VDISABLE; 214 bt->c_cc[VSUSP] = 215 st->c_cc[IBCS2_VSUSP] ? st->c_cc[IBCS2_VSUSP] : _POSIX_VDISABLE; 216 bt->c_cc[VDSUSP] = _POSIX_VDISABLE; 217 bt->c_cc[VREPRINT] = _POSIX_VDISABLE; 218 bt->c_cc[VDISCARD] = _POSIX_VDISABLE; 219 bt->c_cc[VWERASE] = _POSIX_VDISABLE; 220 bt->c_cc[VLNEXT] = _POSIX_VDISABLE; 221 bt->c_cc[VSTATUS] = _POSIX_VDISABLE; 222} 223 224static void 225btios2stios(bt, st) 226 struct termios *bt; 227 struct ibcs2_termios *st; 228{ 229 register u_long l, r; 230 231 l = bt->c_iflag; r = 0; 232 if (l & IGNBRK) r |= IBCS2_IGNBRK; 233 if (l & BRKINT) r |= IBCS2_BRKINT; 234 if (l & IGNPAR) r |= IBCS2_IGNPAR; 235 if (l & PARMRK) r |= IBCS2_PARMRK; 236 if (l & INPCK) r |= IBCS2_INPCK; 237 if (l & ISTRIP) r |= IBCS2_ISTRIP; 238 if (l & INLCR) r |= IBCS2_INLCR; 239 if (l & IGNCR) r |= IBCS2_IGNCR; 240 if (l & ICRNL) r |= IBCS2_ICRNL; 241 if (l & IXON) r |= IBCS2_IXON; 242 if (l & IXANY) r |= IBCS2_IXANY; 243 if (l & IXOFF) r |= IBCS2_IXOFF; 244 if (l & IMAXBEL) r |= IBCS2_IMAXBEL; 245 st->c_iflag = r; 246 247 l = bt->c_oflag; r = 0; 248 if (l & OPOST) r |= IBCS2_OPOST; 249 if (l & ONLCR) r |= IBCS2_ONLCR; 250 if (l & OXTABS) r |= IBCS2_TAB3; 251 st->c_oflag = r; 252 253 l = bt->c_cflag; r = 0; 254 switch (l & CSIZE) { 255 case CS5: r |= IBCS2_CS5; break; 256 case CS6: r |= IBCS2_CS6; break; 257 case CS7: r |= IBCS2_CS7; break; 258 case CS8: r |= IBCS2_CS8; break; 259 } 260 if (l & CSTOPB) r |= IBCS2_CSTOPB; 261 if (l & CREAD) r |= IBCS2_CREAD; 262 if (l & PARENB) r |= IBCS2_PARENB; 263 if (l & PARODD) r |= IBCS2_PARODD; 264 if (l & HUPCL) r |= IBCS2_HUPCL; 265 if (l & CLOCAL) r |= IBCS2_CLOCAL; 266 st->c_cflag = r; 267 268 l = bt->c_lflag; r = 0; 269 if (l & ISIG) r |= IBCS2_ISIG; 270 if (l & ICANON) r |= IBCS2_ICANON; 271 if (l & ECHO) r |= IBCS2_ECHO; 272 if (l & ECHOE) r |= IBCS2_ECHOE; 273 if (l & ECHOK) r |= IBCS2_ECHOK; 274 if (l & ECHONL) r |= IBCS2_ECHONL; 275 if (l & NOFLSH) r |= IBCS2_NOFLSH; 276 if (l & TOSTOP) r |= IBCS2_TOSTOP; 277 st->c_lflag = r; 278 279 l = ttspeedtab(bt->c_ospeed, sptab); 280 if ((int)l >= 0) 281 st->c_cflag |= l; 282 283 st->c_cc[IBCS2_VINTR] = 284 bt->c_cc[VINTR] != _POSIX_VDISABLE ? bt->c_cc[VINTR] : 0; 285 st->c_cc[IBCS2_VQUIT] = 286 bt->c_cc[VQUIT] != _POSIX_VDISABLE ? bt->c_cc[VQUIT] : 0; 287 st->c_cc[IBCS2_VERASE] = 288 bt->c_cc[VERASE] != _POSIX_VDISABLE ? bt->c_cc[VERASE] : 0; 289 st->c_cc[IBCS2_VKILL] = 290 bt->c_cc[VKILL] != _POSIX_VDISABLE ? bt->c_cc[VKILL] : 0; 291 if (bt->c_lflag & ICANON) { 292 st->c_cc[IBCS2_VEOF] = 293 bt->c_cc[VEOF] != _POSIX_VDISABLE ? bt->c_cc[VEOF] : 0; 294 st->c_cc[IBCS2_VEOL] = 295 bt->c_cc[VEOL] != _POSIX_VDISABLE ? bt->c_cc[VEOL] : 0; 296 } else { 297 st->c_cc[IBCS2_VMIN] = bt->c_cc[VMIN]; 298 st->c_cc[IBCS2_VTIME] = bt->c_cc[VTIME]; 299 } 300 st->c_cc[IBCS2_VEOL2] = 301 bt->c_cc[VEOL2] != _POSIX_VDISABLE ? bt->c_cc[VEOL2] : 0; 302 st->c_cc[IBCS2_VSWTCH] = 303 0; 304 st->c_cc[IBCS2_VSUSP] = 305 bt->c_cc[VSUSP] != _POSIX_VDISABLE ? bt->c_cc[VSUSP] : 0; 306 st->c_cc[IBCS2_VSTART] = 307 bt->c_cc[VSTART] != _POSIX_VDISABLE ? bt->c_cc[VSTART] : 0; 308 st->c_cc[IBCS2_VSTOP] = 309 bt->c_cc[VSTOP] != _POSIX_VDISABLE ? bt->c_cc[VSTOP] : 0; 310 311 st->c_line = 0; 312} 313 314static void 315stios2stio(ts, t) 316 struct ibcs2_termios *ts; 317 struct ibcs2_termio *t; 318{ 319 t->c_iflag = ts->c_iflag; 320 t->c_oflag = ts->c_oflag; 321 t->c_cflag = ts->c_cflag; 322 t->c_lflag = ts->c_lflag; 323 t->c_line = ts->c_line; 324 bcopy(ts->c_cc, t->c_cc, IBCS2_NCC); 325} 326 327static void 328stio2stios(t, ts) 329 struct ibcs2_termio *t; 330 struct ibcs2_termios *ts; 331{ 332 ts->c_iflag = t->c_iflag; 333 ts->c_oflag = t->c_oflag; 334 ts->c_cflag = t->c_cflag; 335 ts->c_lflag = t->c_lflag; 336 ts->c_line = t->c_line; 337 bcopy(t->c_cc, ts->c_cc, IBCS2_NCC); 338} 339 340int 341ibcs2_ioctl(td, uap) 342 struct thread *td; 343 struct ibcs2_ioctl_args *uap; 344{ 345 struct proc *p = td->td_proc;
|
344 struct filedesc *fdp = p->p_fd;
| |
345 struct file *fp; 346 int error; 347
| 346 struct file *fp; 347 int error; 348
|
348 if (SCARG(uap, fd) < 0 || SCARG(uap, fd) >= fdp->fd_nfiles || 349 (fp = fdp->fd_ofiles[SCARG(uap, fd)]) == NULL) {
| 349 fp = ffind_hold(td, uap->fd); 350 if (fp == NULL) {
|
350 DPRINTF(("ibcs2_ioctl(%d): bad fd %d ", p->p_pid, 351 SCARG(uap, fd))); 352 return EBADF; 353 } 354 355 if ((fp->f_flag & (FREAD|FWRITE)) == 0) {
| 351 DPRINTF(("ibcs2_ioctl(%d): bad fd %d ", p->p_pid, 352 SCARG(uap, fd))); 353 return EBADF; 354 } 355 356 if ((fp->f_flag & (FREAD|FWRITE)) == 0) {
|
| 357 fdrop(fp, td);
|
356 DPRINTF(("ibcs2_ioctl(%d): bad fp flag ", p->p_pid)); 357 return EBADF; 358 } 359 360 switch (SCARG(uap, cmd)) { 361 case IBCS2_TCGETA: 362 case IBCS2_XCGETA: 363 case IBCS2_OXCGETA: 364 { 365 struct termios bts; 366 struct ibcs2_termios sts; 367 struct ibcs2_termio st; 368 369 if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bts, td)) != 0)
| 358 DPRINTF(("ibcs2_ioctl(%d): bad fp flag ", p->p_pid)); 359 return EBADF; 360 } 361 362 switch (SCARG(uap, cmd)) { 363 case IBCS2_TCGETA: 364 case IBCS2_XCGETA: 365 case IBCS2_OXCGETA: 366 { 367 struct termios bts; 368 struct ibcs2_termios sts; 369 struct ibcs2_termio st; 370 371 if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bts, td)) != 0)
|
370 return error;
| 372 break;
|
371 372 btios2stios (&bts, &sts); 373 if (SCARG(uap, cmd) == IBCS2_TCGETA) { 374 stios2stio (&sts, &st); 375 error = copyout((caddr_t)&st, SCARG(uap, data), 376 sizeof (st)); 377#ifdef DEBUG_IBCS2 378 if (error) 379 DPRINTF(("ibcs2_ioctl(%d): copyout failed ", 380 p->p_pid)); 381#endif
| 373 374 btios2stios (&bts, &sts); 375 if (SCARG(uap, cmd) == IBCS2_TCGETA) { 376 stios2stio (&sts, &st); 377 error = copyout((caddr_t)&st, SCARG(uap, data), 378 sizeof (st)); 379#ifdef DEBUG_IBCS2 380 if (error) 381 DPRINTF(("ibcs2_ioctl(%d): copyout failed ", 382 p->p_pid)); 383#endif
|
382 return error; 383 } else 384 return copyout((caddr_t)&sts, SCARG(uap, data),
| 384 break; 385 } else { 386 error = copyout((caddr_t)&sts, SCARG(uap, data),
|
385 sizeof (sts));
| 387 sizeof (sts));
|
| 388 break; 389 }
|
386 /*NOTREACHED*/ 387 } 388 389 case IBCS2_TCSETA: 390 case IBCS2_TCSETAW: 391 case IBCS2_TCSETAF: 392 { 393 struct termios bts; 394 struct ibcs2_termios sts; 395 struct ibcs2_termio st; 396 397 if ((error = copyin(SCARG(uap, data), (caddr_t)&st, 398 sizeof(st))) != 0) { 399 DPRINTF(("ibcs2_ioctl(%d): TCSET copyin failed ", 400 p->p_pid));
| 390 /*NOTREACHED*/ 391 } 392 393 case IBCS2_TCSETA: 394 case IBCS2_TCSETAW: 395 case IBCS2_TCSETAF: 396 { 397 struct termios bts; 398 struct ibcs2_termios sts; 399 struct ibcs2_termio st; 400 401 if ((error = copyin(SCARG(uap, data), (caddr_t)&st, 402 sizeof(st))) != 0) { 403 DPRINTF(("ibcs2_ioctl(%d): TCSET copyin failed ", 404 p->p_pid));
|
401 return error;
| 405 break;
|
402 } 403 404 /* get full BSD termios so we don't lose information */ 405 if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bts, td)) != 0) { 406 DPRINTF(("ibcs2_ioctl(%d): TCSET ctl failed fd %d ", 407 p->p_pid, SCARG(uap, fd)));
| 406 } 407 408 /* get full BSD termios so we don't lose information */ 409 if ((error = fo_ioctl(fp, TIOCGETA, (caddr_t)&bts, td)) != 0) { 410 DPRINTF(("ibcs2_ioctl(%d): TCSET ctl failed fd %d ", 411 p->p_pid, SCARG(uap, fd)));
|
408 return error;
| 412 break;
|
409 } 410 411 /* 412 * convert to iBCS2 termios, copy in information from 413 * termio, and convert back, then set new values. 414 */ 415 btios2stios(&bts, &sts); 416 stio2stios(&st, &sts); 417 stios2btios(&sts, &bts); 418
| 413 } 414 415 /* 416 * convert to iBCS2 termios, copy in information from 417 * termio, and convert back, then set new values. 418 */ 419 btios2stios(&bts, &sts); 420 stio2stios(&st, &sts); 421 stios2btios(&sts, &bts); 422
|
419 return fo_ioctl(fp, SCARG(uap, cmd) - IBCS2_TCSETA + TIOCSETA,
| 423 error = fo_ioctl(fp, SCARG(uap, cmd) - IBCS2_TCSETA + TIOCSETA,
|
420 (caddr_t)&bts, td);
| 424 (caddr_t)&bts, td);
|
| 425 break;
|
421 } 422 423 case IBCS2_XCSETA: 424 case IBCS2_XCSETAW: 425 case IBCS2_XCSETAF: 426 { 427 struct termios bts; 428 struct ibcs2_termios sts; 429 430 if ((error = copyin(SCARG(uap, data), (caddr_t)&sts,
| 426 } 427 428 case IBCS2_XCSETA: 429 case IBCS2_XCSETAW: 430 case IBCS2_XCSETAF: 431 { 432 struct termios bts; 433 struct ibcs2_termios sts; 434 435 if ((error = copyin(SCARG(uap, data), (caddr_t)&sts,
|
431 sizeof (sts))) != 0) { 432 return error; 433 }
| 436 sizeof (sts))) != 0) 437 break;
|
434 stios2btios (&sts, &bts);
| 438 stios2btios (&sts, &bts);
|
435 return fo_ioctl(fp, SCARG(uap, cmd) - IBCS2_XCSETA + TIOCSETA,
| 439 error = fo_ioctl(fp, SCARG(uap, cmd) - IBCS2_XCSETA + TIOCSETA,
|
436 (caddr_t)&bts, td);
| 440 (caddr_t)&bts, td);
|
| 441 break;
|
437 } 438 439 case IBCS2_OXCSETA: 440 case IBCS2_OXCSETAW: 441 case IBCS2_OXCSETAF: 442 { 443 struct termios bts; 444 struct ibcs2_termios sts; 445 446 if ((error = copyin(SCARG(uap, data), (caddr_t)&sts,
| 442 } 443 444 case IBCS2_OXCSETA: 445 case IBCS2_OXCSETAW: 446 case IBCS2_OXCSETAF: 447 { 448 struct termios bts; 449 struct ibcs2_termios sts; 450 451 if ((error = copyin(SCARG(uap, data), (caddr_t)&sts,
|
447 sizeof (sts))) != 0) { 448 return error; 449 }
| 452 sizeof (sts))) != 0) 453 break;
|
450 stios2btios (&sts, &bts);
| 454 stios2btios (&sts, &bts);
|
451 return fo_ioctl(fp, SCARG(uap, cmd) - IBCS2_OXCSETA + TIOCSETA,
| 455 error = fo_ioctl(fp, SCARG(uap, cmd) - IBCS2_OXCSETA + TIOCSETA,
|
452 (caddr_t)&bts, td);
| 456 (caddr_t)&bts, td);
|
| 457 break;
|
453 } 454 455 case IBCS2_TCSBRK: 456 DPRINTF(("ibcs2_ioctl(%d): TCSBRK ", p->p_pid));
| 458 } 459 460 case IBCS2_TCSBRK: 461 DPRINTF(("ibcs2_ioctl(%d): TCSBRK ", p->p_pid));
|
457 return ENOSYS;
| 462 error = ENOSYS; 463 break;
|
458 459 case IBCS2_TCXONC: 460 { 461 switch ((int)SCARG(uap, data)) { 462 case 0: 463 case 1: 464 DPRINTF(("ibcs2_ioctl(%d): TCXONC ", p->p_pid));
| 464 465 case IBCS2_TCXONC: 466 { 467 switch ((int)SCARG(uap, data)) { 468 case 0: 469 case 1: 470 DPRINTF(("ibcs2_ioctl(%d): TCXONC ", p->p_pid));
|
465 return ENOSYS;
| 471 error = ENOSYS; 472 break;
|
466 case 2:
| 473 case 2:
|
467 return fo_ioctl(fp, TIOCSTOP, (caddr_t)0, td);
| 474 error = fo_ioctl(fp, TIOCSTOP, (caddr_t)0, td); 475 break;
|
468 case 3:
| 476 case 3:
|
469 return fo_ioctl(fp, TIOCSTART, (caddr_t)1, td);
| 477 error = fo_ioctl(fp, TIOCSTART, (caddr_t)1, td); 478 break;
|
470 default:
| 479 default:
|
471 return EINVAL;
| 480 error = EINVAL; 481 break;
|
472 }
| 482 }
|
| 483 break;
|
473 } 474 475 case IBCS2_TCFLSH: 476 { 477 int arg; 478 479 switch ((int)SCARG(uap, data)) { 480 case 0: 481 arg = FREAD; 482 break; 483 case 1: 484 arg = FWRITE; 485 break; 486 case 2: 487 arg = FREAD | FWRITE; 488 break; 489 default:
| 484 } 485 486 case IBCS2_TCFLSH: 487 { 488 int arg; 489 490 switch ((int)SCARG(uap, data)) { 491 case 0: 492 arg = FREAD; 493 break; 494 case 1: 495 arg = FWRITE; 496 break; 497 case 2: 498 arg = FREAD | FWRITE; 499 break; 500 default:
|
| 501 fdrop(fp, td);
|
490 return EINVAL; 491 }
| 502 return EINVAL; 503 }
|
492 return fo_ioctl(fp, TIOCFLUSH, (caddr_t)&arg, td);
| 504 error = fo_ioctl(fp, TIOCFLUSH, (caddr_t)&arg, td); 505 break;
|
493 } 494 495 case IBCS2_TIOCGWINSZ: 496 SCARG(uap, cmd) = TIOCGWINSZ;
| 506 } 507 508 case IBCS2_TIOCGWINSZ: 509 SCARG(uap, cmd) = TIOCGWINSZ;
|
497 return ioctl(td, (struct ioctl_args *)uap);
| 510 error = ioctl(td, (struct ioctl_args *)uap); 511 break;
|
498 499 case IBCS2_TIOCSWINSZ: 500 SCARG(uap, cmd) = TIOCSWINSZ;
| 512 513 case IBCS2_TIOCSWINSZ: 514 SCARG(uap, cmd) = TIOCSWINSZ;
|
501 return ioctl(td, (struct ioctl_args *)uap);
| 515 error = ioctl(td, (struct ioctl_args *)uap); 516 break;
|
502 503 case IBCS2_TIOCGPGRP:
| 517 518 case IBCS2_TIOCGPGRP:
|
| 519 { 520 pid_t pg_id; 521
|
504 PROC_LOCK(p);
| 522 PROC_LOCK(p);
|
505 error = copyout((caddr_t)&p->p_pgrp->pg_id, SCARG(uap, data), 506 sizeof(p->p_pgrp->pg_id));
| 523 pg_id = p->p_pgrp->pg_id;
|
507 PROC_UNLOCK(p);
| 524 PROC_UNLOCK(p);
|
508 return error;
| 525 error = copyout((caddr_t)&pg_id, SCARG(uap, data), 526 sizeof(pg_id)); 527 break; 528 }
|
509 510 case IBCS2_TIOCSPGRP: /* XXX - is uap->data a pointer to pgid? */ 511 { 512 struct setpgid_args sa; 513 514 SCARG(&sa, pid) = 0; 515 SCARG(&sa, pgid) = (int)SCARG(uap, data);
| 529 530 case IBCS2_TIOCSPGRP: /* XXX - is uap->data a pointer to pgid? */ 531 { 532 struct setpgid_args sa; 533 534 SCARG(&sa, pid) = 0; 535 SCARG(&sa, pgid) = (int)SCARG(uap, data);
|
516 if ((error = setpgid(td, &sa)) != 0) 517 return error; 518 return 0;
| 536 error = setpgid(td, &sa); 537 break;
|
519 } 520 521 case IBCS2_TCGETSC: /* SCO console - get scancode flags */
| 538 } 539 540 case IBCS2_TCGETSC: /* SCO console - get scancode flags */
|
522 return EINTR; /* ENOSYS; */
| 541 error = EINTR; /* ENOSYS; */ 542 break;
|
523 524 case IBCS2_TCSETSC: /* SCO console - set scancode flags */
| 543 544 case IBCS2_TCSETSC: /* SCO console - set scancode flags */
|
525 return 0; /* ENOSYS; */
| 545 error = 0; /* ENOSYS; */ 546 break;
|
526 527 case IBCS2_JWINSIZE: /* Unix to Jerq I/O control */ 528 { 529 struct ibcs2_jwinsize { 530 char bytex, bytey; 531 short bitx, bity; 532 } ibcs2_jwinsize; 533 534 PROC_LOCK(p); 535 ibcs2_jwinsize.bytex = 80; 536 /* p->p_session->s_ttyp->t_winsize.ws_col; XXX */ 537 ibcs2_jwinsize.bytey = 25; 538 /* p->p_session->s_ttyp->t_winsize.ws_row; XXX */ 539 ibcs2_jwinsize.bitx = 540 p->p_session->s_ttyp->t_winsize.ws_xpixel; 541 ibcs2_jwinsize.bity = 542 p->p_session->s_ttyp->t_winsize.ws_ypixel; 543 PROC_UNLOCK(p);
| 547 548 case IBCS2_JWINSIZE: /* Unix to Jerq I/O control */ 549 { 550 struct ibcs2_jwinsize { 551 char bytex, bytey; 552 short bitx, bity; 553 } ibcs2_jwinsize; 554 555 PROC_LOCK(p); 556 ibcs2_jwinsize.bytex = 80; 557 /* p->p_session->s_ttyp->t_winsize.ws_col; XXX */ 558 ibcs2_jwinsize.bytey = 25; 559 /* p->p_session->s_ttyp->t_winsize.ws_row; XXX */ 560 ibcs2_jwinsize.bitx = 561 p->p_session->s_ttyp->t_winsize.ws_xpixel; 562 ibcs2_jwinsize.bity = 563 p->p_session->s_ttyp->t_winsize.ws_ypixel; 564 PROC_UNLOCK(p);
|
544 return copyout((caddr_t)&ibcs2_jwinsize, SCARG(uap, data),
| 565 error = copyout((caddr_t)&ibcs2_jwinsize, SCARG(uap, data),
|
545 sizeof(ibcs2_jwinsize));
| 566 sizeof(ibcs2_jwinsize));
|
| 567 break;
|
546 } 547 548 /* keyboard and display ioctl's -- type 'K' */ 549 case IBCS2_KDGKBMODE: /* get keyboard translation mode */ 550 SCARG(uap, cmd) = KDGKBMODE; 551/* printf("ioctl KDGKBMODE = %x\n", SCARG(uap, cmd));*/
| 568 } 569 570 /* keyboard and display ioctl's -- type 'K' */ 571 case IBCS2_KDGKBMODE: /* get keyboard translation mode */ 572 SCARG(uap, cmd) = KDGKBMODE; 573/* printf("ioctl KDGKBMODE = %x\n", SCARG(uap, cmd));*/
|
552 return ioctl(td, (struct ioctl_args *)uap);
| 574 error = ioctl(td, (struct ioctl_args *)uap); 575 break;
|
553 554 case IBCS2_KDSKBMODE: /* set keyboard translation mode */ 555 SCARG(uap, cmd) = KDSKBMODE;
| 576 577 case IBCS2_KDSKBMODE: /* set keyboard translation mode */ 578 SCARG(uap, cmd) = KDSKBMODE;
|
556 return ioctl(td, (struct ioctl_args *)uap);
| 579 error = ioctl(td, (struct ioctl_args *)uap); 580 break;
|
557 558 case IBCS2_KDMKTONE: /* sound tone */ 559 SCARG(uap, cmd) = KDMKTONE;
| 581 582 case IBCS2_KDMKTONE: /* sound tone */ 583 SCARG(uap, cmd) = KDMKTONE;
|
560 return ioctl(td, (struct ioctl_args *)uap);
| 584 error = ioctl(td, (struct ioctl_args *)uap); 585 break;
|
561 562 case IBCS2_KDGETMODE: /* get text/graphics mode */ 563 SCARG(uap, cmd) = KDGETMODE;
| 586 587 case IBCS2_KDGETMODE: /* get text/graphics mode */ 588 SCARG(uap, cmd) = KDGETMODE;
|
564 return ioctl(td, (struct ioctl_args *)uap);
| 589 error = ioctl(td, (struct ioctl_args *)uap); 590 break;
|
565 566 case IBCS2_KDSETMODE: /* set text/graphics mode */ 567 SCARG(uap, cmd) = KDSETMODE;
| 591 592 case IBCS2_KDSETMODE: /* set text/graphics mode */ 593 SCARG(uap, cmd) = KDSETMODE;
|
568 return ioctl(td, (struct ioctl_args *)uap);
| 594 error = ioctl(td, (struct ioctl_args *)uap); 595 break;
|
569 570 case IBCS2_KDSBORDER: /* set ega color border */ 571 SCARG(uap, cmd) = KDSBORDER;
| 596 597 case IBCS2_KDSBORDER: /* set ega color border */ 598 SCARG(uap, cmd) = KDSBORDER;
|
572 return ioctl(td, (struct ioctl_args *)uap);
| 599 error = ioctl(td, (struct ioctl_args *)uap); 600 break;
|
573 574 case IBCS2_KDGKBSTATE: 575 SCARG(uap, cmd) = KDGKBSTATE;
| 601 602 case IBCS2_KDGKBSTATE: 603 SCARG(uap, cmd) = KDGKBSTATE;
|
576 return ioctl(td, (struct ioctl_args *)uap);
| 604 error = ioctl(td, (struct ioctl_args *)uap); 605 break;
|
577 578 case IBCS2_KDSETRAD: 579 SCARG(uap, cmd) = KDSETRAD;
| 606 607 case IBCS2_KDSETRAD: 608 SCARG(uap, cmd) = KDSETRAD;
|
580 return ioctl(td, (struct ioctl_args *)uap);
| 609 error = ioctl(td, (struct ioctl_args *)uap); 610 break;
|
581 582 case IBCS2_KDENABIO: /* enable direct I/O to ports */ 583 SCARG(uap, cmd) = KDENABIO;
| 611 612 case IBCS2_KDENABIO: /* enable direct I/O to ports */ 613 SCARG(uap, cmd) = KDENABIO;
|
584 return ioctl(td, (struct ioctl_args *)uap);
| 614 error = ioctl(td, (struct ioctl_args *)uap); 615 break;
|
585 586 case IBCS2_KDDISABIO: /* disable direct I/O to ports */ 587 SCARG(uap, cmd) = KDDISABIO;
| 616 617 case IBCS2_KDDISABIO: /* disable direct I/O to ports */ 618 SCARG(uap, cmd) = KDDISABIO;
|
588 return ioctl(td, (struct ioctl_args *)uap);
| 619 error = ioctl(td, (struct ioctl_args *)uap); 620 break;
|
589 590 case IBCS2_KIOCSOUND: /* start sound generation */ 591 SCARG(uap, cmd) = KIOCSOUND;
| 621 622 case IBCS2_KIOCSOUND: /* start sound generation */ 623 SCARG(uap, cmd) = KIOCSOUND;
|
592 return ioctl(td, (struct ioctl_args *)uap);
| 624 error = ioctl(td, (struct ioctl_args *)uap); 625 break;
|
593 594 case IBCS2_KDGKBTYPE: /* get keyboard type */ 595 SCARG(uap, cmd) = KDGKBTYPE;
| 626 627 case IBCS2_KDGKBTYPE: /* get keyboard type */ 628 SCARG(uap, cmd) = KDGKBTYPE;
|
596 return ioctl(td, (struct ioctl_args *)uap);
| 629 error = ioctl(td, (struct ioctl_args *)uap); 630 break;
|
597 598 case IBCS2_KDGETLED: /* get keyboard LED status */ 599 SCARG(uap, cmd) = KDGETLED;
| 631 632 case IBCS2_KDGETLED: /* get keyboard LED status */ 633 SCARG(uap, cmd) = KDGETLED;
|
600 return ioctl(td, (struct ioctl_args *)uap);
| 634 error = ioctl(td, (struct ioctl_args *)uap); 635 break;
|
601 602 case IBCS2_KDSETLED: /* set keyboard LED status */ 603 SCARG(uap, cmd) = KDSETLED;
| 636 637 case IBCS2_KDSETLED: /* set keyboard LED status */ 638 SCARG(uap, cmd) = KDSETLED;
|
604 return ioctl(td, (struct ioctl_args *)uap);
| 639 error = ioctl(td, (struct ioctl_args *)uap); 640 break;
|
605 606 /* Xenix keyboard and display ioctl's from sys/kd.h -- type 'k' */ 607 case IBCS2_GETFKEY: /* Get function key */ 608 SCARG(uap, cmd) = GETFKEY;
| 641 642 /* Xenix keyboard and display ioctl's from sys/kd.h -- type 'k' */ 643 case IBCS2_GETFKEY: /* Get function key */ 644 SCARG(uap, cmd) = GETFKEY;
|
609 return ioctl(td, (struct ioctl_args *)uap);
| 645 error = ioctl(td, (struct ioctl_args *)uap); 646 break;
|
610 611 case IBCS2_SETFKEY: /* Set function key */ 612 SCARG(uap, cmd) = SETFKEY;
| 647 648 case IBCS2_SETFKEY: /* Set function key */ 649 SCARG(uap, cmd) = SETFKEY;
|
613 return ioctl(td, (struct ioctl_args *)uap);
| 650 error = ioctl(td, (struct ioctl_args *)uap); 651 break;
|
614 615 case IBCS2_GIO_SCRNMAP: /* Get screen output map table */ 616 SCARG(uap, cmd) = GIO_SCRNMAP;
| 652 653 case IBCS2_GIO_SCRNMAP: /* Get screen output map table */ 654 SCARG(uap, cmd) = GIO_SCRNMAP;
|
617 return ioctl(td, (struct ioctl_args *)uap);
| 655 error = ioctl(td, (struct ioctl_args *)uap); 656 break;
|
618 619 case IBCS2_PIO_SCRNMAP: /* Set screen output map table */ 620 SCARG(uap, cmd) = PIO_SCRNMAP;
| 657 658 case IBCS2_PIO_SCRNMAP: /* Set screen output map table */ 659 SCARG(uap, cmd) = PIO_SCRNMAP;
|
621 return ioctl(td, (struct ioctl_args *)uap);
| 660 error = ioctl(td, (struct ioctl_args *)uap); 661 break;
|
622 623 case IBCS2_GIO_KEYMAP: /* Get keyboard map table */ 624 SCARG(uap, cmd) = GIO_KEYMAP;
| 662 663 case IBCS2_GIO_KEYMAP: /* Get keyboard map table */ 664 SCARG(uap, cmd) = GIO_KEYMAP;
|
625 return ioctl(td, (struct ioctl_args *)uap);
| 665 error = ioctl(td, (struct ioctl_args *)uap); 666 break;
|
626 627 case IBCS2_PIO_KEYMAP: /* Set keyboard map table */ 628 SCARG(uap, cmd) = PIO_KEYMAP;
| 667 668 case IBCS2_PIO_KEYMAP: /* Set keyboard map table */ 669 SCARG(uap, cmd) = PIO_KEYMAP;
|
629 return ioctl(td, (struct ioctl_args *)uap);
| 670 error = ioctl(td, (struct ioctl_args *)uap); 671 break;
|
630 631 /* socksys */ 632 case IBCS2_SIOCSOCKSYS:
| 672 673 /* socksys */ 674 case IBCS2_SIOCSOCKSYS:
|
633 return ibcs2_socksys(td, (struct ibcs2_socksys_args *)uap);
| 675 error = ibcs2_socksys(td, (struct ibcs2_socksys_args *)uap); 676 break;
|
634 635 case IBCS2_FIONREAD: 636 case IBCS2_I_NREAD: /* STREAMS */ 637 SCARG(uap, cmd) = FIONREAD;
| 677 678 case IBCS2_FIONREAD: 679 case IBCS2_I_NREAD: /* STREAMS */ 680 SCARG(uap, cmd) = FIONREAD;
|
638 return ioctl(td, (struct ioctl_args *)uap);
| 681 error = ioctl(td, (struct ioctl_args *)uap); 682 break;
|
639 640 default: 641 DPRINTF(("ibcs2_ioctl(%d): unknown cmd 0x%lx ", 642 td->proc->p_pid, SCARG(uap, cmd)));
| 683 684 default: 685 DPRINTF(("ibcs2_ioctl(%d): unknown cmd 0x%lx ", 686 td->proc->p_pid, SCARG(uap, cmd)));
|
643 return ENOSYS;
| 687 error = ENOSYS; 688 break;
|
644 }
| 689 }
|
645 return ENOSYS;
| 690 691 fdrop(fp, td); 692 return error;
|
646}
| 693}
|