mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 14:44:10 +08:00
Input: keyboard - fix formatting issues
Also convert few variables to 'bool'. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
parent
9272e9a2f8
commit
e0785572ce
@ -133,7 +133,7 @@ static struct input_handler kbd_handler;
|
||||
static DEFINE_SPINLOCK(kbd_event_lock);
|
||||
static unsigned long key_down[BITS_TO_LONGS(KEY_CNT)]; /* keyboard key bitmap */
|
||||
static unsigned char shift_down[NR_SHIFT]; /* shift state counters.. */
|
||||
static int dead_key_next;
|
||||
static bool dead_key_next;
|
||||
static int npadch = -1; /* -1 or number assembled on pad */
|
||||
static unsigned int diacr;
|
||||
static char rep; /* flag telling character repeat */
|
||||
@ -345,8 +345,8 @@ static void to_utf8(struct vc_data *vc, uint c)
|
||||
/* 110***** 10****** */
|
||||
put_queue(vc, 0xc0 | (c >> 6));
|
||||
put_queue(vc, 0x80 | (c & 0x3f));
|
||||
} else if (c < 0x10000) {
|
||||
if (c >= 0xD800 && c < 0xE000)
|
||||
} else if (c < 0x10000) {
|
||||
if (c >= 0xD800 && c < 0xE000)
|
||||
return;
|
||||
if (c == 0xFFFF)
|
||||
return;
|
||||
@ -354,7 +354,7 @@ static void to_utf8(struct vc_data *vc, uint c)
|
||||
put_queue(vc, 0xe0 | (c >> 12));
|
||||
put_queue(vc, 0x80 | ((c >> 6) & 0x3f));
|
||||
put_queue(vc, 0x80 | (c & 0x3f));
|
||||
} else if (c < 0x110000) {
|
||||
} else if (c < 0x110000) {
|
||||
/* 11110*** 10****** 10****** 10****** */
|
||||
put_queue(vc, 0xf0 | (c >> 18));
|
||||
put_queue(vc, 0x80 | ((c >> 12) & 0x3f));
|
||||
@ -453,6 +453,7 @@ static void fn_enter(struct vc_data *vc)
|
||||
}
|
||||
diacr = 0;
|
||||
}
|
||||
|
||||
put_queue(vc, 13);
|
||||
if (vc_kbd_mode(kbd, VC_CRLF))
|
||||
put_queue(vc, 10);
|
||||
@ -462,6 +463,7 @@ static void fn_caps_toggle(struct vc_data *vc)
|
||||
{
|
||||
if (rep)
|
||||
return;
|
||||
|
||||
chg_vc_kbd_led(kbd, VC_CAPSLOCK);
|
||||
}
|
||||
|
||||
@ -469,12 +471,14 @@ static void fn_caps_on(struct vc_data *vc)
|
||||
{
|
||||
if (rep)
|
||||
return;
|
||||
|
||||
set_vc_kbd_led(kbd, VC_CAPSLOCK);
|
||||
}
|
||||
|
||||
static void fn_show_ptregs(struct vc_data *vc)
|
||||
{
|
||||
struct pt_regs *regs = get_irq_regs();
|
||||
|
||||
if (regs)
|
||||
show_regs(regs);
|
||||
}
|
||||
@ -499,7 +503,7 @@ static void fn_hold(struct vc_data *vc)
|
||||
|
||||
static void fn_num(struct vc_data *vc)
|
||||
{
|
||||
if (vc_kbd_mode(kbd,VC_APPLIC))
|
||||
if (vc_kbd_mode(kbd, VC_APPLIC))
|
||||
applkey(vc, 'P', 1);
|
||||
else
|
||||
fn_bare_num(vc);
|
||||
@ -594,7 +598,7 @@ static void fn_boot_it(struct vc_data *vc)
|
||||
|
||||
static void fn_compose(struct vc_data *vc)
|
||||
{
|
||||
dead_key_next = 1;
|
||||
dead_key_next = true;
|
||||
}
|
||||
|
||||
static void fn_spawn_con(struct vc_data *vc)
|
||||
@ -653,7 +657,7 @@ static void k_unicode(struct vc_data *vc, unsigned int value, char up_flag)
|
||||
value = handle_diacr(vc, value);
|
||||
|
||||
if (dead_key_next) {
|
||||
dead_key_next = 0;
|
||||
dead_key_next = false;
|
||||
diacr = value;
|
||||
return;
|
||||
}
|
||||
@ -675,6 +679,7 @@ static void k_deadunicode(struct vc_data *vc, unsigned int value, char up_flag)
|
||||
{
|
||||
if (up_flag)
|
||||
return;
|
||||
|
||||
diacr = (diacr ? handle_diacr(vc, value) : value);
|
||||
}
|
||||
|
||||
@ -694,25 +699,24 @@ static void k_dead2(struct vc_data *vc, unsigned char value, char up_flag)
|
||||
static void k_dead(struct vc_data *vc, unsigned char value, char up_flag)
|
||||
{
|
||||
static const unsigned char ret_diacr[NR_DEAD] = {'`', '\'', '^', '~', '"', ',' };
|
||||
value = ret_diacr[value];
|
||||
k_deadunicode(vc, value, up_flag);
|
||||
|
||||
k_deadunicode(vc, ret_diacr[value], up_flag);
|
||||
}
|
||||
|
||||
static void k_cons(struct vc_data *vc, unsigned char value, char up_flag)
|
||||
{
|
||||
if (up_flag)
|
||||
return;
|
||||
|
||||
set_console(value);
|
||||
}
|
||||
|
||||
static void k_fn(struct vc_data *vc, unsigned char value, char up_flag)
|
||||
{
|
||||
unsigned v;
|
||||
|
||||
if (up_flag)
|
||||
return;
|
||||
v = value;
|
||||
if (v < ARRAY_SIZE(func_table)) {
|
||||
|
||||
if ((unsigned)value < ARRAY_SIZE(func_table)) {
|
||||
if (func_table[value])
|
||||
puts_queue(vc, func_table[value]);
|
||||
} else
|
||||
@ -725,6 +729,7 @@ static void k_cur(struct vc_data *vc, unsigned char value, char up_flag)
|
||||
|
||||
if (up_flag)
|
||||
return;
|
||||
|
||||
applkey(vc, cur_chars[value], vc_kbd_mode(kbd, VC_CKMODE));
|
||||
}
|
||||
|
||||
@ -742,43 +747,45 @@ static void k_pad(struct vc_data *vc, unsigned char value, char up_flag)
|
||||
return;
|
||||
}
|
||||
|
||||
if (!vc_kbd_led(kbd, VC_NUMLOCK))
|
||||
if (!vc_kbd_led(kbd, VC_NUMLOCK)) {
|
||||
|
||||
switch (value) {
|
||||
case KVAL(K_PCOMMA):
|
||||
case KVAL(K_PDOT):
|
||||
k_fn(vc, KVAL(K_REMOVE), 0);
|
||||
return;
|
||||
case KVAL(K_P0):
|
||||
k_fn(vc, KVAL(K_INSERT), 0);
|
||||
return;
|
||||
case KVAL(K_P1):
|
||||
k_fn(vc, KVAL(K_SELECT), 0);
|
||||
return;
|
||||
case KVAL(K_P2):
|
||||
k_cur(vc, KVAL(K_DOWN), 0);
|
||||
return;
|
||||
case KVAL(K_P3):
|
||||
k_fn(vc, KVAL(K_PGDN), 0);
|
||||
return;
|
||||
case KVAL(K_P4):
|
||||
k_cur(vc, KVAL(K_LEFT), 0);
|
||||
return;
|
||||
case KVAL(K_P6):
|
||||
k_cur(vc, KVAL(K_RIGHT), 0);
|
||||
return;
|
||||
case KVAL(K_P7):
|
||||
k_fn(vc, KVAL(K_FIND), 0);
|
||||
return;
|
||||
case KVAL(K_P8):
|
||||
k_cur(vc, KVAL(K_UP), 0);
|
||||
return;
|
||||
case KVAL(K_P9):
|
||||
k_fn(vc, KVAL(K_PGUP), 0);
|
||||
return;
|
||||
case KVAL(K_P5):
|
||||
applkey(vc, 'G', vc_kbd_mode(kbd, VC_APPLIC));
|
||||
return;
|
||||
case KVAL(K_PCOMMA):
|
||||
case KVAL(K_PDOT):
|
||||
k_fn(vc, KVAL(K_REMOVE), 0);
|
||||
return;
|
||||
case KVAL(K_P0):
|
||||
k_fn(vc, KVAL(K_INSERT), 0);
|
||||
return;
|
||||
case KVAL(K_P1):
|
||||
k_fn(vc, KVAL(K_SELECT), 0);
|
||||
return;
|
||||
case KVAL(K_P2):
|
||||
k_cur(vc, KVAL(K_DOWN), 0);
|
||||
return;
|
||||
case KVAL(K_P3):
|
||||
k_fn(vc, KVAL(K_PGDN), 0);
|
||||
return;
|
||||
case KVAL(K_P4):
|
||||
k_cur(vc, KVAL(K_LEFT), 0);
|
||||
return;
|
||||
case KVAL(K_P6):
|
||||
k_cur(vc, KVAL(K_RIGHT), 0);
|
||||
return;
|
||||
case KVAL(K_P7):
|
||||
k_fn(vc, KVAL(K_FIND), 0);
|
||||
return;
|
||||
case KVAL(K_P8):
|
||||
k_cur(vc, KVAL(K_UP), 0);
|
||||
return;
|
||||
case KVAL(K_P9):
|
||||
k_fn(vc, KVAL(K_PGUP), 0);
|
||||
return;
|
||||
case KVAL(K_P5):
|
||||
applkey(vc, 'G', vc_kbd_mode(kbd, VC_APPLIC));
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
put_queue(vc, pad_chars[value]);
|
||||
if (value == KVAL(K_PENTER) && vc_kbd_mode(kbd, VC_CRLF))
|
||||
@ -864,6 +871,7 @@ static void k_lock(struct vc_data *vc, unsigned char value, char up_flag)
|
||||
{
|
||||
if (up_flag || rep)
|
||||
return;
|
||||
|
||||
chg_vc_kbd_lock(kbd, value);
|
||||
}
|
||||
|
||||
@ -872,6 +880,7 @@ static void k_slock(struct vc_data *vc, unsigned char value, char up_flag)
|
||||
k_shift(vc, value, up_flag);
|
||||
if (up_flag || rep)
|
||||
return;
|
||||
|
||||
chg_vc_kbd_slock(kbd, value);
|
||||
/* try to make Alt, oops, AltGr and such work */
|
||||
if (!key_maps[kbd->lockstate ^ kbd->slockstate]) {
|
||||
@ -909,7 +918,7 @@ static void k_brlcommit(struct vc_data *vc, unsigned int pattern, char up_flag)
|
||||
|
||||
static void k_brl(struct vc_data *vc, unsigned char value, char up_flag)
|
||||
{
|
||||
static unsigned pressed,committing;
|
||||
static unsigned pressed, committing;
|
||||
static unsigned long releasestart;
|
||||
|
||||
if (kbd->kbdmode != VC_UNICODE) {
|
||||
@ -926,32 +935,28 @@ static void k_brl(struct vc_data *vc, unsigned char value, char up_flag)
|
||||
if (value > 8)
|
||||
return;
|
||||
|
||||
if (up_flag) {
|
||||
if (brl_timeout) {
|
||||
if (!committing ||
|
||||
time_after(jiffies,
|
||||
releasestart + msecs_to_jiffies(brl_timeout))) {
|
||||
committing = pressed;
|
||||
releasestart = jiffies;
|
||||
}
|
||||
pressed &= ~(1 << (value - 1));
|
||||
if (!pressed) {
|
||||
if (committing) {
|
||||
k_brlcommit(vc, committing, 0);
|
||||
committing = 0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (committing) {
|
||||
k_brlcommit(vc, committing, 0);
|
||||
committing = 0;
|
||||
}
|
||||
pressed &= ~(1 << (value - 1));
|
||||
}
|
||||
} else {
|
||||
if (!up_flag) {
|
||||
pressed |= 1 << (value - 1);
|
||||
if (!brl_timeout)
|
||||
committing = pressed;
|
||||
} else if (brl_timeout) {
|
||||
if (!committing ||
|
||||
time_after(jiffies,
|
||||
releasestart + msecs_to_jiffies(brl_timeout))) {
|
||||
committing = pressed;
|
||||
releasestart = jiffies;
|
||||
}
|
||||
pressed &= ~(1 << (value - 1));
|
||||
if (!pressed && committing) {
|
||||
k_brlcommit(vc, committing, 0);
|
||||
committing = 0;
|
||||
}
|
||||
} else {
|
||||
if (committing) {
|
||||
k_brlcommit(vc, committing, 0);
|
||||
committing = 0;
|
||||
}
|
||||
pressed &= ~(1 << (value - 1));
|
||||
}
|
||||
}
|
||||
|
||||
@ -972,6 +977,7 @@ void setledstate(struct kbd_struct *kbd, unsigned int led)
|
||||
kbd->ledmode = LED_SHOW_IOCTL;
|
||||
} else
|
||||
kbd->ledmode = LED_SHOW_FLAGS;
|
||||
|
||||
set_leds();
|
||||
}
|
||||
|
||||
@ -1059,7 +1065,7 @@ static const unsigned short x86_keycodes[256] =
|
||||
332,340,365,342,343,344,345,346,356,270,341,368,369,370,371,372 };
|
||||
|
||||
#ifdef CONFIG_SPARC
|
||||
static int sparc_l1_a_state = 0;
|
||||
static int sparc_l1_a_state;
|
||||
extern void sun_do_break(void);
|
||||
#endif
|
||||
|
||||
@ -1069,53 +1075,54 @@ static int emulate_raw(struct vc_data *vc, unsigned int keycode,
|
||||
int code;
|
||||
|
||||
switch (keycode) {
|
||||
case KEY_PAUSE:
|
||||
put_queue(vc, 0xe1);
|
||||
put_queue(vc, 0x1d | up_flag);
|
||||
put_queue(vc, 0x45 | up_flag);
|
||||
break;
|
||||
|
||||
case KEY_HANGEUL:
|
||||
if (!up_flag)
|
||||
put_queue(vc, 0xf2);
|
||||
break;
|
||||
case KEY_PAUSE:
|
||||
put_queue(vc, 0xe1);
|
||||
put_queue(vc, 0x1d | up_flag);
|
||||
put_queue(vc, 0x45 | up_flag);
|
||||
break;
|
||||
|
||||
case KEY_HANJA:
|
||||
if (!up_flag)
|
||||
put_queue(vc, 0xf1);
|
||||
break;
|
||||
case KEY_HANGEUL:
|
||||
if (!up_flag)
|
||||
put_queue(vc, 0xf2);
|
||||
break;
|
||||
|
||||
case KEY_SYSRQ:
|
||||
/*
|
||||
* Real AT keyboards (that's what we're trying
|
||||
* to emulate here emit 0xe0 0x2a 0xe0 0x37 when
|
||||
* pressing PrtSc/SysRq alone, but simply 0x54
|
||||
* when pressing Alt+PrtSc/SysRq.
|
||||
*/
|
||||
if (test_bit(KEY_LEFTALT, key_down) ||
|
||||
test_bit(KEY_RIGHTALT, key_down)) {
|
||||
put_queue(vc, 0x54 | up_flag);
|
||||
} else {
|
||||
put_queue(vc, 0xe0);
|
||||
put_queue(vc, 0x2a | up_flag);
|
||||
put_queue(vc, 0xe0);
|
||||
put_queue(vc, 0x37 | up_flag);
|
||||
}
|
||||
break;
|
||||
case KEY_HANJA:
|
||||
if (!up_flag)
|
||||
put_queue(vc, 0xf1);
|
||||
break;
|
||||
|
||||
default:
|
||||
if (keycode > 255)
|
||||
return -1;
|
||||
case KEY_SYSRQ:
|
||||
/*
|
||||
* Real AT keyboards (that's what we're trying
|
||||
* to emulate here emit 0xe0 0x2a 0xe0 0x37 when
|
||||
* pressing PrtSc/SysRq alone, but simply 0x54
|
||||
* when pressing Alt+PrtSc/SysRq.
|
||||
*/
|
||||
if (test_bit(KEY_LEFTALT, key_down) ||
|
||||
test_bit(KEY_RIGHTALT, key_down)) {
|
||||
put_queue(vc, 0x54 | up_flag);
|
||||
} else {
|
||||
put_queue(vc, 0xe0);
|
||||
put_queue(vc, 0x2a | up_flag);
|
||||
put_queue(vc, 0xe0);
|
||||
put_queue(vc, 0x37 | up_flag);
|
||||
}
|
||||
break;
|
||||
|
||||
code = x86_keycodes[keycode];
|
||||
if (!code)
|
||||
return -1;
|
||||
default:
|
||||
if (keycode > 255)
|
||||
return -1;
|
||||
|
||||
if (code & 0x100)
|
||||
put_queue(vc, 0xe0);
|
||||
put_queue(vc, (code & 0x7f) | up_flag);
|
||||
code = x86_keycodes[keycode];
|
||||
if (!code)
|
||||
return -1;
|
||||
|
||||
break;
|
||||
if (code & 0x100)
|
||||
put_queue(vc, 0xe0);
|
||||
put_queue(vc, (code & 0x7f) | up_flag);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -1138,6 +1145,7 @@ static int emulate_raw(struct vc_data *vc, unsigned int keycode, unsigned char u
|
||||
static void kbd_rawcode(unsigned char data)
|
||||
{
|
||||
struct vc_data *vc = vc_cons[fg_console].d;
|
||||
|
||||
kbd = kbd_table + vc->vc_num;
|
||||
if (kbd->kbdmode == VC_RAW)
|
||||
put_queue(vc, data);
|
||||
@ -1147,10 +1155,12 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
|
||||
{
|
||||
struct vc_data *vc = vc_cons[fg_console].d;
|
||||
unsigned short keysym, *key_map;
|
||||
unsigned char type, raw_mode;
|
||||
unsigned char type;
|
||||
bool raw_mode;
|
||||
struct tty_struct *tty;
|
||||
int shift_final;
|
||||
struct keyboard_notifier_param param = { .vc = vc, .value = keycode, .down = down };
|
||||
int rc;
|
||||
|
||||
tty = vc->vc_tty;
|
||||
|
||||
@ -1168,7 +1178,8 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
|
||||
|
||||
rep = (down == 2);
|
||||
|
||||
if ((raw_mode = (kbd->kbdmode == VC_RAW)) && !hw_raw)
|
||||
raw_mode = (kbd->kbdmode == VC_RAW);
|
||||
if (raw_mode && !hw_raw)
|
||||
if (emulate_raw(vc, keycode, !down << 7))
|
||||
if (keycode < BTN_MISC && printk_ratelimit())
|
||||
pr_warning("can't emulate rawmode for keycode %d\n",
|
||||
@ -1176,7 +1187,7 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
|
||||
|
||||
#ifdef CONFIG_SPARC
|
||||
if (keycode == KEY_A && sparc_l1_a_state) {
|
||||
sparc_l1_a_state = 0;
|
||||
sparc_l1_a_state = false;
|
||||
sun_do_break();
|
||||
}
|
||||
#endif
|
||||
@ -1198,7 +1209,7 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
|
||||
put_queue(vc, (keycode >> 7) | 0x80);
|
||||
put_queue(vc, keycode | 0x80);
|
||||
}
|
||||
raw_mode = 1;
|
||||
raw_mode = true;
|
||||
}
|
||||
|
||||
if (down)
|
||||
@ -1221,29 +1232,32 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
|
||||
param.ledstate = kbd->ledflagstate;
|
||||
key_map = key_maps[shift_final];
|
||||
|
||||
if (atomic_notifier_call_chain(&keyboard_notifier_list, KBD_KEYCODE, ¶m) == NOTIFY_STOP || !key_map) {
|
||||
atomic_notifier_call_chain(&keyboard_notifier_list, KBD_UNBOUND_KEYCODE, ¶m);
|
||||
rc = atomic_notifier_call_chain(&keyboard_notifier_list,
|
||||
KBD_KEYCODE, ¶m);
|
||||
if (rc == NOTIFY_STOP || !key_map) {
|
||||
atomic_notifier_call_chain(&keyboard_notifier_list,
|
||||
KBD_UNBOUND_KEYCODE, ¶m);
|
||||
compute_shiftstate();
|
||||
kbd->slockstate = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (keycode >= NR_KEYS)
|
||||
if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8)
|
||||
keysym = U(K(KT_BRL, keycode - KEY_BRL_DOT1 + 1));
|
||||
else
|
||||
return;
|
||||
else
|
||||
if (keycode < NR_KEYS)
|
||||
keysym = key_map[keycode];
|
||||
else if (keycode >= KEY_BRL_DOT1 && keycode <= KEY_BRL_DOT8)
|
||||
keysym = U(K(KT_BRL, keycode - KEY_BRL_DOT1 + 1));
|
||||
else
|
||||
return;
|
||||
|
||||
type = KTYP(keysym);
|
||||
|
||||
if (type < 0xf0) {
|
||||
param.value = keysym;
|
||||
if (atomic_notifier_call_chain(&keyboard_notifier_list, KBD_UNICODE, ¶m) == NOTIFY_STOP)
|
||||
return;
|
||||
if (down && !raw_mode)
|
||||
to_utf8(vc, keysym);
|
||||
rc = atomic_notifier_call_chain(&keyboard_notifier_list,
|
||||
KBD_UNICODE, ¶m);
|
||||
if (rc != NOTIFY_STOP)
|
||||
if (down && !raw_mode)
|
||||
to_utf8(vc, keysym);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1257,9 +1271,11 @@ static void kbd_keycode(unsigned int keycode, int down, int hw_raw)
|
||||
keysym = key_map[keycode];
|
||||
}
|
||||
}
|
||||
param.value = keysym;
|
||||
|
||||
if (atomic_notifier_call_chain(&keyboard_notifier_list, KBD_KEYSYM, ¶m) == NOTIFY_STOP)
|
||||
param.value = keysym;
|
||||
rc = atomic_notifier_call_chain(&keyboard_notifier_list,
|
||||
KBD_KEYSYM, ¶m);
|
||||
if (rc == NOTIFY_STOP)
|
||||
return;
|
||||
|
||||
if (raw_mode && type != KT_SPEC && type != KT_SHIFT)
|
||||
|
Loading…
Reference in New Issue
Block a user