keyboard.h 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /*
  2. * ebcdic keycode functions for s390 console drivers
  3. *
  4. * Copyright IBM Corp. 2003
  5. * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
  6. */
  7. #include <linux/tty.h>
  8. #include <linux/tty_flip.h>
  9. #include <linux/keyboard.h>
  10. #define NR_FN_HANDLER 20
  11. struct kbd_data;
  12. typedef void (fn_handler_fn)(struct kbd_data *);
  13. /*
  14. * FIXME: explain key_maps tricks.
  15. */
  16. struct kbd_data {
  17. struct tty_port *port;
  18. unsigned short **key_maps;
  19. char **func_table;
  20. fn_handler_fn **fn_handler;
  21. struct kbdiacruc *accent_table;
  22. unsigned int accent_table_size;
  23. unsigned int diacr;
  24. unsigned short sysrq;
  25. };
  26. struct kbd_data *kbd_alloc(void);
  27. void kbd_free(struct kbd_data *);
  28. void kbd_ascebc(struct kbd_data *, unsigned char *);
  29. void kbd_keycode(struct kbd_data *, unsigned int);
  30. int kbd_ioctl(struct kbd_data *, unsigned int, unsigned long);
  31. /*
  32. * Helper Functions.
  33. */
  34. static inline void
  35. kbd_put_queue(struct tty_port *port, int ch)
  36. {
  37. struct tty_struct *tty = tty_port_tty_get(port);
  38. if (!tty)
  39. return;
  40. tty_insert_flip_char(tty, ch, 0);
  41. tty_schedule_flip(tty);
  42. tty_kref_put(tty);
  43. }
  44. static inline void
  45. kbd_puts_queue(struct tty_port *port, char *cp)
  46. {
  47. struct tty_struct *tty = tty_port_tty_get(port);
  48. if (!tty)
  49. return;
  50. while (*cp)
  51. tty_insert_flip_char(tty, *cp++, 0);
  52. tty_schedule_flip(tty);
  53. tty_kref_put(tty);
  54. }