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