Loading drivers/char/Kconfig +8 −0 Original line number Original line Diff line number Diff line Loading @@ -36,6 +36,14 @@ config VT If unsure, say Y, or else you won't be able to do much with your new If unsure, say Y, or else you won't be able to do much with your new shiny Linux system :-) shiny Linux system :-) config CONSOLE_TRANSLATIONS depends on VT default y bool "Enable character translations in console" if EMBEDDED ---help--- This enables support for font mapping and Unicode translation on virtual consoles. config VT_CONSOLE config VT_CONSOLE bool "Support for console on virtual terminal" if EMBEDDED bool "Support for console on virtual terminal" if EMBEDDED depends on VT depends on VT Loading drivers/char/Makefile +2 −2 Original line number Original line Diff line number Diff line Loading @@ -12,8 +12,8 @@ obj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o obj-$(CONFIG_LEGACY_PTYS) += pty.o obj-$(CONFIG_LEGACY_PTYS) += pty.o obj-$(CONFIG_UNIX98_PTYS) += pty.o obj-$(CONFIG_UNIX98_PTYS) += pty.o obj-y += misc.o obj-y += misc.o obj-$(CONFIG_VT) += vt_ioctl.o vc_screen.o consolemap.o \ obj-$(CONFIG_VT) += vt_ioctl.o vc_screen.o selection.o keyboard.o consolemap_deftbl.o selection.o keyboard.o obj-$(CONFIG_CONSOLE_TRANSLATIONS) += consolemap.o consolemap_deftbl.o obj-$(CONFIG_HW_CONSOLE) += vt.o defkeymap.o obj-$(CONFIG_HW_CONSOLE) += vt.o defkeymap.o obj-$(CONFIG_AUDIT) += tty_audit.o obj-$(CONFIG_AUDIT) += tty_audit.o obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o Loading drivers/char/vt.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -2211,7 +2211,7 @@ static int do_con_write(struct tty_struct *tty, const unsigned char *buf, int co c = 0xfffd; c = 0xfffd; tc = c; tc = c; } else { /* no utf or alternate charset mode */ } else { /* no utf or alternate charset mode */ tc = vc->vc_translate[vc->vc_toggle_meta ? (c | 0x80) : c]; tc = vc_translate(vc, c); } } param.c = tc; param.c = tc; Loading include/linux/consolemap.h +14 −0 Original line number Original line Diff line number Diff line Loading @@ -3,6 +3,9 @@ * * * Interface between console.c, selection.c and consolemap.c * Interface between console.c, selection.c and consolemap.c */ */ #ifndef __LINUX_CONSOLEMAP_H__ #define __LINUX_CONSOLEMAP_H__ #define LAT1_MAP 0 #define LAT1_MAP 0 #define GRAF_MAP 1 #define GRAF_MAP 1 #define IBMPC_MAP 2 #define IBMPC_MAP 2 Loading @@ -10,6 +13,7 @@ #include <linux/types.h> #include <linux/types.h> #ifdef CONFIG_CONSOLE_TRANSLATIONS struct vc_data; struct vc_data; extern u16 inverse_translate(struct vc_data *conp, int glyph, int use_unicode); extern u16 inverse_translate(struct vc_data *conp, int glyph, int use_unicode); Loading @@ -18,3 +22,13 @@ extern int conv_uni_to_pc(struct vc_data *conp, long ucs); extern u32 conv_8bit_to_uni(unsigned char c); extern u32 conv_8bit_to_uni(unsigned char c); extern int conv_uni_to_8bit(u32 uni); extern int conv_uni_to_8bit(u32 uni); void console_map_init(void); void console_map_init(void); #else #define inverse_translate(conp, glyph, uni) ((uint16_t)glyph) #define set_translate(m, vc) ((unsigned short *)NULL) #define conv_uni_to_pc(conp, ucs) ((int) (ucs > 0xff ? -1: ucs)) #define conv_8bit_to_uni(c) ((uint32_t)(c)) #define conv_uni_to_8bit(c) ((int) ((c) & 0xff)) #define console_map_init(c) do { ; } while (0) #endif /* CONFIG_CONSOLE_TRANSLATIONS */ #endif /* __LINUX_CONSOLEMAP_H__ */ include/linux/vt_kern.h +19 −0 Original line number Original line Diff line number Diff line Loading @@ -12,6 +12,7 @@ #include <linux/mutex.h> #include <linux/mutex.h> #include <linux/console_struct.h> #include <linux/console_struct.h> #include <linux/mm.h> #include <linux/mm.h> #include <linux/consolemap.h> /* /* * Presently, a lot of graphics programs do not restore the contents of * Presently, a lot of graphics programs do not restore the contents of Loading Loading @@ -54,6 +55,7 @@ void redraw_screen(struct vc_data *vc, int is_switch); struct tty_struct; struct tty_struct; int tioclinux(struct tty_struct *tty, unsigned long arg); int tioclinux(struct tty_struct *tty, unsigned long arg); #ifdef CONFIG_CONSOLE_TRANSLATIONS /* consolemap.c */ /* consolemap.c */ struct unimapinit; struct unimapinit; Loading @@ -71,6 +73,23 @@ void con_free_unimap(struct vc_data *vc); void con_protect_unimap(struct vc_data *vc, int rdonly); void con_protect_unimap(struct vc_data *vc, int rdonly); int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc); int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc); #define vc_translate(vc, c) ((vc)->vc_translate[(c) | \ (vc)->vc_toggle_meta ? 0x80 : 0]) #else #define con_set_trans_old(arg) (0) #define con_get_trans_old(arg) (-EINVAL) #define con_set_trans_new(arg) (0) #define con_get_trans_new(arg) (-EINVAL) #define con_clear_unimap(vc, ui) (0) #define con_set_unimap(vc, ct, list) (0) #define con_set_default_unimap(vc) (0) #define con_copy_unimap(d, s) (0) #define con_get_unimap(vc, ct, uct, list) (-EINVAL) #define con_free_unimap(vc) do { ; } while (0) #define vc_translate(vc, c) (c) #endif /* vt.c */ /* vt.c */ int vt_waitactive(int vt); int vt_waitactive(int vt); void change_console(struct vc_data *new_vc); void change_console(struct vc_data *new_vc); Loading Loading
drivers/char/Kconfig +8 −0 Original line number Original line Diff line number Diff line Loading @@ -36,6 +36,14 @@ config VT If unsure, say Y, or else you won't be able to do much with your new If unsure, say Y, or else you won't be able to do much with your new shiny Linux system :-) shiny Linux system :-) config CONSOLE_TRANSLATIONS depends on VT default y bool "Enable character translations in console" if EMBEDDED ---help--- This enables support for font mapping and Unicode translation on virtual consoles. config VT_CONSOLE config VT_CONSOLE bool "Support for console on virtual terminal" if EMBEDDED bool "Support for console on virtual terminal" if EMBEDDED depends on VT depends on VT Loading
drivers/char/Makefile +2 −2 Original line number Original line Diff line number Diff line Loading @@ -12,8 +12,8 @@ obj-y += mem.o random.o tty_io.o n_tty.o tty_ioctl.o tty_ldisc.o obj-$(CONFIG_LEGACY_PTYS) += pty.o obj-$(CONFIG_LEGACY_PTYS) += pty.o obj-$(CONFIG_UNIX98_PTYS) += pty.o obj-$(CONFIG_UNIX98_PTYS) += pty.o obj-y += misc.o obj-y += misc.o obj-$(CONFIG_VT) += vt_ioctl.o vc_screen.o consolemap.o \ obj-$(CONFIG_VT) += vt_ioctl.o vc_screen.o selection.o keyboard.o consolemap_deftbl.o selection.o keyboard.o obj-$(CONFIG_CONSOLE_TRANSLATIONS) += consolemap.o consolemap_deftbl.o obj-$(CONFIG_HW_CONSOLE) += vt.o defkeymap.o obj-$(CONFIG_HW_CONSOLE) += vt.o defkeymap.o obj-$(CONFIG_AUDIT) += tty_audit.o obj-$(CONFIG_AUDIT) += tty_audit.o obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o Loading
drivers/char/vt.c +1 −1 Original line number Original line Diff line number Diff line Loading @@ -2211,7 +2211,7 @@ static int do_con_write(struct tty_struct *tty, const unsigned char *buf, int co c = 0xfffd; c = 0xfffd; tc = c; tc = c; } else { /* no utf or alternate charset mode */ } else { /* no utf or alternate charset mode */ tc = vc->vc_translate[vc->vc_toggle_meta ? (c | 0x80) : c]; tc = vc_translate(vc, c); } } param.c = tc; param.c = tc; Loading
include/linux/consolemap.h +14 −0 Original line number Original line Diff line number Diff line Loading @@ -3,6 +3,9 @@ * * * Interface between console.c, selection.c and consolemap.c * Interface between console.c, selection.c and consolemap.c */ */ #ifndef __LINUX_CONSOLEMAP_H__ #define __LINUX_CONSOLEMAP_H__ #define LAT1_MAP 0 #define LAT1_MAP 0 #define GRAF_MAP 1 #define GRAF_MAP 1 #define IBMPC_MAP 2 #define IBMPC_MAP 2 Loading @@ -10,6 +13,7 @@ #include <linux/types.h> #include <linux/types.h> #ifdef CONFIG_CONSOLE_TRANSLATIONS struct vc_data; struct vc_data; extern u16 inverse_translate(struct vc_data *conp, int glyph, int use_unicode); extern u16 inverse_translate(struct vc_data *conp, int glyph, int use_unicode); Loading @@ -18,3 +22,13 @@ extern int conv_uni_to_pc(struct vc_data *conp, long ucs); extern u32 conv_8bit_to_uni(unsigned char c); extern u32 conv_8bit_to_uni(unsigned char c); extern int conv_uni_to_8bit(u32 uni); extern int conv_uni_to_8bit(u32 uni); void console_map_init(void); void console_map_init(void); #else #define inverse_translate(conp, glyph, uni) ((uint16_t)glyph) #define set_translate(m, vc) ((unsigned short *)NULL) #define conv_uni_to_pc(conp, ucs) ((int) (ucs > 0xff ? -1: ucs)) #define conv_8bit_to_uni(c) ((uint32_t)(c)) #define conv_uni_to_8bit(c) ((int) ((c) & 0xff)) #define console_map_init(c) do { ; } while (0) #endif /* CONFIG_CONSOLE_TRANSLATIONS */ #endif /* __LINUX_CONSOLEMAP_H__ */
include/linux/vt_kern.h +19 −0 Original line number Original line Diff line number Diff line Loading @@ -12,6 +12,7 @@ #include <linux/mutex.h> #include <linux/mutex.h> #include <linux/console_struct.h> #include <linux/console_struct.h> #include <linux/mm.h> #include <linux/mm.h> #include <linux/consolemap.h> /* /* * Presently, a lot of graphics programs do not restore the contents of * Presently, a lot of graphics programs do not restore the contents of Loading Loading @@ -54,6 +55,7 @@ void redraw_screen(struct vc_data *vc, int is_switch); struct tty_struct; struct tty_struct; int tioclinux(struct tty_struct *tty, unsigned long arg); int tioclinux(struct tty_struct *tty, unsigned long arg); #ifdef CONFIG_CONSOLE_TRANSLATIONS /* consolemap.c */ /* consolemap.c */ struct unimapinit; struct unimapinit; Loading @@ -71,6 +73,23 @@ void con_free_unimap(struct vc_data *vc); void con_protect_unimap(struct vc_data *vc, int rdonly); void con_protect_unimap(struct vc_data *vc, int rdonly); int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc); int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc); #define vc_translate(vc, c) ((vc)->vc_translate[(c) | \ (vc)->vc_toggle_meta ? 0x80 : 0]) #else #define con_set_trans_old(arg) (0) #define con_get_trans_old(arg) (-EINVAL) #define con_set_trans_new(arg) (0) #define con_get_trans_new(arg) (-EINVAL) #define con_clear_unimap(vc, ui) (0) #define con_set_unimap(vc, ct, list) (0) #define con_set_default_unimap(vc) (0) #define con_copy_unimap(d, s) (0) #define con_get_unimap(vc, ct, uct, list) (-EINVAL) #define con_free_unimap(vc) do { ; } while (0) #define vc_translate(vc, c) (c) #endif /* vt.c */ /* vt.c */ int vt_waitactive(int vt); int vt_waitactive(int vt); void change_console(struct vc_data *new_vc); void change_console(struct vc_data *new_vc); Loading