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