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