2013-03-25 23:32:15 +04:00
/*
* 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 ;
2020-03-25 10:45:29 +03:00
# ifndef CONFIG_HAVE_PLAT_FW_INIT_CMDLINE
2013-03-25 23:32:15 +04:00
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 ) ;
}
}
2020-03-25 10:45:29 +03:00
# endif
2013-03-25 23:32:15 +04:00
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 ] = = ' = ' ) {
2014-11-08 14:39:38 +03:00
result = fw_envp ( index ) + i + 1 ;
2013-03-25 23:32:15 +04:00
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 ) {
2014-11-08 14:39:39 +03:00
tmp = kstrtoul ( str , 0 , & envl ) ;
if ( tmp )
envl = 0 ;
2013-03-25 23:32:15 +04:00
}
return envl ;
}