Loading drivers/char/keyboard.c +34 −17 Original line number Diff line number Diff line Loading @@ -1025,7 +1025,7 @@ static const unsigned short x86_keycodes[256] = 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,118, 86, 87, 88,115,120,119,121,112,123, 92, 284,285,309,298,312, 91,327,328,329,331,333,335,336,337,338,339, 284,285,309, 0,312, 91,327,328,329,331,333,335,336,337,338,339, 367,288,302,304,350, 89,334,326,267,126,268,269,125,347,348,349, 360,261,262,263,268,376,100,101,321,316,373,286,289,102,351,355, 103,104,105,275,287,279,306,106,274,107,294,364,358,363,362,361, Loading @@ -1047,38 +1047,55 @@ extern void sun_do_break(void); static int emulate_raw(struct vc_data *vc, unsigned int keycode, unsigned char up_flag) { if (keycode > 255 || !x86_keycodes[keycode]) return -1; int code; switch (keycode) { case KEY_PAUSE: put_queue(vc, 0xe1); put_queue(vc, 0x1d | up_flag); put_queue(vc, 0x45 | up_flag); return 0; break; case KEY_HANGEUL: if (!up_flag) put_queue(vc, 0xf2); return 0; break; case KEY_HANJA: if (!up_flag) put_queue(vc, 0xf1); return 0; } break; if (keycode == KEY_SYSRQ && sysrq_alt) { 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 (sysrq_alt) { put_queue(vc, 0x54 | up_flag); return 0; } else { put_queue(vc, 0xe0); put_queue(vc, 0x2a | up_flag); put_queue(vc, 0xe0); put_queue(vc, 0x37 | up_flag); } break; if (x86_keycodes[keycode] & 0x100) put_queue(vc, 0xe0); default: if (keycode > 255) return -1; put_queue(vc, (x86_keycodes[keycode] & 0x7f) | up_flag); code = x86_keycodes[keycode]; if (!code) return -1; if (keycode == KEY_SYSRQ) { if (code & 0x100) put_queue(vc, 0xe0); put_queue(vc, 0x37 | up_flag); put_queue(vc, (code & 0x7f) | up_flag); break; } return 0; Loading Loading
drivers/char/keyboard.c +34 −17 Original line number Diff line number Diff line Loading @@ -1025,7 +1025,7 @@ static const unsigned short x86_keycodes[256] = 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,118, 86, 87, 88,115,120,119,121,112,123, 92, 284,285,309,298,312, 91,327,328,329,331,333,335,336,337,338,339, 284,285,309, 0,312, 91,327,328,329,331,333,335,336,337,338,339, 367,288,302,304,350, 89,334,326,267,126,268,269,125,347,348,349, 360,261,262,263,268,376,100,101,321,316,373,286,289,102,351,355, 103,104,105,275,287,279,306,106,274,107,294,364,358,363,362,361, Loading @@ -1047,38 +1047,55 @@ extern void sun_do_break(void); static int emulate_raw(struct vc_data *vc, unsigned int keycode, unsigned char up_flag) { if (keycode > 255 || !x86_keycodes[keycode]) return -1; int code; switch (keycode) { case KEY_PAUSE: put_queue(vc, 0xe1); put_queue(vc, 0x1d | up_flag); put_queue(vc, 0x45 | up_flag); return 0; break; case KEY_HANGEUL: if (!up_flag) put_queue(vc, 0xf2); return 0; break; case KEY_HANJA: if (!up_flag) put_queue(vc, 0xf1); return 0; } break; if (keycode == KEY_SYSRQ && sysrq_alt) { 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 (sysrq_alt) { put_queue(vc, 0x54 | up_flag); return 0; } else { put_queue(vc, 0xe0); put_queue(vc, 0x2a | up_flag); put_queue(vc, 0xe0); put_queue(vc, 0x37 | up_flag); } break; if (x86_keycodes[keycode] & 0x100) put_queue(vc, 0xe0); default: if (keycode > 255) return -1; put_queue(vc, (x86_keycodes[keycode] & 0x7f) | up_flag); code = x86_keycodes[keycode]; if (!code) return -1; if (keycode == KEY_SYSRQ) { if (code & 0x100) put_queue(vc, 0xe0); put_queue(vc, 0x37 | up_flag); put_queue(vc, (code & 0x7f) | up_flag); break; } return 0; Loading