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