Lines Matching refs:cdev
63 struct ccw_device *cdev = to_ccwdev(dev); in ccw_bus_match() local
70 found = ccw_device_id_match(ids, &cdev->id); in ccw_bus_match()
74 cdev->id.driver_info = found->driver_info; in ccw_bus_match()
106 struct ccw_device *cdev = to_ccwdev(dev); in ccw_uevent() local
107 struct ccw_device_id *id = &(cdev->id); in ccw_uevent()
200 struct ccw_device *cdev = to_ccwdev(dev); in devtype_show() local
201 struct ccw_device_id *id = &(cdev->id); in devtype_show()
213 struct ccw_device *cdev = to_ccwdev(dev); in cutype_show() local
214 struct ccw_device_id *id = &(cdev->id); in cutype_show()
223 struct ccw_device *cdev = to_ccwdev(dev); in modalias_show() local
224 struct ccw_device_id *id = &(cdev->id); in modalias_show()
235 struct ccw_device *cdev = to_ccwdev(dev); in online_show() local
237 return sprintf(buf, cdev->online ? "1\n" : "0\n"); in online_show()
240 int ccw_device_is_orphan(struct ccw_device *cdev) in ccw_device_is_orphan() argument
242 return sch_is_pseudo_sch(to_subchannel(cdev->dev.parent)); in ccw_device_is_orphan()
245 static void ccw_device_unregister(struct ccw_device *cdev) in ccw_device_unregister() argument
247 if (device_is_registered(&cdev->dev)) { in ccw_device_unregister()
249 device_del(&cdev->dev); in ccw_device_unregister()
251 if (cdev->private->flags.initialized) { in ccw_device_unregister()
252 cdev->private->flags.initialized = 0; in ccw_device_unregister()
254 put_device(&cdev->dev); in ccw_device_unregister()
271 int ccw_device_set_offline(struct ccw_device *cdev) in ccw_device_set_offline() argument
276 if (!cdev) in ccw_device_set_offline()
278 if (!cdev->online || !cdev->drv) in ccw_device_set_offline()
281 if (cdev->drv->set_offline) { in ccw_device_set_offline()
282 ret = cdev->drv->set_offline(cdev); in ccw_device_set_offline()
286 spin_lock_irq(cdev->ccwlock); in ccw_device_set_offline()
287 sch = to_subchannel(cdev->dev.parent); in ccw_device_set_offline()
288 cdev->online = 0; in ccw_device_set_offline()
290 while (!dev_fsm_final_state(cdev) && in ccw_device_set_offline()
291 cdev->private->state != DEV_STATE_DISCONNECTED) { in ccw_device_set_offline()
292 spin_unlock_irq(cdev->ccwlock); in ccw_device_set_offline()
293 wait_event(cdev->private->wait_q, (dev_fsm_final_state(cdev) || in ccw_device_set_offline()
294 cdev->private->state == DEV_STATE_DISCONNECTED)); in ccw_device_set_offline()
295 spin_lock_irq(cdev->ccwlock); in ccw_device_set_offline()
298 ret = ccw_device_offline(cdev); in ccw_device_set_offline()
302 "0.%x.%04x\n", ret, cdev->private->dev_id.ssid, in ccw_device_set_offline()
303 cdev->private->dev_id.devno); in ccw_device_set_offline()
306 state = cdev->private->state; in ccw_device_set_offline()
307 spin_unlock_irq(cdev->ccwlock); in ccw_device_set_offline()
309 spin_lock_irq(cdev->ccwlock); in ccw_device_set_offline()
310 cdev->private->state = state; in ccw_device_set_offline()
312 spin_unlock_irq(cdev->ccwlock); in ccw_device_set_offline()
313 wait_event(cdev->private->wait_q, (dev_fsm_final_state(cdev) || in ccw_device_set_offline()
314 cdev->private->state == DEV_STATE_DISCONNECTED)); in ccw_device_set_offline()
316 if (cdev->private->state == DEV_STATE_BOXED) { in ccw_device_set_offline()
318 dev_name(&cdev->dev)); in ccw_device_set_offline()
319 } else if (cdev->private->state == DEV_STATE_NOT_OPER) { in ccw_device_set_offline()
321 dev_name(&cdev->dev)); in ccw_device_set_offline()
324 put_device(&cdev->dev); in ccw_device_set_offline()
328 cdev->private->state = DEV_STATE_OFFLINE; in ccw_device_set_offline()
329 dev_fsm_event(cdev, DEV_EVENT_NOTOPER); in ccw_device_set_offline()
330 spin_unlock_irq(cdev->ccwlock); in ccw_device_set_offline()
332 put_device(&cdev->dev); in ccw_device_set_offline()
348 int ccw_device_set_online(struct ccw_device *cdev) in ccw_device_set_online() argument
353 if (!cdev) in ccw_device_set_online()
355 if (cdev->online || !cdev->drv) in ccw_device_set_online()
358 if (!get_device(&cdev->dev)) in ccw_device_set_online()
361 spin_lock_irq(cdev->ccwlock); in ccw_device_set_online()
362 ret = ccw_device_online(cdev); in ccw_device_set_online()
363 spin_unlock_irq(cdev->ccwlock); in ccw_device_set_online()
365 wait_event(cdev->private->wait_q, dev_fsm_final_state(cdev)); in ccw_device_set_online()
369 ret, cdev->private->dev_id.ssid, in ccw_device_set_online()
370 cdev->private->dev_id.devno); in ccw_device_set_online()
372 put_device(&cdev->dev); in ccw_device_set_online()
375 spin_lock_irq(cdev->ccwlock); in ccw_device_set_online()
377 if ((cdev->private->state != DEV_STATE_ONLINE) && in ccw_device_set_online()
378 (cdev->private->state != DEV_STATE_W4SENSE)) { in ccw_device_set_online()
379 spin_unlock_irq(cdev->ccwlock); in ccw_device_set_online()
381 if (cdev->private->state == DEV_STATE_BOXED) { in ccw_device_set_online()
383 dev_name(&cdev->dev)); in ccw_device_set_online()
384 } else if (cdev->private->state == DEV_STATE_NOT_OPER) { in ccw_device_set_online()
386 dev_name(&cdev->dev)); in ccw_device_set_online()
389 put_device(&cdev->dev); in ccw_device_set_online()
392 spin_unlock_irq(cdev->ccwlock); in ccw_device_set_online()
393 if (cdev->drv->set_online) in ccw_device_set_online()
394 ret = cdev->drv->set_online(cdev); in ccw_device_set_online()
398 spin_lock_irq(cdev->ccwlock); in ccw_device_set_online()
399 cdev->online = 1; in ccw_device_set_online()
400 spin_unlock_irq(cdev->ccwlock); in ccw_device_set_online()
404 spin_lock_irq(cdev->ccwlock); in ccw_device_set_online()
406 while (!dev_fsm_final_state(cdev) && in ccw_device_set_online()
407 cdev->private->state != DEV_STATE_DISCONNECTED) { in ccw_device_set_online()
408 spin_unlock_irq(cdev->ccwlock); in ccw_device_set_online()
409 wait_event(cdev->private->wait_q, (dev_fsm_final_state(cdev) || in ccw_device_set_online()
410 cdev->private->state == DEV_STATE_DISCONNECTED)); in ccw_device_set_online()
411 spin_lock_irq(cdev->ccwlock); in ccw_device_set_online()
413 ret2 = ccw_device_offline(cdev); in ccw_device_set_online()
416 spin_unlock_irq(cdev->ccwlock); in ccw_device_set_online()
417 wait_event(cdev->private->wait_q, (dev_fsm_final_state(cdev) || in ccw_device_set_online()
418 cdev->private->state == DEV_STATE_DISCONNECTED)); in ccw_device_set_online()
420 put_device(&cdev->dev); in ccw_device_set_online()
426 ret2, cdev->private->dev_id.ssid, in ccw_device_set_online()
427 cdev->private->dev_id.devno); in ccw_device_set_online()
428 cdev->private->state = DEV_STATE_OFFLINE; in ccw_device_set_online()
429 spin_unlock_irq(cdev->ccwlock); in ccw_device_set_online()
431 put_device(&cdev->dev); in ccw_device_set_online()
435 static int online_store_handle_offline(struct ccw_device *cdev) in online_store_handle_offline() argument
437 if (cdev->private->state == DEV_STATE_DISCONNECTED) { in online_store_handle_offline()
438 spin_lock_irq(cdev->ccwlock); in online_store_handle_offline()
439 ccw_device_sched_todo(cdev, CDEV_TODO_UNREG_EVAL); in online_store_handle_offline()
440 spin_unlock_irq(cdev->ccwlock); in online_store_handle_offline()
443 if (cdev->drv && cdev->drv->set_offline) in online_store_handle_offline()
444 return ccw_device_set_offline(cdev); in online_store_handle_offline()
448 static int online_store_recog_and_online(struct ccw_device *cdev) in online_store_recog_and_online() argument
451 if (cdev->private->state == DEV_STATE_BOXED) { in online_store_recog_and_online()
452 spin_lock_irq(cdev->ccwlock); in online_store_recog_and_online()
453 ccw_device_recognition(cdev); in online_store_recog_and_online()
454 spin_unlock_irq(cdev->ccwlock); in online_store_recog_and_online()
455 wait_event(cdev->private->wait_q, in online_store_recog_and_online()
456 cdev->private->flags.recog_done); in online_store_recog_and_online()
457 if (cdev->private->state != DEV_STATE_OFFLINE) in online_store_recog_and_online()
461 if (cdev->drv && cdev->drv->set_online) in online_store_recog_and_online()
462 return ccw_device_set_online(cdev); in online_store_recog_and_online()
466 static int online_store_handle_online(struct ccw_device *cdev, int force) in online_store_handle_online() argument
470 ret = online_store_recog_and_online(cdev); in online_store_handle_online()
473 if (force && cdev->private->state == DEV_STATE_BOXED) { in online_store_handle_online()
474 ret = ccw_device_stlck(cdev); in online_store_handle_online()
477 if (cdev->id.cu_type == 0) in online_store_handle_online()
478 cdev->private->state = DEV_STATE_NOT_OPER; in online_store_handle_online()
479 ret = online_store_recog_and_online(cdev); in online_store_handle_online()
489 struct ccw_device *cdev = to_ccwdev(dev); in online_store() local
494 if (atomic_cmpxchg(&cdev->private->onoff, 0, 1) != 0) in online_store()
497 if (!dev_fsm_final_state(cdev) && in online_store()
498 cdev->private->state != DEV_STATE_DISCONNECTED) { in online_store()
503 if (work_pending(&cdev->private->todo_work)) { in online_store()
521 ret = online_store_handle_offline(cdev); in online_store()
524 ret = online_store_handle_online(cdev, force); in online_store()
532 atomic_set(&cdev->private->onoff, 0); in online_store()
539 struct ccw_device *cdev = to_ccwdev(dev); in available_show() local
542 if (ccw_device_is_orphan(cdev)) in available_show()
544 switch (cdev->private->state) { in available_show()
626 struct ccw_device *cdev = to_ccwdev(dev); in match_dev_id() local
629 return ccw_dev_id_is_equal(&cdev->private->dev_id, dev_id); in match_dev_id()
652 static void ccw_device_do_unbind_bind(struct ccw_device *cdev) in ccw_device_do_unbind_bind() argument
656 if (device_is_registered(&cdev->dev)) { in ccw_device_do_unbind_bind()
657 device_release_driver(&cdev->dev); in ccw_device_do_unbind_bind()
658 ret = device_attach(&cdev->dev); in ccw_device_do_unbind_bind()
666 struct ccw_device *cdev; in ccw_device_release() local
668 cdev = to_ccwdev(dev); in ccw_device_release()
669 cio_gp_dma_free(cdev->private->dma_pool, cdev->private->dma_area, in ccw_device_release()
670 sizeof(*cdev->private->dma_area)); in ccw_device_release()
671 cio_gp_dma_destroy(cdev->private->dma_pool, &cdev->dev); in ccw_device_release()
673 put_device(cdev->dev.parent); in ccw_device_release()
674 kfree(cdev->private); in ccw_device_release()
675 kfree(cdev); in ccw_device_release()
680 struct ccw_device *cdev; in io_subchannel_allocate_dev() local
684 cdev = kzalloc(sizeof(*cdev), GFP_KERNEL); in io_subchannel_allocate_dev()
685 if (!cdev) { in io_subchannel_allocate_dev()
689 cdev->private = kzalloc(sizeof(struct ccw_device_private), in io_subchannel_allocate_dev()
691 if (!cdev->private) { in io_subchannel_allocate_dev()
696 cdev->dev.dma_mask = sch->dev.dma_mask; in io_subchannel_allocate_dev()
697 ret = dma_set_coherent_mask(&cdev->dev, sch->dev.coherent_dma_mask); in io_subchannel_allocate_dev()
701 dma_pool = cio_gp_dma_create(&cdev->dev, 1); in io_subchannel_allocate_dev()
706 cdev->private->dma_pool = dma_pool; in io_subchannel_allocate_dev()
707 cdev->private->dma_area = cio_gp_dma_zalloc(dma_pool, &cdev->dev, in io_subchannel_allocate_dev()
708 sizeof(*cdev->private->dma_area)); in io_subchannel_allocate_dev()
709 if (!cdev->private->dma_area) { in io_subchannel_allocate_dev()
713 return cdev; in io_subchannel_allocate_dev()
715 cio_gp_dma_destroy(dma_pool, &cdev->dev); in io_subchannel_allocate_dev()
718 kfree(cdev->private); in io_subchannel_allocate_dev()
720 kfree(cdev); in io_subchannel_allocate_dev()
728 struct ccw_device *cdev) in io_subchannel_initialize_dev() argument
730 struct ccw_device_private *priv = cdev->private; in io_subchannel_initialize_dev()
733 priv->cdev = cdev; in io_subchannel_initialize_dev()
745 cdev->ccwlock = sch->lock; in io_subchannel_initialize_dev()
746 cdev->dev.parent = &sch->dev; in io_subchannel_initialize_dev()
747 cdev->dev.release = ccw_device_release; in io_subchannel_initialize_dev()
748 cdev->dev.bus = &ccw_bus_type; in io_subchannel_initialize_dev()
749 cdev->dev.groups = ccwdev_attr_groups; in io_subchannel_initialize_dev()
751 device_initialize(&cdev->dev); in io_subchannel_initialize_dev()
752 ret = dev_set_name(&cdev->dev, "0.%x.%04x", cdev->private->dev_id.ssid, in io_subchannel_initialize_dev()
753 cdev->private->dev_id.devno); in io_subchannel_initialize_dev()
762 sch_set_cdev(sch, cdev); in io_subchannel_initialize_dev()
768 put_device(&cdev->dev); in io_subchannel_initialize_dev()
774 struct ccw_device *cdev; in io_subchannel_create_ccwdev() local
777 cdev = io_subchannel_allocate_dev(sch); in io_subchannel_create_ccwdev()
778 if (!IS_ERR(cdev)) { in io_subchannel_create_ccwdev()
779 ret = io_subchannel_initialize_dev(sch, cdev); in io_subchannel_create_ccwdev()
781 cdev = ERR_PTR(ret); in io_subchannel_create_ccwdev()
783 return cdev; in io_subchannel_create_ccwdev()
790 struct ccw_device *cdev; in sch_create_and_recog_new_device() local
793 cdev = io_subchannel_create_ccwdev(sch); in sch_create_and_recog_new_device()
794 if (IS_ERR(cdev)) { in sch_create_and_recog_new_device()
800 io_subchannel_recog(cdev, sch); in sch_create_and_recog_new_device()
806 static void io_subchannel_register(struct ccw_device *cdev) in io_subchannel_register() argument
812 sch = to_subchannel(cdev->dev.parent); in io_subchannel_register()
828 if (device_is_registered(&cdev->dev)) { in io_subchannel_register()
829 if (!cdev->drv) { in io_subchannel_register()
830 ret = device_reprobe(&cdev->dev); in io_subchannel_register()
835 cdev->private->dev_id.ssid, in io_subchannel_register()
836 cdev->private->dev_id.devno); in io_subchannel_register()
842 ret = device_add(&cdev->dev); in io_subchannel_register()
845 cdev->private->dev_id.ssid, in io_subchannel_register()
846 cdev->private->dev_id.devno, ret); in io_subchannel_register()
851 put_device(&cdev->dev); in io_subchannel_register()
855 cdev->private->flags.recog_done = 1; in io_subchannel_register()
856 wake_up(&cdev->private->wait_q); in io_subchannel_register()
866 io_subchannel_recog_done(struct ccw_device *cdev) in io_subchannel_recog_done() argument
869 cdev->private->flags.recog_done = 1; in io_subchannel_recog_done()
872 switch (cdev->private->state) { in io_subchannel_recog_done()
876 cdev->private->flags.recog_done = 1; in io_subchannel_recog_done()
878 ccw_device_sched_todo(cdev, CDEV_TODO_UNREG); in io_subchannel_recog_done()
887 ccw_device_sched_todo(cdev, CDEV_TODO_REGISTER); in io_subchannel_recog_done()
892 static void io_subchannel_recog(struct ccw_device *cdev, struct subchannel *sch) in io_subchannel_recog() argument
899 ccw_device_recognition(cdev); in io_subchannel_recog()
903 static int ccw_device_move_to_sch(struct ccw_device *cdev, in ccw_device_move_to_sch() argument
909 old_sch = to_subchannel(cdev->dev.parent); in ccw_device_move_to_sch()
929 rc = device_move(&cdev->dev, &sch->dev, DPM_ORDER_PARENT_BEFORE_DEV); in ccw_device_move_to_sch()
933 cdev->private->dev_id.ssid, in ccw_device_move_to_sch()
934 cdev->private->dev_id.devno, sch->schid.ssid, in ccw_device_move_to_sch()
957 cdev->ccwlock = sch->lock; in ccw_device_move_to_sch()
959 sch_set_cdev(sch, cdev); in ccw_device_move_to_sch()
966 static int ccw_device_move_to_orph(struct ccw_device *cdev) in ccw_device_move_to_orph() argument
968 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccw_device_move_to_orph()
971 return ccw_device_move_to_sch(cdev, css->pseudo_subchannel); in ccw_device_move_to_orph()
976 struct ccw_device *cdev; in io_subchannel_irq() local
978 cdev = sch_get_cdev(sch); in io_subchannel_irq()
982 if (cdev) in io_subchannel_irq()
983 dev_fsm_event(cdev, DEV_EVENT_INTERRUPT); in io_subchannel_irq()
1019 struct ccw_device *cdev; in io_subchannel_probe() local
1034 cdev = sch_get_cdev(sch); in io_subchannel_probe()
1035 rc = device_add(&cdev->dev); in io_subchannel_probe()
1038 put_device(&cdev->dev); in io_subchannel_probe()
1080 struct ccw_device *cdev; in io_subchannel_remove() local
1082 cdev = sch_get_cdev(sch); in io_subchannel_remove()
1083 if (!cdev) in io_subchannel_remove()
1086 ccw_device_unregister(cdev); in io_subchannel_remove()
1100 struct ccw_device *cdev; in io_subchannel_verify() local
1102 cdev = sch_get_cdev(sch); in io_subchannel_verify()
1103 if (cdev) in io_subchannel_verify()
1104 dev_fsm_event(cdev, DEV_EVENT_VERIFY); in io_subchannel_verify()
1109 struct ccw_device *cdev; in io_subchannel_terminate_path() local
1111 cdev = sch_get_cdev(sch); in io_subchannel_terminate_path()
1112 if (!cdev) in io_subchannel_terminate_path()
1119 if (cdev->private->state == DEV_STATE_ONLINE) { in io_subchannel_terminate_path()
1120 ccw_device_kill_io(cdev); in io_subchannel_terminate_path()
1127 dev_fsm_event(cdev, DEV_EVENT_VERIFY); in io_subchannel_terminate_path()
1131 dev_fsm_event(cdev, DEV_EVENT_NOTOPER); in io_subchannel_terminate_path()
1137 struct ccw_device *cdev = sch_get_cdev(sch); in io_subchannel_chp_event() local
1148 if (cdev) in io_subchannel_chp_event()
1149 cdev->private->path_gone_mask |= mask; in io_subchannel_chp_event()
1155 if (cdev) in io_subchannel_chp_event()
1156 cdev->private->path_new_mask |= mask; in io_subchannel_chp_event()
1162 if (cdev) in io_subchannel_chp_event()
1163 cdev->private->path_gone_mask |= mask; in io_subchannel_chp_event()
1170 if (cdev) in io_subchannel_chp_event()
1171 cdev->private->path_new_mask |= mask; in io_subchannel_chp_event()
1183 if (cdev && cdev->drv && cdev->drv->path_event) in io_subchannel_chp_event()
1184 cdev->drv->path_event(cdev, path_event); in io_subchannel_chp_event()
1192 struct ccw_device *cdev; in io_subchannel_quiesce() local
1196 cdev = sch_get_cdev(sch); in io_subchannel_quiesce()
1204 if (cdev->handler) in io_subchannel_quiesce()
1205 cdev->handler(cdev, cdev->private->intparm, ERR_PTR(-EIO)); in io_subchannel_quiesce()
1207 cdev->private->state = DEV_STATE_QUIESCE; in io_subchannel_quiesce()
1208 cdev->private->iretry = 255; in io_subchannel_quiesce()
1209 ret = ccw_device_cancel_halt_clear(cdev); in io_subchannel_quiesce()
1211 ccw_device_set_timeout(cdev, HZ/10); in io_subchannel_quiesce()
1213 wait_event(cdev->private->wait_q, in io_subchannel_quiesce()
1214 cdev->private->state != DEV_STATE_QUIESCE); in io_subchannel_quiesce()
1228 static int device_is_disconnected(struct ccw_device *cdev) in device_is_disconnected() argument
1230 if (!cdev) in device_is_disconnected()
1232 return (cdev->private->state == DEV_STATE_DISCONNECTED || in device_is_disconnected()
1233 cdev->private->state == DEV_STATE_DISCONNECTED_SENSE_ID); in device_is_disconnected()
1238 struct ccw_device *cdev = to_ccwdev(dev); in recovery_check() local
1242 spin_lock_irq(cdev->ccwlock); in recovery_check()
1243 switch (cdev->private->state) { in recovery_check()
1245 sch = to_subchannel(cdev->dev.parent); in recovery_check()
1251 cdev->private->dev_id.ssid, in recovery_check()
1252 cdev->private->dev_id.devno); in recovery_check()
1253 dev_fsm_event(cdev, DEV_EVENT_VERIFY); in recovery_check()
1260 spin_unlock_irq(cdev->ccwlock); in recovery_check()
1309 struct ccw_device *cdev = to_ccwdev(dev); in purge_fn() local
1310 struct ccw_dev_id *id = &cdev->private->dev_id; in purge_fn()
1311 struct subchannel *sch = to_subchannel(cdev->dev.parent); in purge_fn()
1313 spin_lock_irq(cdev->ccwlock); in purge_fn()
1315 (cdev->private->state == DEV_STATE_OFFLINE) && in purge_fn()
1316 (atomic_cmpxchg(&cdev->private->onoff, 0, 1) == 0)) { in purge_fn()
1319 ccw_device_sched_todo(cdev, CDEV_TODO_UNREG); in purge_fn()
1321 atomic_set(&cdev->private->onoff, 0); in purge_fn()
1323 spin_unlock_irq(cdev->ccwlock); in purge_fn()
1343 void ccw_device_set_disconnected(struct ccw_device *cdev) in ccw_device_set_disconnected() argument
1345 if (!cdev) in ccw_device_set_disconnected()
1347 ccw_device_set_timeout(cdev, 0); in ccw_device_set_disconnected()
1348 cdev->private->flags.fake_irb = 0; in ccw_device_set_disconnected()
1349 cdev->private->state = DEV_STATE_DISCONNECTED; in ccw_device_set_disconnected()
1350 if (cdev->online) in ccw_device_set_disconnected()
1354 void ccw_device_set_notoper(struct ccw_device *cdev) in ccw_device_set_notoper() argument
1356 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccw_device_set_notoper()
1360 ccw_device_set_timeout(cdev, 0); in ccw_device_set_notoper()
1362 cdev->private->state = DEV_STATE_NOT_OPER; in ccw_device_set_notoper()
1379 struct ccw_device *cdev; in sch_get_action() local
1381 cdev = sch_get_cdev(sch); in sch_get_action()
1384 if (!cdev) in sch_get_action()
1386 if (ccw_device_notify(cdev, CIO_GONE) != NOTIFY_OK) in sch_get_action()
1391 if (!cdev) in sch_get_action()
1393 if (sch->schib.pmcw.dev != cdev->private->dev_id.devno) { in sch_get_action()
1394 if (ccw_device_notify(cdev, CIO_GONE) != NOTIFY_OK) in sch_get_action()
1399 if (ccw_device_notify(cdev, CIO_NO_PATH) != NOTIFY_OK) in sch_get_action()
1403 if (device_is_disconnected(cdev)) in sch_get_action()
1405 if (cdev->online) in sch_get_action()
1407 if (cdev->private->state == DEV_STATE_NOT_OPER) in sch_get_action()
1425 struct ccw_device *cdev; in io_subchannel_sch_event() local
1435 cdev = sch_get_cdev(sch); in io_subchannel_sch_event()
1436 if (cdev && work_pending(&cdev->private->todo_work)) in io_subchannel_sch_event()
1446 ccw_device_trigger_reprobe(cdev); in io_subchannel_sch_event()
1455 ccw_device_set_disconnected(cdev); in io_subchannel_sch_event()
1460 ccw_device_set_disconnected(cdev); in io_subchannel_sch_event()
1464 if (!cdev) in io_subchannel_sch_event()
1466 if (cdev->private->state == DEV_STATE_SENSE_ID) { in io_subchannel_sch_event()
1472 dev_fsm_event(cdev, DEV_EVENT_NOTOPER); in io_subchannel_sch_event()
1474 ccw_device_set_notoper(cdev); in io_subchannel_sch_event()
1491 rc = ccw_device_move_to_orph(cdev); in io_subchannel_sch_event()
1500 ccw_device_unregister(cdev); in io_subchannel_sch_event()
1516 cdev = get_ccwdev_by_dev_id(&dev_id); in io_subchannel_sch_event()
1517 if (!cdev) { in io_subchannel_sch_event()
1521 rc = ccw_device_move_to_sch(cdev, sch); in io_subchannel_sch_event()
1524 put_device(&cdev->dev); in io_subchannel_sch_event()
1528 ccw_device_trigger_reprobe(cdev); in io_subchannel_sch_event()
1531 put_device(&cdev->dev); in io_subchannel_sch_event()
1544 static void ccw_device_set_int_class(struct ccw_device *cdev) in ccw_device_set_int_class() argument
1546 struct ccw_driver *cdrv = cdev->drv; in ccw_device_set_int_class()
1551 cdev->private->int_class = cdrv->int_class; in ccw_device_set_int_class()
1553 cdev->private->int_class = IRQIO_CIO; in ccw_device_set_int_class()
1557 int __init ccw_device_enable_console(struct ccw_device *cdev) in ccw_device_enable_console() argument
1559 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccw_device_enable_console()
1562 if (!cdev->drv || !cdev->handler) in ccw_device_enable_console()
1570 io_subchannel_recog(cdev, sch); in ccw_device_enable_console()
1572 spin_lock_irq(cdev->ccwlock); in ccw_device_enable_console()
1573 while (!dev_fsm_final_state(cdev)) in ccw_device_enable_console()
1574 ccw_device_wait_idle(cdev); in ccw_device_enable_console()
1577 get_device(&cdev->dev); in ccw_device_enable_console()
1578 rc = ccw_device_online(cdev); in ccw_device_enable_console()
1582 while (!dev_fsm_final_state(cdev)) in ccw_device_enable_console()
1583 ccw_device_wait_idle(cdev); in ccw_device_enable_console()
1585 if (cdev->private->state == DEV_STATE_ONLINE) in ccw_device_enable_console()
1586 cdev->online = 1; in ccw_device_enable_console()
1590 spin_unlock_irq(cdev->ccwlock); in ccw_device_enable_console()
1592 put_device(&cdev->dev); in ccw_device_enable_console()
1599 struct ccw_device *cdev; in ccw_device_create_console() local
1615 cdev = io_subchannel_create_ccwdev(sch); in ccw_device_create_console()
1616 if (IS_ERR(cdev)) { in ccw_device_create_console()
1622 return cdev; in ccw_device_create_console()
1624 cdev->drv = drv; in ccw_device_create_console()
1625 ccw_device_set_int_class(cdev); in ccw_device_create_console()
1626 return cdev; in ccw_device_create_console()
1635 void __init ccw_device_destroy_console(struct ccw_device *cdev) in ccw_device_destroy_console() argument
1637 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccw_device_destroy_console()
1644 put_device(&cdev->dev); in ccw_device_destroy_console()
1656 void ccw_device_wait_idle(struct ccw_device *cdev) in ccw_device_wait_idle() argument
1658 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccw_device_wait_idle()
1703 struct ccw_device *cdev = to_ccwdev(dev); in ccw_device_probe() local
1707 cdev->drv = cdrv; /* to let the driver call _set_online */ in ccw_device_probe()
1708 ccw_device_set_int_class(cdev); in ccw_device_probe()
1709 ret = cdrv->probe ? cdrv->probe(cdev) : -ENODEV; in ccw_device_probe()
1711 cdev->drv = NULL; in ccw_device_probe()
1712 cdev->private->int_class = IRQIO_CIO; in ccw_device_probe()
1721 struct ccw_device *cdev = to_ccwdev(dev); in ccw_device_remove() local
1722 struct ccw_driver *cdrv = cdev->drv; in ccw_device_remove()
1727 cdrv->remove(cdev); in ccw_device_remove()
1729 spin_lock_irq(cdev->ccwlock); in ccw_device_remove()
1730 if (cdev->online) { in ccw_device_remove()
1731 cdev->online = 0; in ccw_device_remove()
1732 ret = ccw_device_offline(cdev); in ccw_device_remove()
1733 spin_unlock_irq(cdev->ccwlock); in ccw_device_remove()
1735 wait_event(cdev->private->wait_q, in ccw_device_remove()
1736 dev_fsm_final_state(cdev)); in ccw_device_remove()
1740 ret, cdev->private->dev_id.ssid, in ccw_device_remove()
1741 cdev->private->dev_id.devno); in ccw_device_remove()
1743 put_device(&cdev->dev); in ccw_device_remove()
1744 spin_lock_irq(cdev->ccwlock); in ccw_device_remove()
1746 ccw_device_set_timeout(cdev, 0); in ccw_device_remove()
1747 cdev->drv = NULL; in ccw_device_remove()
1748 cdev->private->int_class = IRQIO_CIO; in ccw_device_remove()
1749 sch = to_subchannel(cdev->dev.parent); in ccw_device_remove()
1750 spin_unlock_irq(cdev->ccwlock); in ccw_device_remove()
1752 __disable_cmf(cdev); in ccw_device_remove()
1757 struct ccw_device *cdev; in ccw_device_shutdown() local
1759 cdev = to_ccwdev(dev); in ccw_device_shutdown()
1760 if (cdev->drv && cdev->drv->shutdown) in ccw_device_shutdown()
1761 cdev->drv->shutdown(cdev); in ccw_device_shutdown()
1762 __disable_cmf(cdev); in ccw_device_shutdown()
1805 struct ccw_device *cdev; in ccw_device_todo() local
1810 cdev = priv->cdev; in ccw_device_todo()
1811 sch = to_subchannel(cdev->dev.parent); in ccw_device_todo()
1813 spin_lock_irq(cdev->ccwlock); in ccw_device_todo()
1818 spin_unlock_irq(cdev->ccwlock); in ccw_device_todo()
1822 cmf_reenable(cdev); in ccw_device_todo()
1825 ccw_device_do_unbind_bind(cdev); in ccw_device_todo()
1828 io_subchannel_register(cdev); in ccw_device_todo()
1838 ccw_device_unregister(cdev); in ccw_device_todo()
1844 put_device(&cdev->dev); in ccw_device_todo()
1856 void ccw_device_sched_todo(struct ccw_device *cdev, enum cdev_todo todo) in ccw_device_sched_todo() argument
1859 cdev->private->dev_id.ssid, cdev->private->dev_id.devno, in ccw_device_sched_todo()
1861 if (cdev->private->todo >= todo) in ccw_device_sched_todo()
1863 cdev->private->todo = todo; in ccw_device_sched_todo()
1865 if (!get_device(&cdev->dev)) in ccw_device_sched_todo()
1867 if (!queue_work(cio_work_q, &cdev->private->todo_work)) { in ccw_device_sched_todo()
1869 put_device(&cdev->dev); in ccw_device_sched_todo()
1880 int ccw_device_siosl(struct ccw_device *cdev) in ccw_device_siosl() argument
1882 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccw_device_siosl()