Lines Matching refs:rp

94 static void __raw3270_disconnect(struct raw3270 *rp);
110 static inline int raw3270_state_ready(struct raw3270 *rp)
112 return rp->state == RAW3270_STATE_READY;
115 static inline int raw3270_state_final(struct raw3270 *rp)
117 return rp->state == RAW3270_STATE_INIT ||
118 rp->state == RAW3270_STATE_READY;
122 raw3270_buffer_address(struct raw3270 *rp, char *cp, unsigned short addr)
124 if (test_bit(RAW3270_FLAGS_14BITADDR, &rp->flags)) {
239 __raw3270_start(struct raw3270 *rp, struct raw3270_view *view,
244 if (list_empty(&rp->req_queue) &&
245 !test_bit(RAW3270_FLAGS_BUSY, &rp->flags)) {
247 rq->rc = ccw_device_start(rp->cdev, &rq->ccw,
254 list_add_tail(&rq->list, &rp->req_queue);
261 struct raw3270 *rp = view->dev;
263 return rp && rp->view == view &&
264 !test_bit(RAW3270_FLAGS_FROZEN, &rp->flags);
271 struct raw3270 *rp;
275 rp = view->dev;
276 if (!rp || rp->view != view ||
277 test_bit(RAW3270_FLAGS_FROZEN, &rp->flags))
279 else if (!raw3270_state_ready(rp))
282 rc = __raw3270_start(rp, view, rq);
290 struct raw3270 *rp;
293 rp = view->dev;
294 if (!rp || rp->view != view ||
295 test_bit(RAW3270_FLAGS_FROZEN, &rp->flags))
297 else if (!raw3270_state_ready(rp))
300 rc = __raw3270_start(rp, view, rq);
307 struct raw3270 *rp;
309 rp = view->dev;
312 list_add_tail(&rq->list, &rp->req_queue);
322 struct raw3270 *rp;
326 rp = dev_get_drvdata(&cdev->dev);
327 if (!rp)
330 view = rq ? rq->view : rp->view;
335 clear_bit(RAW3270_FLAGS_BUSY, &rp->flags);
339 set_bit(RAW3270_FLAGS_BUSY, &rp->flags);
343 set_bit(RAW3270_FLAGS_BUSY, &rp->flags);
344 if (rp->state > RAW3270_STATE_RESET)
345 __raw3270_disconnect(rp);
352 if (test_bit(RAW3270_FLAGS_BUSY, &rp->flags))
369 while (!list_empty(&rp->req_queue)) {
370 rq = list_entry(rp->req_queue.next,struct raw3270_request,list);
371 rq->rc = ccw_device_start(rp->cdev, &rq->ccw,
429 raw3270_size_device_vm(struct raw3270 *rp)
435 ccw_device_get_id(rp->cdev, &dev_id);
445 rp->model = model;
446 rp->rows = 24;
447 rp->cols = 80;
450 rp->model = model;
451 rp->rows = 32;
452 rp->cols = 80;
455 rp->model = model;
456 rp->rows = 43;
457 rp->cols = 80;
460 rp->model = model;
461 rp->rows = 27;
462 rp->cols = 132;
468 raw3270_size_device(struct raw3270 *rp)
473 uap = (struct raw3270_ua *) (rp->init_data + 1);
475 if (rp->init_readmod.rc || rp->init_data[0] != 0x88 ||
478 rp->model = 2;
479 rp->rows = 24;
480 rp->cols = 80;
484 rp->rows = uap->uab.h;
485 rp->cols = uap->uab.w;
488 set_bit(RAW3270_FLAGS_14BITADDR, &rp->flags);
492 rp->rows = uap->aua.hauai;
493 rp->cols = uap->aua.wauai;
496 rp->model = 0;
497 if (rp->rows == 24 && rp->cols == 80)
498 rp->model = 2;
499 if (rp->rows == 32 && rp->cols == 80)
500 rp->model = 3;
501 if (rp->rows == 43 && rp->cols == 80)
502 rp->model = 4;
503 if (rp->rows == 27 && rp->cols == 132)
504 rp->model = 5;
508 raw3270_size_device_done(struct raw3270 *rp)
512 rp->view = NULL;
513 rp->state = RAW3270_STATE_READY;
515 list_for_each_entry(view, &rp->view_list, list)
517 view->fn->resize(view, rp->model, rp->rows, rp->cols);
519 list_for_each_entry(view, &rp->view_list, list) {
520 rp->view = view;
523 rp->view = NULL;
530 struct raw3270 *rp = rq->view->dev;
532 raw3270_size_device(rp);
533 raw3270_size_device_done(rp);
537 raw3270_read_modified(struct raw3270 *rp)
539 if (rp->state != RAW3270_STATE_W4ATTN)
542 memset(&rp->init_readmod, 0, sizeof(rp->init_readmod));
543 memset(&rp->init_data, 0, sizeof(rp->init_data));
544 rp->init_readmod.ccw.cmd_code = TC_READMOD;
545 rp->init_readmod.ccw.flags = CCW_FLAG_SLI;
546 rp->init_readmod.ccw.count = sizeof(rp->init_data);
547 rp->init_readmod.ccw.cda = (__u32) __pa(rp->init_data);
548 rp->init_readmod.callback = raw3270_read_modified_cb;
549 rp->state = RAW3270_STATE_READMOD;
550 raw3270_start_irq(&rp->init_view, &rp->init_readmod);
554 raw3270_writesf_readpart(struct raw3270 *rp)
560 memset(&rp->init_readpart, 0, sizeof(rp->init_readpart));
561 memset(&rp->init_data, 0, sizeof(rp->init_data));
562 memcpy(&rp->init_data, wbuf, sizeof(wbuf));
563 rp->init_readpart.ccw.cmd_code = TC_WRITESF;
564 rp->init_readpart.ccw.flags = CCW_FLAG_SLI;
565 rp->init_readpart.ccw.count = sizeof(wbuf);
566 rp->init_readpart.ccw.cda = (__u32) __pa(&rp->init_data);
567 rp->state = RAW3270_STATE_W4ATTN;
568 raw3270_start_irq(&rp->init_view, &rp->init_readpart);
577 struct raw3270 *rp = rq->view->dev;
579 if (rp->state != RAW3270_STATE_RESET)
583 rp->state = RAW3270_STATE_INIT;
585 raw3270_size_device_vm(rp);
586 raw3270_size_device_done(rp);
588 raw3270_writesf_readpart(rp);
589 memset(&rp->init_reset, 0, sizeof(rp->init_reset));
593 __raw3270_reset_device(struct raw3270 *rp)
598 if (rp->init_reset.view)
601 rp->init_data[0] = TW_KR;
602 rp->init_reset.ccw.cmd_code = TC_EWRITEA;
603 rp->init_reset.ccw.flags = CCW_FLAG_SLI;
604 rp->init_reset.ccw.count = 1;
605 rp->init_reset.ccw.cda = (__u32) __pa(rp->init_data);
606 rp->init_reset.callback = raw3270_reset_device_cb;
607 rc = __raw3270_start(rp, &rp->init_view, &rp->init_reset);
608 if (rc == 0 && rp->state == RAW3270_STATE_INIT)
609 rp->state = RAW3270_STATE_RESET;
614 raw3270_reset_device(struct raw3270 *rp)
619 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
620 rc = __raw3270_reset_device(rp);
621 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
628 struct raw3270 *rp;
631 rp = view->dev;
632 if (!rp || rp->view != view ||
633 test_bit(RAW3270_FLAGS_FROZEN, &rp->flags))
635 else if (!raw3270_state_ready(rp))
643 __raw3270_disconnect(struct raw3270 *rp)
648 rp->state = RAW3270_STATE_INIT;
649 rp->view = &rp->init_view;
651 while (!list_empty(&rp->req_queue)) {
652 rq = list_entry(rp->req_queue.next,struct raw3270_request,list);
661 __raw3270_reset_device(rp);
668 struct raw3270 *rp;
680 rp = view->dev;
681 raw3270_read_modified(rp);
693 raw3270_setup_device(struct ccw_device *cdev, struct raw3270 *rp, char *ascebc)
699 memset(rp, 0, sizeof(struct raw3270));
708 rp->ascebc = ascebc;
711 rp->rows = 24;
712 rp->cols = 80;
714 INIT_LIST_HEAD(&rp->req_queue);
715 INIT_LIST_HEAD(&rp->view_list);
717 rp->init_view.dev = rp;
718 rp->init_view.fn = &raw3270_init_fn;
719 rp->view = &rp->init_view;
729 rp->minor = -1;
733 rp->minor = minor;
734 __list_add(&rp->list, l->prev, l);
739 if (rp->minor == -1 && minor < RAW3270_MAXDEVS + RAW3270_FIRSTMINOR) {
740 rp->minor = minor;
741 list_add_tail(&rp->list, &raw3270_devices);
745 if (rp->minor == -1)
747 rp->cdev = cdev;
748 dev_set_drvdata(&cdev->dev, rp);
764 struct raw3270 *rp;
772 rp = kzalloc(sizeof(struct raw3270), GFP_KERNEL | GFP_DMA);
774 rc = raw3270_setup_device(cdev, rp, ascebc);
777 set_bit(RAW3270_FLAGS_CONSOLE, &rp->flags);
785 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
787 __raw3270_reset_device(rp);
788 while (!raw3270_state_final(rp)) {
789 ccw_device_wait_idle(rp->cdev);
792 } while (rp->state != RAW3270_STATE_READY);
793 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
794 return rp;
798 raw3270_wait_cons_dev(struct raw3270 *rp)
802 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
803 ccw_device_wait_idle(rp->cdev);
804 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
815 struct raw3270 *rp;
819 rp = kzalloc(sizeof(struct raw3270), GFP_KERNEL | GFP_DMA);
820 if (!rp)
824 kfree(rp);
827 rc = raw3270_setup_device(cdev, rp, ascebc);
829 kfree(rp->ascebc);
830 kfree(rp);
831 rp = ERR_PTR(rc);
835 return rp;
844 struct raw3270 *rp;
849 rp = view->dev;
850 if (!rp)
852 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
853 if (rp->view == view)
855 else if (!raw3270_state_ready(rp))
857 else if (test_bit(RAW3270_FLAGS_FROZEN, &rp->flags))
861 if (rp->view && rp->view->fn->deactivate) {
862 oldview = rp->view;
865 rp->view = view;
869 rp->view = oldview;
872 list_for_each_entry(nv, &rp->view_list, list)
874 rp->view = nv;
877 rp->view = NULL;
882 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
893 struct raw3270 *rp;
895 rp = view->dev;
896 if (!rp)
898 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
899 if (rp->view == view) {
901 rp->view = NULL;
904 list_add_tail(&view->list, &rp->view_list);
906 if (raw3270_state_ready(rp) &&
907 !test_bit(RAW3270_FLAGS_FROZEN, &rp->flags)) {
908 list_for_each_entry(view, &rp->view_list, list) {
909 rp->view = view;
912 rp->view = NULL;
916 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
926 struct raw3270 *rp;
933 list_for_each_entry(rp, &raw3270_devices, list) {
934 if (rp->minor != minor)
936 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
938 view->dev = rp;
940 view->model = rp->model;
941 view->rows = rp->rows;
942 view->cols = rp->cols;
943 view->ascebc = rp->ascebc;
946 list_add(&view->list, &rp->view_list);
948 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
961 struct raw3270 *rp;
967 list_for_each_entry(rp, &raw3270_devices, list) {
968 if (rp->minor != minor)
970 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
971 list_for_each_entry(tmp, &rp->view_list, list) {
978 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
992 struct raw3270 *rp;
995 rp = view->dev;
996 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
997 if (rp->view == view) {
999 rp->view = NULL;
1002 if (!rp->view && raw3270_state_ready(rp) &&
1003 !test_bit(RAW3270_FLAGS_FROZEN, &rp->flags)) {
1005 list_for_each_entry(nv, &rp->view_list, list) {
1007 rp->view = nv;
1012 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
1024 raw3270_delete_device(struct raw3270 *rp)
1030 list_del_init(&rp->list);
1034 cdev = rp->cdev;
1035 rp->cdev = NULL;
1043 kfree(rp->ascebc);
1044 kfree(rp);
1091 static int raw3270_create_attributes(struct raw3270 *rp)
1093 return sysfs_create_group(&rp->cdev->dev.kobj, &raw3270_attr_group);
1103 struct raw3270 *rp;
1107 list_for_each_entry(rp, &raw3270_devices, list)
1108 notifier->create(rp->minor);
1115 struct raw3270 *rp;
1118 list_for_each_entry(rp, &raw3270_devices, list)
1119 notifier->destroy(rp->minor);
1131 struct raw3270 *rp;
1134 rp = raw3270_create_device(cdev);
1135 if (IS_ERR(rp))
1136 return PTR_ERR(rp);
1137 rc = raw3270_create_attributes(rp);
1140 raw3270_reset_device(rp);
1143 np->create(rp->minor);
1148 raw3270_delete_device(rp);
1159 struct raw3270 *rp;
1163 rp = dev_get_drvdata(&cdev->dev);
1166 * should set up rp. raw3270_remove gets entered for
1168 * Thus, rp may validly be NULL here.
1170 if (rp == NULL)
1177 if (rp->view) {
1178 if (rp->view->fn->deactivate)
1179 rp->view->fn->deactivate(rp->view);
1180 rp->view = NULL;
1182 while (!list_empty(&rp->view_list)) {
1183 v = list_entry(rp->view_list.next, struct raw3270_view, list);
1194 np->destroy(rp->minor);
1198 raw3270_reset_device(rp);
1200 raw3270_delete_device(rp);
1209 struct raw3270 *rp;
1211 rp = dev_get_drvdata(&cdev->dev);
1212 if (test_bit(RAW3270_FLAGS_CONSOLE, &rp->flags))
1220 struct raw3270 *rp;
1224 rp = dev_get_drvdata(&cdev->dev);
1225 if (!rp)
1227 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
1228 if (rp->view && rp->view->fn->deactivate)
1229 rp->view->fn->deactivate(rp->view);
1230 if (!test_bit(RAW3270_FLAGS_CONSOLE, &rp->flags)) {
1235 list_for_each_entry(view, &rp->view_list, list) {
1240 set_bit(RAW3270_FLAGS_FROZEN, &rp->flags);
1241 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
1247 struct raw3270 *rp;
1250 rp = dev_get_drvdata(&cdev->dev);
1251 if (!rp)
1253 spin_lock_irqsave(get_ccwdev_lock(rp->cdev), flags);
1254 clear_bit(RAW3270_FLAGS_FROZEN, &rp->flags);
1255 if (rp->view && rp->view->fn->activate)
1256 rp->view->fn->activate(rp->view);
1257 spin_unlock_irqrestore(get_ccwdev_lock(rp->cdev), flags);
1264 struct raw3270 *rp;
1266 rp = view->dev;
1267 if (rp && test_bit(RAW3270_FLAGS_FROZEN, &rp->flags))
1268 ccw_device_force_console(rp->cdev);
1306 struct raw3270 *rp;
1317 list_for_each_entry(rp, &raw3270_devices, list) {
1318 get_device(&rp->cdev->dev);
1319 raw3270_create_attributes(rp);