2005-04-17 05:20:36 +07:00
|
|
|
/*
|
|
|
|
* ebcdic keycode functions for s390 console drivers
|
|
|
|
*
|
2012-07-20 16:15:04 +07:00
|
|
|
* Copyright IBM Corp. 2003
|
2005-04-17 05:20:36 +07:00
|
|
|
* Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <linux/tty.h>
|
|
|
|
#include <linux/tty_flip.h>
|
|
|
|
#include <linux/keyboard.h>
|
|
|
|
|
|
|
|
#define NR_FN_HANDLER 20
|
|
|
|
|
|
|
|
struct kbd_data;
|
|
|
|
|
|
|
|
typedef void (fn_handler_fn)(struct kbd_data *);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* FIXME: explain key_maps tricks.
|
|
|
|
*/
|
|
|
|
|
|
|
|
struct kbd_data {
|
2012-04-02 18:54:18 +07:00
|
|
|
struct tty_port *port;
|
2005-04-17 05:20:36 +07:00
|
|
|
unsigned short **key_maps;
|
|
|
|
char **func_table;
|
|
|
|
fn_handler_fn **fn_handler;
|
2007-10-17 13:27:04 +07:00
|
|
|
struct kbdiacruc *accent_table;
|
2005-04-17 05:20:36 +07:00
|
|
|
unsigned int accent_table_size;
|
2007-10-17 13:27:04 +07:00
|
|
|
unsigned int diacr;
|
2005-04-17 05:20:36 +07:00
|
|
|
unsigned short sysrq;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct kbd_data *kbd_alloc(void);
|
|
|
|
void kbd_free(struct kbd_data *);
|
|
|
|
void kbd_ascebc(struct kbd_data *, unsigned char *);
|
|
|
|
|
|
|
|
void kbd_keycode(struct kbd_data *, unsigned int);
|
2011-02-25 20:28:30 +07:00
|
|
|
int kbd_ioctl(struct kbd_data *, unsigned int, unsigned long);
|
2005-04-17 05:20:36 +07:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Helper Functions.
|
|
|
|
*/
|
2005-11-09 12:34:42 +07:00
|
|
|
static inline void
|
2012-04-02 18:54:18 +07:00
|
|
|
kbd_put_queue(struct tty_port *port, int ch)
|
2005-04-17 05:20:36 +07:00
|
|
|
{
|
2012-04-02 18:54:18 +07:00
|
|
|
struct tty_struct *tty = tty_port_tty_get(port);
|
|
|
|
if (!tty)
|
|
|
|
return;
|
2005-04-17 05:20:36 +07:00
|
|
|
tty_insert_flip_char(tty, ch, 0);
|
|
|
|
tty_schedule_flip(tty);
|
2012-04-02 18:54:18 +07:00
|
|
|
tty_kref_put(tty);
|
2005-04-17 05:20:36 +07:00
|
|
|
}
|
|
|
|
|
2005-11-09 12:34:42 +07:00
|
|
|
static inline void
|
2012-04-02 18:54:18 +07:00
|
|
|
kbd_puts_queue(struct tty_port *port, char *cp)
|
2005-04-17 05:20:36 +07:00
|
|
|
{
|
2012-04-02 18:54:18 +07:00
|
|
|
struct tty_struct *tty = tty_port_tty_get(port);
|
|
|
|
if (!tty)
|
|
|
|
return;
|
2005-04-17 05:20:36 +07:00
|
|
|
while (*cp)
|
|
|
|
tty_insert_flip_char(tty, *cp++, 0);
|
|
|
|
tty_schedule_flip(tty);
|
2012-04-02 18:54:18 +07:00
|
|
|
tty_kref_put(tty);
|
2005-04-17 05:20:36 +07:00
|
|
|
}
|