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