summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Mochel <mochel@osdl.org>2002-10-30 16:20:45 -0800
committerPatrick Mochel <mochel@osdl.org>2002-10-30 16:20:45 -0800
commitd7dce5e30c987d2df928784bbba2ab6caca180e9 (patch)
treeecc79253519aab05a9ad63eb905badf8b1ae97cd
parent99af1a944187de3c4317e5eaa06b4bc4c8632a68 (diff)
driver model: remove remaining driverfs glue.
-rw-r--r--drivers/base/base.h29
-rw-r--r--drivers/base/bus.c8
-rw-r--r--drivers/base/class.c17
-rw-r--r--drivers/base/core.c12
-rw-r--r--drivers/base/fs/Makefile4
-rw-r--r--drivers/base/fs/bus.c45
-rw-r--r--drivers/base/fs/class.c53
-rw-r--r--drivers/base/fs/device.c87
-rw-r--r--drivers/base/fs/driver.c22
-rw-r--r--drivers/base/fs/intf.c19
-rw-r--r--drivers/base/intf.c8
-rw-r--r--include/linux/device.h11
12 files changed, 20 insertions, 295 deletions
diff --git a/drivers/base/base.h b/drivers/base/base.h
index 8fd09addc1f8..c6f4b2f47bf6 100644
--- a/drivers/base/base.h
+++ b/drivers/base/base.h
@@ -10,44 +10,15 @@ extern struct list_head global_device_list;
extern spinlock_t device_lock;
extern struct semaphore device_sem;
-extern struct device * get_device_locked(struct device *);
-
extern int bus_add_device(struct device * dev);
extern void bus_remove_device(struct device * dev);
-extern int device_make_dir(struct device * dev);
-extern void device_remove_dir(struct device * dev);
-
-extern int bus_make_dir(struct bus_type * bus);
-extern void bus_remove_dir(struct bus_type * bus);
-
extern int bus_add_driver(struct device_driver *);
extern void bus_remove_driver(struct device_driver *);
-extern int driver_make_dir(struct device_driver * drv);
-extern void driver_remove_dir(struct device_driver * drv);
-
-extern int device_bus_link(struct device * dev);
-extern void device_remove_symlink(struct driver_dir_entry * dir, const char * name);
-
-extern int devclass_make_dir(struct device_class *);
-extern void devclass_remove_dir(struct device_class *);
-
-extern int devclass_drv_link(struct device_driver *);
-extern void devclass_drv_unlink(struct device_driver *);
-
-extern int devclass_dev_link(struct device_class *, struct device *);
-extern void devclass_dev_unlink(struct device_class *, struct device *);
-
extern int devclass_add_device(struct device *);
extern void devclass_remove_device(struct device *);
-extern int intf_make_dir(struct device_interface *);
-extern void intf_remove_dir(struct device_interface *);
-
-extern int intf_dev_link(struct intf_data *);
-extern void intf_dev_unlink(struct intf_data *);
-
extern int interface_add(struct device_class *, struct device *);
extern void interface_remove(struct device_class *, struct device *);
diff --git a/drivers/base/bus.c b/drivers/base/bus.c
index 8428b8f1acd3..08db6a58ead3 100644
--- a/drivers/base/bus.c
+++ b/drivers/base/bus.c
@@ -380,7 +380,6 @@ void put_bus(struct bus_type * bus)
list_del_init(&bus->node);
spin_unlock(&device_lock);
WARN_ON(bus->present);
- bus_remove_dir(bus);
}
int bus_register(struct bus_type * bus)
@@ -409,11 +408,7 @@ int bus_register(struct bus_type * bus)
spin_unlock(&device_lock);
pr_debug("bus type '%s' registered\n",bus->name);
-
- /* give it some driverfs entities */
- bus_make_dir(bus);
put_bus(bus);
-
return 0;
}
@@ -424,6 +419,9 @@ void bus_unregister(struct bus_type * bus)
spin_unlock(&device_lock);
pr_debug("bus %s: unregistering\n",bus->name);
+ subsystem_unregister(&bus->drvsubsys);
+ subsystem_unregister(&bus->devsubsys);
+ subsystem_unregister(&bus->subsys);
put_bus(bus);
}
diff --git a/drivers/base/class.c b/drivers/base/class.c
index df7215a408e9..8a22d34d82d9 100644
--- a/drivers/base/class.c
+++ b/drivers/base/class.c
@@ -49,28 +49,28 @@ static struct subsystem class_subsys = {
};
-int devclass_dev_link(struct device_class * cls, struct device * dev)
+static int devclass_dev_link(struct device_class * cls, struct device * dev)
{
char linkname[16];
snprintf(linkname,16,"%u",dev->class_num);
return sysfs_create_link(&cls->devsubsys.kobj,&dev->kobj,linkname);
}
-void devclass_dev_unlink(struct device_class * cls, struct device * dev)
+static void devclass_dev_unlink(struct device_class * cls, struct device * dev)
{
char linkname[16];
snprintf(linkname,16,"%u",dev->class_num);
sysfs_remove_link(&cls->devsubsys.kobj,linkname);
}
-int devclass_drv_link(struct device_driver * drv)
+static int devclass_drv_link(struct device_driver * drv)
{
char name[KOBJ_NAME_LEN * 3];
snprintf(name,KOBJ_NAME_LEN * 3,"%s:%s",drv->bus->name,drv->name);
return sysfs_create_link(&drv->devclass->drvsubsys.kobj,&drv->kobj,name);
}
-void devclass_drv_unlink(struct device_driver * drv)
+static void devclass_drv_unlink(struct device_driver * drv)
{
char name[KOBJ_NAME_LEN * 3];
snprintf(name,KOBJ_NAME_LEN * 3,"%s:%s",drv->bus->name,drv->name);
@@ -224,7 +224,6 @@ void put_devclass(struct device_class * cls)
if (atomic_dec_and_lock(&cls->refcount,&device_lock)) {
list_del_init(&cls->node);
spin_unlock(&device_lock);
- devclass_remove_dir(cls);
}
}
@@ -242,18 +241,17 @@ int devclass_register(struct device_class * cls)
cls->subsys.parent = &class_subsys;
subsystem_register(&cls->subsys);
- snprintf(cls->devsubsys.kobj.name,"devices",KOBJ_NAME_LEN);
+ snprintf(cls->devsubsys.kobj.name,KOBJ_NAME_LEN,"devices");
cls->devsubsys.parent = &cls->subsys;
subsystem_register(&cls->devsubsys);
- snprintf(cls->drvsubsys.kobj.name,"drivers",KOBJ_NAME_LEN);
+ snprintf(cls->drvsubsys.kobj.name,KOBJ_NAME_LEN,"drivers");
cls->drvsubsys.parent = &cls->subsys;
subsystem_register(&cls->drvsubsys);
spin_lock(&device_lock);
list_add_tail(&cls->node,&class_list);
spin_unlock(&device_lock);
- devclass_make_dir(cls);
put_devclass(cls);
return 0;
}
@@ -264,6 +262,9 @@ void devclass_unregister(struct device_class * cls)
cls->present = 0;
spin_unlock(&device_lock);
pr_debug("device class '%s': unregistering\n",cls->name);
+ subsystem_unregister(&cls->drvsubsys);
+ subsystem_unregister(&cls->devsubsys);
+ subsystem_unregister(&cls->subsys);
put_devclass(cls);
}
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 9bbe8bc96c62..b68299c45c0b 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -23,8 +23,6 @@ DECLARE_MUTEX(device_sem);
spinlock_t device_lock = SPIN_LOCK_UNLOCKED;
-struct subsystem device_subsys;
-
#define to_dev(obj) container_of(obj,struct device,kobj)
@@ -117,9 +115,7 @@ int device_add(struct device *dev)
if (dev->parent)
dev->kobj.parent = &dev->parent->kobj;
dev->kobj.subsys = &device_subsys;
- kobject_register(&dev->kobj);
-
- if ((error = device_make_dir(dev)))
+ if ((error = kobject_register(&dev->kobj)))
goto register_done;
bus_add_device(dev);
@@ -233,9 +229,6 @@ void device_del(struct device * dev)
bus_remove_device(dev);
- /* remove the driverfs directory */
- device_remove_dir(dev);
-
if (dev->release)
dev->release(dev);
@@ -275,3 +268,6 @@ EXPORT_SYMBOL(device_register);
EXPORT_SYMBOL(device_unregister);
EXPORT_SYMBOL(get_device);
EXPORT_SYMBOL(put_device);
+
+EXPORT_SYMBOL(device_create_file);
+EXPORT_SYMBOL(device_remove_file);
diff --git a/drivers/base/fs/Makefile b/drivers/base/fs/Makefile
index d4bcde25fda2..f94c734b258f 100644
--- a/drivers/base/fs/Makefile
+++ b/drivers/base/fs/Makefile
@@ -1,5 +1,5 @@
-obj-y := device.o bus.o driver.o class.o intf.o
+obj-y := device.o
-export-objs := device.o bus.o driver.o class.o
+export-objs := device.o
include $(TOPDIR)/Rules.make
diff --git a/drivers/base/fs/bus.c b/drivers/base/fs/bus.c
deleted file mode 100644
index 7c95233d9249..000000000000
--- a/drivers/base/fs/bus.c
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <linux/module.h>
-#include <linux/device.h>
-#include <linux/init.h>
-#include <linux/stat.h>
-#include "fs.h"
-
-static struct driver_dir_entry bus_dir;
-
-int bus_make_dir(struct bus_type * bus)
-{
- int error;
- bus->dir.name = bus->name;
-
- error = device_create_dir(&bus->dir,&bus_dir);
- if (!error) {
- bus->device_dir.name = "devices";
- device_create_dir(&bus->device_dir,&bus->dir);
-
- bus->driver_dir.name = "drivers";
- device_create_dir(&bus->driver_dir,&bus->dir);
- }
- return error;
-}
-
-void bus_remove_dir(struct bus_type * bus)
-{
- /* remove driverfs entries */
- driverfs_remove_dir(&bus->driver_dir);
- driverfs_remove_dir(&bus->device_dir);
- driverfs_remove_dir(&bus->dir);
-}
-
-static struct driver_dir_entry bus_dir = {
- .name = "bus",
- .mode = (S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO),
-};
-
-static int __init bus_init(void)
-{
- /* make 'bus' driverfs directory */
- return driverfs_create_dir(&bus_dir,NULL);
-}
-
-core_initcall(bus_init);
-
diff --git a/drivers/base/fs/class.c b/drivers/base/fs/class.c
deleted file mode 100644
index 0be2d2986931..000000000000
--- a/drivers/base/fs/class.c
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * class.c - driverfs bindings for device classes.
- */
-
-#include <linux/device.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/slab.h>
-#include <linux/err.h>
-#include "fs.h"
-
-static struct driver_dir_entry class_dir;
-
-void devclass_remove_dir(struct device_class * dc)
-{
- driverfs_remove_dir(&dc->device_dir);
- driverfs_remove_dir(&dc->driver_dir);
- driverfs_remove_dir(&dc->dir);
-}
-
-int devclass_make_dir(struct device_class * dc)
-{
- int error;
-
- dc->dir.name = dc->name;
- error = device_create_dir(&dc->dir,&class_dir);
- if (!error) {
- dc->driver_dir.name = "drivers";
- error = device_create_dir(&dc->driver_dir,&dc->dir);
- if (!error) {
- dc->device_dir.name = "devices";
- error = device_create_dir(&dc->device_dir,&dc->dir);
- }
- if (error)
- driverfs_remove_dir(&dc->dir);
- }
- return error;
-}
-
-static struct driver_dir_entry class_dir = {
- name: "class",
- mode: (S_IRWXU | S_IRUGO | S_IXUGO),
-};
-
-static int __init devclass_driverfs_init(void)
-{
- return driverfs_create_dir(&class_dir,NULL);
-}
-
-core_initcall(devclass_driverfs_init);
-
-EXPORT_SYMBOL(devclass_create_file);
-EXPORT_SYMBOL(devclass_remove_file);
diff --git a/drivers/base/fs/device.c b/drivers/base/fs/device.c
index ddb2b5c33eb3..9f1dee4e7637 100644
--- a/drivers/base/fs/device.c
+++ b/drivers/base/fs/device.c
@@ -16,21 +16,6 @@
#include <linux/stat.h>
#include <linux/limits.h>
-static struct driver_dir_entry device_root_dir = {
- .name = "root",
- .mode = (S_IRWXU | S_IRUGO | S_IXUGO),
-};
-
-/**
- * device_remove_dir - remove a device's directory
- * @dev: device in question
- */
-void device_remove_dir(struct device * dev)
-{
- if (dev)
- driverfs_remove_dir(&dev->dir);
-}
-
int get_devpath_length(struct device * dev)
{
int length = 1;
@@ -62,80 +47,8 @@ void fill_devpath(struct device * dev, char * path, int length)
pr_debug("%s: path = '%s'\n",__FUNCTION__,path);
}
-int device_bus_link(struct device * dev)
-{
- char * path;
- int length;
- int error = 0;
-
- if (!dev->bus)
- return 0;
-
- length = get_devpath_length(dev);
-
- /* now add the path from the bus directory
- * It should be '../../..' (one to get to the bus's directory,
- * one to get to the 'bus' directory, and one to get to the root
- * of the fs.)
- */
- length += strlen("../../../root");
-
- if (length > PATH_MAX)
- return -ENAMETOOLONG;
-
- if (!(path = kmalloc(length,GFP_KERNEL)))
- return -ENOMEM;
- memset(path,0,length);
-
- /* our relative position */
- strcpy(path,"../../../root");
-
- fill_devpath(dev,path,length);
- error = driverfs_create_symlink(&dev->bus->device_dir,dev->bus_id,path);
- kfree(path);
- return error;
-}
-
void device_remove_symlink(struct driver_dir_entry * dir, const char * name)
{
driverfs_remove_file(dir,name);
}
-int device_create_dir(struct driver_dir_entry * dir, struct driver_dir_entry * parent)
-{
- dir->mode = (S_IFDIR| S_IRWXU | S_IRUGO | S_IXUGO);
- return driverfs_create_dir(dir,parent);
-}
-
-/**
- * device_make_dir - create a driverfs directory
- * @name: name of directory
- * @parent: dentry for the parent directory
- *
- * Do the initial creation of the device's driverfs directory
- * and populate it with the one default file.
- *
- * This is just a helper for device_register(), as we
- * don't export this function. (Yes, that means we don't allow
- * devices to create subdirectories).
- */
-int device_make_dir(struct device * dev)
-{
- struct driver_dir_entry * parent;
- int error;
-
- parent = dev->parent ? &dev->parent->dir : &device_root_dir;
- dev->dir.name = dev->bus_id;
-
- return device_create_dir(&dev->dir,parent);
-}
-
-static int device_driverfs_init(void)
-{
- return driverfs_create_dir(&device_root_dir,NULL);
-}
-
-core_initcall(device_driverfs_init);
-
-EXPORT_SYMBOL(device_create_file);
-EXPORT_SYMBOL(device_remove_file);
diff --git a/drivers/base/fs/driver.c b/drivers/base/fs/driver.c
deleted file mode 100644
index c259470c7bb6..000000000000
--- a/drivers/base/fs/driver.c
+++ /dev/null
@@ -1,22 +0,0 @@
-#include <linux/device.h>
-#include <linux/module.h>
-#include <linux/stat.h>
-#include <linux/err.h>
-#include "fs.h"
-
-
-/**
- * driver_make_dir - create a driverfs directory for a driver
- * @drv: driver in question
- */
-int driver_make_dir(struct device_driver * drv)
-{
- drv->dir.name = drv->name;
- return device_create_dir(&drv->dir,&drv->bus->driver_dir);
-}
-
-void driver_remove_dir(struct device_driver * drv)
-{
- driverfs_remove_dir(&drv->dir);
-}
-
diff --git a/drivers/base/fs/intf.c b/drivers/base/fs/intf.c
deleted file mode 100644
index 38da45a7e88a..000000000000
--- a/drivers/base/fs/intf.c
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * intf.c - driverfs glue for device interfaces
- */
-
-#include <linux/device.h>
-#include <linux/slab.h>
-#include "fs.h"
-
-
-void intf_remove_dir(struct device_interface * intf)
-{
- driverfs_remove_dir(&intf->dir);
-}
-
-int intf_make_dir(struct device_interface * intf)
-{
- intf->dir.name = intf->name;
- return device_create_dir(&intf->dir,&intf->devclass->dir);
-}
diff --git a/drivers/base/intf.c b/drivers/base/intf.c
index a66bf76b2f83..b025d53ee142 100644
--- a/drivers/base/intf.c
+++ b/drivers/base/intf.c
@@ -15,7 +15,7 @@
* intf_dev_link - symlink from interface's directory to device's directory
*
*/
-int intf_dev_link(struct intf_data * data)
+static int intf_dev_link(struct intf_data * data)
{
char linkname[16];
@@ -23,7 +23,7 @@ int intf_dev_link(struct intf_data * data)
return sysfs_create_link(&data->intf->kobj,&data->dev->kobj,linkname);
}
-void intf_dev_unlink(struct intf_data * data)
+static void intf_dev_unlink(struct intf_data * data)
{
char linkname[16];
snprintf(linkname,16,"%u",data->intf_num);
@@ -38,8 +38,6 @@ int interface_register(struct device_interface * intf)
if (cls) {
pr_debug("register interface '%s' with class '%s\n",
intf->name,cls->name);
- intf_make_dir(intf);
-
kobject_init(&intf->kobj);
strncpy(intf->kobj.name,intf->name,KOBJ_NAME_LEN);
intf->kobj.subsys = &cls->subsys;
@@ -61,8 +59,6 @@ void interface_unregister(struct device_interface * intf)
spin_lock(&device_lock);
list_del_init(&intf->node);
spin_unlock(&device_lock);
-
- intf_remove_dir(intf);
}
int interface_add(struct device_class * cls, struct device * dev)
diff --git a/include/linux/device.h b/include/linux/device.h
index 273e92e78d7a..cf9f785dfbde 100644
--- a/include/linux/device.h
+++ b/include/linux/device.h
@@ -73,10 +73,6 @@ struct bus_type {
struct list_head devices;
struct list_head drivers;
- struct driver_dir_entry dir;
- struct driver_dir_entry device_dir;
- struct driver_dir_entry driver_dir;
-
int (*match)(struct device * dev, struct device_driver * drv);
struct device * (*add) (struct device * parent, char * bus_id);
int (*hotplug) (struct device *dev, char **envp,
@@ -128,8 +124,6 @@ struct device_driver {
struct list_head class_list;
struct list_head devices;
- struct driver_dir_entry dir;
-
int (*probe) (struct device * dev);
int (*remove) (struct device * dev);
void (*shutdown) (struct device * dev);
@@ -189,10 +183,6 @@ struct device_class {
struct list_head drivers;
struct list_head intf_list;
- struct driver_dir_entry dir;
- struct driver_dir_entry driver_dir;
- struct driver_dir_entry device_dir;
-
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
int (*hotplug)(struct device *dev, char **envp,
@@ -243,7 +233,6 @@ struct device_interface {
struct kobject kobj;
struct list_head node;
struct list_head devices;
- struct driver_dir_entry dir;
u32 devnum;