0001
0002
0003
0004
0005
0006
0007
0008 #include <linux/string.h>
0009 #include <asm/oplib.h>
0010 #include <linux/init.h>
0011
0012 #define BARG_LEN 256
0013 static char barg_buf[BARG_LEN] = { 0 };
0014 static char fetched __initdata = 0;
0015
0016 char * __init
0017 prom_getbootargs(void)
0018 {
0019 int iter;
0020 char *cp, *arg;
0021
0022
0023 if (fetched) {
0024 return barg_buf;
0025 }
0026
0027 switch (prom_vers) {
0028 case PROM_V0:
0029 cp = barg_buf;
0030
0031 for (iter = 1; iter < 8; iter++) {
0032 arg = (*(romvec->pv_v0bootargs))->argv[iter];
0033 if (arg == NULL)
0034 break;
0035 while (*arg != 0) {
0036
0037 if (cp >= barg_buf + BARG_LEN - 2)
0038
0039 break;
0040 *cp++ = *arg++;
0041 }
0042 *cp++ = ' ';
0043 if (cp >= barg_buf + BARG_LEN - 1)
0044
0045 break;
0046 }
0047 *cp = 0;
0048 break;
0049 case PROM_V2:
0050 case PROM_V3:
0051
0052
0053
0054
0055 strlcpy(barg_buf, *romvec->pv_v2bootargs.bootargs, sizeof(barg_buf));
0056 break;
0057 default:
0058 break;
0059 }
0060
0061 fetched = 1;
0062 return barg_buf;
0063 }