1/*- 2 * Copyright (c) 1999 Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 9 unchanged lines hidden (view full) --- 18 * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, 19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 * |
26 * $FreeBSD: head/sys/dev/kbd/kbd.c 83366 2001-09-12 08:38:13Z julian $ |
27 */ 28 29#include "opt_kbd.h" 30 31#include <sys/param.h> 32#include <sys/systm.h> 33#include <sys/kernel.h> 34#include <sys/malloc.h> --- 451 unchanged lines hidden (view full) --- 486 */ 487 488#define KB_QSIZE 512 489#define KB_BUFSIZE 64 490 491static kbd_callback_func_t genkbd_event; 492 493static int |
494genkbdopen(dev_t dev, int mode, int flag, struct thread *td) |
495{ 496 keyboard_t *kbd; 497 genkbd_softc_t *sc; 498 int s; 499 int i; 500 501 s = spltty(); 502 sc = dev->si_drv1; --- 23 unchanged lines hidden (view full) --- 526 sc->gkb_rsel.si_flags = 0; 527 sc->gkb_rsel.si_pid = 0; 528 splx(s); 529 530 return 0; 531} 532 533static int |
534genkbdclose(dev_t dev, int mode, int flag, struct thread *td) |
535{ 536 keyboard_t *kbd; 537 genkbd_softc_t *sc; 538 int s; 539 540 /* 541 * NOTE: the device may have already become invalid. 542 * kbd == NULL || !KBD_IS_VALID(kbd) --- 73 unchanged lines hidden (view full) --- 616 617 kbd = kbd_get_keyboard(KBD_INDEX(dev)); 618 if ((kbd == NULL) || !KBD_IS_VALID(kbd)) 619 return ENXIO; 620 return ENODEV; 621} 622 623static int |
624genkbdioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td) |
625{ 626 keyboard_t *kbd; 627 int error; 628 629 kbd = kbd_get_keyboard(KBD_INDEX(dev)); 630 if ((kbd == NULL) || !KBD_IS_VALID(kbd)) 631 return ENXIO; 632 error = (*kbdsw[kbd->kb_index]->ioctl)(kbd, cmd, arg); 633 if (error == ENOIOCTL) 634 error = ENODEV; 635 return error; 636} 637 638static int |
639genkbdpoll(dev_t dev, int events, struct thread *td) |
640{ 641 keyboard_t *kbd; 642 genkbd_softc_t *sc; 643 int revents; 644 int s; 645 646 revents = 0; 647 s = spltty(); 648 sc = dev->si_drv1; 649 kbd = kbd_get_keyboard(KBD_INDEX(dev)); 650 if ((sc == NULL) || (kbd == NULL) || !KBD_IS_VALID(kbd)) { 651 revents = POLLHUP; /* the keyboard has gone */ 652 } else if (events & (POLLIN | POLLRDNORM)) { 653 if (sc->gkb_q.c_cc > 0) 654 revents = events & (POLLIN | POLLRDNORM); 655 else |
656 selrecord(td, &sc->gkb_rsel); |
657 } 658 splx(s); 659 return revents; 660} 661 662static int 663genkbd_event(keyboard_t *kbd, int event, void *arg) 664{ --- 591 unchanged lines hidden --- |