diff options
-rw-r--r-- | drivers/char/Kconfig | 8 | ||||
-rw-r--r-- | drivers/char/Makefile | 4 | ||||
-rw-r--r-- | drivers/char/vt.c | 2 | ||||
-rw-r--r-- | include/linux/consolemap.h | 14 | ||||
-rw-r--r-- | include/linux/vt_kern.h | 19 |
5 files changed, 44 insertions, 3 deletions
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig index 595a925c62a9..b7f7371dee73 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig | |||
@@ -36,6 +36,14 @@ config VT | |||
36 | If unsure, say Y, or else you won't be able to do much with your new | 36 | If unsure, say Y, or else you won't be able to do much with your new |
37 | shiny Linux system :-) | 37 | shiny Linux system :-) |
38 | 38 | ||
39 | config CONSOLE_TRANSLATIONS | ||
40 | depends on VT | ||
41 | default y | ||
42 | bool "Enable character translations in console" if EMBEDDED | ||
43 | ---help--- | ||
44 | This enables support for font mapping and Unicode translation | ||
45 | on virtual consoles. | ||
46 | |||
39 | config VT_CONSOLE | 47 | config VT_CONSOLE |
40 | bool "Support for console on virtual terminal" if EMBEDDED | 48 | bool "Support for console on virtual terminal" if EMBEDDED |
41 | depends on VT | 49 | depends on VT |
diff --git a/drivers/char/Makefile b/drivers/char/Makefile index 4c1c584e9eb6..6ef173cab144 100644 --- a/drivers/char/Makefile +++ b/drivers/char/Makefile | |||
@@ -12,8 +12,8 @@ obj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o | |||
12 | obj-$(CONFIG_LEGACY_PTYS) += pty.o | 12 | obj-$(CONFIG_LEGACY_PTYS) += pty.o |
13 | obj-$(CONFIG_UNIX98_PTYS) += pty.o | 13 | obj-$(CONFIG_UNIX98_PTYS) += pty.o |
14 | obj-y += misc.o | 14 | obj-y += misc.o |
15 | obj-$(CONFIG_VT) += vt_ioctl.o vc_screen.o consolemap.o \ | 15 | obj-$(CONFIG_VT) += vt_ioctl.o vc_screen.o selection.o keyboard.o |
16 | consolemap_deftbl.o selection.o keyboard.o | 16 | obj-$(CONFIG_CONSOLE_TRANSLATIONS) += consolemap.o consolemap_deftbl.o |
17 | obj-$(CONFIG_HW_CONSOLE) += vt.o defkeymap.o | 17 | obj-$(CONFIG_HW_CONSOLE) += vt.o defkeymap.o |
18 | obj-$(CONFIG_AUDIT) += tty_audit.o | 18 | obj-$(CONFIG_AUDIT) += tty_audit.o |
19 | obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o | 19 | obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o |
diff --git a/drivers/char/vt.c b/drivers/char/vt.c index fa1ffbf2c621..18b7fb06dace 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c | |||
@@ -2208,7 +2208,7 @@ rescan_last_byte: | |||
2208 | c = 0xfffd; | 2208 | c = 0xfffd; |
2209 | tc = c; | 2209 | tc = c; |
2210 | } else { /* no utf or alternate charset mode */ | 2210 | } else { /* no utf or alternate charset mode */ |
2211 | tc = vc->vc_translate[vc->vc_toggle_meta ? (c | 0x80) : c]; | 2211 | tc = vc_translate(vc, c); |
2212 | } | 2212 | } |
2213 | 2213 | ||
2214 | param.c = tc; | 2214 | param.c = tc; |
diff --git a/include/linux/consolemap.h b/include/linux/consolemap.h index e2bf7e5db39a..c4811da1338b 100644 --- a/include/linux/consolemap.h +++ b/include/linux/consolemap.h | |||
@@ -3,6 +3,9 @@ | |||
3 | * | 3 | * |
4 | * Interface between console.c, selection.c and consolemap.c | 4 | * Interface between console.c, selection.c and consolemap.c |
5 | */ | 5 | */ |
6 | #ifndef __LINUX_CONSOLEMAP_H__ | ||
7 | #define __LINUX_CONSOLEMAP_H__ | ||
8 | |||
6 | #define LAT1_MAP 0 | 9 | #define LAT1_MAP 0 |
7 | #define GRAF_MAP 1 | 10 | #define GRAF_MAP 1 |
8 | #define IBMPC_MAP 2 | 11 | #define IBMPC_MAP 2 |
@@ -10,6 +13,7 @@ | |||
10 | 13 | ||
11 | #include <linux/types.h> | 14 | #include <linux/types.h> |
12 | 15 | ||
16 | #ifdef CONFIG_CONSOLE_TRANSLATIONS | ||
13 | struct vc_data; | 17 | struct vc_data; |
14 | 18 | ||
15 | extern u16 inverse_translate(struct vc_data *conp, int glyph, int use_unicode); | 19 | extern u16 inverse_translate(struct vc_data *conp, int glyph, int use_unicode); |
@@ -18,3 +22,13 @@ extern int conv_uni_to_pc(struct vc_data *conp, long ucs); | |||
18 | extern u32 conv_8bit_to_uni(unsigned char c); | 22 | extern u32 conv_8bit_to_uni(unsigned char c); |
19 | extern int conv_uni_to_8bit(u32 uni); | 23 | extern int conv_uni_to_8bit(u32 uni); |
20 | void console_map_init(void); | 24 | void console_map_init(void); |
25 | #else | ||
26 | #define inverse_translate(conp, glyph, uni) ((uint16_t)glyph) | ||
27 | #define set_translate(m, vc) ((unsigned short *)NULL) | ||
28 | #define conv_uni_to_pc(conp, ucs) ((int) (ucs > 0xff ? -1: ucs)) | ||
29 | #define conv_8bit_to_uni(c) ((uint32_t)(c)) | ||
30 | #define conv_uni_to_8bit(c) ((int) ((c) & 0xff)) | ||
31 | #define console_map_init(c) do { ; } while (0) | ||
32 | #endif /* CONFIG_CONSOLE_TRANSLATIONS */ | ||
33 | |||
34 | #endif /* __LINUX_CONSOLEMAP_H__ */ | ||
diff --git a/include/linux/vt_kern.h b/include/linux/vt_kern.h index 9448ffbdcbf6..14c0e91be9b5 100644 --- a/include/linux/vt_kern.h +++ b/include/linux/vt_kern.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/mutex.h> | 12 | #include <linux/mutex.h> |
13 | #include <linux/console_struct.h> | 13 | #include <linux/console_struct.h> |
14 | #include <linux/mm.h> | 14 | #include <linux/mm.h> |
15 | #include <linux/consolemap.h> | ||
15 | 16 | ||
16 | /* | 17 | /* |
17 | * Presently, a lot of graphics programs do not restore the contents of | 18 | * Presently, a lot of graphics programs do not restore the contents of |
@@ -54,6 +55,7 @@ void redraw_screen(struct vc_data *vc, int is_switch); | |||
54 | struct tty_struct; | 55 | struct tty_struct; |
55 | int tioclinux(struct tty_struct *tty, unsigned long arg); | 56 | int tioclinux(struct tty_struct *tty, unsigned long arg); |
56 | 57 | ||
58 | #ifdef CONFIG_CONSOLE_TRANSLATIONS | ||
57 | /* consolemap.c */ | 59 | /* consolemap.c */ |
58 | 60 | ||
59 | struct unimapinit; | 61 | struct unimapinit; |
@@ -71,6 +73,23 @@ void con_free_unimap(struct vc_data *vc); | |||
71 | void con_protect_unimap(struct vc_data *vc, int rdonly); | 73 | void con_protect_unimap(struct vc_data *vc, int rdonly); |
72 | int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc); | 74 | int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc); |
73 | 75 | ||
76 | #define vc_translate(vc, c) ((vc)->vc_translate[(c) | \ | ||
77 | (vc)->vc_toggle_meta ? 0x80 : 0]) | ||
78 | #else | ||
79 | #define con_set_trans_old(arg) (0) | ||
80 | #define con_get_trans_old(arg) (-EINVAL) | ||
81 | #define con_set_trans_new(arg) (0) | ||
82 | #define con_get_trans_new(arg) (-EINVAL) | ||
83 | #define con_clear_unimap(vc, ui) (0) | ||
84 | #define con_set_unimap(vc, ct, list) (0) | ||
85 | #define con_set_default_unimap(vc) (0) | ||
86 | #define con_copy_unimap(d, s) (0) | ||
87 | #define con_get_unimap(vc, ct, uct, list) (-EINVAL) | ||
88 | #define con_free_unimap(vc) do { ; } while (0) | ||
89 | |||
90 | #define vc_translate(vc, c) (c) | ||
91 | #endif | ||
92 | |||
74 | /* vt.c */ | 93 | /* vt.c */ |
75 | int vt_waitactive(int vt); | 94 | int vt_waitactive(int vt); |
76 | void change_console(struct vc_data *new_vc); | 95 | void change_console(struct vc_data *new_vc); |