@ -82,75 +82,13 @@ uchar env_get_char_spec(int index)
void env_relocate_spec ( void )
{
char buf [ CONFIG_ENV_SIZE ] ;
char buf_env [ CONFIG_ENV_SIZE ] ;
unsigned int off = CONFIG_ENV_OFFSET ;
# ifdef CONFIG_ENV_OFFSET_REDUND
if ( gd - > env_valid = = 2 )
off = CONFIG_ENV_OFFSET_REDUND ;
# endif
eeprom_bus_read ( CONFIG_SYS_DEF_EEPROM_ADDR ,
off , ( uchar * ) buf , CONFIG_ENV_SIZE ) ;
env_import ( buf , 1 ) ;
}
int saveenv ( void )
{
env_t env_new ;
int rc ;
unsigned int off = CONFIG_ENV_OFFSET ;
# ifdef CONFIG_ENV_OFFSET_REDUND
unsigned int off_red = CONFIG_ENV_OFFSET_REDUND ;
char flag_obsolete = OBSOLETE_FLAG ;
# endif
BUG_ON ( env_ptr ! = NULL ) ;
rc = env_export ( & env_new ) ;
if ( rc )
return rc ;
# ifdef CONFIG_ENV_OFFSET_REDUND
if ( gd - > env_valid = = 1 ) {
off = CONFIG_ENV_OFFSET_REDUND ;
off_red = CONFIG_ENV_OFFSET ;
}
env_new . flags = ACTIVE_FLAG ;
# endif
rc = eeprom_bus_write ( CONFIG_SYS_DEF_EEPROM_ADDR ,
off , ( uchar * ) & env_new , CONFIG_ENV_SIZE ) ;
# ifdef CONFIG_ENV_OFFSET_REDUND
if ( rc = = 0 ) {
eeprom_bus_write ( CONFIG_SYS_DEF_EEPROM_ADDR ,
off_red + offsetof ( env_t , flags ) ,
( uchar * ) & flag_obsolete , 1 ) ;
if ( gd - > env_valid = = 1 )
gd - > env_valid = 2 ;
else
gd - > env_valid = 1 ;
}
# endif
return rc ;
}
/*
* Initialize Environment use
*
* We are still running from ROM , so data use is limited .
* Use a ( moderately small ) buffer on the stack
*/
# ifdef CONFIG_ENV_OFFSET_REDUND
int env_init ( void )
{
# ifdef ENV_IS_EMBEDDED
ulong len , crc [ 2 ] , crc_tmp ;
unsigned int off , off _env[ 2 ] ;
uchar buf [ 64 ] , flags [ 2 ] ;
unsigned int off_env [ 2 ] ;
uchar rdbuf [ 64 ] , flags [ 2 ] ;
int i , crc_ok [ 2 ] = { 0 , 0 } ;
eeprom_init ( ) ; /* prepare for EEPROM read/write */
@ -172,12 +110,12 @@ int env_init(void)
len = ENV_SIZE ;
off = off_env [ i ] + offsetof ( env_t , data ) ;
while ( len > 0 ) {
int n = ( len > sizeof ( buf ) ) ? sizeof ( buf ) : len ;
int n = ( len > sizeof ( rd buf) ) ? sizeof ( rd buf) : len ;
eeprom_bus_read ( CONFIG_SYS_DEF_EEPROM_ADDR , off ,
buf , n ) ;
rd buf, n ) ;
crc_tmp = crc32 ( crc_tmp , buf , n ) ;
crc_tmp = crc32 ( crc_tmp , rd buf, n ) ;
len - = n ;
off + = n ;
}
@ -189,8 +127,6 @@ int env_init(void)
if ( ! crc_ok [ 0 ] & & ! crc_ok [ 1 ] ) {
gd - > env_addr = 0 ;
gd - > env_valid = 0 ;
return 0 ;
} else if ( crc_ok [ 0 ] & & ! crc_ok [ 1 ] ) {
gd - > env_valid = 1 ;
} else if ( ! crc_ok [ 0 ] & & crc_ok [ 1 ] ) {
@ -213,19 +149,10 @@ int env_init(void)
gd - > env_addr = off_env [ 1 ] + offsetof ( env_t , data ) ;
else if ( gd - > env_valid = = 1 )
gd - > env_addr = off_env [ 0 ] + offsetof ( env_t , data ) ;
# else
gd - > env_addr = ( ulong ) & default_environment [ 0 ] ;
gd - > env_valid = 1 ;
# endif
return 0 ;
}
# else
int env_init ( void )
{
# ifdef ENV_IS_EMBEDDED
# else /* CONFIG_ENV_OFFSET_REDUND */
ulong crc , len , new ;
unsigned off ;
uchar buf [ 64 ] ;
uchar rdbuf [ 64 ] ;
eeprom_init ( ) ; /* prepare for EEPROM read/write */
@ -237,13 +164,12 @@ int env_init(void)
new = 0 ;
len = ENV_SIZE ;
off = offsetof ( env_t , data ) ;
while ( len > 0 ) {
int n = ( len > sizeof ( buf ) ) ? sizeof ( buf ) : len ;
int n = ( len > sizeof ( rd buf) ) ? sizeof ( rd buf) : len ;
eeprom_bus_read ( CONFIG_SYS_DEF_EEPROM_ADDR ,
CONFIG_ENV_OFFSET + off , buf , n ) ;
new = crc32 ( new , buf , n ) ;
CONFIG_ENV_OFFSET + off , rd buf, n ) ;
new = crc32 ( new , rd buf, n ) ;
len - = n ;
off + = n ;
}
@ -255,10 +181,72 @@ int env_init(void)
gd - > env_addr = 0 ;
gd - > env_valid = 0 ;
}
# else
# endif /* CONFIG_ENV_OFFSET_REDUND */
off = CONFIG_ENV_OFFSET ;
# ifdef CONFIG_ENV_OFFSET_REDUND
if ( gd - > env_valid = = 2 )
off = CONFIG_ENV_OFFSET_REDUND ;
# endif
eeprom_bus_read ( CONFIG_SYS_DEF_EEPROM_ADDR ,
off , ( uchar * ) buf_env , CONFIG_ENV_SIZE ) ;
env_import ( buf_env , 1 ) ;
}
int saveenv ( void )
{
env_t env_new ;
int rc ;
unsigned int off = CONFIG_ENV_OFFSET ;
# ifdef CONFIG_ENV_OFFSET_REDUND
unsigned int off_red = CONFIG_ENV_OFFSET_REDUND ;
char flag_obsolete = OBSOLETE_FLAG ;
# endif
BUG_ON ( env_ptr ! = NULL ) ;
rc = env_export ( & env_new ) ;
if ( rc )
return rc ;
# ifdef CONFIG_ENV_OFFSET_REDUND
if ( gd - > env_valid = = 1 ) {
off = CONFIG_ENV_OFFSET_REDUND ;
off_red = CONFIG_ENV_OFFSET ;
}
env_new . flags = ACTIVE_FLAG ;
# endif
rc = eeprom_bus_write ( CONFIG_SYS_DEF_EEPROM_ADDR ,
off , ( uchar * ) & env_new , CONFIG_ENV_SIZE ) ;
# ifdef CONFIG_ENV_OFFSET_REDUND
if ( rc = = 0 ) {
eeprom_bus_write ( CONFIG_SYS_DEF_EEPROM_ADDR ,
off_red + offsetof ( env_t , flags ) ,
( uchar * ) & flag_obsolete , 1 ) ;
if ( gd - > env_valid = = 1 )
gd - > env_valid = 2 ;
else
gd - > env_valid = 1 ;
}
# endif
return rc ;
}
/*
* Initialize Environment use
*
* We are still running from ROM , so data use is limited .
* Use a ( moderately small ) buffer on the stack
*/
int env_init ( void )
{
gd - > env_addr = ( ulong ) & default_environment [ 0 ] ;
gd - > env_valid = 1 ;
# endif
return 0 ;
}
# endif