Lines Matching refs:cdev
176 static int set_schib(struct ccw_device *cdev, u32 mme, int mbfc, in set_schib() argument
179 struct subchannel *sch = to_subchannel(cdev->dev.parent); in set_schib()
212 static int set_schib_wait(struct ccw_device *cdev, u32 mme, in set_schib_wait() argument
218 spin_lock_irq(cdev->ccwlock); in set_schib_wait()
219 if (!cdev->private->cmb) in set_schib_wait()
222 ret = set_schib(cdev, mme, mbfc, address); in set_schib_wait()
227 if (cdev->private->state != DEV_STATE_ONLINE) in set_schib_wait()
236 cdev->private->state = DEV_STATE_CMFCHANGE; in set_schib_wait()
237 cdev->private->cmb_wait = &set_data; in set_schib_wait()
238 spin_unlock_irq(cdev->ccwlock); in set_schib_wait()
243 spin_lock_irq(cdev->ccwlock); in set_schib_wait()
247 if (cdev->private->state == DEV_STATE_CMFCHANGE) in set_schib_wait()
248 cdev->private->state = DEV_STATE_ONLINE; in set_schib_wait()
251 cdev->private->cmb_wait = NULL; in set_schib_wait()
254 spin_unlock_irq(cdev->ccwlock); in set_schib_wait()
258 void retry_set_schib(struct ccw_device *cdev) in retry_set_schib() argument
260 struct set_schib_struct *set_data = cdev->private->cmb_wait; in retry_set_schib()
265 set_data->ret = set_schib(cdev, set_data->mme, set_data->mbfc, in retry_set_schib()
270 static int cmf_copy_block(struct ccw_device *cdev) in cmf_copy_block() argument
272 struct subchannel *sch = to_subchannel(cdev->dev.parent); in cmf_copy_block()
287 cmb_data = cdev->private->cmb; in cmf_copy_block()
299 static int cmf_cmb_copy_wait(struct ccw_device *cdev) in cmf_cmb_copy_wait() argument
304 spin_lock_irq(cdev->ccwlock); in cmf_cmb_copy_wait()
305 if (!cdev->private->cmb) in cmf_cmb_copy_wait()
308 ret = cmf_copy_block(cdev); in cmf_cmb_copy_wait()
312 if (cdev->private->state != DEV_STATE_ONLINE) in cmf_cmb_copy_wait()
318 cdev->private->state = DEV_STATE_CMFUPDATE; in cmf_cmb_copy_wait()
319 cdev->private->cmb_wait = ©_block; in cmf_cmb_copy_wait()
320 spin_unlock_irq(cdev->ccwlock); in cmf_cmb_copy_wait()
324 spin_lock_irq(cdev->ccwlock); in cmf_cmb_copy_wait()
328 if (cdev->private->state == DEV_STATE_CMFUPDATE) in cmf_cmb_copy_wait()
329 cdev->private->state = DEV_STATE_ONLINE; in cmf_cmb_copy_wait()
332 cdev->private->cmb_wait = NULL; in cmf_cmb_copy_wait()
335 spin_unlock_irq(cdev->ccwlock); in cmf_cmb_copy_wait()
339 void cmf_retry_copy_block(struct ccw_device *cdev) in cmf_retry_copy_block() argument
341 struct copy_block_struct *copy_block = cdev->private->cmb_wait; in cmf_retry_copy_block()
346 copy_block->ret = cmf_copy_block(cdev); in cmf_retry_copy_block()
350 static void cmf_generic_reset(struct ccw_device *cdev) in cmf_generic_reset() argument
354 spin_lock_irq(cdev->ccwlock); in cmf_generic_reset()
355 cmb_data = cdev->private->cmb; in cmf_generic_reset()
365 cdev->private->cmb_start_time = get_tod_clock(); in cmf_generic_reset()
366 spin_unlock_irq(cdev->ccwlock); in cmf_generic_reset()
437 static int alloc_cmb_single(struct ccw_device *cdev, in alloc_cmb_single() argument
444 spin_lock_irq(cdev->ccwlock); in alloc_cmb_single()
445 if (!list_empty(&cdev->private->cmb_list)) { in alloc_cmb_single()
469 list_add_tail(&cdev->private->cmb_list, &node->cmb_list); in alloc_cmb_single()
471 cdev->private->cmb = cmb_data; in alloc_cmb_single()
474 spin_unlock_irq(cdev->ccwlock); in alloc_cmb_single()
478 static int alloc_cmb(struct ccw_device *cdev) in alloc_cmb() argument
523 ret = alloc_cmb_single(cdev, cmb_data); in alloc_cmb()
533 static void free_cmb(struct ccw_device *cdev) in free_cmb() argument
539 spin_lock_irq(cdev->ccwlock); in free_cmb()
541 priv = cdev->private; in free_cmb()
556 spin_unlock_irq(cdev->ccwlock); in free_cmb()
560 static int set_cmb(struct ccw_device *cdev, u32 mme) in set_cmb() argument
566 spin_lock_irqsave(cdev->ccwlock, flags); in set_cmb()
567 if (!cdev->private->cmb) { in set_cmb()
568 spin_unlock_irqrestore(cdev->ccwlock, flags); in set_cmb()
571 cmb_data = cdev->private->cmb; in set_cmb()
573 spin_unlock_irqrestore(cdev->ccwlock, flags); in set_cmb()
575 return set_schib_wait(cdev, mme, 0, offset); in set_cmb()
595 static u64 read_cmb(struct ccw_device *cdev, int index) in read_cmb() argument
603 spin_lock_irqsave(cdev->ccwlock, flags); in read_cmb()
604 cmb_data = cdev->private->cmb; in read_cmb()
614 cdev->private->cmb_start_time); in read_cmb()
642 spin_unlock_irqrestore(cdev->ccwlock, flags); in read_cmb()
646 static int readall_cmb(struct ccw_device *cdev, struct cmbdata *data) in readall_cmb() argument
654 ret = cmf_cmb_copy_wait(cdev); in readall_cmb()
657 spin_lock_irqsave(cdev->ccwlock, flags); in readall_cmb()
658 cmb_data = cdev->private->cmb; in readall_cmb()
668 time = cmb_data->last_update - cdev->private->cmb_start_time; in readall_cmb()
692 spin_unlock_irqrestore(cdev->ccwlock, flags); in readall_cmb()
696 static void reset_cmb(struct ccw_device *cdev) in reset_cmb() argument
698 cmf_generic_reset(cdev); in reset_cmb()
701 static int cmf_enabled(struct ccw_device *cdev) in cmf_enabled() argument
705 spin_lock_irq(cdev->ccwlock); in cmf_enabled()
706 enabled = !!cdev->private->cmb; in cmf_enabled()
707 spin_unlock_irq(cdev->ccwlock); in cmf_enabled()
759 static int alloc_cmbe(struct ccw_device *cdev) in alloc_cmbe() argument
781 spin_lock_irq(cdev->ccwlock); in alloc_cmbe()
782 if (cdev->private->cmb) in alloc_cmbe()
785 cdev->private->cmb = cmb_data; in alloc_cmbe()
790 list_add_tail(&cdev->private->cmb_list, &cmb_area.list); in alloc_cmbe()
792 spin_unlock_irq(cdev->ccwlock); in alloc_cmbe()
797 spin_unlock_irq(cdev->ccwlock); in alloc_cmbe()
809 static void free_cmbe(struct ccw_device *cdev) in free_cmbe() argument
814 spin_lock_irq(cdev->ccwlock); in free_cmbe()
815 cmb_data = cdev->private->cmb; in free_cmbe()
816 cdev->private->cmb = NULL; in free_cmbe()
824 list_del_init(&cdev->private->cmb_list); in free_cmbe()
827 spin_unlock_irq(cdev->ccwlock); in free_cmbe()
831 static int set_cmbe(struct ccw_device *cdev, u32 mme) in set_cmbe() argument
837 spin_lock_irqsave(cdev->ccwlock, flags); in set_cmbe()
838 if (!cdev->private->cmb) { in set_cmbe()
839 spin_unlock_irqrestore(cdev->ccwlock, flags); in set_cmbe()
842 cmb_data = cdev->private->cmb; in set_cmbe()
844 spin_unlock_irqrestore(cdev->ccwlock, flags); in set_cmbe()
846 return set_schib_wait(cdev, mme, 1, mba); in set_cmbe()
849 static u64 read_cmbe(struct ccw_device *cdev, int index) in read_cmbe() argument
857 spin_lock_irqsave(cdev->ccwlock, flags); in read_cmbe()
858 cmb_data = cdev->private->cmb; in read_cmbe()
868 cdev->private->cmb_start_time); in read_cmbe()
902 spin_unlock_irqrestore(cdev->ccwlock, flags); in read_cmbe()
906 static int readall_cmbe(struct ccw_device *cdev, struct cmbdata *data) in readall_cmbe() argument
914 ret = cmf_cmb_copy_wait(cdev); in readall_cmbe()
917 spin_lock_irqsave(cdev->ccwlock, flags); in readall_cmbe()
918 cmb_data = cdev->private->cmb; in readall_cmbe()
927 time = cmb_data->last_update - cdev->private->cmb_start_time; in readall_cmbe()
956 spin_unlock_irqrestore(cdev->ccwlock, flags); in readall_cmbe()
960 static void reset_cmbe(struct ccw_device *cdev) in reset_cmbe() argument
962 cmf_generic_reset(cdev); in reset_cmbe()
986 struct ccw_device *cdev = to_ccwdev(dev); in cmb_show_avg_sample_interval() local
990 count = cmf_read(cdev, cmb_sample_count); in cmb_show_avg_sample_interval()
991 spin_lock_irq(cdev->ccwlock); in cmb_show_avg_sample_interval()
993 interval = get_tod_clock() - cdev->private->cmb_start_time; in cmb_show_avg_sample_interval()
998 spin_unlock_irq(cdev->ccwlock); in cmb_show_avg_sample_interval()
1079 struct ccw_device *cdev = to_ccwdev(dev); in cmb_enable_show() local
1081 return sysfs_emit(buf, "%d\n", cmf_enabled(cdev)); in cmb_enable_show()
1088 struct ccw_device *cdev = to_ccwdev(dev); in cmb_enable_store() local
1098 ret = disable_cmf(cdev); in cmb_enable_store()
1101 ret = enable_cmf(cdev); in cmb_enable_store()
1122 int enable_cmf(struct ccw_device *cdev) in enable_cmf() argument
1126 device_lock(&cdev->dev); in enable_cmf()
1127 if (cmf_enabled(cdev)) { in enable_cmf()
1128 cmbops->reset(cdev); in enable_cmf()
1131 get_device(&cdev->dev); in enable_cmf()
1132 ret = cmbops->alloc(cdev); in enable_cmf()
1135 cmbops->reset(cdev); in enable_cmf()
1136 ret = sysfs_create_group(&cdev->dev.kobj, cmbops->attr_group); in enable_cmf()
1138 cmbops->free(cdev); in enable_cmf()
1141 ret = cmbops->set(cdev, 2); in enable_cmf()
1143 sysfs_remove_group(&cdev->dev.kobj, cmbops->attr_group); in enable_cmf()
1144 cmbops->free(cdev); in enable_cmf()
1148 put_device(&cdev->dev); in enable_cmf()
1150 device_unlock(&cdev->dev); in enable_cmf()
1163 int __disable_cmf(struct ccw_device *cdev) in __disable_cmf() argument
1167 ret = cmbops->set(cdev, 0); in __disable_cmf()
1171 sysfs_remove_group(&cdev->dev.kobj, cmbops->attr_group); in __disable_cmf()
1172 cmbops->free(cdev); in __disable_cmf()
1173 put_device(&cdev->dev); in __disable_cmf()
1187 int disable_cmf(struct ccw_device *cdev) in disable_cmf() argument
1191 device_lock(&cdev->dev); in disable_cmf()
1192 ret = __disable_cmf(cdev); in disable_cmf()
1193 device_unlock(&cdev->dev); in disable_cmf()
1208 u64 cmf_read(struct ccw_device *cdev, int index) in cmf_read() argument
1210 return cmbops->read(cdev, index); in cmf_read()
1223 int cmf_readall(struct ccw_device *cdev, struct cmbdata *data) in cmf_readall() argument
1225 return cmbops->readall(cdev, data); in cmf_readall()
1229 int cmf_reenable(struct ccw_device *cdev) in cmf_reenable() argument
1231 cmbops->reset(cdev); in cmf_reenable()
1232 return cmbops->set(cdev, 2); in cmf_reenable()