Deleted Added
full compact
ibcs2_ioctl.c (86468) ibcs2_ioctl.c (89306)
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 *

--- 11 unchanged lines hidden (view full) ---

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 *

--- 11 unchanged lines hidden (view full) ---

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>

--- 12 unchanged lines hidden (view full) ---

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>

--- 12 unchanged lines hidden (view full) ---

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;

--- 271 unchanged lines hidden (view full) ---

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;

--- 271 unchanged lines hidden (view full) ---

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}