2008-05-19 16:53:02 -07:00
/*
2005-04-16 15:20:36 -07:00
* bootstr . c : Boot string / argument acquisition from the PROM .
*
* Copyright ( C ) 1995 David S . Miller ( davem @ caip . rutgers . edu )
*/
# include <linux/string.h>
# include <asm/oplib.h>
# include <linux/init.h>
# define BARG_LEN 256
static char barg_buf [ BARG_LEN ] = { 0 } ;
static char fetched __initdata = 0 ;
char * __init
prom_getbootargs ( void )
{
int iter ;
char * cp , * arg ;
/* This check saves us from a panic when bootfd patches args. */
if ( fetched ) {
return barg_buf ;
}
2013-05-30 11:35:22 +08:00
switch ( prom_vers ) {
2005-04-16 15:20:36 -07:00
case PROM_V0 :
cp = barg_buf ;
/* Start from 1 and go over fd(0,0,0)kernel */
2013-05-30 11:35:22 +08:00
for ( iter = 1 ; iter < 8 ; iter + + ) {
2005-04-16 15:20:36 -07:00
arg = ( * ( romvec - > pv_v0bootargs ) ) - > argv [ iter ] ;
2011-01-03 08:27:55 +00:00
if ( arg = = NULL )
break ;
2013-05-30 11:35:22 +08:00
while ( * arg ! = 0 ) {
2005-04-16 15:20:36 -07:00
/* Leave place for space and null. */
2013-05-30 11:35:22 +08:00
if ( cp > = barg_buf + BARG_LEN - 2 )
2005-04-16 15:20:36 -07:00
/* We might issue a warning here. */
break ;
* cp + + = * arg + + ;
}
* cp + + = ' ' ;
2013-05-30 11:35:22 +08:00
if ( cp > = barg_buf + BARG_LEN - 1 )
/* We might issue a warning here. */
break ;
2005-04-16 15:20:36 -07:00
}
* cp = 0 ;
break ;
case PROM_V2 :
case PROM_V3 :
/*
* V3 PROM cannot supply as with more than 128 bytes
* of an argument . But a smart bootstrap loader can .
*/
strlcpy ( barg_buf , * romvec - > pv_v2bootargs . bootargs , sizeof ( barg_buf ) ) ;
break ;
default :
break ;
}
fetched = 1 ;
return barg_buf ;
}