diff --git a/common/environment.c b/common/environment.c index e8d623f..78cd45c 100644 --- a/common/environment.c +++ b/common/environment.c @@ -363,3 +363,43 @@ 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 2db55ed..e9372b3 100644 --- a/include/envfs.h +++ b/include/envfs.h @@ -96,4 +96,6 @@ /* defaults to /dev/env0 */ extern char *default_environment_path; +int envfs_register_partition(const char *devname, unsigned int partnr); + #endif /* _ENVFS_H */