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

嵌入式Linux

开发平台:

Unix_Linux

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