Remove code duplication for setting the default environment
authorHarald Welte <laforge@gnumonks.org>
Mon, 7 Jul 2008 07:40:39 +0000 (15:40 +0800)
committerWolfgang Denk <wd@denx.de>
Wed, 9 Jul 2008 22:28:20 +0000 (00:28 +0200)
common/env_common.c (default_env): new function that resets the environment to
    the default value
common/env_common.c (env_relocate): use default_env instead of own copy
common/env_nand.c (env_relocate_spec): use default_env instead of own copy
include/environment.h: added default_env prototype

Signed-off-by: Werner Almesberger <werner@openmoko.org>
Signed-off-by: Harald Welte <laforge@openmoko.org>
common/env_common.c
common/env_nand.c
include/environment.h

index 5ac14e89c44c91cc71ba7fb4332632f5ce430c5d..d51c2114de2e29b17944ed8911ae315c8f5d2281 100644 (file)
@@ -204,6 +204,23 @@ uchar *env_get_addr (int index)
        }
 }
 
+void set_default_env(void)
+{
+       if (sizeof(default_environment) > ENV_SIZE) {
+               puts ("*** Error - default environment is too large\n\n");
+               return;
+       }
+
+       memset(env_ptr, 0, sizeof(env_t));
+       memcpy(env_ptr->data, default_environment,
+              sizeof(default_environment));
+#ifdef CFG_REDUNDAND_ENVIRONMENT
+       env_ptr->flags = 0xFF;
+#endif
+       env_crc_update ();
+       gd->env_valid = 1;
+}
+
 void env_relocate (void)
 {
        DEBUGF ("%s[%d] offset = 0x%lx\n", __FUNCTION__,__LINE__,
@@ -235,22 +252,7 @@ void env_relocate (void)
                puts ("*** Warning - bad CRC, using default environment\n\n");
                show_boot_progress (-60);
 #endif
-
-               if (sizeof(default_environment) > ENV_SIZE)
-               {
-                       puts ("*** Error - default environment is too large\n\n");
-                       return;
-               }
-
-               memset (env_ptr, 0, sizeof(env_t));
-               memcpy (env_ptr->data,
-                       default_environment,
-                       sizeof(default_environment));
-#ifdef CFG_REDUNDAND_ENVIRONMENT
-               env_ptr->flags = 0xFF;
-#endif
-               env_crc_update ();
-               gd->env_valid = 1;
+               set_default_env();
        }
        else {
                env_relocate_spec ();
index 89540177048a54e930c98390b1e4e940f6efe192..3890b84948bf798c12838dda577e18c1ba4d98f9 100644 (file)
@@ -363,19 +363,7 @@ void env_relocate_spec (void)
 static void use_default()
 {
        puts ("*** Warning - bad CRC or NAND, using default environment\n\n");
-
-       if (default_environment_size > CFG_ENV_SIZE){
-               puts ("*** Error - default environment is too large\n\n");
-               return;
-       }
-
-       memset (env_ptr, 0, sizeof(env_t));
-       memcpy (env_ptr->data,
-                       default_environment,
-                       default_environment_size);
-       env_ptr->crc = crc32(0, env_ptr->data, ENV_SIZE);
-       gd->env_valid = 1;
-
+       set_default_env();
 }
 #endif
 
index dcb7c5a3859951bd59426b6d926b8ddb8b2cfb2b..481ea733dba772dd08739f1222af6628601d59e0 100644 (file)
@@ -117,4 +117,7 @@ unsigned char env_get_char_memory (int index);
 /* Function that updates CRC of the enironment */
 void env_crc_update (void);
 
+/* [re]set to the default environment */
+void set_default_env(void);
+
 #endif /* _ENVIRONMENT_H_ */