]> bbs.cooldavid.org Git - net-next-2.6.git/blame - drivers/char/keyboard.c
Input: usbtouchscreen - fix leaks and check return value of usb_submit_urb()
[net-next-2.6.git] / drivers / char / keyboard.c
CommitLineData
1da177e4
LT
1/*
2 * linux/drivers/char/keyboard.c
3 *
4 * Written for linux by Johan Myreen as a translation from
5 * the assembly version by Linus (with diacriticals added)
6 *
7 * Some additional features added by Christoph Niemann (ChN), March 1993
8 *
9 * Loadable keymaps by Risto Kankkunen, May 1993
10 *
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.
15 *
16 * 11-11-96: SAK should now work in the raw mode (Martin Mares)
fe1e8604 17 *
1da177e4
LT
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
21 *
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)
25 */
26
759448f4 27#include <linux/consolemap.h>
1da177e4
LT
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/init.h>
35#include <linux/slab.h>
7d12e780 36#include <linux/irq.h>
1da177e4
LT
37
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>
83cc5ed3 43#include <linux/reboot.h>
41ab4396 44#include <linux/notifier.h>
b39b0440 45#include <linux/jiffies.h>
1da177e4 46
1da177e4
LT
47extern void ctrl_alt_del(void);
48
49/*
50 * Exported functions/variables
51 */
52
53#define KBD_DEFMODE ((1 << VC_REPEAT) | (1 << VC_META))
54
55/*
56 * Some laptops take the 789uiojklm,. keys as number pad when NumLock is on.
57 * This seems a good reason to start with NumLock off. On HIL keyboards
fe1e8604 58 * of PARISC machines however there is no NumLock key and everyone expects the keypad
1da177e4
LT
59 * to be used for numbers.
60 */
61
62#if defined(CONFIG_PARISC) && (defined(CONFIG_KEYBOARD_HIL) || defined(CONFIG_KEYBOARD_HIL_OLD))
63#define KBD_DEFLEDS (1 << VC_NUMLOCK)
64#else
65#define KBD_DEFLEDS 0
66#endif
67
68#define KBD_DEFLOCK 0
69
70void compute_shiftstate(void);
71
72/*
73 * Handler Tables.
74 */
75
76#define K_HANDLERS\
77 k_self, k_fn, k_spec, k_pad,\
78 k_dead, k_cons, k_cur, k_shift,\
79 k_meta, k_ascii, k_lock, k_lowercase,\
b9ec4e10 80 k_slock, k_dead2, k_brl, k_ignore
1da177e4 81
fe1e8604 82typedef void (k_handler_fn)(struct vc_data *vc, unsigned char value,
7d12e780 83 char up_flag);
1da177e4 84static k_handler_fn K_HANDLERS;
41ab4396
ST
85k_handler_fn *k_handler[16] = { K_HANDLERS };
86EXPORT_SYMBOL_GPL(k_handler);
1da177e4
LT
87
88#define FN_HANDLERS\
fe1e8604
DT
89 fn_null, fn_enter, fn_show_ptregs, fn_show_mem,\
90 fn_show_state, fn_send_intr, fn_lastcons, fn_caps_toggle,\
91 fn_num, fn_hold, fn_scroll_forw, fn_scroll_back,\
92 fn_boot_it, fn_caps_on, fn_compose, fn_SAK,\
93 fn_dec_console, fn_inc_console, fn_spawn_con, fn_bare_num
1da177e4 94
7d12e780 95typedef void (fn_handler_fn)(struct vc_data *vc);
1da177e4
LT
96static fn_handler_fn FN_HANDLERS;
97static fn_handler_fn *fn_handler[] = { FN_HANDLERS };
98
99/*
100 * Variables exported for vt_ioctl.c
101 */
102
103/* maximum values each key_handler can handle */
104const int max_vals[] = {
105 255, ARRAY_SIZE(func_table) - 1, ARRAY_SIZE(fn_handler) - 1, NR_PAD - 1,
106 NR_DEAD - 1, 255, 3, NR_SHIFT - 1, 255, NR_ASCII - 1, NR_LOCK - 1,
b9ec4e10 107 255, NR_LOCK - 1, 255, NR_BRL - 1
1da177e4
LT
108};
109
110const int NR_TYPES = ARRAY_SIZE(max_vals);
111
112struct kbd_struct kbd_table[MAX_NR_CONSOLES];
f7511d5f 113EXPORT_SYMBOL_GPL(kbd_table);
1da177e4 114static struct kbd_struct *kbd = kbd_table;
1da177e4 115
81af8d67 116struct vt_spawn_console vt_spawn_con = {
ccc94256 117 .lock = __SPIN_LOCK_UNLOCKED(vt_spawn_con.lock),
81af8d67
EB
118 .pid = NULL,
119 .sig = 0,
120};
1da177e4
LT
121
122/*
123 * Variables exported for vt.c
124 */
125
126int shift_state = 0;
127
128/*
129 * Internal Data.
130 */
131
132static struct input_handler kbd_handler;
21cea58e 133static DEFINE_SPINLOCK(kbd_event_lock);
7b19ada2 134static unsigned long key_down[BITS_TO_LONGS(KEY_CNT)]; /* keyboard key bitmap */
1da177e4
LT
135static unsigned char shift_down[NR_SHIFT]; /* shift state counters.. */
136static int dead_key_next;
137static int npadch = -1; /* -1 or number assembled on pad */
b9ec4e10 138static unsigned int diacr;
1da177e4
LT
139static char rep; /* flag telling character repeat */
140
141static unsigned char ledstate = 0xff; /* undefined */
142static unsigned char ledioctl;
143
144static struct ledptr {
145 unsigned int *addr;
146 unsigned int mask;
147 unsigned char valid:1;
148} ledptrs[3];
149
150/* Simple translation table for the SysRq keys */
151
152#ifdef CONFIG_MAGIC_SYSRQ
153unsigned char kbd_sysrq_xlate[KEY_MAX + 1] =
154 "\000\0331234567890-=\177\t" /* 0x00 - 0x0f */
155 "qwertyuiop[]\r\000as" /* 0x10 - 0x1f */
156 "dfghjkl;'`\000\\zxcv" /* 0x20 - 0x2f */
157 "bnm,./\000*\000 \000\201\202\203\204\205" /* 0x30 - 0x3f */
158 "\206\207\210\211\212\000\000789-456+1" /* 0x40 - 0x4f */
159 "230\177\000\000\213\214\000\000\000\000\000\000\000\000\000\000" /* 0x50 - 0x5f */
160 "\r\000/"; /* 0x60 - 0x6f */
161static int sysrq_down;
d2be8ee5 162static int sysrq_alt_use;
1da177e4
LT
163#endif
164static int sysrq_alt;
165
41ab4396
ST
166/*
167 * Notifier list for console keyboard events
168 */
169static ATOMIC_NOTIFIER_HEAD(keyboard_notifier_list);
170
171int register_keyboard_notifier(struct notifier_block *nb)
172{
173 return atomic_notifier_chain_register(&keyboard_notifier_list, nb);
174}
175EXPORT_SYMBOL_GPL(register_keyboard_notifier);
176
177int unregister_keyboard_notifier(struct notifier_block *nb)
178{
179 return atomic_notifier_chain_unregister(&keyboard_notifier_list, nb);
180}
181EXPORT_SYMBOL_GPL(unregister_keyboard_notifier);
182
1da177e4 183/*
c8e4c772
MR
184 * Translation of scancodes to keycodes. We set them on only the first
185 * keyboard in the list that accepts the scancode and keycode.
186 * Explanation for not choosing the first attached keyboard anymore:
187 * USB keyboards for example have two event devices: one for all "normal"
188 * keys and one for extra function keys (like "volume up", "make coffee",
189 * etc.). So this means that scancodes for the extra function keys won't
190 * be valid for the first event device, but will be for the second.
1da177e4 191 */
66d2a595
DT
192
193struct getset_keycode_data {
194 unsigned int scancode;
195 unsigned int keycode;
196 int error;
197};
198
199static int getkeycode_helper(struct input_handle *handle, void *data)
200{
201 struct getset_keycode_data *d = data;
202
203 d->error = input_get_keycode(handle->dev, d->scancode, &d->keycode);
204
205 return d->error == 0; /* stop as soon as we successfully get one */
206}
207
1da177e4
LT
208int getkeycode(unsigned int scancode)
209{
66d2a595 210 struct getset_keycode_data d = { scancode, 0, -ENODEV };
c8e4c772 211
66d2a595 212 input_handler_for_each_handle(&kbd_handler, &d, getkeycode_helper);
1da177e4 213
66d2a595
DT
214 return d.error ?: d.keycode;
215}
216
217static int setkeycode_helper(struct input_handle *handle, void *data)
218{
219 struct getset_keycode_data *d = data;
220
221 d->error = input_set_keycode(handle->dev, d->scancode, d->keycode);
222
223 return d->error == 0; /* stop as soon as we successfully set one */
1da177e4
LT
224}
225
226int setkeycode(unsigned int scancode, unsigned int keycode)
227{
66d2a595 228 struct getset_keycode_data d = { scancode, keycode, -ENODEV };
c8e4c772 229
66d2a595 230 input_handler_for_each_handle(&kbd_handler, &d, setkeycode_helper);
1da177e4 231
66d2a595 232 return d.error;
1da177e4
LT
233}
234
235/*
18f7ad59
DT
236 * Making beeps and bells. Note that we prefer beeps to bells, but when
237 * shutting the sound off we do both.
1da177e4 238 */
66d2a595
DT
239
240static int kd_sound_helper(struct input_handle *handle, void *data)
1da177e4 241{
66d2a595
DT
242 unsigned int *hz = data;
243 struct input_dev *dev = handle->dev;
1da177e4 244
66d2a595 245 if (test_bit(EV_SND, dev->evbit)) {
18f7ad59 246 if (test_bit(SND_TONE, dev->sndbit)) {
66d2a595 247 input_inject_event(handle, EV_SND, SND_TONE, *hz);
18f7ad59
DT
248 if (*hz)
249 return 0;
250 }
251 if (test_bit(SND_BELL, dev->sndbit))
66d2a595 252 input_inject_event(handle, EV_SND, SND_BELL, *hz ? 1 : 0);
1da177e4 253 }
66d2a595
DT
254
255 return 0;
256}
257
258static void kd_nosound(unsigned long ignored)
259{
260 static unsigned int zero;
261
262 input_handler_for_each_handle(&kbd_handler, &zero, kd_sound_helper);
1da177e4
LT
263}
264
8d06afab 265static DEFINE_TIMER(kd_mksound_timer, kd_nosound, 0, 0);
1da177e4
LT
266
267void kd_mksound(unsigned int hz, unsigned int ticks)
268{
66d2a595 269 del_timer_sync(&kd_mksound_timer);
1da177e4 270
66d2a595 271 input_handler_for_each_handle(&kbd_handler, &hz, kd_sound_helper);
1da177e4 272
66d2a595
DT
273 if (hz && ticks)
274 mod_timer(&kd_mksound_timer, jiffies + ticks);
1da177e4 275}
f7511d5f 276EXPORT_SYMBOL(kd_mksound);
1da177e4
LT
277
278/*
279 * Setting the keyboard rate.
280 */
281
66d2a595 282static int kbd_rate_helper(struct input_handle *handle, void *data)
1da177e4 283{
66d2a595
DT
284 struct input_dev *dev = handle->dev;
285 struct kbd_repeat *rep = data;
286
287 if (test_bit(EV_REP, dev->evbit)) {
288
289 if (rep[0].delay > 0)
290 input_inject_event(handle,
291 EV_REP, REP_DELAY, rep[0].delay);
292 if (rep[0].period > 0)
293 input_inject_event(handle,
294 EV_REP, REP_PERIOD, rep[0].period);
295
296 rep[1].delay = dev->rep[REP_DELAY];
297 rep[1].period = dev->rep[REP_PERIOD];
1da177e4 298 }
66d2a595
DT
299
300 return 0;
301}
302
303int kbd_rate(struct kbd_repeat *rep)
304{
305 struct kbd_repeat data[2] = { *rep };
306
307 input_handler_for_each_handle(&kbd_handler, data, kbd_rate_helper);
308 *rep = data[1]; /* Copy currently used settings */
309
1da177e4
LT
310 return 0;
311}
312
313/*
314 * Helper Functions.
315 */
316static void put_queue(struct vc_data *vc, int ch)
317{
318 struct tty_struct *tty = vc->vc_tty;
319
320 if (tty) {
321 tty_insert_flip_char(tty, ch, 0);
322 con_schedule_flip(tty);
323 }
324}
325
326static void puts_queue(struct vc_data *vc, char *cp)
327{
328 struct tty_struct *tty = vc->vc_tty;
329
330 if (!tty)
331 return;
332
333 while (*cp) {
334 tty_insert_flip_char(tty, *cp, 0);
335 cp++;
336 }
337 con_schedule_flip(tty);
338}
339
340static void applkey(struct vc_data *vc, int key, char mode)
341{
342 static char buf[] = { 0x1b, 'O', 0x00, 0x00 };
343
344 buf[1] = (mode ? 'O' : '[');
345 buf[2] = key;
346 puts_queue(vc, buf);
347}
348
349/*
350 * Many other routines do put_queue, but I think either
351 * they produce ASCII, or they produce some user-assigned
352 * string, and in both cases we might assume that it is
759448f4 353 * in utf-8 already.
1da177e4 354 */
759448f4 355static void to_utf8(struct vc_data *vc, uint c)
1da177e4
LT
356{
357 if (c < 0x80)
358 /* 0******* */
359 put_queue(vc, c);
fe1e8604 360 else if (c < 0x800) {
1da177e4 361 /* 110***** 10****** */
fe1e8604 362 put_queue(vc, 0xc0 | (c >> 6));
1da177e4 363 put_queue(vc, 0x80 | (c & 0x3f));
759448f4
JE
364 } else if (c < 0x10000) {
365 if (c >= 0xD800 && c < 0xE000)
366 return;
367 if (c == 0xFFFF)
368 return;
1da177e4
LT
369 /* 1110**** 10****** 10****** */
370 put_queue(vc, 0xe0 | (c >> 12));
371 put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
372 put_queue(vc, 0x80 | (c & 0x3f));
759448f4
JE
373 } else if (c < 0x110000) {
374 /* 11110*** 10****** 10****** 10****** */
375 put_queue(vc, 0xf0 | (c >> 18));
376 put_queue(vc, 0x80 | ((c >> 12) & 0x3f));
377 put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
378 put_queue(vc, 0x80 | (c & 0x3f));
fe1e8604 379 }
1da177e4
LT
380}
381
fe1e8604 382/*
1da177e4
LT
383 * Called after returning from RAW mode or when changing consoles - recompute
384 * shift_down[] and shift_state from key_down[] maybe called when keymap is
385 * undefined, so that shiftkey release is seen
386 */
387void compute_shiftstate(void)
388{
389 unsigned int i, j, k, sym, val;
390
391 shift_state = 0;
392 memset(shift_down, 0, sizeof(shift_down));
fe1e8604 393
1da177e4
LT
394 for (i = 0; i < ARRAY_SIZE(key_down); i++) {
395
396 if (!key_down[i])
397 continue;
398
399 k = i * BITS_PER_LONG;
400
401 for (j = 0; j < BITS_PER_LONG; j++, k++) {
402
403 if (!test_bit(k, key_down))
404 continue;
405
406 sym = U(key_maps[0][k]);
407 if (KTYP(sym) != KT_SHIFT && KTYP(sym) != KT_SLOCK)
408 continue;
409
410 val = KVAL(sym);
411 if (val == KVAL(K_CAPSSHIFT))
412 val = KVAL(K_SHIFT);
413
414 shift_down[val]++;
415 shift_state |= (1 << val);
416 }
417 }
418}
419
420/*
421 * We have a combining character DIACR here, followed by the character CH.
422 * If the combination occurs in the table, return the corresponding value.
423 * Otherwise, if CH is a space or equals DIACR, return DIACR.
424 * Otherwise, conclude that DIACR was not combining after all,
425 * queue it and return CH.
426 */
b9ec4e10 427static unsigned int handle_diacr(struct vc_data *vc, unsigned int ch)
1da177e4 428{
b9ec4e10 429 unsigned int d = diacr;
1da177e4
LT
430 unsigned int i;
431
432 diacr = 0;
433
b9ec4e10
ST
434 if ((d & ~0xff) == BRL_UC_ROW) {
435 if ((ch & ~0xff) == BRL_UC_ROW)
436 return d | ch;
437 } else {
438 for (i = 0; i < accent_table_size; i++)
439 if (accent_table[i].diacr == d && accent_table[i].base == ch)
440 return accent_table[i].result;
1da177e4
LT
441 }
442
b9ec4e10 443 if (ch == ' ' || ch == (BRL_UC_ROW|0) || ch == d)
1da177e4
LT
444 return d;
445
b9ec4e10 446 if (kbd->kbdmode == VC_UNICODE)
04c71976
ST
447 to_utf8(vc, d);
448 else {
449 int c = conv_uni_to_8bit(d);
450 if (c != -1)
451 put_queue(vc, c);
452 }
b9ec4e10 453
1da177e4
LT
454 return ch;
455}
456
457/*
458 * Special function handlers
459 */
7d12e780 460static void fn_enter(struct vc_data *vc)
1da177e4
LT
461{
462 if (diacr) {
b9ec4e10 463 if (kbd->kbdmode == VC_UNICODE)
04c71976
ST
464 to_utf8(vc, diacr);
465 else {
466 int c = conv_uni_to_8bit(diacr);
467 if (c != -1)
468 put_queue(vc, c);
469 }
1da177e4
LT
470 diacr = 0;
471 }
472 put_queue(vc, 13);
473 if (vc_kbd_mode(kbd, VC_CRLF))
474 put_queue(vc, 10);
475}
476
7d12e780 477static void fn_caps_toggle(struct vc_data *vc)
1da177e4
LT
478{
479 if (rep)
480 return;
481 chg_vc_kbd_led(kbd, VC_CAPSLOCK);
482}
483
7d12e780 484static void fn_caps_on(struct vc_data *vc)
1da177e4
LT
485{
486 if (rep)
487 return;
488 set_vc_kbd_led(kbd, VC_CAPSLOCK);
489}
490
7d12e780 491static void fn_show_ptregs(struct vc_data *vc)
1da177e4 492{
7d12e780 493 struct pt_regs *regs = get_irq_regs();
1da177e4
LT
494 if (regs)
495 show_regs(regs);
496}
497
7d12e780 498static void fn_hold(struct vc_data *vc)
1da177e4
LT
499{
500 struct tty_struct *tty = vc->vc_tty;
501
502 if (rep || !tty)
503 return;
504
505 /*
506 * Note: SCROLLOCK will be set (cleared) by stop_tty (start_tty);
507 * these routines are also activated by ^S/^Q.
508 * (And SCROLLOCK can also be set by the ioctl KDSKBLED.)
509 */
510 if (tty->stopped)
511 start_tty(tty);
512 else
513 stop_tty(tty);
514}
515
7d12e780 516static void fn_num(struct vc_data *vc)
1da177e4
LT
517{
518 if (vc_kbd_mode(kbd,VC_APPLIC))
519 applkey(vc, 'P', 1);
520 else
7d12e780 521 fn_bare_num(vc);
1da177e4
LT
522}
523
524/*
525 * Bind this to Shift-NumLock if you work in application keypad mode
526 * but want to be able to change the NumLock flag.
527 * Bind this to NumLock if you prefer that the NumLock key always
528 * changes the NumLock flag.
529 */
7d12e780 530static void fn_bare_num(struct vc_data *vc)
1da177e4
LT
531{
532 if (!rep)
533 chg_vc_kbd_led(kbd, VC_NUMLOCK);
534}
535
7d12e780 536static void fn_lastcons(struct vc_data *vc)
1da177e4
LT
537{
538 /* switch to the last used console, ChN */
539 set_console(last_console);
540}
541
7d12e780 542static void fn_dec_console(struct vc_data *vc)
1da177e4
LT
543{
544 int i, cur = fg_console;
545
546 /* Currently switching? Queue this next switch relative to that. */
547 if (want_console != -1)
548 cur = want_console;
549
fe1e8604 550 for (i = cur - 1; i != cur; i--) {
1da177e4 551 if (i == -1)
fe1e8604 552 i = MAX_NR_CONSOLES - 1;
1da177e4
LT
553 if (vc_cons_allocated(i))
554 break;
555 }
556 set_console(i);
557}
558
7d12e780 559static void fn_inc_console(struct vc_data *vc)
1da177e4
LT
560{
561 int i, cur = fg_console;
562
563 /* Currently switching? Queue this next switch relative to that. */
564 if (want_console != -1)
565 cur = want_console;
566
567 for (i = cur+1; i != cur; i++) {
568 if (i == MAX_NR_CONSOLES)
569 i = 0;
570 if (vc_cons_allocated(i))
571 break;
572 }
573 set_console(i);
574}
575
7d12e780 576static void fn_send_intr(struct vc_data *vc)
1da177e4
LT
577{
578 struct tty_struct *tty = vc->vc_tty;
579
580 if (!tty)
581 return;
582 tty_insert_flip_char(tty, 0, TTY_BREAK);
583 con_schedule_flip(tty);
584}
585
7d12e780 586static void fn_scroll_forw(struct vc_data *vc)
1da177e4
LT
587{
588 scrollfront(vc, 0);
589}
590
7d12e780 591static void fn_scroll_back(struct vc_data *vc)
1da177e4
LT
592{
593 scrollback(vc, 0);
594}
595
7d12e780 596static void fn_show_mem(struct vc_data *vc)
1da177e4
LT
597{
598 show_mem();
599}
600
7d12e780 601static void fn_show_state(struct vc_data *vc)
1da177e4
LT
602{
603 show_state();
604}
605
7d12e780 606static void fn_boot_it(struct vc_data *vc)
1da177e4
LT
607{
608 ctrl_alt_del();
609}
610
7d12e780 611static void fn_compose(struct vc_data *vc)
1da177e4
LT
612{
613 dead_key_next = 1;
614}
615
7d12e780 616static void fn_spawn_con(struct vc_data *vc)
1da177e4 617{
81af8d67
EB
618 spin_lock(&vt_spawn_con.lock);
619 if (vt_spawn_con.pid)
620 if (kill_pid(vt_spawn_con.pid, vt_spawn_con.sig, 1)) {
621 put_pid(vt_spawn_con.pid);
622 vt_spawn_con.pid = NULL;
623 }
624 spin_unlock(&vt_spawn_con.lock);
1da177e4
LT
625}
626
7d12e780 627static void fn_SAK(struct vc_data *vc)
1da177e4 628{
8b6312f4 629 struct work_struct *SAK_work = &vc_cons[fg_console].SAK_work;
8b6312f4 630 schedule_work(SAK_work);
1da177e4
LT
631}
632
7d12e780 633static void fn_null(struct vc_data *vc)
1da177e4
LT
634{
635 compute_shiftstate();
636}
637
638/*
639 * Special key handlers
640 */
7d12e780 641static void k_ignore(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4
LT
642{
643}
644
7d12e780 645static void k_spec(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4
LT
646{
647 if (up_flag)
648 return;
649 if (value >= ARRAY_SIZE(fn_handler))
650 return;
fe1e8604
DT
651 if ((kbd->kbdmode == VC_RAW ||
652 kbd->kbdmode == VC_MEDIUMRAW) &&
1da177e4
LT
653 value != KVAL(K_SAK))
654 return; /* SAK is allowed even in raw mode */
7d12e780 655 fn_handler[value](vc);
1da177e4
LT
656}
657
7d12e780 658static void k_lowercase(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4
LT
659{
660 printk(KERN_ERR "keyboard.c: k_lowercase was called - impossible\n");
661}
662
7d12e780 663static void k_unicode(struct vc_data *vc, unsigned int value, char up_flag)
1da177e4
LT
664{
665 if (up_flag)
666 return; /* no action, if this is a key release */
667
668 if (diacr)
669 value = handle_diacr(vc, value);
670
671 if (dead_key_next) {
672 dead_key_next = 0;
673 diacr = value;
674 return;
675 }
b9ec4e10 676 if (kbd->kbdmode == VC_UNICODE)
04c71976
ST
677 to_utf8(vc, value);
678 else {
679 int c = conv_uni_to_8bit(value);
680 if (c != -1)
681 put_queue(vc, c);
682 }
1da177e4
LT
683}
684
685/*
686 * Handle dead key. Note that we now may have several
687 * dead keys modifying the same character. Very useful
688 * for Vietnamese.
689 */
7d12e780 690static void k_deadunicode(struct vc_data *vc, unsigned int value, char up_flag)
1da177e4
LT
691{
692 if (up_flag)
693 return;
694 diacr = (diacr ? handle_diacr(vc, value) : value);
695}
696
7d12e780 697static void k_self(struct vc_data *vc, unsigned char value, char up_flag)
b9ec4e10 698{
d2187ebd 699 k_unicode(vc, conv_8bit_to_uni(value), up_flag);
b9ec4e10
ST
700}
701
7d12e780 702static void k_dead2(struct vc_data *vc, unsigned char value, char up_flag)
b9ec4e10 703{
7d12e780 704 k_deadunicode(vc, value, up_flag);
b9ec4e10
ST
705}
706
1da177e4
LT
707/*
708 * Obsolete - for backwards compatibility only
709 */
7d12e780 710static void k_dead(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4 711{
0f5e560e 712 static const unsigned char ret_diacr[NR_DEAD] = {'`', '\'', '^', '~', '"', ',' };
1da177e4 713 value = ret_diacr[value];
7d12e780 714 k_deadunicode(vc, value, up_flag);
1da177e4
LT
715}
716
7d12e780 717static void k_cons(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4
LT
718{
719 if (up_flag)
720 return;
721 set_console(value);
722}
723
7d12e780 724static void k_fn(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4
LT
725{
726 unsigned v;
727
728 if (up_flag)
729 return;
730 v = value;
731 if (v < ARRAY_SIZE(func_table)) {
732 if (func_table[value])
733 puts_queue(vc, func_table[value]);
734 } else
735 printk(KERN_ERR "k_fn called with value=%d\n", value);
736}
737
7d12e780 738static void k_cur(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4 739{
e52b29c2 740 static const char cur_chars[] = "BDCA";
1da177e4
LT
741
742 if (up_flag)
743 return;
744 applkey(vc, cur_chars[value], vc_kbd_mode(kbd, VC_CKMODE));
745}
746
7d12e780 747static void k_pad(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4 748{
0f5e560e
AM
749 static const char pad_chars[] = "0123456789+-*/\015,.?()#";
750 static const char app_map[] = "pqrstuvwxylSRQMnnmPQS";
1da177e4
LT
751
752 if (up_flag)
753 return; /* no action, if this is a key release */
754
755 /* kludge... shift forces cursor/number keys */
756 if (vc_kbd_mode(kbd, VC_APPLIC) && !shift_down[KG_SHIFT]) {
757 applkey(vc, app_map[value], 1);
758 return;
759 }
760
761 if (!vc_kbd_led(kbd, VC_NUMLOCK))
762 switch (value) {
763 case KVAL(K_PCOMMA):
764 case KVAL(K_PDOT):
7d12e780 765 k_fn(vc, KVAL(K_REMOVE), 0);
1da177e4
LT
766 return;
767 case KVAL(K_P0):
7d12e780 768 k_fn(vc, KVAL(K_INSERT), 0);
1da177e4
LT
769 return;
770 case KVAL(K_P1):
7d12e780 771 k_fn(vc, KVAL(K_SELECT), 0);
1da177e4
LT
772 return;
773 case KVAL(K_P2):
7d12e780 774 k_cur(vc, KVAL(K_DOWN), 0);
1da177e4
LT
775 return;
776 case KVAL(K_P3):
7d12e780 777 k_fn(vc, KVAL(K_PGDN), 0);
1da177e4
LT
778 return;
779 case KVAL(K_P4):
7d12e780 780 k_cur(vc, KVAL(K_LEFT), 0);
1da177e4
LT
781 return;
782 case KVAL(K_P6):
7d12e780 783 k_cur(vc, KVAL(K_RIGHT), 0);
1da177e4
LT
784 return;
785 case KVAL(K_P7):
7d12e780 786 k_fn(vc, KVAL(K_FIND), 0);
1da177e4
LT
787 return;
788 case KVAL(K_P8):
7d12e780 789 k_cur(vc, KVAL(K_UP), 0);
1da177e4
LT
790 return;
791 case KVAL(K_P9):
7d12e780 792 k_fn(vc, KVAL(K_PGUP), 0);
1da177e4
LT
793 return;
794 case KVAL(K_P5):
795 applkey(vc, 'G', vc_kbd_mode(kbd, VC_APPLIC));
796 return;
797 }
798
799 put_queue(vc, pad_chars[value]);
800 if (value == KVAL(K_PENTER) && vc_kbd_mode(kbd, VC_CRLF))
801 put_queue(vc, 10);
802}
803
7d12e780 804static void k_shift(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4
LT
805{
806 int old_state = shift_state;
807
808 if (rep)
809 return;
810 /*
811 * Mimic typewriter:
812 * a CapsShift key acts like Shift but undoes CapsLock
813 */
814 if (value == KVAL(K_CAPSSHIFT)) {
815 value = KVAL(K_SHIFT);
816 if (!up_flag)
817 clr_vc_kbd_led(kbd, VC_CAPSLOCK);
818 }
819
820 if (up_flag) {
821 /*
822 * handle the case that two shift or control
823 * keys are depressed simultaneously
824 */
825 if (shift_down[value])
826 shift_down[value]--;
827 } else
828 shift_down[value]++;
829
830 if (shift_down[value])
831 shift_state |= (1 << value);
832 else
833 shift_state &= ~(1 << value);
834
835 /* kludge */
836 if (up_flag && shift_state != old_state && npadch != -1) {
837 if (kbd->kbdmode == VC_UNICODE)
759448f4 838 to_utf8(vc, npadch);
1da177e4
LT
839 else
840 put_queue(vc, npadch & 0xff);
841 npadch = -1;
842 }
843}
844
7d12e780 845static void k_meta(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4
LT
846{
847 if (up_flag)
848 return;
849
850 if (vc_kbd_mode(kbd, VC_META)) {
851 put_queue(vc, '\033');
852 put_queue(vc, value);
853 } else
854 put_queue(vc, value | 0x80);
855}
856
7d12e780 857static void k_ascii(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4
LT
858{
859 int base;
860
861 if (up_flag)
862 return;
863
864 if (value < 10) {
865 /* decimal input of code, while Alt depressed */
866 base = 10;
867 } else {
868 /* hexadecimal input of code, while AltGr depressed */
869 value -= 10;
870 base = 16;
871 }
872
873 if (npadch == -1)
874 npadch = value;
875 else
876 npadch = npadch * base + value;
877}
878
7d12e780 879static void k_lock(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4
LT
880{
881 if (up_flag || rep)
882 return;
883 chg_vc_kbd_lock(kbd, value);
884}
885
7d12e780 886static void k_slock(struct vc_data *vc, unsigned char value, char up_flag)
1da177e4 887{
7d12e780 888 k_shift(vc, value, up_flag);
1da177e4
LT
889 if (up_flag || rep)
890 return;
891 chg_vc_kbd_slock(kbd, value);
892 /* try to make Alt, oops, AltGr and such work */
893 if (!key_maps[kbd->lockstate ^ kbd->slockstate]) {
894 kbd->slockstate = 0;
895 chg_vc_kbd_slock(kbd, value);
896 }
897}
898
b9ec4e10 899/* by default, 300ms interval for combination release */
77426d72
ST
900static unsigned brl_timeout = 300;
901MODULE_PARM_DESC(brl_timeout, "Braille keys release delay in ms (0 for commit on first key release)");
902module_param(brl_timeout, uint, 0644);
903
904static unsigned brl_nbchords = 1;
905MODULE_PARM_DESC(brl_nbchords, "Number of chords that produce a braille pattern (0 for dead chords)");
906module_param(brl_nbchords, uint, 0644);
907
7d12e780 908static void k_brlcommit(struct vc_data *vc, unsigned int pattern, char up_flag)
77426d72
ST
909{
910 static unsigned long chords;
911 static unsigned committed;
912
913 if (!brl_nbchords)
7d12e780 914 k_deadunicode(vc, BRL_UC_ROW | pattern, up_flag);
77426d72
ST
915 else {
916 committed |= pattern;
917 chords++;
918 if (chords == brl_nbchords) {
7d12e780 919 k_unicode(vc, BRL_UC_ROW | committed, up_flag);
77426d72
ST
920 chords = 0;
921 committed = 0;
922 }
923 }
924}
925
7d12e780 926static void k_brl(struct vc_data *vc, unsigned char value, char up_flag)
b9ec4e10
ST
927{
928 static unsigned pressed,committing;
929 static unsigned long releasestart;
930
931 if (kbd->kbdmode != VC_UNICODE) {
932 if (!up_flag)
933 printk("keyboard mode must be unicode for braille patterns\n");
934 return;
935 }
936
937 if (!value) {
7d12e780 938 k_unicode(vc, BRL_UC_ROW, up_flag);
b9ec4e10
ST
939 return;
940 }
941
942 if (value > 8)
943 return;
944
b9ec4e10
ST
945 if (up_flag) {
946 if (brl_timeout) {
947 if (!committing ||
b39b0440
JL
948 time_after(jiffies,
949 releasestart + msecs_to_jiffies(brl_timeout))) {
b9ec4e10
ST
950 committing = pressed;
951 releasestart = jiffies;
952 }
953 pressed &= ~(1 << (value - 1));
954 if (!pressed) {
955 if (committing) {
7d12e780 956 k_brlcommit(vc, committing, 0);
b9ec4e10
ST
957 committing = 0;
958 }
959 }
960 } else {
961 if (committing) {
7d12e780 962 k_brlcommit(vc, committing, 0);
b9ec4e10
ST
963 committing = 0;
964 }
965 pressed &= ~(1 << (value - 1));
966 }
967 } else {
968 pressed |= 1 << (value - 1);
969 if (!brl_timeout)
970 committing = pressed;
971 }
972}
973
1da177e4
LT
974/*
975 * The leds display either (i) the status of NumLock, CapsLock, ScrollLock,
976 * or (ii) whatever pattern of lights people want to show using KDSETLED,
977 * or (iii) specified bits of specified words in kernel memory.
978 */
979unsigned char getledstate(void)
980{
981 return ledstate;
982}
983
984void setledstate(struct kbd_struct *kbd, unsigned int led)
985{
986 if (!(led & ~7)) {
987 ledioctl = led;
988 kbd->ledmode = LED_SHOW_IOCTL;
989 } else
990 kbd->ledmode = LED_SHOW_FLAGS;
991 set_leds();
992}
993
994static inline unsigned char getleds(void)
995{
996 struct kbd_struct *kbd = kbd_table + fg_console;
997 unsigned char leds;
998 int i;
999
1000 if (kbd->ledmode == LED_SHOW_IOCTL)
1001 return ledioctl;
1002
1003 leds = kbd->ledflagstate;
1004
1005 if (kbd->ledmode == LED_SHOW_MEM) {
1006 for (i = 0; i < 3; i++)
1007 if (ledptrs[i].valid) {
1008 if (*ledptrs[i].addr & ledptrs[i].mask)
1009 leds |= (1 << i);
1010 else
1011 leds &= ~(1 << i);
1012 }
1013 }
1014 return leds;
1015}
1016
66d2a595
DT
1017static int kbd_update_leds_helper(struct input_handle *handle, void *data)
1018{
1019 unsigned char leds = *(unsigned char *)data;
1020
1021 if (test_bit(EV_LED, handle->dev->evbit)) {
1022 input_inject_event(handle, EV_LED, LED_SCROLLL, !!(leds & 0x01));
1023 input_inject_event(handle, EV_LED, LED_NUML, !!(leds & 0x02));
1024 input_inject_event(handle, EV_LED, LED_CAPSL, !!(leds & 0x04));
1025 input_inject_event(handle, EV_SYN, SYN_REPORT, 0);
1026 }
1027
1028 return 0;
1029}
1030
1da177e4 1031/*
66d2a595
DT
1032 * This is the tasklet that updates LED state on all keyboards
1033 * attached to the box. The reason we use tasklet is that we
1034 * need to handle the scenario when keyboard handler is not
1035 * registered yet but we already getting updates form VT to
1036 * update led state.
1da177e4 1037 */
1da177e4
LT
1038static void kbd_bh(unsigned long dummy)
1039{
1da177e4
LT
1040 unsigned char leds = getleds();
1041
1042 if (leds != ledstate) {
66d2a595
DT
1043 input_handler_for_each_handle(&kbd_handler, &leds,
1044 kbd_update_leds_helper);
1045 ledstate = leds;
1da177e4 1046 }
1da177e4
LT
1047}
1048
1049DECLARE_TASKLET_DISABLED(keyboard_tasklet, kbd_bh, 0);
1050
1da177e4 1051#if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_ALPHA) ||\
0b57ee9e
AB
1052 defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC) ||\
1053 defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) ||\
3a4e832c
HCE
1054 (defined(CONFIG_ARM) && defined(CONFIG_KEYBOARD_ATKBD) && !defined(CONFIG_ARCH_RPC)) ||\
1055 defined(CONFIG_AVR32)
1da177e4
LT
1056
1057#define HW_RAW(dev) (test_bit(EV_MSC, dev->evbit) && test_bit(MSC_RAW, dev->mscbit) &&\
1058 ((dev)->id.bustype == BUS_I8042) && ((dev)->id.vendor == 0x0001) && ((dev)->id.product == 0x0001))
1059
0f5e560e 1060static const unsigned short x86_keycodes[256] =
1da177e4
LT
1061 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
1062 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1063 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1064 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1065 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
1066 80, 81, 82, 83, 84,118, 86, 87, 88,115,120,119,121,112,123, 92,
896cdc7b 1067 284,285,309, 0,312, 91,327,328,329,331,333,335,336,337,338,339,
1da177e4
LT
1068 367,288,302,304,350, 89,334,326,267,126,268,269,125,347,348,349,
1069 360,261,262,263,268,376,100,101,321,316,373,286,289,102,351,355,
72a42f24
HG
1070 103,104,105,275,287,279,258,106,274,107,294,364,358,363,362,361,
1071 291,108,381,281,290,272,292,305,280, 99,112,257,306,359,113,114,
1da177e4
LT
1072 264,117,271,374,379,265,266, 93, 94, 95, 85,259,375,260, 90,116,
1073 377,109,111,277,278,282,283,295,296,297,299,300,301,293,303,307,
1074 308,310,313,314,315,317,318,319,320,357,322,323,324,325,276,330,
1075 332,340,365,342,343,344,345,346,356,270,341,368,369,370,371,372 };
1076
0b57ee9e 1077#ifdef CONFIG_SPARC
1da177e4
LT
1078static int sparc_l1_a_state = 0;
1079extern void sun_do_break(void);
1080#endif
1081
fe1e8604 1082static int emulate_raw(struct vc_data *vc, unsigned int keycode,
1da177e4
LT
1083 unsigned char up_flag)
1084{
896cdc7b 1085 int code;
1da177e4
LT
1086
1087 switch (keycode) {
1088 case KEY_PAUSE:
1089 put_queue(vc, 0xe1);
1090 put_queue(vc, 0x1d | up_flag);
1091 put_queue(vc, 0x45 | up_flag);
896cdc7b
DT
1092 break;
1093
b9ab58dd 1094 case KEY_HANGEUL:
0ae051a1
DT
1095 if (!up_flag)
1096 put_queue(vc, 0xf2);
896cdc7b
DT
1097 break;
1098
1da177e4 1099 case KEY_HANJA:
0ae051a1
DT
1100 if (!up_flag)
1101 put_queue(vc, 0xf1);
896cdc7b 1102 break;
1da177e4 1103
896cdc7b
DT
1104 case KEY_SYSRQ:
1105 /*
1106 * Real AT keyboards (that's what we're trying
1107 * to emulate here emit 0xe0 0x2a 0xe0 0x37 when
1108 * pressing PrtSc/SysRq alone, but simply 0x54
1109 * when pressing Alt+PrtSc/SysRq.
1110 */
1111 if (sysrq_alt) {
1112 put_queue(vc, 0x54 | up_flag);
1113 } else {
1114 put_queue(vc, 0xe0);
1115 put_queue(vc, 0x2a | up_flag);
1116 put_queue(vc, 0xe0);
1117 put_queue(vc, 0x37 | up_flag);
1118 }
1119 break;
1120
1121 default:
1122 if (keycode > 255)
1123 return -1;
1da177e4 1124
896cdc7b
DT
1125 code = x86_keycodes[keycode];
1126 if (!code)
1127 return -1;
1da177e4 1128
896cdc7b
DT
1129 if (code & 0x100)
1130 put_queue(vc, 0xe0);
1131 put_queue(vc, (code & 0x7f) | up_flag);
1da177e4 1132
896cdc7b 1133 break;
1da177e4
LT
1134 }
1135
1136 return 0;
1137}
1138
1139#else
1140
1141#define HW_RAW(dev) 0
1142
1da177e4
LT
1143static int emulate_raw(struct vc_data *vc, unsigned int keycode, unsigned char up_flag)
1144{
1145 if (keycode > 127)
1146 return -1;
1147
1148 put_queue(vc, keycode | up_flag);
1149 return 0;
1150}
1151#endif
1152
1153static void kbd_rawcode(unsigned char data)
1154{
1155 struct vc_data *vc = vc_cons[fg_console].d;
0c09b2ac 1156 kbd = kbd_table + vc->vc_num;
1da177e4
LT
1157 if (kbd->kbdmode == VC_RAW)
1158 put_queue(vc, data);
1159}
1160
7d12e780 1161static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
1da177e4
LT
1162{
1163 struct vc_data *vc = vc_cons[fg_console].d;
1164 unsigned short keysym, *key_map;
1165 unsigned char type, raw_mode;
1166 struct tty_struct *tty;
1167 int shift_final;
41ab4396 1168 struct keyboard_notifier_param param = { .vc = vc, .value = keycode, .down = down };
1da177e4
LT
1169
1170 tty = vc->vc_tty;
1171
1172 if (tty && (!tty->driver_data)) {
1173 /* No driver data? Strange. Okay we fix it then. */
1174 tty->driver_data = vc;
1175 }
1176
0c09b2ac 1177 kbd = kbd_table + vc->vc_num;
1da177e4
LT
1178
1179 if (keycode == KEY_LEFTALT || keycode == KEY_RIGHTALT)
d2be8ee5 1180 sysrq_alt = down ? keycode : 0;
0b57ee9e 1181#ifdef CONFIG_SPARC
1da177e4
LT
1182 if (keycode == KEY_STOP)
1183 sparc_l1_a_state = down;
1184#endif
1185
1186 rep = (down == 2);
1187
1da177e4
LT
1188 if ((raw_mode = (kbd->kbdmode == VC_RAW)) && !hw_raw)
1189 if (emulate_raw(vc, keycode, !down << 7))
9e35d206 1190 if (keycode < BTN_MISC && printk_ratelimit())
1da177e4
LT
1191 printk(KERN_WARNING "keyboard.c: can't emulate rawmode for keycode %d\n", keycode);
1192
1193#ifdef CONFIG_MAGIC_SYSRQ /* Handle the SysRq Hack */
1194 if (keycode == KEY_SYSRQ && (sysrq_down || (down == 1 && sysrq_alt))) {
d2be8ee5
FR
1195 if (!sysrq_down) {
1196 sysrq_down = down;
1197 sysrq_alt_use = sysrq_alt;
1198 }
1da177e4
LT
1199 return;
1200 }
d2be8ee5
FR
1201 if (sysrq_down && !down && keycode == sysrq_alt_use)
1202 sysrq_down = 0;
1da177e4 1203 if (sysrq_down && down && !rep) {
7d12e780 1204 handle_sysrq(kbd_sysrq_xlate[keycode], tty);
1da177e4
LT
1205 return;
1206 }
1207#endif
0b57ee9e 1208#ifdef CONFIG_SPARC
1da177e4
LT
1209 if (keycode == KEY_A && sparc_l1_a_state) {
1210 sparc_l1_a_state = 0;
1211 sun_do_break();
1212 }
1213#endif
1214
1215 if (kbd->kbdmode == VC_MEDIUMRAW) {
1216 /*
1217 * This is extended medium raw mode, with keys above 127
1218 * encoded as 0, high 7 bits, low 7 bits, with the 0 bearing
1219 * the 'up' flag if needed. 0 is reserved, so this shouldn't
1220 * interfere with anything else. The two bytes after 0 will
1221 * always have the up flag set not to interfere with older
1222 * applications. This allows for 16384 different keycodes,
1223 * which should be enough.
1224 */
1225 if (keycode < 128) {
1226 put_queue(vc, keycode | (!down << 7));
1227 } else {
1228 put_queue(vc, !down << 7);
1229 put_queue(vc, (keycode >> 7) | 0x80);
1230 put_queue(vc, keycode | 0x80);
1231 }
1232 raw_mode = 1;
1233 }
1234
1235 if (down)
1236 set_bit(keycode, key_down);
1237 else
1238 clear_bit(keycode, key_down);
1239
fe1e8604
DT
1240 if (rep &&
1241 (!vc_kbd_mode(kbd, VC_REPEAT) ||
f34d7a5b 1242 (tty && !L_ECHO(tty) && tty_chars_in_buffer(tty)))) {
1da177e4
LT
1243 /*
1244 * Don't repeat a key if the input buffers are not empty and the
fe1e8604 1245 * characters get aren't echoed locally. This makes key repeat
1da177e4
LT
1246 * usable with slow applications and under heavy loads.
1247 */
1248 return;
1249 }
1250
41ab4396 1251 param.shift = shift_final = (shift_state | kbd->slockstate) ^ kbd->lockstate;
0beb4f6f 1252 param.ledstate = kbd->ledflagstate;
1da177e4
LT
1253 key_map = key_maps[shift_final];
1254
41ab4396
ST
1255 if (atomic_notifier_call_chain(&keyboard_notifier_list, KBD_KEYCODE, &param) == NOTIFY_STOP || !key_map) {
1256 atomic_notifier_call_chain(&keyboard_notifier_list, KBD_UNBOUND_KEYCODE, &param);
1da177e4
LT
1257 compute_shiftstate();
1258 kbd->slockstate = 0;
1259 return;
1260 }
1261
161c6091 1262 if (keycode >= NR_KEYS)
b9ec4e10 1263 if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8)
46a96546 1264 keysym = U(K(KT_BRL, keycode - KEY_BRL_DOT1 + 1));
b9ec4e10
ST
1265 else
1266 return;
1267 else
1268 keysym = key_map[keycode];
1da177e4 1269
1da177e4
LT
1270 type = KTYP(keysym);
1271
1272 if (type < 0xf0) {
41ab4396
ST
1273 param.value = keysym;
1274 if (atomic_notifier_call_chain(&keyboard_notifier_list, KBD_UNICODE, &param) == NOTIFY_STOP)
1275 return;
fe1e8604
DT
1276 if (down && !raw_mode)
1277 to_utf8(vc, keysym);
1da177e4
LT
1278 return;
1279 }
1280
1281 type -= 0xf0;
1282
1da177e4
LT
1283 if (type == KT_LETTER) {
1284 type = KT_LATIN;
1285 if (vc_kbd_led(kbd, VC_CAPSLOCK)) {
1286 key_map = key_maps[shift_final ^ (1 << KG_SHIFT)];
1287 if (key_map)
1288 keysym = key_map[keycode];
1289 }
1290 }
41ab4396
ST
1291 param.value = keysym;
1292
1293 if (atomic_notifier_call_chain(&keyboard_notifier_list, KBD_KEYSYM, &param) == NOTIFY_STOP)
1294 return;
1295
1296 if (raw_mode && type != KT_SPEC && type != KT_SHIFT)
1297 return;
1da177e4 1298
7d12e780 1299 (*k_handler[type])(vc, keysym & 0xff, !down);
1da177e4 1300
0beb4f6f 1301 param.ledstate = kbd->ledflagstate;
41ab4396
ST
1302 atomic_notifier_call_chain(&keyboard_notifier_list, KBD_POST_KEYSYM, &param);
1303
1da177e4
LT
1304 if (type != KT_SLOCK)
1305 kbd->slockstate = 0;
1306}
1307
fe1e8604 1308static void kbd_event(struct input_handle *handle, unsigned int event_type,
1da177e4
LT
1309 unsigned int event_code, int value)
1310{
21cea58e
DT
1311 /* We are called with interrupts disabled, just take the lock */
1312 spin_lock(&kbd_event_lock);
1313
1da177e4
LT
1314 if (event_type == EV_MSC && event_code == MSC_RAW && HW_RAW(handle->dev))
1315 kbd_rawcode(value);
1316 if (event_type == EV_KEY)
7d12e780 1317 kbd_keycode(event_code, value, HW_RAW(handle->dev));
21cea58e
DT
1318
1319 spin_unlock(&kbd_event_lock);
1320
1da177e4
LT
1321 tasklet_schedule(&keyboard_tasklet);
1322 do_poke_blanked_console = 1;
1323 schedule_console_callback();
1324}
1325
1da177e4
LT
1326/*
1327 * When a keyboard (or other input device) is found, the kbd_connect
1328 * function is called. The function then looks at the device, and if it
1329 * likes it, it can open it and get events from it. In this (kbd_connect)
1330 * function, we should decide which VT to bind that keyboard to initially.
1331 */
5b2a0826
DT
1332static int kbd_connect(struct input_handler *handler, struct input_dev *dev,
1333 const struct input_device_id *id)
1da177e4
LT
1334{
1335 struct input_handle *handle;
5b2a0826 1336 int error;
1da177e4
LT
1337 int i;
1338
1339 for (i = KEY_RESERVED; i < BTN_MISC; i++)
fe1e8604
DT
1340 if (test_bit(i, dev->keybit))
1341 break;
1da177e4 1342
fe1e8604 1343 if (i == BTN_MISC && !test_bit(EV_SND, dev->evbit))
5b2a0826 1344 return -ENODEV;
1da177e4 1345
22479e1c
DT
1346 handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
1347 if (!handle)
5b2a0826 1348 return -ENOMEM;
1da177e4
LT
1349
1350 handle->dev = dev;
1351 handle->handler = handler;
fe1e8604 1352 handle->name = "kbd";
1da177e4 1353
5b2a0826
DT
1354 error = input_register_handle(handle);
1355 if (error)
1356 goto err_free_handle;
1da177e4 1357
5b2a0826
DT
1358 error = input_open_device(handle);
1359 if (error)
1360 goto err_unregister_handle;
1361
1362 return 0;
1363
1364 err_unregister_handle:
1365 input_unregister_handle(handle);
1366 err_free_handle:
1367 kfree(handle);
1368 return error;
1da177e4
LT
1369}
1370
1371static void kbd_disconnect(struct input_handle *handle)
1372{
1373 input_close_device(handle);
5b2a0826 1374 input_unregister_handle(handle);
1da177e4
LT
1375 kfree(handle);
1376}
1377
c7e8dc6e
DT
1378/*
1379 * Start keyboard handler on the new keyboard by refreshing LED state to
1380 * match the rest of the system.
1381 */
1382static void kbd_start(struct input_handle *handle)
1383{
c7e8dc6e 1384 tasklet_disable(&keyboard_tasklet);
66d2a595
DT
1385
1386 if (ledstate != 0xff)
1387 kbd_update_leds_helper(handle, &ledstate);
1388
c7e8dc6e
DT
1389 tasklet_enable(&keyboard_tasklet);
1390}
1391
66e66118 1392static const struct input_device_id kbd_ids[] = {
1da177e4
LT
1393 {
1394 .flags = INPUT_DEVICE_ID_MATCH_EVBIT,
7b19ada2 1395 .evbit = { BIT_MASK(EV_KEY) },
1da177e4 1396 },
fe1e8604 1397
1da177e4
LT
1398 {
1399 .flags = INPUT_DEVICE_ID_MATCH_EVBIT,
7b19ada2 1400 .evbit = { BIT_MASK(EV_SND) },
fe1e8604 1401 },
1da177e4
LT
1402
1403 { }, /* Terminating entry */
1404};
1405
1406MODULE_DEVICE_TABLE(input, kbd_ids);
1407
1408static struct input_handler kbd_handler = {
1409 .event = kbd_event,
1410 .connect = kbd_connect,
1411 .disconnect = kbd_disconnect,
c7e8dc6e 1412 .start = kbd_start,
1da177e4
LT
1413 .name = "kbd",
1414 .id_table = kbd_ids,
1415};
1416
1417int __init kbd_init(void)
1418{
1419 int i;
4263cf0f 1420 int error;
1da177e4 1421
2b192908
DT
1422 for (i = 0; i < MAX_NR_CONSOLES; i++) {
1423 kbd_table[i].ledflagstate = KBD_DEFLEDS;
1424 kbd_table[i].default_ledflagstate = KBD_DEFLEDS;
1425 kbd_table[i].ledmode = LED_SHOW_FLAGS;
1426 kbd_table[i].lockstate = KBD_DEFLOCK;
1427 kbd_table[i].slockstate = 0;
1428 kbd_table[i].modeflags = KBD_DEFMODE;
2e8ecb9d 1429 kbd_table[i].kbdmode = default_utf8 ? VC_UNICODE : VC_XLATE;
2b192908 1430 }
1da177e4 1431
4263cf0f
DT
1432 error = input_register_handler(&kbd_handler);
1433 if (error)
1434 return error;
1da177e4
LT
1435
1436 tasklet_enable(&keyboard_tasklet);
1437 tasklet_schedule(&keyboard_tasklet);
1438
1439 return 0;
1440}