summaryrefslogtreecommitdiffstats
path: root/common/environment.c
diff options
context:
space:
mode:
authorEric Bénard <eric@eukrea.com>2013-02-19 10:17:23 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2013-02-21 14:45:43 +0100
commiteec960e3b33845af5f28f75bc0a758a3a083ad90 (patch)
tree0a6977a711f6d4e248f76739a8b002add2f0e7f5 /common/environment.c
parent659712cbf3baf218051cefcad4053d023fe847b7 (diff)
downloadbarebox-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>
Diffstat (limited to 'common/environment.c')
-rw-r--r--common/environment.c40
1 files changed, 40 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