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