xref: /openbmc/linux/drivers/s390/char/keyboard.h (revision cfbb9be8)
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 (schwidefsky@de.ibm.com),
7  */
8 
9 #include <linux/tty.h>
10 #include <linux/tty_flip.h>
11 #include <linux/keyboard.h>
12 
13 #define NR_FN_HANDLER	20
14 
15 struct kbd_data;
16 
17 typedef void (fn_handler_fn)(struct kbd_data *);
18 
19 /*
20  * FIXME: explain key_maps tricks.
21  */
22 
23 struct kbd_data {
24 	struct tty_port *port;
25 	unsigned short **key_maps;
26 	char **func_table;
27 	fn_handler_fn **fn_handler;
28 	struct kbdiacruc *accent_table;
29 	unsigned int accent_table_size;
30 	unsigned int diacr;
31 	unsigned short sysrq;
32 };
33 
34 struct kbd_data *kbd_alloc(void);
35 void kbd_free(struct kbd_data *);
36 void kbd_ascebc(struct kbd_data *, unsigned char *);
37 
38 void kbd_keycode(struct kbd_data *, unsigned int);
39 int kbd_ioctl(struct kbd_data *, unsigned int, unsigned long);
40 
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_schedule_flip(port);
49 }
50 
51 static inline void
52 kbd_puts_queue(struct tty_port *port, char *cp)
53 {
54 	while (*cp)
55 		tty_insert_flip_char(port, *cp++, 0);
56 	tty_schedule_flip(port);
57 }
58