linux/arch/sparc/prom/bootstr_32.c
<<
>>
Prefs
   1/*
   2 * bootstr.c:  Boot string/argument acquisition from the PROM.
   3 *
   4 * Copyright(C) 1995 David S. Miller (davem@caip.rutgers.edu)
   5 */
   6
   7#include <linux/string.h>
   8#include <asm/oplib.h>
   9#include <linux/init.h>
  10
  11#define BARG_LEN  256
  12static char barg_buf[BARG_LEN] = { 0 };
  13static char fetched __initdata = 0;
  14
  15char * __init
  16prom_getbootargs(void)
  17{
  18        int iter;
  19        char *cp, *arg;
  20
  21        /* This check saves us from a panic when bootfd patches args. */
  22        if (fetched) {
  23                return barg_buf;
  24        }
  25
  26        switch (prom_vers) {
  27        case PROM_V0:
  28                cp = barg_buf;
  29                /* Start from 1 and go over fd(0,0,0)kernel */
  30                for (iter = 1; iter < 8; iter++) {
  31                        arg = (*(romvec->pv_v0bootargs))->argv[iter];
  32                        if (arg == NULL)
  33                                break;
  34                        while (*arg != 0) {
  35                                /* Leave place for space and null. */
  36                                if (cp >= barg_buf + BARG_LEN - 2)
  37                                        /* We might issue a warning here. */
  38                                        break;
  39                                *cp++ = *arg++;
  40                        }
  41                        *cp++ = ' ';
  42                        if (cp >= barg_buf + BARG_LEN - 1)
  43                                /* We might issue a warning here. */
  44                                break;
  45                }
  46                *cp = 0;
  47                break;
  48        case PROM_V2:
  49        case PROM_V3:
  50                /*
  51                 * V3 PROM cannot supply as with more than 128 bytes
  52                 * of an argument. But a smart bootstrap loader can.
  53                 */
  54                strlcpy(barg_buf, *romvec->pv_v2bootargs.bootargs, sizeof(barg_buf));
  55                break;
  56        default:
  57                break;
  58        }
  59
  60        fetched = 1;
  61        return barg_buf;
  62}
  63