2 * Written for linux by Johan Myreen as a translation from
3 * the assembly version by Linus (with diacriticals added)
5 * Some additional features added by Christoph Niemann (ChN), March 1993
7 * Loadable keymaps by Risto Kankkunen, May 1993
9 * Diacriticals redone & other small changes, aeb@cwi.nl, June 1993
10 * Added decr/incr_console, dynamic keymaps, Unicode support,
11 * dynamic function/string keys, led setting, Sept 1994
12 * `Sticky' modifier keys, 951006.
14 * 11-11-96: SAK should now work in the raw mode (Martin Mares)
16 * Modified to provide 'generic' keyboard support by Hamish Macdonald
17 * Merge with the m68k keyboard driver and split-off of the PC low-level
18 * parts by Geert Uytterhoeven, May 1997
20 * 27-05-97: Added support for the Magic SysRq Key (Martin Mares)
21 * 30-07-98: Dead keys redone, aeb@cwi.nl.
22 * 21-08-02: Converted to input API, major cleanup. (Vojtech Pavlik)
25 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
27 #include <linux/consolemap.h>
28 #include <linux/module.h>
29 #include <linux/sched.h>
30 #include <linux/tty.h>
31 #include <linux/tty_flip.h>
33 #include <linux/string.h>
34 #include <linux/init.h>
35 #include <linux/slab.h>
37 #include <linux/kbd_kern.h>
38 #include <linux/kbd_diacr.h>
39 #include <linux/vt_kern.h>
40 #include <linux/input.h>
41 #include <linux/reboot.h>
42 #include <linux/notifier.h>
43 #include <linux/jiffies.h>
44 #include <linux/uaccess.h>
46 #include <asm/irq_regs.h>
48 extern void ctrl_alt_del(void);
51 * Exported functions/variables
54 #define KBD_DEFMODE ((1 << VC_REPEAT) | (1 << VC_META))
56 #if defined(CONFIG_X86) || defined(CONFIG_PARISC)
57 #include <asm/kbdleds.h>
59 static inline int kbd_defleds(void)
72 k_self, k_fn, k_spec, k_pad,\
73 k_dead, k_cons, k_cur, k_shift,\
74 k_meta, k_ascii, k_lock, k_lowercase,\
75 k_slock, k_dead2, k_brl, k_ignore
77 typedef void (k_handler_fn)(struct vc_data *vc, unsigned char value,
79 static k_handler_fn K_HANDLERS;
80 static k_handler_fn *k_handler[16] = { K_HANDLERS };
83 fn_null, fn_enter, fn_show_ptregs, fn_show_mem,\
84 fn_show_state, fn_send_intr, fn_lastcons, fn_caps_toggle,\
85 fn_num, fn_hold, fn_scroll_forw, fn_scroll_back,\
86 fn_boot_it, fn_caps_on, fn_compose, fn_SAK,\
87 fn_dec_console, fn_inc_console, fn_spawn_con, fn_bare_num
89 typedef void (fn_handler_fn)(struct vc_data *vc);
90 static fn_handler_fn FN_HANDLERS;
91 static fn_handler_fn *fn_handler[] = { FN_HANDLERS };
94 * Variables exported for vt_ioctl.c
97 struct vt_spawn_console vt_spawn_con = {
98 .lock = __SPIN_LOCK_UNLOCKED(vt_spawn_con.lock),
108 static struct kbd_struct kbd_table[MAX_NR_CONSOLES];
109 static struct kbd_struct *kbd = kbd_table;
111 /* maximum values each key_handler can handle */
112 static const int max_vals[] = {
113 255, ARRAY_SIZE(func_table) - 1, ARRAY_SIZE(fn_handler) - 1, NR_PAD - 1,
114 NR_DEAD - 1, 255, 3, NR_SHIFT - 1, 255, NR_ASCII - 1, NR_LOCK - 1,
115 255, NR_LOCK - 1, 255, NR_BRL - 1
118 static const int NR_TYPES = ARRAY_SIZE(max_vals);
120 static struct input_handler kbd_handler;
121 static DEFINE_SPINLOCK(kbd_event_lock);
122 static DEFINE_SPINLOCK(led_lock);
123 static unsigned long key_down[BITS_TO_LONGS(KEY_CNT)]; /* keyboard key bitmap */
124 static unsigned char shift_down[NR_SHIFT]; /* shift state counters.. */
125 static bool dead_key_next;
126 static int npadch = -1; /* -1 or number assembled on pad */
127 static unsigned int diacr;
128 static char rep; /* flag telling character repeat */
130 static int shift_state = 0;
132 static unsigned char ledstate = 0xff; /* undefined */
133 static unsigned char ledioctl;
135 static struct ledptr {
138 unsigned char valid:1;
142 * Notifier list for console keyboard events
144 static ATOMIC_NOTIFIER_HEAD(keyboard_notifier_list);
146 int register_keyboard_notifier(struct notifier_block *nb)
148 return atomic_notifier_chain_register(&keyboard_notifier_list, nb);
150 EXPORT_SYMBOL_GPL(register_keyboard_notifier);
152 int unregister_keyboard_notifier(struct notifier_block *nb)
154 return atomic_notifier_chain_unregister(&keyboard_notifier_list, nb);
156 EXPORT_SYMBOL_GPL(unregister_keyboard_notifier);
159 * Translation of scancodes to keycodes. We set them on only the first
160 * keyboard in the list that accepts the scancode and keycode.
161 * Explanation for not choosing the first attached keyboard anymore:
162 * USB keyboards for example have two event devices: one for all "normal"
163 * keys and one for extra function keys (like "volume up", "make coffee",
164 * etc.). So this means that scancodes for the extra function keys won't
165 * be valid for the first event device, but will be for the second.
168 struct getset_keycode_data {
169 struct input_keymap_entry ke;
173 static int getkeycode_helper(struct input_handle *handle, void *data)
175 struct getset_keycode_data *d = data;
177 d->error = input_get_keycode(handle->dev, &d->ke);
179 return d->error == 0; /* stop as soon as we successfully get one */
182 static int getkeycode(unsigned int scancode)
184 struct getset_keycode_data d = {
187 .len = sizeof(scancode),
193 memcpy(d.ke.scancode, &scancode, sizeof(scancode));
195 input_handler_for_each_handle(&kbd_handler, &d, getkeycode_helper);
197 return d.error ?: d.ke.keycode;
200 static int setkeycode_helper(struct input_handle *handle, void *data)
202 struct getset_keycode_data *d = data;
204 d->error = input_set_keycode(handle->dev, &d->ke);
206 return d->error == 0; /* stop as soon as we successfully set one */
209 static int setkeycode(unsigned int scancode, unsigned int keycode)
211 struct getset_keycode_data d = {
214 .len = sizeof(scancode),
220 memcpy(d.ke.scancode, &scancode, sizeof(scancode));
222 input_handler_for_each_handle(&kbd_handler, &d, setkeycode_helper);
228 * Making beeps and bells. Note that we prefer beeps to bells, but when
229 * shutting the sound off we do both.
232 static int kd_sound_helper(struct input_handle *handle, void *data)
234 unsigned int *hz = data;
235 struct input_dev *dev = handle->dev;
237 if (test_bit(EV_SND, dev->evbit)) {
238 if (test_bit(SND_TONE, dev->sndbit)) {
239 input_inject_event(handle, EV_SND, SND_TONE, *hz);
243 if (test_bit(SND_BELL, dev->sndbit))
244 input_inject_event(handle, EV_SND, SND_BELL, *hz ? 1 : 0);
250 static void kd_nosound(unsigned long ignored)
252 static unsigned int zero;
254 input_handler_for_each_handle(&kbd_handler, &zero, kd_sound_helper);
257 static DEFINE_TIMER(kd_mksound_timer, kd_nosound, 0, 0);
259 void kd_mksound(unsigned int hz, unsigned int ticks)
261 del_timer_sync(&kd_mksound_timer);
263 input_handler_for_each_handle(&kbd_handler, &hz, kd_sound_helper);
266 mod_timer(&kd_mksound_timer, jiffies + ticks);
268 EXPORT_SYMBOL(kd_mksound);
271 * Setting the keyboard rate.
274 static int kbd_rate_helper(struct input_handle *handle, void *data)
276 struct input_dev *dev = handle->dev;
277 struct kbd_repeat *rep = data;
279 if (test_bit(EV_REP, dev->evbit)) {
281 if (rep[0].delay > 0)
282 input_inject_event(handle,
283 EV_REP, REP_DELAY, rep[0].delay);
284 if (rep[0].period > 0)
285 input_inject_event(handle,
286 EV_REP, REP_PERIOD, rep[0].period);
288 rep[1].delay = dev->rep[REP_DELAY];
289 rep[1].period = dev->rep[REP_PERIOD];
295 int kbd_rate(struct kbd_repeat *rep)
297 struct kbd_repeat data[2] = { *rep };
299 input_handler_for_each_handle(&kbd_handler, data, kbd_rate_helper);
300 *rep = data[1]; /* Copy currently used settings */
308 static void put_queue(struct vc_data *vc, int ch)
310 struct tty_struct *tty = vc->port.tty;
313 tty_insert_flip_char(tty, ch, 0);
314 tty_schedule_flip(tty);
318 static void puts_queue(struct vc_data *vc, char *cp)
320 struct tty_struct *tty = vc->port.tty;
326 tty_insert_flip_char(tty, *cp, 0);
329 tty_schedule_flip(tty);
332 static void applkey(struct vc_data *vc, int key, char mode)
334 static char buf[] = { 0x1b, 'O', 0x00, 0x00 };
336 buf[1] = (mode ? 'O' : '[');
342 * Many other routines do put_queue, but I think either
343 * they produce ASCII, or they produce some user-assigned
344 * string, and in both cases we might assume that it is
347 static void to_utf8(struct vc_data *vc, uint c)
352 else if (c < 0x800) {
353 /* 110***** 10****** */
354 put_queue(vc, 0xc0 | (c >> 6));
355 put_queue(vc, 0x80 | (c & 0x3f));
356 } else if (c < 0x10000) {
357 if (c >= 0xD800 && c < 0xE000)
361 /* 1110**** 10****** 10****** */
362 put_queue(vc, 0xe0 | (c >> 12));
363 put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
364 put_queue(vc, 0x80 | (c & 0x3f));
365 } else if (c < 0x110000) {
366 /* 11110*** 10****** 10****** 10****** */
367 put_queue(vc, 0xf0 | (c >> 18));
368 put_queue(vc, 0x80 | ((c >> 12) & 0x3f));
369 put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
370 put_queue(vc, 0x80 | (c & 0x3f));
375 * Called after returning from RAW mode or when changing consoles - recompute
376 * shift_down[] and shift_state from key_down[] maybe called when keymap is
377 * undefined, so that shiftkey release is seen. The caller must hold the
381 static void do_compute_shiftstate(void)
383 unsigned int i, j, k, sym, val;
386 memset(shift_down, 0, sizeof(shift_down));
388 for (i = 0; i < ARRAY_SIZE(key_down); i++) {
393 k = i * BITS_PER_LONG;
395 for (j = 0; j < BITS_PER_LONG; j++, k++) {
397 if (!test_bit(k, key_down))
400 sym = U(key_maps[0][k]);
401 if (KTYP(sym) != KT_SHIFT && KTYP(sym) != KT_SLOCK)
405 if (val == KVAL(K_CAPSSHIFT))
409 shift_state |= (1 << val);
414 /* We still have to export this method to vt.c */
415 void compute_shiftstate(void)
418 spin_lock_irqsave(&kbd_event_lock, flags);
419 do_compute_shiftstate();
420 spin_unlock_irqrestore(&kbd_event_lock, flags);
424 * We have a combining character DIACR here, followed by the character CH.
425 * If the combination occurs in the table, return the corresponding value.
426 * Otherwise, if CH is a space or equals DIACR, return DIACR.
427 * Otherwise, conclude that DIACR was not combining after all,
428 * queue it and return CH.
430 static unsigned int handle_diacr(struct vc_data *vc, unsigned int ch)
432 unsigned int d = diacr;
437 if ((d & ~0xff) == BRL_UC_ROW) {
438 if ((ch & ~0xff) == BRL_UC_ROW)
441 for (i = 0; i < accent_table_size; i++)
442 if (accent_table[i].diacr == d && accent_table[i].base == ch)
443 return accent_table[i].result;
446 if (ch == ' ' || ch == (BRL_UC_ROW|0) || ch == d)
449 if (kbd->kbdmode == VC_UNICODE)
452 int c = conv_uni_to_8bit(d);
461 * Special function handlers
463 static void fn_enter(struct vc_data *vc)
466 if (kbd->kbdmode == VC_UNICODE)
469 int c = conv_uni_to_8bit(diacr);
477 if (vc_kbd_mode(kbd, VC_CRLF))
481 static void fn_caps_toggle(struct vc_data *vc)
486 chg_vc_kbd_led(kbd, VC_CAPSLOCK);
489 static void fn_caps_on(struct vc_data *vc)
494 set_vc_kbd_led(kbd, VC_CAPSLOCK);
497 static void fn_show_ptregs(struct vc_data *vc)
499 struct pt_regs *regs = get_irq_regs();
505 static void fn_hold(struct vc_data *vc)
507 struct tty_struct *tty = vc->port.tty;
513 * Note: SCROLLOCK will be set (cleared) by stop_tty (start_tty);
514 * these routines are also activated by ^S/^Q.
515 * (And SCROLLOCK can also be set by the ioctl KDSKBLED.)
523 static void fn_num(struct vc_data *vc)
525 if (vc_kbd_mode(kbd, VC_APPLIC))
532 * Bind this to Shift-NumLock if you work in application keypad mode
533 * but want to be able to change the NumLock flag.
534 * Bind this to NumLock if you prefer that the NumLock key always
535 * changes the NumLock flag.
537 static void fn_bare_num(struct vc_data *vc)
540 chg_vc_kbd_led(kbd, VC_NUMLOCK);
543 static void fn_lastcons(struct vc_data *vc)
545 /* switch to the last used console, ChN */
546 set_console(last_console);
549 static void fn_dec_console(struct vc_data *vc)
551 int i, cur = fg_console;
553 /* Currently switching? Queue this next switch relative to that. */
554 if (want_console != -1)
557 for (i = cur - 1; i != cur; i--) {
559 i = MAX_NR_CONSOLES - 1;
560 if (vc_cons_allocated(i))
566 static void fn_inc_console(struct vc_data *vc)
568 int i, cur = fg_console;
570 /* Currently switching? Queue this next switch relative to that. */
571 if (want_console != -1)
574 for (i = cur+1; i != cur; i++) {
575 if (i == MAX_NR_CONSOLES)
577 if (vc_cons_allocated(i))
583 static void fn_send_intr(struct vc_data *vc)
585 struct tty_struct *tty = vc->port.tty;
589 tty_insert_flip_char(tty, 0, TTY_BREAK);
590 tty_schedule_flip(tty);
593 static void fn_scroll_forw(struct vc_data *vc)
598 static void fn_scroll_back(struct vc_data *vc)
603 static void fn_show_mem(struct vc_data *vc)
608 static void fn_show_state(struct vc_data *vc)
613 static void fn_boot_it(struct vc_data *vc)
618 static void fn_compose(struct vc_data *vc)
620 dead_key_next = true;
623 static void fn_spawn_con(struct vc_data *vc)
625 spin_lock(&vt_spawn_con.lock);
626 if (vt_spawn_con.pid)
627 if (kill_pid(vt_spawn_con.pid, vt_spawn_con.sig, 1)) {
628 put_pid(vt_spawn_con.pid);
629 vt_spawn_con.pid = NULL;
631 spin_unlock(&vt_spawn_con.lock);
634 static void fn_SAK(struct vc_data *vc)
636 struct work_struct *SAK_work = &vc_cons[fg_console].SAK_work;
637 schedule_work(SAK_work);
640 static void fn_null(struct vc_data *vc)
642 do_compute_shiftstate();
646 * Special key handlers
648 static void k_ignore(struct vc_data *vc, unsigned char value, char up_flag)
652 static void k_spec(struct vc_data *vc, unsigned char value, char up_flag)
656 if (value >= ARRAY_SIZE(fn_handler))
658 if ((kbd->kbdmode == VC_RAW ||
659 kbd->kbdmode == VC_MEDIUMRAW ||
660 kbd->kbdmode == VC_OFF) &&
661 value != KVAL(K_SAK))
662 return; /* SAK is allowed even in raw mode */
663 fn_handler[value](vc);
666 static void k_lowercase(struct vc_data *vc, unsigned char value, char up_flag)
668 pr_err("k_lowercase was called - impossible\n");
671 static void k_unicode(struct vc_data *vc, unsigned int value, char up_flag)
674 return; /* no action, if this is a key release */
677 value = handle_diacr(vc, value);
680 dead_key_next = false;
684 if (kbd->kbdmode == VC_UNICODE)
687 int c = conv_uni_to_8bit(value);
694 * Handle dead key. Note that we now may have several
695 * dead keys modifying the same character. Very useful
698 static void k_deadunicode(struct vc_data *vc, unsigned int value, char up_flag)
703 diacr = (diacr ? handle_diacr(vc, value) : value);
706 static void k_self(struct vc_data *vc, unsigned char value, char up_flag)
708 k_unicode(vc, conv_8bit_to_uni(value), up_flag);
711 static void k_dead2(struct vc_data *vc, unsigned char value, char up_flag)
713 k_deadunicode(vc, value, up_flag);
717 * Obsolete - for backwards compatibility only
719 static void k_dead(struct vc_data *vc, unsigned char value, char up_flag)
721 static const unsigned char ret_diacr[NR_DEAD] = {'`', '\'', '^', '~', '"', ',' };
723 k_deadunicode(vc, ret_diacr[value], up_flag);
726 static void k_cons(struct vc_data *vc, unsigned char value, char up_flag)
734 static void k_fn(struct vc_data *vc, unsigned char value, char up_flag)
739 if ((unsigned)value < ARRAY_SIZE(func_table)) {
740 if (func_table[value])
741 puts_queue(vc, func_table[value]);
743 pr_err("k_fn called with value=%d\n", value);
746 static void k_cur(struct vc_data *vc, unsigned char value, char up_flag)
748 static const char cur_chars[] = "BDCA";
753 applkey(vc, cur_chars[value], vc_kbd_mode(kbd, VC_CKMODE));
756 static void k_pad(struct vc_data *vc, unsigned char value, char up_flag)
758 static const char pad_chars[] = "0123456789+-*/\015,.?()#";
759 static const char app_map[] = "pqrstuvwxylSRQMnnmPQS";
762 return; /* no action, if this is a key release */
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);
770 if (!vc_kbd_led(kbd, VC_NUMLOCK)) {
775 k_fn(vc, KVAL(K_REMOVE), 0);
778 k_fn(vc, KVAL(K_INSERT), 0);
781 k_fn(vc, KVAL(K_SELECT), 0);
784 k_cur(vc, KVAL(K_DOWN), 0);
787 k_fn(vc, KVAL(K_PGDN), 0);
790 k_cur(vc, KVAL(K_LEFT), 0);
793 k_cur(vc, KVAL(K_RIGHT), 0);
796 k_fn(vc, KVAL(K_FIND), 0);
799 k_cur(vc, KVAL(K_UP), 0);
802 k_fn(vc, KVAL(K_PGUP), 0);
805 applkey(vc, 'G', vc_kbd_mode(kbd, VC_APPLIC));
810 put_queue(vc, pad_chars[value]);
811 if (value == KVAL(K_PENTER) && vc_kbd_mode(kbd, VC_CRLF))
815 static void k_shift(struct vc_data *vc, unsigned char value, char up_flag)
817 int old_state = shift_state;
823 * a CapsShift key acts like Shift but undoes CapsLock
825 if (value == KVAL(K_CAPSSHIFT)) {
826 value = KVAL(K_SHIFT);
828 clr_vc_kbd_led(kbd, VC_CAPSLOCK);
833 * handle the case that two shift or control
834 * keys are depressed simultaneously
836 if (shift_down[value])
841 if (shift_down[value])
842 shift_state |= (1 << value);
844 shift_state &= ~(1 << value);
847 if (up_flag && shift_state != old_state && npadch != -1) {
848 if (kbd->kbdmode == VC_UNICODE)
851 put_queue(vc, npadch & 0xff);
856 static void k_meta(struct vc_data *vc, unsigned char value, char up_flag)
861 if (vc_kbd_mode(kbd, VC_META)) {
862 put_queue(vc, '\033');
863 put_queue(vc, value);
865 put_queue(vc, value | 0x80);
868 static void k_ascii(struct vc_data *vc, unsigned char value, char up_flag)
876 /* decimal input of code, while Alt depressed */
879 /* hexadecimal input of code, while AltGr depressed */
887 npadch = npadch * base + value;
890 static void k_lock(struct vc_data *vc, unsigned char value, char up_flag)
895 chg_vc_kbd_lock(kbd, value);
898 static void k_slock(struct vc_data *vc, unsigned char value, char up_flag)
900 k_shift(vc, value, up_flag);
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]) {
908 chg_vc_kbd_slock(kbd, value);
912 /* by default, 300ms interval for combination release */
913 static unsigned brl_timeout = 300;
914 MODULE_PARM_DESC(brl_timeout, "Braille keys release delay in ms (0 for commit on first key release)");
915 module_param(brl_timeout, uint, 0644);
917 static unsigned brl_nbchords = 1;
918 MODULE_PARM_DESC(brl_nbchords, "Number of chords that produce a braille pattern (0 for dead chords)");
919 module_param(brl_nbchords, uint, 0644);
921 static void k_brlcommit(struct vc_data *vc, unsigned int pattern, char up_flag)
923 static unsigned long chords;
924 static unsigned committed;
927 k_deadunicode(vc, BRL_UC_ROW | pattern, up_flag);
929 committed |= pattern;
931 if (chords == brl_nbchords) {
932 k_unicode(vc, BRL_UC_ROW | committed, up_flag);
939 static void k_brl(struct vc_data *vc, unsigned char value, char up_flag)
941 static unsigned pressed, committing;
942 static unsigned long releasestart;
944 if (kbd->kbdmode != VC_UNICODE) {
946 pr_warning("keyboard mode must be unicode for braille patterns\n");
951 k_unicode(vc, BRL_UC_ROW, up_flag);
959 pressed |= 1 << (value - 1);
961 committing = pressed;
962 } else if (brl_timeout) {
965 releasestart + msecs_to_jiffies(brl_timeout))) {
966 committing = pressed;
967 releasestart = jiffies;
969 pressed &= ~(1 << (value - 1));
970 if (!pressed && committing) {
971 k_brlcommit(vc, committing, 0);
976 k_brlcommit(vc, committing, 0);
979 pressed &= ~(1 << (value - 1));
984 * The leds display either (i) the status of NumLock, CapsLock, ScrollLock,
985 * or (ii) whatever pattern of lights people want to show using KDSETLED,
986 * or (iii) specified bits of specified words in kernel memory.
988 static unsigned char getledstate(void)
993 void setledstate(struct kbd_struct *kbd, unsigned int led)
996 spin_lock_irqsave(&led_lock, flags);
999 kbd->ledmode = LED_SHOW_IOCTL;
1001 kbd->ledmode = LED_SHOW_FLAGS;
1004 spin_unlock_irqrestore(&led_lock, flags);
1007 static inline unsigned char getleds(void)
1009 struct kbd_struct *kbd = kbd_table + fg_console;
1013 if (kbd->ledmode == LED_SHOW_IOCTL)
1016 leds = kbd->ledflagstate;
1018 if (kbd->ledmode == LED_SHOW_MEM) {
1019 for (i = 0; i < 3; i++)
1020 if (ledptrs[i].valid) {
1021 if (*ledptrs[i].addr & ledptrs[i].mask)
1030 static int kbd_update_leds_helper(struct input_handle *handle, void *data)
1032 unsigned char leds = *(unsigned char *)data;
1034 if (test_bit(EV_LED, handle->dev->evbit)) {
1035 input_inject_event(handle, EV_LED, LED_SCROLLL, !!(leds & 0x01));
1036 input_inject_event(handle, EV_LED, LED_NUML, !!(leds & 0x02));
1037 input_inject_event(handle, EV_LED, LED_CAPSL, !!(leds & 0x04));
1038 input_inject_event(handle, EV_SYN, SYN_REPORT, 0);
1045 * vt_get_leds - helper for braille console
1046 * @console: console to read
1047 * @flag: flag we want to check
1049 * Check the status of a keyboard led flag and report it back
1051 int vt_get_leds(int console, int flag)
1053 struct kbd_struct * kbd = kbd_table + console;
1055 unsigned long flags;
1057 spin_lock_irqsave(&led_lock, flags);
1058 ret = vc_kbd_led(kbd, flag);
1059 spin_unlock_irqrestore(&led_lock, flags);
1063 EXPORT_SYMBOL_GPL(vt_get_leds);
1066 * vt_set_led_state - set LED state of a console
1067 * @console: console to set
1070 * Set the LEDs on a console. This is a wrapper for the VT layer
1071 * so that we can keep kbd knowledge internal
1073 void vt_set_led_state(int console, int leds)
1075 struct kbd_struct * kbd = kbd_table + console;
1076 setledstate(kbd, leds);
1080 * vt_kbd_con_start - Keyboard side of console start
1083 * Handle console start. This is a wrapper for the VT layer
1084 * so that we can keep kbd knowledge internal
1086 * FIXME: We eventually need to hold the kbd lock here to protect
1087 * the LED updating. We can't do it yet because fn_hold calls stop_tty
1088 * and start_tty under the kbd_event_lock, while normal tty paths
1089 * don't hold the lock. We probably need to split out an LED lock
1090 * but not during an -rc release!
1092 void vt_kbd_con_start(int console)
1094 struct kbd_struct * kbd = kbd_table + console;
1095 unsigned long flags;
1096 spin_lock_irqsave(&led_lock, flags);
1097 clr_vc_kbd_led(kbd, VC_SCROLLOCK);
1099 spin_unlock_irqrestore(&led_lock, flags);
1103 * vt_kbd_con_stop - Keyboard side of console stop
1106 * Handle console stop. This is a wrapper for the VT layer
1107 * so that we can keep kbd knowledge internal
1109 void vt_kbd_con_stop(int console)
1111 struct kbd_struct * kbd = kbd_table + console;
1112 unsigned long flags;
1113 spin_lock_irqsave(&led_lock, flags);
1114 set_vc_kbd_led(kbd, VC_SCROLLOCK);
1116 spin_unlock_irqrestore(&led_lock, flags);
1120 * This is the tasklet that updates LED state on all keyboards
1121 * attached to the box. The reason we use tasklet is that we
1122 * need to handle the scenario when keyboard handler is not
1123 * registered yet but we already getting updates from the VT to
1126 static void kbd_bh(unsigned long dummy)
1129 unsigned long flags;
1131 spin_lock_irqsave(&led_lock, flags);
1133 spin_unlock_irqrestore(&led_lock, flags);
1135 if (leds != ledstate) {
1136 input_handler_for_each_handle(&kbd_handler, &leds,
1137 kbd_update_leds_helper);
1142 DECLARE_TASKLET_DISABLED(keyboard_tasklet, kbd_bh, 0);
1144 #if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_ALPHA) ||\
1145 defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC) ||\
1146 defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) ||\
1147 (defined(CONFIG_ARM) && defined(CONFIG_KEYBOARD_ATKBD) && !defined(CONFIG_ARCH_RPC)) ||\
1148 defined(CONFIG_AVR32)
1150 #define HW_RAW(dev) (test_bit(EV_MSC, dev->evbit) && test_bit(MSC_RAW, dev->mscbit) &&\
1151 ((dev)->id.bustype == BUS_I8042) && ((dev)->id.vendor == 0x0001) && ((dev)->id.product == 0x0001))
1153 static const unsigned short x86_keycodes[256] =
1154 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
1155 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1156 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1157 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1158 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
1159 80, 81, 82, 83, 84,118, 86, 87, 88,115,120,119,121,112,123, 92,
1160 284,285,309, 0,312, 91,327,328,329,331,333,335,336,337,338,339,
1161 367,288,302,304,350, 89,334,326,267,126,268,269,125,347,348,349,
1162 360,261,262,263,268,376,100,101,321,316,373,286,289,102,351,355,
1163 103,104,105,275,287,279,258,106,274,107,294,364,358,363,362,361,
1164 291,108,381,281,290,272,292,305,280, 99,112,257,306,359,113,114,
1165 264,117,271,374,379,265,266, 93, 94, 95, 85,259,375,260, 90,116,
1166 377,109,111,277,278,282,283,295,296,297,299,300,301,293,303,307,
1167 308,310,313,314,315,317,318,319,320,357,322,323,324,325,276,330,
1168 332,340,365,342,343,344,345,346,356,270,341,368,369,370,371,372 };
1171 static int sparc_l1_a_state;
1172 extern void sun_do_break(void);
1175 static int emulate_raw(struct vc_data *vc, unsigned int keycode,
1176 unsigned char up_flag)
1183 put_queue(vc, 0xe1);
1184 put_queue(vc, 0x1d | up_flag);
1185 put_queue(vc, 0x45 | up_flag);
1190 put_queue(vc, 0xf2);
1195 put_queue(vc, 0xf1);
1200 * Real AT keyboards (that's what we're trying
1201 * to emulate here emit 0xe0 0x2a 0xe0 0x37 when
1202 * pressing PrtSc/SysRq alone, but simply 0x54
1203 * when pressing Alt+PrtSc/SysRq.
1205 if (test_bit(KEY_LEFTALT, key_down) ||
1206 test_bit(KEY_RIGHTALT, key_down)) {
1207 put_queue(vc, 0x54 | up_flag);
1209 put_queue(vc, 0xe0);
1210 put_queue(vc, 0x2a | up_flag);
1211 put_queue(vc, 0xe0);
1212 put_queue(vc, 0x37 | up_flag);
1220 code = x86_keycodes[keycode];
1225 put_queue(vc, 0xe0);
1226 put_queue(vc, (code & 0x7f) | up_flag);
1236 #define HW_RAW(dev) 0
1238 static int emulate_raw(struct vc_data *vc, unsigned int keycode, unsigned char up_flag)
1243 put_queue(vc, keycode | up_flag);
1248 static void kbd_rawcode(unsigned char data)
1250 struct vc_data *vc = vc_cons[fg_console].d;
1252 kbd = kbd_table + vc->vc_num;
1253 if (kbd->kbdmode == VC_RAW)
1254 put_queue(vc, data);
1257 static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
1259 struct vc_data *vc = vc_cons[fg_console].d;
1260 unsigned short keysym, *key_map;
1263 struct tty_struct *tty;
1265 struct keyboard_notifier_param param = { .vc = vc, .value = keycode, .down = down };
1270 if (tty && (!tty->driver_data)) {
1271 /* No driver data? Strange. Okay we fix it then. */
1272 tty->driver_data = vc;
1275 kbd = kbd_table + vc->vc_num;
1278 if (keycode == KEY_STOP)
1279 sparc_l1_a_state = down;
1284 raw_mode = (kbd->kbdmode == VC_RAW);
1285 if (raw_mode && !hw_raw)
1286 if (emulate_raw(vc, keycode, !down << 7))
1287 if (keycode < BTN_MISC && printk_ratelimit())
1288 pr_warning("can't emulate rawmode for keycode %d\n",
1292 if (keycode == KEY_A && sparc_l1_a_state) {
1293 sparc_l1_a_state = false;
1298 if (kbd->kbdmode == VC_MEDIUMRAW) {
1300 * This is extended medium raw mode, with keys above 127
1301 * encoded as 0, high 7 bits, low 7 bits, with the 0 bearing
1302 * the 'up' flag if needed. 0 is reserved, so this shouldn't
1303 * interfere with anything else. The two bytes after 0 will
1304 * always have the up flag set not to interfere with older
1305 * applications. This allows for 16384 different keycodes,
1306 * which should be enough.
1308 if (keycode < 128) {
1309 put_queue(vc, keycode | (!down << 7));
1311 put_queue(vc, !down << 7);
1312 put_queue(vc, (keycode >> 7) | 0x80);
1313 put_queue(vc, keycode | 0x80);
1319 set_bit(keycode, key_down);
1321 clear_bit(keycode, key_down);
1324 (!vc_kbd_mode(kbd, VC_REPEAT) ||
1325 (tty && !L_ECHO(tty) && tty_chars_in_buffer(tty)))) {
1327 * Don't repeat a key if the input buffers are not empty and the
1328 * characters get aren't echoed locally. This makes key repeat
1329 * usable with slow applications and under heavy loads.
1334 param.shift = shift_final = (shift_state | kbd->slockstate) ^ kbd->lockstate;
1335 param.ledstate = kbd->ledflagstate;
1336 key_map = key_maps[shift_final];
1338 rc = atomic_notifier_call_chain(&keyboard_notifier_list,
1339 KBD_KEYCODE, ¶m);
1340 if (rc == NOTIFY_STOP || !key_map) {
1341 atomic_notifier_call_chain(&keyboard_notifier_list,
1342 KBD_UNBOUND_KEYCODE, ¶m);
1343 do_compute_shiftstate();
1344 kbd->slockstate = 0;
1348 if (keycode < NR_KEYS)
1349 keysym = key_map[keycode];
1350 else if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8)
1351 keysym = U(K(KT_BRL, keycode - KEY_BRL_DOT1 + 1));
1355 type = KTYP(keysym);
1358 param.value = keysym;
1359 rc = atomic_notifier_call_chain(&keyboard_notifier_list,
1360 KBD_UNICODE, ¶m);
1361 if (rc != NOTIFY_STOP)
1362 if (down && !raw_mode)
1363 to_utf8(vc, keysym);
1369 if (type == KT_LETTER) {
1371 if (vc_kbd_led(kbd, VC_CAPSLOCK)) {
1372 key_map = key_maps[shift_final ^ (1 << KG_SHIFT)];
1374 keysym = key_map[keycode];
1378 param.value = keysym;
1379 rc = atomic_notifier_call_chain(&keyboard_notifier_list,
1380 KBD_KEYSYM, ¶m);
1381 if (rc == NOTIFY_STOP)
1384 if ((raw_mode || kbd->kbdmode == VC_OFF) && type != KT_SPEC && type != KT_SHIFT)
1387 (*k_handler[type])(vc, keysym & 0xff, !down);
1389 param.ledstate = kbd->ledflagstate;
1390 atomic_notifier_call_chain(&keyboard_notifier_list, KBD_POST_KEYSYM, ¶m);
1392 if (type != KT_SLOCK)
1393 kbd->slockstate = 0;
1396 static void kbd_event(struct input_handle *handle, unsigned int event_type,
1397 unsigned int event_code, int value)
1399 /* We are called with interrupts disabled, just take the lock */
1400 spin_lock(&kbd_event_lock);
1402 if (event_type == EV_MSC && event_code == MSC_RAW && HW_RAW(handle->dev))
1404 if (event_type == EV_KEY)
1405 kbd_keycode(event_code, value, HW_RAW(handle->dev));
1407 spin_unlock(&kbd_event_lock);
1409 tasklet_schedule(&keyboard_tasklet);
1410 do_poke_blanked_console = 1;
1411 schedule_console_callback();
1414 static bool kbd_match(struct input_handler *handler, struct input_dev *dev)
1418 if (test_bit(EV_SND, dev->evbit))
1421 if (test_bit(EV_KEY, dev->evbit)) {
1422 for (i = KEY_RESERVED; i < BTN_MISC; i++)
1423 if (test_bit(i, dev->keybit))
1425 for (i = KEY_BRL_DOT1; i <= KEY_BRL_DOT10; i++)
1426 if (test_bit(i, dev->keybit))
1434 * When a keyboard (or other input device) is found, the kbd_connect
1435 * function is called. The function then looks at the device, and if it
1436 * likes it, it can open it and get events from it. In this (kbd_connect)
1437 * function, we should decide which VT to bind that keyboard to initially.
1439 static int kbd_connect(struct input_handler *handler, struct input_dev *dev,
1440 const struct input_device_id *id)
1442 struct input_handle *handle;
1445 handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);
1450 handle->handler = handler;
1451 handle->name = "kbd";
1453 error = input_register_handle(handle);
1455 goto err_free_handle;
1457 error = input_open_device(handle);
1459 goto err_unregister_handle;
1463 err_unregister_handle:
1464 input_unregister_handle(handle);
1470 static void kbd_disconnect(struct input_handle *handle)
1472 input_close_device(handle);
1473 input_unregister_handle(handle);
1478 * Start keyboard handler on the new keyboard by refreshing LED state to
1479 * match the rest of the system.
1481 static void kbd_start(struct input_handle *handle)
1483 tasklet_disable(&keyboard_tasklet);
1485 if (ledstate != 0xff)
1486 kbd_update_leds_helper(handle, &ledstate);
1488 tasklet_enable(&keyboard_tasklet);
1491 static const struct input_device_id kbd_ids[] = {
1493 .flags = INPUT_DEVICE_ID_MATCH_EVBIT,
1494 .evbit = { BIT_MASK(EV_KEY) },
1498 .flags = INPUT_DEVICE_ID_MATCH_EVBIT,
1499 .evbit = { BIT_MASK(EV_SND) },
1502 { }, /* Terminating entry */
1505 MODULE_DEVICE_TABLE(input, kbd_ids);
1507 static struct input_handler kbd_handler = {
1510 .connect = kbd_connect,
1511 .disconnect = kbd_disconnect,
1514 .id_table = kbd_ids,
1517 int __init kbd_init(void)
1522 for (i = 0; i < MAX_NR_CONSOLES; i++) {
1523 kbd_table[i].ledflagstate = kbd_defleds();
1524 kbd_table[i].default_ledflagstate = kbd_defleds();
1525 kbd_table[i].ledmode = LED_SHOW_FLAGS;
1526 kbd_table[i].lockstate = KBD_DEFLOCK;
1527 kbd_table[i].slockstate = 0;
1528 kbd_table[i].modeflags = KBD_DEFMODE;
1529 kbd_table[i].kbdmode = default_utf8 ? VC_UNICODE : VC_XLATE;
1532 error = input_register_handler(&kbd_handler);
1536 tasklet_enable(&keyboard_tasklet);
1537 tasklet_schedule(&keyboard_tasklet);
1542 /* Ioctl support code */
1545 * vt_do_diacrit - diacritical table updates
1546 * @cmd: ioctl request
1547 * @up: pointer to user data for ioctl
1548 * @perm: permissions check computed by caller
1550 * Update the diacritical tables atomically and safely. Lock them
1551 * against simultaneous keypresses
1553 int vt_do_diacrit(unsigned int cmd, void __user *up, int perm)
1555 struct kbdiacrs __user *a = up;
1556 unsigned long flags;
1563 struct kbdiacr *diacr;
1566 diacr = kmalloc(MAX_DIACR * sizeof(struct kbdiacr),
1571 /* Lock the diacriticals table, make a copy and then
1572 copy it after we unlock */
1573 spin_lock_irqsave(&kbd_event_lock, flags);
1575 asize = accent_table_size;
1576 for (i = 0; i < asize; i++) {
1577 diacr[i].diacr = conv_uni_to_8bit(
1578 accent_table[i].diacr);
1579 diacr[i].base = conv_uni_to_8bit(
1580 accent_table[i].base);
1581 diacr[i].result = conv_uni_to_8bit(
1582 accent_table[i].result);
1584 spin_unlock_irqrestore(&kbd_event_lock, flags);
1586 if (put_user(asize, &a->kb_cnt))
1588 else if (copy_to_user(a->kbdiacr, diacr,
1589 asize * sizeof(struct kbdiacr)))
1596 struct kbdiacrsuc __user *a = up;
1599 buf = kmalloc(MAX_DIACR * sizeof(struct kbdiacruc),
1604 /* Lock the diacriticals table, make a copy and then
1605 copy it after we unlock */
1606 spin_lock_irqsave(&kbd_event_lock, flags);
1608 asize = accent_table_size;
1609 memcpy(buf, accent_table, asize * sizeof(struct kbdiacruc));
1611 spin_unlock_irqrestore(&kbd_event_lock, flags);
1613 if (put_user(asize, &a->kb_cnt))
1615 else if (copy_to_user(a->kbdiacruc, buf,
1616 asize*sizeof(struct kbdiacruc)))
1624 struct kbdiacrs __user *a = up;
1625 struct kbdiacr *diacr = NULL;
1631 if (get_user(ct, &a->kb_cnt))
1633 if (ct >= MAX_DIACR)
1637 diacr = kmalloc(sizeof(struct kbdiacr) * ct,
1642 if (copy_from_user(diacr, a->kbdiacr,
1643 sizeof(struct kbdiacr) * ct)) {
1649 spin_lock_irqsave(&kbd_event_lock, flags);
1650 accent_table_size = ct;
1651 for (i = 0; i < ct; i++) {
1652 accent_table[i].diacr =
1653 conv_8bit_to_uni(diacr[i].diacr);
1654 accent_table[i].base =
1655 conv_8bit_to_uni(diacr[i].base);
1656 accent_table[i].result =
1657 conv_8bit_to_uni(diacr[i].result);
1659 spin_unlock_irqrestore(&kbd_event_lock, flags);
1666 struct kbdiacrsuc __user *a = up;
1673 if (get_user(ct, &a->kb_cnt))
1676 if (ct >= MAX_DIACR)
1680 buf = kmalloc(ct * sizeof(struct kbdiacruc),
1685 if (copy_from_user(buf, a->kbdiacruc,
1686 ct * sizeof(struct kbdiacruc))) {
1691 spin_lock_irqsave(&kbd_event_lock, flags);
1693 memcpy(accent_table, buf,
1694 ct * sizeof(struct kbdiacruc));
1695 accent_table_size = ct;
1696 spin_unlock_irqrestore(&kbd_event_lock, flags);
1705 * vt_do_kdskbmode - set keyboard mode ioctl
1706 * @console: the console to use
1707 * @arg: the requested mode
1709 * Update the keyboard mode bits while holding the correct locks.
1710 * Return 0 for success or an error code.
1712 int vt_do_kdskbmode(int console, unsigned int arg)
1714 struct kbd_struct * kbd = kbd_table + console;
1716 unsigned long flags;
1718 spin_lock_irqsave(&kbd_event_lock, flags);
1721 kbd->kbdmode = VC_RAW;
1724 kbd->kbdmode = VC_MEDIUMRAW;
1727 kbd->kbdmode = VC_XLATE;
1728 do_compute_shiftstate();
1731 kbd->kbdmode = VC_UNICODE;
1732 do_compute_shiftstate();
1735 kbd->kbdmode = VC_OFF;
1740 spin_unlock_irqrestore(&kbd_event_lock, flags);
1745 * vt_do_kdskbmeta - set keyboard meta state
1746 * @console: the console to use
1747 * @arg: the requested meta state
1749 * Update the keyboard meta bits while holding the correct locks.
1750 * Return 0 for success or an error code.
1752 int vt_do_kdskbmeta(int console, unsigned int arg)
1754 struct kbd_struct * kbd = kbd_table + console;
1756 unsigned long flags;
1758 spin_lock_irqsave(&kbd_event_lock, flags);
1761 clr_vc_kbd_mode(kbd, VC_META);
1764 set_vc_kbd_mode(kbd, VC_META);
1769 spin_unlock_irqrestore(&kbd_event_lock, flags);
1773 int vt_do_kbkeycode_ioctl(int cmd, struct kbkeycode __user *user_kbkc,
1776 struct kbkeycode tmp;
1779 if (copy_from_user(&tmp, user_kbkc, sizeof(struct kbkeycode)))
1783 kc = getkeycode(tmp.scancode);
1785 kc = put_user(kc, &user_kbkc->keycode);
1790 kc = setkeycode(tmp.scancode, tmp.keycode);
1796 #define i (tmp.kb_index)
1797 #define s (tmp.kb_table)
1798 #define v (tmp.kb_value)
1800 int vt_do_kdsk_ioctl(int cmd, struct kbentry __user *user_kbe, int perm,
1803 struct kbd_struct * kbd = kbd_table + console;
1805 ushort *key_map, *new_map, val, ov;
1806 unsigned long flags;
1808 if (copy_from_user(&tmp, user_kbe, sizeof(struct kbentry)))
1811 if (!capable(CAP_SYS_TTY_CONFIG))
1816 /* Ensure another thread doesn't free it under us */
1817 spin_lock_irqsave(&kbd_event_lock, flags);
1818 key_map = key_maps[s];
1820 val = U(key_map[i]);
1821 if (kbd->kbdmode != VC_UNICODE && KTYP(val) >= NR_TYPES)
1824 val = (i ? K_HOLE : K_NOSUCHMAP);
1825 spin_unlock_irqrestore(&kbd_event_lock, flags);
1826 return put_user(val, &user_kbe->kb_value);
1830 if (!i && v == K_NOSUCHMAP) {
1831 spin_lock_irqsave(&kbd_event_lock, flags);
1832 /* deallocate map */
1833 key_map = key_maps[s];
1836 if (key_map[0] == U(K_ALLOCATED)) {
1841 spin_unlock_irqrestore(&kbd_event_lock, flags);
1845 if (KTYP(v) < NR_TYPES) {
1846 if (KVAL(v) > max_vals[KTYP(v)])
1849 if (kbd->kbdmode != VC_UNICODE)
1852 /* ++Geert: non-PC keyboards may generate keycode zero */
1853 #if !defined(__mc68000__) && !defined(__powerpc__)
1854 /* assignment to entry 0 only tests validity of args */
1859 new_map = kmalloc(sizeof(plain_map), GFP_KERNEL);
1862 spin_lock_irqsave(&kbd_event_lock, flags);
1863 key_map = key_maps[s];
1864 if (key_map == NULL) {
1867 if (keymap_count >= MAX_NR_OF_USER_KEYMAPS &&
1868 !capable(CAP_SYS_RESOURCE)) {
1869 spin_unlock_irqrestore(&kbd_event_lock, flags);
1873 key_maps[s] = new_map;
1875 key_map[0] = U(K_ALLOCATED);
1876 for (j = 1; j < NR_KEYS; j++)
1877 key_map[j] = U(K_HOLE);
1888 if (((ov == K_SAK) || (v == K_SAK)) && !capable(CAP_SYS_ADMIN)) {
1889 spin_unlock_irqrestore(&kbd_event_lock, flags);
1893 if (!s && (KTYP(ov) == KT_SHIFT || KTYP(v) == KT_SHIFT))
1894 do_compute_shiftstate();
1896 spin_unlock_irqrestore(&kbd_event_lock, flags);
1905 /* FIXME: This one needs untangling and locking */
1906 int vt_do_kdgkb_ioctl(int cmd, struct kbsentry __user *user_kdgkb, int perm)
1908 struct kbsentry *kbs;
1914 char *first_free, *fj, *fnw;
1918 if (!capable(CAP_SYS_TTY_CONFIG))
1921 kbs = kmalloc(sizeof(*kbs), GFP_KERNEL);
1927 /* we mostly copy too much here (512bytes), but who cares ;) */
1928 if (copy_from_user(kbs, user_kdgkb, sizeof(struct kbsentry))) {
1932 kbs->kb_string[sizeof(kbs->kb_string)-1] = '\0';
1937 sz = sizeof(kbs->kb_string) - 1; /* sz should have been
1939 up = user_kdgkb->kb_string;
1942 for ( ; *p && sz; p++, sz--)
1943 if (put_user(*p, up++)) {
1947 if (put_user('\0', up)) {
1952 return ((p && *p) ? -EOVERFLOW : 0);
1960 first_free = funcbufptr + (funcbufsize - funcbufleft);
1961 for (j = i+1; j < MAX_NR_FUNC && !func_table[j]; j++)
1963 if (j < MAX_NR_FUNC)
1968 delta = (q ? -strlen(q) : 1) + strlen(kbs->kb_string);
1969 if (delta <= funcbufleft) { /* it fits in current buf */
1970 if (j < MAX_NR_FUNC) {
1971 memmove(fj + delta, fj, first_free - fj);
1972 for (k = j; k < MAX_NR_FUNC; k++)
1974 func_table[k] += delta;
1978 funcbufleft -= delta;
1979 } else { /* allocate a larger buffer */
1981 while (sz < funcbufsize - funcbufleft + delta)
1983 fnw = kmalloc(sz, GFP_KERNEL);
1991 if (fj > funcbufptr)
1992 memmove(fnw, funcbufptr, fj - funcbufptr);
1993 for (k = 0; k < j; k++)
1995 func_table[k] = fnw + (func_table[k] - funcbufptr);
1997 if (first_free > fj) {
1998 memmove(fnw + (fj - funcbufptr) + delta, fj, first_free - fj);
1999 for (k = j; k < MAX_NR_FUNC; k++)
2001 func_table[k] = fnw + (func_table[k] - funcbufptr) + delta;
2003 if (funcbufptr != func_buf)
2006 funcbufleft = funcbufleft - delta + sz - funcbufsize;
2009 strcpy(func_table[i], kbs->kb_string);
2018 int vt_do_kdskled(int console, int cmd, unsigned long arg, int perm)
2020 struct kbd_struct * kbd = kbd_table + console;
2021 unsigned long flags;
2022 unsigned char ucval;
2025 /* the ioctls below read/set the flags usually shown in the leds */
2026 /* don't use them - they will go away without warning */
2028 spin_lock_irqsave(&kbd_event_lock, flags);
2029 ucval = kbd->ledflagstate | (kbd->default_ledflagstate << 4);
2030 spin_unlock_irqrestore(&kbd_event_lock, flags);
2031 return put_user(ucval, (char __user *)arg);
2038 spin_lock_irqsave(&led_lock, flags);
2039 kbd->ledflagstate = (arg & 7);
2040 kbd->default_ledflagstate = ((arg >> 4) & 7);
2042 spin_unlock_irqrestore(&led_lock, flags);
2045 /* the ioctls below only set the lights, not the functions */
2046 /* for those, see KDGKBLED and KDSKBLED above */
2048 ucval = getledstate();
2049 return put_user(ucval, (char __user *)arg);
2054 setledstate(kbd, arg);
2057 return -ENOIOCTLCMD;
2060 int vt_do_kdgkbmode(int console)
2062 struct kbd_struct * kbd = kbd_table + console;
2063 /* This is a spot read so needs no locking */
2064 switch (kbd->kbdmode) {
2079 * vt_do_kdgkbmeta - report meta status
2080 * @console: console to report
2082 * Report the meta flag status of this console
2084 int vt_do_kdgkbmeta(int console)
2086 struct kbd_struct * kbd = kbd_table + console;
2087 /* Again a spot read so no locking */
2088 return vc_kbd_mode(kbd, VC_META) ? K_ESCPREFIX : K_METABIT;
2092 * vt_reset_unicode - reset the unicode status
2093 * @console: console being reset
2095 * Restore the unicode console state to its default
2097 void vt_reset_unicode(int console)
2099 unsigned long flags;
2101 spin_lock_irqsave(&kbd_event_lock, flags);
2102 kbd_table[console].kbdmode = default_utf8 ? VC_UNICODE : VC_XLATE;
2103 spin_unlock_irqrestore(&kbd_event_lock, flags);
2107 * vt_get_shiftstate - shift bit state
2109 * Report the shift bits from the keyboard state. We have to export
2110 * this to support some oddities in the vt layer.
2112 int vt_get_shift_state(void)
2114 /* Don't lock as this is a transient report */
2119 * vt_reset_keyboard - reset keyboard state
2120 * @console: console to reset
2122 * Reset the keyboard bits for a console as part of a general console
2125 void vt_reset_keyboard(int console)
2127 struct kbd_struct * kbd = kbd_table + console;
2128 unsigned long flags;
2130 spin_lock_irqsave(&kbd_event_lock, flags);
2131 set_vc_kbd_mode(kbd, VC_REPEAT);
2132 clr_vc_kbd_mode(kbd, VC_CKMODE);
2133 clr_vc_kbd_mode(kbd, VC_APPLIC);
2134 clr_vc_kbd_mode(kbd, VC_CRLF);
2136 kbd->slockstate = 0;
2137 spin_lock(&led_lock);
2138 kbd->ledmode = LED_SHOW_FLAGS;
2139 kbd->ledflagstate = kbd->default_ledflagstate;
2140 spin_unlock(&led_lock);
2141 /* do not do set_leds here because this causes an endless tasklet loop
2142 when the keyboard hasn't been initialized yet */
2143 spin_unlock_irqrestore(&kbd_event_lock, flags);
2147 * vt_get_kbd_mode_bit - read keyboard status bits
2148 * @console: console to read from
2149 * @bit: mode bit to read
2151 * Report back a vt mode bit. We do this without locking so the
2152 * caller must be sure that there are no synchronization needs
2155 int vt_get_kbd_mode_bit(int console, int bit)
2157 struct kbd_struct * kbd = kbd_table + console;
2158 return vc_kbd_mode(kbd, bit);
2162 * vt_set_kbd_mode_bit - read keyboard status bits
2163 * @console: console to read from
2164 * @bit: mode bit to read
2166 * Set a vt mode bit. We do this without locking so the
2167 * caller must be sure that there are no synchronization needs
2170 void vt_set_kbd_mode_bit(int console, int bit)
2172 struct kbd_struct * kbd = kbd_table + console;
2173 unsigned long flags;
2175 spin_lock_irqsave(&kbd_event_lock, flags);
2176 set_vc_kbd_mode(kbd, bit);
2177 spin_unlock_irqrestore(&kbd_event_lock, flags);
2181 * vt_clr_kbd_mode_bit - read keyboard status bits
2182 * @console: console to read from
2183 * @bit: mode bit to read
2185 * Report back a vt mode bit. We do this without locking so the
2186 * caller must be sure that there are no synchronization needs
2189 void vt_clr_kbd_mode_bit(int console, int bit)
2191 struct kbd_struct * kbd = kbd_table + console;
2192 unsigned long flags;
2194 spin_lock_irqsave(&kbd_event_lock, flags);
2195 clr_vc_kbd_mode(kbd, bit);
2196 spin_unlock_irqrestore(&kbd_event_lock, flags);