0001
0002
0003
0004
0005
0006 #include <linux/types.h>
0007 #include <linux/keyboard.h>
0008 #include <linux/kd.h>
0009 #include <linux/kbd_kern.h>
0010 #include <linux/kbd_diacr.h>
0011
0012 #include "keyboard.h"
0013
0014 u_short ebc_plain_map[NR_KEYS] = {
0015 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000,
0016 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000,
0017 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000,
0018 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000,
0019 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000,
0020 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000,
0021 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000,
0022 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000, 0xf000,
0023 0xf020, 0xf000, 0xf0e2, 0xf0e4, 0xf0e0, 0xf0e1, 0xf0e3, 0xf0e5,
0024 0xf0e7, 0xf0f1, 0xf0a2, 0xf02e, 0xf03c, 0xf028, 0xf02b, 0xf07c,
0025 0xf026, 0xf0e9, 0xf0e2, 0xf0eb, 0xf0e8, 0xf0ed, 0xf0ee, 0xf0ef,
0026 0xf0ec, 0xf0df, 0xf021, 0xf024, 0xf02a, 0xf029, 0xf03b, 0xf0ac,
0027 0xf02d, 0xf02f, 0xf0c2, 0xf0c4, 0xf0c0, 0xf0c1, 0xf0c3, 0xf0c5,
0028 0xf0c7, 0xf0d1, 0xf0a6, 0xf02c, 0xf025, 0xf05f, 0xf03e, 0xf03f,
0029 0xf0f8, 0xf0c9, 0xf0ca, 0xf0cb, 0xf0c8, 0xf0cd, 0xf0ce, 0xf0cf,
0030 0xf0cc, 0xf060, 0xf03a, 0xf023, 0xf040, 0xf027, 0xf03d, 0xf022,
0031 };
0032
0033 static u_short shift_map[NR_KEYS] = {
0034 0xf0d8, 0xf061, 0xf062, 0xf063, 0xf064, 0xf065, 0xf066, 0xf067,
0035 0xf068, 0xf069, 0xf0ab, 0xf0bb, 0xf0f0, 0xf0fd, 0xf0fe, 0xf0b1,
0036 0xf0b0, 0xf06a, 0xf06b, 0xf06c, 0xf06d, 0xf06e, 0xf06f, 0xf070,
0037 0xf071, 0xf072, 0xf000, 0xf000, 0xf0e6, 0xf0b8, 0xf0c6, 0xf0a4,
0038 0xf0b5, 0xf07e, 0xf073, 0xf074, 0xf075, 0xf076, 0xf077, 0xf078,
0039 0xf079, 0xf07a, 0xf0a1, 0xf0bf, 0xf0d0, 0xf0dd, 0xf0de, 0xf0ae,
0040 0xf402, 0xf0a3, 0xf0a5, 0xf0b7, 0xf0a9, 0xf0a7, 0xf0b6, 0xf0bc,
0041 0xf0bd, 0xf0be, 0xf05b, 0xf05d, 0xf000, 0xf0a8, 0xf0b4, 0xf0d7,
0042 0xf07b, 0xf041, 0xf042, 0xf043, 0xf044, 0xf045, 0xf046, 0xf047,
0043 0xf048, 0xf049, 0xf000, 0xf0f4, 0xf0f6, 0xf0f2, 0xf0f3, 0xf0f5,
0044 0xf07d, 0xf04a, 0xf04b, 0xf04c, 0xf04d, 0xf04e, 0xf04f, 0xf050,
0045 0xf051, 0xf052, 0xf0b9, 0xf0fb, 0xf0fc, 0xf0f9, 0xf0fa, 0xf0ff,
0046 0xf05c, 0xf0f7, 0xf053, 0xf054, 0xf055, 0xf056, 0xf057, 0xf058,
0047 0xf059, 0xf05a, 0xf0b2, 0xf0d4, 0xf0d6, 0xf0d2, 0xf0d3, 0xf0d5,
0048 0xf030, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037,
0049 0xf038, 0xf039, 0xf0b3, 0xf0db, 0xf0dc, 0xf0d9, 0xf0da, 0xf000,
0050 };
0051
0052 static u_short ctrl_map[NR_KEYS] = {
0053 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0054 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0055 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0056 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0057 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0058 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0059 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0060 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0061 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0062 0xf200, 0xf200, 0xf11f, 0xf120, 0xf121, 0xf200, 0xf200, 0xf200,
0063 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0064 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0065 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0066 0xf200, 0xf200, 0xf200, 0xf01a, 0xf003, 0xf212, 0xf004, 0xf200,
0067 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0068 0xf200, 0xf200, 0xf109, 0xf10a, 0xf206, 0xf00a, 0xf200, 0xf200,
0069 };
0070
0071 static u_short shift_ctrl_map[NR_KEYS] = {
0072 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0073 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0074 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0075 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0076 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0077 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0078 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0079 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0080 0xf200, 0xf10c, 0xf10d, 0xf10e, 0xf10f, 0xf110, 0xf111, 0xf112,
0081 0xf113, 0xf11e, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0082 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0083 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0084 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0085 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0086 0xf200, 0xf100, 0xf101, 0xf211, 0xf103, 0xf104, 0xf105, 0xf20b,
0087 0xf20a, 0xf108, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200, 0xf200,
0088 };
0089
0090 ushort *ebc_key_maps[MAX_NR_KEYMAPS] = {
0091 ebc_plain_map, shift_map, NULL, NULL,
0092 ctrl_map, shift_ctrl_map, NULL,
0093 };
0094
0095 unsigned int ebc_keymap_count = 4;
0096
0097
0098
0099
0100
0101
0102
0103
0104 char ebc_func_buf[] = {
0105 '\033', '[', '[', 'A', 0,
0106 '\033', '[', '[', 'B', 0,
0107 '\033', '[', '[', 'C', 0,
0108 '\033', '[', '[', 'D', 0,
0109 '\033', '[', '[', 'E', 0,
0110 '\033', '[', '1', '7', '~', 0,
0111 '\033', '[', '1', '8', '~', 0,
0112 '\033', '[', '1', '9', '~', 0,
0113 '\033', '[', '2', '0', '~', 0,
0114 '\033', '[', '2', '1', '~', 0,
0115 '\033', '[', '2', '3', '~', 0,
0116 '\033', '[', '2', '4', '~', 0,
0117 '\033', '[', '2', '5', '~', 0,
0118 '\033', '[', '2', '6', '~', 0,
0119 '\033', '[', '2', '8', '~', 0,
0120 '\033', '[', '2', '9', '~', 0,
0121 '\033', '[', '3', '1', '~', 0,
0122 '\033', '[', '3', '2', '~', 0,
0123 '\033', '[', '3', '3', '~', 0,
0124 '\033', '[', '3', '4', '~', 0,
0125 };
0126
0127
0128 char *ebc_funcbufptr = ebc_func_buf;
0129 int ebc_funcbufsize = sizeof(ebc_func_buf);
0130 int ebc_funcbufleft;
0131
0132 char *ebc_func_table[MAX_NR_FUNC] = {
0133 ebc_func_buf + 0,
0134 ebc_func_buf + 5,
0135 ebc_func_buf + 10,
0136 ebc_func_buf + 15,
0137 ebc_func_buf + 20,
0138 ebc_func_buf + 25,
0139 ebc_func_buf + 31,
0140 ebc_func_buf + 37,
0141 ebc_func_buf + 43,
0142 ebc_func_buf + 49,
0143 ebc_func_buf + 55,
0144 ebc_func_buf + 61,
0145 ebc_func_buf + 67,
0146 ebc_func_buf + 73,
0147 ebc_func_buf + 79,
0148 ebc_func_buf + 85,
0149 ebc_func_buf + 91,
0150 ebc_func_buf + 97,
0151 ebc_func_buf + 103,
0152 ebc_func_buf + 109,
0153 NULL,
0154 };
0155
0156 struct kbdiacruc ebc_accent_table[MAX_DIACR] = {
0157 {'^', 'c', 0003}, {'^', 'd', 0004},
0158 {'^', 'z', 0032}, {'^', 0012, 0000},
0159 };
0160
0161 unsigned int ebc_accent_table_size = 4;