File: /usr/src/linux/arch/mips/lib/kbd-std.c
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
17 #define KEYBOARD_IRQ 1
18 #define AUX_IRQ 12
19
20 static void std_kbd_request_region(void)
21 {
22 #ifdef CONFIG_MIPS_ITE8172
23 request_region(0x14000060, 16, "keyboard");
24 #else
25 request_region(0x60, 16, "keyboard");
26 #endif
27 }
28
29 static int std_kbd_request_irq(void (*handler)(int, void *, struct pt_regs *))
30 {
31 return request_irq(KEYBOARD_IRQ, handler, 0, "keyboard", NULL);
32 }
33
34 static int std_aux_request_irq(void (*handler)(int, void *, struct pt_regs *))
35 {
36 return request_irq(AUX_IRQ, handler, 0, "PS/2 Mouse", NULL);
37 }
38
39 static void std_aux_free_irq(void)
40 {
41 free_irq(AUX_IRQ, NULL);
42 }
43
44 static unsigned char std_kbd_read_input(void)
45 {
46 return inb(KBD_DATA_REG);
47 }
48
49 static void std_kbd_write_output(unsigned char val)
50 {
51 int status;
52
53 do {
54 status = inb(KBD_CNTL_REG);
55 } while (status & KBD_STAT_IBF);
56 outb(val, KBD_DATA_REG);
57 }
58
59 static void std_kbd_write_command(unsigned char val)
60 {
61 int status;
62
63 do {
64 status = inb(KBD_CNTL_REG);
65 } while (status & KBD_STAT_IBF);
66 outb(val, KBD_CNTL_REG);
67 }
68
69 static unsigned char std_kbd_read_status(void)
70 {
71 return inb(KBD_STATUS_REG);
72 }
73
74 struct kbd_ops std_kbd_ops = {
75 std_kbd_request_region,
76 std_kbd_request_irq,
77
78 std_aux_request_irq,
79 std_aux_free_irq,
80
81 std_kbd_read_input,
82 std_kbd_write_output,
83 std_kbd_write_command,
84 std_kbd_read_status
85 };
86