linux-2.6.33/bus_add_driver()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#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->...
-
--[[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...
"%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]
終了行:
*参照元 [#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->...
-
--[[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...
"%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]
ページ名: