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