[S390] codepage conversion of kernel parameter line
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 26 Feb 2010 21:37:51 +0000 (22:37 +0100)
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>
Fri, 26 Feb 2010 21:37:32 +0000 (22:37 +0100)
Move the ebcdic to ascii conversion of the kernel parameter line from
head.S to early.c and convert the assembler code to C.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/early.c
arch/s390/kernel/head.S

index 02e4586..31d618a 100644 (file)
@@ -405,8 +405,19 @@ static void __init append_to_cmdline(size_t (*ipl_data)(char *, size_t))
 
 static void __init setup_boot_command_line(void)
 {
+       int i;
+
+       /* convert arch command line to ascii */
+       for (i = 0; i < ARCH_COMMAND_LINE_SIZE; i++)
+               if (COMMAND_LINE[i] & 0x80)
+                       break;
+       if (i < ARCH_COMMAND_LINE_SIZE)
+               EBCASC(COMMAND_LINE, ARCH_COMMAND_LINE_SIZE);
+       COMMAND_LINE[ARCH_COMMAND_LINE_SIZE-1] = 0;
+
        /* copy arch command line */
-       strlcpy(boot_command_line, COMMAND_LINE, ARCH_COMMAND_LINE_SIZE);
+       strlcpy(boot_command_line, strstrip(COMMAND_LINE),
+               ARCH_COMMAND_LINE_SIZE);
 
        /* append IPL PARM data to the boot command line */
        if (MACHINE_IS_VM)
index 9e4dc60..1fb5905 100644 (file)
@@ -287,19 +287,7 @@ iplstart:
        bz      .Lagain1                # skip dateset trailer
        la      %r5,0(%r4,%r2)
        lr      %r3,%r2
-.Lidebc:
-       tm      0(%r5),0x80             # high order bit set ?
-       bo      .Ldocv                  #  yes -> convert from EBCDIC
-       ahi     %r5,-1
-       bct     %r3,.Lidebc
-       b       .Lnocv
-.Ldocv:
-       l       %r3,.Lcvtab
-       tr      0(256,%r4),0(%r3)       # convert parameters to ascii
-       tr      256(256,%r4),0(%r3)
-       tr      512(256,%r4),0(%r3)
-       tr      768(122,%r4),0(%r3)
-.Lnocv: la     %r3,COMMAND_LINE-PARMAREA(%r12) # load adr. of command line
+       la      %r3,COMMAND_LINE-PARMAREA(%r12) # load adr. of command line
        mvc     0(256,%r3),0(%r4)
        mvc     256(256,%r3),256(%r4)
        mvc     512(256,%r3),512(%r4)
@@ -383,7 +371,6 @@ iplstart:
 .Linitrd:.long _end + 0x400000         # default address of initrd
 .Lparm:        .long  PARMAREA
 .Lstartup: .long startup
-.Lcvtab:.long  _ebcasc                 # ebcdic to ascii table
 .Lreset:.byte  0xc3,0xc8,0xc1,0xd5,0xc7,0xc5,0x40,0xd9,0xc4,0xd9,0x40
        .byte   0xc1,0xd3,0xd3,0x40,0xd2,0xc5,0xc5,0xd7,0x40,0xd5,0xd6
        .byte   0xc8,0xd6,0xd3,0xc4     # "change rdr all keep nohold"
@@ -416,13 +403,10 @@ start:
 .sk8x8:
        mvc     0(240,%r8),0(%r9)       # copy iplparms into buffer
 .gotr:
-       l       %r10,.tbl               # EBCDIC to ASCII table
-       tr      0(240,%r8),0(%r10)
        slr     %r0,%r0
        st      %r0,INITRD_SIZE+ARCH_OFFSET-PARMAREA(%r11)
        st      %r0,INITRD_START+ARCH_OFFSET-PARMAREA(%r11)
        j       startup                 # continue with startup
-.tbl:  .long   _ebcasc                 # translate table
 .cmd:  .long   COMMAND_LINE            # address of command line buffer
 .parm: .long   PARMAREA
 .lowcase: