summaryrefslogtreecommitdiffstats
path: root/fs/devfs-core.c
diff options
context:
space:
mode:
authorJuergen Beisert <jbe@pengutronix.de>2011-11-24 13:43:40 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2011-11-28 09:23:24 +0100
commit3ca9f1812fc5cb231c11480021886a4e7cfadf97 (patch)
tree7bb5309e82d4807c91e4e7b1c20e56a853693734 /fs/devfs-core.c
parent0c871d19dd7dcc48a4b14e0efeebcfb61bedb867 (diff)
downloadbarebox-3ca9f1812fc5cb231c11480021886a4e7cfadf97.tar.gz
barebox-3ca9f1812fc5cb231c11480021886a4e7cfadf97.tar.xz
Create a unique cdev number for on demand devices
For disk like devices attached to MCI, ATA or USB it depends on the order they will be recognized. So an unique number for all disk like devices is required. Signed-off-by: Juergen Beisert <jbe@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'fs/devfs-core.c')
-rw-r--r--fs/devfs-core.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/fs/devfs-core.c b/fs/devfs-core.c
index 519e18e6b7..9bc3126d6b 100644
--- a/fs/devfs-core.c
+++ b/fs/devfs-core.c
@@ -40,6 +40,20 @@ struct cdev *cdev_by_name(const char *filename)
return NULL;
}
+int cdev_find_free_index(const char *basename)
+{
+ int i;
+ char fname[100];
+
+ for (i = 0; i < 1000; i++) {
+ snprintf(fname, sizeof(fname), "%s%d", basename, i);
+ if (cdev_by_name(fname) == NULL)
+ return i;
+ }
+
+ return -EBUSY; /* all indexes are used */
+}
+
struct cdev *cdev_open(const char *name, unsigned long flags)
{
struct cdev *cdev = cdev_by_name(name);