*参照元 [#a30c5bb8]
#backlinks

*説明 [#q8354948]
-パス: [[linux-2.6.33/drivers/base/bus.c]]

-FIXME: これは何?
--説明


**引数 [#z3baebe7]
-struct device_driver *drv
--
--[[linux-2.6.33/device_driver]]


**返り値 [#eb5c3fee]
-int
--


**参考 [#i2f69560]


*実装 [#c70e0517]
 /**
  * bus_add_driver - Add a driver to the bus.
  * @drv: driver.
  */
 int bus_add_driver(struct device_driver *drv)
 {
 	struct bus_type *bus;
 	struct driver_private *priv;
 	int error = 0;
 
-
--[[linux-2.6.33/bus_type]]
-
--[[linux-2.6.33/driver_private]]

 	bus = bus_get(drv->bus);
 	if (!bus)
 		return -EINVAL;
 
-
--[[linux-2.6.33/bus_get()]]

 	pr_debug("bus: '%s': add driver %s\n", bus->name, drv->name);
 
-
--[[linux-2.6.33/pr_debug()]]

 	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
 	if (!priv) {
 		error = -ENOMEM;
 		goto out_put_bus;
 	}
-
--[[linux-2.6.33/kzalloc()]]
-
--[[linux-2.6.33/GFP_KERNEL]]

 	klist_init(&priv->klist_devices, NULL, NULL);
 	priv->driver = drv;
 	drv->p = priv;
 	priv->kobj.kset = bus->p->drivers_kset;
 	error = kobject_init_and_add(&priv->kobj, &driver_ktype, NULL,
 				     "%s", drv->name);
 	if (error)
 		goto out_unregister;
 
-
--[[linux-2.6.33/klist_init()]]
-
--[[linux-2.6.33/kobject_init_and_add()]]
-
--[[linux-2.6.33/driver_ktype(global)]]

 	if (drv->bus->p->drivers_autoprobe) {
 		error = driver_attach(drv);
 		if (error)
 			goto out_unregister;
 	}
 	klist_add_tail(&priv->knode_bus, &bus->p->klist_drivers);
 	module_add_driver(drv->owner, drv);
 
-
--[[linux-2.6.33/driver_attach()]]
-
--[[linux-2.6.33/klist_add_tail()]]
-
--[[linux-2.6.33/module_add_driver()]]

 	error = driver_create_file(drv, &driver_attr_uevent);
 	if (error) {
 		printk(KERN_ERR "%s: uevent attr (%s) failed\n",
 			__func__, drv->name);
 	}
-
--[[linux-2.6.33/driver_create_file()]]
-
--[[linux-2.6.33/driver_attr_uevent(global)]]
-
--[[linux-2.6.33/printk()]]

 	error = driver_add_attrs(bus, drv);
 	if (error) {
 		/* How the hell do we get out of this pickle? Give up */
 		printk(KERN_ERR "%s: driver_add_attrs(%s) failed\n",
 			__func__, drv->name);
 	}
 
-
--[[linux-2.6.33/driver_add_attrs()]]

 	if (!drv->suppress_bind_attrs) {
 		error = add_bind_files(drv);
 		if (error) {
 			/* Ditto */
 			printk(KERN_ERR "%s: add_bind_files(%s) failed\n",
 				__func__, drv->name);
 		}
 	}
 
-
--[[linux-2.6.33/add_bind_files()]]

 	kobject_uevent(&priv->kobj, KOBJ_ADD);
 	return 0;
 
-
--[[linux-2.6.33/kobject_uevent()]]
-
--[[linux-2.6.33/KOBJ_ADD]]

 out_unregister:
 	kobject_put(&priv->kobj);
 	kfree(drv->p);
 	drv->p = NULL;
-
--[[linux-2.6.33/kobject_put()]]
-
--[[linux-2.6.33/kfree()]]

 out_put_bus:
 	bus_put(bus);
 	return error;
-
--[[linux-2.6.33/bus_put()]]

 }

*コメント [#t9e7f47c]


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS