123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved.
- */
- #include <linux/init.h>
- #include <linux/kernel.h>
- #include <linux/string.h>
- #include <asm/addrspace.h>
- #include <asm/fw/fw.h>
- int fw_argc;
- int *_fw_argv;
- int *_fw_envp;
- void __init fw_init_cmdline(void)
- {
- int i;
- /* Validate command line parameters. */
- if ((fw_arg0 >= CKSEG0) || (fw_arg1 < CKSEG0)) {
- fw_argc = 0;
- _fw_argv = NULL;
- } else {
- fw_argc = (fw_arg0 & 0x0000ffff);
- _fw_argv = (int *)fw_arg1;
- }
- /* Validate environment pointer. */
- if (fw_arg2 < CKSEG0)
- _fw_envp = NULL;
- else
- _fw_envp = (int *)fw_arg2;
- for (i = 1; i < fw_argc; i++) {
- strlcat(arcs_cmdline, fw_argv(i), COMMAND_LINE_SIZE);
- if (i < (fw_argc - 1))
- strlcat(arcs_cmdline, " ", COMMAND_LINE_SIZE);
- }
- }
- char * __init fw_getcmdline(void)
- {
- return &(arcs_cmdline[0]);
- }
- char *fw_getenv(char *envname)
- {
- char *result = NULL;
- if (_fw_envp != NULL) {
- /*
- * Return a pointer to the given environment variable.
- * YAMON uses "name", "value" pairs, while U-Boot uses
- * "name=value".
- */
- int i, yamon, index = 0;
- yamon = (strchr(fw_envp(index), '=') == NULL);
- i = strlen(envname);
- while (fw_envp(index)) {
- if (strncmp(envname, fw_envp(index), i) == 0) {
- if (yamon) {
- result = fw_envp(index + 1);
- break;
- } else if (fw_envp(index)[i] == '=') {
- result = fw_envp(index) + i + 1;
- break;
- }
- }
- /* Increment array index. */
- if (yamon)
- index += 2;
- else
- index += 1;
- }
- }
- return result;
- }
- unsigned long fw_getenvl(char *envname)
- {
- unsigned long envl = 0UL;
- char *str;
- int tmp;
- str = fw_getenv(envname);
- if (str) {
- tmp = kstrtoul(str, 0, &envl);
- if (tmp)
- envl = 0;
- }
- return envl;
- }
|