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