Commit 95fa1af8 authored by Farhan Ali's avatar Farhan Ali Committed by Cornelia Huck
Browse files

pc-bios/s390-ccw: provide a function to interpret LOADPARM value



The LOADPARM value is fetched from SCP Read Info, but it's applied
only at the phase of bootmap interpretation. So let's read the LOARPARM
value and store it. Also provide a parsing function to detect numbers in
the LOADPARM which can be used during bootmap interpretation.

Remove a stray whitespace.

Initial patch from Eugene (jno) Dvurechenski.

Signed-off-by: default avatarEugene (jno) Dvurechenski <jno@linux.vnet.ibm.com>
Signed-off-by: default avatarFarhan Ali <alifm@linux.vnet.ibm.com>
Signed-off-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
parent 9a22473c
Loading
Loading
Loading
Loading
+26 −1
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
static SubChannelId blk_schid = { .one = 1 };
IplParameterBlock iplb __attribute__((__aligned__(PAGE_SIZE)));
static char loadparm[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };

const unsigned char ebc2asc[256] =
      /* 0123456789abcdef0123456789abcdef */
@@ -40,7 +41,6 @@ void write_subsystem_identification(void)
    *zeroes = 0;
}


void panic(const char *string)
{
    sclp_print(string);
@@ -48,6 +48,26 @@ void panic(const char *string)
    while (1) { }
}

unsigned int get_loadparm_index(void)
{
    const char *lp = loadparm;
    int i;
    unsigned int idx = 0;

    for (i = 0; i < 8; i++) {
        char c = lp[i];

        if (c < '0' || c > '9') {
            break;
        }

        idx *= 10;
        idx += c - '0';
    }

    return idx;
}

static bool find_dev(Schib *schib, int dev_no)
{
    int i, r;
@@ -84,6 +104,7 @@ static void virtio_setup(void)
    int ssid;
    bool found = false;
    uint16_t dev_no;
    char ldp[] = "LOADPARM=[________]\n";
    VDev *vdev = virtio_get_device();

    /*
@@ -93,6 +114,10 @@ static void virtio_setup(void)
     */
    enable_mss_facility();

    sclp_get_loadparm_ascii(loadparm);
    memcpy(ldp + 10, loadparm, 8);
    sclp_print(ldp);

    if (store_iplb(&iplb)) {
        switch (iplb.pbt) {
        case S390_IPL_TYPE_CCW:
+1 −0
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ void consume_sclp_int(void);
void panic(const char *string);
void write_subsystem_identification(void);
extern char stack[PAGE_SIZE * 8] __attribute__((__aligned__(PAGE_SIZE)));
unsigned int get_loadparm_index(void);

/* sclp.c */
void sclp_print(const char *string);