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 8 #include <linux/tty.h> 9 #include <linux/tty_flip.h> 10 #include <linux/keyboard.h> 11 12 #define NR_FN_HANDLER 20 13 14 struct kbd_data; 15 16 typedef void (fn_handler_fn)(struct kbd_data *); 17 18 /* 19 * FIXME: explain key_maps tricks. 20 */ 21 22 struct kbd_data { 23 struct tty_port *port; 24 unsigned short **key_maps; 25 char **func_table; 26 fn_handler_fn **fn_handler; 27 struct kbdiacruc *accent_table; 28 unsigned int accent_table_size; 29 unsigned int diacr; 30 unsigned short sysrq; 31 }; 32 33 struct kbd_data *kbd_alloc(void); 34 void kbd_free(struct kbd_data *); 35 void kbd_ascebc(struct kbd_data *, unsigned char *); 36 37 void kbd_keycode(struct kbd_data *, unsigned int); 38 int kbd_ioctl(struct kbd_data *, unsigned int, unsigned long); 39 40 /* 41 * Helper Functions. 42 */ 43 static inline void 44 kbd_put_queue(struct tty_port *port, int ch) 45 { 46 struct tty_struct *tty = tty_port_tty_get(port); 47 if (!tty) 48 return; 49 tty_insert_flip_char(tty, ch, 0); 50 tty_schedule_flip(tty); 51 tty_kref_put(tty); 52 } 53 54 static inline void 55 kbd_puts_queue(struct tty_port *port, char *cp) 56 { 57 struct tty_struct *tty = tty_port_tty_get(port); 58 if (!tty) 59 return; 60 while (*cp) 61 tty_insert_flip_char(tty, *cp++, 0); 62 tty_schedule_flip(tty); 63 tty_kref_put(tty); 64 } 65