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