xref: /openbmc/linux/arch/s390/kernel/ebcdic.c (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
21da177e4SLinus Torvalds /*
3*7fb0ad19SChristophe JAILLET  *    EBCDIC -> ASCII, ASCII -> EBCDIC,
41da177e4SLinus Torvalds  *    upper to lower case (EBCDIC) conversion tables.
51da177e4SLinus Torvalds  *
61da177e4SLinus Torvalds  *  S390 version
7a53c8fabSHeiko Carstens  *    Copyright IBM Corp. 1999
81da177e4SLinus Torvalds  *    Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
91da177e4SLinus Torvalds  *               Martin Peschke <peschke@fh-brandenburg.de>
101da177e4SLinus Torvalds  */
111da177e4SLinus Torvalds 
123994a52bSPaul Gortmaker #include <linux/types.h>
133994a52bSPaul Gortmaker #include <linux/export.h>
142b67fc46SHeiko Carstens #include <asm/ebcdic.h>
151da177e4SLinus Torvalds 
161da177e4SLinus Torvalds /*
171da177e4SLinus Torvalds  * ASCII (IBM PC 437)  -> EBCDIC 037
181da177e4SLinus Torvalds  */
191da177e4SLinus Torvalds __u8 _ascebc[256] =
201da177e4SLinus Torvalds {
211da177e4SLinus Torvalds  /*00 NUL   SOH   STX   ETX   EOT   ENQ   ACK   BEL */
221da177e4SLinus Torvalds      0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F,
231da177e4SLinus Torvalds  /*08  BS    HT    LF    VT    FF    CR    SO    SI */
241da177e4SLinus Torvalds  /*              ->NL                               */
251da177e4SLinus Torvalds      0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
261da177e4SLinus Torvalds  /*10 DLE   DC1   DC2   DC3   DC4   NAK   SYN   ETB */
271da177e4SLinus Torvalds      0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26,
281da177e4SLinus Torvalds  /*18 CAN    EM   SUB   ESC    FS    GS    RS    US */
291da177e4SLinus Torvalds  /*                               ->IGS ->IRS ->IUS */
301da177e4SLinus Torvalds      0x18, 0x19, 0x3F, 0x27, 0x22, 0x1D, 0x1E, 0x1F,
311da177e4SLinus Torvalds  /*20  SP     !     "     #     $     %     &     ' */
321da177e4SLinus Torvalds      0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D,
331da177e4SLinus Torvalds  /*28   (     )     *     +     ,     -    .      / */
341da177e4SLinus Torvalds      0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
351da177e4SLinus Torvalds  /*30   0     1     2     3     4     5     6     7 */
361da177e4SLinus Torvalds      0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
371da177e4SLinus Torvalds  /*38   8     9     :     ;     <     =     >     ? */
381da177e4SLinus Torvalds      0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
391da177e4SLinus Torvalds  /*40   @     A     B     C     D     E     F     G */
401da177e4SLinus Torvalds      0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
411da177e4SLinus Torvalds  /*48   H     I     J     K     L     M     N     O */
421da177e4SLinus Torvalds      0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
431da177e4SLinus Torvalds  /*50   P     Q     R     S     T     U     V     W */
441da177e4SLinus Torvalds      0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
451da177e4SLinus Torvalds  /*58   X     Y     Z     [     \     ]     ^     _ */
461da177e4SLinus Torvalds      0xE7, 0xE8, 0xE9, 0xBA, 0xE0, 0xBB, 0xB0, 0x6D,
471da177e4SLinus Torvalds  /*60   `     a     b     c     d     e     f     g */
481da177e4SLinus Torvalds      0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
491da177e4SLinus Torvalds  /*68   h     i     j     k     l     m     n     o */
501da177e4SLinus Torvalds      0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
511da177e4SLinus Torvalds  /*70   p     q     r     s     t     u     v     w */
521da177e4SLinus Torvalds      0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
531da177e4SLinus Torvalds  /*78   x     y     z     {     |     }     ~    DL */
541da177e4SLinus Torvalds      0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07,
551da177e4SLinus Torvalds  /*80*/
561da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
571da177e4SLinus Torvalds  /*88*/
581da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
591da177e4SLinus Torvalds  /*90*/
601da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
611da177e4SLinus Torvalds  /*98*/
621da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
631da177e4SLinus Torvalds  /*A0*/
641da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
651da177e4SLinus Torvalds  /*A8*/
661da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
671da177e4SLinus Torvalds  /*B0*/
681da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
691da177e4SLinus Torvalds  /*B8*/
701da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
711da177e4SLinus Torvalds  /*C0*/
721da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
731da177e4SLinus Torvalds  /*C8*/
741da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
751da177e4SLinus Torvalds  /*D0*/
761da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
771da177e4SLinus Torvalds  /*D8*/
781da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
791da177e4SLinus Torvalds  /*E0        sz						*/
801da177e4SLinus Torvalds      0x3F, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
811da177e4SLinus Torvalds  /*E8*/
821da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
831da177e4SLinus Torvalds  /*F0*/
841da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
851da177e4SLinus Torvalds  /*F8*/
861da177e4SLinus Torvalds      0x90, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0x3F, 0xFF
871da177e4SLinus Torvalds };
881da177e4SLinus Torvalds 
891da177e4SLinus Torvalds /*
901da177e4SLinus Torvalds  * EBCDIC 037 -> ASCII (IBM PC 437)
911da177e4SLinus Torvalds  */
921da177e4SLinus Torvalds __u8 _ebcasc[256] =
931da177e4SLinus Torvalds {
941da177e4SLinus Torvalds  /* 0x00   NUL   SOH   STX   ETX  *SEL    HT  *RNL   DEL */
951da177e4SLinus Torvalds           0x00, 0x01, 0x02, 0x03, 0x07, 0x09, 0x07, 0x7F,
961da177e4SLinus Torvalds  /* 0x08   -GE  -SPS  -RPT    VT    FF    CR    SO    SI */
971da177e4SLinus Torvalds           0x07, 0x07, 0x07, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
981da177e4SLinus Torvalds  /* 0x10   DLE   DC1   DC2   DC3  -RES   -NL    BS  -POC
991da177e4SLinus Torvalds                                   -ENP  ->LF             */
1001da177e4SLinus Torvalds           0x10, 0x11, 0x12, 0x13, 0x07, 0x0A, 0x08, 0x07,
1011da177e4SLinus Torvalds  /* 0x18   CAN    EM  -UBS  -CU1  -IFS  -IGS  -IRS  -ITB
1021da177e4SLinus Torvalds                                                     -IUS */
1031da177e4SLinus Torvalds           0x18, 0x19, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
1041da177e4SLinus Torvalds  /* 0x20   -DS  -SOS    FS  -WUS  -BYP    LF   ETB   ESC
1051da177e4SLinus Torvalds                                   -INP                   */
1061da177e4SLinus Torvalds           0x07, 0x07, 0x1C, 0x07, 0x07, 0x0A, 0x17, 0x1B,
1071da177e4SLinus Torvalds  /* 0x28   -SA  -SFE   -SM  -CSP  -MFA   ENQ   ACK   BEL
1081da177e4SLinus Torvalds                        -SW                               */
1091da177e4SLinus Torvalds           0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x06, 0x07,
1101da177e4SLinus Torvalds  /* 0x30  ----  ----   SYN   -IR   -PP  -TRN  -NBS   EOT */
1111da177e4SLinus Torvalds           0x07, 0x07, 0x16, 0x07, 0x07, 0x07, 0x07, 0x04,
1121da177e4SLinus Torvalds  /* 0x38  -SBS   -IT  -RFF  -CU3   DC4   NAK  ----   SUB */
1131da177e4SLinus Torvalds           0x07, 0x07, 0x07, 0x07, 0x14, 0x15, 0x07, 0x1A,
1148f2bc80cSArnd Bergmann  /* 0x40    SP   RSP           ä              ----       */
1151da177e4SLinus Torvalds           0x20, 0xFF, 0x83, 0x84, 0x85, 0xA0, 0x07, 0x86,
1161da177e4SLinus Torvalds  /* 0x48                       .     <     (     +     | */
1171da177e4SLinus Torvalds           0x87, 0xA4, 0x9B, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
1181da177e4SLinus Torvalds  /* 0x50     &                                      ---- */
1191da177e4SLinus Torvalds           0x26, 0x82, 0x88, 0x89, 0x8A, 0xA1, 0x8C, 0x07,
1208f2bc80cSArnd Bergmann  /* 0x58           ß     !     $     *     )     ;       */
1211da177e4SLinus Torvalds           0x8D, 0xE1, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0xAA,
1228f2bc80cSArnd Bergmann  /* 0x60     -     /  ----     Ä  ----  ----  ----       */
1231da177e4SLinus Torvalds           0x2D, 0x2F, 0x07, 0x8E, 0x07, 0x07, 0x07, 0x8F,
1241da177e4SLinus Torvalds  /* 0x68              ----     ,     %     _     >     ? */
1251da177e4SLinus Torvalds           0x80, 0xA5, 0x07, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
1261da177e4SLinus Torvalds  /* 0x70  ----        ----  ----  ----  ----  ----  ---- */
1271da177e4SLinus Torvalds           0x07, 0x90, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
1281da177e4SLinus Torvalds  /* 0x78     *     `     :     #     @     '     =     " */
1291da177e4SLinus Torvalds           0x70, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
1301da177e4SLinus Torvalds  /* 0x80     *     a     b     c     d     e     f     g */
1311da177e4SLinus Torvalds           0x07, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
1321da177e4SLinus Torvalds  /* 0x88     h     i              ----  ----  ----       */
1331da177e4SLinus Torvalds           0x68, 0x69, 0xAE, 0xAF, 0x07, 0x07, 0x07, 0xF1,
1348f2bc80cSArnd Bergmann  /* 0x90     °     j     k     l     m     n     o     p */
1351da177e4SLinus Torvalds           0xF8, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
1361da177e4SLinus Torvalds  /* 0x98     q     r                    ----        ---- */
1371da177e4SLinus Torvalds           0x71, 0x72, 0xA6, 0xA7, 0x91, 0x07, 0x92, 0x07,
1381da177e4SLinus Torvalds  /* 0xA0           ~     s     t     u     v     w     x */
1391da177e4SLinus Torvalds           0xE6, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
1401da177e4SLinus Torvalds  /* 0xA8     y     z              ----  ----  ----  ---- */
1411da177e4SLinus Torvalds           0x79, 0x7A, 0xAD, 0xAB, 0x07, 0x07, 0x07, 0x07,
1428f2bc80cSArnd Bergmann  /* 0xB0     ^                    ----     §  ----       */
1431da177e4SLinus Torvalds           0x5E, 0x9C, 0x9D, 0xFA, 0x07, 0x07, 0x07, 0xAC,
1441da177e4SLinus Torvalds  /* 0xB8        ----     [     ]  ----  ----  ----  ---- */
1451da177e4SLinus Torvalds           0xAB, 0x07, 0x5B, 0x5D, 0x07, 0x07, 0x07, 0x07,
1461da177e4SLinus Torvalds  /* 0xC0     {     A     B     C     D     E     F     G */
1471da177e4SLinus Torvalds           0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
1488f2bc80cSArnd Bergmann  /* 0xC8     H     I  ----           ö              ---- */
1491da177e4SLinus Torvalds           0x48, 0x49, 0x07, 0x93, 0x94, 0x95, 0xA2, 0x07,
1501da177e4SLinus Torvalds  /* 0xD0     }     J     K     L     M     N     O     P */
1511da177e4SLinus Torvalds           0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
1528f2bc80cSArnd Bergmann  /* 0xD8     Q     R  ----           ü                   */
1531da177e4SLinus Torvalds           0x51, 0x52, 0x07, 0x96, 0x81, 0x97, 0xA3, 0x98,
1541da177e4SLinus Torvalds  /* 0xE0     \           S     T     U     V     W     X */
1551da177e4SLinus Torvalds           0x5C, 0xF6, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
1568f2bc80cSArnd Bergmann  /* 0xE8     Y     Z        ----     Ö  ----  ----  ---- */
1571da177e4SLinus Torvalds           0x59, 0x5A, 0xFD, 0x07, 0x99, 0x07, 0x07, 0x07,
1581da177e4SLinus Torvalds  /* 0xF0     0     1     2     3     4     5     6     7 */
1591da177e4SLinus Torvalds           0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
1608f2bc80cSArnd Bergmann  /* 0xF8     8     9  ----  ----     Ü  ----  ----  ---- */
1611da177e4SLinus Torvalds           0x38, 0x39, 0x07, 0x07, 0x9A, 0x07, 0x07, 0x07
1621da177e4SLinus Torvalds };
1631da177e4SLinus Torvalds 
1641da177e4SLinus Torvalds 
1651da177e4SLinus Torvalds /*
1661da177e4SLinus Torvalds  * ASCII (IBM PC 437)  -> EBCDIC 500
1671da177e4SLinus Torvalds  */
1681da177e4SLinus Torvalds __u8 _ascebc_500[256] =
1691da177e4SLinus Torvalds {
1701da177e4SLinus Torvalds  /*00 NUL   SOH   STX   ETX   EOT   ENQ   ACK   BEL */
1711da177e4SLinus Torvalds      0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F,
1721da177e4SLinus Torvalds  /*08  BS    HT    LF    VT    FF    CR    SO    SI */
1731da177e4SLinus Torvalds  /*              ->NL                               */
1741da177e4SLinus Torvalds      0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
1751da177e4SLinus Torvalds  /*10 DLE   DC1   DC2   DC3   DC4   NAK   SYN   ETB */
1761da177e4SLinus Torvalds      0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26,
1771da177e4SLinus Torvalds  /*18 CAN    EM   SUB   ESC    FS    GS    RS    US */
1781da177e4SLinus Torvalds  /*                               ->IGS ->IRS ->IUS */
1791da177e4SLinus Torvalds      0x18, 0x19, 0x3F, 0x27, 0x22, 0x1D, 0x1E, 0x1F,
1801da177e4SLinus Torvalds  /*20  SP     !     "     #     $     %     &     ' */
1811da177e4SLinus Torvalds      0x40, 0x4F, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D,
1821da177e4SLinus Torvalds  /*28   (     )     *     +     ,     -    .      / */
1831da177e4SLinus Torvalds      0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
1841da177e4SLinus Torvalds  /*30   0     1     2     3     4     5     6     7 */
1851da177e4SLinus Torvalds      0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
1861da177e4SLinus Torvalds  /*38   8     9     :     ;     <     =     >     ? */
1871da177e4SLinus Torvalds      0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
1881da177e4SLinus Torvalds  /*40   @     A     B     C     D     E     F     G */
1891da177e4SLinus Torvalds      0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
1901da177e4SLinus Torvalds  /*48   H     I     J     K     L     M     N     O */
1911da177e4SLinus Torvalds      0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
1921da177e4SLinus Torvalds  /*50   P     Q     R     S     T     U     V     W */
1931da177e4SLinus Torvalds      0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6,
1941da177e4SLinus Torvalds  /*58   X     Y     Z     [     \     ]     ^     _ */
1951da177e4SLinus Torvalds      0xE7, 0xE8, 0xE9, 0x4A, 0xE0, 0x5A, 0x5F, 0x6D,
1961da177e4SLinus Torvalds  /*60   `     a     b     c     d     e     f     g */
1971da177e4SLinus Torvalds      0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
1981da177e4SLinus Torvalds  /*68   h     i     j     k     l     m     n     o */
1991da177e4SLinus Torvalds      0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
2001da177e4SLinus Torvalds  /*70   p     q     r     s     t     u     v     w */
2011da177e4SLinus Torvalds      0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
2021da177e4SLinus Torvalds  /*78   x     y     z     {     |     }     ~    DL */
2031da177e4SLinus Torvalds      0xA7, 0xA8, 0xA9, 0xC0, 0xBB, 0xD0, 0xA1, 0x07,
2041da177e4SLinus Torvalds  /*80*/
2051da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2061da177e4SLinus Torvalds  /*88*/
2071da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2081da177e4SLinus Torvalds  /*90*/
2091da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2101da177e4SLinus Torvalds  /*98*/
2111da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2121da177e4SLinus Torvalds  /*A0*/
2131da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2141da177e4SLinus Torvalds  /*A8*/
2151da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2161da177e4SLinus Torvalds  /*B0*/
2171da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2181da177e4SLinus Torvalds  /*B8*/
2191da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2201da177e4SLinus Torvalds  /*C0*/
2211da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2221da177e4SLinus Torvalds  /*C8*/
2231da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2241da177e4SLinus Torvalds  /*D0*/
2251da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2261da177e4SLinus Torvalds  /*D8*/
2271da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2281da177e4SLinus Torvalds  /*E0        sz						*/
2291da177e4SLinus Torvalds      0x3F, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2301da177e4SLinus Torvalds  /*E8*/
2311da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2321da177e4SLinus Torvalds  /*F0*/
2331da177e4SLinus Torvalds      0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,
2341da177e4SLinus Torvalds  /*F8*/
2351da177e4SLinus Torvalds      0x90, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0x3F, 0xFF
2361da177e4SLinus Torvalds };
2371da177e4SLinus Torvalds 
2381da177e4SLinus Torvalds /*
2391da177e4SLinus Torvalds  * EBCDIC 500 -> ASCII (IBM PC 437)
2401da177e4SLinus Torvalds  */
2411da177e4SLinus Torvalds __u8 _ebcasc_500[256] =
2421da177e4SLinus Torvalds {
2431da177e4SLinus Torvalds  /* 0x00   NUL   SOH   STX   ETX  *SEL    HT  *RNL   DEL */
2441da177e4SLinus Torvalds           0x00, 0x01, 0x02, 0x03, 0x07, 0x09, 0x07, 0x7F,
2451da177e4SLinus Torvalds  /* 0x08   -GE  -SPS  -RPT    VT    FF    CR    SO    SI */
2461da177e4SLinus Torvalds           0x07, 0x07, 0x07, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
2471da177e4SLinus Torvalds  /* 0x10   DLE   DC1   DC2   DC3  -RES   -NL    BS  -POC
2481da177e4SLinus Torvalds                                   -ENP  ->LF             */
2491da177e4SLinus Torvalds           0x10, 0x11, 0x12, 0x13, 0x07, 0x0A, 0x08, 0x07,
2501da177e4SLinus Torvalds  /* 0x18   CAN    EM  -UBS  -CU1  -IFS  -IGS  -IRS  -ITB
2511da177e4SLinus Torvalds                                                     -IUS */
2521da177e4SLinus Torvalds           0x18, 0x19, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
2531da177e4SLinus Torvalds  /* 0x20   -DS  -SOS    FS  -WUS  -BYP    LF   ETB   ESC
2541da177e4SLinus Torvalds                                   -INP                   */
2551da177e4SLinus Torvalds           0x07, 0x07, 0x1C, 0x07, 0x07, 0x0A, 0x17, 0x1B,
2561da177e4SLinus Torvalds  /* 0x28   -SA  -SFE   -SM  -CSP  -MFA   ENQ   ACK   BEL
2571da177e4SLinus Torvalds                        -SW                               */
2581da177e4SLinus Torvalds           0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x06, 0x07,
2591da177e4SLinus Torvalds  /* 0x30  ----  ----   SYN   -IR   -PP  -TRN  -NBS   EOT */
2601da177e4SLinus Torvalds           0x07, 0x07, 0x16, 0x07, 0x07, 0x07, 0x07, 0x04,
2611da177e4SLinus Torvalds  /* 0x38  -SBS   -IT  -RFF  -CU3   DC4   NAK  ----   SUB */
2621da177e4SLinus Torvalds           0x07, 0x07, 0x07, 0x07, 0x14, 0x15, 0x07, 0x1A,
2638f2bc80cSArnd Bergmann  /* 0x40    SP   RSP           ä              ----       */
2641da177e4SLinus Torvalds           0x20, 0xFF, 0x83, 0x84, 0x85, 0xA0, 0x07, 0x86,
2651da177e4SLinus Torvalds  /* 0x48                 [     .     <     (     +     ! */
2661da177e4SLinus Torvalds           0x87, 0xA4, 0x5B, 0x2E, 0x3C, 0x28, 0x2B, 0x21,
2671da177e4SLinus Torvalds  /* 0x50     &                                      ---- */
2681da177e4SLinus Torvalds           0x26, 0x82, 0x88, 0x89, 0x8A, 0xA1, 0x8C, 0x07,
2698f2bc80cSArnd Bergmann  /* 0x58           ß     ]     $     *     )     ;     ^ */
2701da177e4SLinus Torvalds           0x8D, 0xE1, 0x5D, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
2718f2bc80cSArnd Bergmann  /* 0x60     -     /  ----     Ä  ----  ----  ----       */
2721da177e4SLinus Torvalds           0x2D, 0x2F, 0x07, 0x8E, 0x07, 0x07, 0x07, 0x8F,
2731da177e4SLinus Torvalds  /* 0x68              ----     ,     %     _     >     ? */
2741da177e4SLinus Torvalds           0x80, 0xA5, 0x07, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
2751da177e4SLinus Torvalds  /* 0x70  ----        ----  ----  ----  ----  ----  ---- */
2761da177e4SLinus Torvalds           0x07, 0x90, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
2771da177e4SLinus Torvalds  /* 0x78     *     `     :     #     @     '     =     " */
2781da177e4SLinus Torvalds           0x70, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
2791da177e4SLinus Torvalds  /* 0x80     *     a     b     c     d     e     f     g */
2801da177e4SLinus Torvalds           0x07, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
2811da177e4SLinus Torvalds  /* 0x88     h     i              ----  ----  ----       */
2821da177e4SLinus Torvalds           0x68, 0x69, 0xAE, 0xAF, 0x07, 0x07, 0x07, 0xF1,
2838f2bc80cSArnd Bergmann  /* 0x90     °     j     k     l     m     n     o     p */
2841da177e4SLinus Torvalds           0xF8, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70,
2851da177e4SLinus Torvalds  /* 0x98     q     r                    ----        ---- */
2861da177e4SLinus Torvalds           0x71, 0x72, 0xA6, 0xA7, 0x91, 0x07, 0x92, 0x07,
2871da177e4SLinus Torvalds  /* 0xA0           ~     s     t     u     v     w     x */
2881da177e4SLinus Torvalds           0xE6, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
2891da177e4SLinus Torvalds  /* 0xA8     y     z              ----  ----  ----  ---- */
2901da177e4SLinus Torvalds           0x79, 0x7A, 0xAD, 0xAB, 0x07, 0x07, 0x07, 0x07,
2918f2bc80cSArnd Bergmann  /* 0xB0                          ----     §  ----       */
2921da177e4SLinus Torvalds           0x9B, 0x9C, 0x9D, 0xFA, 0x07, 0x07, 0x07, 0xAC,
2931da177e4SLinus Torvalds  /* 0xB8        ----           |  ----  ----  ----  ---- */
2941da177e4SLinus Torvalds           0xAB, 0x07, 0xAA, 0x7C, 0x07, 0x07, 0x07, 0x07,
2951da177e4SLinus Torvalds  /* 0xC0     {     A     B     C     D     E     F     G */
2961da177e4SLinus Torvalds           0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
2978f2bc80cSArnd Bergmann  /* 0xC8     H     I  ----           ö              ---- */
2981da177e4SLinus Torvalds           0x48, 0x49, 0x07, 0x93, 0x94, 0x95, 0xA2, 0x07,
2991da177e4SLinus Torvalds  /* 0xD0     }     J     K     L     M     N     O     P */
3001da177e4SLinus Torvalds           0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50,
3018f2bc80cSArnd Bergmann  /* 0xD8     Q     R  ----           ü                   */
3021da177e4SLinus Torvalds           0x51, 0x52, 0x07, 0x96, 0x81, 0x97, 0xA3, 0x98,
3031da177e4SLinus Torvalds  /* 0xE0     \           S     T     U     V     W     X */
3041da177e4SLinus Torvalds           0x5C, 0xF6, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
3058f2bc80cSArnd Bergmann  /* 0xE8     Y     Z        ----     Ö  ----  ----  ---- */
3061da177e4SLinus Torvalds           0x59, 0x5A, 0xFD, 0x07, 0x99, 0x07, 0x07, 0x07,
3071da177e4SLinus Torvalds  /* 0xF0     0     1     2     3     4     5     6     7 */
3081da177e4SLinus Torvalds           0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3098f2bc80cSArnd Bergmann  /* 0xF8     8     9  ----  ----     Ü  ----  ----  ---- */
3101da177e4SLinus Torvalds           0x38, 0x39, 0x07, 0x07, 0x9A, 0x07, 0x07, 0x07
3111da177e4SLinus Torvalds };
3121da177e4SLinus Torvalds 
3131da177e4SLinus Torvalds 
3141da177e4SLinus Torvalds /*
3151da177e4SLinus Torvalds  * EBCDIC 037/500 conversion table:
3161da177e4SLinus Torvalds  * from upper to lower case
3171da177e4SLinus Torvalds  */
3181da177e4SLinus Torvalds __u8 _ebc_tolower[256] =
3191da177e4SLinus Torvalds {
3201da177e4SLinus Torvalds 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3211da177e4SLinus Torvalds 	0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
3221da177e4SLinus Torvalds 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3231da177e4SLinus Torvalds 	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
3241da177e4SLinus Torvalds 	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3251da177e4SLinus Torvalds 	0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
3261da177e4SLinus Torvalds 	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3271da177e4SLinus Torvalds 	0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
3281da177e4SLinus Torvalds 	0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3291da177e4SLinus Torvalds 	0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
3301da177e4SLinus Torvalds 	0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
3311da177e4SLinus Torvalds 	0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
3321da177e4SLinus Torvalds 	0x60, 0x61, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3331da177e4SLinus Torvalds 	0x48, 0x49, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
3341da177e4SLinus Torvalds 	0x70, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
3351da177e4SLinus Torvalds 	0x58, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
3361da177e4SLinus Torvalds 	0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3371da177e4SLinus Torvalds 	0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
3381da177e4SLinus Torvalds 	0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3391da177e4SLinus Torvalds 	0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9C, 0x9F,
3401da177e4SLinus Torvalds 	0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
3411da177e4SLinus Torvalds 	0xA8, 0xA9, 0xAA, 0xAB, 0x8C, 0x8D, 0x8E, 0xAF,
3421da177e4SLinus Torvalds 	0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
3431da177e4SLinus Torvalds 	0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
3441da177e4SLinus Torvalds 	0xC0, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
3451da177e4SLinus Torvalds 	0x88, 0x89, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
3461da177e4SLinus Torvalds 	0xD0, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
3471da177e4SLinus Torvalds 	0x98, 0x99, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
3481da177e4SLinus Torvalds 	0xE0, 0xE1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
3491da177e4SLinus Torvalds 	0xA8, 0xA9, 0xEA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
3501da177e4SLinus Torvalds 	0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
3511da177e4SLinus Torvalds 	0xF8, 0xF9, 0xFA, 0xDB, 0xDC, 0xDD, 0xDE, 0xFF
3521da177e4SLinus Torvalds };
3531da177e4SLinus Torvalds 
3541da177e4SLinus Torvalds 
3551da177e4SLinus Torvalds /*
3561da177e4SLinus Torvalds  * EBCDIC 037/500 conversion table:
3571da177e4SLinus Torvalds  * from lower to upper case
3581da177e4SLinus Torvalds  */
3591da177e4SLinus Torvalds __u8 _ebc_toupper[256] =
3601da177e4SLinus Torvalds {
3611da177e4SLinus Torvalds 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
3621da177e4SLinus Torvalds 	0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
3631da177e4SLinus Torvalds 	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
3641da177e4SLinus Torvalds 	0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
3651da177e4SLinus Torvalds 	0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
3661da177e4SLinus Torvalds 	0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
3671da177e4SLinus Torvalds 	0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
3681da177e4SLinus Torvalds 	0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
3691da177e4SLinus Torvalds 	0x40, 0x41, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3701da177e4SLinus Torvalds 	0x68, 0x69, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
3711da177e4SLinus Torvalds 	0x50, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
3721da177e4SLinus Torvalds 	0x78, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
3731da177e4SLinus Torvalds 	0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3741da177e4SLinus Torvalds 	0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
3751da177e4SLinus Torvalds 	0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
3761da177e4SLinus Torvalds 	0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
3771da177e4SLinus Torvalds 	0x80, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
3781da177e4SLinus Torvalds 	0xC8, 0xC9, 0x8A, 0x8B, 0xAC, 0xAD, 0xAE, 0x8F,
3791da177e4SLinus Torvalds 	0x90, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
3801da177e4SLinus Torvalds 	0xD8, 0xD9, 0x9A, 0x9B, 0x9E, 0x9D, 0x9E, 0x9F,
3811da177e4SLinus Torvalds 	0xA0, 0xA1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
3821da177e4SLinus Torvalds 	0xE8, 0xE9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
3831da177e4SLinus Torvalds 	0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
3841da177e4SLinus Torvalds 	0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
3851da177e4SLinus Torvalds 	0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
3861da177e4SLinus Torvalds 	0xC8, 0xC9, 0xCA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
3871da177e4SLinus Torvalds 	0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
3881da177e4SLinus Torvalds 	0xD8, 0xD9, 0xDA, 0xFB, 0xFC, 0xFD, 0xFE, 0xDF,
3891da177e4SLinus Torvalds 	0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
3901da177e4SLinus Torvalds 	0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
3911da177e4SLinus Torvalds 	0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
3921da177e4SLinus Torvalds 	0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
3931da177e4SLinus Torvalds };
3941da177e4SLinus Torvalds 
3951da177e4SLinus Torvalds EXPORT_SYMBOL(_ascebc_500);
3961da177e4SLinus Torvalds EXPORT_SYMBOL(_ebcasc_500);
3971da177e4SLinus Torvalds EXPORT_SYMBOL(_ascebc);
3981da177e4SLinus Torvalds EXPORT_SYMBOL(_ebcasc);
3991da177e4SLinus Torvalds EXPORT_SYMBOL(_ebc_tolower);
4001da177e4SLinus Torvalds EXPORT_SYMBOL(_ebc_toupper);
4011da177e4SLinus Torvalds 
402