keyboard.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * ebcdic keycode functions for s390 console drivers
  4. *
  5. * Copyright IBM Corp. 2003
  6. * Author(s): Martin Schwidefsky ([email protected]),
  7. */
  8. #include <linux/tty.h>
  9. #include <linux/tty_flip.h>
  10. #include <linux/keyboard.h>
  11. #define NR_FN_HANDLER 20
  12. struct kbd_data;
  13. extern int ebc_funcbufsize, ebc_funcbufleft;
  14. extern char *ebc_func_table[MAX_NR_FUNC];
  15. extern char ebc_func_buf[];
  16. extern char *ebc_funcbufptr;
  17. extern unsigned int ebc_keymap_count;
  18. extern struct kbdiacruc ebc_accent_table[];
  19. extern unsigned int ebc_accent_table_size;
  20. extern unsigned short *ebc_key_maps[MAX_NR_KEYMAPS];
  21. extern unsigned short ebc_plain_map[NR_KEYS];
  22. typedef void (fn_handler_fn)(struct kbd_data *);
  23. /*
  24. * FIXME: explain key_maps tricks.
  25. */
  26. struct kbd_data {
  27. struct tty_port *port;
  28. unsigned short **key_maps;
  29. char **func_table;
  30. fn_handler_fn **fn_handler;
  31. struct kbdiacruc *accent_table;
  32. unsigned int accent_table_size;
  33. unsigned int diacr;
  34. unsigned short sysrq;
  35. };
  36. struct kbd_data *kbd_alloc(void);
  37. void kbd_free(struct kbd_data *);
  38. void kbd_ascebc(struct kbd_data *, unsigned char *);
  39. void kbd_keycode(struct kbd_data *, unsigned int);
  40. int kbd_ioctl(struct kbd_data *, unsigned int, unsigned long);
  41. /*
  42. * Helper Functions.
  43. */
  44. static inline void
  45. kbd_put_queue(struct tty_port *port, int ch)
  46. {
  47. tty_insert_flip_char(port, ch, 0);
  48. tty_flip_buffer_push(port);
  49. }
  50. static inline void
  51. kbd_puts_queue(struct tty_port *port, char *cp)
  52. {
  53. while (*cp)
  54. tty_insert_flip_char(port, *cp++, 0);
  55. tty_flip_buffer_push(port);
  56. }