]> git.sur5r.net Git - u-boot/blobdiff - env/ubi.c
Merge tag 'signed-efi-next' of git://github.com/agraf/u-boot
[u-boot] / env / ubi.c
index 95b527ddca47c60c7dbe6a55cde935b523a1f8e0..d4f4901ac4b1fbfccd0ad8958582e86dbacc8e53 100644 (file)
--- a/env/ubi.c
+++ b/env/ubi.c
 #include <ubi_uboot.h>
 #undef crc32
 
-char *env_name_spec = "UBI";
-
-env_t *env_ptr;
-
 DECLARE_GLOBAL_DATA_PTR;
 
-int env_init(void)
-{
-       /* use default */
-       gd->env_addr = (ulong)&default_environment[0];
-       gd->env_valid = 1;
-
-       return 0;
-}
-
 #ifdef CONFIG_CMD_SAVEENV
 #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
-int saveenv(void)
+static int env_ubi_save(void)
 {
        ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1);
        int ret;
@@ -48,7 +35,7 @@ int saveenv(void)
                return 1;
        }
 
-       if (gd->env_valid == 1) {
+       if (gd->env_valid == ENV_VALID) {
                puts("Writing to redundant UBI... ");
                if (ubi_volume_write(CONFIG_ENV_UBI_VOLUME_REDUND,
                                     (void *)env_new, CONFIG_ENV_SIZE)) {
@@ -70,12 +57,12 @@ int saveenv(void)
 
        puts("done\n");
 
-       gd->env_valid = gd->env_valid == 2 ? 1 : 2;
+       gd->env_valid = gd->env_valid == ENV_REDUND ? ENV_VALID : ENV_REDUND;
 
        return 0;
 }
 #else /* ! CONFIG_SYS_REDUNDAND_ENVIRONMENT */
-int saveenv(void)
+static int env_ubi_save(void)
 {
        ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1);
        int ret;
@@ -104,10 +91,11 @@ int saveenv(void)
 #endif /* CONFIG_CMD_SAVEENV */
 
 #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
-void env_relocate_spec(void)
+static int env_ubi_load(void)
 {
        ALLOC_CACHE_ALIGN_BUFFER(char, env1_buf, CONFIG_ENV_SIZE);
        ALLOC_CACHE_ALIGN_BUFFER(char, env2_buf, CONFIG_ENV_SIZE);
+       int read1_fail, read2_fail;
        env_t *tmp_env1, *tmp_env2;
 
        /*
@@ -128,25 +116,26 @@ void env_relocate_spec(void)
                printf("\n** Cannot find mtd partition \"%s\"\n",
                       CONFIG_ENV_UBI_PART);
                set_default_env(NULL);
-               return;
+               return -EIO;
        }
 
-       if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, (void *)tmp_env1,
-                           CONFIG_ENV_SIZE)) {
+       read1_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME, (void *)tmp_env1,
+                                    CONFIG_ENV_SIZE);
+       if (read1_fail)
                printf("\n** Unable to read env from %s:%s **\n",
                       CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME);
-       }
 
-       if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME_REDUND, (void *)tmp_env2,
-                           CONFIG_ENV_SIZE)) {
+       read2_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME_REDUND,
+                                    (void *)tmp_env2, CONFIG_ENV_SIZE);
+       if (read2_fail)
                printf("\n** Unable to read redundant env from %s:%s **\n",
                       CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME_REDUND);
-       }
 
-       env_import_redund((char *)tmp_env1, (char *)tmp_env2);
+       return env_import_redund((char *)tmp_env1, read1_fail, (char *)tmp_env2,
+                                                        read2_fail);
 }
 #else /* ! CONFIG_SYS_REDUNDAND_ENVIRONMENT */
-void env_relocate_spec(void)
+static int env_ubi_load(void)
 {
        ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);
 
@@ -164,16 +153,22 @@ void env_relocate_spec(void)
                printf("\n** Cannot find mtd partition \"%s\"\n",
                       CONFIG_ENV_UBI_PART);
                set_default_env(NULL);
-               return;
+               return -EIO;
        }
 
        if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, buf, CONFIG_ENV_SIZE)) {
                printf("\n** Unable to read env from %s:%s **\n",
                       CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME);
                set_default_env(NULL);
-               return;
+               return -EIO;
        }
 
-       env_import(buf, 1);
+       return env_import(buf, 1);
 }
 #endif /* CONFIG_SYS_REDUNDAND_ENVIRONMENT */
+
+U_BOOT_ENV_LOCATION(ubi) = {
+       .location       = ENVL_UBI,
+       .load           = env_ubi_load,
+       .save           = env_save_ptr(env_ubi_save),
+};