Lines Matching refs:rp

107 static inline int raw3270_state_ready(struct raw3270 *rp)  in raw3270_state_ready()  argument
109 return rp->state == RAW3270_STATE_READY; in raw3270_state_ready()
112 static inline int raw3270_state_final(struct raw3270 *rp) in raw3270_state_final() argument
114 return rp->state == RAW3270_STATE_INIT || in raw3270_state_final()
115 rp->state == RAW3270_STATE_READY; in raw3270_state_final()
119 raw3270_buffer_address(struct raw3270 *rp, char *cp, unsigned short addr) in raw3270_buffer_address() argument
121 if (test_bit(RAW3270_FLAGS_14BITADDR, &rp->flags)) { in raw3270_buffer_address()
235 __raw3270_halt_io(struct raw3270 *rp, struct raw3270_request *rq) in __raw3270_halt_io() argument
245 rc = ccw_device_halt(rp->cdev, (long) rq); in __raw3270_halt_io()
247 rc = ccw_device_clear(rp->cdev, (long) rq); in __raw3270_halt_io()
259 __raw3270_start(struct raw3270 *rp, struct raw3270_view *view, in __raw3270_start() argument
264 if (list_empty(&rp->req_queue) && in __raw3270_start()
265 !test_bit(RAW3270_FLAGS_BUSY, &rp->flags)) { in __raw3270_start()
267 rq->rc = ccw_device_start(rp->cdev, &rq->ccw, in __raw3270_start()
274 list_add_tail(&rq->list, &rp->req_queue); in __raw3270_start()
281 struct raw3270 *rp = view->dev; in raw3270_view_active() local
283 return rp && rp->view == view && in raw3270_view_active()
284 !test_bit(RAW3270_FLAGS_FROZEN, &rp->flags); in raw3270_view_active()
291 struct raw3270 *rp; in raw3270_start() local
295 rp = view->dev; in raw3270_start()
296 if (!rp || rp->view != view || in raw3270_start()
297 test_bit(RAW3270_FLAGS_FROZEN, &rp->flags)) in raw3270_start()
299 else if (!raw3270_state_ready(rp)) in raw3270_start()
302 rc = __raw3270_start(rp, view, rq); in raw3270_start()
310 struct raw3270 *rp; in raw3270_start_locked() local
313 rp = view->dev; in raw3270_start_locked()
314 if (!rp || rp->view != view || in raw3270_start_locked()
315 test_bit(RAW3270_FLAGS_FROZEN, &rp->flags)) in raw3270_start_locked()
317 else if (!raw3270_state_ready(rp)) in raw3270_start_locked()
320 rc = __raw3270_start(rp, view, rq); in raw3270_start_locked()
327 struct raw3270 *rp; in raw3270_start_irq() local
329 rp = view->dev; in raw3270_start_irq()
332 list_add_tail(&rq->list, &rp->req_queue); in raw3270_start_irq()
342 struct raw3270 *rp; in raw3270_irq() local
347 rp = dev_get_drvdata(&cdev->dev); in raw3270_irq()
348 if (!rp) in raw3270_irq()
351 view = rq ? rq->view : rp->view; in raw3270_irq()
361 set_bit(RAW3270_FLAGS_BUSY, &rp->flags); in raw3270_irq()
363 } else if (test_bit(RAW3270_FLAGS_BUSY, &rp->flags)) { in raw3270_irq()
366 clear_bit(RAW3270_FLAGS_BUSY, &rp->flags); in raw3270_irq()
388 rq->rc = ccw_device_start(rp->cdev, &rq->ccw, in raw3270_irq()
396 __raw3270_halt_io(rp, rq); in raw3270_irq()
415 while (!list_empty(&rp->req_queue)) { in raw3270_irq()
416 rq = list_entry(rp->req_queue.next,struct raw3270_request,list); in raw3270_irq()
417 rq->rc = ccw_device_start(rp->cdev, &rq->ccw, in raw3270_irq()
475 raw3270_size_device_vm(struct raw3270 *rp) in raw3270_size_device_vm() argument
481 ccw_device_get_id(rp->cdev, &dev_id); in raw3270_size_device_vm()
491 rp->model = model; in raw3270_size_device_vm()
492 rp->rows = 24; in raw3270_size_device_vm()
493 rp->cols = 80; in raw3270_size_device_vm()
496 rp->model = model; in raw3270_size_device_vm()
497 rp->rows = 32; in raw3270_size_device_vm()
498 rp->cols = 80; in raw3270_size_device_vm()
501 rp->model = model; in raw3270_size_device_vm()
502 rp->rows = 43; in raw3270_size_device_vm()
503 rp->cols = 80; in raw3270_size_device_vm()
506 rp->model = model; in raw3270_size_device_vm()
507 rp->rows = 27; in raw3270_size_device_vm()
508 rp->cols = 132; in raw3270_size_device_vm()
514 raw3270_size_device(struct raw3270 *rp) in raw3270_size_device() argument
519 uap = (struct raw3270_ua *) (rp->init_data + 1); in raw3270_size_device()
521 if (rp->init_readmod.rc || rp->init_data[0] != 0x88 || in raw3270_size_device()
524 rp->model = 2; in raw3270_size_device()
525 rp->rows = 24; in raw3270_size_device()
526 rp->cols = 80; in raw3270_size_device()
530 rp->rows = uap->uab.h; in raw3270_size_device()
531 rp->cols = uap->uab.w; in raw3270_size_device()
534 set_bit(RAW3270_FLAGS_14BITADDR, &rp->flags); in raw3270_size_device()
538 rp->rows = uap->aua.hauai; in raw3270_size_device()
539 rp->cols = uap->aua.wauai; in raw3270_size_device()
542 rp->model = 0; in raw3270_size_device()
543 if (rp->rows == 24 && rp->cols == 80) in raw3270_size_device()
544 rp->model = 2; in raw3270_size_device()
545 if (rp->rows == 32 && rp->cols == 80) in raw3270_size_device()
546 rp->model = 3; in raw3270_size_device()
547 if (rp->rows == 43 && rp->cols == 80) in raw3270_size_device()
548 rp->model = 4; in raw3270_size_device()
549 if (rp->rows == 27 && rp->cols == 132) in raw3270_size_device()
550 rp->model = 5; in raw3270_size_device()
554 raw3270_size_device_done(struct raw3270 *rp) in raw3270_size_device_done() argument
558 rp->view = NULL; in raw3270_size_device_done()
559 rp->state = RAW3270_STATE_READY; in raw3270_size_device_done()
561 list_for_each_entry(view, &rp->view_list, list) in raw3270_size_device_done()
563 view->fn->resize(view, rp->model, rp->rows, rp->cols); in raw3270_size_device_done()
565 list_for_each_entry(view, &rp->view_list, list) { in raw3270_size_device_done()
566 rp->view = view; in raw3270_size_device_done()
569 rp->view = NULL; in raw3270_size_device_done()
576 struct raw3270 *rp = rq->view->dev; in raw3270_read_modified_cb() local
578 raw3270_size_device(rp); in raw3270_read_modified_cb()
579 raw3270_size_device_done(rp); in raw3270_read_modified_cb()
583 raw3270_read_modified(struct raw3270 *rp) in raw3270_read_modified() argument
585 if (rp->state != RAW3270_STATE_W4ATTN) in raw3270_read_modified()
588 memset(&rp->init_readmod, 0, sizeof(rp->init_readmod)); in raw3270_read_modified()
589 memset(&rp->init_data, 0, sizeof(rp->init_data)); in raw3270_read_modified()
590 rp->init_readmod.ccw.cmd_code = TC_READMOD; in raw3270_read_modified()
591 rp->init_readmod.ccw.flags = CCW_FLAG_SLI; in raw3270_read_modified()
592 rp->init_readmod.ccw.count = sizeof(rp->init_data); in raw3270_read_modified()
593 rp->init_readmod.ccw.cda = (__u32) __pa(rp->init_data); in raw3270_read_modified()
594 rp->init_readmod.callback = raw3270_read_modified_cb; in raw3270_read_modified()
595 rp->state = RAW3270_STATE_READMOD; in raw3270_read_modified()
596 raw3270_start_irq(&rp->init_view, &rp->init_readmod); in raw3270_read_modified()
600 raw3270_writesf_readpart(struct raw3270 *rp) in raw3270_writesf_readpart() argument
606 memset(&rp->init_readpart, 0, sizeof(rp->init_readpart)); in raw3270_writesf_readpart()
607 memset(&rp->init_data, 0, sizeof(rp->init_data)); in raw3270_writesf_readpart()
608 memcpy(&rp->init_data, wbuf, sizeof(wbuf)); in raw3270_writesf_readpart()
609 rp->init_readpart.ccw.cmd_code = TC_WRITESF; in raw3270_writesf_readpart()
610 rp->init_readpart.ccw.flags = CCW_FLAG_SLI; in raw3270_writesf_readpart()
611 rp->init_readpart.ccw.count = sizeof(wbuf); in raw3270_writesf_readpart()
612 rp->init_readpart.ccw.cda = (__u32) __pa(&rp->init_data); in raw3270_writesf_readpart()
613 rp->state = RAW3270_STATE_W4ATTN; in raw3270_writesf_readpart()
614 raw3270_start_irq(&rp->init_view, &rp->init_readpart); in raw3270_writesf_readpart()
623 struct raw3270 *rp = rq->view->dev; in raw3270_reset_device_cb() local
625 if (rp->state != RAW3270_STATE_RESET) in raw3270_reset_device_cb()
629 rp->state = RAW3270_STATE_INIT; in raw3270_reset_device_cb()
631 raw3270_size_device_vm(rp); in raw3270_reset_device_cb()
632 raw3270_size_device_done(rp); in raw3270_reset_device_cb()
634 raw3270_writesf_readpart(rp); in raw3270_reset_device_cb()
635 memset(&rp->init_reset, 0, sizeof(rp->init_reset)); in raw3270_reset_device_cb()
639 __raw3270_reset_device(struct raw3270 *rp) in __raw3270_reset_device() argument
644 if (rp->init_reset.view) in __raw3270_reset_device()
647 rp->init_data[0] = TW_KR; in __raw3270_reset_device()
648 rp->init_reset.ccw.cmd_code = TC_EWRITEA; in __raw3270_reset_device()
649 rp->init_reset.ccw.flags = CCW_FLAG_SLI; in __raw3270_reset_device()
650 rp->init_reset.ccw.count = 1; in __raw3270_reset_device()
651 rp->init_reset.ccw.cda = (__u32) __pa(rp->init_data); in __raw3270_reset_device()
652 rp->init_reset.callback = raw3270_reset_device_cb; in __raw3270_reset_device()
653 rc = __raw3270_start(rp, &rp->init_view, &rp->init_reset); in __raw3270_reset_device()
654 if (rc == 0 && rp->state == RAW3270_STATE_INIT) in __raw3270_reset_device()
655 rp->state = RAW3270_STATE_RESET; in __raw3270_reset_device()
660 raw3270_reset_device(struct raw3270 *rp) in raw3270_reset_device() argument
665 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_reset_device()
666 rc = __raw3270_reset_device(rp); in raw3270_reset_device()
667 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_reset_device()
674 struct raw3270 *rp; in raw3270_reset() local
677 rp = view->dev; in raw3270_reset()
678 if (!rp || rp->view != view || in raw3270_reset()
679 test_bit(RAW3270_FLAGS_FROZEN, &rp->flags)) in raw3270_reset()
681 else if (!raw3270_state_ready(rp)) in raw3270_reset()
692 struct raw3270 *rp; in raw3270_init_irq() local
715 rp = view->dev; in raw3270_init_irq()
716 raw3270_read_modified(rp); in raw3270_init_irq()
729 raw3270_setup_device(struct ccw_device *cdev, struct raw3270 *rp, char *ascebc) in raw3270_setup_device() argument
735 memset(rp, 0, sizeof(struct raw3270)); in raw3270_setup_device()
744 rp->ascebc = ascebc; in raw3270_setup_device()
747 rp->rows = 24; in raw3270_setup_device()
748 rp->cols = 80; in raw3270_setup_device()
750 INIT_LIST_HEAD(&rp->req_queue); in raw3270_setup_device()
751 INIT_LIST_HEAD(&rp->view_list); in raw3270_setup_device()
753 rp->init_view.dev = rp; in raw3270_setup_device()
754 rp->init_view.fn = &raw3270_init_fn; in raw3270_setup_device()
755 rp->view = &rp->init_view; in raw3270_setup_device()
765 rp->minor = -1; in raw3270_setup_device()
769 rp->minor = minor; in raw3270_setup_device()
770 __list_add(&rp->list, l->prev, l); in raw3270_setup_device()
775 if (rp->minor == -1 && minor < RAW3270_MAXDEVS + RAW3270_FIRSTMINOR) { in raw3270_setup_device()
776 rp->minor = minor; in raw3270_setup_device()
777 list_add_tail(&rp->list, &raw3270_devices); in raw3270_setup_device()
781 if (rp->minor == -1) in raw3270_setup_device()
783 rp->cdev = cdev; in raw3270_setup_device()
784 dev_set_drvdata(&cdev->dev, rp); in raw3270_setup_device()
800 struct raw3270 *rp; in raw3270_setup_console() local
808 rp = kzalloc(sizeof(struct raw3270), GFP_KERNEL | GFP_DMA); in raw3270_setup_console()
810 rc = raw3270_setup_device(cdev, rp, ascebc); in raw3270_setup_console()
813 set_bit(RAW3270_FLAGS_CONSOLE, &rp->flags); in raw3270_setup_console()
821 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_setup_console()
823 __raw3270_reset_device(rp); in raw3270_setup_console()
824 while (!raw3270_state_final(rp)) { in raw3270_setup_console()
825 ccw_device_wait_idle(rp->cdev); in raw3270_setup_console()
828 } while (rp->state != RAW3270_STATE_READY); in raw3270_setup_console()
829 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_setup_console()
830 return rp; in raw3270_setup_console()
834 raw3270_wait_cons_dev(struct raw3270 *rp) in raw3270_wait_cons_dev() argument
838 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_wait_cons_dev()
839 ccw_device_wait_idle(rp->cdev); in raw3270_wait_cons_dev()
840 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_wait_cons_dev()
851 struct raw3270 *rp; in raw3270_create_device() local
855 rp = kzalloc(sizeof(struct raw3270), GFP_KERNEL | GFP_DMA); in raw3270_create_device()
856 if (!rp) in raw3270_create_device()
860 kfree(rp); in raw3270_create_device()
863 rc = raw3270_setup_device(cdev, rp, ascebc); in raw3270_create_device()
865 kfree(rp->ascebc); in raw3270_create_device()
866 kfree(rp); in raw3270_create_device()
867 rp = ERR_PTR(rc); in raw3270_create_device()
871 return rp; in raw3270_create_device()
880 struct raw3270 *rp; in raw3270_activate_view() local
885 rp = view->dev; in raw3270_activate_view()
886 if (!rp) in raw3270_activate_view()
888 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_activate_view()
889 if (rp->view == view) in raw3270_activate_view()
891 else if (!raw3270_state_ready(rp)) in raw3270_activate_view()
893 else if (test_bit(RAW3270_FLAGS_FROZEN, &rp->flags)) in raw3270_activate_view()
897 if (rp->view && rp->view->fn->deactivate) { in raw3270_activate_view()
898 oldview = rp->view; in raw3270_activate_view()
901 rp->view = view; in raw3270_activate_view()
905 rp->view = oldview; in raw3270_activate_view()
908 list_for_each_entry(nv, &rp->view_list, list) in raw3270_activate_view()
910 rp->view = nv; in raw3270_activate_view()
913 rp->view = NULL; in raw3270_activate_view()
918 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_activate_view()
929 struct raw3270 *rp; in raw3270_deactivate_view() local
931 rp = view->dev; in raw3270_deactivate_view()
932 if (!rp) in raw3270_deactivate_view()
934 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_deactivate_view()
935 if (rp->view == view) { in raw3270_deactivate_view()
937 rp->view = NULL; in raw3270_deactivate_view()
940 list_add_tail(&view->list, &rp->view_list); in raw3270_deactivate_view()
942 if (raw3270_state_ready(rp) && in raw3270_deactivate_view()
943 !test_bit(RAW3270_FLAGS_FROZEN, &rp->flags)) { in raw3270_deactivate_view()
944 list_for_each_entry(view, &rp->view_list, list) { in raw3270_deactivate_view()
945 rp->view = view; in raw3270_deactivate_view()
948 rp->view = NULL; in raw3270_deactivate_view()
952 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_deactivate_view()
962 struct raw3270 *rp; in raw3270_add_view() local
969 list_for_each_entry(rp, &raw3270_devices, list) { in raw3270_add_view()
970 if (rp->minor != minor) in raw3270_add_view()
972 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_add_view()
974 view->dev = rp; in raw3270_add_view()
976 view->model = rp->model; in raw3270_add_view()
977 view->rows = rp->rows; in raw3270_add_view()
978 view->cols = rp->cols; in raw3270_add_view()
979 view->ascebc = rp->ascebc; in raw3270_add_view()
981 list_add(&view->list, &rp->view_list); in raw3270_add_view()
983 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_add_view()
996 struct raw3270 *rp; in raw3270_find_view() local
1002 list_for_each_entry(rp, &raw3270_devices, list) { in raw3270_find_view()
1003 if (rp->minor != minor) in raw3270_find_view()
1005 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_find_view()
1006 list_for_each_entry(tmp, &rp->view_list, list) { in raw3270_find_view()
1013 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_find_view()
1027 struct raw3270 *rp; in raw3270_del_view() local
1030 rp = view->dev; in raw3270_del_view()
1031 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_del_view()
1032 if (rp->view == view) { in raw3270_del_view()
1034 rp->view = NULL; in raw3270_del_view()
1037 if (!rp->view && raw3270_state_ready(rp) && in raw3270_del_view()
1038 !test_bit(RAW3270_FLAGS_FROZEN, &rp->flags)) { in raw3270_del_view()
1040 list_for_each_entry(nv, &rp->view_list, list) { in raw3270_del_view()
1042 rp->view = nv; in raw3270_del_view()
1047 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_del_view()
1059 raw3270_delete_device(struct raw3270 *rp) in raw3270_delete_device() argument
1065 list_del_init(&rp->list); in raw3270_delete_device()
1069 cdev = rp->cdev; in raw3270_delete_device()
1070 rp->cdev = NULL; in raw3270_delete_device()
1078 kfree(rp->ascebc); in raw3270_delete_device()
1079 kfree(rp); in raw3270_delete_device()
1126 static int raw3270_create_attributes(struct raw3270 *rp) in raw3270_create_attributes() argument
1128 return sysfs_create_group(&rp->cdev->dev.kobj, &raw3270_attr_group); in raw3270_create_attributes()
1138 struct raw3270 *rp; in raw3270_register_notifier() local
1142 list_for_each_entry(rp, &raw3270_devices, list) in raw3270_register_notifier()
1143 notifier->create(rp->minor); in raw3270_register_notifier()
1150 struct raw3270 *rp; in raw3270_unregister_notifier() local
1153 list_for_each_entry(rp, &raw3270_devices, list) in raw3270_unregister_notifier()
1154 notifier->destroy(rp->minor); in raw3270_unregister_notifier()
1166 struct raw3270 *rp; in raw3270_set_online() local
1169 rp = raw3270_create_device(cdev); in raw3270_set_online()
1170 if (IS_ERR(rp)) in raw3270_set_online()
1171 return PTR_ERR(rp); in raw3270_set_online()
1172 rc = raw3270_create_attributes(rp); in raw3270_set_online()
1175 raw3270_reset_device(rp); in raw3270_set_online()
1178 np->create(rp->minor); in raw3270_set_online()
1183 raw3270_delete_device(rp); in raw3270_set_online()
1194 struct raw3270 *rp; in raw3270_remove() local
1198 rp = dev_get_drvdata(&cdev->dev); in raw3270_remove()
1205 if (rp == NULL) in raw3270_remove()
1212 if (rp->view) { in raw3270_remove()
1213 if (rp->view->fn->deactivate) in raw3270_remove()
1214 rp->view->fn->deactivate(rp->view); in raw3270_remove()
1215 rp->view = NULL; in raw3270_remove()
1217 while (!list_empty(&rp->view_list)) { in raw3270_remove()
1218 v = list_entry(rp->view_list.next, struct raw3270_view, list); in raw3270_remove()
1229 np->destroy(rp->minor); in raw3270_remove()
1233 raw3270_reset_device(rp); in raw3270_remove()
1235 raw3270_delete_device(rp); in raw3270_remove()
1244 struct raw3270 *rp; in raw3270_set_offline() local
1246 rp = dev_get_drvdata(&cdev->dev); in raw3270_set_offline()
1247 if (test_bit(RAW3270_FLAGS_CONSOLE, &rp->flags)) in raw3270_set_offline()
1255 struct raw3270 *rp; in raw3270_pm_stop() local
1259 rp = dev_get_drvdata(&cdev->dev); in raw3270_pm_stop()
1260 if (!rp) in raw3270_pm_stop()
1262 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_pm_stop()
1263 if (rp->view && rp->view->fn->deactivate) in raw3270_pm_stop()
1264 rp->view->fn->deactivate(rp->view); in raw3270_pm_stop()
1265 if (!test_bit(RAW3270_FLAGS_CONSOLE, &rp->flags)) { in raw3270_pm_stop()
1270 list_for_each_entry(view, &rp->view_list, list) { in raw3270_pm_stop()
1275 set_bit(RAW3270_FLAGS_FROZEN, &rp->flags); in raw3270_pm_stop()
1276 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_pm_stop()
1282 struct raw3270 *rp; in raw3270_pm_start() local
1285 rp = dev_get_drvdata(&cdev->dev); in raw3270_pm_start()
1286 if (!rp) in raw3270_pm_start()
1288 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_pm_start()
1289 clear_bit(RAW3270_FLAGS_FROZEN, &rp->flags); in raw3270_pm_start()
1290 if (rp->view && rp->view->fn->activate) in raw3270_pm_start()
1291 rp->view->fn->activate(rp->view); in raw3270_pm_start()
1292 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_pm_start()
1299 struct raw3270 *rp; in raw3270_pm_unfreeze() local
1301 rp = view->dev; in raw3270_pm_unfreeze()
1302 if (rp && test_bit(RAW3270_FLAGS_FROZEN, &rp->flags)) in raw3270_pm_unfreeze()
1303 ccw_device_force_console(rp->cdev); in raw3270_pm_unfreeze()
1341 struct raw3270 *rp; in raw3270_init() local
1352 list_for_each_entry(rp, &raw3270_devices, list) { in raw3270_init()
1353 get_device(&rp->cdev->dev); in raw3270_init()
1354 raw3270_create_attributes(rp); in raw3270_init()