2 * linux/drivers/char/keyboard.c
4 * Written for linux by Johan Myreen as a translation from
5 * the assembly version by Linus (with diacriticals added)
7 * Some additional features added by Christoph Niemann (ChN), March 1993
9 * Loadable keymaps by Risto Kankkunen, May 1993
11 * Diacriticals redone & other small changes, aeb@cwi.nl, June 1993
12 * Added decr/incr_console, dynamic keymaps, Unicode support,
13 * dynamic function/string keys, led setting, Sept 1994
14 * `Sticky' modifier keys, 951006.
16 * 11-11-96: SAK should now work in the raw mode (Martin Mares)
18 * Modified to provide 'generic' keyboard support by Hamish Macdonald
19 * Merge with the m68k keyboard driver and split-off of the PC low-level
20 * parts by Geert Uytterhoeven, May 1997
22 * 27-05-97: Added support for the Magic SysRq Key (Martin Mares)
23 * 30-07-98: Dead keys redone, aeb@cwi.nl.
24 * 21-08-02: Converted to input API, major cleanup. (Vojtech Pavlik)
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>
36 #include <linux/irq.h>
38 #include <linux/kbd_kern.h>
39 #include <linux/kbd_diacr.h>
40 #include <linux/vt_kern.h>
41 #include <linux/sysrq.h>
42 #include <linux/input.h>
43 #include <linux/reboot.h>
45 extern void ctrl_alt_del(void);
48 * Exported functions/variables
51 #define KBD_DEFMODE ((1 << VC_REPEAT) | (1 << VC_META))
54 * Some laptops take the 789uiojklm,. keys as number pad when NumLock is on.
55 * This seems a good reason to start with NumLock off. On HIL keyboards
56 * of PARISC machines however there is no NumLock key and everyone expects the keypad
57 * to be used for numbers.
60 #if defined(CONFIG_PARISC) && (defined(CONFIG_KEYBOARD_HIL) || defined(CONFIG_KEYBOARD_HIL_OLD))
61 #define KBD_DEFLEDS (1 << VC_NUMLOCK)
68 void compute_shiftstate(void);
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,\
78 k_slock, k_dead2, k_brl, k_ignore
80 typedef void (k_handler_fn
)(struct vc_data
*vc
, unsigned char value
,
82 static k_handler_fn K_HANDLERS
;
83 static k_handler_fn
*k_handler
[16] = { K_HANDLERS
};
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
92 typedef void (fn_handler_fn
)(struct vc_data
*vc
);
93 static fn_handler_fn FN_HANDLERS
;
94 static fn_handler_fn
*fn_handler
[] = { FN_HANDLERS
};
97 * Variables exported for vt_ioctl.c
100 /* maximum values each key_handler can handle */
101 const int max_vals
[] = {
102 255, ARRAY_SIZE(func_table
) - 1, ARRAY_SIZE(fn_handler
) - 1, NR_PAD
- 1,
103 NR_DEAD
- 1, 255, 3, NR_SHIFT
- 1, 255, NR_ASCII
- 1, NR_LOCK
- 1,
104 255, NR_LOCK
- 1, 255, NR_BRL
- 1
107 const int NR_TYPES
= ARRAY_SIZE(max_vals
);
109 struct kbd_struct kbd_table
[MAX_NR_CONSOLES
];
110 static struct kbd_struct
*kbd
= kbd_table
;
112 struct vt_spawn_console vt_spawn_con
= {
113 .lock
= __SPIN_LOCK_UNLOCKED(vt_spawn_con
.lock
),
119 * Variables exported for vt.c
128 static struct input_handler kbd_handler
;
129 static unsigned long key_down
[NBITS(KEY_MAX
)]; /* keyboard key bitmap */
130 static unsigned char shift_down
[NR_SHIFT
]; /* shift state counters.. */
131 static int dead_key_next
;
132 static int npadch
= -1; /* -1 or number assembled on pad */
133 static unsigned int diacr
;
134 static char rep
; /* flag telling character repeat */
136 static unsigned char ledstate
= 0xff; /* undefined */
137 static unsigned char ledioctl
;
139 static struct ledptr
{
142 unsigned char valid
:1;
145 /* Simple translation table for the SysRq keys */
147 #ifdef CONFIG_MAGIC_SYSRQ
148 unsigned char kbd_sysrq_xlate
[KEY_MAX
+ 1] =
149 "\000\0331234567890-=\177\t" /* 0x00 - 0x0f */
150 "qwertyuiop[]\r\000as" /* 0x10 - 0x1f */
151 "dfghjkl;'`\000\\zxcv" /* 0x20 - 0x2f */
152 "bnm,./\000*\000 \000\201\202\203\204\205" /* 0x30 - 0x3f */
153 "\206\207\210\211\212\000\000789-456+1" /* 0x40 - 0x4f */
154 "230\177\000\000\213\214\000\000\000\000\000\000\000\000\000\000" /* 0x50 - 0x5f */
155 "\r\000/"; /* 0x60 - 0x6f */
156 static int sysrq_down
;
157 static int sysrq_alt_use
;
159 static int sysrq_alt
;
162 * Translation of scancodes to keycodes. We set them on only the first
163 * keyboard in the list that accepts the scancode and keycode.
164 * Explanation for not choosing the first attached keyboard anymore:
165 * USB keyboards for example have two event devices: one for all "normal"
166 * keys and one for extra function keys (like "volume up", "make coffee",
167 * etc.). So this means that scancodes for the extra function keys won't
168 * be valid for the first event device, but will be for the second.
170 int getkeycode(unsigned int scancode
)
172 struct input_handle
*handle
;
176 list_for_each_entry(handle
, &kbd_handler
.h_list
, h_node
) {
177 error
= handle
->dev
->getkeycode(handle
->dev
, scancode
, &keycode
);
185 int setkeycode(unsigned int scancode
, unsigned int keycode
)
187 struct input_handle
*handle
;
190 list_for_each_entry(handle
, &kbd_handler
.h_list
, h_node
) {
191 error
= handle
->dev
->setkeycode(handle
->dev
, scancode
, keycode
);
200 * Making beeps and bells.
202 static void kd_nosound(unsigned long ignored
)
204 struct input_handle
*handle
;
206 list_for_each_entry(handle
, &kbd_handler
.h_list
, h_node
) {
207 if (test_bit(EV_SND
, handle
->dev
->evbit
)) {
208 if (test_bit(SND_TONE
, handle
->dev
->sndbit
))
209 input_inject_event(handle
, EV_SND
, SND_TONE
, 0);
210 if (test_bit(SND_BELL
, handle
->dev
->sndbit
))
211 input_inject_event(handle
, EV_SND
, SND_BELL
, 0);
216 static DEFINE_TIMER(kd_mksound_timer
, kd_nosound
, 0, 0);
218 void kd_mksound(unsigned int hz
, unsigned int ticks
)
220 struct list_head
*node
;
222 del_timer(&kd_mksound_timer
);
225 list_for_each_prev(node
, &kbd_handler
.h_list
) {
226 struct input_handle
*handle
= to_handle_h(node
);
227 if (test_bit(EV_SND
, handle
->dev
->evbit
)) {
228 if (test_bit(SND_TONE
, handle
->dev
->sndbit
)) {
229 input_inject_event(handle
, EV_SND
, SND_TONE
, hz
);
232 if (test_bit(SND_BELL
, handle
->dev
->sndbit
)) {
233 input_inject_event(handle
, EV_SND
, SND_BELL
, 1);
239 mod_timer(&kd_mksound_timer
, jiffies
+ ticks
);
245 * Setting the keyboard rate.
248 int kbd_rate(struct kbd_repeat
*rep
)
250 struct list_head
*node
;
254 list_for_each(node
, &kbd_handler
.h_list
) {
255 struct input_handle
*handle
= to_handle_h(node
);
256 struct input_dev
*dev
= handle
->dev
;
258 if (test_bit(EV_REP
, dev
->evbit
)) {
260 input_inject_event(handle
, EV_REP
, REP_DELAY
, rep
->delay
);
262 input_inject_event(handle
, EV_REP
, REP_PERIOD
, rep
->period
);
263 d
= dev
->rep
[REP_DELAY
];
264 p
= dev
->rep
[REP_PERIOD
];
275 static void put_queue(struct vc_data
*vc
, int ch
)
277 struct tty_struct
*tty
= vc
->vc_tty
;
280 tty_insert_flip_char(tty
, ch
, 0);
281 con_schedule_flip(tty
);
285 static void puts_queue(struct vc_data
*vc
, char *cp
)
287 struct tty_struct
*tty
= vc
->vc_tty
;
293 tty_insert_flip_char(tty
, *cp
, 0);
296 con_schedule_flip(tty
);
299 static void applkey(struct vc_data
*vc
, int key
, char mode
)
301 static char buf
[] = { 0x1b, 'O', 0x00, 0x00 };
303 buf
[1] = (mode
? 'O' : '[');
309 * Many other routines do put_queue, but I think either
310 * they produce ASCII, or they produce some user-assigned
311 * string, and in both cases we might assume that it is
314 static void to_utf8(struct vc_data
*vc
, uint c
)
319 else if (c
< 0x800) {
320 /* 110***** 10****** */
321 put_queue(vc
, 0xc0 | (c
>> 6));
322 put_queue(vc
, 0x80 | (c
& 0x3f));
323 } else if (c
< 0x10000) {
324 if (c
>= 0xD800 && c
< 0xE000)
328 /* 1110**** 10****** 10****** */
329 put_queue(vc
, 0xe0 | (c
>> 12));
330 put_queue(vc
, 0x80 | ((c
>> 6) & 0x3f));
331 put_queue(vc
, 0x80 | (c
& 0x3f));
332 } else if (c
< 0x110000) {
333 /* 11110*** 10****** 10****** 10****** */
334 put_queue(vc
, 0xf0 | (c
>> 18));
335 put_queue(vc
, 0x80 | ((c
>> 12) & 0x3f));
336 put_queue(vc
, 0x80 | ((c
>> 6) & 0x3f));
337 put_queue(vc
, 0x80 | (c
& 0x3f));
342 * Called after returning from RAW mode or when changing consoles - recompute
343 * shift_down[] and shift_state from key_down[] maybe called when keymap is
344 * undefined, so that shiftkey release is seen
346 void compute_shiftstate(void)
348 unsigned int i
, j
, k
, sym
, val
;
351 memset(shift_down
, 0, sizeof(shift_down
));
353 for (i
= 0; i
< ARRAY_SIZE(key_down
); i
++) {
358 k
= i
* BITS_PER_LONG
;
360 for (j
= 0; j
< BITS_PER_LONG
; j
++, k
++) {
362 if (!test_bit(k
, key_down
))
365 sym
= U(key_maps
[0][k
]);
366 if (KTYP(sym
) != KT_SHIFT
&& KTYP(sym
) != KT_SLOCK
)
370 if (val
== KVAL(K_CAPSSHIFT
))
374 shift_state
|= (1 << val
);
380 * We have a combining character DIACR here, followed by the character CH.
381 * If the combination occurs in the table, return the corresponding value.
382 * Otherwise, if CH is a space or equals DIACR, return DIACR.
383 * Otherwise, conclude that DIACR was not combining after all,
384 * queue it and return CH.
386 static unsigned int handle_diacr(struct vc_data
*vc
, unsigned int ch
)
388 unsigned int d
= diacr
;
393 if ((d
& ~0xff) == BRL_UC_ROW
) {
394 if ((ch
& ~0xff) == BRL_UC_ROW
)
397 for (i
= 0; i
< accent_table_size
; i
++)
398 if (accent_table
[i
].diacr
== d
&& accent_table
[i
].base
== ch
)
399 return accent_table
[i
].result
;
402 if (ch
== ' ' || ch
== (BRL_UC_ROW
|0) || ch
== d
)
405 if (kbd
->kbdmode
== VC_UNICODE
)
406 to_utf8(vc
, conv_8bit_to_uni(d
));
414 * Special function handlers
416 static void fn_enter(struct vc_data
*vc
)
419 if (kbd
->kbdmode
== VC_UNICODE
)
420 to_utf8(vc
, conv_8bit_to_uni(diacr
));
421 else if (diacr
< 0x100)
422 put_queue(vc
, diacr
);
426 if (vc_kbd_mode(kbd
, VC_CRLF
))
430 static void fn_caps_toggle(struct vc_data
*vc
)
434 chg_vc_kbd_led(kbd
, VC_CAPSLOCK
);
437 static void fn_caps_on(struct vc_data
*vc
)
441 set_vc_kbd_led(kbd
, VC_CAPSLOCK
);
444 static void fn_show_ptregs(struct vc_data
*vc
)
446 struct pt_regs
*regs
= get_irq_regs();
451 static void fn_hold(struct vc_data
*vc
)
453 struct tty_struct
*tty
= vc
->vc_tty
;
459 * Note: SCROLLOCK will be set (cleared) by stop_tty (start_tty);
460 * these routines are also activated by ^S/^Q.
461 * (And SCROLLOCK can also be set by the ioctl KDSKBLED.)
469 static void fn_num(struct vc_data
*vc
)
471 if (vc_kbd_mode(kbd
,VC_APPLIC
))
478 * Bind this to Shift-NumLock if you work in application keypad mode
479 * but want to be able to change the NumLock flag.
480 * Bind this to NumLock if you prefer that the NumLock key always
481 * changes the NumLock flag.
483 static void fn_bare_num(struct vc_data
*vc
)
486 chg_vc_kbd_led(kbd
, VC_NUMLOCK
);
489 static void fn_lastcons(struct vc_data
*vc
)
491 /* switch to the last used console, ChN */
492 set_console(last_console
);
495 static void fn_dec_console(struct vc_data
*vc
)
497 int i
, cur
= fg_console
;
499 /* Currently switching? Queue this next switch relative to that. */
500 if (want_console
!= -1)
503 for (i
= cur
- 1; i
!= cur
; i
--) {
505 i
= MAX_NR_CONSOLES
- 1;
506 if (vc_cons_allocated(i
))
512 static void fn_inc_console(struct vc_data
*vc
)
514 int i
, cur
= fg_console
;
516 /* Currently switching? Queue this next switch relative to that. */
517 if (want_console
!= -1)
520 for (i
= cur
+1; i
!= cur
; i
++) {
521 if (i
== MAX_NR_CONSOLES
)
523 if (vc_cons_allocated(i
))
529 static void fn_send_intr(struct vc_data
*vc
)
531 struct tty_struct
*tty
= vc
->vc_tty
;
535 tty_insert_flip_char(tty
, 0, TTY_BREAK
);
536 con_schedule_flip(tty
);
539 static void fn_scroll_forw(struct vc_data
*vc
)
544 static void fn_scroll_back(struct vc_data
*vc
)
549 static void fn_show_mem(struct vc_data
*vc
)
554 static void fn_show_state(struct vc_data
*vc
)
559 static void fn_boot_it(struct vc_data
*vc
)
564 static void fn_compose(struct vc_data
*vc
)
569 static void fn_spawn_con(struct vc_data
*vc
)
571 spin_lock(&vt_spawn_con
.lock
);
572 if (vt_spawn_con
.pid
)
573 if (kill_pid(vt_spawn_con
.pid
, vt_spawn_con
.sig
, 1)) {
574 put_pid(vt_spawn_con
.pid
);
575 vt_spawn_con
.pid
= NULL
;
577 spin_unlock(&vt_spawn_con
.lock
);
580 static void fn_SAK(struct vc_data
*vc
)
582 struct work_struct
*SAK_work
= &vc_cons
[fg_console
].SAK_work
;
583 schedule_work(SAK_work
);
586 static void fn_null(struct vc_data
*vc
)
588 compute_shiftstate();
592 * Special key handlers
594 static void k_ignore(struct vc_data
*vc
, unsigned char value
, char up_flag
)
598 static void k_spec(struct vc_data
*vc
, unsigned char value
, char up_flag
)
602 if (value
>= ARRAY_SIZE(fn_handler
))
604 if ((kbd
->kbdmode
== VC_RAW
||
605 kbd
->kbdmode
== VC_MEDIUMRAW
) &&
606 value
!= KVAL(K_SAK
))
607 return; /* SAK is allowed even in raw mode */
608 fn_handler
[value
](vc
);
611 static void k_lowercase(struct vc_data
*vc
, unsigned char value
, char up_flag
)
613 printk(KERN_ERR
"keyboard.c: k_lowercase was called - impossible\n");
616 static void k_unicode(struct vc_data
*vc
, unsigned int value
, char up_flag
)
619 return; /* no action, if this is a key release */
622 value
= handle_diacr(vc
, value
);
629 if (kbd
->kbdmode
== VC_UNICODE
)
630 to_utf8(vc
, conv_8bit_to_uni(value
));
631 else if (value
< 0x100)
632 put_queue(vc
, value
);
636 * Handle dead key. Note that we now may have several
637 * dead keys modifying the same character. Very useful
640 static void k_deadunicode(struct vc_data
*vc
, unsigned int value
, char up_flag
)
644 diacr
= (diacr
? handle_diacr(vc
, value
) : value
);
647 static void k_self(struct vc_data
*vc
, unsigned char value
, char up_flag
)
649 k_unicode(vc
, value
, up_flag
);
652 static void k_dead2(struct vc_data
*vc
, unsigned char value
, char up_flag
)
654 k_deadunicode(vc
, value
, up_flag
);
658 * Obsolete - for backwards compatibility only
660 static void k_dead(struct vc_data
*vc
, unsigned char value
, char up_flag
)
662 static const unsigned char ret_diacr
[NR_DEAD
] = {'`', '\'', '^', '~', '"', ',' };
663 value
= ret_diacr
[value
];
664 k_deadunicode(vc
, value
, up_flag
);
667 static void k_cons(struct vc_data
*vc
, unsigned char value
, char up_flag
)
674 static void k_fn(struct vc_data
*vc
, unsigned char value
, char up_flag
)
681 if (v
< ARRAY_SIZE(func_table
)) {
682 if (func_table
[value
])
683 puts_queue(vc
, func_table
[value
]);
685 printk(KERN_ERR
"k_fn called with value=%d\n", value
);
688 static void k_cur(struct vc_data
*vc
, unsigned char value
, char up_flag
)
690 static const char cur_chars
[] = "BDCA";
694 applkey(vc
, cur_chars
[value
], vc_kbd_mode(kbd
, VC_CKMODE
));
697 static void k_pad(struct vc_data
*vc
, unsigned char value
, char up_flag
)
699 static const char pad_chars
[] = "0123456789+-*/\015,.?()#";
700 static const char app_map
[] = "pqrstuvwxylSRQMnnmPQS";
703 return; /* no action, if this is a key release */
705 /* kludge... shift forces cursor/number keys */
706 if (vc_kbd_mode(kbd
, VC_APPLIC
) && !shift_down
[KG_SHIFT
]) {
707 applkey(vc
, app_map
[value
], 1);
711 if (!vc_kbd_led(kbd
, VC_NUMLOCK
))
715 k_fn(vc
, KVAL(K_REMOVE
), 0);
718 k_fn(vc
, KVAL(K_INSERT
), 0);
721 k_fn(vc
, KVAL(K_SELECT
), 0);
724 k_cur(vc
, KVAL(K_DOWN
), 0);
727 k_fn(vc
, KVAL(K_PGDN
), 0);
730 k_cur(vc
, KVAL(K_LEFT
), 0);
733 k_cur(vc
, KVAL(K_RIGHT
), 0);
736 k_fn(vc
, KVAL(K_FIND
), 0);
739 k_cur(vc
, KVAL(K_UP
), 0);
742 k_fn(vc
, KVAL(K_PGUP
), 0);
745 applkey(vc
, 'G', vc_kbd_mode(kbd
, VC_APPLIC
));
749 put_queue(vc
, pad_chars
[value
]);
750 if (value
== KVAL(K_PENTER
) && vc_kbd_mode(kbd
, VC_CRLF
))
754 static void k_shift(struct vc_data
*vc
, unsigned char value
, char up_flag
)
756 int old_state
= shift_state
;
762 * a CapsShift key acts like Shift but undoes CapsLock
764 if (value
== KVAL(K_CAPSSHIFT
)) {
765 value
= KVAL(K_SHIFT
);
767 clr_vc_kbd_led(kbd
, VC_CAPSLOCK
);
772 * handle the case that two shift or control
773 * keys are depressed simultaneously
775 if (shift_down
[value
])
780 if (shift_down
[value
])
781 shift_state
|= (1 << value
);
783 shift_state
&= ~(1 << value
);
786 if (up_flag
&& shift_state
!= old_state
&& npadch
!= -1) {
787 if (kbd
->kbdmode
== VC_UNICODE
)
790 put_queue(vc
, npadch
& 0xff);
795 static void k_meta(struct vc_data
*vc
, unsigned char value
, char up_flag
)
800 if (vc_kbd_mode(kbd
, VC_META
)) {
801 put_queue(vc
, '\033');
802 put_queue(vc
, value
);
804 put_queue(vc
, value
| 0x80);
807 static void k_ascii(struct vc_data
*vc
, unsigned char value
, char up_flag
)
815 /* decimal input of code, while Alt depressed */
818 /* hexadecimal input of code, while AltGr depressed */
826 npadch
= npadch
* base
+ value
;
829 static void k_lock(struct vc_data
*vc
, unsigned char value
, char up_flag
)
833 chg_vc_kbd_lock(kbd
, value
);
836 static void k_slock(struct vc_data
*vc
, unsigned char value
, char up_flag
)
838 k_shift(vc
, value
, up_flag
);
841 chg_vc_kbd_slock(kbd
, value
);
842 /* try to make Alt, oops, AltGr and such work */
843 if (!key_maps
[kbd
->lockstate
^ kbd
->slockstate
]) {
845 chg_vc_kbd_slock(kbd
, value
);
849 /* by default, 300ms interval for combination release */
850 static unsigned brl_timeout
= 300;
851 MODULE_PARM_DESC(brl_timeout
, "Braille keys release delay in ms (0 for commit on first key release)");
852 module_param(brl_timeout
, uint
, 0644);
854 static unsigned brl_nbchords
= 1;
855 MODULE_PARM_DESC(brl_nbchords
, "Number of chords that produce a braille pattern (0 for dead chords)");
856 module_param(brl_nbchords
, uint
, 0644);
858 static void k_brlcommit(struct vc_data
*vc
, unsigned int pattern
, char up_flag
)
860 static unsigned long chords
;
861 static unsigned committed
;
864 k_deadunicode(vc
, BRL_UC_ROW
| pattern
, up_flag
);
866 committed
|= pattern
;
868 if (chords
== brl_nbchords
) {
869 k_unicode(vc
, BRL_UC_ROW
| committed
, up_flag
);
876 static void k_brl(struct vc_data
*vc
, unsigned char value
, char up_flag
)
878 static unsigned pressed
,committing
;
879 static unsigned long releasestart
;
881 if (kbd
->kbdmode
!= VC_UNICODE
) {
883 printk("keyboard mode must be unicode for braille patterns\n");
888 k_unicode(vc
, BRL_UC_ROW
, up_flag
);
898 jiffies
- releasestart
> (brl_timeout
* HZ
) / 1000) {
899 committing
= pressed
;
900 releasestart
= jiffies
;
902 pressed
&= ~(1 << (value
- 1));
905 k_brlcommit(vc
, committing
, 0);
911 k_brlcommit(vc
, committing
, 0);
914 pressed
&= ~(1 << (value
- 1));
917 pressed
|= 1 << (value
- 1);
919 committing
= pressed
;
924 * The leds display either (i) the status of NumLock, CapsLock, ScrollLock,
925 * or (ii) whatever pattern of lights people want to show using KDSETLED,
926 * or (iii) specified bits of specified words in kernel memory.
928 unsigned char getledstate(void)
933 void setledstate(struct kbd_struct
*kbd
, unsigned int led
)
937 kbd
->ledmode
= LED_SHOW_IOCTL
;
939 kbd
->ledmode
= LED_SHOW_FLAGS
;
943 static inline unsigned char getleds(void)
945 struct kbd_struct
*kbd
= kbd_table
+ fg_console
;
949 if (kbd
->ledmode
== LED_SHOW_IOCTL
)
952 leds
= kbd
->ledflagstate
;
954 if (kbd
->ledmode
== LED_SHOW_MEM
) {
955 for (i
= 0; i
< 3; i
++)
956 if (ledptrs
[i
].valid
) {
957 if (*ledptrs
[i
].addr
& ledptrs
[i
].mask
)
967 * This routine is the bottom half of the keyboard interrupt
968 * routine, and runs with all interrupts enabled. It does
969 * console changing, led setting and copy_to_cooked, which can
970 * take a reasonably long time.
972 * Aside from timing (which isn't really that important for
973 * keyboard interrupts as they happen often), using the software
974 * interrupt routines for this thing allows us to easily mask
975 * this when we don't want any of the above to happen.
976 * This allows for easy and efficient race-condition prevention
977 * for kbd_start => input_inject_event(dev, EV_LED, ...) => ...
980 static void kbd_bh(unsigned long dummy
)
982 struct list_head
*node
;
983 unsigned char leds
= getleds();
985 if (leds
!= ledstate
) {
986 list_for_each(node
, &kbd_handler
.h_list
) {
987 struct input_handle
*handle
= to_handle_h(node
);
988 input_inject_event(handle
, EV_LED
, LED_SCROLLL
, !!(leds
& 0x01));
989 input_inject_event(handle
, EV_LED
, LED_NUML
, !!(leds
& 0x02));
990 input_inject_event(handle
, EV_LED
, LED_CAPSL
, !!(leds
& 0x04));
991 input_inject_event(handle
, EV_SYN
, SYN_REPORT
, 0);
998 DECLARE_TASKLET_DISABLED(keyboard_tasklet
, kbd_bh
, 0);
1000 #if defined(CONFIG_X86) || defined(CONFIG_IA64) || defined(CONFIG_ALPHA) ||\
1001 defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC) ||\
1002 defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) ||\
1003 (defined(CONFIG_ARM) && defined(CONFIG_KEYBOARD_ATKBD) && !defined(CONFIG_ARCH_RPC))
1005 #define HW_RAW(dev) (test_bit(EV_MSC, dev->evbit) && test_bit(MSC_RAW, dev->mscbit) &&\
1006 ((dev)->id.bustype == BUS_I8042) && ((dev)->id.vendor == 0x0001) && ((dev)->id.product == 0x0001))
1008 static const unsigned short x86_keycodes
[256] =
1009 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
1010 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1011 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1012 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
1013 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
1014 80, 81, 82, 83, 84,118, 86, 87, 88,115,120,119,121,112,123, 92,
1015 284,285,309, 0,312, 91,327,328,329,331,333,335,336,337,338,339,
1016 367,288,302,304,350, 89,334,326,267,126,268,269,125,347,348,349,
1017 360,261,262,263,268,376,100,101,321,316,373,286,289,102,351,355,
1018 103,104,105,275,287,279,258,106,274,107,294,364,358,363,362,361,
1019 291,108,381,281,290,272,292,305,280, 99,112,257,306,359,113,114,
1020 264,117,271,374,379,265,266, 93, 94, 95, 85,259,375,260, 90,116,
1021 377,109,111,277,278,282,283,295,296,297,299,300,301,293,303,307,
1022 308,310,313,314,315,317,318,319,320,357,322,323,324,325,276,330,
1023 332,340,365,342,343,344,345,346,356,270,341,368,369,370,371,372 };
1025 #ifdef CONFIG_MAC_EMUMOUSEBTN
1026 extern int mac_hid_mouse_emulate_buttons(int, int, int);
1027 #endif /* CONFIG_MAC_EMUMOUSEBTN */
1030 static int sparc_l1_a_state
= 0;
1031 extern void sun_do_break(void);
1034 static int emulate_raw(struct vc_data
*vc
, unsigned int keycode
,
1035 unsigned char up_flag
)
1041 put_queue(vc
, 0xe1);
1042 put_queue(vc
, 0x1d | up_flag
);
1043 put_queue(vc
, 0x45 | up_flag
);
1048 put_queue(vc
, 0xf2);
1053 put_queue(vc
, 0xf1);
1058 * Real AT keyboards (that's what we're trying
1059 * to emulate here emit 0xe0 0x2a 0xe0 0x37 when
1060 * pressing PrtSc/SysRq alone, but simply 0x54
1061 * when pressing Alt+PrtSc/SysRq.
1064 put_queue(vc
, 0x54 | up_flag
);
1066 put_queue(vc
, 0xe0);
1067 put_queue(vc
, 0x2a | up_flag
);
1068 put_queue(vc
, 0xe0);
1069 put_queue(vc
, 0x37 | up_flag
);
1077 code
= x86_keycodes
[keycode
];
1082 put_queue(vc
, 0xe0);
1083 put_queue(vc
, (code
& 0x7f) | up_flag
);
1093 #define HW_RAW(dev) 0
1095 #warning "Cannot generate rawmode keyboard for your architecture yet."
1097 static int emulate_raw(struct vc_data
*vc
, unsigned int keycode
, unsigned char up_flag
)
1102 put_queue(vc
, keycode
| up_flag
);
1107 static void kbd_rawcode(unsigned char data
)
1109 struct vc_data
*vc
= vc_cons
[fg_console
].d
;
1110 kbd
= kbd_table
+ fg_console
;
1111 if (kbd
->kbdmode
== VC_RAW
)
1112 put_queue(vc
, data
);
1115 static void kbd_keycode(unsigned int keycode
, int down
, int hw_raw
)
1117 struct vc_data
*vc
= vc_cons
[fg_console
].d
;
1118 unsigned short keysym
, *key_map
;
1119 unsigned char type
, raw_mode
;
1120 struct tty_struct
*tty
;
1125 if (tty
&& (!tty
->driver_data
)) {
1126 /* No driver data? Strange. Okay we fix it then. */
1127 tty
->driver_data
= vc
;
1130 kbd
= kbd_table
+ fg_console
;
1132 if (keycode
== KEY_LEFTALT
|| keycode
== KEY_RIGHTALT
)
1133 sysrq_alt
= down
? keycode
: 0;
1135 if (keycode
== KEY_STOP
)
1136 sparc_l1_a_state
= down
;
1141 #ifdef CONFIG_MAC_EMUMOUSEBTN
1142 if (mac_hid_mouse_emulate_buttons(1, keycode
, down
))
1144 #endif /* CONFIG_MAC_EMUMOUSEBTN */
1146 if ((raw_mode
= (kbd
->kbdmode
== VC_RAW
)) && !hw_raw
)
1147 if (emulate_raw(vc
, keycode
, !down
<< 7))
1148 if (keycode
< BTN_MISC
&& printk_ratelimit())
1149 printk(KERN_WARNING
"keyboard.c: can't emulate rawmode for keycode %d\n", keycode
);
1151 #ifdef CONFIG_MAGIC_SYSRQ /* Handle the SysRq Hack */
1152 if (keycode
== KEY_SYSRQ
&& (sysrq_down
|| (down
== 1 && sysrq_alt
))) {
1155 sysrq_alt_use
= sysrq_alt
;
1159 if (sysrq_down
&& !down
&& keycode
== sysrq_alt_use
)
1161 if (sysrq_down
&& down
&& !rep
) {
1162 handle_sysrq(kbd_sysrq_xlate
[keycode
], tty
);
1167 if (keycode
== KEY_A
&& sparc_l1_a_state
) {
1168 sparc_l1_a_state
= 0;
1173 if (kbd
->kbdmode
== VC_MEDIUMRAW
) {
1175 * This is extended medium raw mode, with keys above 127
1176 * encoded as 0, high 7 bits, low 7 bits, with the 0 bearing
1177 * the 'up' flag if needed. 0 is reserved, so this shouldn't
1178 * interfere with anything else. The two bytes after 0 will
1179 * always have the up flag set not to interfere with older
1180 * applications. This allows for 16384 different keycodes,
1181 * which should be enough.
1183 if (keycode
< 128) {
1184 put_queue(vc
, keycode
| (!down
<< 7));
1186 put_queue(vc
, !down
<< 7);
1187 put_queue(vc
, (keycode
>> 7) | 0x80);
1188 put_queue(vc
, keycode
| 0x80);
1194 set_bit(keycode
, key_down
);
1196 clear_bit(keycode
, key_down
);
1199 (!vc_kbd_mode(kbd
, VC_REPEAT
) ||
1200 (tty
&& !L_ECHO(tty
) && tty
->driver
->chars_in_buffer(tty
)))) {
1202 * Don't repeat a key if the input buffers are not empty and the
1203 * characters get aren't echoed locally. This makes key repeat
1204 * usable with slow applications and under heavy loads.
1209 shift_final
= (shift_state
| kbd
->slockstate
) ^ kbd
->lockstate
;
1210 key_map
= key_maps
[shift_final
];
1213 compute_shiftstate();
1214 kbd
->slockstate
= 0;
1218 if (keycode
> NR_KEYS
)
1219 if (keycode
>= KEY_BRL_DOT1
&& keycode
<= KEY_BRL_DOT8
)
1220 keysym
= K(KT_BRL
, keycode
- KEY_BRL_DOT1
+ 1);
1224 keysym
= key_map
[keycode
];
1226 type
= KTYP(keysym
);
1229 if (down
&& !raw_mode
)
1230 to_utf8(vc
, keysym
);
1236 if (raw_mode
&& type
!= KT_SPEC
&& type
!= KT_SHIFT
)
1239 if (type
== KT_LETTER
) {
1241 if (vc_kbd_led(kbd
, VC_CAPSLOCK
)) {
1242 key_map
= key_maps
[shift_final
^ (1 << KG_SHIFT
)];
1244 keysym
= key_map
[keycode
];
1248 (*k_handler
[type
])(vc
, keysym
& 0xff, !down
);
1250 if (type
!= KT_SLOCK
)
1251 kbd
->slockstate
= 0;
1254 static void kbd_event(struct input_handle
*handle
, unsigned int event_type
,
1255 unsigned int event_code
, int value
)
1257 if (event_type
== EV_MSC
&& event_code
== MSC_RAW
&& HW_RAW(handle
->dev
))
1259 if (event_type
== EV_KEY
)
1260 kbd_keycode(event_code
, value
, HW_RAW(handle
->dev
));
1261 tasklet_schedule(&keyboard_tasklet
);
1262 do_poke_blanked_console
= 1;
1263 schedule_console_callback();
1267 * When a keyboard (or other input device) is found, the kbd_connect
1268 * function is called. The function then looks at the device, and if it
1269 * likes it, it can open it and get events from it. In this (kbd_connect)
1270 * function, we should decide which VT to bind that keyboard to initially.
1272 static int kbd_connect(struct input_handler
*handler
, struct input_dev
*dev
,
1273 const struct input_device_id
*id
)
1275 struct input_handle
*handle
;
1279 for (i
= KEY_RESERVED
; i
< BTN_MISC
; i
++)
1280 if (test_bit(i
, dev
->keybit
))
1283 if (i
== BTN_MISC
&& !test_bit(EV_SND
, dev
->evbit
))
1286 handle
= kzalloc(sizeof(struct input_handle
), GFP_KERNEL
);
1291 handle
->handler
= handler
;
1292 handle
->name
= "kbd";
1294 error
= input_register_handle(handle
);
1296 goto err_free_handle
;
1298 error
= input_open_device(handle
);
1300 goto err_unregister_handle
;
1304 err_unregister_handle
:
1305 input_unregister_handle(handle
);
1311 static void kbd_disconnect(struct input_handle
*handle
)
1313 input_close_device(handle
);
1314 input_unregister_handle(handle
);
1319 * Start keyboard handler on the new keyboard by refreshing LED state to
1320 * match the rest of the system.
1322 static void kbd_start(struct input_handle
*handle
)
1324 unsigned char leds
= ledstate
;
1326 tasklet_disable(&keyboard_tasklet
);
1328 input_inject_event(handle
, EV_LED
, LED_SCROLLL
, !!(leds
& 0x01));
1329 input_inject_event(handle
, EV_LED
, LED_NUML
, !!(leds
& 0x02));
1330 input_inject_event(handle
, EV_LED
, LED_CAPSL
, !!(leds
& 0x04));
1331 input_inject_event(handle
, EV_SYN
, SYN_REPORT
, 0);
1333 tasklet_enable(&keyboard_tasklet
);
1336 static const struct input_device_id kbd_ids
[] = {
1338 .flags
= INPUT_DEVICE_ID_MATCH_EVBIT
,
1339 .evbit
= { BIT(EV_KEY
) },
1343 .flags
= INPUT_DEVICE_ID_MATCH_EVBIT
,
1344 .evbit
= { BIT(EV_SND
) },
1347 { }, /* Terminating entry */
1350 MODULE_DEVICE_TABLE(input
, kbd_ids
);
1352 static struct input_handler kbd_handler
= {
1354 .connect
= kbd_connect
,
1355 .disconnect
= kbd_disconnect
,
1358 .id_table
= kbd_ids
,
1361 int __init
kbd_init(void)
1366 for (i
= 0; i
< MAX_NR_CONSOLES
; i
++) {
1367 kbd_table
[i
].ledflagstate
= KBD_DEFLEDS
;
1368 kbd_table
[i
].default_ledflagstate
= KBD_DEFLEDS
;
1369 kbd_table
[i
].ledmode
= LED_SHOW_FLAGS
;
1370 kbd_table
[i
].lockstate
= KBD_DEFLOCK
;
1371 kbd_table
[i
].slockstate
= 0;
1372 kbd_table
[i
].modeflags
= KBD_DEFMODE
;
1373 kbd_table
[i
].kbdmode
= VC_XLATE
;
1376 error
= input_register_handler(&kbd_handler
);
1380 tasklet_enable(&keyboard_tasklet
);
1381 tasklet_schedule(&keyboard_tasklet
);