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