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