]> git.sur5r.net Git - u-boot/blobdiff - env/mmc.c
Merge git://git.denx.de/u-boot-video
[u-boot] / env / mmc.c
index e387202e714731697800b340b3e19674311d3e31..3f3092d975607a48161e3e74819d98a67a16ad64 100644 (file)
--- a/env/mmc.c
+++ b/env/mmc.c
 #error CONFIG_ENV_SIZE_REDUND should be the same as CONFIG_ENV_SIZE
 #endif
 
-char *env_name_spec = "MMC";
-
-#ifdef ENV_IS_EMBEDDED
-env_t *env_ptr = &environment;
-#else /* ! ENV_IS_EMBEDDED */
-env_t *env_ptr;
-#endif /* ENV_IS_EMBEDDED */
-
 DECLARE_GLOBAL_DATA_PTR;
 
 #if !defined(CONFIG_ENV_OFFSET)
@@ -82,15 +74,6 @@ __weak int mmc_get_env_dev(void)
        return CONFIG_SYS_MMC_ENV_DEV;
 }
 
-int env_init(void)
-{
-       /* use default */
-       gd->env_addr    = (ulong)&default_environment[0];
-       gd->env_valid   = ENV_VALID;
-
-       return 0;
-}
-
 #ifdef CONFIG_SYS_MMC_ENV_PART
 __weak uint mmc_get_env_part(struct mmc *mmc)
 {
@@ -145,7 +128,7 @@ static void fini_mmc_for_env(struct mmc *mmc)
 #endif
 }
 
-#ifdef CONFIG_CMD_SAVEENV
+#if defined(CONFIG_CMD_SAVEENV) && !defined(CONFIG_SPL_BUILD)
 static inline int write_env(struct mmc *mmc, unsigned long size,
                            unsigned long offset, const void *buffer)
 {
@@ -160,7 +143,7 @@ static inline int write_env(struct mmc *mmc, unsigned long size,
        return (n == blk_cnt) ? 0 : -1;
 }
 
-int saveenv(void)
+static int env_mmc_save(void)
 {
        ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1);
        int dev = mmc_get_env_dev();
@@ -207,7 +190,7 @@ fini:
        fini_mmc_for_env(mmc);
        return ret;
 }
-#endif /* CONFIG_CMD_SAVEENV */
+#endif /* CONFIG_CMD_SAVEENV && !CONFIG_SPL_BUILD */
 
 static inline int read_env(struct mmc *mmc, unsigned long size,
                           unsigned long offset, const void *buffer)
@@ -224,7 +207,7 @@ static inline int read_env(struct mmc *mmc, unsigned long size,
 }
 
 #ifdef CONFIG_ENV_OFFSET_REDUND
-void env_relocate_spec(void)
+static int env_mmc_load(void)
 {
 #if !defined(ENV_IS_EMBEDDED)
        struct mmc *mmc;
@@ -241,13 +224,13 @@ void env_relocate_spec(void)
 
        errmsg = init_mmc_for_env(mmc);
        if (errmsg) {
-               ret = 1;
+               ret = -EIO;
                goto err;
        }
 
        if (mmc_get_env_addr(mmc, 0, &offset1) ||
            mmc_get_env_addr(mmc, 1, &offset2)) {
-               ret = 1;
+               ret = -EIO;
                goto fini;
        }
 
@@ -262,7 +245,7 @@ void env_relocate_spec(void)
 
        if (read1_fail && read2_fail) {
                errmsg = "!bad CRC";
-               ret = 1;
+               ret = -EIO;
                goto fini;
        } else if (!read1_fail && read2_fail) {
                gd->env_valid = ENV_VALID;
@@ -281,10 +264,12 @@ fini:
 err:
        if (ret)
                set_default_env(errmsg);
+
 #endif
+       return ret;
 }
 #else /* ! CONFIG_ENV_OFFSET_REDUND */
-void env_relocate_spec(void)
+static int env_mmc_load(void)
 {
 #if !defined(ENV_IS_EMBEDDED)
        ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);
@@ -298,18 +283,18 @@ void env_relocate_spec(void)
 
        errmsg = init_mmc_for_env(mmc);
        if (errmsg) {
-               ret = 1;
+               ret = -EIO;
                goto err;
        }
 
        if (mmc_get_env_addr(mmc, 0, &offset)) {
-               ret = 1;
+               ret = -EIO;
                goto fini;
        }
 
        if (read_env(mmc, CONFIG_ENV_SIZE, offset, buf)) {
                errmsg = "!read failed";
-               ret = 1;
+               ret = -EIO;
                goto fini;
        }
 
@@ -322,5 +307,15 @@ err:
        if (ret)
                set_default_env(errmsg);
 #endif
+       return ret;
 }
 #endif /* CONFIG_ENV_OFFSET_REDUND */
+
+U_BOOT_ENV_LOCATION(mmc) = {
+       .location       = ENVL_MMC,
+       ENV_NAME("MMC")
+       .load           = env_mmc_load,
+#ifndef CONFIG_SPL_BUILD
+       .save           = env_save_ptr(env_mmc_save),
+#endif
+};