tty: Fix LED error return
[linux-flexiantxendom0-3.2.10.git] / drivers / tty / vt / keyboard.c
1 /*
2  * Written for linux by Johan Myreen as a translation from
3  * the assembly version by Linus (with diacriticals added)
4  *
5  * Some additional features added by Christoph Niemann (ChN), March 1993
6  *
7  * Loadable keymaps by Risto Kankkunen, May 1993
8  *
9  * Diacriticals redone & other small changes, aeb@cwi.nl, June 1993
10  * Added decr/incr_console, dynamic keymaps, Unicode support,
11  * dynamic function/string keys, led setting,  Sept 1994
12  * `Sticky' modifier keys, 951006.
13  *
14  * 11-11-96: SAK should now work in the raw mode (Martin Mares)
15  *
16  * Modified to provide 'generic' keyboard support by Hamish Macdonald
17  * Merge with the m68k keyboard driver and split-off of the PC low-level
18  * parts by Geert Uytterhoeven, May 1997
19  *
20  * 27-05-97: Added support for the Magic SysRq Key (Martin Mares)
21  * 30-07-98: Dead keys redone, aeb@cwi.nl.
22  * 21-08-02: Converted to input API, major cleanup. (Vojtech Pavlik)
23  */
24
25 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
26
27 #include <linux/consolemap.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/init.h>
35 #include <linux/slab.h>
36
37 #include <linux/kbd_kern.h>
38 #include <linux/kbd_diacr.h>
39 #include <linux/vt_kern.h>
40 #include <linux/input.h>
41 #include <linux/reboot.h>
42 #include <linux/notifier.h>
43 #include <linux/jiffies.h>
44 #include <linux/uaccess.h>
45
46 #include <asm/irq_regs.h>
47
48 extern void ctrl_alt_del(void);
49
50 /*
51  * Exported functions/variables
52  */
53
54 #define KBD_DEFMODE ((1 << VC_REPEAT) | (1 << VC_META))
55
56 /*
57  * Some laptops take the 789uiojklm,. keys as number pad when NumLock is on.
58  * This seems a good reason to start with NumLock off. On HIL keyboards
59  * of PARISC machines however there is no NumLock key and everyone expects the
60  * keypad to be used for numbers.
61  */
62
63 #if defined(CONFIG_PARISC) && (defined(CONFIG_KEYBOARD_HIL) || defined(CONFIG_KEYBOARD_HIL_OLD))
64 #define KBD_DEFLEDS (1 << VC_NUMLOCK)
65 #else
66 #define KBD_DEFLEDS 0
67 #endif
68
69 #define KBD_DEFLOCK 0
70
71 /*
72  * Handler Tables.
73  */
74
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_brl,          k_ignore
80
81 typedef void (k_handler_fn)(struct vc_data *vc, unsigned char value,
82                             char up_flag);
83 static k_handler_fn K_HANDLERS;
84 static k_handler_fn *k_handler[16] = { K_HANDLERS };
85
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
92
93 typedef void (fn_handler_fn)(struct vc_data *vc);
94 static fn_handler_fn FN_HANDLERS;
95 static fn_handler_fn *fn_handler[] = { FN_HANDLERS };
96
97 /*
98  * Variables exported for vt_ioctl.c
99  */
100
101 struct vt_spawn_console vt_spawn_con = {
102         .lock = __SPIN_LOCK_UNLOCKED(vt_spawn_con.lock),
103         .pid  = NULL,
104         .sig  = 0,
105 };
106
107
108 /*
109  * Internal Data.
110  */
111
112 static struct kbd_struct kbd_table[MAX_NR_CONSOLES];
113 static struct kbd_struct *kbd = kbd_table;
114
115 /* maximum values each key_handler can handle */
116 static const int max_vals[] = {
117         255, ARRAY_SIZE(func_table) - 1, ARRAY_SIZE(fn_handler) - 1, NR_PAD - 1,
118         NR_DEAD - 1, 255, 3, NR_SHIFT - 1, 255, NR_ASCII - 1, NR_LOCK - 1,
119         255, NR_LOCK - 1, 255, NR_BRL - 1
120 };
121
122 static const int NR_TYPES = ARRAY_SIZE(max_vals);
123
124 static struct input_handler kbd_handler;
125 static DEFINE_SPINLOCK(kbd_event_lock);
126 static unsigned long key_down[BITS_TO_LONGS(KEY_CNT)];  /* keyboard key bitmap */
127 static unsigned char shift_down[NR_SHIFT];              /* shift state counters.. */
128 static bool dead_key_next;
129 static int npadch = -1;                                 /* -1 or number assembled on pad */
130 static unsigned int diacr;
131 static char rep;                                        /* flag telling character repeat */
132
133 static int shift_state = 0;
134
135 static unsigned char ledstate = 0xff;                   /* undefined */
136 static unsigned char ledioctl;
137
138 static struct ledptr {
139         unsigned int *addr;
140         unsigned int mask;
141         unsigned char valid:1;
142 } ledptrs[3];
143
144 /*
145  * Notifier list for console keyboard events
146  */
147 static ATOMIC_NOTIFIER_HEAD(keyboard_notifier_list);
148
149 int register_keyboard_notifier(struct notifier_block *nb)
150 {
151         return atomic_notifier_chain_register(&keyboard_notifier_list, nb);
152 }
153 EXPORT_SYMBOL_GPL(register_keyboard_notifier);
154
155 int unregister_keyboard_notifier(struct notifier_block *nb)
156 {
157         return atomic_notifier_chain_unregister(&keyboard_notifier_list, nb);
158 }
159 EXPORT_SYMBOL_GPL(unregister_keyboard_notifier);
160
161 /*
162  * Translation of scancodes to keycodes. We set them on only the first
163  * keyboard in the list that accepts the scancode and keycode.
164  * Explanation for not choosing the first attached keyboard anymore:
165  *  USB keyboards for example have two event devices: one for all "normal"
166  *  keys and one for extra function keys (like "volume up", "make coffee",
167  *  etc.). So this means that scancodes for the extra function keys won't
168  *  be valid for the first event device, but will be for the second.
169  */
170
171 struct getset_keycode_data {
172         struct input_keymap_entry ke;
173         int error;
174 };
175
176 static int getkeycode_helper(struct input_handle *handle, void *data)
177 {
178         struct getset_keycode_data *d = data;
179
180         d->error = input_get_keycode(handle->dev, &d->ke);
181
182         return d->error == 0; /* stop as soon as we successfully get one */
183 }
184
185 static int getkeycode(unsigned int scancode)
186 {
187         struct getset_keycode_data d = {
188                 .ke     = {
189                         .flags          = 0,
190                         .len            = sizeof(scancode),
191                         .keycode        = 0,
192                 },
193                 .error  = -ENODEV,
194         };
195
196         memcpy(d.ke.scancode, &scancode, sizeof(scancode));
197
198         input_handler_for_each_handle(&kbd_handler, &d, getkeycode_helper);
199
200         return d.error ?: d.ke.keycode;
201 }
202
203 static int setkeycode_helper(struct input_handle *handle, void *data)
204 {
205         struct getset_keycode_data *d = data;
206
207         d->error = input_set_keycode(handle->dev, &d->ke);
208
209         return d->error == 0; /* stop as soon as we successfully set one */
210 }
211
212 static int setkeycode(unsigned int scancode, unsigned int keycode)
213 {
214         struct getset_keycode_data d = {
215                 .ke     = {
216                         .flags          = 0,
217                         .len            = sizeof(scancode),
218                         .keycode        = keycode,
219                 },
220                 .error  = -ENODEV,
221         };
222
223         memcpy(d.ke.scancode, &scancode, sizeof(scancode));
224
225         input_handler_for_each_handle(&kbd_handler, &d, setkeycode_helper);
226
227         return d.error;
228 }
229
230 /*
231  * Making beeps and bells. Note that we prefer beeps to bells, but when
232  * shutting the sound off we do both.
233  */
234
235 static int kd_sound_helper(struct input_handle *handle, void *data)
236 {
237         unsigned int *hz = data;
238         struct input_dev *dev = handle->dev;
239
240         if (test_bit(EV_SND, dev->evbit)) {
241                 if (test_bit(SND_TONE, dev->sndbit)) {
242                         input_inject_event(handle, EV_SND, SND_TONE, *hz);
243                         if (*hz)
244                                 return 0;
245                 }
246                 if (test_bit(SND_BELL, dev->sndbit))
247                         input_inject_event(handle, EV_SND, SND_BELL, *hz ? 1 : 0);
248         }
249
250         return 0;
251 }
252
253 static void kd_nosound(unsigned long ignored)
254 {
255         static unsigned int zero;
256
257         input_handler_for_each_handle(&kbd_handler, &zero, kd_sound_helper);
258 }
259
260 static DEFINE_TIMER(kd_mksound_timer, kd_nosound, 0, 0);
261
262 void kd_mksound(unsigned int hz, unsigned int ticks)
263 {
264         del_timer_sync(&kd_mksound_timer);
265
266         input_handler_for_each_handle(&kbd_handler, &hz, kd_sound_helper);
267
268         if (hz && ticks)
269                 mod_timer(&kd_mksound_timer, jiffies + ticks);
270 }
271 EXPORT_SYMBOL(kd_mksound);
272
273 /*
274  * Setting the keyboard rate.
275  */
276
277 static int kbd_rate_helper(struct input_handle *handle, void *data)
278 {
279         struct input_dev *dev = handle->dev;
280         struct kbd_repeat *rep = data;
281
282         if (test_bit(EV_REP, dev->evbit)) {
283
284                 if (rep[0].delay > 0)
285                         input_inject_event(handle,
286                                            EV_REP, REP_DELAY, rep[0].delay);
287                 if (rep[0].period > 0)
288                         input_inject_event(handle,
289                                            EV_REP, REP_PERIOD, rep[0].period);
290
291                 rep[1].delay = dev->rep[REP_DELAY];
292                 rep[1].period = dev->rep[REP_PERIOD];
293         }
294
295         return 0;
296 }
297
298 int kbd_rate(struct kbd_repeat *rep)
299 {
300         struct kbd_repeat data[2] = { *rep };
301
302         input_handler_for_each_handle(&kbd_handler, data, kbd_rate_helper);
303         *rep = data[1]; /* Copy currently used settings */
304
305         return 0;
306 }
307
308 /*
309  * Helper Functions.
310  */
311 static void put_queue(struct vc_data *vc, int ch)
312 {
313         struct tty_struct *tty = vc->port.tty;
314
315         if (tty) {
316                 tty_insert_flip_char(tty, ch, 0);
317                 con_schedule_flip(tty);
318         }
319 }
320
321 static void puts_queue(struct vc_data *vc, char *cp)
322 {
323         struct tty_struct *tty = vc->port.tty;
324
325         if (!tty)
326                 return;
327
328         while (*cp) {
329                 tty_insert_flip_char(tty, *cp, 0);
330                 cp++;
331         }
332         con_schedule_flip(tty);
333 }
334
335 static void applkey(struct vc_data *vc, int key, char mode)
336 {
337         static char buf[] = { 0x1b, 'O', 0x00, 0x00 };
338
339         buf[1] = (mode ? 'O' : '[');
340         buf[2] = key;
341         puts_queue(vc, buf);
342 }
343
344 /*
345  * Many other routines do put_queue, but I think either
346  * they produce ASCII, or they produce some user-assigned
347  * string, and in both cases we might assume that it is
348  * in utf-8 already.
349  */
350 static void to_utf8(struct vc_data *vc, uint c)
351 {
352         if (c < 0x80)
353                 /*  0******* */
354                 put_queue(vc, c);
355         else if (c < 0x800) {
356                 /* 110***** 10****** */
357                 put_queue(vc, 0xc0 | (c >> 6));
358                 put_queue(vc, 0x80 | (c & 0x3f));
359         } else if (c < 0x10000) {
360                 if (c >= 0xD800 && c < 0xE000)
361                         return;
362                 if (c == 0xFFFF)
363                         return;
364                 /* 1110**** 10****** 10****** */
365                 put_queue(vc, 0xe0 | (c >> 12));
366                 put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
367                 put_queue(vc, 0x80 | (c & 0x3f));
368         } else if (c < 0x110000) {
369                 /* 11110*** 10****** 10****** 10****** */
370                 put_queue(vc, 0xf0 | (c >> 18));
371                 put_queue(vc, 0x80 | ((c >> 12) & 0x3f));
372                 put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
373                 put_queue(vc, 0x80 | (c & 0x3f));
374         }
375 }
376
377 /*
378  * Called after returning from RAW mode or when changing consoles - recompute
379  * shift_down[] and shift_state from key_down[] maybe called when keymap is
380  * undefined, so that shiftkey release is seen. The caller must hold the
381  * kbd_event_lock.
382  */
383
384 static void do_compute_shiftstate(void)
385 {
386         unsigned int i, j, k, sym, val;
387
388         shift_state = 0;
389         memset(shift_down, 0, sizeof(shift_down));
390
391         for (i = 0; i < ARRAY_SIZE(key_down); i++) {
392
393                 if (!key_down[i])
394                         continue;
395
396                 k = i * BITS_PER_LONG;
397
398                 for (j = 0; j < BITS_PER_LONG; j++, k++) {
399
400                         if (!test_bit(k, key_down))
401                                 continue;
402
403                         sym = U(key_maps[0][k]);
404                         if (KTYP(sym) != KT_SHIFT && KTYP(sym) != KT_SLOCK)
405                                 continue;
406
407                         val = KVAL(sym);
408                         if (val == KVAL(K_CAPSSHIFT))
409                                 val = KVAL(K_SHIFT);
410
411                         shift_down[val]++;
412                         shift_state |= (1 << val);
413                 }
414         }
415 }
416
417 /* We still have to export this method to vt.c */
418 void compute_shiftstate(void)
419 {
420         unsigned long flags;
421         spin_lock_irqsave(&kbd_event_lock, flags);
422         do_compute_shiftstate();
423         spin_unlock_irqrestore(&kbd_event_lock, flags);
424 }
425
426 /*
427  * We have a combining character DIACR here, followed by the character CH.
428  * If the combination occurs in the table, return the corresponding value.
429  * Otherwise, if CH is a space or equals DIACR, return DIACR.
430  * Otherwise, conclude that DIACR was not combining after all,
431  * queue it and return CH.
432  */
433 static unsigned int handle_diacr(struct vc_data *vc, unsigned int ch)
434 {
435         unsigned int d = diacr;
436         unsigned int i;
437
438         diacr = 0;
439
440         if ((d & ~0xff) == BRL_UC_ROW) {
441                 if ((ch & ~0xff) == BRL_UC_ROW)
442                         return d | ch;
443         } else {
444                 for (i = 0; i < accent_table_size; i++)
445                         if (accent_table[i].diacr == d && accent_table[i].base == ch)
446                                 return accent_table[i].result;
447         }
448
449         if (ch == ' ' || ch == (BRL_UC_ROW|0) || ch == d)
450                 return d;
451
452         if (kbd->kbdmode == VC_UNICODE)
453                 to_utf8(vc, d);
454         else {
455                 int c = conv_uni_to_8bit(d);
456                 if (c != -1)
457                         put_queue(vc, c);
458         }
459
460         return ch;
461 }
462
463 /*
464  * Special function handlers
465  */
466 static void fn_enter(struct vc_data *vc)
467 {
468         if (diacr) {
469                 if (kbd->kbdmode == VC_UNICODE)
470                         to_utf8(vc, diacr);
471                 else {
472                         int c = conv_uni_to_8bit(diacr);
473                         if (c != -1)
474                                 put_queue(vc, c);
475                 }
476                 diacr = 0;
477         }
478
479         put_queue(vc, 13);
480         if (vc_kbd_mode(kbd, VC_CRLF))
481                 put_queue(vc, 10);
482 }
483
484 static void fn_caps_toggle(struct vc_data *vc)
485 {
486         if (rep)
487                 return;
488
489         chg_vc_kbd_led(kbd, VC_CAPSLOCK);
490 }
491
492 static void fn_caps_on(struct vc_data *vc)
493 {
494         if (rep)
495                 return;
496
497         set_vc_kbd_led(kbd, VC_CAPSLOCK);
498 }
499
500 static void fn_show_ptregs(struct vc_data *vc)
501 {
502         struct pt_regs *regs = get_irq_regs();
503
504         if (regs)
505                 show_regs(regs);
506 }
507
508 static void fn_hold(struct vc_data *vc)
509 {
510         struct tty_struct *tty = vc->port.tty;
511
512         if (rep || !tty)
513                 return;
514
515         /*
516          * Note: SCROLLOCK will be set (cleared) by stop_tty (start_tty);
517          * these routines are also activated by ^S/^Q.
518          * (And SCROLLOCK can also be set by the ioctl KDSKBLED.)
519          */
520         if (tty->stopped)
521                 start_tty(tty);
522         else
523                 stop_tty(tty);
524 }
525
526 static void fn_num(struct vc_data *vc)
527 {
528         if (vc_kbd_mode(kbd, VC_APPLIC))
529                 applkey(vc, 'P', 1);
530         else
531                 fn_bare_num(vc);
532 }
533
534 /*
535  * Bind this to Shift-NumLock if you work in application keypad mode
536  * but want to be able to change the NumLock flag.
537  * Bind this to NumLock if you prefer that the NumLock key always
538  * changes the NumLock flag.
539  */
540 static void fn_bare_num(struct vc_data *vc)
541 {
542         if (!rep)
543                 chg_vc_kbd_led(kbd, VC_NUMLOCK);
544 }
545
546 static void fn_lastcons(struct vc_data *vc)
547 {
548         /* switch to the last used console, ChN */
549         set_console(last_console);
550 }
551
552 static void fn_dec_console(struct vc_data *vc)
553 {
554         int i, cur = fg_console;
555
556         /* Currently switching?  Queue this next switch relative to that. */
557         if (want_console != -1)
558                 cur = want_console;
559
560         for (i = cur - 1; i != cur; i--) {
561                 if (i == -1)
562                         i = MAX_NR_CONSOLES - 1;
563                 if (vc_cons_allocated(i))
564                         break;
565         }
566         set_console(i);
567 }
568
569 static void fn_inc_console(struct vc_data *vc)
570 {
571         int i, cur = fg_console;
572
573         /* Currently switching?  Queue this next switch relative to that. */
574         if (want_console != -1)
575                 cur = want_console;
576
577         for (i = cur+1; i != cur; i++) {
578                 if (i == MAX_NR_CONSOLES)
579                         i = 0;
580                 if (vc_cons_allocated(i))
581                         break;
582         }
583         set_console(i);
584 }
585
586 static void fn_send_intr(struct vc_data *vc)
587 {
588         struct tty_struct *tty = vc->port.tty;
589
590         if (!tty)
591                 return;
592         tty_insert_flip_char(tty, 0, TTY_BREAK);
593         con_schedule_flip(tty);
594 }
595
596 static void fn_scroll_forw(struct vc_data *vc)
597 {
598         scrollfront(vc, 0);
599 }
600
601 static void fn_scroll_back(struct vc_data *vc)
602 {
603         scrollback(vc, 0);
604 }
605
606 static void fn_show_mem(struct vc_data *vc)
607 {
608         show_mem(0);
609 }
610
611 static void fn_show_state(struct vc_data *vc)
612 {
613         show_state();
614 }
615
616 static void fn_boot_it(struct vc_data *vc)
617 {
618         ctrl_alt_del();
619 }
620
621 static void fn_compose(struct vc_data *vc)
622 {
623         dead_key_next = true;
624 }
625
626 static void fn_spawn_con(struct vc_data *vc)
627 {
628         spin_lock(&vt_spawn_con.lock);
629         if (vt_spawn_con.pid)
630                 if (kill_pid(vt_spawn_con.pid, vt_spawn_con.sig, 1)) {
631                         put_pid(vt_spawn_con.pid);
632                         vt_spawn_con.pid = NULL;
633                 }
634         spin_unlock(&vt_spawn_con.lock);
635 }
636
637 static void fn_SAK(struct vc_data *vc)
638 {
639         struct work_struct *SAK_work = &vc_cons[fg_console].SAK_work;
640         schedule_work(SAK_work);
641 }
642
643 static void fn_null(struct vc_data *vc)
644 {
645         do_compute_shiftstate();
646 }
647
648 /*
649  * Special key handlers
650  */
651 static void k_ignore(struct vc_data *vc, unsigned char value, char up_flag)
652 {
653 }
654
655 static void k_spec(struct vc_data *vc, unsigned char value, char up_flag)
656 {
657         if (up_flag)
658                 return;
659         if (value >= ARRAY_SIZE(fn_handler))
660                 return;
661         if ((kbd->kbdmode == VC_RAW ||
662              kbd->kbdmode == VC_MEDIUMRAW ||
663              kbd->kbdmode == VC_OFF) &&
664              value != KVAL(K_SAK))
665                 return;         /* SAK is allowed even in raw mode */
666         fn_handler[value](vc);
667 }
668
669 static void k_lowercase(struct vc_data *vc, unsigned char value, char up_flag)
670 {
671         pr_err("k_lowercase was called - impossible\n");
672 }
673
674 static void k_unicode(struct vc_data *vc, unsigned int value, char up_flag)
675 {
676         if (up_flag)
677                 return;         /* no action, if this is a key release */
678
679         if (diacr)
680                 value = handle_diacr(vc, value);
681
682         if (dead_key_next) {
683                 dead_key_next = false;
684                 diacr = value;
685                 return;
686         }
687         if (kbd->kbdmode == VC_UNICODE)
688                 to_utf8(vc, value);
689         else {
690                 int c = conv_uni_to_8bit(value);
691                 if (c != -1)
692                         put_queue(vc, c);
693         }
694 }
695
696 /*
697  * Handle dead key. Note that we now may have several
698  * dead keys modifying the same character. Very useful
699  * for Vietnamese.
700  */
701 static void k_deadunicode(struct vc_data *vc, unsigned int value, char up_flag)
702 {
703         if (up_flag)
704                 return;
705
706         diacr = (diacr ? handle_diacr(vc, value) : value);
707 }
708
709 static void k_self(struct vc_data *vc, unsigned char value, char up_flag)
710 {
711         k_unicode(vc, conv_8bit_to_uni(value), up_flag);
712 }
713
714 static void k_dead2(struct vc_data *vc, unsigned char value, char up_flag)
715 {
716         k_deadunicode(vc, value, up_flag);
717 }
718
719 /*
720  * Obsolete - for backwards compatibility only
721  */
722 static void k_dead(struct vc_data *vc, unsigned char value, char up_flag)
723 {
724         static const unsigned char ret_diacr[NR_DEAD] = {'`', '\'', '^', '~', '"', ',' };
725
726         k_deadunicode(vc, ret_diacr[value], up_flag);
727 }
728
729 static void k_cons(struct vc_data *vc, unsigned char value, char up_flag)
730 {
731         if (up_flag)
732                 return;
733
734         set_console(value);
735 }
736
737 static void k_fn(struct vc_data *vc, unsigned char value, char up_flag)
738 {
739         if (up_flag)
740                 return;
741
742         if ((unsigned)value < ARRAY_SIZE(func_table)) {
743                 if (func_table[value])
744                         puts_queue(vc, func_table[value]);
745         } else
746                 pr_err("k_fn called with value=%d\n", value);
747 }
748
749 static void k_cur(struct vc_data *vc, unsigned char value, char up_flag)
750 {
751         static const char cur_chars[] = "BDCA";
752
753         if (up_flag)
754                 return;
755
756         applkey(vc, cur_chars[value], vc_kbd_mode(kbd, VC_CKMODE));
757 }
758
759 static void k_pad(struct vc_data *vc, unsigned char value, char up_flag)
760 {
761         static const char pad_chars[] = "0123456789+-*/\015,.?()#";
762         static const char app_map[] = "pqrstuvwxylSRQMnnmPQS";
763
764         if (up_flag)
765                 return;         /* no action, if this is a key release */
766
767         /* kludge... shift forces cursor/number keys */
768         if (vc_kbd_mode(kbd, VC_APPLIC) && !shift_down[KG_SHIFT]) {
769                 applkey(vc, app_map[value], 1);
770                 return;
771         }
772
773         if (!vc_kbd_led(kbd, VC_NUMLOCK)) {
774
775                 switch (value) {
776                 case KVAL(K_PCOMMA):
777                 case KVAL(K_PDOT):
778                         k_fn(vc, KVAL(K_REMOVE), 0);
779                         return;
780                 case KVAL(K_P0):
781                         k_fn(vc, KVAL(K_INSERT), 0);
782                         return;
783                 case KVAL(K_P1):
784                         k_fn(vc, KVAL(K_SELECT), 0);
785                         return;
786                 case KVAL(K_P2):
787                         k_cur(vc, KVAL(K_DOWN), 0);
788                         return;
789                 case KVAL(K_P3):
790                         k_fn(vc, KVAL(K_PGDN), 0);
791                         return;
792                 case KVAL(K_P4):
793                         k_cur(vc, KVAL(K_LEFT), 0);
794                         return;
795                 case KVAL(K_P6):
796                         k_cur(vc, KVAL(K_RIGHT), 0);
797                         return;
798                 case KVAL(K_P7):
799                         k_fn(vc, KVAL(K_FIND), 0);
800                         return;
801                 case KVAL(K_P8):
802                         k_cur(vc, KVAL(K_UP), 0);
803                         return;
804                 case KVAL(K_P9):
805                         k_fn(vc, KVAL(K_PGUP), 0);
806                         return;
807                 case KVAL(K_P5):
808                         applkey(vc, 'G', vc_kbd_mode(kbd, VC_APPLIC));
809                         return;
810                 }
811         }
812
813         put_queue(vc, pad_chars[value]);
814         if (value == KVAL(K_PENTER) && vc_kbd_mode(kbd, VC_CRLF))
815                 put_queue(vc, 10);
816 }
817
818 static void k_shift(struct vc_data *vc, unsigned char value, char up_flag)
819 {
820         int old_state = shift_state;
821
822         if (rep)
823                 return;
824         /*
825          * Mimic typewriter:
826          * a CapsShift key acts like Shift but undoes CapsLock
827          */
828         if (value == KVAL(K_CAPSSHIFT)) {
829                 value = KVAL(K_SHIFT);
830                 if (!up_flag)
831                         clr_vc_kbd_led(kbd, VC_CAPSLOCK);
832         }
833
834         if (up_flag) {
835                 /*
836                  * handle the case that two shift or control
837                  * keys are depressed simultaneously
838                  */
839                 if (shift_down[value])
840                         shift_down[value]--;
841         } else
842                 shift_down[value]++;
843
844         if (shift_down[value])
845                 shift_state |= (1 << value);
846         else
847                 shift_state &= ~(1 << value);
848
849         /* kludge */
850         if (up_flag && shift_state != old_state && npadch != -1) {
851                 if (kbd->kbdmode == VC_UNICODE)
852                         to_utf8(vc, npadch);
853                 else
854                         put_queue(vc, npadch & 0xff);
855                 npadch = -1;
856         }
857 }
858
859 static void k_meta(struct vc_data *vc, unsigned char value, char up_flag)
860 {
861         if (up_flag)
862                 return;
863
864         if (vc_kbd_mode(kbd, VC_META)) {
865                 put_queue(vc, '\033');
866                 put_queue(vc, value);
867         } else
868                 put_queue(vc, value | 0x80);
869 }
870
871 static void k_ascii(struct vc_data *vc, unsigned char value, char up_flag)
872 {
873         int base;
874
875         if (up_flag)
876                 return;
877
878         if (value < 10) {
879                 /* decimal input of code, while Alt depressed */
880                 base = 10;
881         } else {
882                 /* hexadecimal input of code, while AltGr depressed */
883                 value -= 10;
884                 base = 16;
885         }
886
887         if (npadch == -1)
888                 npadch = value;
889         else
890                 npadch = npadch * base + value;
891 }
892
893 static void k_lock(struct vc_data *vc, unsigned char value, char up_flag)
894 {
895         if (up_flag || rep)
896                 return;
897
898         chg_vc_kbd_lock(kbd, value);
899 }
900
901 static void k_slock(struct vc_data *vc, unsigned char value, char up_flag)
902 {
903         k_shift(vc, value, up_flag);
904         if (up_flag || rep)
905                 return;
906
907         chg_vc_kbd_slock(kbd, value);
908         /* try to make Alt, oops, AltGr and such work */
909         if (!key_maps[kbd->lockstate ^ kbd->slockstate]) {
910                 kbd->slockstate = 0;
911                 chg_vc_kbd_slock(kbd, value);
912         }
913 }
914
915 /* by default, 300ms interval for combination release */
916 static unsigned brl_timeout = 300;
917 MODULE_PARM_DESC(brl_timeout, "Braille keys release delay in ms (0 for commit on first key release)");
918 module_param(brl_timeout, uint, 0644);
919
920 static unsigned brl_nbchords = 1;
921 MODULE_PARM_DESC(brl_nbchords, "Number of chords that produce a braille pattern (0 for dead chords)");
922 module_param(brl_nbchords, uint, 0644);
923
924 static void k_brlcommit(struct vc_data *vc, unsigned int pattern, char up_flag)
925 {
926         static unsigned long chords;
927         static unsigned committed;
928
929         if (!brl_nbchords)
930                 k_deadunicode(vc, BRL_UC_ROW | pattern, up_flag);
931         else {
932                 committed |= pattern;
933                 chords++;
934                 if (chords == brl_nbchords) {
935                         k_unicode(vc, BRL_UC_ROW | committed, up_flag);
936                         chords = 0;
937                         committed = 0;
938                 }
939         }
940 }
941
942 static void k_brl(struct vc_data *vc, unsigned char value, char up_flag)
943 {
944         static unsigned pressed, committing;
945         static unsigned long releasestart;
946
947         if (kbd->kbdmode != VC_UNICODE) {
948                 if (!up_flag)
949                         pr_warning("keyboard mode must be unicode for braille patterns\n");
950                 return;
951         }
952
953         if (!value) {
954                 k_unicode(vc, BRL_UC_ROW, up_flag);
955                 return;
956         }
957
958         if (value > 8)
959                 return;
960
961         if (!up_flag) {
962                 pressed |= 1 << (value - 1);
963                 if (!brl_timeout)
964                         committing = pressed;
965         } else if (brl_timeout) {
966                 if (!committing ||
967                     time_after(jiffies,
968                                releasestart + msecs_to_jiffies(brl_timeout))) {
969                         committing = pressed;
970                         releasestart = jiffies;
971                 }
972                 pressed &= ~(1 << (value - 1));
973                 if (!pressed && committing) {
974                         k_brlcommit(vc, committing, 0);
975                         committing = 0;
976                 }
977         } else {
978                 if (committing) {
979                         k_brlcommit(vc, committing, 0);
980                         committing = 0;
981                 }
982                 pressed &= ~(1 << (value - 1));
983         }
984 }
985
986 /*
987  * The leds display either (i) the status of NumLock, CapsLock, ScrollLock,
988  * or (ii) whatever pattern of lights people want to show using KDSETLED,
989  * or (iii) specified bits of specified words in kernel memory.
990  */
991 unsigned char getledstate(void)
992 {
993         return ledstate;
994 }
995
996 void setledstate(struct kbd_struct *kbd, unsigned int led)
997 {
998         unsigned long flags;
999         spin_lock_irqsave(&kbd_event_lock, flags);
1000         if (!(led & ~7)) {
1001                 ledioctl = led;
1002                 kbd->ledmode = LED_SHOW_IOCTL;
1003         } else
1004                 kbd->ledmode = LED_SHOW_FLAGS;
1005
1006         set_leds();
1007         spin_unlock_irqrestore(&kbd_event_lock, flags);
1008 }
1009
1010 static inline unsigned char getleds(void)
1011 {
1012         struct kbd_struct *kbd = kbd_table + fg_console;
1013         unsigned char leds;
1014         int i;
1015
1016         if (kbd->ledmode == LED_SHOW_IOCTL)
1017                 return ledioctl;
1018
1019         leds = kbd->ledflagstate;
1020
1021         if (kbd->ledmode == LED_SHOW_MEM) {
1022                 for (i = 0; i < 3; i++)
1023                         if (ledptrs[i].valid) {
1024                                 if (*ledptrs[i].addr & ledptrs[i].mask)
1025                                         leds |= (1 << i);
1026                                 else
1027                                         leds &= ~(1 << i);
1028                         }
1029         }
1030         return leds;
1031 }
1032
1033 static int kbd_update_leds_helper(struct input_handle *handle, void *data)
1034 {
1035         unsigned char leds = *(unsigned char *)data;
1036
1037         if (test_bit(EV_LED, handle->dev->evbit)) {
1038                 input_inject_event(handle, EV_LED, LED_SCROLLL, !!(leds & 0x01));
1039                 input_inject_event(handle, EV_LED, LED_NUML,    !!(leds & 0x02));
1040                 input_inject_event(handle, EV_LED, LED_CAPSL,   !!(leds & 0x04));
1041                 input_inject_event(handle, EV_SYN, SYN_REPORT, 0);
1042         }
1043
1044         return 0;
1045 }
1046
1047 /**
1048  *      vt_get_leds     -       helper for braille console
1049  *      @console: console to read
1050  *      @flag: flag we want to check
1051  *
1052  *      Check the status of a keyboard led flag and report it back
1053  */
1054 int vt_get_leds(int console, int flag)
1055 {
1056         unsigned long flags;
1057         struct kbd_struct * kbd = kbd_table + console;
1058         int ret;
1059
1060         spin_lock_irqsave(&kbd_event_lock, flags);
1061         ret = vc_kbd_led(kbd, flag);
1062         spin_unlock_irqrestore(&kbd_event_lock, flags);
1063
1064         return ret;
1065 }
1066 EXPORT_SYMBOL_GPL(vt_get_leds);
1067
1068 /**
1069  *      vt_set_led_state        -       set LED state of a console
1070  *      @console: console to set
1071  *      @leds: LED bits
1072  *
1073  *      Set the LEDs on a console. This is a wrapper for the VT layer
1074  *      so that we can keep kbd knowledge internal
1075  */
1076 void vt_set_led_state(int console, int leds)
1077 {
1078         struct kbd_struct * kbd = kbd_table + console;
1079         setledstate(kbd, leds);
1080 }
1081
1082 /**
1083  *      vt_kbd_con_start        -       Keyboard side of console start
1084  *      @console: console
1085  *
1086  *      Handle console start. This is a wrapper for the VT layer
1087  *      so that we can keep kbd knowledge internal
1088  *
1089  *      FIXME: We eventually need to hold the kbd lock here to protect
1090  *      the LED updating. We can't do it yet because fn_hold calls stop_tty
1091  *      and start_tty under the kbd_event_lock, while normal tty paths
1092  *      don't hold the lock. We probably need to split out an LED lock
1093  *      but not during an -rc release!
1094  */
1095 void vt_kbd_con_start(int console)
1096 {
1097         struct kbd_struct * kbd = kbd_table + console;
1098 /*      unsigned long flags; */
1099 /*      spin_lock_irqsave(&kbd_event_lock, flags); */
1100         clr_vc_kbd_led(kbd, VC_SCROLLOCK);
1101         set_leds();
1102 /*      spin_unlock_irqrestore(&kbd_event_lock, flags); */
1103 }
1104
1105 /**
1106  *      vt_kbd_con_stop         -       Keyboard side of console stop
1107  *      @console: console
1108  *
1109  *      Handle console stop. This is a wrapper for the VT layer
1110  *      so that we can keep kbd knowledge internal
1111  *
1112  *      FIXME: We eventually need to hold the kbd lock here to protect
1113  *      the LED updating. We can't do it yet because fn_hold calls stop_tty
1114  *      and start_tty under the kbd_event_lock, while normal tty paths
1115  *      don't hold the lock. We probably need to split out an LED lock
1116  *      but not during an -rc release!
1117  */
1118 void vt_kbd_con_stop(int console)
1119 {
1120         struct kbd_struct * kbd = kbd_table + console;
1121 /*      unsigned long flags; */
1122 /*      spin_lock_irqsave(&kbd_event_lock, flags); */
1123         set_vc_kbd_led(kbd, VC_SCROLLOCK);
1124         set_leds();
1125 /*      spin_unlock_irqrestore(&kbd_event_lock, flags); */
1126 }
1127
1128 /*
1129  * This is the tasklet that updates LED state on all keyboards
1130  * attached to the box. The reason we use tasklet is that we
1131  * need to handle the scenario when keyboard handler is not
1132  * registered yet but we already getting updates from the VT to
1133  * update led state.
1134  */
1135 static void kbd_bh(unsigned long dummy)
1136 {
1137         unsigned char leds = getleds();
1138
1139         if (leds != ledstate) {
1140                 input_handler_for_each_handle(&kbd_handler, &leds,
1141                                               kbd_update_leds_helper);
1142                 ledstate = leds;
1143         }
1144 }
1145
1146 DECLARE_TASKLET_DISABLED(keyboard_tasklet, kbd_bh, 0);
1147
1148 #if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_ALPHA) ||\
1149     defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC) ||\
1150     defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) ||\
1151     (defined(CONFIG_ARM) && defined(CONFIG_KEYBOARD_ATKBD) && !defined(CONFIG_ARCH_RPC)) ||\
1152     defined(CONFIG_AVR32)
1153
1154 #define HW_RAW(dev) (test_bit(EV_MSC, dev->evbit) && test_bit(MSC_RAW, dev->mscbit) &&\
1155                         ((dev)->id.bustype == BUS_I8042) && ((dev)->id.vendor == 0x0001) && ((dev)->id.product == 0x0001))
1156
1157 static const unsigned short x86_keycodes[256] =
1158         { 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
1159          16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1160          32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1161          48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1162          64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
1163          80, 81, 82, 83, 84,118, 86, 87, 88,115,120,119,121,112,123, 92,
1164         284,285,309,  0,312, 91,327,328,329,331,333,335,336,337,338,339,
1165         367,288,302,304,350, 89,334,326,267,126,268,269,125,347,348,349,
1166         360,261,262,263,268,376,100,101,321,316,373,286,289,102,351,355,
1167         103,104,105,275,287,279,258,106,274,107,294,364,358,363,362,361,
1168         291,108,381,281,290,272,292,305,280, 99,112,257,306,359,113,114,
1169         264,117,271,374,379,265,266, 93, 94, 95, 85,259,375,260, 90,116,
1170         377,109,111,277,278,282,283,295,296,297,299,300,301,293,303,307,
1171         308,310,313,314,315,317,318,319,320,357,322,323,324,325,276,330,
1172         332,340,365,342,343,344,345,346,356,270,341,368,369,370,371,372 };
1173
1174 #ifdef CONFIG_SPARC
1175 static int sparc_l1_a_state;
1176 extern void sun_do_break(void);
1177 #endif
1178
1179 static int emulate_raw(struct vc_data *vc, unsigned int keycode,
1180                        unsigned char up_flag)
1181 {
1182         int code;
1183
1184         switch (keycode) {
1185
1186         case KEY_PAUSE:
1187                 put_queue(vc, 0xe1);
1188                 put_queue(vc, 0x1d | up_flag);
1189                 put_queue(vc, 0x45 | up_flag);
1190                 break;
1191
1192         case KEY_HANGEUL:
1193                 if (!up_flag)
1194                         put_queue(vc, 0xf2);
1195                 break;
1196
1197         case KEY_HANJA:
1198                 if (!up_flag)
1199                         put_queue(vc, 0xf1);
1200                 break;
1201
1202         case KEY_SYSRQ:
1203                 /*
1204                  * Real AT keyboards (that's what we're trying
1205                  * to emulate here emit 0xe0 0x2a 0xe0 0x37 when
1206                  * pressing PrtSc/SysRq alone, but simply 0x54
1207                  * when pressing Alt+PrtSc/SysRq.
1208                  */
1209                 if (test_bit(KEY_LEFTALT, key_down) ||
1210                     test_bit(KEY_RIGHTALT, key_down)) {
1211                         put_queue(vc, 0x54 | up_flag);
1212                 } else {
1213                         put_queue(vc, 0xe0);
1214                         put_queue(vc, 0x2a | up_flag);
1215                         put_queue(vc, 0xe0);
1216                         put_queue(vc, 0x37 | up_flag);
1217                 }
1218                 break;
1219
1220         default:
1221                 if (keycode > 255)
1222                         return -1;
1223
1224                 code = x86_keycodes[keycode];
1225                 if (!code)
1226                         return -1;
1227
1228                 if (code & 0x100)
1229                         put_queue(vc, 0xe0);
1230                 put_queue(vc, (code & 0x7f) | up_flag);
1231
1232                 break;
1233         }
1234
1235         return 0;
1236 }
1237
1238 #else
1239
1240 #define HW_RAW(dev)     0
1241
1242 static int emulate_raw(struct vc_data *vc, unsigned int keycode, unsigned char up_flag)
1243 {
1244         if (keycode > 127)
1245                 return -1;
1246
1247         put_queue(vc, keycode | up_flag);
1248         return 0;
1249 }
1250 #endif
1251
1252 static void kbd_rawcode(unsigned char data)
1253 {
1254         struct vc_data *vc = vc_cons[fg_console].d;
1255
1256         kbd = kbd_table + vc->vc_num;
1257         if (kbd->kbdmode == VC_RAW)
1258                 put_queue(vc, data);
1259 }
1260
1261 static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
1262 {
1263         struct vc_data *vc = vc_cons[fg_console].d;
1264         unsigned short keysym, *key_map;
1265         unsigned char type;
1266         bool raw_mode;
1267         struct tty_struct *tty;
1268         int shift_final;
1269         struct keyboard_notifier_param param = { .vc = vc, .value = keycode, .down = down };
1270         int rc;
1271
1272         tty = vc->port.tty;
1273
1274         if (tty && (!tty->driver_data)) {
1275                 /* No driver data? Strange. Okay we fix it then. */
1276                 tty->driver_data = vc;
1277         }
1278
1279         kbd = kbd_table + vc->vc_num;
1280
1281 #ifdef CONFIG_SPARC
1282         if (keycode == KEY_STOP)
1283                 sparc_l1_a_state = down;
1284 #endif
1285
1286         rep = (down == 2);
1287
1288         raw_mode = (kbd->kbdmode == VC_RAW);
1289         if (raw_mode && !hw_raw)
1290                 if (emulate_raw(vc, keycode, !down << 7))
1291                         if (keycode < BTN_MISC && printk_ratelimit())
1292                                 pr_warning("can't emulate rawmode for keycode %d\n",
1293                                            keycode);
1294
1295 #ifdef CONFIG_SPARC
1296         if (keycode == KEY_A && sparc_l1_a_state) {
1297                 sparc_l1_a_state = false;
1298                 sun_do_break();
1299         }
1300 #endif
1301
1302         if (kbd->kbdmode == VC_MEDIUMRAW) {
1303                 /*
1304                  * This is extended medium raw mode, with keys above 127
1305                  * encoded as 0, high 7 bits, low 7 bits, with the 0 bearing
1306                  * the 'up' flag if needed. 0 is reserved, so this shouldn't
1307                  * interfere with anything else. The two bytes after 0 will
1308                  * always have the up flag set not to interfere with older
1309                  * applications. This allows for 16384 different keycodes,
1310                  * which should be enough.
1311                  */
1312                 if (keycode < 128) {
1313                         put_queue(vc, keycode | (!down << 7));
1314                 } else {
1315                         put_queue(vc, !down << 7);
1316                         put_queue(vc, (keycode >> 7) | 0x80);
1317                         put_queue(vc, keycode | 0x80);
1318                 }
1319                 raw_mode = true;
1320         }
1321
1322         if (down)
1323                 set_bit(keycode, key_down);
1324         else
1325                 clear_bit(keycode, key_down);
1326
1327         if (rep &&
1328             (!vc_kbd_mode(kbd, VC_REPEAT) ||
1329              (tty && !L_ECHO(tty) && tty_chars_in_buffer(tty)))) {
1330                 /*
1331                  * Don't repeat a key if the input buffers are not empty and the
1332                  * characters get aren't echoed locally. This makes key repeat
1333                  * usable with slow applications and under heavy loads.
1334                  */
1335                 return;
1336         }
1337
1338         param.shift = shift_final = (shift_state | kbd->slockstate) ^ kbd->lockstate;
1339         param.ledstate = kbd->ledflagstate;
1340         key_map = key_maps[shift_final];
1341
1342         rc = atomic_notifier_call_chain(&keyboard_notifier_list,
1343                                         KBD_KEYCODE, &param);
1344         if (rc == NOTIFY_STOP || !key_map) {
1345                 atomic_notifier_call_chain(&keyboard_notifier_list,
1346                                            KBD_UNBOUND_KEYCODE, &param);
1347                 do_compute_shiftstate();
1348                 kbd->slockstate = 0;
1349                 return;
1350         }
1351
1352         if (keycode < NR_KEYS)
1353                 keysym = key_map[keycode];
1354         else if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8)
1355                 keysym = U(K(KT_BRL, keycode - KEY_BRL_DOT1 + 1));
1356         else
1357                 return;
1358
1359         type = KTYP(keysym);
1360
1361         if (type < 0xf0) {
1362                 param.value = keysym;
1363                 rc = atomic_notifier_call_chain(&keyboard_notifier_list,
1364                                                 KBD_UNICODE, &param);
1365                 if (rc != NOTIFY_STOP)
1366                         if (down && !raw_mode)
1367                                 to_utf8(vc, keysym);
1368                 return;
1369         }
1370
1371         type -= 0xf0;
1372
1373         if (type == KT_LETTER) {
1374                 type = KT_LATIN;
1375                 if (vc_kbd_led(kbd, VC_CAPSLOCK)) {
1376                         key_map = key_maps[shift_final ^ (1 << KG_SHIFT)];
1377                         if (key_map)
1378                                 keysym = key_map[keycode];
1379                 }
1380         }
1381
1382         param.value = keysym;
1383         rc = atomic_notifier_call_chain(&keyboard_notifier_list,
1384                                         KBD_KEYSYM, &param);
1385         if (rc == NOTIFY_STOP)
1386                 return;
1387
1388         if ((raw_mode || kbd->kbdmode == VC_OFF) && type != KT_SPEC && type != KT_SHIFT)
1389                 return;
1390
1391         (*k_handler[type])(vc, keysym & 0xff, !down);
1392
1393         param.ledstate = kbd->ledflagstate;
1394         atomic_notifier_call_chain(&keyboard_notifier_list, KBD_POST_KEYSYM, &param);
1395
1396         if (type != KT_SLOCK)
1397                 kbd->slockstate = 0;
1398 }
1399
1400 static void kbd_event(struct input_handle *handle, unsigned int event_type,
1401                       unsigned int event_code, int value)
1402 {
1403         /* We are called with interrupts disabled, just take the lock */
1404         spin_lock(&kbd_event_lock);
1405
1406         if (event_type == EV_MSC && event_code == MSC_RAW && HW_RAW(handle->dev))
1407                 kbd_rawcode(value);
1408         if (event_type == EV_KEY)
1409                 kbd_keycode(event_code, value, HW_RAW(handle->dev));
1410
1411         spin_unlock(&kbd_event_lock);
1412
1413         tasklet_schedule(&keyboard_tasklet);
1414         do_poke_blanked_console = 1;
1415         schedule_console_callback();
1416 }
1417
1418 static bool kbd_match(struct input_handler *handler, struct input_dev *dev)
1419 {
1420         int i;
1421
1422         if (test_bit(EV_SND, dev->evbit))
1423                 return true;
1424
1425         if (test_bit(EV_KEY, dev->evbit)) {
1426                 for (i = KEY_RESERVED; i < BTN_MISC; i++)
1427                         if (test_bit(i, dev->keybit))
1428                                 return true;
1429                 for (i = KEY_BRL_DOT1; i <= KEY_BRL_DOT10; i++)
1430                         if (test_bit(i, dev->keybit))
1431                                 return true;
1432         }
1433
1434         return false;
1435 }
1436
1437 /*
1438  * When a keyboard (or other input device) is found, the kbd_connect
1439  * function is called. The function then looks at the device, and if it
1440  * likes it, it can open it and get events from it. In this (kbd_connect)
1441  * function, we should decide which VT to bind that keyboard to initially.
1442  */
1443 static int kbd_connect(struct input_handler *handler, struct input_dev *dev,
1444                         const struct input_device_id *id)
1445 {
1446         struct input_handle *handle;
1447         int error;
1448
1449         handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
1450         if (!handle)
1451                 return -ENOMEM;
1452
1453         handle->dev = dev;
1454         handle->handler = handler;
1455         handle->name = "kbd";
1456
1457         error = input_register_handle(handle);
1458         if (error)
1459                 goto err_free_handle;
1460
1461         error = input_open_device(handle);
1462         if (error)
1463                 goto err_unregister_handle;
1464
1465         return 0;
1466
1467  err_unregister_handle:
1468         input_unregister_handle(handle);
1469  err_free_handle:
1470         kfree(handle);
1471         return error;
1472 }
1473
1474 static void kbd_disconnect(struct input_handle *handle)
1475 {
1476         input_close_device(handle);
1477         input_unregister_handle(handle);
1478         kfree(handle);
1479 }
1480
1481 /*
1482  * Start keyboard handler on the new keyboard by refreshing LED state to
1483  * match the rest of the system.
1484  */
1485 static void kbd_start(struct input_handle *handle)
1486 {
1487         tasklet_disable(&keyboard_tasklet);
1488
1489         if (ledstate != 0xff)
1490                 kbd_update_leds_helper(handle, &ledstate);
1491
1492         tasklet_enable(&keyboard_tasklet);
1493 }
1494
1495 static const struct input_device_id kbd_ids[] = {
1496         {
1497                 .flags = INPUT_DEVICE_ID_MATCH_EVBIT,
1498                 .evbit = { BIT_MASK(EV_KEY) },
1499         },
1500
1501         {
1502                 .flags = INPUT_DEVICE_ID_MATCH_EVBIT,
1503                 .evbit = { BIT_MASK(EV_SND) },
1504         },
1505
1506         { },    /* Terminating entry */
1507 };
1508
1509 MODULE_DEVICE_TABLE(input, kbd_ids);
1510
1511 static struct input_handler kbd_handler = {
1512         .event          = kbd_event,
1513         .match          = kbd_match,
1514         .connect        = kbd_connect,
1515         .disconnect     = kbd_disconnect,
1516         .start          = kbd_start,
1517         .name           = "kbd",
1518         .id_table       = kbd_ids,
1519 };
1520
1521 int __init kbd_init(void)
1522 {
1523         int i;
1524         int error;
1525
1526         for (i = 0; i < MAX_NR_CONSOLES; i++) {
1527                 kbd_table[i].ledflagstate = KBD_DEFLEDS;
1528                 kbd_table[i].default_ledflagstate = KBD_DEFLEDS;
1529                 kbd_table[i].ledmode = LED_SHOW_FLAGS;
1530                 kbd_table[i].lockstate = KBD_DEFLOCK;
1531                 kbd_table[i].slockstate = 0;
1532                 kbd_table[i].modeflags = KBD_DEFMODE;
1533                 kbd_table[i].kbdmode = default_utf8 ? VC_UNICODE : VC_XLATE;
1534         }
1535
1536         error = input_register_handler(&kbd_handler);
1537         if (error)
1538                 return error;
1539
1540         tasklet_enable(&keyboard_tasklet);
1541         tasklet_schedule(&keyboard_tasklet);
1542
1543         return 0;
1544 }
1545
1546 /* Ioctl support code */
1547
1548 /**
1549  *      vt_do_diacrit           -       diacritical table updates
1550  *      @cmd: ioctl request
1551  *      @up: pointer to user data for ioctl
1552  *      @perm: permissions check computed by caller
1553  *
1554  *      Update the diacritical tables atomically and safely. Lock them
1555  *      against simultaneous keypresses
1556  */
1557 int vt_do_diacrit(unsigned int cmd, void __user *up, int perm)
1558 {
1559         struct kbdiacrs __user *a = up;
1560         unsigned long flags;
1561         int asize;
1562         int ret = 0;
1563
1564         switch (cmd) {
1565         case KDGKBDIACR:
1566         {
1567                 struct kbdiacr *diacr;
1568                 int i;
1569
1570                 diacr = kmalloc(MAX_DIACR * sizeof(struct kbdiacr),
1571                                                                 GFP_KERNEL);
1572                 if (diacr == NULL)
1573                         return -ENOMEM;
1574
1575                 /* Lock the diacriticals table, make a copy and then
1576                    copy it after we unlock */
1577                 spin_lock_irqsave(&kbd_event_lock, flags);
1578
1579                 asize = accent_table_size;
1580                 for (i = 0; i < asize; i++) {
1581                         diacr[i].diacr = conv_uni_to_8bit(
1582                                                 accent_table[i].diacr);
1583                         diacr[i].base = conv_uni_to_8bit(
1584                                                 accent_table[i].base);
1585                         diacr[i].result = conv_uni_to_8bit(
1586                                                 accent_table[i].result);
1587                 }
1588                 spin_unlock_irqrestore(&kbd_event_lock, flags);
1589
1590                 if (put_user(asize, &a->kb_cnt))
1591                         ret = -EFAULT;
1592                 else  if (copy_to_user(a->kbdiacr, diacr,
1593                                 asize * sizeof(struct kbdiacr)))
1594                         ret = -EFAULT;
1595                 kfree(diacr);
1596                 return ret;
1597         }
1598         case KDGKBDIACRUC:
1599         {
1600                 struct kbdiacrsuc __user *a = up;
1601                 void *buf;
1602
1603                 buf = kmalloc(MAX_DIACR * sizeof(struct kbdiacruc),
1604                                                                 GFP_KERNEL);
1605                 if (buf == NULL)
1606                         return -ENOMEM;
1607
1608                 /* Lock the diacriticals table, make a copy and then
1609                    copy it after we unlock */
1610                 spin_lock_irqsave(&kbd_event_lock, flags);
1611
1612                 asize = accent_table_size;
1613                 memcpy(buf, accent_table, asize * sizeof(struct kbdiacruc));
1614
1615                 spin_unlock_irqrestore(&kbd_event_lock, flags);
1616
1617                 if (put_user(asize, &a->kb_cnt))
1618                         ret = -EFAULT;
1619                 else if (copy_to_user(a->kbdiacruc, buf,
1620                                 asize*sizeof(struct kbdiacruc)))
1621                         ret = -EFAULT;
1622                 kfree(buf);
1623                 return ret;
1624         }
1625
1626         case KDSKBDIACR:
1627         {
1628                 struct kbdiacrs __user *a = up;
1629                 struct kbdiacr *diacr = NULL;
1630                 unsigned int ct;
1631                 int i;
1632
1633                 if (!perm)
1634                         return -EPERM;
1635                 if (get_user(ct, &a->kb_cnt))
1636                         return -EFAULT;
1637                 if (ct >= MAX_DIACR)
1638                         return -EINVAL;
1639
1640                 if (ct) {
1641                         diacr = kmalloc(sizeof(struct kbdiacr) * ct,
1642                                                                 GFP_KERNEL);
1643                         if (diacr == NULL)
1644                                 return -ENOMEM;
1645
1646                         if (copy_from_user(diacr, a->kbdiacr,
1647                                         sizeof(struct kbdiacr) * ct)) {
1648                                 kfree(diacr);
1649                                 return -EFAULT;
1650                         }
1651                 }
1652
1653                 spin_lock_irqsave(&kbd_event_lock, flags);
1654                 accent_table_size = ct;
1655                 for (i = 0; i < ct; i++) {
1656                         accent_table[i].diacr =
1657                                         conv_8bit_to_uni(diacr[i].diacr);
1658                         accent_table[i].base =
1659                                         conv_8bit_to_uni(diacr[i].base);
1660                         accent_table[i].result =
1661                                         conv_8bit_to_uni(diacr[i].result);
1662                 }
1663                 spin_unlock_irqrestore(&kbd_event_lock, flags);
1664                 kfree(diacr);
1665                 return 0;
1666         }
1667
1668         case KDSKBDIACRUC:
1669         {
1670                 struct kbdiacrsuc __user *a = up;
1671                 unsigned int ct;
1672                 void *buf = NULL;
1673
1674                 if (!perm)
1675                         return -EPERM;
1676
1677                 if (get_user(ct, &a->kb_cnt))
1678                         return -EFAULT;
1679
1680                 if (ct >= MAX_DIACR)
1681                         return -EINVAL;
1682
1683                 if (ct) {
1684                         buf = kmalloc(ct * sizeof(struct kbdiacruc),
1685                                                                 GFP_KERNEL);
1686                         if (buf == NULL)
1687                                 return -ENOMEM;
1688
1689                         if (copy_from_user(buf, a->kbdiacruc,
1690                                         ct * sizeof(struct kbdiacruc))) {
1691                                 kfree(buf);
1692                                 return -EFAULT;
1693                         }
1694                 } 
1695                 spin_lock_irqsave(&kbd_event_lock, flags);
1696                 if (ct)
1697                         memcpy(accent_table, buf,
1698                                         ct * sizeof(struct kbdiacruc));
1699                 accent_table_size = ct;
1700                 spin_unlock_irqrestore(&kbd_event_lock, flags);
1701                 kfree(buf);
1702                 return 0;
1703         }
1704         }
1705         return ret;
1706 }
1707
1708 /**
1709  *      vt_do_kdskbmode         -       set keyboard mode ioctl
1710  *      @console: the console to use
1711  *      @arg: the requested mode
1712  *
1713  *      Update the keyboard mode bits while holding the correct locks.
1714  *      Return 0 for success or an error code.
1715  */
1716 int vt_do_kdskbmode(int console, unsigned int arg)
1717 {
1718         struct kbd_struct * kbd = kbd_table + console;
1719         int ret = 0;
1720         unsigned long flags;
1721
1722         spin_lock_irqsave(&kbd_event_lock, flags);
1723         switch(arg) {
1724         case K_RAW:
1725                 kbd->kbdmode = VC_RAW;
1726                 break;
1727         case K_MEDIUMRAW:
1728                 kbd->kbdmode = VC_MEDIUMRAW;
1729                 break;
1730         case K_XLATE:
1731                 kbd->kbdmode = VC_XLATE;
1732                 do_compute_shiftstate();
1733                 break;
1734         case K_UNICODE:
1735                 kbd->kbdmode = VC_UNICODE;
1736                 do_compute_shiftstate();
1737                 break;
1738         case K_OFF:
1739                 kbd->kbdmode = VC_OFF;
1740                 break;
1741         default:
1742                 ret = -EINVAL;
1743         }
1744         spin_unlock_irqrestore(&kbd_event_lock, flags);
1745         return ret;
1746 }
1747
1748 /**
1749  *      vt_do_kdskbmeta         -       set keyboard meta state
1750  *      @console: the console to use
1751  *      @arg: the requested meta state
1752  *
1753  *      Update the keyboard meta bits while holding the correct locks.
1754  *      Return 0 for success or an error code.
1755  */
1756 int vt_do_kdskbmeta(int console, unsigned int arg)
1757 {
1758         struct kbd_struct * kbd = kbd_table + console;
1759         int ret = 0;
1760         unsigned long flags;
1761
1762         spin_lock_irqsave(&kbd_event_lock, flags);
1763         switch(arg) {
1764         case K_METABIT:
1765                 clr_vc_kbd_mode(kbd, VC_META);
1766                 break;
1767         case K_ESCPREFIX:
1768                 set_vc_kbd_mode(kbd, VC_META);
1769                 break;
1770         default:
1771                 ret = -EINVAL;
1772         }
1773         spin_unlock_irqrestore(&kbd_event_lock, flags);
1774         return ret;
1775 }
1776
1777 int vt_do_kbkeycode_ioctl(int cmd, struct kbkeycode __user *user_kbkc,
1778                                                                 int perm)
1779 {
1780         struct kbkeycode tmp;
1781         int kc = 0;
1782
1783         if (copy_from_user(&tmp, user_kbkc, sizeof(struct kbkeycode)))
1784                 return -EFAULT;
1785         switch (cmd) {
1786         case KDGETKEYCODE:
1787                 kc = getkeycode(tmp.scancode);
1788                 if (kc >= 0)
1789                         kc = put_user(kc, &user_kbkc->keycode);
1790                 break;
1791         case KDSETKEYCODE:
1792                 if (!perm)
1793                         return -EPERM;
1794                 kc = setkeycode(tmp.scancode, tmp.keycode);
1795                 break;
1796         }
1797         return kc;
1798 }
1799
1800 #define i (tmp.kb_index)
1801 #define s (tmp.kb_table)
1802 #define v (tmp.kb_value)
1803
1804 int vt_do_kdsk_ioctl(int cmd, struct kbentry __user *user_kbe, int perm,
1805                                                 int console)
1806 {
1807         struct kbd_struct * kbd = kbd_table + console;
1808         struct kbentry tmp;
1809         ushort *key_map, *new_map, val, ov;
1810         unsigned long flags;
1811
1812         if (copy_from_user(&tmp, user_kbe, sizeof(struct kbentry)))
1813                 return -EFAULT;
1814
1815         if (!capable(CAP_SYS_TTY_CONFIG))
1816                 perm = 0;
1817
1818         switch (cmd) {
1819         case KDGKBENT:
1820                 /* Ensure another thread doesn't free it under us */
1821                 spin_lock_irqsave(&kbd_event_lock, flags);
1822                 key_map = key_maps[s];
1823                 if (key_map) {
1824                     val = U(key_map[i]);
1825                     if (kbd->kbdmode != VC_UNICODE && KTYP(val) >= NR_TYPES)
1826                         val = K_HOLE;
1827                 } else
1828                     val = (i ? K_HOLE : K_NOSUCHMAP);
1829                 spin_unlock_irqrestore(&kbd_event_lock, flags);
1830                 return put_user(val, &user_kbe->kb_value);
1831         case KDSKBENT:
1832                 if (!perm)
1833                         return -EPERM;
1834                 if (!i && v == K_NOSUCHMAP) {
1835                         spin_lock_irqsave(&kbd_event_lock, flags);
1836                         /* deallocate map */
1837                         key_map = key_maps[s];
1838                         if (s && key_map) {
1839                             key_maps[s] = NULL;
1840                             if (key_map[0] == U(K_ALLOCATED)) {
1841                                         kfree(key_map);
1842                                         keymap_count--;
1843                             }
1844                         }
1845                         spin_unlock_irqrestore(&kbd_event_lock, flags);
1846                         break;
1847                 }
1848
1849                 if (KTYP(v) < NR_TYPES) {
1850                     if (KVAL(v) > max_vals[KTYP(v)])
1851                                 return -EINVAL;
1852                 } else
1853                     if (kbd->kbdmode != VC_UNICODE)
1854                                 return -EINVAL;
1855
1856                 /* ++Geert: non-PC keyboards may generate keycode zero */
1857 #if !defined(__mc68000__) && !defined(__powerpc__)
1858                 /* assignment to entry 0 only tests validity of args */
1859                 if (!i)
1860                         break;
1861 #endif
1862
1863                 new_map = kmalloc(sizeof(plain_map), GFP_KERNEL);
1864                 if (!new_map)
1865                         return -ENOMEM;
1866                 spin_lock_irqsave(&kbd_event_lock, flags);
1867                 key_map = key_maps[s];
1868                 if (key_map == NULL) {
1869                         int j;
1870
1871                         if (keymap_count >= MAX_NR_OF_USER_KEYMAPS &&
1872                             !capable(CAP_SYS_RESOURCE)) {
1873                                 spin_unlock_irqrestore(&kbd_event_lock, flags);
1874                                 kfree(new_map);
1875                                 return -EPERM;
1876                         }
1877                         key_maps[s] = new_map;
1878                         key_map = new_map;
1879                         key_map[0] = U(K_ALLOCATED);
1880                         for (j = 1; j < NR_KEYS; j++)
1881                                 key_map[j] = U(K_HOLE);
1882                         keymap_count++;
1883                 } else
1884                         kfree(new_map);
1885
1886                 ov = U(key_map[i]);
1887                 if (v == ov)
1888                         goto out;
1889                 /*
1890                  * Attention Key.
1891                  */
1892                 if (((ov == K_SAK) || (v == K_SAK)) && !capable(CAP_SYS_ADMIN)) {
1893                         spin_unlock_irqrestore(&kbd_event_lock, flags);
1894                         return -EPERM;
1895                 }
1896                 key_map[i] = U(v);
1897                 if (!s && (KTYP(ov) == KT_SHIFT || KTYP(v) == KT_SHIFT))
1898                         do_compute_shiftstate();
1899 out:
1900                 spin_unlock_irqrestore(&kbd_event_lock, flags);
1901                 break;
1902         }
1903         return 0;
1904 }
1905 #undef i
1906 #undef s
1907 #undef v
1908
1909 /* FIXME: This one needs untangling and locking */
1910 int vt_do_kdgkb_ioctl(int cmd, struct kbsentry __user *user_kdgkb, int perm)
1911 {
1912         struct kbsentry *kbs;
1913         char *p;
1914         u_char *q;
1915         u_char __user *up;
1916         int sz;
1917         int delta;
1918         char *first_free, *fj, *fnw;
1919         int i, j, k;
1920         int ret;
1921
1922         if (!capable(CAP_SYS_TTY_CONFIG))
1923                 perm = 0;
1924
1925         kbs = kmalloc(sizeof(*kbs), GFP_KERNEL);
1926         if (!kbs) {
1927                 ret = -ENOMEM;
1928                 goto reterr;
1929         }
1930
1931         /* we mostly copy too much here (512bytes), but who cares ;) */
1932         if (copy_from_user(kbs, user_kdgkb, sizeof(struct kbsentry))) {
1933                 ret = -EFAULT;
1934                 goto reterr;
1935         }
1936         kbs->kb_string[sizeof(kbs->kb_string)-1] = '\0';
1937         i = kbs->kb_func;
1938
1939         switch (cmd) {
1940         case KDGKBSENT:
1941                 sz = sizeof(kbs->kb_string) - 1; /* sz should have been
1942                                                   a struct member */
1943                 up = user_kdgkb->kb_string;
1944                 p = func_table[i];
1945                 if(p)
1946                         for ( ; *p && sz; p++, sz--)
1947                                 if (put_user(*p, up++)) {
1948                                         ret = -EFAULT;
1949                                         goto reterr;
1950                                 }
1951                 if (put_user('\0', up)) {
1952                         ret = -EFAULT;
1953                         goto reterr;
1954                 }
1955                 kfree(kbs);
1956                 return ((p && *p) ? -EOVERFLOW : 0);
1957         case KDSKBSENT:
1958                 if (!perm) {
1959                         ret = -EPERM;
1960                         goto reterr;
1961                 }
1962
1963                 q = func_table[i];
1964                 first_free = funcbufptr + (funcbufsize - funcbufleft);
1965                 for (j = i+1; j < MAX_NR_FUNC && !func_table[j]; j++)
1966                         ;
1967                 if (j < MAX_NR_FUNC)
1968                         fj = func_table[j];
1969                 else
1970                         fj = first_free;
1971
1972                 delta = (q ? -strlen(q) : 1) + strlen(kbs->kb_string);
1973                 if (delta <= funcbufleft) {     /* it fits in current buf */
1974                     if (j < MAX_NR_FUNC) {
1975                         memmove(fj + delta, fj, first_free - fj);
1976                         for (k = j; k < MAX_NR_FUNC; k++)
1977                             if (func_table[k])
1978                                 func_table[k] += delta;
1979                     }
1980                     if (!q)
1981                       func_table[i] = fj;
1982                     funcbufleft -= delta;
1983                 } else {                        /* allocate a larger buffer */
1984                     sz = 256;
1985                     while (sz < funcbufsize - funcbufleft + delta)
1986                       sz <<= 1;
1987                     fnw = kmalloc(sz, GFP_KERNEL);
1988                     if(!fnw) {
1989                       ret = -ENOMEM;
1990                       goto reterr;
1991                     }
1992
1993                     if (!q)
1994                       func_table[i] = fj;
1995                     if (fj > funcbufptr)
1996                         memmove(fnw, funcbufptr, fj - funcbufptr);
1997                     for (k = 0; k < j; k++)
1998                       if (func_table[k])
1999                         func_table[k] = fnw + (func_table[k] - funcbufptr);
2000
2001                     if (first_free > fj) {
2002                         memmove(fnw + (fj - funcbufptr) + delta, fj, first_free - fj);
2003                         for (k = j; k < MAX_NR_FUNC; k++)
2004                           if (func_table[k])
2005                             func_table[k] = fnw + (func_table[k] - funcbufptr) + delta;
2006                     }
2007                     if (funcbufptr != func_buf)
2008                       kfree(funcbufptr);
2009                     funcbufptr = fnw;
2010                     funcbufleft = funcbufleft - delta + sz - funcbufsize;
2011                     funcbufsize = sz;
2012                 }
2013                 strcpy(func_table[i], kbs->kb_string);
2014                 break;
2015         }
2016         ret = 0;
2017 reterr:
2018         kfree(kbs);
2019         return ret;
2020 }
2021
2022 int vt_do_kdskled(int console, int cmd, unsigned long arg, int perm)
2023 {
2024         struct kbd_struct * kbd = kbd_table + console;
2025         unsigned long flags;
2026         unsigned char ucval;
2027
2028         switch(cmd) {
2029         /* the ioctls below read/set the flags usually shown in the leds */
2030         /* don't use them - they will go away without warning */
2031         case KDGKBLED:
2032                 spin_lock_irqsave(&kbd_event_lock, flags);
2033                 ucval = kbd->ledflagstate | (kbd->default_ledflagstate << 4);
2034                 spin_unlock_irqrestore(&kbd_event_lock, flags);
2035                 return put_user(ucval, (char __user *)arg);
2036
2037         case KDSKBLED:
2038                 if (!perm)
2039                         return -EPERM;
2040                 if (arg & ~0x77)
2041                         return -EINVAL;
2042                 spin_lock_irqsave(&kbd_event_lock, flags);
2043                 kbd->ledflagstate = (arg & 7);
2044                 kbd->default_ledflagstate = ((arg >> 4) & 7);
2045                 set_leds();
2046                 spin_unlock_irqrestore(&kbd_event_lock, flags);
2047                 return 0;
2048
2049         /* the ioctls below only set the lights, not the functions */
2050         /* for those, see KDGKBLED and KDSKBLED above */
2051         case KDGETLED:
2052                 ucval = getledstate();
2053                 return put_user(ucval, (char __user *)arg);
2054
2055         case KDSETLED:
2056                 if (!perm)
2057                         return -EPERM;
2058                 setledstate(kbd, arg);
2059                 return 0;
2060         }
2061         return -ENOIOCTLCMD;
2062 }
2063
2064 int vt_do_kdgkbmode(int console)
2065 {
2066         struct kbd_struct * kbd = kbd_table + console;
2067         /* This is a spot read so needs no locking */
2068         switch (kbd->kbdmode) {
2069         case VC_RAW:
2070                 return K_RAW;
2071         case VC_MEDIUMRAW:
2072                 return K_MEDIUMRAW;
2073         case VC_UNICODE:
2074                 return K_UNICODE;
2075         case VC_OFF:
2076                 return K_OFF;
2077         default:
2078                 return K_XLATE;
2079         }
2080 }
2081
2082 /**
2083  *      vt_do_kdgkbmeta         -       report meta status
2084  *      @console: console to report
2085  *
2086  *      Report the meta flag status of this console
2087  */
2088 int vt_do_kdgkbmeta(int console)
2089 {
2090         struct kbd_struct * kbd = kbd_table + console;
2091         /* Again a spot read so no locking */
2092         return vc_kbd_mode(kbd, VC_META) ? K_ESCPREFIX : K_METABIT;
2093 }
2094
2095 /**
2096  *      vt_reset_unicode        -       reset the unicode status
2097  *      @console: console being reset
2098  *
2099  *      Restore the unicode console state to its default
2100  */
2101 void vt_reset_unicode(int console)
2102 {
2103         unsigned long flags;
2104
2105         spin_lock_irqsave(&kbd_event_lock, flags);
2106         kbd_table[console].kbdmode = default_utf8 ? VC_UNICODE : VC_XLATE;
2107         spin_unlock_irqrestore(&kbd_event_lock, flags);
2108 }
2109
2110 /**
2111  *      vt_get_shiftstate       -       shift bit state
2112  *
2113  *      Report the shift bits from the keyboard state. We have to export
2114  *      this to support some oddities in the vt layer.
2115  */
2116 int vt_get_shift_state(void)
2117 {
2118         /* Don't lock as this is a transient report */
2119         return shift_state;
2120 }
2121
2122 /**
2123  *      vt_reset_keyboard       -       reset keyboard state
2124  *      @console: console to reset
2125  *
2126  *      Reset the keyboard bits for a console as part of a general console
2127  *      reset event
2128  */
2129 void vt_reset_keyboard(int console)
2130 {
2131         struct kbd_struct * kbd = kbd_table + console;
2132         unsigned long flags;
2133
2134         spin_lock_irqsave(&kbd_event_lock, flags);
2135         set_vc_kbd_mode(kbd, VC_REPEAT);
2136         clr_vc_kbd_mode(kbd, VC_CKMODE);
2137         clr_vc_kbd_mode(kbd, VC_APPLIC);
2138         clr_vc_kbd_mode(kbd, VC_CRLF);
2139         kbd->lockstate = 0;
2140         kbd->slockstate = 0;
2141         kbd->ledmode = LED_SHOW_FLAGS;
2142         kbd->ledflagstate = kbd->default_ledflagstate;
2143         /* do not do set_leds here because this causes an endless tasklet loop
2144            when the keyboard hasn't been initialized yet */
2145         spin_unlock_irqrestore(&kbd_event_lock, flags);
2146 }
2147
2148 /**
2149  *      vt_get_kbd_mode_bit     -       read keyboard status bits
2150  *      @console: console to read from
2151  *      @bit: mode bit to read
2152  *
2153  *      Report back a vt mode bit. We do this without locking so the
2154  *      caller must be sure that there are no synchronization needs
2155  */
2156
2157 int vt_get_kbd_mode_bit(int console, int bit)
2158 {
2159         struct kbd_struct * kbd = kbd_table + console;
2160         return vc_kbd_mode(kbd, bit);
2161 }
2162
2163 /**
2164  *      vt_set_kbd_mode_bit     -       read keyboard status bits
2165  *      @console: console to read from
2166  *      @bit: mode bit to read
2167  *
2168  *      Set a vt mode bit. We do this without locking so the
2169  *      caller must be sure that there are no synchronization needs
2170  */
2171
2172 void vt_set_kbd_mode_bit(int console, int bit)
2173 {
2174         struct kbd_struct * kbd = kbd_table + console;
2175         unsigned long flags;
2176
2177         spin_lock_irqsave(&kbd_event_lock, flags);
2178         set_vc_kbd_mode(kbd, bit);
2179         spin_unlock_irqrestore(&kbd_event_lock, flags);
2180 }
2181
2182 /**
2183  *      vt_clr_kbd_mode_bit     -       read keyboard status bits
2184  *      @console: console to read from
2185  *      @bit: mode bit to read
2186  *
2187  *      Report back a vt mode bit. We do this without locking so the
2188  *      caller must be sure that there are no synchronization needs
2189  */
2190
2191 void vt_clr_kbd_mode_bit(int console, int bit)
2192 {
2193         struct kbd_struct * kbd = kbd_table + console;
2194         unsigned long flags;
2195
2196         spin_lock_irqsave(&kbd_event_lock, flags);
2197         clr_vc_kbd_mode(kbd, bit);
2198         spin_unlock_irqrestore(&kbd_event_lock, flags);
2199 }