Lines Matching full:rp
93 static void __raw3270_disconnect(struct raw3270 *rp);
109 static inline int raw3270_state_ready(struct raw3270 *rp) in raw3270_state_ready() argument
111 return rp->state == RAW3270_STATE_READY; in raw3270_state_ready()
114 static inline int raw3270_state_final(struct raw3270 *rp) in raw3270_state_final() argument
116 return rp->state == RAW3270_STATE_INIT || in raw3270_state_final()
117 rp->state == RAW3270_STATE_READY; in raw3270_state_final()
121 raw3270_buffer_address(struct raw3270 *rp, char *cp, unsigned short addr) in raw3270_buffer_address() argument
123 if (test_bit(RAW3270_FLAGS_14BITADDR, &rp->flags)) { in raw3270_buffer_address()
238 __raw3270_start(struct raw3270 *rp, struct raw3270_view *view, in __raw3270_start() argument
243 if (list_empty(&rp->req_queue) && in __raw3270_start()
244 !test_bit(RAW3270_FLAGS_BUSY, &rp->flags)) { in __raw3270_start()
246 rq->rc = ccw_device_start(rp->cdev, &rq->ccw, in __raw3270_start()
253 list_add_tail(&rq->list, &rp->req_queue); in __raw3270_start()
260 struct raw3270 *rp = view->dev; in raw3270_view_active() local
262 return rp && rp->view == view; in raw3270_view_active()
269 struct raw3270 *rp; in raw3270_start() local
273 rp = view->dev; in raw3270_start()
274 if (!rp || rp->view != view) in raw3270_start()
276 else if (!raw3270_state_ready(rp)) in raw3270_start()
279 rc = __raw3270_start(rp, view, rq); in raw3270_start()
287 struct raw3270 *rp; in raw3270_start_locked() local
290 rp = view->dev; in raw3270_start_locked()
291 if (!rp || rp->view != view) in raw3270_start_locked()
293 else if (!raw3270_state_ready(rp)) in raw3270_start_locked()
296 rc = __raw3270_start(rp, view, rq); in raw3270_start_locked()
303 struct raw3270 *rp; in raw3270_start_irq() local
305 rp = view->dev; in raw3270_start_irq()
308 list_add_tail(&rq->list, &rp->req_queue); in raw3270_start_irq()
318 struct raw3270 *rp; in raw3270_irq() local
322 rp = dev_get_drvdata(&cdev->dev); in raw3270_irq()
323 if (!rp) in raw3270_irq()
326 view = rq ? rq->view : rp->view; in raw3270_irq()
331 clear_bit(RAW3270_FLAGS_BUSY, &rp->flags); in raw3270_irq()
335 set_bit(RAW3270_FLAGS_BUSY, &rp->flags); in raw3270_irq()
339 set_bit(RAW3270_FLAGS_BUSY, &rp->flags); in raw3270_irq()
340 if (rp->state > RAW3270_STATE_RESET) in raw3270_irq()
341 __raw3270_disconnect(rp); in raw3270_irq()
348 if (test_bit(RAW3270_FLAGS_BUSY, &rp->flags)) in raw3270_irq()
365 while (!list_empty(&rp->req_queue)) { in raw3270_irq()
366 rq = list_entry(rp->req_queue.next,struct raw3270_request,list); in raw3270_irq()
367 rq->rc = ccw_device_start(rp->cdev, &rq->ccw, in raw3270_irq()
425 raw3270_size_device_vm(struct raw3270 *rp) in raw3270_size_device_vm() argument
431 ccw_device_get_id(rp->cdev, &dev_id); in raw3270_size_device_vm()
441 rp->model = model; in raw3270_size_device_vm()
442 rp->rows = 24; in raw3270_size_device_vm()
443 rp->cols = 80; in raw3270_size_device_vm()
446 rp->model = model; in raw3270_size_device_vm()
447 rp->rows = 32; in raw3270_size_device_vm()
448 rp->cols = 80; in raw3270_size_device_vm()
451 rp->model = model; in raw3270_size_device_vm()
452 rp->rows = 43; in raw3270_size_device_vm()
453 rp->cols = 80; in raw3270_size_device_vm()
456 rp->model = model; in raw3270_size_device_vm()
457 rp->rows = 27; in raw3270_size_device_vm()
458 rp->cols = 132; in raw3270_size_device_vm()
464 raw3270_size_device(struct raw3270 *rp) in raw3270_size_device() argument
469 uap = (struct raw3270_ua *) (rp->init_data + 1); in raw3270_size_device()
471 if (rp->init_readmod.rc || rp->init_data[0] != 0x88 || in raw3270_size_device()
474 rp->model = 2; in raw3270_size_device()
475 rp->rows = 24; in raw3270_size_device()
476 rp->cols = 80; in raw3270_size_device()
480 rp->rows = uap->uab.h; in raw3270_size_device()
481 rp->cols = uap->uab.w; in raw3270_size_device()
484 set_bit(RAW3270_FLAGS_14BITADDR, &rp->flags); in raw3270_size_device()
488 rp->rows = uap->aua.hauai; in raw3270_size_device()
489 rp->cols = uap->aua.wauai; in raw3270_size_device()
492 rp->model = 0; in raw3270_size_device()
493 if (rp->rows == 24 && rp->cols == 80) in raw3270_size_device()
494 rp->model = 2; in raw3270_size_device()
495 if (rp->rows == 32 && rp->cols == 80) in raw3270_size_device()
496 rp->model = 3; in raw3270_size_device()
497 if (rp->rows == 43 && rp->cols == 80) in raw3270_size_device()
498 rp->model = 4; in raw3270_size_device()
499 if (rp->rows == 27 && rp->cols == 132) in raw3270_size_device()
500 rp->model = 5; in raw3270_size_device()
504 raw3270_size_device_done(struct raw3270 *rp) in raw3270_size_device_done() argument
508 rp->view = NULL; in raw3270_size_device_done()
509 rp->state = RAW3270_STATE_READY; in raw3270_size_device_done()
511 list_for_each_entry(view, &rp->view_list, list) in raw3270_size_device_done()
513 view->fn->resize(view, rp->model, rp->rows, rp->cols); in raw3270_size_device_done()
515 list_for_each_entry(view, &rp->view_list, list) { in raw3270_size_device_done()
516 rp->view = view; in raw3270_size_device_done()
519 rp->view = NULL; in raw3270_size_device_done()
526 struct raw3270 *rp = rq->view->dev; in raw3270_read_modified_cb() local
528 raw3270_size_device(rp); in raw3270_read_modified_cb()
529 raw3270_size_device_done(rp); in raw3270_read_modified_cb()
533 raw3270_read_modified(struct raw3270 *rp) in raw3270_read_modified() argument
535 if (rp->state != RAW3270_STATE_W4ATTN) in raw3270_read_modified()
538 memset(&rp->init_readmod, 0, sizeof(rp->init_readmod)); in raw3270_read_modified()
539 memset(&rp->init_data, 0, sizeof(rp->init_data)); in raw3270_read_modified()
540 rp->init_readmod.ccw.cmd_code = TC_READMOD; in raw3270_read_modified()
541 rp->init_readmod.ccw.flags = CCW_FLAG_SLI; in raw3270_read_modified()
542 rp->init_readmod.ccw.count = sizeof(rp->init_data); in raw3270_read_modified()
543 rp->init_readmod.ccw.cda = (__u32) __pa(rp->init_data); in raw3270_read_modified()
544 rp->init_readmod.callback = raw3270_read_modified_cb; in raw3270_read_modified()
545 rp->state = RAW3270_STATE_READMOD; in raw3270_read_modified()
546 raw3270_start_irq(&rp->init_view, &rp->init_readmod); in raw3270_read_modified()
550 raw3270_writesf_readpart(struct raw3270 *rp) in raw3270_writesf_readpart() argument
556 memset(&rp->init_readpart, 0, sizeof(rp->init_readpart)); in raw3270_writesf_readpart()
557 memset(&rp->init_data, 0, sizeof(rp->init_data)); in raw3270_writesf_readpart()
558 memcpy(&rp->init_data, wbuf, sizeof(wbuf)); in raw3270_writesf_readpart()
559 rp->init_readpart.ccw.cmd_code = TC_WRITESF; in raw3270_writesf_readpart()
560 rp->init_readpart.ccw.flags = CCW_FLAG_SLI; in raw3270_writesf_readpart()
561 rp->init_readpart.ccw.count = sizeof(wbuf); in raw3270_writesf_readpart()
562 rp->init_readpart.ccw.cda = (__u32) __pa(&rp->init_data); in raw3270_writesf_readpart()
563 rp->state = RAW3270_STATE_W4ATTN; in raw3270_writesf_readpart()
564 raw3270_start_irq(&rp->init_view, &rp->init_readpart); in raw3270_writesf_readpart()
573 struct raw3270 *rp = rq->view->dev; in raw3270_reset_device_cb() local
575 if (rp->state != RAW3270_STATE_RESET) in raw3270_reset_device_cb()
579 rp->state = RAW3270_STATE_INIT; in raw3270_reset_device_cb()
581 raw3270_size_device_vm(rp); in raw3270_reset_device_cb()
582 raw3270_size_device_done(rp); in raw3270_reset_device_cb()
584 raw3270_writesf_readpart(rp); in raw3270_reset_device_cb()
585 memset(&rp->init_reset, 0, sizeof(rp->init_reset)); in raw3270_reset_device_cb()
589 __raw3270_reset_device(struct raw3270 *rp) in __raw3270_reset_device() argument
594 if (rp->init_reset.view) in __raw3270_reset_device()
597 rp->init_data[0] = TW_KR; in __raw3270_reset_device()
598 rp->init_reset.ccw.cmd_code = TC_EWRITEA; in __raw3270_reset_device()
599 rp->init_reset.ccw.flags = CCW_FLAG_SLI; in __raw3270_reset_device()
600 rp->init_reset.ccw.count = 1; in __raw3270_reset_device()
601 rp->init_reset.ccw.cda = (__u32) __pa(rp->init_data); in __raw3270_reset_device()
602 rp->init_reset.callback = raw3270_reset_device_cb; in __raw3270_reset_device()
603 rc = __raw3270_start(rp, &rp->init_view, &rp->init_reset); in __raw3270_reset_device()
604 if (rc == 0 && rp->state == RAW3270_STATE_INIT) in __raw3270_reset_device()
605 rp->state = RAW3270_STATE_RESET; in __raw3270_reset_device()
610 raw3270_reset_device(struct raw3270 *rp) in raw3270_reset_device() argument
615 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_reset_device()
616 rc = __raw3270_reset_device(rp); in raw3270_reset_device()
617 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_reset_device()
624 struct raw3270 *rp; in raw3270_reset() local
627 rp = view->dev; in raw3270_reset()
628 if (!rp || rp->view != view) in raw3270_reset()
630 else if (!raw3270_state_ready(rp)) in raw3270_reset()
638 __raw3270_disconnect(struct raw3270 *rp) in __raw3270_disconnect() argument
643 rp->state = RAW3270_STATE_INIT; in __raw3270_disconnect()
644 rp->view = &rp->init_view; in __raw3270_disconnect()
646 while (!list_empty(&rp->req_queue)) { in __raw3270_disconnect()
647 rq = list_entry(rp->req_queue.next,struct raw3270_request,list); in __raw3270_disconnect()
656 __raw3270_reset_device(rp); in __raw3270_disconnect()
663 struct raw3270 *rp; in raw3270_init_irq() local
675 rp = view->dev; in raw3270_init_irq()
676 raw3270_read_modified(rp); in raw3270_init_irq()
688 raw3270_setup_device(struct ccw_device *cdev, struct raw3270 *rp, char *ascebc) in raw3270_setup_device() argument
694 memset(rp, 0, sizeof(struct raw3270)); in raw3270_setup_device()
703 rp->ascebc = ascebc; in raw3270_setup_device()
706 rp->rows = 24; in raw3270_setup_device()
707 rp->cols = 80; in raw3270_setup_device()
709 INIT_LIST_HEAD(&rp->req_queue); in raw3270_setup_device()
710 INIT_LIST_HEAD(&rp->view_list); in raw3270_setup_device()
712 rp->init_view.dev = rp; in raw3270_setup_device()
713 rp->init_view.fn = &raw3270_init_fn; in raw3270_setup_device()
714 rp->view = &rp->init_view; in raw3270_setup_device()
724 rp->minor = -1; in raw3270_setup_device()
728 rp->minor = minor; in raw3270_setup_device()
729 __list_add(&rp->list, l->prev, l); in raw3270_setup_device()
734 if (rp->minor == -1 && minor < RAW3270_MAXDEVS + RAW3270_FIRSTMINOR) { in raw3270_setup_device()
735 rp->minor = minor; in raw3270_setup_device()
736 list_add_tail(&rp->list, &raw3270_devices); in raw3270_setup_device()
740 if (rp->minor == -1) in raw3270_setup_device()
742 rp->cdev = cdev; in raw3270_setup_device()
743 dev_set_drvdata(&cdev->dev, rp); in raw3270_setup_device()
759 struct raw3270 *rp; in raw3270_setup_console() local
767 rp = kzalloc(sizeof(struct raw3270), GFP_KERNEL | GFP_DMA); in raw3270_setup_console()
769 rc = raw3270_setup_device(cdev, rp, ascebc); in raw3270_setup_console()
772 set_bit(RAW3270_FLAGS_CONSOLE, &rp->flags); in raw3270_setup_console()
780 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_setup_console()
782 __raw3270_reset_device(rp); in raw3270_setup_console()
783 while (!raw3270_state_final(rp)) { in raw3270_setup_console()
784 ccw_device_wait_idle(rp->cdev); in raw3270_setup_console()
787 } while (rp->state != RAW3270_STATE_READY); in raw3270_setup_console()
788 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_setup_console()
789 return rp; in raw3270_setup_console()
793 raw3270_wait_cons_dev(struct raw3270 *rp) in raw3270_wait_cons_dev() argument
797 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_wait_cons_dev()
798 ccw_device_wait_idle(rp->cdev); in raw3270_wait_cons_dev()
799 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_wait_cons_dev()
810 struct raw3270 *rp; in raw3270_create_device() local
814 rp = kzalloc(sizeof(struct raw3270), GFP_KERNEL | GFP_DMA); in raw3270_create_device()
815 if (!rp) in raw3270_create_device()
819 kfree(rp); in raw3270_create_device()
822 rc = raw3270_setup_device(cdev, rp, ascebc); in raw3270_create_device()
824 kfree(rp->ascebc); in raw3270_create_device()
825 kfree(rp); in raw3270_create_device()
826 rp = ERR_PTR(rc); in raw3270_create_device()
830 return rp; in raw3270_create_device()
839 struct raw3270 *rp; in raw3270_activate_view() local
844 rp = view->dev; in raw3270_activate_view()
845 if (!rp) in raw3270_activate_view()
847 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_activate_view()
848 if (rp->view == view) in raw3270_activate_view()
850 else if (!raw3270_state_ready(rp)) in raw3270_activate_view()
854 if (rp->view && rp->view->fn->deactivate) { in raw3270_activate_view()
855 oldview = rp->view; in raw3270_activate_view()
858 rp->view = view; in raw3270_activate_view()
862 rp->view = oldview; in raw3270_activate_view()
865 list_for_each_entry(nv, &rp->view_list, list) in raw3270_activate_view()
867 rp->view = nv; in raw3270_activate_view()
870 rp->view = NULL; in raw3270_activate_view()
875 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_activate_view()
886 struct raw3270 *rp; in raw3270_deactivate_view() local
888 rp = view->dev; in raw3270_deactivate_view()
889 if (!rp) in raw3270_deactivate_view()
891 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_deactivate_view()
892 if (rp->view == view) { in raw3270_deactivate_view()
894 rp->view = NULL; in raw3270_deactivate_view()
897 list_add_tail(&view->list, &rp->view_list); in raw3270_deactivate_view()
899 if (raw3270_state_ready(rp)) { in raw3270_deactivate_view()
900 list_for_each_entry(view, &rp->view_list, list) { in raw3270_deactivate_view()
901 rp->view = view; in raw3270_deactivate_view()
904 rp->view = NULL; in raw3270_deactivate_view()
908 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_deactivate_view()
918 struct raw3270 *rp; in raw3270_add_view() local
925 list_for_each_entry(rp, &raw3270_devices, list) { in raw3270_add_view()
926 if (rp->minor != minor) in raw3270_add_view()
928 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_add_view()
930 view->dev = rp; in raw3270_add_view()
932 view->model = rp->model; in raw3270_add_view()
933 view->rows = rp->rows; in raw3270_add_view()
934 view->cols = rp->cols; in raw3270_add_view()
935 view->ascebc = rp->ascebc; in raw3270_add_view()
938 list_add(&view->list, &rp->view_list); in raw3270_add_view()
940 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_add_view()
953 struct raw3270 *rp; in raw3270_find_view() local
959 list_for_each_entry(rp, &raw3270_devices, list) { in raw3270_find_view()
960 if (rp->minor != minor) in raw3270_find_view()
962 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_find_view()
963 list_for_each_entry(tmp, &rp->view_list, list) { in raw3270_find_view()
970 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_find_view()
984 struct raw3270 *rp; in raw3270_del_view() local
987 rp = view->dev; in raw3270_del_view()
988 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags); in raw3270_del_view()
989 if (rp->view == view) { in raw3270_del_view()
991 rp->view = NULL; in raw3270_del_view()
994 if (!rp->view && raw3270_state_ready(rp)) { in raw3270_del_view()
996 list_for_each_entry(nv, &rp->view_list, list) { in raw3270_del_view()
998 rp->view = nv; in raw3270_del_view()
1003 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags); in raw3270_del_view()
1015 raw3270_delete_device(struct raw3270 *rp) in raw3270_delete_device() argument
1021 list_del_init(&rp->list); in raw3270_delete_device()
1025 cdev = rp->cdev; in raw3270_delete_device()
1026 rp->cdev = NULL; in raw3270_delete_device()
1034 kfree(rp->ascebc); in raw3270_delete_device()
1035 kfree(rp); in raw3270_delete_device()
1082 static int raw3270_create_attributes(struct raw3270 *rp) in raw3270_create_attributes() argument
1084 return sysfs_create_group(&rp->cdev->dev.kobj, &raw3270_attr_group); in raw3270_create_attributes()
1094 struct raw3270 *rp; in raw3270_register_notifier() local
1098 list_for_each_entry(rp, &raw3270_devices, list) in raw3270_register_notifier()
1099 notifier->create(rp->minor); in raw3270_register_notifier()
1106 struct raw3270 *rp; in raw3270_unregister_notifier() local
1109 list_for_each_entry(rp, &raw3270_devices, list) in raw3270_unregister_notifier()
1110 notifier->destroy(rp->minor); in raw3270_unregister_notifier()
1122 struct raw3270 *rp; in raw3270_set_online() local
1125 rp = raw3270_create_device(cdev); in raw3270_set_online()
1126 if (IS_ERR(rp)) in raw3270_set_online()
1127 return PTR_ERR(rp); in raw3270_set_online()
1128 rc = raw3270_create_attributes(rp); in raw3270_set_online()
1131 raw3270_reset_device(rp); in raw3270_set_online()
1134 np->create(rp->minor); in raw3270_set_online()
1139 raw3270_delete_device(rp); in raw3270_set_online()
1150 struct raw3270 *rp; in raw3270_remove() local
1154 rp = dev_get_drvdata(&cdev->dev); in raw3270_remove()
1157 * should set up rp. raw3270_remove gets entered for in raw3270_remove()
1159 * Thus, rp may validly be NULL here. in raw3270_remove()
1161 if (rp == NULL) in raw3270_remove()
1168 if (rp->view) { in raw3270_remove()
1169 if (rp->view->fn->deactivate) in raw3270_remove()
1170 rp->view->fn->deactivate(rp->view); in raw3270_remove()
1171 rp->view = NULL; in raw3270_remove()
1173 while (!list_empty(&rp->view_list)) { in raw3270_remove()
1174 v = list_entry(rp->view_list.next, struct raw3270_view, list); in raw3270_remove()
1185 np->destroy(rp->minor); in raw3270_remove()
1189 raw3270_reset_device(rp); in raw3270_remove()
1191 raw3270_delete_device(rp); in raw3270_remove()
1200 struct raw3270 *rp; in raw3270_set_offline() local
1202 rp = dev_get_drvdata(&cdev->dev); in raw3270_set_offline()
1203 if (test_bit(RAW3270_FLAGS_CONSOLE, &rp->flags)) in raw3270_set_offline()
1240 struct raw3270 *rp; in raw3270_init() local
1251 list_for_each_entry(rp, &raw3270_devices, list) { in raw3270_init()
1252 get_device(&rp->cdev->dev); in raw3270_init()
1253 raw3270_create_attributes(rp); in raw3270_init()