Lines Matching defs:cdev
176 static int set_schib(struct ccw_device *cdev, u32 mme, int mbfc,
179 struct subchannel *sch = to_subchannel(cdev->dev.parent);
212 static int set_schib_wait(struct ccw_device *cdev, u32 mme,
218 spin_lock_irq(cdev->ccwlock);
219 if (!cdev->private->cmb)
222 ret = set_schib(cdev, mme, mbfc, address);
227 if (cdev->private->state != DEV_STATE_ONLINE)
236 cdev->private->state = DEV_STATE_CMFCHANGE;
237 cdev->private->cmb_wait = &set_data;
238 spin_unlock_irq(cdev->ccwlock);
243 spin_lock_irq(cdev->ccwlock);
247 if (cdev->private->state == DEV_STATE_CMFCHANGE)
248 cdev->private->state = DEV_STATE_ONLINE;
251 cdev->private->cmb_wait = NULL;
254 spin_unlock_irq(cdev->ccwlock);
258 void retry_set_schib(struct ccw_device *cdev)
260 struct set_schib_struct *set_data = cdev->private->cmb_wait;
265 set_data->ret = set_schib(cdev, set_data->mme, set_data->mbfc,
270 static int cmf_copy_block(struct ccw_device *cdev)
272 struct subchannel *sch = to_subchannel(cdev->dev.parent);
287 cmb_data = cdev->private->cmb;
299 static int cmf_cmb_copy_wait(struct ccw_device *cdev)
304 spin_lock_irq(cdev->ccwlock);
305 if (!cdev->private->cmb)
308 ret = cmf_copy_block(cdev);
312 if (cdev->private->state != DEV_STATE_ONLINE)
318 cdev->private->state = DEV_STATE_CMFUPDATE;
319 cdev->private->cmb_wait = ©_block;
320 spin_unlock_irq(cdev->ccwlock);
324 spin_lock_irq(cdev->ccwlock);
328 if (cdev->private->state == DEV_STATE_CMFUPDATE)
329 cdev->private->state = DEV_STATE_ONLINE;
332 cdev->private->cmb_wait = NULL;
335 spin_unlock_irq(cdev->ccwlock);
339 void cmf_retry_copy_block(struct ccw_device *cdev)
341 struct copy_block_struct *copy_block = cdev->private->cmb_wait;
346 copy_block->ret = cmf_copy_block(cdev);
350 static void cmf_generic_reset(struct ccw_device *cdev)
354 spin_lock_irq(cdev->ccwlock);
355 cmb_data = cdev->private->cmb;
365 cdev->private->cmb_start_time = get_tod_clock();
366 spin_unlock_irq(cdev->ccwlock);
437 static int alloc_cmb_single(struct ccw_device *cdev,
444 spin_lock_irq(cdev->ccwlock);
445 if (!list_empty(&cdev->private->cmb_list)) {
469 list_add_tail(&cdev->private->cmb_list, &node->cmb_list);
471 cdev->private->cmb = cmb_data;
474 spin_unlock_irq(cdev->ccwlock);
478 static int alloc_cmb(struct ccw_device *cdev)
524 ret = alloc_cmb_single(cdev, cmb_data);
534 static void free_cmb(struct ccw_device *cdev)
540 spin_lock_irq(cdev->ccwlock);
542 priv = cdev->private;
557 spin_unlock_irq(cdev->ccwlock);
561 static int set_cmb(struct ccw_device *cdev, u32 mme)
567 spin_lock_irqsave(cdev->ccwlock, flags);
568 if (!cdev->private->cmb) {
569 spin_unlock_irqrestore(cdev->ccwlock, flags);
572 cmb_data = cdev->private->cmb;
574 spin_unlock_irqrestore(cdev->ccwlock, flags);
576 return set_schib_wait(cdev, mme, 0, offset);
596 static u64 read_cmb(struct ccw_device *cdev, int index)
604 spin_lock_irqsave(cdev->ccwlock, flags);
605 cmb_data = cdev->private->cmb;
615 cdev->private->cmb_start_time);
643 spin_unlock_irqrestore(cdev->ccwlock, flags);
647 static int readall_cmb(struct ccw_device *cdev, struct cmbdata *data)
655 ret = cmf_cmb_copy_wait(cdev);
658 spin_lock_irqsave(cdev->ccwlock, flags);
659 cmb_data = cdev->private->cmb;
669 time = cmb_data->last_update - cdev->private->cmb_start_time;
693 spin_unlock_irqrestore(cdev->ccwlock, flags);
697 static void reset_cmb(struct ccw_device *cdev)
699 cmf_generic_reset(cdev);
702 static int cmf_enabled(struct ccw_device *cdev)
706 spin_lock_irq(cdev->ccwlock);
707 enabled = !!cdev->private->cmb;
708 spin_unlock_irq(cdev->ccwlock);
760 static int alloc_cmbe(struct ccw_device *cdev)
782 spin_lock_irq(cdev->ccwlock);
783 if (cdev->private->cmb)
786 cdev->private->cmb = cmb_data;
791 list_add_tail(&cdev->private->cmb_list, &cmb_area.list);
793 spin_unlock_irq(cdev->ccwlock);
798 spin_unlock_irq(cdev->ccwlock);
810 static void free_cmbe(struct ccw_device *cdev)
815 spin_lock_irq(cdev->ccwlock);
816 cmb_data = cdev->private->cmb;
817 cdev->private->cmb = NULL;
825 list_del_init(&cdev->private->cmb_list);
828 spin_unlock_irq(cdev->ccwlock);
832 static int set_cmbe(struct ccw_device *cdev, u32 mme)
838 spin_lock_irqsave(cdev->ccwlock, flags);
839 if (!cdev->private->cmb) {
840 spin_unlock_irqrestore(cdev->ccwlock, flags);
843 cmb_data = cdev->private->cmb;
845 spin_unlock_irqrestore(cdev->ccwlock, flags);
847 return set_schib_wait(cdev, mme, 1, mba);
850 static u64 read_cmbe(struct ccw_device *cdev, int index)
858 spin_lock_irqsave(cdev->ccwlock, flags);
859 cmb_data = cdev->private->cmb;
869 cdev->private->cmb_start_time);
903 spin_unlock_irqrestore(cdev->ccwlock, flags);
907 static int readall_cmbe(struct ccw_device *cdev, struct cmbdata *data)
915 ret = cmf_cmb_copy_wait(cdev);
918 spin_lock_irqsave(cdev->ccwlock, flags);
919 cmb_data = cdev->private->cmb;
928 time = cmb_data->last_update - cdev->private->cmb_start_time;
957 spin_unlock_irqrestore(cdev->ccwlock, flags);
961 static void reset_cmbe(struct ccw_device *cdev)
963 cmf_generic_reset(cdev);
988 struct ccw_device *cdev = to_ccwdev(dev);
992 count = cmf_read(cdev, cmb_sample_count);
993 spin_lock_irq(cdev->ccwlock);
995 interval = get_tod_clock() - cdev->private->cmb_start_time;
1000 spin_unlock_irq(cdev->ccwlock);
1081 struct ccw_device *cdev = to_ccwdev(dev);
1083 return sprintf(buf, "%d\n", cmf_enabled(cdev));
1090 struct ccw_device *cdev = to_ccwdev(dev);
1100 ret = disable_cmf(cdev);
1103 ret = enable_cmf(cdev);
1115 * @cdev: The ccw device to be enabled
1117 * Enable channel measurements for @cdev. If this is called on a device
1124 int enable_cmf(struct ccw_device *cdev)
1128 device_lock(&cdev->dev);
1129 if (cmf_enabled(cdev)) {
1130 cmbops->reset(cdev);
1133 get_device(&cdev->dev);
1134 ret = cmbops->alloc(cdev);
1137 cmbops->reset(cdev);
1138 ret = sysfs_create_group(&cdev->dev.kobj, cmbops->attr_group);
1140 cmbops->free(cdev);
1143 ret = cmbops->set(cdev, 2);
1145 sysfs_remove_group(&cdev->dev.kobj, cmbops->attr_group);
1146 cmbops->free(cdev);
1150 put_device(&cdev->dev);
1152 device_unlock(&cdev->dev);
1158 * @cdev: The ccw device to be disabled
1165 int __disable_cmf(struct ccw_device *cdev)
1169 ret = cmbops->set(cdev, 0);
1173 sysfs_remove_group(&cdev->dev.kobj, cmbops->attr_group);
1174 cmbops->free(cdev);
1175 put_device(&cdev->dev);
1182 * @cdev: The ccw device to be disabled
1189 int disable_cmf(struct ccw_device *cdev)
1193 device_lock(&cdev->dev);
1194 ret = __disable_cmf(cdev);
1195 device_unlock(&cdev->dev);
1202 * @cdev: the channel to be read
1210 u64 cmf_read(struct ccw_device *cdev, int index)
1212 return cmbops->read(cdev, index);
1217 * @cdev: the channel to be read
1225 int cmf_readall(struct ccw_device *cdev, struct cmbdata *data)
1227 return cmbops->readall(cdev, data);
1231 int cmf_reenable(struct ccw_device *cdev)
1233 cmbops->reset(cdev);
1234 return cmbops->set(cdev, 2);