keyboard.h revision 92a19f9cec9a80ad93c06e115822deb729e2c6ad
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{
46ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slaby	struct tty_struct *tty = tty_port_tty_get(port);
47ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slaby	if (!tty)
48ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slaby		return;
4992a19f9cec9a80ad93c06e115822deb729e2c6adJiri Slaby	tty_insert_flip_char(port, ch, 0);
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	tty_schedule_flip(tty);
51ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slaby	tty_kref_put(tty);
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
544448aaf0faafff3f275d15937c28b6346760e028Adrian Bunkstatic inline void
55ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slabykbd_puts_queue(struct tty_port *port, char *cp)
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
57ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slaby	struct tty_struct *tty = tty_port_tty_get(port);
58ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slaby	if (!tty)
59ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slaby		return;
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	while (*cp)
6192a19f9cec9a80ad93c06e115822deb729e2c6adJiri Slaby		tty_insert_flip_char(port, *cp++, 0);
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	tty_schedule_flip(tty);
63ba186e7d17ea874f2a56385806e0ef213f58a1ddJiri Slaby	tty_kref_put(tty);
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
65