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