Merge commit '85082fd7cbe3173198aac0eb5e85ab1edcc6352c' into test-build
[linux-2.6] / arch / s390 / kernel / ebcdic.c
1 /*
2  *  arch/s390/kernel/ebcdic.c
3  *    ECBDIC -> ASCII, ASCII -> ECBDIC,
4  *    upper to lower case (EBCDIC) conversion tables.
5  *
6  *  S390 version
7  *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
8  *    Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
9  *               Martin Peschke <peschke@fh-brandenburg.de>
10  */
11
12 #include <linux/module.h>
13 #include <asm/types.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           \81ä              ----       */
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           \81ß     !     $     *     )     ;       */
121           0x8D, 0xE1, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0xAA,
122  /* 0x60     -     /  ----     \81Ä  ----  ----  ----       */
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     \81°     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     ^                    ----     \81§  ----       */
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  ----           \81ö              ---- */
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  ----           \81ü                   */
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        ----     \81Ö  ----  ----  ---- */
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  ----  ----     \81Ü  ----  ----  ---- */
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           \81ä              ----       */
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           \81ß     ]     $     *     )     ;     ^ */
270           0x8D, 0xE1, 0x5D, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
271  /* 0x60     -     /  ----     \81Ä  ----  ----  ----       */
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     \81°     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                          ----     \81§  ----       */
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  ----           \81ö              ---- */
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  ----           \81ü                   */
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        ----     \81Ö  ----  ----  ---- */
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  ----  ----     \81Ü  ----  ----  ---- */
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