Merge with Linux 2.5.73.
[linux-2.6/linux-mips.git] / drivers / char / keyboard.c
blobfba8f81379ef3e9b53a5f96bf394dfc0713d3271
1 /*
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>
32 #include <linux/mm.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)
63 #else
64 #define KBD_DEFLEDS 0
65 #endif
67 #define KBD_DEFLOCK 0
69 void compute_shiftstate(void);
72 * Handler Tables.
75 #define K_HANDLERS\
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 };
86 #define FN_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
120 int shift_state = 0;
123 * Internal Data.
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 {
138 unsigned int *addr;
139 unsigned int mask;
140 unsigned char valid:1;
141 } ledptrs[3];
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;
155 #endif
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) {
170 dev = handle->dev;
171 break;
175 if (!dev)
176 return -ENODEV;
178 if (scancode < 0 || scancode >= dev->keycodemax)
179 return -EINVAL;
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;
188 int i, oldkey;
190 list_for_each(node,&kbd_handler.h_list) {
191 struct input_handle *handle = to_handle_h(node);
192 if (handle->dev->keycodesize) {
193 dev = handle->dev;
194 break;
198 if (!dev)
199 return -ENODEV;
201 if (scancode < 0 || scancode >= dev->keycodemax)
202 return -EINVAL;
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)
209 break;
210 if (i == dev->keycodemax)
211 clear_bit(oldkey, dev->keybit);
212 set_bit(keycode, dev->keybit);
214 return 0;
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);
244 if (hz) {
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);
250 break;
252 if (test_bit(SND_BELL, handle->dev->sndbit)) {
253 input_event(handle->dev, EV_SND, SND_BELL, 1);
254 break;
258 if (ticks)
259 mod_timer(&kd_mksound_timer, jiffies + ticks);
260 } else
261 kd_nosound(0);
265 * Setting the keyboard rate.
267 static inline unsigned int ms_to_jiffies(unsigned int ms) {
268 unsigned int j;
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;
277 unsigned int d = 0;
278 unsigned int p = 0;
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)) {
285 if (rep->delay > 0)
286 dev->rep[REP_DELAY] = ms_to_jiffies(rep->delay);
287 if (rep->period > 0)
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;
293 rep->delay = d;
294 rep->period = p;
295 return 0;
299 * Helper Functions.
301 static void put_queue(struct vc_data *vc, int ch)
303 struct tty_struct *tty = vc->vc_tty;
305 if (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;
315 if (!tty)
316 return;
318 while (*cp) {
319 tty_insert_flip_char(tty, *cp, 0);
320 cp++;
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' : '[');
330 buf[2] = key;
331 puts_queue(vc, buf);
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)
343 if (c < 0x80)
344 /* 0******* */
345 put_queue(vc, c);
346 else if (c < 0x800) {
347 /* 110***** 10****** */
348 put_queue(vc, 0xc0 | (c >> 6));
349 put_queue(vc, 0x80 | (c & 0x3f));
350 } else {
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;
367 shift_state = 0;
368 memset(shift_down, 0, sizeof(shift_down));
370 for (i = 0; i < ARRAY_SIZE(key_down); i++) {
372 if (!key_down[i])
373 continue;
375 k = i * BITS_PER_LONG;
377 for (j = 0; j < BITS_PER_LONG; j++, k++) {
379 if (!test_bit(k, key_down))
380 continue;
382 sym = U(key_maps[0][k]);
383 if (KTYP(sym) != KT_SHIFT && KTYP(sym) != KT_SLOCK)
384 continue;
386 val = KVAL(sym);
387 if (val == KVAL(K_CAPSSHIFT))
388 val = KVAL(K_SHIFT);
390 shift_down[val]++;
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)
405 int d = diacr;
406 int i;
408 diacr = 0;
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)
416 return d;
418 put_queue(vc, d);
419 return ch;
423 * Special function handlers
425 static void fn_enter(struct vc_data *vc, struct pt_regs *regs)
427 if (diacr) {
428 put_queue(vc, diacr);
429 diacr = 0;
431 put_queue(vc, 13);
432 if (vc_kbd_mode(kbd, VC_CRLF))
433 put_queue(vc, 10);
436 static void fn_caps_toggle(struct vc_data *vc, struct pt_regs *regs)
438 if (rep)
439 return;
440 chg_vc_kbd_led(kbd, VC_CAPSLOCK);
443 static void fn_caps_on(struct vc_data *vc, struct pt_regs *regs)
445 if (rep)
446 return;
447 set_vc_kbd_led(kbd, VC_CAPSLOCK);
450 static void fn_show_ptregs(struct vc_data *vc, struct pt_regs *regs)
452 if (regs)
453 show_regs(regs);
456 static void fn_hold(struct vc_data *vc, struct pt_regs *regs)
458 struct tty_struct *tty = vc->vc_tty;
460 if (rep || !tty)
461 return;
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.)
468 if (tty->stopped)
469 start_tty(tty);
470 else
471 stop_tty(tty);
474 static void fn_num(struct vc_data *vc, struct pt_regs *regs)
476 if (vc_kbd_mode(kbd,VC_APPLIC))
477 applkey(vc, 'P', 1);
478 else
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)
490 if (!rep)
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)
502 int i;
504 for (i = fg_console-1; i != fg_console; i--) {
505 if (i == -1)
506 i = MAX_NR_CONSOLES-1;
507 if (vc_cons_allocated(i))
508 break;
510 set_console(i);
513 static void fn_inc_console(struct vc_data *vc, struct pt_regs *regs)
515 int i;
517 for (i = fg_console+1; i != fg_console; i++) {
518 if (i == MAX_NR_CONSOLES)
519 i = 0;
520 if (vc_cons_allocated(i))
521 break;
523 set_console(i);
526 static void fn_send_intr(struct vc_data *vc, struct pt_regs *regs)
528 struct tty_struct *tty = vc->vc_tty;
530 if (!tty)
531 return;
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)
538 scrollfront(0);
541 static void fn_scroll_back(struct vc_data *vc, struct pt_regs *regs)
543 scrollback(0);
546 static void fn_show_mem(struct vc_data *vc, struct pt_regs *regs)
548 show_mem();
551 static void fn_show_state(struct vc_data *vc, struct pt_regs *regs)
553 show_state();
556 static void fn_boot_it(struct vc_data *vc, struct pt_regs *regs)
558 ctrl_alt_del();
561 static void fn_compose(struct vc_data *vc, struct pt_regs *regs)
563 dead_key_next = 1;
566 static void fn_spawn_con(struct vc_data *vc, struct pt_regs *regs)
568 if (spawnpid)
569 if(kill_proc(spawnpid, spawnsig, 1))
570 spawnpid = 0;
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
579 * them properly.
581 if (tty)
582 do_SAK(tty);
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)
600 if (up_flag)
601 return;
602 if (value >= ARRAY_SIZE(fn_handler))
603 return;
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)
618 if (up_flag)
619 return; /* no action, if this is a key release */
621 if (diacr)
622 value = handle_diacr(vc, value);
624 if (dead_key_next) {
625 dead_key_next = 0;
626 diacr = value;
627 return;
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
635 * for Vietnamese.
637 static void k_dead2(struct vc_data *vc, unsigned char value, char up_flag, struct pt_regs *regs)
639 if (up_flag)
640 return;
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)
656 if (up_flag)
657 return;
658 set_console(value);
661 static void k_fn(struct vc_data *vc, unsigned char value, char up_flag, struct pt_regs *regs)
663 if (up_flag)
664 return;
665 if (value < ARRAY_SIZE(func_table)) {
666 if (func_table[value])
667 puts_queue(vc, func_table[value]);
668 } else
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";
676 if (up_flag)
677 return;
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";
686 if (up_flag)
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);
692 return;
695 if (!vc_kbd_led(kbd, VC_NUMLOCK))
696 switch (value) {
697 case KVAL(K_PCOMMA):
698 case KVAL(K_PDOT):
699 k_fn(vc, KVAL(K_REMOVE), 0, regs);
700 return;
701 case KVAL(K_P0):
702 k_fn(vc, KVAL(K_INSERT), 0, regs);
703 return;
704 case KVAL(K_P1):
705 k_fn(vc, KVAL(K_SELECT), 0, regs);
706 return;
707 case KVAL(K_P2):
708 k_cur(vc, KVAL(K_DOWN), 0, regs);
709 return;
710 case KVAL(K_P3):
711 k_fn(vc, KVAL(K_PGDN), 0, regs);
712 return;
713 case KVAL(K_P4):
714 k_cur(vc, KVAL(K_LEFT), 0, regs);
715 return;
716 case KVAL(K_P6):
717 k_cur(vc, KVAL(K_RIGHT), 0, regs);
718 return;
719 case KVAL(K_P7):
720 k_fn(vc, KVAL(K_FIND), 0, regs);
721 return;
722 case KVAL(K_P8):
723 k_cur(vc, KVAL(K_UP), 0, regs);
724 return;
725 case KVAL(K_P9):
726 k_fn(vc, KVAL(K_PGUP), 0, regs);
727 return;
728 case KVAL(K_P5):
729 applkey(vc, 'G', vc_kbd_mode(kbd, VC_APPLIC));
730 return;
733 put_queue(vc, pad_chars[value]);
734 if (value == KVAL(K_PENTER) && vc_kbd_mode(kbd, VC_CRLF))
735 put_queue(vc, 10);
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;
742 if (rep)
743 return;
745 * Mimic typewriter:
746 * a CapsShift key acts like Shift but undoes CapsLock
748 if (value == KVAL(K_CAPSSHIFT)) {
749 value = KVAL(K_SHIFT);
750 if (!up_flag)
751 clr_vc_kbd_led(kbd, VC_CAPSLOCK);
754 if (up_flag) {
756 * handle the case that two shift or control
757 * keys are depressed simultaneously
759 if (shift_down[value])
760 shift_down[value]--;
761 } else
762 shift_down[value]++;
764 if (shift_down[value])
765 shift_state |= (1 << value);
766 else
767 shift_state &= ~(1 << value);
769 /* kludge */
770 if (up_flag && shift_state != old_state && npadch != -1) {
771 if (kbd->kbdmode == VC_UNICODE)
772 to_utf8(vc, npadch & 0xffff);
773 else
774 put_queue(vc, npadch & 0xff);
775 npadch = -1;
779 static void k_meta(struct vc_data *vc, unsigned char value, char up_flag, struct pt_regs *regs)
781 if (up_flag)
782 return;
784 if (vc_kbd_mode(kbd, VC_META)) {
785 put_queue(vc, '\033');
786 put_queue(vc, value);
787 } else
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)
793 int base;
795 if (up_flag)
796 return;
798 if (value < 10) {
799 /* decimal input of code, while Alt depressed */
800 base = 10;
801 } else {
802 /* hexadecimal input of code, while AltGr depressed */
803 value -= 10;
804 base = 16;
807 if (npadch == -1)
808 npadch = value;
809 else
810 npadch = npadch * base + value;
813 static void k_lock(struct vc_data *vc, unsigned char value, char up_flag, struct pt_regs *regs)
815 if (up_flag || rep)
816 return;
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);
823 if (up_flag || rep)
824 return;
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]) {
828 kbd->slockstate = 0;
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)
840 return ledstate;
843 void setledstate(struct kbd_struct *kbd, unsigned int led)
845 if (!(led & ~7)) {
846 ledioctl = led;
847 kbd->ledmode = LED_SHOW_IOCTL;
848 } else
849 kbd->ledmode = LED_SHOW_FLAGS;
850 set_leds();
853 void register_leds(struct kbd_struct *kbd, unsigned int led,
854 unsigned int *addr, unsigned int mask)
856 if (led < 3) {
857 ledptrs[led].addr = addr;
858 ledptrs[led].mask = mask;
859 ledptrs[led].valid = 1;
860 kbd->ledmode = LED_SHOW_MEM;
861 } else
862 kbd->ledmode = LED_SHOW_FLAGS;
865 static inline unsigned char getleds(void)
867 struct kbd_struct *kbd = kbd_table + fg_console;
868 unsigned char leds;
869 int i;
871 if (kbd->ledmode == LED_SHOW_IOCTL)
872 return ledioctl;
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)
880 leds |= (1 << i);
881 else
882 leds &= ~(1 << i);
885 return leds;
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);
917 ledstate = leds;
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);
930 if (leds != 0xff) {
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);
965 #endif
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))
972 return 0;
973 #endif /* CONFIG_MAC_EMUMOUSEBTN */
975 if (keycode > 255 || !x86_keycodes[keycode])
976 return -1;
978 if (keycode == KEY_PAUSE) {
979 put_queue(vc, 0xe1);
980 put_queue(vc, 0x1d | up_flag);
981 put_queue(vc, 0x45 | up_flag);
982 return 0;
985 if (keycode == KEY_SYSRQ && sysrq_alt) {
986 put_queue(vc, 0x54 | up_flag);
987 return 0;
990 if (x86_keycodes[keycode] & 0x100)
991 put_queue(vc, 0xe0);
993 put_queue(vc, (x86_keycodes[keycode] & 0x7f) | up_flag);
995 if (keycode == KEY_SYSRQ) {
996 put_queue(vc, 0xe0);
997 put_queue(vc, 0x37 | up_flag);
1000 return 0;
1003 #else
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)
1009 if (keycode > 127)
1010 return -1;
1012 put_queue(vc, keycode | up_flag);
1013 return 0;
1015 #endif
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;
1023 int shift_final;
1025 if (down != 2)
1026 add_keyboard_randomness((keycode << 1) ^ down);
1028 tty = vc->vc_tty;
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)
1038 sysrq_alt = down;
1039 #if defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64)
1040 if (keycode == KEY_STOP)
1041 sparc_l1_a_state = down;
1042 #endif
1044 rep = (down == 2);
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))) {
1053 sysrq_down = down;
1054 return;
1056 if (sysrq_down && down && !rep) {
1057 handle_sysrq(kbd_sysrq_xlate[keycode], regs, tty);
1058 return;
1060 #endif
1061 #if defined(CONFIG_SPARC32) || defined(CONFIG_SPARC64)
1062 if (keycode == KEY_A && sparc_l1_a_state) {
1063 sparc_l1_a_state = 0;
1064 sun_do_break();
1066 #endif
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));
1080 } else {
1081 put_queue(vc, !down << 7);
1082 put_queue(vc, (keycode >> 7) | 0x80);
1083 put_queue(vc, keycode | 0x80);
1085 raw_mode = 1;
1088 if (down)
1089 set_bit(keycode, key_down);
1090 else
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.
1100 return;
1103 shift_final = (shift_state | kbd->slockstate) ^ kbd->lockstate;
1104 key_map = key_maps[shift_final];
1106 if (!key_map) {
1107 compute_shiftstate();
1108 kbd->slockstate = 0;
1109 return;
1112 keysym = key_map[keycode];
1113 type = KTYP(keysym);
1115 if (type < 0xf0) {
1116 if (down && !raw_mode) to_utf8(vc, keysym);
1117 return;
1120 type -= 0xf0;
1122 if (raw_mode && type != KT_SPEC && type != KT_SHIFT)
1123 return;
1125 if (type == KT_LETTER) {
1126 type = KT_LATIN;
1127 if (vc_kbd_led(kbd, VC_CAPSLOCK)) {
1128 key_map = key_maps[shift_final ^ (1 << KG_SHIFT)];
1129 if (key_map)
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)
1144 return;
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;
1164 int i;
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))
1170 return NULL;
1172 if (!(handle = kmalloc(sizeof(struct input_handle), GFP_KERNEL)))
1173 return NULL;
1174 memset(handle, 0, sizeof(struct input_handle));
1176 handle->dev = dev;
1177 handle->handler = handler;
1178 handle->name = kbd_name;
1180 input_open_device(handle);
1181 kbd_refresh_leds(handle);
1183 return handle;
1186 static void kbd_disconnect(struct input_handle *handle)
1188 input_close_device(handle);
1189 kfree(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 = {
1209 .event = kbd_event,
1210 .connect = kbd_connect,
1211 .disconnect = kbd_disconnect,
1212 .name = "kbd",
1213 .id_table = kbd_ids,
1216 int __init kbd_init(void)
1218 int i;
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);
1235 return 0;