hp_keyb.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:15k
- /*
- * linux/drivers/char/hp_keyb.c
- * helper-functions for the keyboard/psaux driver for HP-PARISC workstations
- *
- * based on pc_keyb.c by Geert Uytterhoeven & Martin Mares
- *
- * 2000/10/26 Debacker Xavier <debackex@esiee.fr>
- * Marteau Thomas <marteaut@esiee.fr>
- * Djoudi Malek <djoudim@esiee.fr>
- * - fixed some keysym defines
- *
- * 2001/04/28 Debacker Xavier <debackex@esiee.fr>
- * - scancode translation rewritten in handle_at_scancode()
- */
- #include <linux/config.h>
- #include <linux/sched.h>
- #include <linux/interrupt.h>
- #include <linux/tty.h>
- #include <linux/tty_flip.h>
- #include <linux/mm.h>
- #include <linux/slab.h>
- #include <linux/ptrace.h>
- #include <linux/signal.h>
- #include <linux/timer.h>
- #include <linux/random.h>
- #include <linux/ctype.h>
- #include <linux/kbd_ll.h>
- #include <linux/init.h>
- #include <asm/bitops.h>
- #include <asm/irq.h>
- #include <asm/hardware.h>
- #include <asm/io.h>
- #include <asm/system.h>
- #define KBD_REPORT_ERR
- #define KBD_REPORT_UNKN
- #define KBD_ESCAPEE0 0xe0 /* in */
- #define KBD_ESCAPEE1 0xe1 /* in */
- #define ESCE0(x) (0xe000|(x))
- #define ESCE1(x) (0xe100|(x))
- #define KBD_BAT 0xaa /* in */
- #define KBD_SETLEDS 0xed /* out */
- #define KBD_ECHO 0xee /* in/out */
- #define KBD_BREAK 0xf0 /* in */
- #define KBD_TYPRATEDLY 0xf3 /* out */
- #define KBD_SCANENABLE 0xf4 /* out */
- #define KBD_DEFDISABLE 0xf5 /* out */
- #define KBD_DEFAULT 0xf6 /* out */
- #define KBD_ACK 0xfa /* in */
- #define KBD_DIAGFAIL 0xfd /* in */
- #define KBD_RESEND 0xfe /* in/out */
- #define KBD_RESET 0xff /* out */
- #define CODE_BREAK 1
- #define CODE_ESCAPEE0 2
- #define CODE_ESCAPEE1 4
- #define CODE_ESCAPE12 8
- #define K_NONE 0x7f
- #define K_ESC 0x01
- #define K_F1 0x3b
- #define K_F2 0x3c
- #define K_F3 0x3d
- #define K_F4 0x3e
- #define K_F5 0x3f
- #define K_F6 0x40
- #define K_F7 0x41
- #define K_F8 0x42
- #define K_F9 0x43
- #define K_F10 0x44
- #define K_F11 0x57
- #define K_F12 0x58
- #define K_PRNT 0x54
- #define K_SCRL 0x46
- #define K_BRK 0x77
- #define K_AGR 0x29
- #define K_1 0x02
- #define K_2 0x03
- #define K_3 0x04
- #define K_4 0x05
- #define K_5 0x06
- #define K_6 0x07
- #define K_7 0x08
- #define K_8 0x09
- #define K_9 0x0a
- #define K_0 0x0b
- #define K_MINS 0x0c
- #define K_EQLS 0x0d
- #define K_BKSP 0x0e
- #define K_INS 0x6e
- #define K_HOME 0x66
- #define K_PGUP 0x68
- #define K_NUML 0x45
- #define KP_SLH 0x62
- #define KP_STR 0x37
- #define KP_MNS 0x4a
- #define K_TAB 0x0f
- #define K_Q 0x10
- #define K_W 0x11
- #define K_E 0x12
- #define K_R 0x13
- #define K_T 0x14
- #define K_Y 0x15
- #define K_U 0x16
- #define K_I 0x17
- #define K_O 0x18
- #define K_P 0x19
- #define K_LSBK 0x1a
- #define K_RSBK 0x1b
- #define K_ENTR 0x1c
- #define K_DEL 111
- #define K_END 0x6b
- #define K_PGDN 0x6d
- #define KP_7 0x47
- #define KP_8 0x48
- #define KP_9 0x49
- #define KP_PLS 0x4e
- #define K_CAPS 0x3a
- #define K_A 0x1e
- #define K_S 0x1f
- #define K_D 0x20
- #define K_F 0x21
- #define K_G 0x22
- #define K_H 0x23
- #define K_J 0x24
- #define K_K 0x25
- #define K_L 0x26
- #define K_SEMI 0x27
- #define K_SQOT 0x28
- #define K_HASH K_NONE
- #define KP_4 0x4b
- #define KP_5 0x4c
- #define KP_6 0x4d
- #define K_LSFT 0x2a
- #define K_BSLH 0x2b
- #define K_Z 0x2c
- #define K_X 0x2d
- #define K_C 0x2e
- #define K_V 0x2f
- #define K_B 0x30
- #define K_N 0x31
- #define K_M 0x32
- #define K_COMA 0x33
- #define K_DOT 0x34
- #define K_FSLH 0x35
- #define K_RSFT 0x36
- #define K_UP 0x67
- #define KP_1 0x4f
- #define KP_2 0x50
- #define KP_3 0x51
- #define KP_ENT 0x60
- #define K_LCTL 0x1d
- #define K_LALT 0x38
- #define K_SPCE 0x39
- #define K_RALT 0x64
- #define K_RCTL 0x61
- #define K_LEFT 0x69
- #define K_DOWN 0x6c
- #define K_RGHT 0x6a
- #define KP_0 0x52
- #define KP_DOT 0x53
- static unsigned char keycode_translate[256] =
- {
- /* 00 */ K_NONE, K_F9 , K_NONE, K_F5 , K_F3 , K_F1 , K_F2 , K_F12 ,
- /* 08 */ K_NONE, K_F10 , K_F8 , K_F6 , K_F4 , K_TAB , K_AGR , K_NONE,
- /* 10 */ K_NONE, K_LALT, K_LSFT, K_NONE, K_LCTL, K_Q , K_1 , K_NONE,
- /* 18 */ K_NONE, K_NONE, K_Z , K_S , K_A , K_W , K_2 , K_NONE,
- /* 20 */ K_NONE, K_C , K_X , K_D , K_E , K_4 , K_3 , K_NONE,
- /* 28 */ K_NONE, K_SPCE, K_V , K_F , K_T , K_R , K_5 , K_NONE,
- /* 30 */ K_NONE, K_N , K_B , K_H , K_G , K_Y , K_6 , K_NONE,
- /* 38 */ K_NONE, K_NONE, K_M , K_J , K_U , K_7 , K_8 , K_NONE,
- /* 40 */ K_NONE, K_COMA, K_K , K_I , K_O , K_0 , K_9 , K_NONE,
- /* 48 */ K_PGUP, K_DOT , K_FSLH, K_L , K_SEMI, K_P , K_MINS, K_NONE,
- /* 50 */ K_NONE, K_NONE, K_SQOT, K_NONE, K_LSBK, K_EQLS, K_NONE, K_NONE,
- /* 58 */ K_CAPS, K_RSFT, K_ENTR, K_RSBK, K_NONE, K_BSLH, K_NONE, K_NONE,
- /* 60 */ K_NONE, K_HASH, K_NONE, K_NONE, K_NONE, K_NONE, K_BKSP, K_NONE,
- /* 68 */ K_NONE, KP_1 , K_NONE, KP_4 , KP_7 , K_NONE, K_NONE, K_NONE,
- /* 70 */ KP_0 , KP_DOT, KP_2 , KP_5 , KP_6 , KP_8 , K_ESC , K_NUML,
- /* 78 */ K_F11 , KP_PLS, KP_3 , KP_MNS, KP_STR, KP_9 , K_SCRL, K_PRNT,
- /* 80 */ K_NONE, K_NONE, K_NONE, K_F7 , K_NONE, K_NONE, K_NONE, K_NONE,
- /* 88 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* 90 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* 98 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* a0 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* a8 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* b0 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* b8 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* c0 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* c8 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* d0 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* d8 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* e0 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* e8 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* f0 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE,
- /* f8 */ K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, K_NONE, KBD_RESEND, K_NONE
- };
- /* ----- the following code stolen from pc_keyb.c */
- #ifdef CONFIG_MAGIC_SYSRQ
- unsigned char hp_ps2kbd_sysrq_xlate[128] =
- "