Lines Matching refs:cdev

177 static int set_schib(struct ccw_device *cdev, u32 mme, int mbfc,  in set_schib()  argument
180 struct subchannel *sch = to_subchannel(cdev->dev.parent); in set_schib()
213 static int set_schib_wait(struct ccw_device *cdev, u32 mme, in set_schib_wait() argument
219 spin_lock_irq(cdev->ccwlock); in set_schib_wait()
220 if (!cdev->private->cmb) in set_schib_wait()
223 ret = set_schib(cdev, mme, mbfc, address); in set_schib_wait()
228 if (cdev->private->state != DEV_STATE_ONLINE) in set_schib_wait()
237 cdev->private->state = DEV_STATE_CMFCHANGE; in set_schib_wait()
238 cdev->private->cmb_wait = &set_data; in set_schib_wait()
239 spin_unlock_irq(cdev->ccwlock); in set_schib_wait()
244 spin_lock_irq(cdev->ccwlock); in set_schib_wait()
248 if (cdev->private->state == DEV_STATE_CMFCHANGE) in set_schib_wait()
249 cdev->private->state = DEV_STATE_ONLINE; in set_schib_wait()
252 cdev->private->cmb_wait = NULL; in set_schib_wait()
255 spin_unlock_irq(cdev->ccwlock); in set_schib_wait()
259 void retry_set_schib(struct ccw_device *cdev) in retry_set_schib() argument
261 struct set_schib_struct *set_data = cdev->private->cmb_wait; in retry_set_schib()
266 set_data->ret = set_schib(cdev, set_data->mme, set_data->mbfc, in retry_set_schib()
271 static int cmf_copy_block(struct ccw_device *cdev) in cmf_copy_block() argument
273 struct subchannel *sch = to_subchannel(cdev->dev.parent); in cmf_copy_block()
288 cmb_data = cdev->private->cmb; in cmf_copy_block()
300 static int cmf_cmb_copy_wait(struct ccw_device *cdev) in cmf_cmb_copy_wait() argument
305 spin_lock_irq(cdev->ccwlock); in cmf_cmb_copy_wait()
306 if (!cdev->private->cmb) in cmf_cmb_copy_wait()
309 ret = cmf_copy_block(cdev); in cmf_cmb_copy_wait()
313 if (cdev->private->state != DEV_STATE_ONLINE) in cmf_cmb_copy_wait()
319 cdev->private->state = DEV_STATE_CMFUPDATE; in cmf_cmb_copy_wait()
320 cdev->private->cmb_wait = &copy_block; in cmf_cmb_copy_wait()
321 spin_unlock_irq(cdev->ccwlock); in cmf_cmb_copy_wait()
325 spin_lock_irq(cdev->ccwlock); in cmf_cmb_copy_wait()
329 if (cdev->private->state == DEV_STATE_CMFUPDATE) in cmf_cmb_copy_wait()
330 cdev->private->state = DEV_STATE_ONLINE; in cmf_cmb_copy_wait()
333 cdev->private->cmb_wait = NULL; in cmf_cmb_copy_wait()
336 spin_unlock_irq(cdev->ccwlock); in cmf_cmb_copy_wait()
340 void cmf_retry_copy_block(struct ccw_device *cdev) in cmf_retry_copy_block() argument
342 struct copy_block_struct *copy_block = cdev->private->cmb_wait; in cmf_retry_copy_block()
347 copy_block->ret = cmf_copy_block(cdev); in cmf_retry_copy_block()
351 static void cmf_generic_reset(struct ccw_device *cdev) in cmf_generic_reset() argument
355 spin_lock_irq(cdev->ccwlock); in cmf_generic_reset()
356 cmb_data = cdev->private->cmb; in cmf_generic_reset()
366 cdev->private->cmb_start_time = get_tod_clock(); in cmf_generic_reset()
367 spin_unlock_irq(cdev->ccwlock); in cmf_generic_reset()
438 static int alloc_cmb_single(struct ccw_device *cdev, in alloc_cmb_single() argument
445 spin_lock_irq(cdev->ccwlock); in alloc_cmb_single()
446 if (!list_empty(&cdev->private->cmb_list)) { in alloc_cmb_single()
470 list_add_tail(&cdev->private->cmb_list, &node->cmb_list); in alloc_cmb_single()
472 cdev->private->cmb = cmb_data; in alloc_cmb_single()
475 spin_unlock_irq(cdev->ccwlock); in alloc_cmb_single()
479 static int alloc_cmb(struct ccw_device *cdev) in alloc_cmb() argument
524 ret = alloc_cmb_single(cdev, cmb_data); in alloc_cmb()
534 static void free_cmb(struct ccw_device *cdev) in free_cmb() argument
540 spin_lock_irq(cdev->ccwlock); in free_cmb()
542 priv = cdev->private; in free_cmb()
557 spin_unlock_irq(cdev->ccwlock); in free_cmb()
561 static int set_cmb(struct ccw_device *cdev, u32 mme) in set_cmb() argument
567 spin_lock_irqsave(cdev->ccwlock, flags); in set_cmb()
568 if (!cdev->private->cmb) { in set_cmb()
569 spin_unlock_irqrestore(cdev->ccwlock, flags); in set_cmb()
572 cmb_data = cdev->private->cmb; in set_cmb()
574 spin_unlock_irqrestore(cdev->ccwlock, flags); in set_cmb()
576 return set_schib_wait(cdev, mme, 0, offset); in set_cmb()
596 static u64 read_cmb(struct ccw_device *cdev, int index) in read_cmb() argument
604 spin_lock_irqsave(cdev->ccwlock, flags); in read_cmb()
605 cmb_data = cdev->private->cmb; in read_cmb()
615 cdev->private->cmb_start_time); in read_cmb()
643 spin_unlock_irqrestore(cdev->ccwlock, flags); in read_cmb()
647 static int readall_cmb(struct ccw_device *cdev, struct cmbdata *data) in readall_cmb() argument
655 ret = cmf_cmb_copy_wait(cdev); in readall_cmb()
658 spin_lock_irqsave(cdev->ccwlock, flags); in readall_cmb()
659 cmb_data = cdev->private->cmb; in readall_cmb()
669 time = cmb_data->last_update - cdev->private->cmb_start_time; in readall_cmb()
693 spin_unlock_irqrestore(cdev->ccwlock, flags); in readall_cmb()
697 static void reset_cmb(struct ccw_device *cdev) in reset_cmb() argument
699 cmf_generic_reset(cdev); in reset_cmb()
702 static int cmf_enabled(struct ccw_device *cdev) in cmf_enabled() argument
706 spin_lock_irq(cdev->ccwlock); in cmf_enabled()
707 enabled = !!cdev->private->cmb; in cmf_enabled()
708 spin_unlock_irq(cdev->ccwlock); in cmf_enabled()
760 static int alloc_cmbe(struct ccw_device *cdev) in alloc_cmbe() argument
782 spin_lock_irq(cdev->ccwlock); in alloc_cmbe()
783 if (cdev->private->cmb) in alloc_cmbe()
786 cdev->private->cmb = cmb_data; in alloc_cmbe()
791 list_add_tail(&cdev->private->cmb_list, &cmb_area.list); in alloc_cmbe()
793 spin_unlock_irq(cdev->ccwlock); in alloc_cmbe()
798 spin_unlock_irq(cdev->ccwlock); in alloc_cmbe()
810 static void free_cmbe(struct ccw_device *cdev) in free_cmbe() argument
815 spin_lock_irq(cdev->ccwlock); in free_cmbe()
816 cmb_data = cdev->private->cmb; in free_cmbe()
817 cdev->private->cmb = NULL; in free_cmbe()
825 list_del_init(&cdev->private->cmb_list); in free_cmbe()
828 spin_unlock_irq(cdev->ccwlock); in free_cmbe()
832 static int set_cmbe(struct ccw_device *cdev, u32 mme) in set_cmbe() argument
838 spin_lock_irqsave(cdev->ccwlock, flags); in set_cmbe()
839 if (!cdev->private->cmb) { in set_cmbe()
840 spin_unlock_irqrestore(cdev->ccwlock, flags); in set_cmbe()
843 cmb_data = cdev->private->cmb; in set_cmbe()
845 spin_unlock_irqrestore(cdev->ccwlock, flags); in set_cmbe()
847 return set_schib_wait(cdev, mme, 1, mba); in set_cmbe()
850 static u64 read_cmbe(struct ccw_device *cdev, int index) in read_cmbe() argument
858 spin_lock_irqsave(cdev->ccwlock, flags); in read_cmbe()
859 cmb_data = cdev->private->cmb; in read_cmbe()
869 cdev->private->cmb_start_time); in read_cmbe()
903 spin_unlock_irqrestore(cdev->ccwlock, flags); in read_cmbe()
907 static int readall_cmbe(struct ccw_device *cdev, struct cmbdata *data) in readall_cmbe() argument
915 ret = cmf_cmb_copy_wait(cdev); in readall_cmbe()
918 spin_lock_irqsave(cdev->ccwlock, flags); in readall_cmbe()
919 cmb_data = cdev->private->cmb; in readall_cmbe()
928 time = cmb_data->last_update - cdev->private->cmb_start_time; in readall_cmbe()
957 spin_unlock_irqrestore(cdev->ccwlock, flags); in readall_cmbe()
961 static void reset_cmbe(struct ccw_device *cdev) in reset_cmbe() argument
963 cmf_generic_reset(cdev); in reset_cmbe()
988 struct ccw_device *cdev = to_ccwdev(dev); in cmb_show_avg_sample_interval() local
992 count = cmf_read(cdev, cmb_sample_count); in cmb_show_avg_sample_interval()
993 spin_lock_irq(cdev->ccwlock); in cmb_show_avg_sample_interval()
995 interval = get_tod_clock() - cdev->private->cmb_start_time; in cmb_show_avg_sample_interval()
1000 spin_unlock_irq(cdev->ccwlock); in cmb_show_avg_sample_interval()
1081 struct ccw_device *cdev = to_ccwdev(dev); in cmb_enable_show() local
1083 return sprintf(buf, "%d\n", cmf_enabled(cdev)); in cmb_enable_show()
1090 struct ccw_device *cdev = to_ccwdev(dev); in cmb_enable_store() local
1100 ret = disable_cmf(cdev); in cmb_enable_store()
1103 ret = enable_cmf(cdev); in cmb_enable_store()
1124 int enable_cmf(struct ccw_device *cdev) in enable_cmf() argument
1128 device_lock(&cdev->dev); in enable_cmf()
1129 if (cmf_enabled(cdev)) { in enable_cmf()
1130 cmbops->reset(cdev); in enable_cmf()
1133 get_device(&cdev->dev); in enable_cmf()
1134 ret = cmbops->alloc(cdev); in enable_cmf()
1137 cmbops->reset(cdev); in enable_cmf()
1138 ret = sysfs_create_group(&cdev->dev.kobj, cmbops->attr_group); in enable_cmf()
1140 cmbops->free(cdev); in enable_cmf()
1143 ret = cmbops->set(cdev, 2); in enable_cmf()
1145 sysfs_remove_group(&cdev->dev.kobj, cmbops->attr_group); in enable_cmf()
1146 cmbops->free(cdev); in enable_cmf()
1150 put_device(&cdev->dev); in enable_cmf()
1152 device_unlock(&cdev->dev); in enable_cmf()
1165 int __disable_cmf(struct ccw_device *cdev) in __disable_cmf() argument
1169 ret = cmbops->set(cdev, 0); in __disable_cmf()
1173 sysfs_remove_group(&cdev->dev.kobj, cmbops->attr_group); in __disable_cmf()
1174 cmbops->free(cdev); in __disable_cmf()
1175 put_device(&cdev->dev); in __disable_cmf()
1189 int disable_cmf(struct ccw_device *cdev) in disable_cmf() argument
1193 device_lock(&cdev->dev); in disable_cmf()
1194 ret = __disable_cmf(cdev); in disable_cmf()
1195 device_unlock(&cdev->dev); in disable_cmf()
1210 u64 cmf_read(struct ccw_device *cdev, int index) in cmf_read() argument
1212 return cmbops->read(cdev, index); in cmf_read()
1225 int cmf_readall(struct ccw_device *cdev, struct cmbdata *data) in cmf_readall() argument
1227 return cmbops->readall(cdev, data); in cmf_readall()
1231 int cmf_reenable(struct ccw_device *cdev) in cmf_reenable() argument
1233 cmbops->reset(cdev); in cmf_reenable()
1234 return cmbops->set(cdev, 2); in cmf_reenable()