Lines Matching defs:cdev
175 static int set_schib(struct ccw_device *cdev, u32 mme, int mbfc,
178 struct subchannel *sch = to_subchannel(cdev->dev.parent);
211 static int set_schib_wait(struct ccw_device *cdev, u32 mme,
217 spin_lock_irq(cdev->ccwlock);
218 if (!cdev->private->cmb)
221 ret = set_schib(cdev, mme, mbfc, address);
226 if (cdev->private->state != DEV_STATE_ONLINE)
235 cdev->private->state = DEV_STATE_CMFCHANGE;
236 cdev->private->cmb_wait = &set_data;
237 spin_unlock_irq(cdev->ccwlock);
242 spin_lock_irq(cdev->ccwlock);
246 if (cdev->private->state == DEV_STATE_CMFCHANGE)
247 cdev->private->state = DEV_STATE_ONLINE;
250 cdev->private->cmb_wait = NULL;
253 spin_unlock_irq(cdev->ccwlock);
257 void retry_set_schib(struct ccw_device *cdev)
259 struct set_schib_struct *set_data = cdev->private->cmb_wait;
264 set_data->ret = set_schib(cdev, set_data->mme, set_data->mbfc,
269 static int cmf_copy_block(struct ccw_device *cdev)
271 struct subchannel *sch = to_subchannel(cdev->dev.parent);
286 cmb_data = cdev->private->cmb;
298 static int cmf_cmb_copy_wait(struct ccw_device *cdev)
303 spin_lock_irq(cdev->ccwlock);
304 if (!cdev->private->cmb)
307 ret = cmf_copy_block(cdev);
311 if (cdev->private->state != DEV_STATE_ONLINE)
317 cdev->private->state = DEV_STATE_CMFUPDATE;
318 cdev->private->cmb_wait = ©_block;
319 spin_unlock_irq(cdev->ccwlock);
323 spin_lock_irq(cdev->ccwlock);
327 if (cdev->private->state == DEV_STATE_CMFUPDATE)
328 cdev->private->state = DEV_STATE_ONLINE;
331 cdev->private->cmb_wait = NULL;
334 spin_unlock_irq(cdev->ccwlock);
338 void cmf_retry_copy_block(struct ccw_device *cdev)
340 struct copy_block_struct *copy_block = cdev->private->cmb_wait;
345 copy_block->ret = cmf_copy_block(cdev);
349 static void cmf_generic_reset(struct ccw_device *cdev)
353 spin_lock_irq(cdev->ccwlock);
354 cmb_data = cdev->private->cmb;
364 cdev->private->cmb_start_time = get_tod_clock();
365 spin_unlock_irq(cdev->ccwlock);
436 static int alloc_cmb_single(struct ccw_device *cdev,
443 spin_lock_irq(cdev->ccwlock);
444 if (!list_empty(&cdev->private->cmb_list)) {
468 list_add_tail(&cdev->private->cmb_list, &node->cmb_list);
470 cdev->private->cmb = cmb_data;
473 spin_unlock_irq(cdev->ccwlock);
477 static int alloc_cmb(struct ccw_device *cdev)
523 ret = alloc_cmb_single(cdev, cmb_data);
533 static void free_cmb(struct ccw_device *cdev)
539 spin_lock_irq(cdev->ccwlock);
541 priv = cdev->private;
556 spin_unlock_irq(cdev->ccwlock);
560 static int set_cmb(struct ccw_device *cdev, u32 mme)
566 spin_lock_irqsave(cdev->ccwlock, flags);
567 if (!cdev->private->cmb) {
568 spin_unlock_irqrestore(cdev->ccwlock, flags);
571 cmb_data = cdev->private->cmb;
573 spin_unlock_irqrestore(cdev->ccwlock, flags);
575 return set_schib_wait(cdev, mme, 0, offset);
595 static u64 read_cmb(struct ccw_device *cdev, int index)
603 spin_lock_irqsave(cdev->ccwlock, flags);
604 cmb_data = cdev->private->cmb;
614 cdev->private->cmb_start_time);
642 spin_unlock_irqrestore(cdev->ccwlock, flags);
646 static int readall_cmb(struct ccw_device *cdev, struct cmbdata *data)
654 ret = cmf_cmb_copy_wait(cdev);
657 spin_lock_irqsave(cdev->ccwlock, flags);
658 cmb_data = cdev->private->cmb;
668 time = cmb_data->last_update - cdev->private->cmb_start_time;
692 spin_unlock_irqrestore(cdev->ccwlock, flags);
696 static void reset_cmb(struct ccw_device *cdev)
698 cmf_generic_reset(cdev);
701 static int cmf_enabled(struct ccw_device *cdev)
705 spin_lock_irq(cdev->ccwlock);
706 enabled = !!cdev->private->cmb;
707 spin_unlock_irq(cdev->ccwlock);
759 static int alloc_cmbe(struct ccw_device *cdev)
781 spin_lock_irq(cdev->ccwlock);
782 if (cdev->private->cmb)
785 cdev->private->cmb = cmb_data;
790 list_add_tail(&cdev->private->cmb_list, &cmb_area.list);
792 spin_unlock_irq(cdev->ccwlock);
797 spin_unlock_irq(cdev->ccwlock);
809 static void free_cmbe(struct ccw_device *cdev)
814 spin_lock_irq(cdev->ccwlock);
815 cmb_data = cdev->private->cmb;
816 cdev->private->cmb = NULL;
824 list_del_init(&cdev->private->cmb_list);
827 spin_unlock_irq(cdev->ccwlock);
831 static int set_cmbe(struct ccw_device *cdev, u32 mme)
837 spin_lock_irqsave(cdev->ccwlock, flags);
838 if (!cdev->private->cmb) {
839 spin_unlock_irqrestore(cdev->ccwlock, flags);
842 cmb_data = cdev->private->cmb;
844 spin_unlock_irqrestore(cdev->ccwlock, flags);
846 return set_schib_wait(cdev, mme, 1, mba);
849 static u64 read_cmbe(struct ccw_device *cdev, int index)
857 spin_lock_irqsave(cdev->ccwlock, flags);
858 cmb_data = cdev->private->cmb;
868 cdev->private->cmb_start_time);
902 spin_unlock_irqrestore(cdev->ccwlock, flags);
906 static int readall_cmbe(struct ccw_device *cdev, struct cmbdata *data)
914 ret = cmf_cmb_copy_wait(cdev);
917 spin_lock_irqsave(cdev->ccwlock, flags);
918 cmb_data = cdev->private->cmb;
927 time = cmb_data->last_update - cdev->private->cmb_start_time;
956 spin_unlock_irqrestore(cdev->ccwlock, flags);
960 static void reset_cmbe(struct ccw_device *cdev)
962 cmf_generic_reset(cdev);
987 struct ccw_device *cdev = to_ccwdev(dev);
991 count = cmf_read(cdev, cmb_sample_count);
992 spin_lock_irq(cdev->ccwlock);
994 interval = get_tod_clock() - cdev->private->cmb_start_time;
999 spin_unlock_irq(cdev->ccwlock);
1080 struct ccw_device *cdev = to_ccwdev(dev);
1082 return sprintf(buf, "%d\n", cmf_enabled(cdev));
1089 struct ccw_device *cdev = to_ccwdev(dev);
1099 ret = disable_cmf(cdev);
1102 ret = enable_cmf(cdev);
1112 int ccw_set_cmf(struct ccw_device *cdev, int enable)
1114 return cmbops->set(cdev, enable ? 2 : 0);
1119 * @cdev: The ccw device to be enabled
1121 * Enable channel measurements for @cdev. If this is called on a device
1128 int enable_cmf(struct ccw_device *cdev)
1132 device_lock(&cdev->dev);
1133 if (cmf_enabled(cdev)) {
1134 cmbops->reset(cdev);
1137 get_device(&cdev->dev);
1138 ret = cmbops->alloc(cdev);
1141 cmbops->reset(cdev);
1142 ret = sysfs_create_group(&cdev->dev.kobj, cmbops->attr_group);
1144 cmbops->free(cdev);
1147 ret = cmbops->set(cdev, 2);
1149 sysfs_remove_group(&cdev->dev.kobj, cmbops->attr_group);
1150 cmbops->free(cdev);
1154 put_device(&cdev->dev);
1156 device_unlock(&cdev->dev);
1162 * @cdev: The ccw device to be disabled
1169 int __disable_cmf(struct ccw_device *cdev)
1173 ret = cmbops->set(cdev, 0);
1177 sysfs_remove_group(&cdev->dev.kobj, cmbops->attr_group);
1178 cmbops->free(cdev);
1179 put_device(&cdev->dev);
1186 * @cdev: The ccw device to be disabled
1193 int disable_cmf(struct ccw_device *cdev)
1197 device_lock(&cdev->dev);
1198 ret = __disable_cmf(cdev);
1199 device_unlock(&cdev->dev);
1206 * @cdev: the channel to be read
1214 u64 cmf_read(struct ccw_device *cdev, int index)
1216 return cmbops->read(cdev, index);
1221 * @cdev: the channel to be read
1229 int cmf_readall(struct ccw_device *cdev, struct cmbdata *data)
1231 return cmbops->readall(cdev, data);
1235 int cmf_reenable(struct ccw_device *cdev)
1237 cmbops->reset(cdev);
1238 return cmbops->set(cdev, 2);