kbd-std.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * This file is subject to the terms and conditions of the GNU General Public
  3.  * License.  See the file "COPYING" in the main directory of this archive
  4.  * for more details.
  5.  *
  6.  * Routines for standard PC style keyboards accessible via I/O ports.
  7.  *
  8.  * Copyright (C) 1998, 1999 by Ralf Baechle
  9.  */
  10. #include <linux/ioport.h>
  11. #include <linux/sched.h>
  12. #include <linux/pc_keyb.h>
  13. #include <asm/keyboard.h>
  14. #include <asm/io.h>
  15. #define KEYBOARD_IRQ 1
  16. #define AUX_IRQ 12
  17. static void std_kbd_request_region(void)
  18. {
  19. request_region(0x60, 16, "keyboard");
  20. }
  21. static int std_kbd_request_irq(void (*handler)(int, void *, struct pt_regs *))
  22. {
  23. return request_irq(KEYBOARD_IRQ, handler, 0, "keyboard", NULL);
  24. }
  25. static int std_aux_request_irq(void (*handler)(int, void *, struct pt_regs *))
  26. {
  27. return request_irq(AUX_IRQ, handler, 0, "PS/2 Mouse", NULL);
  28. }
  29. static void std_aux_free_irq(void)
  30. {
  31. free_irq(AUX_IRQ, NULL);
  32. }
  33. static unsigned char std_kbd_read_input(void)
  34. {
  35. return inb(KBD_DATA_REG);
  36. }
  37. static void std_kbd_write_output(unsigned char val)
  38. {
  39. int status;
  40. do {
  41. status = inb(KBD_CNTL_REG);
  42. } while (status & KBD_STAT_IBF);
  43. outb(val, KBD_DATA_REG);
  44. }
  45. static void std_kbd_write_command(unsigned char val)
  46. {
  47. int status;
  48. do {
  49. status = inb(KBD_CNTL_REG);
  50. } while (status & KBD_STAT_IBF);
  51. outb(val, KBD_CNTL_REG);
  52. }
  53. static unsigned char std_kbd_read_status(void)
  54. {
  55. return inb(KBD_STATUS_REG);
  56. }
  57. struct kbd_ops std_kbd_ops = {
  58. std_kbd_request_region,
  59. std_kbd_request_irq,
  60. std_aux_request_irq,
  61. std_aux_free_irq,
  62. std_kbd_read_input,
  63. std_kbd_write_output,
  64. std_kbd_write_command,
  65. std_kbd_read_status
  66. };