xref: /linux/arch/s390/kernel/ebcdic.c (revision ca55b2fef3a9373fcfc30f82fd26bc7fccbda732)
1 /*
2  *    ECBDIC -> ASCII, ASCII -> ECBDIC,
3  *    upper to lower case (EBCDIC) conversion tables.
4  *
5  *  S390 version
6  *    Copyright IBM Corp. 1999
7  *    Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
8  *               Martin Peschke <peschke@fh-brandenburg.de>
9  */
10 
11 #include <linux/module.h>
12 #include <asm/types.h>
13 #include <asm/ebcdic.h>
14 
15 /*
16  * ASCII (IBM PC 437)  -> EBCDIC 037
17  */
18 __u8 _ascebc[256] =
19 {
20  /*00 NUL   SOH   STX   ETX   EOT   ENQ   ACK   BEL */
21      0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F,
22  /*08  BS    HT    LF    VT    FF    CR    SO    SI */
23  /*              ->NL                               */
24      0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
25  /*10 DLE   DC1   DC2   DC3   DC4   NAK   SYN   ETB */
26      0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26,
27  /*18 CAN    EM   SUB   ESC    FS    GS    RS    US */
28  /*                               ->IGS ->IRS ->IUS */
29      0x18, 0x19, 0x3F, 0x27, 0x22, 0x1D, 0x1E, 0x1F,
30  /*20  SP     !     "     #     $     %     &     ' */
31      0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D,
32  /*28   (     )     *     +     ,     -    .      / */
33      0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
34  /*30   0     1     2     3     4     5     6     7 */
35      0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
36  /*38   8     9     :     ;     <     =     >     ? */
37      0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
38  /*40   @     A     B     C     D     E     F     G */
39      0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
40  /*48   H     I     J     K     L     M     N     O */
41      0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
42  /*50   P     Q     R     S     T     U     V     W */
43      0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
44  /*58   X     Y     Z     [     \     ]     ^     _ */
45      0xE7, 0xE8, 0xE9, 0xBA, 0xE0, 0xBB, 0xB0, 0x6D,
46  /*60   `     a     b     c     d     e     f     g */
47      0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
48  /*68   h     i     j     k     l     m     n     o */
49      0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
50  /*70   p     q     r     s     t     u     v     w */
51      0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
52  /*78   x     y     z     {     |     }     ~    DL */
53      0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07,
54  /*80*/
55      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
56  /*88*/
57      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
58  /*90*/
59      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
60  /*98*/
61      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
62  /*A0*/
63      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
64  /*A8*/
65      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
66  /*B0*/
67      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
68  /*B8*/
69      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
70  /*C0*/
71      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
72  /*C8*/
73      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
74  /*D0*/
75      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
76  /*D8*/
77      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
78  /*E0        sz						*/
79      0x3F, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
80  /*E8*/
81      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
82  /*F0*/
83      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
84  /*F8*/
85      0x90, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0x3F, 0xFF
86 };
87 
88 /*
89  * EBCDIC 037 -> ASCII (IBM PC 437)
90  */
91 __u8 _ebcasc[256] =
92 {
93  /* 0x00   NUL   SOH   STX   ETX  *SEL    HT  *RNL   DEL */
94           0x00, 0x01, 0x02, 0x03, 0x07, 0x09, 0x07, 0x7F,
95  /* 0x08   -GE  -SPS  -RPT    VT    FF    CR    SO    SI */
96           0x07, 0x07, 0x07, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
97  /* 0x10   DLE   DC1   DC2   DC3  -RES   -NL    BS  -POC
98                                   -ENP  ->LF             */
99           0x10, 0x11, 0x12, 0x13, 0x07, 0x0A, 0x08, 0x07,
100  /* 0x18   CAN    EM  -UBS  -CU1  -IFS  -IGS  -IRS  -ITB
101                                                     -IUS */
102           0x18, 0x19, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
103  /* 0x20   -DS  -SOS    FS  -WUS  -BYP    LF   ETB   ESC
104                                   -INP                   */
105           0x07, 0x07, 0x1C, 0x07, 0x07, 0x0A, 0x17, 0x1B,
106  /* 0x28   -SA  -SFE   -SM  -CSP  -MFA   ENQ   ACK   BEL
107                        -SW                               */
108           0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x06, 0x07,
109  /* 0x30  ----  ----   SYN   -IR   -PP  -TRN  -NBS   EOT */
110           0x07, 0x07, 0x16, 0x07, 0x07, 0x07, 0x07, 0x04,
111  /* 0x38  -SBS   -IT  -RFF  -CU3   DC4   NAK  ----   SUB */
112           0x07, 0x07, 0x07, 0x07, 0x14, 0x15, 0x07, 0x1A,
113  /* 0x40    SP   RSP           ��              ----       */
114           0x20, 0xFF, 0x83, 0x84, 0x85, 0xA0, 0x07, 0x86,
115  /* 0x48                       .     <     (     +     | */
116           0x87, 0xA4, 0x9B, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
117  /* 0x50     &                                      ---- */
118           0x26, 0x82, 0x88, 0x89, 0x8A, 0xA1, 0x8C, 0x07,
119  /* 0x58           ��     !     $     *     )     ;       */
120           0x8D, 0xE1, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0xAA,
121  /* 0x60     -     /  ----     ��  ----  ----  ----       */
122           0x2D, 0x2F, 0x07, 0x8E, 0x07, 0x07, 0x07, 0x8F,
123  /* 0x68              ----     ,     %     _     >     ? */
124           0x80, 0xA5, 0x07, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
125  /* 0x70  ----        ----  ----  ----  ----  ----  ---- */
126           0x07, 0x90, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
127  /* 0x78     *     `     :     #     @     '     =     " */
128           0x70, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
129  /* 0x80     *     a     b     c     d     e     f     g */
130           0x07, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
131  /* 0x88     h     i              ----  ----  ----       */
132           0x68, 0x69, 0xAE, 0xAF, 0x07, 0x07, 0x07, 0xF1,
133  /* 0x90     ��     j     k     l     m     n     o     p */
134           0xF8, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
135  /* 0x98     q     r                    ----        ---- */
136           0x71, 0x72, 0xA6, 0xA7, 0x91, 0x07, 0x92, 0x07,
137  /* 0xA0           ~     s     t     u     v     w     x */
138           0xE6, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
139  /* 0xA8     y     z              ----  ----  ----  ---- */
140           0x79, 0x7A, 0xAD, 0xAB, 0x07, 0x07, 0x07, 0x07,
141  /* 0xB0     ^                    ----     ��  ----       */
142           0x5E, 0x9C, 0x9D, 0xFA, 0x07, 0x07, 0x07, 0xAC,
143  /* 0xB8        ----     [     ]  ----  ----  ----  ---- */
144           0xAB, 0x07, 0x5B, 0x5D, 0x07, 0x07, 0x07, 0x07,
145  /* 0xC0     {     A     B     C     D     E     F     G */
146           0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
147  /* 0xC8     H     I  ----           ��              ---- */
148           0x48, 0x49, 0x07, 0x93, 0x94, 0x95, 0xA2, 0x07,
149  /* 0xD0     }     J     K     L     M     N     O     P */
150           0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
151  /* 0xD8     Q     R  ----           ��                   */
152           0x51, 0x52, 0x07, 0x96, 0x81, 0x97, 0xA3, 0x98,
153  /* 0xE0     \           S     T     U     V     W     X */
154           0x5C, 0xF6, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
155  /* 0xE8     Y     Z        ----     ��  ----  ----  ---- */
156           0x59, 0x5A, 0xFD, 0x07, 0x99, 0x07, 0x07, 0x07,
157  /* 0xF0     0     1     2     3     4     5     6     7 */
158           0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
159  /* 0xF8     8     9  ----  ----     ��  ----  ----  ---- */
160           0x38, 0x39, 0x07, 0x07, 0x9A, 0x07, 0x07, 0x07
161 };
162 
163 
164 /*
165  * ASCII (IBM PC 437)  -> EBCDIC 500
166  */
167 __u8 _ascebc_500[256] =
168 {
169  /*00 NUL   SOH   STX   ETX   EOT   ENQ   ACK   BEL */
170      0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F,
171  /*08  BS    HT    LF    VT    FF    CR    SO    SI */
172  /*              ->NL                               */
173      0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
174  /*10 DLE   DC1   DC2   DC3   DC4   NAK   SYN   ETB */
175      0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26,
176  /*18 CAN    EM   SUB   ESC    FS    GS    RS    US */
177  /*                               ->IGS ->IRS ->IUS */
178      0x18, 0x19, 0x3F, 0x27, 0x22, 0x1D, 0x1E, 0x1F,
179  /*20  SP     !     "     #     $     %     &     ' */
180      0x40, 0x4F, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D,
181  /*28   (     )     *     +     ,     -    .      / */
182      0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
183  /*30   0     1     2     3     4     5     6     7 */
184      0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
185  /*38   8     9     :     ;     <     =     >     ? */
186      0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
187  /*40   @     A     B     C     D     E     F     G */
188      0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
189  /*48   H     I     J     K     L     M     N     O */
190      0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
191  /*50   P     Q     R     S     T     U     V     W */
192      0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
193  /*58   X     Y     Z     [     \     ]     ^     _ */
194      0xE7, 0xE8, 0xE9, 0x4A, 0xE0, 0x5A, 0x5F, 0x6D,
195  /*60   `     a     b     c     d     e     f     g */
196      0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
197  /*68   h     i     j     k     l     m     n     o */
198      0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
199  /*70   p     q     r     s     t     u     v     w */
200      0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
201  /*78   x     y     z     {     |     }     ~    DL */
202      0xA7, 0xA8, 0xA9, 0xC0, 0xBB, 0xD0, 0xA1, 0x07,
203  /*80*/
204      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
205  /*88*/
206      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
207  /*90*/
208      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
209  /*98*/
210      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
211  /*A0*/
212      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
213  /*A8*/
214      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
215  /*B0*/
216      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
217  /*B8*/
218      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
219  /*C0*/
220      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
221  /*C8*/
222      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
223  /*D0*/
224      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
225  /*D8*/
226      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
227  /*E0        sz						*/
228      0x3F, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
229  /*E8*/
230      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
231  /*F0*/
232      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
233  /*F8*/
234      0x90, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0x3F, 0xFF
235 };
236 
237 /*
238  * EBCDIC 500 -> ASCII (IBM PC 437)
239  */
240 __u8 _ebcasc_500[256] =
241 {
242  /* 0x00   NUL   SOH   STX   ETX  *SEL    HT  *RNL   DEL */
243           0x00, 0x01, 0x02, 0x03, 0x07, 0x09, 0x07, 0x7F,
244  /* 0x08   -GE  -SPS  -RPT    VT    FF    CR    SO    SI */
245           0x07, 0x07, 0x07, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
246  /* 0x10   DLE   DC1   DC2   DC3  -RES   -NL    BS  -POC
247                                   -ENP  ->LF             */
248           0x10, 0x11, 0x12, 0x13, 0x07, 0x0A, 0x08, 0x07,
249  /* 0x18   CAN    EM  -UBS  -CU1  -IFS  -IGS  -IRS  -ITB
250                                                     -IUS */
251           0x18, 0x19, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
252  /* 0x20   -DS  -SOS    FS  -WUS  -BYP    LF   ETB   ESC
253                                   -INP                   */
254           0x07, 0x07, 0x1C, 0x07, 0x07, 0x0A, 0x17, 0x1B,
255  /* 0x28   -SA  -SFE   -SM  -CSP  -MFA   ENQ   ACK   BEL
256                        -SW                               */
257           0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x06, 0x07,
258  /* 0x30  ----  ----   SYN   -IR   -PP  -TRN  -NBS   EOT */
259           0x07, 0x07, 0x16, 0x07, 0x07, 0x07, 0x07, 0x04,
260  /* 0x38  -SBS   -IT  -RFF  -CU3   DC4   NAK  ----   SUB */
261           0x07, 0x07, 0x07, 0x07, 0x14, 0x15, 0x07, 0x1A,
262  /* 0x40    SP   RSP           ��              ----       */
263           0x20, 0xFF, 0x83, 0x84, 0x85, 0xA0, 0x07, 0x86,
264  /* 0x48                 [     .     <     (     +     ! */
265           0x87, 0xA4, 0x5B, 0x2E, 0x3C, 0x28, 0x2B, 0x21,
266  /* 0x50     &                                      ---- */
267           0x26, 0x82, 0x88, 0x89, 0x8A, 0xA1, 0x8C, 0x07,
268  /* 0x58           ��     ]     $     *     )     ;     ^ */
269           0x8D, 0xE1, 0x5D, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
270  /* 0x60     -     /  ----     ��  ----  ----  ----       */
271           0x2D, 0x2F, 0x07, 0x8E, 0x07, 0x07, 0x07, 0x8F,
272  /* 0x68              ----     ,     %     _     >     ? */
273           0x80, 0xA5, 0x07, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
274  /* 0x70  ----        ----  ----  ----  ----  ----  ---- */
275           0x07, 0x90, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
276  /* 0x78     *     `     :     #     @     '     =     " */
277           0x70, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
278  /* 0x80     *     a     b     c     d     e     f     g */
279           0x07, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
280  /* 0x88     h     i              ----  ----  ----       */
281           0x68, 0x69, 0xAE, 0xAF, 0x07, 0x07, 0x07, 0xF1,
282  /* 0x90     ��     j     k     l     m     n     o     p */
283           0xF8, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
284  /* 0x98     q     r                    ----        ---- */
285           0x71, 0x72, 0xA6, 0xA7, 0x91, 0x07, 0x92, 0x07,
286  /* 0xA0           ~     s     t     u     v     w     x */
287           0xE6, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
288  /* 0xA8     y     z              ----  ----  ----  ---- */
289           0x79, 0x7A, 0xAD, 0xAB, 0x07, 0x07, 0x07, 0x07,
290  /* 0xB0                          ----     ��  ----       */
291           0x9B, 0x9C, 0x9D, 0xFA, 0x07, 0x07, 0x07, 0xAC,
292  /* 0xB8        ----           |  ----  ----  ----  ---- */
293           0xAB, 0x07, 0xAA, 0x7C, 0x07, 0x07, 0x07, 0x07,
294  /* 0xC0     {     A     B     C     D     E     F     G */
295           0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
296  /* 0xC8     H     I  ----           ��              ---- */
297           0x48, 0x49, 0x07, 0x93, 0x94, 0x95, 0xA2, 0x07,
298  /* 0xD0     }     J     K     L     M     N     O     P */
299           0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
300  /* 0xD8     Q     R  ----           ��                   */
301           0x51, 0x52, 0x07, 0x96, 0x81, 0x97, 0xA3, 0x98,
302  /* 0xE0     \           S     T     U     V     W     X */
303           0x5C, 0xF6, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
304  /* 0xE8     Y     Z        ----     ��  ----  ----  ---- */
305           0x59, 0x5A, 0xFD, 0x07, 0x99, 0x07, 0x07, 0x07,
306  /* 0xF0     0     1     2     3     4     5     6     7 */
307           0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
308  /* 0xF8     8     9  ----  ----     ��  ----  ----  ---- */
309           0x38, 0x39, 0x07, 0x07, 0x9A, 0x07, 0x07, 0x07
310 };
311 
312 
313 /*
314  * EBCDIC 037/500 conversion table:
315  * from upper to lower case
316  */
317 __u8 _ebc_tolower[256] =
318 {
319 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
320 	0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
321 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
322 	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
323 	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
324 	0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
325 	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
326 	0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
327 	0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
328 	0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
329 	0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
330 	0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
331 	0x60, 0x61, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
332 	0x48, 0x49, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
333 	0x70, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
334 	0x58, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
335 	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
336 	0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
337 	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
338 	0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9C, 0x9F,
339 	0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
340 	0xA8, 0xA9, 0xAA, 0xAB, 0x8C, 0x8D, 0x8E, 0xAF,
341 	0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
342 	0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
343 	0xC0, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
344 	0x88, 0x89, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
345 	0xD0, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
346 	0x98, 0x99, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
347 	0xE0, 0xE1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
348 	0xA8, 0xA9, 0xEA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
349 	0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
350 	0xF8, 0xF9, 0xFA, 0xDB, 0xDC, 0xDD, 0xDE, 0xFF
351 };
352 
353 
354 /*
355  * EBCDIC 037/500 conversion table:
356  * from lower to upper case
357  */
358 __u8 _ebc_toupper[256] =
359 {
360 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
361 	0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
362 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
363 	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
364 	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
365 	0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
366 	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
367 	0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
368 	0x40, 0x41, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
369 	0x68, 0x69, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
370 	0x50, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
371 	0x78, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
372 	0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
373 	0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
374 	0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
375 	0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
376 	0x80, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
377 	0xC8, 0xC9, 0x8A, 0x8B, 0xAC, 0xAD, 0xAE, 0x8F,
378 	0x90, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
379 	0xD8, 0xD9, 0x9A, 0x9B, 0x9E, 0x9D, 0x9E, 0x9F,
380 	0xA0, 0xA1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
381 	0xE8, 0xE9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
382 	0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
383 	0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
384 	0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
385 	0xC8, 0xC9, 0xCA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
386 	0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
387 	0xD8, 0xD9, 0xDA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF,
388 	0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
389 	0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
390 	0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
391 	0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
392 };
393 
394 EXPORT_SYMBOL(_ascebc_500);
395 EXPORT_SYMBOL(_ebcasc_500);
396 EXPORT_SYMBOL(_ascebc);
397 EXPORT_SYMBOL(_ebcasc);
398 EXPORT_SYMBOL(_ebc_tolower);
399 EXPORT_SYMBOL(_ebc_toupper);
400 
401