static enum env_location env_get_default_location(void)
{
- if IS_ENABLED(CONFIG_ENV_IS_IN_DATAFLASH)
- return ENVL_DATAFLASH;
- else if IS_ENABLED(CONFIG_ENV_IS_IN_EEPROM)
+ if IS_ENABLED(CONFIG_ENV_IS_IN_EEPROM)
return ENVL_EEPROM;
else if IS_ENABLED(CONFIG_ENV_IS_IN_FAT)
return ENVL_FAT;
return ENVL_UNKNOWN;
}
-static struct env_driver *env_driver_lookup_default(void)
+struct env_driver *env_driver_lookup_default(void)
{
enum env_location loc = env_get_default_location();
struct env_driver *drv;
return drv;
}
-int env_get_char_new(int index)
+int env_get_char(int index)
{
struct env_driver *drv = env_driver_lookup_default();
int ret;
+ if (gd->env_valid == ENV_INVALID)
+ return default_environment[index];
if (!drv)
return -ENODEV;
if (!drv->get_char)
return -ENODEV;
if (!drv->load)
return 0;
- drv->load(); /* TODO(sjg@chromium.org): Make this return an error */
+ ret = drv->load();
if (ret) {
debug("%s: Environment failed to load (err=%d)\n", __func__,
ret);
return 0;
}
-int env_init_new(void)
+int env_init(void)
{
struct env_driver *drv = env_driver_lookup_default();
- int ret;
+ int ret = -ENOENT;
if (!drv)
return -ENODEV;
- if (!drv->init)
- return -ENOSYS;
- ret = drv->init();
- if (ret) {
+ if (drv->init)
+ ret = drv->init();
+ if (ret == -ENOENT) {
+ gd->env_addr = (ulong)&default_environment[0];
+ gd->env_valid = ENV_VALID;
+
+ return 0;
+ } else if (ret) {
debug("%s: Environment failed to init (err=%d)\n", __func__,
ret);
return ret;
return 0;
}
-
-unsigned char env_get_char_spec(int index)
-{
- return *(uchar *)(gd->env_addr + index);
-}
-
-void env_relocate_spec(void)
-{
- env_load();
-}
-
-int saveenv(void)
-{
- return env_save();
-}
-
-int env_init(void)
-{
- return env_init_new();
-}