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