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} |