diff options
Diffstat (limited to 'sys/fs/devfs.c')
-rw-r--r-- | sys/fs/devfs.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/sys/fs/devfs.c b/sys/fs/devfs.c index 7e7fd9d..8b273db 100644 --- a/sys/fs/devfs.c +++ b/sys/fs/devfs.c @@ -199,6 +199,29 @@ devfs_add_dev(const char *name, const struct device *dev) return 0; } +/* + * Fetch a device descriptor from a vnode. + */ +int +devfs_get_dev(struct vnode *vp, struct device **res) +{ + struct device_node *n; + struct device *dev; + + /* Is this really a device? */ + if (vp->type != VBLK && vp->type != VCHR) { + return -ENODEV; + } + + n = vp->data; + if ((dev = device_fetch(n->major, n->minor)) == NULL) { + return -ENODEV; + } + + *res = dev; + return 0; +} + struct vfsops g_devfs_ops = { .init = devfs_init }; |