From eec960e3b33845af5f28f75bc0a758a3a083ad90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eric=20B=C3=A9nard?= Date: Tue, 19 Feb 2013 10:17:23 +0100 Subject: [PATCH] env: add register_persistent_environment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - heavily copied from register_persistant_environment which was Signed-off-by: Juergen Beisert Signed-off-by: Eric BĂ©nard Signed-off-by: Sascha Hauer --- common/environment.c | 40 ++++++++++++++++++++++++++++++++++++++++ include/envfs.h | 2 ++ 2 files changed, 42 insertions(+) diff --git a/common/environment.c b/common/environment.c index e8d623f7e..78cd45cce 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 2db55ed6a..e9372b386 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 */