Commit a29ccf6f823a84d89e1c7aaaf221cf7282022024

Authored by David Woodhouse
1 parent 1beee8dc8c

Make console charset translation optional

By turning off the new CONSOLE_TRANSLATIONS option and dropping the
associated code and tables from the kernel, we can save about 7KiB.

Taken from linux-tiny project by Tim Bird and mangled further by dwmw2.

Signed-off-by: Tim Bird <tim.bird@am.sony.com>
Signed-off-by: David Woodhouse <dwmw2@infradead.org>

Showing 5 changed files with 44 additions and 3 deletions Side-by-side Diff

drivers/char/Kconfig
... ... @@ -36,6 +36,14 @@
36 36 If unsure, say Y, or else you won't be able to do much with your new
37 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 47 config VT_CONSOLE
40 48 bool "Support for console on virtual terminal" if EMBEDDED
41 49 depends on VT
drivers/char/Makefile
... ... @@ -12,8 +12,8 @@
12 12 obj-$(CONFIG_LEGACY_PTYS) += pty.o
13 13 obj-$(CONFIG_UNIX98_PTYS) += pty.o
14 14 obj-y += misc.o
15   -obj-$(CONFIG_VT) += vt_ioctl.o vc_screen.o consolemap.o \
16   - consolemap_deftbl.o selection.o keyboard.o
  15 +obj-$(CONFIG_VT) += vt_ioctl.o vc_screen.o selection.o keyboard.o
  16 +obj-$(CONFIG_CONSOLE_TRANSLATIONS) += consolemap.o consolemap_deftbl.o
17 17 obj-$(CONFIG_HW_CONSOLE) += vt.o defkeymap.o
18 18 obj-$(CONFIG_AUDIT) += tty_audit.o
19 19 obj-$(CONFIG_MAGIC_SYSRQ) += sysrq.o
... ... @@ -2208,7 +2208,7 @@
2208 2208 c = 0xfffd;
2209 2209 tc = c;
2210 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 2214 param.c = tc;
include/linux/consolemap.h
... ... @@ -3,6 +3,9 @@
3 3 *
4 4 * Interface between console.c, selection.c and consolemap.c
5 5 */
  6 +#ifndef __LINUX_CONSOLEMAP_H__
  7 +#define __LINUX_CONSOLEMAP_H__
  8 +
6 9 #define LAT1_MAP 0
7 10 #define GRAF_MAP 1
8 11 #define IBMPC_MAP 2
... ... @@ -10,6 +13,7 @@
10 13  
11 14 #include <linux/types.h>
12 15  
  16 +#ifdef CONFIG_CONSOLE_TRANSLATIONS
13 17 struct vc_data;
14 18  
15 19 extern u16 inverse_translate(struct vc_data *conp, int glyph, int use_unicode);
... ... @@ -18,4 +22,14 @@
18 22 extern u32 conv_8bit_to_uni(unsigned char c);
19 23 extern int conv_uni_to_8bit(u32 uni);
20 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__ */
include/linux/vt_kern.h
... ... @@ -12,6 +12,7 @@
12 12 #include <linux/mutex.h>
13 13 #include <linux/console_struct.h>
14 14 #include <linux/mm.h>
  15 +#include <linux/consolemap.h>
15 16  
16 17 /*
17 18 * Presently, a lot of graphics programs do not restore the contents of
... ... @@ -54,6 +55,7 @@
54 55 struct tty_struct;
55 56 int tioclinux(struct tty_struct *tty, unsigned long arg);
56 57  
  58 +#ifdef CONFIG_CONSOLE_TRANSLATIONS
57 59 /* consolemap.c */
58 60  
59 61 struct unimapinit;
... ... @@ -70,6 +72,23 @@
70 72 void con_free_unimap(struct vc_data *vc);
71 73 void con_protect_unimap(struct vc_data *vc, int rdonly);
72 74 int con_copy_unimap(struct vc_data *dst_vc, struct vc_data *src_vc);
  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
73 92  
74 93 /* vt.c */
75 94 int vt_waitactive(int vt);