2 * linux/drivers/char/keyboard.c
4 * Written for linux by Johan Myreen as a translation from
5 * the assembly version by Linus (with diacriticals added)
7 * Some additional features added by Christoph Niemann (ChN), March 1993
9 * Loadable keymaps by Risto Kankkunen, May 1993
11 * Diacriticals redone & other small changes, aeb@cwi.nl, June 1993
12 * Added decr/incr_console, dynamic keymaps, Unicode support,
13 * dynamic function/string keys, led setting, Sept 1994
14 * `Sticky' modifier keys, 951006.
16 * 11-11-96: SAK should now work in the raw mode (Martin Mares)
18 * Modified to provide 'generic' keyboard support by Hamish Macdonald
19 * Merge with the m68k keyboard driver and split-off of the PC low-level
20 * parts by Geert Uytterhoeven, May 1997
22 * 27-05-97: Added support for the Magic SysRq Key (Martin Mares)
23 * 30-07-98: Dead keys redone, aeb@cwi.nl.
24 * 21-08-02: Converted to input API, major cleanup. (Vojtech Pavlik)
27 #include <linux/config.h>
28 #include <linux/module.h>
29 #include <linux/sched.h>
30 #include <linux/tty.h>
31 #include <linux/tty_flip.h>
33 #include <linux/string.h>
34 #include <linux/random.h>
35 #include <linux/init.h>
36 #include <linux/slab.h>
38 #include <linux/kbd_kern.h>
39 #include <linux/kbd_diacr.h>
40 #include <linux/vt_kern.h>
41 #include <linux/sysrq.h>
42 #include <linux/input.h>
44 static void kbd_disconnect(struct input_handle
*handle
);
45 extern void ctrl_alt_del(void);
48 * Exported functions/variables
51 #define KBD_DEFMODE ((1 << VC_REPEAT) | (1 << VC_META))
54 * Some laptops take the 789uiojklm,. keys as number pad when NumLock is on.
55 * This seems a good reason to start with NumLock off. On PC9800 and HIL keyboards
56 * of PARISC machines however there is no NumLock key and everyone expects the keypad
57 * to be used for numbers.
60 #if defined(CONFIG_X86_PC9800) || \
61 defined(CONFIG_PARISC) && (defined(CONFIG_KEYBOARD_HIL) || defined(CONFIG_KEYBOARD_HIL_OLD))
62 #define KBD_DEFLEDS (1 << VC_NUMLOCK)
69 void compute_shiftstate(void);
76 k_self, k_fn, k_spec, k_pad,\
77 k_dead, k_cons, k_cur, k_shift,\
78 k_meta, k_ascii, k_lock, k_lowercase,\
79 k_slock, k_dead2, k_ignore, k_ignore
81 typedef void (k_handler_fn
)(struct vc_data
*vc
, unsigned char value
,
82 char up_flag
, struct pt_regs
*regs
);
83 static k_handler_fn K_HANDLERS
;
84 static k_handler_fn
*k_handler
[16] = { K_HANDLERS
};
87 fn_null, fn_enter, fn_show_ptregs, fn_show_mem,\
88 fn_show_state, fn_send_intr, fn_lastcons, fn_caps_toggle,\
89 fn_num, fn_hold, fn_scroll_forw, fn_scroll_back,\
90 fn_boot_it, fn_caps_on, fn_compose, fn_SAK,\
91 fn_dec_console, fn_inc_console, fn_spawn_con, fn_bare_num
93 typedef void (fn_handler_fn
)(struct vc_data
*vc
, struct pt_regs
*regs
);
94 static fn_handler_fn FN_HANDLERS
;
95 static fn_handler_fn
*fn_handler
[] = { FN_HANDLERS
};
98 * Variables exported for vt_ioctl.c
101 /* maximum values each key_handler can handle */
102 const int max_vals
[] = {
103 255, ARRAY_SIZE(func_table
) - 1, ARRAY_SIZE(fn_handler
) - 1, NR_PAD
- 1,
104 NR_DEAD
- 1, 255, 3, NR_SHIFT
- 1, 255, NR_ASCII
- 1, NR_LOCK
- 1,
105 255, NR_LOCK
- 1, 255
108 const int NR_TYPES
= ARRAY_SIZE(max_vals
);
110 struct kbd_struct kbd_table
[MAX_NR_CONSOLES
];
111 static struct kbd_struct
*kbd
= kbd_table
;
112 static struct kbd_struct kbd0
;
114 int spawnpid
, spawnsig
;
117 * Variables exported for vt.c
126 static struct input_handler kbd_handler
;
127 static unsigned long key_down
[256/BITS_PER_LONG
]; /* keyboard key bitmap */
128 static unsigned char shift_down
[NR_SHIFT
]; /* shift state counters.. */
129 static int dead_key_next
;
130 static int npadch
= -1; /* -1 or number assembled on pad */
131 static unsigned char diacr
;
132 static char rep
; /* flag telling character repeat */
134 static unsigned char ledstate
= 0xff; /* undefined */
135 static unsigned char ledioctl
;
137 static struct ledptr
{
140 unsigned char valid
:1;
143 /* Simple translation table for the SysRq keys */
145 #ifdef CONFIG_MAGIC_SYSRQ
146 unsigned char kbd_sysrq_xlate
[128] =
147 "\000\0331234567890-=\177\t" /* 0x00 - 0x0f */
148 "qwertyuiop[]\r\000as" /* 0x10 - 0x1f */
149 "dfghjkl;'`\000\\zxcv" /* 0x20 - 0x2f */
150 "bnm,./\000*\000 \000\201\202\203\204\205" /* 0x30 - 0x3f */
151 "\206\207\210\211\212\000\000789-456+1" /* 0x40 - 0x4f */
152 "230\177\000\000\213\214\000\000\000\000\000\000\000\000\000\000" /* 0x50 - 0x5f */
153 "\r\000/"; /* 0x60 - 0x6f */
154 static int sysrq_down
;
156 static int sysrq_alt
;
159 * Translation of scancodes to keycodes. We set them on only the first attached
160 * keyboard - for per-keyboard setting, /dev/input/event is more useful.
162 int getkeycode(unsigned int scancode
)
164 struct list_head
* node
;
165 struct input_dev
*dev
= NULL
;
167 list_for_each(node
,&kbd_handler
.h_list
) {
168 struct input_handle
* handle
= to_handle_h(node
);
169 if (handle
->dev
->keycodesize
) {
178 if (scancode
< 0 || scancode
>= dev
->keycodemax
)
181 return INPUT_KEYCODE(dev
, scancode
);
184 int setkeycode(unsigned int scancode
, unsigned int keycode
)
186 struct list_head
* node
;
187 struct input_dev
*dev
= NULL
;
190 list_for_each(node
,&kbd_handler
.h_list
) {
191 struct input_handle
*handle
= to_handle_h(node
);
192 if (handle
->dev
->keycodesize
) {
201 if (scancode
< 0 || scancode
>= dev
->keycodemax
)
204 oldkey
= INPUT_KEYCODE(dev
, scancode
);
205 INPUT_KEYCODE(dev
, scancode
) = keycode
;
207 for (i
= 0; i
< dev
->keycodemax
; i
++)
208 if(INPUT_KEYCODE(dev
, scancode
) == oldkey
)
210 if (i
== dev
->keycodemax
)
211 clear_bit(oldkey
, dev
->keybit
);
212 set_bit(keycode
, dev
->keybit
);
218 * Making beeps and bells.
220 static void kd_nosound(unsigned long ignored
)
222 struct list_head
* node
;
224 list_for_each(node
,&kbd_handler
.h_list
) {
225 struct input_handle
*handle
= to_handle_h(node
);
226 if (test_bit(EV_SND
, handle
->dev
->evbit
)) {
227 if (test_bit(SND_TONE
, handle
->dev
->sndbit
))
228 input_event(handle
->dev
, EV_SND
, SND_TONE
, 0);
229 if (test_bit(SND_BELL
, handle
->dev
->sndbit
))
230 input_event(handle
->dev
, EV_SND
, SND_BELL
, 0);
235 static struct timer_list kd_mksound_timer
=
236 TIMER_INITIALIZER(kd_nosound
, 0, 0);
238 void kd_mksound(unsigned int hz
, unsigned int ticks
)
240 struct list_head
* node
;
242 del_timer(&kd_mksound_timer
);
245 list_for_each_prev(node
,&kbd_handler
.h_list
) {
246 struct input_handle
*handle
= to_handle_h(node
);
247 if (test_bit(EV_SND
, handle
->dev
->evbit
)) {
248 if (test_bit(SND_TONE
, handle
->dev
->sndbit
)) {
249 input_event(handle
->dev
, EV_SND
, SND_TONE
, hz
);
252 if (test_bit(SND_BELL
, handle
->dev
->sndbit
)) {
253 input_event(handle
->dev
, EV_SND
, SND_BELL
, 1);
259 mod_timer(&kd_mksound_timer
, jiffies
+ ticks
);
265 * Setting the keyboard rate.
267 static inline unsigned int ms_to_jiffies(unsigned int ms
) {
270 j
= (ms
* HZ
+ 500) / 1000;
271 return (j
> 0) ? j
: 1;
274 int kbd_rate(struct kbd_repeat
*rep
)
276 struct list_head
*node
;
280 list_for_each(node
,&kbd_handler
.h_list
) {
281 struct input_handle
*handle
= to_handle_h(node
);
282 struct input_dev
*dev
= handle
->dev
;
284 if (test_bit(EV_REP
, dev
->evbit
)) {
286 dev
->rep
[REP_DELAY
] = ms_to_jiffies(rep
->delay
);
288 dev
->rep
[REP_PERIOD
] = ms_to_jiffies(rep
->period
);
289 d
= dev
->rep
[REP_DELAY
] * 1000 / HZ
;
290 p
= dev
->rep
[REP_PERIOD
] * 1000 / HZ
;
301 static void put_queue(struct vc_data
*vc
, int ch
)
303 struct tty_struct
*tty
= vc
->vc_tty
;
306 tty_insert_flip_char(tty
, ch
, 0);
307 con_schedule_flip(tty
);
311 static void puts_queue(struct vc_data
*vc
, char *cp
)
313 struct tty_struct
*tty
= vc
->vc_tty
;
319 tty_insert_flip_char(tty
, *cp
, 0);
322 con_schedule_flip(tty
);
325 static void applkey(struct vc_data
*vc
, int key
, char mode
)
327 static char buf
[] = { 0x1b, 'O', 0x00, 0x00 };
329 buf
[1] = (mode
? 'O' : '[');
335 * Many other routines do put_queue, but I think either
336 * they produce ASCII, or they produce some user-assigned
337 * string, and in both cases we might assume that it is
338 * in utf-8 already. UTF-8 is defined for words of up to 31 bits,
339 * but we need only 16 bits here
341 void to_utf8(struct vc_data
*vc
, ushort c
)
346 else if (c
< 0x800) {
347 /* 110***** 10****** */
348 put_queue(vc
, 0xc0 | (c
>> 6));
349 put_queue(vc
, 0x80 | (c
& 0x3f));
351 /* 1110**** 10****** 10****** */
352 put_queue(vc
, 0xe0 | (c
>> 12));
353 put_queue(vc
, 0x80 | ((c
>> 6) & 0x3f));
354 put_queue(vc
, 0x80 | (c
& 0x3f));
359 * Called after returning from RAW mode or when changing consoles - recompute
360 * shift_down[] and shift_state from key_down[] maybe called when keymap is
361 * undefined, so that shiftkey release is seen
363 void compute_shiftstate(void)
365 int i
, j
, k
, sym
, val
;
368 memset(shift_down
, 0, sizeof(shift_down
));
370 for (i
= 0; i
< ARRAY_SIZE(key_down
); i
++) {
375 k
= i
* BITS_PER_LONG
;
377 for (j
= 0; j
< BITS_PER_LONG
; j
++, k
++) {
379 if (!test_bit(k
, key_down
))
382 sym
= U(key_maps
[0][k
]);
383 if (KTYP(sym
) != KT_SHIFT
&& KTYP(sym
) != KT_SLOCK
)
387 if (val
== KVAL(K_CAPSSHIFT
))
391 shift_state
|= (1 << val
);
397 * We have a combining character DIACR here, followed by the character CH.
398 * If the combination occurs in the table, return the corresponding value.
399 * Otherwise, if CH is a space or equals DIACR, return DIACR.
400 * Otherwise, conclude that DIACR was not combining after all,
401 * queue it and return CH.
403 unsigned char handle_diacr(struct vc_data
*vc
, unsigned char ch
)
410 for (i
= 0; i
< accent_table_size
; i
++) {
411 if (accent_table
[i
].diacr
== d
&& accent_table
[i
].base
== ch
)
412 return accent_table
[i
].result
;
415 if (ch
== ' ' || ch
== d
)
423 * Special function handlers
425 static void fn_enter(struct vc_data
*vc
, struct pt_regs
*regs
)
428 put_queue(vc
, diacr
);
432 if (vc_kbd_mode(kbd
, VC_CRLF
))
436 static void fn_caps_toggle(struct vc_data
*vc
, struct pt_regs
*regs
)
440 chg_vc_kbd_led(kbd
, VC_CAPSLOCK
);
443 static void fn_caps_on(struct vc_data
*vc
, struct pt_regs
*regs
)
447 set_vc_kbd_led(kbd
, VC_CAPSLOCK
);
450 static void fn_show_ptregs(struct vc_data
*vc
, struct pt_regs
*regs
)
456 static void fn_hold(struct vc_data
*vc
, struct pt_regs
*regs
)
458 struct tty_struct
*tty
= vc
->vc_tty
;
464 * Note: SCROLLOCK will be set (cleared) by stop_tty (start_tty);
465 * these routines are also activated by ^S/^Q.
466 * (And SCROLLOCK can also be set by the ioctl KDSKBLED.)
474 static void fn_num(struct vc_data
*vc
, struct pt_regs
*regs
)
476 if (vc_kbd_mode(kbd
,VC_APPLIC
))
479 fn_bare_num(vc
, regs
);
483 * Bind this to Shift-NumLock if you work in application keypad mode
484 * but want to be able to change the NumLock flag.
485 * Bind this to NumLock if you prefer that the NumLock key always
486 * changes the NumLock flag.
488 static void fn_bare_num(struct vc_data
*vc
, struct pt_regs
*regs
)
491 chg_vc_kbd_led(kbd
, VC_NUMLOCK
);
494 static void fn_lastcons(struct vc_data
*vc
, struct pt_regs
*regs
)
496 /* switch to the last used console, ChN */
497 set_console(last_console
);
500 static void fn_dec_console(struct vc_data
*vc
, struct pt_regs
*regs
)
504 for (i
= fg_console
-1; i
!= fg_console
; i
--) {
506 i
= MAX_NR_CONSOLES
-1;
507 if (vc_cons_allocated(i
))
513 static void fn_inc_console(struct vc_data
*vc
, struct pt_regs
*regs
)
517 for (i
= fg_console
+1; i
!= fg_console
; i
++) {
518 if (i
== MAX_NR_CONSOLES
)
520 if (vc_cons_allocated(i
))
526 static void fn_send_intr(struct vc_data
*vc
, struct pt_regs
*regs
)
528 struct tty_struct
*tty
= vc
->vc_tty
;
532 tty_insert_flip_char(tty
, 0, TTY_BREAK
);
533 con_schedule_flip(tty
);
536 static void fn_scroll_forw(struct vc_data
*vc
, struct pt_regs
*regs
)
541 static void fn_scroll_back(struct vc_data
*vc
, struct pt_regs
*regs
)
546 static void fn_show_mem(struct vc_data
*vc
, struct pt_regs
*regs
)
551 static void fn_show_state(struct vc_data
*vc
, struct pt_regs
*regs
)
556 static void fn_boot_it(struct vc_data
*vc
, struct pt_regs
*regs
)
561 static void fn_compose(struct vc_data
*vc
, struct pt_regs
*regs
)
566 static void fn_spawn_con(struct vc_data
*vc
, struct pt_regs
*regs
)
569 if(kill_proc(spawnpid
, spawnsig
, 1))
573 static void fn_SAK(struct vc_data
*vc
, struct pt_regs
*regs
)
575 struct tty_struct
*tty
= vc
->vc_tty
;
578 * SAK should also work in all raw modes and reset
583 reset_vc(fg_console
);
586 static void fn_null(struct vc_data
*vc
, struct pt_regs
*regs
)
588 compute_shiftstate();
592 * Special key handlers
594 static void k_ignore(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
598 static void k_spec(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
602 if (value
>= ARRAY_SIZE(fn_handler
))
604 if ((kbd
->kbdmode
== VC_RAW
||
605 kbd
->kbdmode
== VC_MEDIUMRAW
) &&
606 value
!= KVAL(K_SAK
))
607 return; /* SAK is allowed even in raw mode */
608 fn_handler
[value
](vc
, regs
);
611 static void k_lowercase(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
613 printk(KERN_ERR
"keyboard.c: k_lowercase was called - impossible\n");
616 static void k_self(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
619 return; /* no action, if this is a key release */
622 value
= handle_diacr(vc
, value
);
629 put_queue(vc
, value
);
633 * Handle dead key. Note that we now may have several
634 * dead keys modifying the same character. Very useful
637 static void k_dead2(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
641 diacr
= (diacr
? handle_diacr(vc
, value
) : value
);
645 * Obsolete - for backwards compatibility only
647 static void k_dead(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
649 static unsigned char ret_diacr
[NR_DEAD
] = {'`', '\'', '^', '~', '"', ',' };
650 value
= ret_diacr
[value
];
651 k_dead2(vc
, value
, up_flag
, regs
);
654 static void k_cons(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
661 static void k_fn(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
665 if (value
< ARRAY_SIZE(func_table
)) {
666 if (func_table
[value
])
667 puts_queue(vc
, func_table
[value
]);
669 printk(KERN_ERR
"k_fn called with value=%d\n", value
);
672 static void k_cur(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
674 static const char *cur_chars
= "BDCA";
678 applkey(vc
, cur_chars
[value
], vc_kbd_mode(kbd
, VC_CKMODE
));
681 static void k_pad(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
683 static const char *pad_chars
= "0123456789+-*/\015,.?()#";
684 static const char *app_map
= "pqrstuvwxylSRQMnnmPQS";
687 return; /* no action, if this is a key release */
689 /* kludge... shift forces cursor/number keys */
690 if (vc_kbd_mode(kbd
, VC_APPLIC
) && !shift_down
[KG_SHIFT
]) {
691 applkey(vc
, app_map
[value
], 1);
695 if (!vc_kbd_led(kbd
, VC_NUMLOCK
))
699 k_fn(vc
, KVAL(K_REMOVE
), 0, regs
);
702 k_fn(vc
, KVAL(K_INSERT
), 0, regs
);
705 k_fn(vc
, KVAL(K_SELECT
), 0, regs
);
708 k_cur(vc
, KVAL(K_DOWN
), 0, regs
);
711 k_fn(vc
, KVAL(K_PGDN
), 0, regs
);
714 k_cur(vc
, KVAL(K_LEFT
), 0, regs
);
717 k_cur(vc
, KVAL(K_RIGHT
), 0, regs
);
720 k_fn(vc
, KVAL(K_FIND
), 0, regs
);
723 k_cur(vc
, KVAL(K_UP
), 0, regs
);
726 k_fn(vc
, KVAL(K_PGUP
), 0, regs
);
729 applkey(vc
, 'G', vc_kbd_mode(kbd
, VC_APPLIC
));
733 put_queue(vc
, pad_chars
[value
]);
734 if (value
== KVAL(K_PENTER
) && vc_kbd_mode(kbd
, VC_CRLF
))
738 static void k_shift(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
740 int old_state
= shift_state
;
746 * a CapsShift key acts like Shift but undoes CapsLock
748 if (value
== KVAL(K_CAPSSHIFT
)) {
749 value
= KVAL(K_SHIFT
);
751 clr_vc_kbd_led(kbd
, VC_CAPSLOCK
);
756 * handle the case that two shift or control
757 * keys are depressed simultaneously
759 if (shift_down
[value
])
764 if (shift_down
[value
])
765 shift_state
|= (1 << value
);
767 shift_state
&= ~(1 << value
);
770 if (up_flag
&& shift_state
!= old_state
&& npadch
!= -1) {
771 if (kbd
->kbdmode
== VC_UNICODE
)
772 to_utf8(vc
, npadch
& 0xffff);
774 put_queue(vc
, npadch
& 0xff);
779 static void k_meta(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
784 if (vc_kbd_mode(kbd
, VC_META
)) {
785 put_queue(vc
, '\033');
786 put_queue(vc
, value
);
788 put_queue(vc
, value
| 0x80);
791 static void k_ascii(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
799 /* decimal input of code, while Alt depressed */
802 /* hexadecimal input of code, while AltGr depressed */
810 npadch
= npadch
* base
+ value
;
813 static void k_lock(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
817 chg_vc_kbd_lock(kbd
, value
);
820 static void k_slock(struct vc_data
*vc
, unsigned char value
, char up_flag
, struct pt_regs
*regs
)
822 k_shift(vc
, value
, up_flag
, regs
);
825 chg_vc_kbd_slock(kbd
, value
);
826 /* try to make Alt, oops, AltGr and such work */
827 if (!key_maps
[kbd
->lockstate
^ kbd
->slockstate
]) {
829 chg_vc_kbd_slock(kbd
, value
);
834 * The leds display either (i) the status of NumLock, CapsLock, ScrollLock,
835 * or (ii) whatever pattern of lights people want to show using KDSETLED,
836 * or (iii) specified bits of specified words in kernel memory.
838 unsigned char getledstate(void)
843 void setledstate(struct kbd_struct
*kbd
, unsigned int led
)
847 kbd
->ledmode
= LED_SHOW_IOCTL
;
849 kbd
->ledmode
= LED_SHOW_FLAGS
;
853 void register_leds(struct kbd_struct
*kbd
, unsigned int led
,
854 unsigned int *addr
, unsigned int mask
)
857 ledptrs
[led
].addr
= addr
;
858 ledptrs
[led
].mask
= mask
;
859 ledptrs
[led
].valid
= 1;
860 kbd
->ledmode
= LED_SHOW_MEM
;
862 kbd
->ledmode
= LED_SHOW_FLAGS
;
865 static inline unsigned char getleds(void)
867 struct kbd_struct
*kbd
= kbd_table
+ fg_console
;
871 if (kbd
->ledmode
== LED_SHOW_IOCTL
)
874 leds
= kbd
->ledflagstate
;
876 if (kbd
->ledmode
== LED_SHOW_MEM
) {
877 for (i
= 0; i
< 3; i
++)
878 if (ledptrs
[i
].valid
) {
879 if (*ledptrs
[i
].addr
& ledptrs
[i
].mask
)
889 * This routine is the bottom half of the keyboard interrupt
890 * routine, and runs with all interrupts enabled. It does
891 * console changing, led setting and copy_to_cooked, which can
892 * take a reasonably long time.
894 * Aside from timing (which isn't really that important for
895 * keyboard interrupts as they happen often), using the software
896 * interrupt routines for this thing allows us to easily mask
897 * this when we don't want any of the above to happen.
898 * This allows for easy and efficient race-condition prevention
899 * for kbd_refresh_leds => input_event(dev, EV_LED, ...) => ...
902 static void kbd_bh(unsigned long dummy
)
904 struct list_head
* node
;
905 unsigned char leds
= getleds();
907 if (leds
!= ledstate
) {
908 list_for_each(node
,&kbd_handler
.h_list
) {
909 struct input_handle
* handle
= to_handle_h(node
);
910 input_event(handle
->dev
, EV_LED
, LED_SCROLLL
, !!(leds
& 0x01));
911 input_event(handle
->dev
, EV_LED
, LED_NUML
, !!(leds
& 0x02));
912 input_event(handle
->dev
, EV_LED
, LED_CAPSL
, !!(leds
& 0x04));
913 input_sync(handle
->dev
);
920 DECLARE_TASKLET_DISABLED(keyboard_tasklet
, kbd_bh
, 0);
923 * This allows a newly plugged keyboard to pick the LED state.
925 void kbd_refresh_leds(struct input_handle
*handle
)
927 unsigned char leds
= ledstate
;
929 tasklet_disable(&keyboard_tasklet
);
931 input_event(handle
->dev
, EV_LED
, LED_SCROLLL
, !!(leds
& 0x01));
932 input_event(handle
->dev
, EV_LED
, LED_NUML
, !!(leds
& 0x02));
933 input_event(handle
->dev
, EV_LED
, LED_CAPSL
, !!(leds
& 0x04));
934 input_sync(handle
->dev
);
936 tasklet_enable(&keyboard_tasklet
);
939 #if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_ALPHA) || defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64) || defined(CONFIG_PARISC)
941 static unsigned short x86_keycodes
[256] =
942 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
943 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
944 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
945 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
946 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
947 80, 81, 82, 83, 43, 85, 86, 87, 88,115,119,120,121,375,123, 90,
948 284,285,309,298,312, 91,327,328,329,331,333,335,336,337,338,339,
949 367,288,302,304,350, 92,334,512,116,377,109,111,373,347,348,349,
950 360, 93, 94, 95, 98,376,100,101,321,316,354,286,289,102,351,355,
951 103,104,105,275,287,279,306,106,274,107,294,364,358,363,362,361,
952 291,108,381,281,290,272,292,305,280, 99,112,257,258,359,270,114,
953 118,117,125,374,379,115,112,125,121,123,264,265,266,267,268,269,
954 271,273,276,277,278,282,283,295,296,297,299,300,301,293,303,307,
955 308,310,313,314,315,317,318,319,320,357,322,323,324,325,326,330,
956 332,340,365,342,343,344,345,346,356,113,341,368,369,370,371,372 };
958 #ifdef CONFIG_MAC_EMUMOUSEBTN
959 extern int mac_hid_mouse_emulate_buttons(int, int, int);
960 #endif /* CONFIG_MAC_EMUMOUSEBTN */
962 #if defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64)
963 static int sparc_l1_a_state
= 0;
964 extern void sun_do_break(void);
967 static int emulate_raw(struct vc_data
*vc
, unsigned int keycode
,
968 unsigned char up_flag
)
970 #ifdef CONFIG_MAC_EMUMOUSEBTN
971 if (mac_hid_mouse_emulate_buttons(1, keycode
, !up_flag
))
973 #endif /* CONFIG_MAC_EMUMOUSEBTN */
975 if (keycode
> 255 || !x86_keycodes
[keycode
])
978 if (keycode
== KEY_PAUSE
) {
980 put_queue(vc
, 0x1d | up_flag
);
981 put_queue(vc
, 0x45 | up_flag
);
985 if (keycode
== KEY_SYSRQ
&& sysrq_alt
) {
986 put_queue(vc
, 0x54 | up_flag
);
990 if (x86_keycodes
[keycode
] & 0x100)
993 put_queue(vc
, (x86_keycodes
[keycode
] & 0x7f) | up_flag
);
995 if (keycode
== KEY_SYSRQ
) {
997 put_queue(vc
, 0x37 | up_flag
);
1005 #warning "Cannot generate rawmode keyboard for your architecture yet."
1007 static int emulate_raw(struct vc_data
*vc
, unsigned int keycode
, unsigned char up_flag
)
1012 put_queue(vc
, keycode
| up_flag
);
1017 void kbd_keycode(unsigned int keycode
, int down
, struct pt_regs
*regs
)
1019 struct vc_data
*vc
= vc_cons
[fg_console
].d
;
1020 unsigned short keysym
, *key_map
;
1021 unsigned char type
, raw_mode
;
1022 struct tty_struct
*tty
;
1026 add_keyboard_randomness((keycode
<< 1) ^ down
);
1030 if (tty
&& (!tty
->driver_data
)) {
1031 /* No driver data? Strange. Okay we fix it then. */
1032 tty
->driver_data
= vc
;
1035 kbd
= kbd_table
+ fg_console
;
1037 if (keycode
== KEY_LEFTALT
|| keycode
== KEY_RIGHTALT
)
1039 #if defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64)
1040 if (keycode
== KEY_STOP
)
1041 sparc_l1_a_state
= down
;
1046 if ((raw_mode
= (kbd
->kbdmode
== VC_RAW
)))
1047 if (emulate_raw(vc
, keycode
, !down
<< 7))
1048 if (keycode
< BTN_MISC
)
1049 printk(KERN_WARNING
"keyboard.c: can't emulate rawmode for keycode %d\n", keycode
);
1051 #ifdef CONFIG_MAGIC_SYSRQ /* Handle the SysRq Hack */
1052 if (keycode
== KEY_SYSRQ
&& (sysrq_down
|| (down
== 1 && sysrq_alt
))) {
1056 if (sysrq_down
&& down
&& !rep
) {
1057 handle_sysrq(kbd_sysrq_xlate
[keycode
], regs
, tty
);
1061 #if defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64)
1062 if (keycode
== KEY_A
&& sparc_l1_a_state
) {
1063 sparc_l1_a_state
= 0;
1068 if (kbd
->kbdmode
== VC_MEDIUMRAW
) {
1070 * This is extended medium raw mode, with keys above 127
1071 * encoded as 0, high 7 bits, low 7 bits, with the 0 bearing
1072 * the 'up' flag if needed. 0 is reserved, so this shouldn't
1073 * interfere with anything else. The two bytes after 0 will
1074 * always have the up flag set not to interfere with older
1075 * applications. This allows for 16384 different keycodes,
1076 * which should be enough.
1078 if (keycode
< 128) {
1079 put_queue(vc
, keycode
| (!down
<< 7));
1081 put_queue(vc
, !down
<< 7);
1082 put_queue(vc
, (keycode
>> 7) | 0x80);
1083 put_queue(vc
, keycode
| 0x80);
1089 set_bit(keycode
, key_down
);
1091 clear_bit(keycode
, key_down
);
1093 if (rep
&& (!vc_kbd_mode(kbd
, VC_REPEAT
) || (tty
&&
1094 (!L_ECHO(tty
) && tty
->driver
->chars_in_buffer(tty
))))) {
1096 * Don't repeat a key if the input buffers are not empty and the
1097 * characters get aren't echoed locally. This makes key repeat
1098 * usable with slow applications and under heavy loads.
1103 shift_final
= (shift_state
| kbd
->slockstate
) ^ kbd
->lockstate
;
1104 key_map
= key_maps
[shift_final
];
1107 compute_shiftstate();
1108 kbd
->slockstate
= 0;
1112 keysym
= key_map
[keycode
];
1113 type
= KTYP(keysym
);
1116 if (down
&& !raw_mode
) to_utf8(vc
, keysym
);
1122 if (raw_mode
&& type
!= KT_SPEC
&& type
!= KT_SHIFT
)
1125 if (type
== KT_LETTER
) {
1127 if (vc_kbd_led(kbd
, VC_CAPSLOCK
)) {
1128 key_map
= key_maps
[shift_final
^ (1 << KG_SHIFT
)];
1130 keysym
= key_map
[keycode
];
1134 (*k_handler
[type
])(vc
, keysym
& 0xff, !down
, regs
);
1136 if (type
!= KT_SLOCK
)
1137 kbd
->slockstate
= 0;
1140 static void kbd_event(struct input_handle
*handle
, unsigned int event_type
,
1141 unsigned int keycode
, int down
)
1143 if (event_type
!= EV_KEY
)
1145 kbd_keycode(keycode
, down
, handle
->dev
->regs
);
1146 tasklet_schedule(&keyboard_tasklet
);
1147 do_poke_blanked_console
= 1;
1148 schedule_console_callback();
1151 static char kbd_name
[] = "kbd";
1154 * When a keyboard (or other input device) is found, the kbd_connect
1155 * function is called. The function then looks at the device, and if it
1156 * likes it, it can open it and get events from it. In this (kbd_connect)
1157 * function, we should decide which VT to bind that keyboard to initially.
1159 static struct input_handle
*kbd_connect(struct input_handler
*handler
,
1160 struct input_dev
*dev
,
1161 struct input_device_id
*id
)
1163 struct input_handle
*handle
;
1166 for (i
= KEY_RESERVED
; i
< BTN_MISC
; i
++)
1167 if (test_bit(i
, dev
->keybit
)) break;
1169 if ((i
== BTN_MISC
) && !test_bit(EV_SND
, dev
->evbit
))
1172 if (!(handle
= kmalloc(sizeof(struct input_handle
), GFP_KERNEL
)))
1174 memset(handle
, 0, sizeof(struct input_handle
));
1177 handle
->handler
= handler
;
1178 handle
->name
= kbd_name
;
1180 input_open_device(handle
);
1181 kbd_refresh_leds(handle
);
1186 static void kbd_disconnect(struct input_handle
*handle
)
1188 input_close_device(handle
);
1192 static struct input_device_id kbd_ids
[] = {
1194 .flags
= INPUT_DEVICE_ID_MATCH_EVBIT
,
1195 .evbit
= { BIT(EV_KEY
) },
1199 .flags
= INPUT_DEVICE_ID_MATCH_EVBIT
,
1200 .evbit
= { BIT(EV_SND
) },
1203 { }, /* Terminating entry */
1206 MODULE_DEVICE_TABLE(input
, kbd_ids
);
1208 static struct input_handler kbd_handler
= {
1210 .connect
= kbd_connect
,
1211 .disconnect
= kbd_disconnect
,
1213 .id_table
= kbd_ids
,
1216 int __init
kbd_init(void)
1220 kbd0
.ledflagstate
= kbd0
.default_ledflagstate
= KBD_DEFLEDS
;
1221 kbd0
.ledmode
= LED_SHOW_FLAGS
;
1222 kbd0
.lockstate
= KBD_DEFLOCK
;
1223 kbd0
.slockstate
= 0;
1224 kbd0
.modeflags
= KBD_DEFMODE
;
1225 kbd0
.kbdmode
= VC_XLATE
;
1227 for (i
= 0 ; i
< MAX_NR_CONSOLES
; i
++)
1228 kbd_table
[i
] = kbd0
;
1230 input_register_handler(&kbd_handler
);
1232 tasklet_enable(&keyboard_tasklet
);
1233 tasklet_schedule(&keyboard_tasklet
);