Lines Matching refs:kbd

50 	struct kbd_data *kbd;  in kbd_alloc()  local
53 kbd = kzalloc(sizeof(struct kbd_data), GFP_KERNEL); in kbd_alloc()
54 if (!kbd) in kbd_alloc()
56 kbd->key_maps = kzalloc(sizeof(key_maps), GFP_KERNEL); in kbd_alloc()
57 if (!kbd->key_maps) in kbd_alloc()
61 kbd->key_maps[i] = kmemdup(key_maps[i], in kbd_alloc()
64 if (!kbd->key_maps[i]) in kbd_alloc()
68 kbd->func_table = kzalloc(sizeof(func_table), GFP_KERNEL); in kbd_alloc()
69 if (!kbd->func_table) in kbd_alloc()
73 kbd->func_table[i] = kstrdup(func_table[i], in kbd_alloc()
75 if (!kbd->func_table[i]) in kbd_alloc()
79 kbd->fn_handler = in kbd_alloc()
81 if (!kbd->fn_handler) in kbd_alloc()
83 kbd->accent_table = kmemdup(accent_table, in kbd_alloc()
86 if (!kbd->accent_table) in kbd_alloc()
88 kbd->accent_table_size = accent_table_size; in kbd_alloc()
89 return kbd; in kbd_alloc()
92 kfree(kbd->fn_handler); in kbd_alloc()
95 kfree(kbd->func_table[i]); in kbd_alloc()
96 kfree(kbd->func_table); in kbd_alloc()
99 kfree(kbd->key_maps[i]); in kbd_alloc()
100 kfree(kbd->key_maps); in kbd_alloc()
102 kfree(kbd); in kbd_alloc()
108 kbd_free(struct kbd_data *kbd) in kbd_free() argument
112 kfree(kbd->accent_table); in kbd_free()
113 kfree(kbd->fn_handler); in kbd_free()
115 kfree(kbd->func_table[i]); in kbd_free()
116 kfree(kbd->func_table); in kbd_free()
118 kfree(kbd->key_maps[i]); in kbd_free()
119 kfree(kbd->key_maps); in kbd_free()
120 kfree(kbd); in kbd_free()
127 kbd_ascebc(struct kbd_data *kbd, unsigned char *ascebc) in kbd_ascebc() argument
134 keymap = kbd->key_maps[i]; in kbd_ascebc()
154 kbd_ebcasc(struct kbd_data *kbd, unsigned char *ebcasc)
161 keymap = kbd->key_maps[i];
185 handle_diacr(struct kbd_data *kbd, unsigned int ch) in handle_diacr() argument
189 d = kbd->diacr; in handle_diacr()
190 kbd->diacr = 0; in handle_diacr()
192 for (i = 0; i < kbd->accent_table_size; i++) { in handle_diacr()
193 if (kbd->accent_table[i].diacr == d && in handle_diacr()
194 kbd->accent_table[i].base == ch) in handle_diacr()
195 return kbd->accent_table[i].result; in handle_diacr()
201 kbd_put_queue(kbd->port, d); in handle_diacr()
209 k_dead(struct kbd_data *kbd, unsigned char value) in k_dead() argument
212 kbd->diacr = (kbd->diacr ? handle_diacr(kbd, value) : value); in k_dead()
219 k_self(struct kbd_data *kbd, unsigned char value) in k_self() argument
221 if (kbd->diacr) in k_self()
222 value = handle_diacr(kbd, value); in k_self()
223 kbd_put_queue(kbd->port, value); in k_self()
230 k_ignore(struct kbd_data *kbd, unsigned char value) in k_ignore() argument
238 k_fn(struct kbd_data *kbd, unsigned char value) in k_fn() argument
240 if (kbd->func_table[value]) in k_fn()
241 kbd_puts_queue(kbd->port, kbd->func_table[value]); in k_fn()
245 k_spec(struct kbd_data *kbd, unsigned char value) in k_spec() argument
249 if (kbd->fn_handler[value]) in k_spec()
250 kbd->fn_handler[value](kbd); in k_spec()
280 kbd_keycode(struct kbd_data *kbd, unsigned int keycode) in kbd_keycode() argument
285 if (!kbd) in kbd_keycode()
289 keysym = kbd->key_maps[5][keycode - 384]; in kbd_keycode()
291 keysym = kbd->key_maps[4][keycode - 256]; in kbd_keycode()
293 keysym = kbd->key_maps[1][keycode - 128]; in kbd_keycode()
295 keysym = kbd->key_maps[0][keycode]; in kbd_keycode()
304 if (kbd->sysrq) { in kbd_keycode()
305 if (kbd->sysrq == K(KT_LATIN, '-')) { in kbd_keycode()
306 kbd->sysrq = 0; in kbd_keycode()
311 kbd->sysrq = K(KT_LATIN, '-'); in kbd_keycode()
315 (*k_handler[KTYP(kbd->sysrq)])(kbd, KVAL(kbd->sysrq)); in kbd_keycode()
316 kbd->sysrq = 0; in kbd_keycode()
319 kbd->sysrq = K(type, value); in kbd_keycode()
323 (*k_handler[type])(kbd, value); in kbd_keycode()
325 to_utf8(kbd->port, keysym); in kbd_keycode()
332 do_kdsk_ioctl(struct kbd_data *kbd, struct kbentry __user *user_kbe, in do_kdsk_ioctl() argument
351 key_map = kbd->key_maps[tmp.kb_table]; in do_kdsk_ioctl()
364 key_map = kbd->key_maps[tmp.kb_table]; in do_kdsk_ioctl()
366 kbd->key_maps[tmp.kb_table] = NULL; in do_kdsk_ioctl()
377 if (!(key_map = kbd->key_maps[tmp.kb_table])) { in do_kdsk_ioctl()
384 kbd->key_maps[tmp.kb_table] = key_map; in do_kdsk_ioctl()
404 do_kdgkb_ioctl(struct kbd_data *kbd, struct kbsentry __user *u_kbs, in do_kdgkb_ioctl() argument
421 p = kbd->func_table[kb_func]; in do_kdgkb_ioctl()
453 kfree(kbd->func_table[kb_func]); in do_kdgkb_ioctl()
454 kbd->func_table[kb_func] = p; in do_kdgkb_ioctl()
460 int kbd_ioctl(struct kbd_data *kbd, unsigned int cmd, unsigned long arg) in kbd_ioctl() argument
473 tty = tty_port_tty_get(kbd->port); in kbd_ioctl()
482 return do_kdsk_ioctl(kbd, argp, cmd, perm); in kbd_ioctl()
485 return do_kdgkb_ioctl(kbd, argp, cmd, perm); in kbd_ioctl()
492 if (put_user(kbd->accent_table_size, &a->kb_cnt)) in kbd_ioctl()
494 for (i = 0; i < kbd->accent_table_size; i++) { in kbd_ioctl()
495 diacr.diacr = kbd->accent_table[i].diacr; in kbd_ioctl()
496 diacr.base = kbd->accent_table[i].base; in kbd_ioctl()
497 diacr.result = kbd->accent_table[i].result; in kbd_ioctl()
507 ct = kbd->accent_table_size; in kbd_ioctl()
510 if (copy_to_user(a->kbdiacruc, kbd->accent_table, in kbd_ioctl()
527 kbd->accent_table_size = ct; in kbd_ioctl()
531 kbd->accent_table[i].diacr = diacr.diacr; in kbd_ioctl()
532 kbd->accent_table[i].base = diacr.base; in kbd_ioctl()
533 kbd->accent_table[i].result = diacr.result; in kbd_ioctl()
547 kbd->accent_table_size = ct; in kbd_ioctl()
548 if (copy_from_user(kbd->accent_table, a->kbdiacruc, in kbd_ioctl()