@ -37,14 +37,9 @@ char *env_name_spec = "MMC";
# ifdef ENV_IS_EMBEDDED
env_t * env_ptr = & environment ;
# else /* ! ENV_IS_EMBEDDED */
env_t * env_ptr = NULL ;
env_t * env_ptr ;
# endif /* ENV_IS_EMBEDDED */
/* local functions */
# if !defined(ENV_IS_EMBEDDED)
static void use_default ( void ) ;
# endif
DECLARE_GLOBAL_DATA_PTR ;
# if !defined(CONFIG_ENV_OFFSET)
@ -56,9 +51,8 @@ static int __mmc_get_env_addr(struct mmc *mmc, u32 *env_addr)
* env_addr = CONFIG_ENV_OFFSET ;
return 0 ;
}
__attribute__ ( ( weak , alias ( " __mmc_get_env_addr " ) ) )
int mmc_get_env_addr ( struct mmc * mmc , u32 * env_addr ) ;
int mmc_get_env_addr ( struct mmc * mmc , u32 * env_addr )
__attribute__ ( ( weak , alias ( " __mmc_get_env_addr " ) ) ) ;
uchar env_get_char_spec ( int index )
{
@ -68,13 +62,13 @@ uchar env_get_char_spec(int index)
int env_init ( void )
{
/* use default */
gd - > env_addr = ( ulong ) & default_environment [ 0 ] ;
gd - > env_valid = 1 ;
gd - > env_addr = ( ulong ) & default_environment [ 0 ] ;
gd - > env_valid = 1 ;
return 0 ;
}
int init_mmc_for_env ( struct mmc * mmc )
static int init_mmc_for_env ( struct mmc * mmc )
{
if ( ! mmc ) {
puts ( " No MMC card found \n " ) ;
@ -83,21 +77,20 @@ int init_mmc_for_env(struct mmc *mmc)
if ( mmc_init ( mmc ) ) {
puts ( " MMC init failed \n " ) ;
return - 1 ;
return - 1 ;
}
return 0 ;
}
# ifdef CONFIG_CMD_SAVEENV
inline int write_env ( struct mmc * mmc , unsigned long size ,
unsigned long offset , const void * buffer )
static inline int write_env ( struct mmc * mmc , unsigned long size ,
unsigned long offset , const void * buffer )
{
uint blk_start , blk_cnt , n ;
blk_start = ALIGN ( offset , mmc - > write_bl_len ) / mmc - > write_bl_len ;
blk_cnt = ALIGN ( size , mmc - > write_bl_len ) / mmc - > write_bl_len ;
blk_start = ALIGN ( offset , mmc - > write_bl_len ) / mmc - > write_bl_len ;
blk_cnt = ALIGN ( size , mmc - > write_bl_len ) / mmc - > write_bl_len ;
n = mmc - > block_dev . block_write ( CONFIG_SYS_MMC_ENV_DEV , blk_start ,
blk_cnt , ( u_char * ) buffer ) ;
@ -111,12 +104,9 @@ int saveenv(void)
ssize_t len ;
char * res ;
struct mmc * mmc = find_mmc_device ( CONFIG_SYS_MMC_ENV_DEV ) ;
u32 offset ;
u32 offset ;
if ( init_mmc_for_env ( mmc ) )
return 1 ;
if ( mmc_get_env_addr ( mmc , & offset ) )
if ( init_mmc_for_env ( mmc ) | | mmc_get_env_addr ( mmc , & offset ) )
return 1 ;
res = ( char * ) & env_new . data ;
@ -125,7 +115,8 @@ int saveenv(void)
error ( " Cannot export environment: errno = %d \n " , errno ) ;
return 1 ;
}
env_new . crc = crc32 ( 0 , env_new . data , ENV_SIZE ) ;
env_new . crc = crc32 ( 0 , env_new . data , ENV_SIZE ) ;
printf ( " Writing to MMC(%d)... " , CONFIG_SYS_MMC_ENV_DEV ) ;
if ( write_env ( mmc , CONFIG_ENV_SIZE , offset , ( u_char * ) & env_new ) ) {
puts ( " failed \n " ) ;
@ -137,13 +128,13 @@ int saveenv(void)
}
# endif /* CONFIG_CMD_SAVEENV */
inline int read_env ( struct mmc * mmc , unsigned long size ,
unsigned long offset , const void * buffer )
static inline int read_env ( struct mmc * mmc , unsigned long size ,
unsigned long offset , const void * buffer )
{
uint blk_start , blk_cnt , n ;
blk_start = ALIGN ( offset , mmc - > read_bl_len ) / mmc - > read_bl_len ;
blk_cnt = ALIGN ( size , mmc - > read_bl_len ) / mmc - > read_bl_len ;
blk_start = ALIGN ( offset , mmc - > read_bl_len ) / mmc - > read_bl_len ;
blk_cnt = ALIGN ( size , mmc - > read_bl_len ) / mmc - > read_bl_len ;
n = mmc - > block_dev . block_read ( CONFIG_SYS_MMC_ENV_DEV , blk_start ,
blk_cnt , ( uchar * ) buffer ) ;
@ -155,32 +146,15 @@ void env_relocate_spec(void)
{
# if !defined(ENV_IS_EMBEDDED)
char buf [ CONFIG_ENV_SIZE ] ;
struct mmc * mmc = find_mmc_device ( CONFIG_SYS_MMC_ENV_DEV ) ;
u32 offset ;
if ( init_mmc_for_env ( mmc ) ) {
use_default ( ) ;
return ;
}
if ( init_mmc_for_env ( mmc ) | | mmc_get_env_addr ( mmc , & offset ) )
return set_default_env ( NULL ) ;
if ( mmc_get_env_addr ( mmc , & offset ) ) {
use_default ( ) ;
return ;
}
if ( read_env ( mmc , CONFIG_ENV_SIZE , offset , buf ) ) {
use_default ( ) ;
return ;
}
if ( read_env ( mmc , CONFIG_ENV_SIZE , offset , buf ) )
return set_default_env ( NULL ) ;
env_import ( buf , 1 ) ;
# endif
}
# if !defined(ENV_IS_EMBEDDED)
static void use_default ( )
{
set_default_env ( NULL ) ;
}
# endif