diff options
author | Eric Bénard <eric@eukrea.com> | 2013-02-19 10:17:23 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-02-21 14:45:43 +0100 |
commit | eec960e3b33845af5f28f75bc0a758a3a083ad90 (patch) | |
tree | 0a6977a711f6d4e248f76739a8b002add2f0e7f5 | |
parent | 659712cbf3baf218051cefcad4053d023fe847b7 (diff) | |
download | barebox-eec960e3b33845af5f28f75bc0a758a3a083ad90.tar.gz barebox-eec960e3b33845af5f28f75bc0a758a3a083ad90.tar.xz |
env: add register_persistent_environment
- heavily copied from register_persistant_environment which was
Signed-off-by: Juergen Beisert <jbe@pengutronix.de>
Signed-off-by: Eric Bénard <eric@eukrea.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | common/environment.c | 40 | ||||
-rw-r--r-- | include/envfs.h | 2 |
2 files changed, 42 insertions, 0 deletions
diff --git a/common/environment.c b/common/environment.c index e8d623f7e4..78cd45cce7 100644 --- a/common/environment.c +++ b/common/environment.c @@ -363,3 +363,43 @@ out: free(buf_free); return ret; } + +#ifdef __BAREBOX__ +/** + * Try to register an environment storage on a device's partition + * @return 0 on success + * + * We rely on the existence of a usable storage device, already attached to + * our system, to get something like a persistent memory for our environment. + * We need to specify the partition number to use on this device. + * @param[in] devname Name of the device + * @param[in] partnr Partition number + * @return 0 on success, anything else in case of failure + */ + +int envfs_register_partition(const char *devname, unsigned int partnr) +{ + struct cdev *cdev; + char *partname; + + if (!devname) + return -EINVAL; + + cdev = cdev_by_name(devname); + if (cdev == NULL) { + pr_err("No %s present\n", devname); + return -ENODEV; + } + partname = asprintf("%s.%d", devname, partnr); + cdev = cdev_by_name(partname); + if (cdev == NULL) { + pr_err("No %s partition available\n", partname); + pr_info("Please create the partition %s to store the env\n", partname); + return -ENODEV; + } + + return devfs_add_partition(partname, 0, cdev->size, + DEVFS_PARTITION_FIXED, "env0"); +} +EXPORT_SYMBOL(envfs_register_partition); +#endif diff --git a/include/envfs.h b/include/envfs.h index 2db55ed6a4..e9372b3867 100644 --- a/include/envfs.h +++ b/include/envfs.h @@ -96,4 +96,6 @@ int envfs_save(char *filename, char *dirname); /* defaults to /dev/env0 */ extern char *default_environment_path; +int envfs_register_partition(const char *devname, unsigned int partnr); + #endif /* _ENVFS_H */ |