Lines Matching defs:cdev
15 #include <linux/cdev.h>
61 static int ur_probe(struct ccw_device *cdev);
62 static void ur_remove(struct ccw_device *cdev);
63 static int ur_set_online(struct ccw_device *cdev);
64 static int ur_set_offline(struct ccw_device *cdev);
65 static int ur_pm_suspend(struct ccw_device *cdev);
87 * (cdev) using the urd->cdev pointer. Each ccw device has a reference to the
88 * ur device using dev_get_drvdata(&cdev->dev) pointer.
92 * dev_get_drvdata(&cdev->dev)
96 * cdev references:
97 * - urdev_alloc get a cdev reference (urd->cdev)
98 * - urdev_free drops the cdev reference (urd->cdev)
100 * Setting and clearing of dev_get_drvdata(&cdev->dev) is protected by the ccwdev lock
102 static struct urdev *urdev_alloc(struct ccw_device *cdev)
109 urd->reclen = cdev->id.driver_info;
110 ccw_device_get_id(cdev, &urd->dev_id);
115 urd->cdev = cdev;
116 get_device(&cdev->dev);
123 if (urd->cdev)
124 put_device(&urd->cdev->dev);
133 static struct urdev *urdev_get_from_cdev(struct ccw_device *cdev)
138 spin_lock_irqsave(get_ccwdev_lock(cdev), flags);
139 urd = dev_get_drvdata(&cdev->dev);
142 spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags);
149 struct ccw_device *cdev;
153 cdev = get_ccwdev_by_busid(&ur_driver, bus_id);
154 if (!cdev)
156 urd = urdev_get_from_cdev(cdev);
157 put_device(&cdev->dev);
176 static int ur_pm_suspend(struct ccw_device *cdev)
178 struct urdev *urd = dev_get_drvdata(&cdev->dev);
180 TRACE("ur_pm_suspend: cdev=%p\n", cdev);
183 "suspend.\n", dev_name(&cdev->dev), ur_banner);
274 struct ccw_device *cdev = urd->cdev;
285 spin_lock_irq(get_ccwdev_lock(cdev));
286 rc = ccw_device_start(cdev, cpa, 1, 0, 0);
287 spin_unlock_irq(get_ccwdev_lock(cdev));
305 static void ur_int_handler(struct ccw_device *cdev, unsigned long intparm,
319 urd = dev_get_drvdata(&cdev->dev);
817 static int ur_probe(struct ccw_device *cdev)
822 TRACE("ur_probe: cdev=%p\n", cdev);
825 urd = urdev_alloc(cdev);
831 rc = ur_create_attributes(&cdev->dev);
836 cdev->handler = ur_int_handler;
848 spin_lock_irq(get_ccwdev_lock(cdev));
849 dev_set_drvdata(&cdev->dev, urd);
850 spin_unlock_irq(get_ccwdev_lock(cdev));
856 ur_remove_attributes(&cdev->dev);
864 static int ur_set_online(struct ccw_device *cdev)
870 TRACE("ur_set_online: cdev=%p\n", cdev);
873 urd = urdev_get_from_cdev(cdev);
901 if (urd->cdev->id.cu_type == READER_PUNCH_DEVTYPE) {
903 sprintf(node_id, "vmrdr-%s", dev_name(&cdev->dev));
905 sprintf(node_id, "vmpun-%s", dev_name(&cdev->dev));
906 } else if (urd->cdev->id.cu_type == PRINTER_DEVTYPE) {
907 sprintf(node_id, "vmprt-%s", dev_name(&cdev->dev));
913 urd->device = device_create(vmur_class, &cdev->dev,
934 static int ur_set_offline_force(struct ccw_device *cdev, int force)
939 TRACE("ur_set_offline: cdev=%p\n", cdev);
940 urd = urdev_get_from_cdev(cdev);
965 static int ur_set_offline(struct ccw_device *cdev)
970 rc = ur_set_offline_force(cdev, 0);
975 static void ur_remove(struct ccw_device *cdev)
983 if (cdev->online)
984 ur_set_offline_force(cdev, 1);
985 ur_remove_attributes(&cdev->dev);
987 spin_lock_irqsave(get_ccwdev_lock(cdev), flags);
988 urdev_put(dev_get_drvdata(&cdev->dev));
989 dev_set_drvdata(&cdev->dev, NULL);
990 spin_unlock_irqrestore(get_ccwdev_lock(cdev), flags);