Lines Matching defs:gdev

36 static void __ccwgroup_remove_symlinks(struct ccwgroup_device *gdev)
41 for (i = 0; i < gdev->count; i++) {
43 sysfs_remove_link(&gdev->dev.kobj, str);
44 sysfs_remove_link(&gdev->cdev[i]->dev.kobj, "group_device");
50 * @gdev: target ccwgroup device
56 int ccwgroup_set_online(struct ccwgroup_device *gdev)
58 struct ccwgroup_driver *gdrv = to_ccwgroupdrv(gdev->dev.driver);
61 if (atomic_cmpxchg(&gdev->onoff, 0, 1) != 0)
63 if (gdev->state == CCWGROUP_ONLINE)
66 ret = gdrv->set_online(gdev);
70 gdev->state = CCWGROUP_ONLINE;
72 atomic_set(&gdev->onoff, 0);
79 * @gdev: target ccwgroup device
86 int ccwgroup_set_offline(struct ccwgroup_device *gdev, bool call_gdrv)
88 struct ccwgroup_driver *gdrv = to_ccwgroupdrv(gdev->dev.driver);
91 if (atomic_cmpxchg(&gdev->onoff, 0, 1) != 0)
93 if (gdev->state == CCWGROUP_OFFLINE)
100 ret = gdrv->set_offline(gdev);
105 gdev->state = CCWGROUP_OFFLINE;
107 atomic_set(&gdev->onoff, 0);
116 struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
131 ret = ccwgroup_set_online(gdev);
133 ret = ccwgroup_set_offline(gdev, true);
145 struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
148 online = (gdev->state == CCWGROUP_ONLINE) ? 1 : 0;
157 static void ccwgroup_ungroup(struct ccwgroup_device *gdev)
159 mutex_lock(&gdev->reg_mutex);
160 if (device_is_registered(&gdev->dev)) {
161 __ccwgroup_remove_symlinks(gdev);
162 device_unregister(&gdev->dev);
164 mutex_unlock(&gdev->reg_mutex);
171 struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
175 if (atomic_cmpxchg(&gdev->onoff, 0, 1) != 0)
177 if (gdev->state != CCWGROUP_OFFLINE) {
183 ccwgroup_ungroup(gdev);
189 atomic_set(&gdev->onoff, 0);
206 struct ccwgroup_device *gdev =
209 ccwgroup_ungroup(gdev);
210 put_device(&gdev->dev);
215 struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
218 for (i = 0; i < gdev->count; i++) {
219 struct ccw_device *cdev = gdev->cdev[i];
224 if (dev_get_drvdata(&cdev->dev) == gdev)
231 kfree(gdev);
234 static int __ccwgroup_create_symlinks(struct ccwgroup_device *gdev)
239 for (i = 0; i < gdev->count; i++) {
240 rc = sysfs_create_link(&gdev->cdev[i]->dev.kobj,
241 &gdev->dev.kobj, "group_device");
244 sysfs_remove_link(&gdev->cdev[i]->dev.kobj,
249 for (i = 0; i < gdev->count; i++) {
251 rc = sysfs_create_link(&gdev->dev.kobj,
252 &gdev->cdev[i]->dev.kobj, str);
256 sysfs_remove_link(&gdev->dev.kobj, str);
258 for (i = 0; i < gdev->count; i++)
259 sysfs_remove_link(&gdev->cdev[i]->dev.kobj,
316 struct ccwgroup_device *gdev;
323 gdev = kzalloc(struct_size(gdev, cdev, num_devices), GFP_KERNEL);
324 if (!gdev)
327 atomic_set(&gdev->onoff, 0);
328 mutex_init(&gdev->reg_mutex);
329 mutex_lock(&gdev->reg_mutex);
330 INIT_WORK(&gdev->ungroup_work, ccwgroup_ungroup_workfn);
331 gdev->count = num_devices;
332 gdev->dev.bus = &ccwgroup_bus_type;
333 gdev->dev.parent = parent;
334 gdev->dev.release = ccwgroup_release;
335 device_initialize(&gdev->dev);
341 gdev->cdev[i] = get_ccwdev_by_dev_id(&dev_id);
346 if (!gdev->cdev[i] || !gdev->cdev[i]->drv ||
347 gdev->cdev[i]->drv != gdev->cdev[0]->drv ||
348 gdev->cdev[i]->id.driver_info !=
349 gdev->cdev[0]->id.driver_info) {
354 spin_lock_irq(gdev->cdev[i]->ccwlock);
355 if (dev_get_drvdata(&gdev->cdev[i]->dev)) {
356 spin_unlock_irq(gdev->cdev[i]->ccwlock);
360 dev_set_drvdata(&gdev->cdev[i]->dev, gdev);
361 spin_unlock_irq(gdev->cdev[i]->ccwlock);
375 gdev->cdev[0]->drv != gdrv->ccw_driver) {
380 dev_set_name(&gdev->dev, "%s", dev_name(&gdev->cdev[0]->dev));
383 gdev->dev.driver = &gdrv->driver;
384 rc = gdrv->setup ? gdrv->setup(gdev) : 0;
388 rc = device_add(&gdev->dev);
391 rc = __ccwgroup_create_symlinks(gdev);
393 device_del(&gdev->dev);
396 mutex_unlock(&gdev->reg_mutex);
399 mutex_unlock(&gdev->reg_mutex);
400 put_device(&gdev->dev);
408 struct ccwgroup_device *gdev = to_ccwgroupdev(data);
411 get_device(&gdev->dev);
412 schedule_work(&gdev->ungroup_work);
450 struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
454 gdrv->remove(gdev);
459 struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
465 gdrv->shutdown(gdev);
533 struct ccwgroup_device *gdev;
539 gdev = dev_get_drvdata(&cdev->dev);
540 if (!gdev) {
545 get_device(&gdev->dev);
548 ccwgroup_ungroup(gdev);
550 put_device(&gdev->dev);