f682f4e4968041d41237e3b791d1421a544b9095
[pandora-kernel.git] / drivers / s390 / char / keyboard.h
1 /*
2  *  drivers/s390/char/keyboard.h
3  *    ebcdic keycode functions for s390 console drivers
4  *
5  *    Copyright (C) 2003 IBM Deutschland Entwicklung GmbH, IBM Corporation
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         struct tty_struct *tty = tty_port_tty_get(port);
48         if (!tty)
49                 return;
50         tty_insert_flip_char(tty, ch, 0);
51         tty_schedule_flip(tty);
52         tty_kref_put(tty);
53 }
54
55 static inline void
56 kbd_puts_queue(struct tty_port *port, char *cp)
57 {
58         struct tty_struct *tty = tty_port_tty_get(port);
59         if (!tty)
60                 return;
61         while (*cp)
62                 tty_insert_flip_char(tty, *cp++, 0);
63         tty_schedule_flip(tty);
64         tty_kref_put(tty);
65 }