11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    ebcdic keycode functions for s390 console drivers
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
4a53c8fab3f87c995c30ac226a03af95361243144Heiko Carstens *    Copyright IBM Corp. 2003
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/tty.h>
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/tty_flip.h>
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/keyboard.h>
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NR_FN_HANDLER	20
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct kbd_data;
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef void (fn_handler_fn)(struct kbd_data *);
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * FIXME: explain key_maps tricks.
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct kbd_data {
23ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slaby	struct tty_port *port;
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned short **key_maps;
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char **func_table;
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	fn_handler_fn **fn_handler;
2704c71976500352d02f60616d2b960267d8c5fe24Samuel Thibault	struct kbdiacruc *accent_table;
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int accent_table_size;
2904c71976500352d02f60616d2b960267d8c5fe24Samuel Thibault	unsigned int diacr;
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned short sysrq;
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct kbd_data *kbd_alloc(void);
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid kbd_free(struct kbd_data *);
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid kbd_ascebc(struct kbd_data *, unsigned char *);
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid kbd_keycode(struct kbd_data *, unsigned int);
3865c56e073e4fd10385283561b91189572e33b519Heiko Carstensint kbd_ioctl(struct kbd_data *, unsigned int, unsigned long);
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Helper Functions.
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
434448aaf0faafff3f275d15937c28b6346760e028Adrian Bunkstatic inline void
44ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slabykbd_put_queue(struct tty_port *port, int ch)
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
4692a19f9cec9a80ad93c06e115822deb729e2c6adJiri Slaby	tty_insert_flip_char(port, ch, 0);
476732c8bb8671acbdac6cdc93dd72ddd581dd5e25Jiri Slaby	tty_schedule_flip(port);
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
504448aaf0faafff3f275d15937c28b6346760e028Adrian Bunkstatic inline void
51ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slabykbd_puts_queue(struct tty_port *port, char *cp)
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	while (*cp)
5492a19f9cec9a80ad93c06e115822deb729e2c6adJiri Slaby		tty_insert_flip_char(port, *cp++, 0);
556732c8bb8671acbdac6cdc93dd72ddd581dd5e25Jiri Slaby	tty_schedule_flip(port);
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
57