Version:  2.0.40 2.2.26 2.4.37 3.6 3.7 3.8 3.9 3.10 3.11 3.12 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2

Linux/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 unsigned long key_down[BITS_TO_LONGS(KEY_CNT)];  /* keyboard key bitmap */
125 static unsigned char shift_down[NR_SHIFT];              /* shift state counters.. */
126 static bool dead_key_next;
127 static int npadch = -1;                                 /* -1 or number assembled on pad */
128 static unsigned int diacr;
129 static char rep;                                        /* flag telling character repeat */
130 
131 static int shift_state = 0;
132 
133 static unsigned int ledstate = -1U;                     /* undefined */
134 static unsigned char ledioctl;
135 
136 /*
137  * Notifier list for console keyboard events
138  */
139 static ATOMIC_NOTIFIER_HEAD(keyboard_notifier_list);
140 
141 int register_keyboard_notifier(struct notifier_block *nb)
142 {
143         return atomic_notifier_chain_register(&keyboard_notifier_list, nb);
144 }
145 EXPORT_SYMBOL_GPL(register_keyboard_notifier);
146 
147 int unregister_keyboard_notifier(struct notifier_block *nb)
148 {
149         return atomic_notifier_chain_unregister(&keyboard_notifier_list, nb);
150 }
151 EXPORT_SYMBOL_GPL(unregister_keyboard_notifier);
152 
153 /*
154  * Translation of scancodes to keycodes. We set them on only the first
155  * keyboard in the list that accepts the scancode and keycode.
156  * Explanation for not choosing the first attached keyboard anymore:
157  *  USB keyboards for example have two event devices: one for all "normal"
158  *  keys and one for extra function keys (like "volume up", "make coffee",
159  *  etc.). So this means that scancodes for the extra function keys won't
160  *  be valid for the first event device, but will be for the second.
161  */
162 
163 struct getset_keycode_data {
164         struct input_keymap_entry ke;
165         int error;
166 };
167 
168 static int getkeycode_helper(struct input_handle *handle, void *data)
169 {
170         struct getset_keycode_data *d = data;
171 
172         d->error = input_get_keycode(handle->dev, &d->ke);
173 
174         return d->error == 0; /* stop as soon as we successfully get one */
175 }
176 
177 static int getkeycode(unsigned int scancode)
178 {
179         struct getset_keycode_data d = {
180                 .ke     = {
181                         .flags          = 0,
182                         .len            = sizeof(scancode),
183                         .keycode        = 0,
184                 },
185                 .error  = -ENODEV,
186         };
187 
188         memcpy(d.ke.scancode, &scancode, sizeof(scancode));
189 
190         input_handler_for_each_handle(&kbd_handler, &d, getkeycode_helper);
191 
192         return d.error ?: d.ke.keycode;
193 }
194 
195 static int setkeycode_helper(struct input_handle *handle, void *data)
196 {
197         struct getset_keycode_data *d = data;
198 
199         d->error = input_set_keycode(handle->dev, &d->ke);
200 
201         return d->error == 0; /* stop as soon as we successfully set one */
202 }
203 
204 static int setkeycode(unsigned int scancode, unsigned int keycode)
205 {
206         struct getset_keycode_data d = {
207                 .ke     = {
208                         .flags          = 0,
209                         .len            = sizeof(scancode),
210                         .keycode        = keycode,
211                 },
212                 .error  = -ENODEV,
213         };
214 
215         memcpy(d.ke.scancode, &scancode, sizeof(scancode));
216 
217         input_handler_for_each_handle(&kbd_handler, &d, setkeycode_helper);
218 
219         return d.error;
220 }
221 
222 /*
223  * Making beeps and bells. Note that we prefer beeps to bells, but when
224  * shutting the sound off we do both.
225  */
226 
227 static int kd_sound_helper(struct input_handle *handle, void *data)
228 {
229         unsigned int *hz = data;
230         struct input_dev *dev = handle->dev;
231 
232         if (test_bit(EV_SND, dev->evbit)) {
233                 if (test_bit(SND_TONE, dev->sndbit)) {
234                         input_inject_event(handle, EV_SND, SND_TONE, *hz);
235                         if (*hz)
236                                 return 0;
237                 }
238                 if (test_bit(SND_BELL, dev->sndbit))
239                         input_inject_event(handle, EV_SND, SND_BELL, *hz ? 1 : 0);
240         }
241 
242         return 0;
243 }
244 
245 static void kd_nosound(unsigned long ignored)
246 {
247         static unsigned int zero;
248 
249         input_handler_for_each_handle(&kbd_handler, &zero, kd_sound_helper);
250 }
251 
252 static DEFINE_TIMER(kd_mksound_timer, kd_nosound, 0, 0);
253 
254 void kd_mksound(unsigned int hz, unsigned int ticks)
255 {
256         del_timer_sync(&kd_mksound_timer);
257 
258         input_handler_for_each_handle(&kbd_handler, &hz, kd_sound_helper);
259 
260         if (hz && ticks)
261                 mod_timer(&kd_mksound_timer, jiffies + ticks);
262 }
263 EXPORT_SYMBOL(kd_mksound);
264 
265 /*
266  * Setting the keyboard rate.
267  */
268 
269 static int kbd_rate_helper(struct input_handle *handle, void *data)
270 {
271         struct input_dev *dev = handle->dev;
272         struct kbd_repeat *rpt = data;
273 
274         if (test_bit(EV_REP, dev->evbit)) {
275 
276                 if (rpt[0].delay > 0)
277                         input_inject_event(handle,
278                                            EV_REP, REP_DELAY, rpt[0].delay);
279                 if (rpt[0].period > 0)
280                         input_inject_event(handle,
281                                            EV_REP, REP_PERIOD, rpt[0].period);
282 
283                 rpt[1].delay = dev->rep[REP_DELAY];
284                 rpt[1].period = dev->rep[REP_PERIOD];
285         }
286 
287         return 0;
288 }
289 
290 int kbd_rate(struct kbd_repeat *rpt)
291 {
292         struct kbd_repeat data[2] = { *rpt };
293 
294         input_handler_for_each_handle(&kbd_handler, data, kbd_rate_helper);
295         *rpt = data[1]; /* Copy currently used settings */
296 
297         return 0;
298 }
299 
300 /*
301  * Helper Functions.
302  */
303 static void put_queue(struct vc_data *vc, int ch)
304 {
305         tty_insert_flip_char(&vc->port, ch, 0);
306         tty_schedule_flip(&vc->port);
307 }
308 
309 static void puts_queue(struct vc_data *vc, char *cp)
310 {
311         while (*cp) {
312                 tty_insert_flip_char(&vc->port, *cp, 0);
313                 cp++;
314         }
315         tty_schedule_flip(&vc->port);
316 }
317 
318 static void applkey(struct vc_data *vc, int key, char mode)
319 {
320         static char buf[] = { 0x1b, 'O', 0x00, 0x00 };
321 
322         buf[1] = (mode ? 'O' : '[');
323         buf[2] = key;
324         puts_queue(vc, buf);
325 }
326 
327 /*
328  * Many other routines do put_queue, but I think either
329  * they produce ASCII, or they produce some user-assigned
330  * string, and in both cases we might assume that it is
331  * in utf-8 already.
332  */
333 static void to_utf8(struct vc_data *vc, uint c)
334 {
335         if (c < 0x80)
336                 /*  0******* */
337                 put_queue(vc, c);
338         else if (c < 0x800) {
339                 /* 110***** 10****** */
340                 put_queue(vc, 0xc0 | (c >> 6));
341                 put_queue(vc, 0x80 | (c & 0x3f));
342         } else if (c < 0x10000) {
343                 if (c >= 0xD800 && c < 0xE000)
344                         return;
345                 if (c == 0xFFFF)
346                         return;
347                 /* 1110**** 10****** 10****** */
348                 put_queue(vc, 0xe0 | (c >> 12));
349                 put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
350                 put_queue(vc, 0x80 | (c & 0x3f));
351         } else if (c < 0x110000) {
352                 /* 11110*** 10****** 10****** 10****** */
353                 put_queue(vc, 0xf0 | (c >> 18));
354                 put_queue(vc, 0x80 | ((c >> 12) & 0x3f));
355                 put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
356                 put_queue(vc, 0x80 | (c & 0x3f));
357         }
358 }
359 
360 /*
361  * Called after returning from RAW mode or when changing consoles - recompute
362  * shift_down[] and shift_state from key_down[] maybe called when keymap is
363  * undefined, so that shiftkey release is seen. The caller must hold the
364  * kbd_event_lock.
365  */
366 
367 static void do_compute_shiftstate(void)
368 {
369         unsigned int i, j, k, sym, val;
370 
371         shift_state = 0;
372         memset(shift_down, 0, sizeof(shift_down));
373 
374         for (i = 0; i < ARRAY_SIZE(key_down); i++) {
375 
376                 if (!key_down[i])
377                         continue;
378 
379                 k = i * BITS_PER_LONG;
380 
381                 for (j = 0; j < BITS_PER_LONG; j++, k++) {
382 
383                         if (!test_bit(k, key_down))
384                                 continue;
385 
386                         sym = U(key_maps[0][k]);
387                         if (KTYP(sym) != KT_SHIFT && KTYP(sym) != KT_SLOCK)
388                                 continue;
389 
390                         val = KVAL(sym);
391                         if (val == KVAL(K_CAPSSHIFT))
392                                 val = KVAL(K_SHIFT);
393 
394                         shift_down[val]++;
395                         shift_state |= (1 << val);
396                 }
397         }
398 }
399 
400 /* We still have to export this method to vt.c */
401 void compute_shiftstate(void)
402 {
403         unsigned long flags;
404         spin_lock_irqsave(&kbd_event_lock, flags);
405         do_compute_shiftstate();
406         spin_unlock_irqrestore(&kbd_event_lock, flags);
407 }
408 
409 /*
410  * We have a combining character DIACR here, followed by the character CH.
411  * If the combination occurs in the table, return the corresponding value.
412  * Otherwise, if CH is a space or equals DIACR, return DIACR.
413  * Otherwise, conclude that DIACR was not combining after all,
414  * queue it and return CH.
415  */
416 static unsigned int handle_diacr(struct vc_data *vc, unsigned int ch)
417 {
418         unsigned int d = diacr;
419         unsigned int i;
420 
421         diacr = 0;
422 
423         if ((d & ~0xff) == BRL_UC_ROW) {
424                 if ((ch & ~0xff) == BRL_UC_ROW)
425                         return d | ch;
426         } else {
427                 for (i = 0; i < accent_table_size; i++)
428                         if (accent_table[i].diacr == d && accent_table[i].base == ch)
429                                 return accent_table[i].result;
430         }
431 
432         if (ch == ' ' || ch == (BRL_UC_ROW|0) || ch == d)
433                 return d;
434 
435         if (kbd->kbdmode == VC_UNICODE)
436                 to_utf8(vc, d);
437         else {
438                 int c = conv_uni_to_8bit(d);
439                 if (c != -1)
440                         put_queue(vc, c);
441         }
442 
443         return ch;
444 }
445 
446 /*
447  * Special function handlers
448  */
449 static void fn_enter(struct vc_data *vc)
450 {
451         if (diacr) {
452                 if (kbd->kbdmode == VC_UNICODE)
453                         to_utf8(vc, diacr);
454                 else {
455                         int c = conv_uni_to_8bit(diacr);
456                         if (c != -1)
457                                 put_queue(vc, c);
458                 }
459                 diacr = 0;
460         }
461 
462         put_queue(vc, 13);
463         if (vc_kbd_mode(kbd, VC_CRLF))
464                 put_queue(vc, 10);
465 }
466 
467 static void fn_caps_toggle(struct vc_data *vc)
468 {
469         if (rep)
470                 return;
471 
472         chg_vc_kbd_led(kbd, VC_CAPSLOCK);
473 }
474 
475 static void fn_caps_on(struct vc_data *vc)
476 {
477         if (rep)
478                 return;
479 
480         set_vc_kbd_led(kbd, VC_CAPSLOCK);
481 }
482 
483 static void fn_show_ptregs(struct vc_data *vc)
484 {
485         struct pt_regs *regs = get_irq_regs();
486 
487         if (regs)
488                 show_regs(regs);
489 }
490 
491 static void fn_hold(struct vc_data *vc)
492 {
493         struct tty_struct *tty = vc->port.tty;
494 
495         if (rep || !tty)
496                 return;
497 
498         /*
499          * Note: SCROLLOCK will be set (cleared) by stop_tty (start_tty);
500          * these routines are also activated by ^S/^Q.
501          * (And SCROLLOCK can also be set by the ioctl KDSKBLED.)
502          */
503         if (tty->stopped)
504                 start_tty(tty);
505         else
506                 stop_tty(tty);
507 }
508 
509 static void fn_num(struct vc_data *vc)
510 {
511         if (vc_kbd_mode(kbd, VC_APPLIC))
512                 applkey(vc, 'P', 1);
513         else
514                 fn_bare_num(vc);
515 }
516 
517 /*
518  * Bind this to Shift-NumLock if you work in application keypad mode
519  * but want to be able to change the NumLock flag.
520  * Bind this to NumLock if you prefer that the NumLock key always
521  * changes the NumLock flag.
522  */
523 static void fn_bare_num(struct vc_data *vc)
524 {
525         if (!rep)
526                 chg_vc_kbd_led(kbd, VC_NUMLOCK);
527 }
528 
529 static void fn_lastcons(struct vc_data *vc)
530 {
531         /* switch to the last used console, ChN */
532         set_console(last_console);
533 }
534 
535 static void fn_dec_console(struct vc_data *vc)
536 {
537         int i, cur = fg_console;
538 
539         /* Currently switching?  Queue this next switch relative to that. */
540         if (want_console != -1)
541                 cur = want_console;
542 
543         for (i = cur - 1; i != cur; i--) {
544                 if (i == -1)
545                         i = MAX_NR_CONSOLES - 1;
546                 if (vc_cons_allocated(i))
547                         break;
548         }
549         set_console(i);
550 }
551 
552 static void fn_inc_console(struct vc_data *vc)
553 {
554         int i, cur = fg_console;
555 
556         /* Currently switching?  Queue this next switch relative to that. */
557         if (want_console != -1)
558                 cur = want_console;
559 
560         for (i = cur+1; i != cur; i++) {
561                 if (i == MAX_NR_CONSOLES)
562                         i = 0;
563                 if (vc_cons_allocated(i))
564                         break;
565         }
566         set_console(i);
567 }
568 
569 static void fn_send_intr(struct vc_data *vc)
570 {
571         tty_insert_flip_char(&vc->port, 0, TTY_BREAK);
572         tty_schedule_flip(&vc->port);
573 }
574 
575 static void fn_scroll_forw(struct vc_data *vc)
576 {
577         scrollfront(vc, 0);
578 }
579 
580 static void fn_scroll_back(struct vc_data *vc)
581 {
582         scrollback(vc, 0);
583 }
584 
585 static void fn_show_mem(struct vc_data *vc)
586 {
587         show_mem(0);
588 }
589 
590 static void fn_show_state(struct vc_data *vc)
591 {
592         show_state();
593 }
594 
595 static void fn_boot_it(struct vc_data *vc)
596 {
597         ctrl_alt_del();
598 }
599 
600 static void fn_compose(struct vc_data *vc)
601 {
602         dead_key_next = true;
603 }
604 
605 static void fn_spawn_con(struct vc_data *vc)
606 {
607         spin_lock(&vt_spawn_con.lock);
608         if (vt_spawn_con.pid)
609                 if (kill_pid(vt_spawn_con.pid, vt_spawn_con.sig, 1)) {
610                         put_pid(vt_spawn_con.pid);
611                         vt_spawn_con.pid = NULL;
612                 }
613         spin_unlock(&vt_spawn_con.lock);
614 }
615 
616 static void fn_SAK(struct vc_data *vc)
617 {
618         struct work_struct *SAK_work = &vc_cons[fg_console].SAK_work;
619         schedule_work(SAK_work);
620 }
621 
622 static void fn_null(struct vc_data *vc)
623 {
624         do_compute_shiftstate();
625 }
626 
627 /*
628  * Special key handlers
629  */
630 static void k_ignore(struct vc_data *vc, unsigned char value, char up_flag)
631 {
632 }
633 
634 static void k_spec(struct vc_data *vc, unsigned char value, char up_flag)
635 {
636         if (up_flag)
637                 return;
638         if (value >= ARRAY_SIZE(fn_handler))
639                 return;
640         if ((kbd->kbdmode == VC_RAW ||
641              kbd->kbdmode == VC_MEDIUMRAW ||
642              kbd->kbdmode == VC_OFF) &&
643              value != KVAL(K_SAK))
644                 return;         /* SAK is allowed even in raw mode */
645         fn_handler[value](vc);
646 }
647 
648 static void k_lowercase(struct vc_data *vc, unsigned char value, char up_flag)
649 {
650         pr_err("k_lowercase was called - impossible\n");
651 }
652 
653 static void k_unicode(struct vc_data *vc, unsigned int value, char up_flag)
654 {
655         if (up_flag)
656                 return;         /* no action, if this is a key release */
657 
658         if (diacr)
659                 value = handle_diacr(vc, value);
660 
661         if (dead_key_next) {
662                 dead_key_next = false;
663                 diacr = value;
664                 return;
665         }
666         if (kbd->kbdmode == VC_UNICODE)
667                 to_utf8(vc, value);
668         else {
669                 int c = conv_uni_to_8bit(value);
670                 if (c != -1)
671                         put_queue(vc, c);
672         }
673 }
674 
675 /*
676  * Handle dead key. Note that we now may have several
677  * dead keys modifying the same character. Very useful
678  * for Vietnamese.
679  */
680 static void k_deadunicode(struct vc_data *vc, unsigned int value, char up_flag)
681 {
682         if (up_flag)
683                 return;
684 
685         diacr = (diacr ? handle_diacr(vc, value) : value);
686 }
687 
688 static void k_self(struct vc_data *vc, unsigned char value, char up_flag)
689 {
690         k_unicode(vc, conv_8bit_to_uni(value), up_flag);
691 }
692 
693 static void k_dead2(struct vc_data *vc, unsigned char value, char up_flag)
694 {
695         k_deadunicode(vc, value, up_flag);
696 }
697 
698 /*
699  * Obsolete - for backwards compatibility only
700  */
701 static void k_dead(struct vc_data *vc, unsigned char value, char up_flag)
702 {
703         static const unsigned char ret_diacr[NR_DEAD] = {'`', '\'', '^', '~', '"', ',' };
704 
705         k_deadunicode(vc, ret_diacr[value], up_flag);
706 }
707 
708 static void k_cons(struct vc_data *vc, unsigned char value, char up_flag)
709 {
710         if (up_flag)
711                 return;
712 
713         set_console(value);
714 }
715 
716 static void k_fn(struct vc_data *vc, unsigned char value, char up_flag)
717 {
718         if (up_flag)
719                 return;
720 
721         if ((unsigned)value < ARRAY_SIZE(func_table)) {
722                 if (func_table[value])
723                         puts_queue(vc, func_table[value]);
724         } else
725                 pr_err("k_fn called with value=%d\n", value);
726 }
727 
728 static void k_cur(struct vc_data *vc, unsigned char value, char up_flag)
729 {
730         static const char cur_chars[] = "BDCA";
731 
732         if (up_flag)
733                 return;
734 
735         applkey(vc, cur_chars[value], vc_kbd_mode(kbd, VC_CKMODE));
736 }
737 
738 static void k_pad(struct vc_data *vc, unsigned char value, char up_flag)
739 {
740         static const char pad_chars[] = "0123456789+-*/\015,.?()#";
741         static const char app_map[] = "pqrstuvwxylSRQMnnmPQS";
742 
743         if (up_flag)
744                 return;         /* no action, if this is a key release */
745 
746         /* kludge... shift forces cursor/number keys */
747         if (vc_kbd_mode(kbd, VC_APPLIC) && !shift_down[KG_SHIFT]) {
748                 applkey(vc, app_map[value], 1);
749                 return;
750         }
751 
752         if (!vc_kbd_led(kbd, VC_NUMLOCK)) {
753 
754                 switch (value) {
755                 case KVAL(K_PCOMMA):
756                 case KVAL(K_PDOT):
757                         k_fn(vc, KVAL(K_REMOVE), 0);
758                         return;
759                 case KVAL(K_P0):
760                         k_fn(vc, KVAL(K_INSERT), 0);
761                         return;
762                 case KVAL(K_P1):
763                         k_fn(vc, KVAL(K_SELECT), 0);
764                         return;
765                 case KVAL(K_P2):
766                         k_cur(vc, KVAL(K_DOWN), 0);
767                         return;
768                 case KVAL(K_P3):
769                         k_fn(vc, KVAL(K_PGDN), 0);
770                         return;
771                 case KVAL(K_P4):
772                         k_cur(vc, KVAL(K_LEFT), 0);
773                         return;
774                 case KVAL(K_P6):
775                         k_cur(vc, KVAL(K_RIGHT), 0);
776                         return;
777                 case KVAL(K_P7):
778                         k_fn(vc, KVAL(K_FIND), 0);
779                         return;
780                 case KVAL(K_P8):
781                         k_cur(vc, KVAL(K_UP), 0);
782                         return;
783                 case KVAL(K_P9):
784                         k_fn(vc, KVAL(K_PGUP), 0);
785                         return;
786                 case KVAL(K_P5):
787                         applkey(vc, 'G', vc_kbd_mode(kbd, VC_APPLIC));
788                         return;
789                 }
790         }
791 
792         put_queue(vc, pad_chars[value]);
793         if (value == KVAL(K_PENTER) && vc_kbd_mode(kbd, VC_CRLF))
794                 put_queue(vc, 10);
795 }
796 
797 static void k_shift(struct vc_data *vc, unsigned char value, char up_flag)
798 {
799         int old_state = shift_state;
800 
801         if (rep)
802                 return;
803         /*
804          * Mimic typewriter:
805          * a CapsShift key acts like Shift but undoes CapsLock
806          */
807         if (value == KVAL(K_CAPSSHIFT)) {
808                 value = KVAL(K_SHIFT);
809                 if (!up_flag)
810                         clr_vc_kbd_led(kbd, VC_CAPSLOCK);
811         }
812 
813         if (up_flag) {
814                 /*
815                  * handle the case that two shift or control
816                  * keys are depressed simultaneously
817                  */
818                 if (shift_down[value])
819                         shift_down[value]--;
820         } else
821                 shift_down[value]++;
822 
823         if (shift_down[value])
824                 shift_state |= (1 << value);
825         else
826                 shift_state &= ~(1 << value);
827 
828         /* kludge */
829         if (up_flag && shift_state != old_state && npadch != -1) {
830                 if (kbd->kbdmode == VC_UNICODE)
831                         to_utf8(vc, npadch);
832                 else
833                         put_queue(vc, npadch & 0xff);
834                 npadch = -1;
835         }
836 }
837 
838 static void k_meta(struct vc_data *vc, unsigned char value, char up_flag)
839 {
840         if (up_flag)
841                 return;
842 
843         if (vc_kbd_mode(kbd, VC_META)) {
844                 put_queue(vc, '\033');
845                 put_queue(vc, value);
846         } else
847                 put_queue(vc, value | 0x80);
848 }
849 
850 static void k_ascii(struct vc_data *vc, unsigned char value, char up_flag)
851 {
852         int base;
853 
854         if (up_flag)
855                 return;
856 
857         if (value < 10) {
858                 /* decimal input of code, while Alt depressed */
859                 base = 10;
860         } else {
861                 /* hexadecimal input of code, while AltGr depressed */
862                 value -= 10;
863                 base = 16;
864         }
865 
866         if (npadch == -1)
867                 npadch = value;
868         else
869                 npadch = npadch * 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-scrollock"),
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)
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 and locking */
1978 int vt_do_kdgkb_ioctl(int cmd, struct kbsentry __user *user_kdgkb, int perm)
1979 {
1980         struct kbsentry *kbs;
1981         char *p;
1982         u_char *q;
1983         u_char __user *up;
1984         int sz;
1985         int delta;
1986         char *first_free, *fj, *fnw;
1987         int i, j, k;
1988         int ret;
1989 
1990         if (!capable(CAP_SYS_TTY_CONFIG))
1991                 perm = 0;
1992 
1993         kbs = kmalloc(sizeof(*kbs), GFP_KERNEL);
1994         if (!kbs) {
1995                 ret = -ENOMEM;
1996                 goto reterr;
1997         }
1998 
1999         /* we mostly copy too much here (512bytes), but who cares ;) */
2000         if (copy_from_user(kbs, user_kdgkb, sizeof(struct kbsentry))) {
2001                 ret = -EFAULT;
2002                 goto reterr;
2003         }
2004         kbs->kb_string[sizeof(kbs->kb_string)-1] = '\0';
2005         i = kbs->kb_func;
2006 
2007         switch (cmd) {
2008         case KDGKBSENT:
2009                 sz = sizeof(kbs->kb_string) - 1; /* sz should have been
2010                                                   a struct member */
2011                 up = user_kdgkb->kb_string;
2012                 p = func_table[i];
2013                 if(p)
2014                         for ( ; *p && sz; p++, sz--)
2015                                 if (put_user(*p, up++)) {
2016                                         ret = -EFAULT;
2017                                         goto reterr;
2018                                 }
2019                 if (put_user('\0', up)) {
2020                         ret = -EFAULT;
2021                         goto reterr;
2022                 }
2023                 kfree(kbs);
2024                 return ((p && *p) ? -EOVERFLOW : 0);
2025         case KDSKBSENT:
2026                 if (!perm) {
2027                         ret = -EPERM;
2028                         goto reterr;
2029                 }
2030 
2031                 q = func_table[i];
2032                 first_free = funcbufptr + (funcbufsize - funcbufleft);
2033                 for (j = i+1; j < MAX_NR_FUNC && !func_table[j]; j++)
2034                         ;
2035                 if (j < MAX_NR_FUNC)
2036                         fj = func_table[j];
2037                 else
2038                         fj = first_free;
2039 
2040                 delta = (q ? -strlen(q) : 1) + strlen(kbs->kb_string);
2041                 if (delta <= funcbufleft) {     /* it fits in current buf */
2042                     if (j < MAX_NR_FUNC) {
2043                         memmove(fj + delta, fj, first_free - fj);
2044                         for (k = j; k < MAX_NR_FUNC; k++)
2045                             if (func_table[k])
2046                                 func_table[k] += delta;
2047                     }
2048                     if (!q)
2049                       func_table[i] = fj;
2050                     funcbufleft -= delta;
2051                 } else {                        /* allocate a larger buffer */
2052                     sz = 256;
2053                     while (sz < funcbufsize - funcbufleft + delta)
2054                       sz <<= 1;
2055                     fnw = kmalloc(sz, GFP_KERNEL);
2056                     if(!fnw) {
2057                       ret = -ENOMEM;
2058                       goto reterr;
2059                     }
2060 
2061                     if (!q)
2062                       func_table[i] = fj;
2063                     if (fj > funcbufptr)
2064                         memmove(fnw, funcbufptr, fj - funcbufptr);
2065                     for (k = 0; k < j; k++)
2066                       if (func_table[k])
2067                         func_table[k] = fnw + (func_table[k] - funcbufptr);
2068 
2069                     if (first_free > fj) {
2070                         memmove(fnw + (fj - funcbufptr) + delta, fj, first_free - fj);
2071                         for (k = j; k < MAX_NR_FUNC; k++)
2072                           if (func_table[k])
2073                             func_table[k] = fnw + (func_table[k] - funcbufptr) + delta;
2074                     }
2075                     if (funcbufptr != func_buf)
2076                       kfree(funcbufptr);
2077                     funcbufptr = fnw;
2078                     funcbufleft = funcbufleft - delta + sz - funcbufsize;
2079                     funcbufsize = sz;
2080                 }
2081                 strcpy(func_table[i], kbs->kb_string);
2082                 break;
2083         }
2084         ret = 0;
2085 reterr:
2086         kfree(kbs);
2087         return ret;
2088 }
2089 
2090 int vt_do_kdskled(int console, int cmd, unsigned long arg, int perm)
2091 {
2092         struct kbd_struct *kb = kbd_table + console;
2093         unsigned long flags;
2094         unsigned char ucval;
2095 
2096         switch(cmd) {
2097         /* the ioctls below read/set the flags usually shown in the leds */
2098         /* don't use them - they will go away without warning */
2099         case KDGKBLED:
2100                 spin_lock_irqsave(&kbd_event_lock, flags);
2101                 ucval = kb->ledflagstate | (kb->default_ledflagstate << 4);
2102                 spin_unlock_irqrestore(&kbd_event_lock, flags);
2103                 return put_user(ucval, (char __user *)arg);
2104 
2105         case KDSKBLED:
2106                 if (!perm)
2107                         return -EPERM;
2108                 if (arg & ~0x77)
2109                         return -EINVAL;
2110                 spin_lock_irqsave(&led_lock, flags);
2111                 kb->ledflagstate = (arg & 7);
2112                 kb->default_ledflagstate = ((arg >> 4) & 7);
2113                 set_leds();
2114                 spin_unlock_irqrestore(&led_lock, flags);
2115                 return 0;
2116 
2117         /* the ioctls below only set the lights, not the functions */
2118         /* for those, see KDGKBLED and KDSKBLED above */
2119         case KDGETLED:
2120                 ucval = getledstate();
2121                 return put_user(ucval, (char __user *)arg);
2122 
2123         case KDSETLED:
2124                 if (!perm)
2125                         return -EPERM;
2126                 setledstate(kb, arg);
2127                 return 0;
2128         }
2129         return -ENOIOCTLCMD;
2130 }
2131 
2132 int vt_do_kdgkbmode(int console)
2133 {
2134         struct kbd_struct *kb = kbd_table + console;
2135         /* This is a spot read so needs no locking */
2136         switch (kb->kbdmode) {
2137         case VC_RAW:
2138                 return K_RAW;
2139         case VC_MEDIUMRAW:
2140                 return K_MEDIUMRAW;
2141         case VC_UNICODE:
2142                 return K_UNICODE;
2143         case VC_OFF:
2144                 return K_OFF;
2145         default:
2146                 return K_XLATE;
2147         }
2148 }
2149 
2150 /**
2151  *      vt_do_kdgkbmeta         -       report meta status
2152  *      @console: console to report
2153  *
2154  *      Report the meta flag status of this console
2155  */
2156 int vt_do_kdgkbmeta(int console)
2157 {
2158         struct kbd_struct *kb = kbd_table + console;
2159         /* Again a spot read so no locking */
2160         return vc_kbd_mode(kb, VC_META) ? K_ESCPREFIX : K_METABIT;
2161 }
2162 
2163 /**
2164  *      vt_reset_unicode        -       reset the unicode status
2165  *      @console: console being reset
2166  *
2167  *      Restore the unicode console state to its default
2168  */
2169 void vt_reset_unicode(int console)
2170 {
2171         unsigned long flags;
2172 
2173         spin_lock_irqsave(&kbd_event_lock, flags);
2174         kbd_table[console].kbdmode = default_utf8 ? VC_UNICODE : VC_XLATE;
2175         spin_unlock_irqrestore(&kbd_event_lock, flags);
2176 }
2177 
2178 /**
2179  *      vt_get_shiftstate       -       shift bit state
2180  *
2181  *      Report the shift bits from the keyboard state. We have to export
2182  *      this to support some oddities in the vt layer.
2183  */
2184 int vt_get_shift_state(void)
2185 {
2186         /* Don't lock as this is a transient report */
2187         return shift_state;
2188 }
2189 
2190 /**
2191  *      vt_reset_keyboard       -       reset keyboard state
2192  *      @console: console to reset
2193  *
2194  *      Reset the keyboard bits for a console as part of a general console
2195  *      reset event
2196  */
2197 void vt_reset_keyboard(int console)
2198 {
2199         struct kbd_struct *kb = kbd_table + console;
2200         unsigned long flags;
2201 
2202         spin_lock_irqsave(&kbd_event_lock, flags);
2203         set_vc_kbd_mode(kb, VC_REPEAT);
2204         clr_vc_kbd_mode(kb, VC_CKMODE);
2205         clr_vc_kbd_mode(kb, VC_APPLIC);
2206         clr_vc_kbd_mode(kb, VC_CRLF);
2207         kb->lockstate = 0;
2208         kb->slockstate = 0;
2209         spin_lock(&led_lock);
2210         kb->ledmode = LED_SHOW_FLAGS;
2211         kb->ledflagstate = kb->default_ledflagstate;
2212         spin_unlock(&led_lock);
2213         /* do not do set_leds here because this causes an endless tasklet loop
2214            when the keyboard hasn't been initialized yet */
2215         spin_unlock_irqrestore(&kbd_event_lock, flags);
2216 }
2217 
2218 /**
2219  *      vt_get_kbd_mode_bit     -       read keyboard status bits
2220  *      @console: console to read from
2221  *      @bit: mode bit to read
2222  *
2223  *      Report back a vt mode bit. We do this without locking so the
2224  *      caller must be sure that there are no synchronization needs
2225  */
2226 
2227 int vt_get_kbd_mode_bit(int console, int bit)
2228 {
2229         struct kbd_struct *kb = kbd_table + console;
2230         return vc_kbd_mode(kb, bit);
2231 }
2232 
2233 /**
2234  *      vt_set_kbd_mode_bit     -       read keyboard status bits
2235  *      @console: console to read from
2236  *      @bit: mode bit to read
2237  *
2238  *      Set a vt mode bit. We do this without locking so the
2239  *      caller must be sure that there are no synchronization needs
2240  */
2241 
2242 void vt_set_kbd_mode_bit(int console, int bit)
2243 {
2244         struct kbd_struct *kb = kbd_table + console;
2245         unsigned long flags;
2246 
2247         spin_lock_irqsave(&kbd_event_lock, flags);
2248         set_vc_kbd_mode(kb, bit);
2249         spin_unlock_irqrestore(&kbd_event_lock, flags);
2250 }
2251 
2252 /**
2253  *      vt_clr_kbd_mode_bit     -       read keyboard status bits
2254  *      @console: console to read from
2255  *      @bit: mode bit to read
2256  *
2257  *      Report back a vt mode bit. We do this without locking so the
2258  *      caller must be sure that there are no synchronization needs
2259  */
2260 
2261 void vt_clr_kbd_mode_bit(int console, int bit)
2262 {
2263         struct kbd_struct *kb = kbd_table + console;
2264         unsigned long flags;
2265 
2266         spin_lock_irqsave(&kbd_event_lock, flags);
2267         clr_vc_kbd_mode(kb, bit);
2268         spin_unlock_irqrestore(&kbd_event_lock, flags);
2269 }
2270 

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us