Lines Matching refs:tp

140 static void tty3270_set_timer(struct tty3270 *tp, int expires)  in tty3270_set_timer()  argument
142 mod_timer(&tp->timer, jiffies + expires); in tty3270_set_timer()
145 static int tty3270_tty_rows(struct tty3270 *tp) in tty3270_tty_rows() argument
147 return tp->view.rows - TTY3270_INPUT_AREA_ROWS; in tty3270_tty_rows()
150 static char *tty3270_add_ba(struct tty3270 *tp, char *cp, char order, int x, int y) in tty3270_add_ba() argument
153 raw3270_buffer_address(tp->view.dev, cp, x, y); in tty3270_add_ba()
157 static char *tty3270_add_ra(struct tty3270 *tp, char *cp, int x, int y, char c) in tty3270_add_ra() argument
159 cp = tty3270_add_ba(tp, cp, TO_RA, x, y); in tty3270_add_ra()
164 static char *tty3270_add_sa(struct tty3270 *tp, char *cp, char attr, char value) in tty3270_add_sa() argument
172 static char *tty3270_add_ge(struct tty3270 *tp, char *cp, char c) in tty3270_add_ge() argument
179 static char *tty3270_add_sf(struct tty3270 *tp, char *cp, char type) in tty3270_add_sf() argument
186 static int tty3270_line_increment(struct tty3270 *tp, unsigned int line, unsigned int incr) in tty3270_line_increment() argument
188 return (line + incr) & (tp->allocated_lines - 1); in tty3270_line_increment()
191 static struct tty3270_line *tty3270_get_write_line(struct tty3270 *tp, unsigned int num) in tty3270_get_write_line() argument
193 return tp->screen + tty3270_line_increment(tp, tp->line_write_start, num); in tty3270_get_write_line()
196 static struct tty3270_line *tty3270_get_view_line(struct tty3270 *tp, unsigned int num) in tty3270_get_view_line() argument
198 return tp->screen + tty3270_line_increment(tp, tp->line_view_start, num - tp->nr_up); in tty3270_get_view_line()
206 static void tty3270_update_prompt(struct tty3270 *tp, char *input) in tty3270_update_prompt() argument
208 strcpy(tp->prompt, input); in tty3270_update_prompt()
209 tp->update_flags |= TTY_UPDATE_INPUT; in tty3270_update_prompt()
210 tty3270_set_timer(tp, 1); in tty3270_update_prompt()
216 static int tty3270_add_prompt(struct tty3270 *tp) in tty3270_add_prompt() argument
221 cp = tp->converted_line; in tty3270_add_prompt()
222 cp = tty3270_add_ba(tp, cp, TO_SBA, 0, -2); in tty3270_add_prompt()
223 *cp++ = tp->view.ascebc['>']; in tty3270_add_prompt()
225 if (*tp->prompt) { in tty3270_add_prompt()
226 cp = tty3270_add_sf(tp, cp, TF_INMDT); in tty3270_add_prompt()
227 count = min_t(int, strlen(tp->prompt), in tty3270_add_prompt()
228 tp->view.cols * 2 - TTY3270_STATUS_AREA_SIZE - 2); in tty3270_add_prompt()
229 memcpy(cp, tp->prompt, count); in tty3270_add_prompt()
232 cp = tty3270_add_sf(tp, cp, tp->inattr); in tty3270_add_prompt()
236 if (count < tp->view.cols * 2 - 11) in tty3270_add_prompt()
237 cp = tty3270_add_ra(tp, cp, -TTY3270_STATUS_AREA_SIZE, -1, 0); in tty3270_add_prompt()
238 return cp - tp->converted_line; in tty3270_add_prompt()
241 static char *tty3270_ebcdic_convert(struct tty3270 *tp, char *d, char *s) in tty3270_ebcdic_convert() argument
244 *d++ = tp->view.ascebc[(int)*s++]; in tty3270_ebcdic_convert()
252 static int tty3270_add_status(struct tty3270 *tp) in tty3270_add_status() argument
254 char *cp = tp->converted_line; in tty3270_add_status()
257 cp = tty3270_add_ba(tp, cp, TO_SBA, -TTY3270_STATUS_AREA_SIZE, -1); in tty3270_add_status()
258 cp = tty3270_add_sf(tp, cp, TF_LOG); in tty3270_add_status()
259 cp = tty3270_add_sa(tp, cp, TAT_FGCOLOR, TAC_GREEN); in tty3270_add_status()
260 cp = tty3270_ebcdic_convert(tp, cp, " 7"); in tty3270_add_status()
261 cp = tty3270_add_sa(tp, cp, TAT_EXTHI, TAX_REVER); in tty3270_add_status()
262 cp = tty3270_ebcdic_convert(tp, cp, "PrevPg"); in tty3270_add_status()
263 cp = tty3270_add_sa(tp, cp, TAT_EXTHI, TAX_RESET); in tty3270_add_status()
264 cp = tty3270_ebcdic_convert(tp, cp, " 8"); in tty3270_add_status()
265 cp = tty3270_add_sa(tp, cp, TAT_EXTHI, TAX_REVER); in tty3270_add_status()
266 cp = tty3270_ebcdic_convert(tp, cp, "NextPg"); in tty3270_add_status()
267 cp = tty3270_add_sa(tp, cp, TAT_EXTHI, TAX_RESET); in tty3270_add_status()
268 cp = tty3270_ebcdic_convert(tp, cp, " 12"); in tty3270_add_status()
269 cp = tty3270_add_sa(tp, cp, TAT_EXTHI, TAX_REVER); in tty3270_add_status()
270 cp = tty3270_ebcdic_convert(tp, cp, "Recall"); in tty3270_add_status()
271 cp = tty3270_add_sa(tp, cp, TAT_EXTHI, TAX_RESET); in tty3270_add_status()
272 cp = tty3270_ebcdic_convert(tp, cp, " "); in tty3270_add_status()
273 if (tp->nr_up) { in tty3270_add_status()
274 len = sprintf(cp, "History %d", -tp->nr_up); in tty3270_add_status()
275 codepage_convert(tp->view.ascebc, cp, len); in tty3270_add_status()
278 cp = tty3270_ebcdic_convert(tp, cp, oops_in_progress ? "Crashed" : "Running"); in tty3270_add_status()
280 cp = tty3270_add_sf(tp, cp, TF_LOG); in tty3270_add_status()
281 cp = tty3270_add_sa(tp, cp, TAT_FGCOLOR, TAC_RESET); in tty3270_add_status()
282 return cp - (char *)tp->converted_line; in tty3270_add_status()
285 static void tty3270_blank_screen(struct tty3270 *tp) in tty3270_blank_screen() argument
290 for (i = 0; i < tty3270_tty_rows(tp); i++) { in tty3270_blank_screen()
291 line = tty3270_get_write_line(tp, i); in tty3270_blank_screen()
295 tp->nr_up = 0; in tty3270_blank_screen()
303 struct tty3270 *tp = container_of(rq->view, struct tty3270, view); in tty3270_write_callback() local
307 tp->update_flags = TTY_UPDATE_ALL; in tty3270_write_callback()
308 tty3270_set_timer(tp, 1); in tty3270_write_callback()
311 xchg(&tp->write, rq); in tty3270_write_callback()
314 static int tty3270_required_length(struct tty3270 *tp, struct tty3270_line *line) in tty3270_required_length() argument
347 if (line->len < tp->view.cols) in tty3270_required_length()
353 static char *tty3270_add_reset_attributes(struct tty3270 *tp, struct tty3270_line *line, in tty3270_add_reset_attributes() argument
357 cp = tty3270_add_sa(tp, cp, TAT_EXTHI, TAX_RESET); in tty3270_add_reset_attributes()
359 cp = tty3270_add_sa(tp, cp, TAT_FGCOLOR, TAX_RESET); in tty3270_add_reset_attributes()
361 cp = tty3270_add_sa(tp, cp, TAT_BGCOLOR, TAX_RESET); in tty3270_add_reset_attributes()
362 if (line->len < tp->view.cols) in tty3270_add_reset_attributes()
363 cp = tty3270_add_ra(tp, cp, 0, lineno + 1, 0); in tty3270_add_reset_attributes()
367 static char tty3270_graphics_translate(struct tty3270 *tp, char ch) in tty3270_graphics_translate() argument
397 static char *tty3270_add_attributes(struct tty3270 *tp, struct tty3270_line *line, in tty3270_add_attributes() argument
421 cp = tty3270_add_ba(tp, cp, TO_SBA, 0, lineno); in tty3270_add_attributes()
426 cp = tty3270_add_sa(tp, cp, TAT_EXTHI, highlights[attr->highlight]); in tty3270_add_attributes()
430 cp = tty3270_add_sa(tp, cp, TAT_FGCOLOR, colors[attr->f_color]); in tty3270_add_attributes()
434 cp = tty3270_add_sa(tp, cp, TAT_BGCOLOR, colors[attr->b_color]); in tty3270_add_attributes()
438 cp = tty3270_add_ge(tp, cp, tty3270_graphics_translate(tp, c)); in tty3270_add_attributes()
440 *cp++ = tp->view.ascebc[c]; in tty3270_add_attributes()
455 static unsigned int tty3270_convert_line(struct tty3270 *tp, struct tty3270_line *line, int lineno) in tty3270_convert_line() argument
462 flen = tty3270_required_length(tp, line); in tty3270_convert_line()
467 cp = tty3270_add_attributes(tp, line, &attr, tp->converted_line, lineno); in tty3270_convert_line()
468 cp = tty3270_add_reset_attributes(tp, line, cp, &attr, lineno); in tty3270_convert_line()
469 return cp - (char *)tp->converted_line; in tty3270_convert_line()
472 static void tty3270_update_lines_visible(struct tty3270 *tp, struct raw3270_request *rq) in tty3270_update_lines_visible() argument
477 for (i = 0; i < tty3270_tty_rows(tp); i++) { in tty3270_update_lines_visible()
478 line = tty3270_get_view_line(tp, i); in tty3270_update_lines_visible()
481 len = tty3270_convert_line(tp, line, i); in tty3270_update_lines_visible()
482 if (raw3270_request_add_data(rq, tp->converted_line, len)) in tty3270_update_lines_visible()
486 if (i == tty3270_tty_rows(tp)) { in tty3270_update_lines_visible()
487 for (i = 0; i < tp->allocated_lines; i++) in tty3270_update_lines_visible()
488 tp->screen[i].dirty = 0; in tty3270_update_lines_visible()
489 tp->update_flags &= ~TTY_UPDATE_LINES; in tty3270_update_lines_visible()
493 static void tty3270_update_lines_all(struct tty3270 *tp, struct raw3270_request *rq) in tty3270_update_lines_all() argument
499 for (i = 0; i < tp->allocated_lines; i++) { in tty3270_update_lines_all()
500 line = tty3270_get_write_line(tp, i + tp->cy + 1); in tty3270_update_lines_all()
503 len = tty3270_convert_line(tp, line, tp->oops_line); in tty3270_update_lines_all()
504 if (raw3270_request_add_data(rq, tp->converted_line, len)) in tty3270_update_lines_all()
507 if (++tp->oops_line >= tty3270_tty_rows(tp)) in tty3270_update_lines_all()
508 tp->oops_line = 0; in tty3270_update_lines_all()
511 if (i == tp->allocated_lines) { in tty3270_update_lines_all()
512 if (tp->oops_line < tty3270_tty_rows(tp)) { in tty3270_update_lines_all()
513 tty3270_add_ra(tp, buf, 0, tty3270_tty_rows(tp), 0); in tty3270_update_lines_all()
517 tp->update_flags &= ~TTY_UPDATE_LINES; in tty3270_update_lines_all()
526 struct tty3270 *tp = from_timer(tp, t, timer); in tty3270_update() local
531 wrq = xchg(&tp->write, 0); in tty3270_update()
533 tty3270_set_timer(tp, 1); in tty3270_update()
537 spin_lock_irq(&tp->view.lock); in tty3270_update()
538 if (tp->update_flags == TTY_UPDATE_ALL) in tty3270_update()
542 raw3270_request_add_data(wrq, &tp->wcc, 1); in tty3270_update()
543 tp->wcc = TW_NONE; in tty3270_update()
548 if (tp->update_flags & TTY_UPDATE_STATUS) { in tty3270_update()
549 len = tty3270_add_status(tp); in tty3270_update()
550 if (raw3270_request_add_data(wrq, tp->converted_line, len) == 0) in tty3270_update()
551 tp->update_flags &= ~TTY_UPDATE_STATUS; in tty3270_update()
557 if (tp->update_flags & TTY_UPDATE_INPUT) { in tty3270_update()
558 len = tty3270_add_prompt(tp); in tty3270_update()
559 if (raw3270_request_add_data(wrq, tp->converted_line, len) == 0) in tty3270_update()
560 tp->update_flags &= ~TTY_UPDATE_INPUT; in tty3270_update()
563 if (tp->update_flags & TTY_UPDATE_LINES) { in tty3270_update()
565 tty3270_update_lines_all(tp, wrq); in tty3270_update()
567 tty3270_update_lines_visible(tp, wrq); in tty3270_update()
571 rc = raw3270_start(&tp->view, wrq); in tty3270_update()
573 if (tp->update_flags) in tty3270_update()
574 tty3270_set_timer(tp, 1); in tty3270_update()
577 xchg(&tp->write, wrq); in tty3270_update()
579 spin_unlock_irq(&tp->view.lock); in tty3270_update()
585 static void tty3270_rcl_add(struct tty3270 *tp, char *input, int len) in tty3270_rcl_add() argument
591 p = tp->rcl_lines[tp->rcl_write_index++]; in tty3270_rcl_add()
592 tp->rcl_write_index &= TTY3270_RECALL_SIZE - 1; in tty3270_rcl_add()
595 tp->rcl_read_index = tp->rcl_write_index; in tty3270_rcl_add()
600 struct tty3270 *tp = container_of(kbd->port, struct tty3270, port); in tty3270_rcl_backward() local
603 spin_lock_irq(&tp->view.lock); in tty3270_rcl_backward()
604 if (tp->inattr == TF_INPUT) { in tty3270_rcl_backward()
606 tp->rcl_read_index--; in tty3270_rcl_backward()
607 tp->rcl_read_index &= TTY3270_RECALL_SIZE - 1; in tty3270_rcl_backward()
608 } while (!*tp->rcl_lines[tp->rcl_read_index] && in tty3270_rcl_backward()
610 tty3270_update_prompt(tp, tp->rcl_lines[tp->rcl_read_index]); in tty3270_rcl_backward()
612 spin_unlock_irq(&tp->view.lock); in tty3270_rcl_backward()
620 struct tty3270 *tp = container_of(kbd->port, struct tty3270, port); in tty3270_exit_tty() local
622 raw3270_deactivate_view(&tp->view); in tty3270_exit_tty()
625 static void tty3270_redraw(struct tty3270 *tp) in tty3270_redraw() argument
629 for (i = 0; i < tty3270_tty_rows(tp); i++) in tty3270_redraw()
630 tty3270_get_view_line(tp, i)->dirty = 1; in tty3270_redraw()
631 tp->update_flags = TTY_UPDATE_ALL; in tty3270_redraw()
632 tty3270_set_timer(tp, 1); in tty3270_redraw()
640 struct tty3270 *tp = container_of(kbd->port, struct tty3270, port); in tty3270_scroll_forward() local
642 spin_lock_irq(&tp->view.lock); in tty3270_scroll_forward()
644 if (tp->nr_up >= tty3270_tty_rows(tp)) in tty3270_scroll_forward()
645 tp->nr_up -= tty3270_tty_rows(tp) / 2; in tty3270_scroll_forward()
647 tp->nr_up = 0; in tty3270_scroll_forward()
648 tty3270_redraw(tp); in tty3270_scroll_forward()
649 spin_unlock_irq(&tp->view.lock); in tty3270_scroll_forward()
657 struct tty3270 *tp = container_of(kbd->port, struct tty3270, port); in tty3270_scroll_backward() local
659 spin_lock_irq(&tp->view.lock); in tty3270_scroll_backward()
660 tp->nr_up += tty3270_tty_rows(tp) / 2; in tty3270_scroll_backward()
661 if (tp->nr_up > tp->allocated_lines - tty3270_tty_rows(tp)) in tty3270_scroll_backward()
662 tp->nr_up = tp->allocated_lines - tty3270_tty_rows(tp); in tty3270_scroll_backward()
663 tty3270_redraw(tp); in tty3270_scroll_backward()
664 spin_unlock_irq(&tp->view.lock); in tty3270_scroll_backward()
674 struct tty3270 *tp = container_of(rrq->view, struct tty3270, view); in tty3270_read_tasklet() local
678 spin_lock_irq(&tp->view.lock); in tty3270_read_tasklet()
686 switch (tp->input[0]) { in tty3270_read_tasklet()
689 input = tp->input + 6; in tty3270_read_tasklet()
690 len = tty3270_input_size(tp->view.cols) - 6 - rrq->rescnt; in tty3270_read_tasklet()
691 if (tp->inattr != TF_INPUTN) in tty3270_read_tasklet()
692 tty3270_rcl_add(tp, input, len); in tty3270_read_tasklet()
693 if (tp->nr_up > 0) in tty3270_read_tasklet()
694 tp->nr_up = 0; in tty3270_read_tasklet()
696 tty3270_update_prompt(tp, ""); in tty3270_read_tasklet()
697 tty3270_set_timer(tp, 1); in tty3270_read_tasklet()
701 tp->update_flags = TTY_UPDATE_ALL; in tty3270_read_tasklet()
702 tty3270_set_timer(tp, 1); in tty3270_read_tasklet()
703 if (!list_empty(&tp->readpartreq->list)) in tty3270_read_tasklet()
705 raw3270_start_request(&tp->view, tp->readpartreq, TC_WRITESF, in tty3270_read_tasklet()
709 raw3270_read_modified_cb(tp->readpartreq, tp->input); in tty3270_read_tasklet()
714 spin_unlock_irq(&tp->view.lock); in tty3270_read_tasklet()
717 raw3270_start_request(&tp->view, tp->kreset, TC_WRITE, &kreset_data, 1); in tty3270_read_tasklet()
720 kbd_keycode(tp->kbd, *input++); in tty3270_read_tasklet()
722 kbd_keycode(tp->kbd, 256 + tp->input[0]); in tty3270_read_tasklet()
725 xchg(&tp->read, rrq); in tty3270_read_tasklet()
726 raw3270_put_view(&tp->view); in tty3270_read_tasklet()
734 struct tty3270 *tp = container_of(rq->view, struct tty3270, view); in tty3270_read_callback() local
738 tasklet_schedule(&tp->readlet); in tty3270_read_callback()
744 static void tty3270_issue_read(struct tty3270 *tp, int lock) in tty3270_issue_read() argument
749 rrq = xchg(&tp->read, 0); in tty3270_issue_read()
754 rrq->callback_data = tp; in tty3270_issue_read()
756 raw3270_request_set_data(rrq, tp->input, tty3270_input_size(tp->view.cols)); in tty3270_issue_read()
759 rc = raw3270_start(&tp->view, rrq); in tty3270_issue_read()
761 rc = raw3270_start_irq(&tp->view, rrq); in tty3270_issue_read()
764 xchg(&tp->read, rrq); in tty3270_issue_read()
773 struct tty3270 *tp = (struct tty3270 *)data; in tty3270_hangup_tasklet() local
775 tty_port_tty_hangup(&tp->port, true); in tty3270_hangup_tasklet()
776 raw3270_put_view(&tp->view); in tty3270_hangup_tasklet()
784 struct tty3270 *tp = container_of(view, struct tty3270, view); in tty3270_activate() local
786 tp->update_flags = TTY_UPDATE_ALL; in tty3270_activate()
787 tty3270_set_timer(tp, 1); in tty3270_activate()
793 struct tty3270 *tp = container_of(view, struct tty3270, view); in tty3270_deactivate() local
795 del_timer(&tp->timer); in tty3270_deactivate()
798 static void tty3270_irq(struct tty3270 *tp, struct raw3270_request *rq, struct irb *irb) in tty3270_irq() argument
802 if (!tp->throttle) in tty3270_irq()
803 tty3270_issue_read(tp, 0); in tty3270_irq()
805 tp->attn = 1; in tty3270_irq()
811 raw3270_get_view(&tp->view); in tty3270_irq()
812 tasklet_schedule(&tp->hanglet); in tty3270_irq()
819 tp->update_flags = TTY_UPDATE_ALL; in tty3270_irq()
820 tty3270_set_timer(tp, 1); in tty3270_irq()
829 struct tty3270 *tp; in tty3270_alloc_view() local
831 tp = kzalloc(sizeof(*tp), GFP_KERNEL); in tty3270_alloc_view()
832 if (!tp) in tty3270_alloc_view()
835 tp->write = raw3270_request_alloc(TTY3270_OUTPUT_BUFFER_SIZE); in tty3270_alloc_view()
836 if (IS_ERR(tp->write)) in tty3270_alloc_view()
838 tp->read = raw3270_request_alloc(0); in tty3270_alloc_view()
839 if (IS_ERR(tp->read)) in tty3270_alloc_view()
841 tp->kreset = raw3270_request_alloc(1); in tty3270_alloc_view()
842 if (IS_ERR(tp->kreset)) in tty3270_alloc_view()
844 tp->readpartreq = raw3270_request_alloc(sizeof(sfq_read_partition)); in tty3270_alloc_view()
845 if (IS_ERR(tp->readpartreq)) in tty3270_alloc_view()
847 tp->kbd = kbd_alloc(); in tty3270_alloc_view()
848 if (!tp->kbd) in tty3270_alloc_view()
851 tty_port_init(&tp->port); in tty3270_alloc_view()
852 timer_setup(&tp->timer, tty3270_update, 0); in tty3270_alloc_view()
853 tasklet_init(&tp->readlet, tty3270_read_tasklet, in tty3270_alloc_view()
854 (unsigned long)tp->read); in tty3270_alloc_view()
855 tasklet_init(&tp->hanglet, tty3270_hangup_tasklet, in tty3270_alloc_view()
856 (unsigned long)tp); in tty3270_alloc_view()
857 return tp; in tty3270_alloc_view()
860 raw3270_request_free(tp->readpartreq); in tty3270_alloc_view()
862 raw3270_request_free(tp->kreset); in tty3270_alloc_view()
864 raw3270_request_free(tp->read); in tty3270_alloc_view()
866 raw3270_request_free(tp->write); in tty3270_alloc_view()
868 kfree(tp); in tty3270_alloc_view()
876 static void tty3270_free_view(struct tty3270 *tp) in tty3270_free_view() argument
878 kbd_free(tp->kbd); in tty3270_free_view()
879 raw3270_request_free(tp->kreset); in tty3270_free_view()
880 raw3270_request_free(tp->read); in tty3270_free_view()
881 raw3270_request_free(tp->write); in tty3270_free_view()
882 free_page((unsigned long)tp->converted_line); in tty3270_free_view()
883 tty_port_destroy(&tp->port); in tty3270_free_view()
884 kfree(tp); in tty3270_free_view()
890 static struct tty3270_line *tty3270_alloc_screen(struct tty3270 *tp, unsigned int rows, in tty3270_alloc_screen() argument
966 struct tty3270 *tp = container_of(view, struct tty3270, view); in tty3270_resize() local
973 int new_allocated, old_allocated = tp->allocated_lines; in tty3270_resize()
978 spin_lock_irq(&tp->view.lock); in tty3270_resize()
979 tty3270_redraw(tp); in tty3270_resize()
980 spin_unlock_irq(&tp->view.lock); in tty3270_resize()
990 screen = tty3270_alloc_screen(tp, new_rows, new_cols, &new_allocated); in tty3270_resize()
998 spin_lock_irq(&tp->view.lock); in tty3270_resize()
999 tty3270_blank_screen(tp); in tty3270_resize()
1000 oscreen = tp->screen; in tty3270_resize()
1001 tp->screen = screen; in tty3270_resize()
1002 tp->allocated_lines = new_allocated; in tty3270_resize()
1003 tp->view.rows = new_rows; in tty3270_resize()
1004 tp->view.cols = new_cols; in tty3270_resize()
1005 tp->view.model = new_model; in tty3270_resize()
1006 tp->update_flags = TTY_UPDATE_ALL; in tty3270_resize()
1007 old_input = tp->input; in tty3270_resize()
1008 old_prompt = tp->prompt; in tty3270_resize()
1009 old_rcl_lines = tp->rcl_lines; in tty3270_resize()
1010 tp->input = new_input; in tty3270_resize()
1011 tp->prompt = new_prompt; in tty3270_resize()
1012 tp->rcl_lines = new_rcl_lines; in tty3270_resize()
1013 tp->rcl_read_index = 0; in tty3270_resize()
1014 tp->rcl_write_index = 0; in tty3270_resize()
1015 spin_unlock_irq(&tp->view.lock); in tty3270_resize()
1020 tty3270_set_timer(tp, 1); in tty3270_resize()
1022 tty = tty_port_tty_get(&tp->port); in tty3270_resize()
1025 ws.ws_row = tty3270_tty_rows(tp); in tty3270_resize()
1026 ws.ws_col = tp->view.cols; in tty3270_resize()
1043 struct tty3270 *tp = container_of(view, struct tty3270, view); in tty3270_release() local
1044 struct tty_struct *tty = tty_port_tty_get(&tp->port); in tty3270_release()
1048 tty_port_tty_set(&tp->port, NULL); in tty3270_release()
1050 raw3270_put_view(&tp->view); in tty3270_release()
1060 struct tty3270 *tp = container_of(view, struct tty3270, view); in tty3270_free() local
1062 del_timer_sync(&tp->timer); in tty3270_free()
1063 tty3270_free_screen(tp->screen, tp->allocated_lines); in tty3270_free()
1064 free_page((unsigned long)tp->converted_line); in tty3270_free()
1065 kfree(tp->input); in tty3270_free()
1066 kfree(tp->prompt); in tty3270_free()
1067 tty3270_free_view(tp); in tty3270_free()
1097 struct tty3270 *tp; in tty3270_create_view() local
1104 tp = tty3270_alloc_view(); in tty3270_create_view()
1105 if (IS_ERR(tp)) in tty3270_create_view()
1106 return PTR_ERR(tp); in tty3270_create_view()
1108 rc = raw3270_add_view(&tp->view, &tty3270_fn, in tty3270_create_view()
1114 tp->screen = tty3270_alloc_screen(tp, tp->view.rows, tp->view.cols, in tty3270_create_view()
1115 &tp->allocated_lines); in tty3270_create_view()
1116 if (IS_ERR(tp->screen)) { in tty3270_create_view()
1117 rc = PTR_ERR(tp->screen); in tty3270_create_view()
1121 tp->converted_line = (void *)__get_free_page(GFP_KERNEL); in tty3270_create_view()
1122 if (!tp->converted_line) { in tty3270_create_view()
1127 tp->input = kzalloc(tty3270_input_size(tp->view.cols), GFP_KERNEL | GFP_DMA); in tty3270_create_view()
1128 if (!tp->input) { in tty3270_create_view()
1133 tp->prompt = kzalloc(tty3270_input_size(tp->view.cols), GFP_KERNEL); in tty3270_create_view()
1134 if (!tp->prompt) { in tty3270_create_view()
1139 tp->rcl_lines = tty3270_alloc_recall(tp->view.cols); in tty3270_create_view()
1140 if (!tp->rcl_lines) { in tty3270_create_view()
1146 tty3270_blank_screen(tp); in tty3270_create_view()
1148 tp->kbd->port = &tp->port; in tty3270_create_view()
1149 tp->kbd->fn_handler[KVAL(K_INCRCONSOLE)] = tty3270_exit_tty; in tty3270_create_view()
1150 tp->kbd->fn_handler[KVAL(K_SCROLLBACK)] = tty3270_scroll_backward; in tty3270_create_view()
1151 tp->kbd->fn_handler[KVAL(K_SCROLLFORW)] = tty3270_scroll_forward; in tty3270_create_view()
1152 tp->kbd->fn_handler[KVAL(K_CONS)] = tty3270_rcl_backward; in tty3270_create_view()
1153 kbd_ascebc(tp->kbd, tp->view.ascebc); in tty3270_create_view()
1155 raw3270_activate_view(&tp->view); in tty3270_create_view()
1156 raw3270_put_view(&tp->view); in tty3270_create_view()
1157 *newtp = tp; in tty3270_create_view()
1161 kfree(tp->prompt); in tty3270_create_view()
1163 kfree(tp->input); in tty3270_create_view()
1165 free_page((unsigned long)tp->converted_line); in tty3270_create_view()
1167 tty3270_free_screen(tp->screen, tp->view.rows); in tty3270_create_view()
1169 raw3270_put_view(&tp->view); in tty3270_create_view()
1170 raw3270_del_view(&tp->view); in tty3270_create_view()
1172 tty3270_free_view(tp); in tty3270_create_view()
1183 struct tty3270 *tp; in tty3270_install() local
1189 rc = tty3270_create_view(tty->index, &tp); in tty3270_install()
1193 tp = container_of(view, struct tty3270, view); in tty3270_install()
1194 tty->driver_data = tp; in tty3270_install()
1195 tp->inattr = TF_INPUT; in tty3270_install()
1198 tty->winsize.ws_row = tty3270_tty_rows(tp); in tty3270_install()
1199 tty->winsize.ws_col = tp->view.cols; in tty3270_install()
1200 rc = tty_port_install(&tp->port, driver, tty); in tty3270_install()
1202 raw3270_put_view(&tp->view); in tty3270_install()
1205 tty->driver_data = tp; in tty3270_install()
1214 struct tty3270 *tp = tty->driver_data; in tty3270_open() local
1215 struct tty_port *port = &tp->port; in tty3270_open()
1228 struct tty3270 *tp = tty->driver_data; in tty3270_close() local
1232 if (tp) in tty3270_close()
1233 tty_port_tty_set(&tp->port, NULL); in tty3270_close()
1238 struct tty3270 *tp = tty->driver_data; in tty3270_cleanup() local
1240 if (tp) { in tty3270_cleanup()
1242 raw3270_put_view(&tp->view); in tty3270_cleanup()
1258 static void tty3270_put_character(struct tty3270 *tp, char ch) in tty3270_put_character() argument
1263 line = tty3270_get_write_line(tp, tp->cy); in tty3270_put_character()
1264 if (line->len <= tp->cx) { in tty3270_put_character()
1265 while (line->len < tp->cx) { in tty3270_put_character()
1268 cell->attributes = tp->attributes; in tty3270_put_character()
1273 cell = line->cells + tp->cx; in tty3270_put_character()
1275 cell->attributes = tp->attributes; in tty3270_put_character()
1282 static void tty3270_cr(struct tty3270 *tp) in tty3270_cr() argument
1284 tp->cx = 0; in tty3270_cr()
1290 static void tty3270_lf(struct tty3270 *tp) in tty3270_lf() argument
1295 if (tp->cy < tty3270_tty_rows(tp) - 1) { in tty3270_lf()
1296 tp->cy++; in tty3270_lf()
1298 tp->line_view_start = tty3270_line_increment(tp, tp->line_view_start, 1); in tty3270_lf()
1299 tp->line_write_start = tty3270_line_increment(tp, tp->line_write_start, 1); in tty3270_lf()
1300 for (i = 0; i < tty3270_tty_rows(tp); i++) in tty3270_lf()
1301 tty3270_get_view_line(tp, i)->dirty = 1; in tty3270_lf()
1304 line = tty3270_get_write_line(tp, tp->cy); in tty3270_lf()
1309 static void tty3270_ri(struct tty3270 *tp) in tty3270_ri() argument
1311 if (tp->cy > 0) in tty3270_ri()
1312 tp->cy--; in tty3270_ri()
1315 static void tty3270_reset_cell(struct tty3270 *tp, struct tty3270_cell *cell) in tty3270_reset_cell() argument
1324 static void tty3270_insert_characters(struct tty3270 *tp, int n) in tty3270_insert_characters() argument
1329 line = tty3270_get_write_line(tp, tp->cy); in tty3270_insert_characters()
1330 while (line->len < tp->cx) in tty3270_insert_characters()
1331 tty3270_reset_cell(tp, &line->cells[line->len++]); in tty3270_insert_characters()
1332 if (n > tp->view.cols - tp->cx) in tty3270_insert_characters()
1333 n = tp->view.cols - tp->cx; in tty3270_insert_characters()
1334 k = min_t(int, line->len - tp->cx, tp->view.cols - tp->cx - n); in tty3270_insert_characters()
1336 line->cells[tp->cx + n + k] = line->cells[tp->cx + k]; in tty3270_insert_characters()
1338 if (line->len > tp->view.cols) in tty3270_insert_characters()
1339 line->len = tp->view.cols; in tty3270_insert_characters()
1341 line->cells[tp->cx + n].character = ' '; in tty3270_insert_characters()
1342 line->cells[tp->cx + n].attributes = tp->attributes; in tty3270_insert_characters()
1349 static void tty3270_delete_characters(struct tty3270 *tp, int n) in tty3270_delete_characters() argument
1354 line = tty3270_get_write_line(tp, tp->cy); in tty3270_delete_characters()
1355 if (line->len <= tp->cx) in tty3270_delete_characters()
1357 if (line->len - tp->cx <= n) { in tty3270_delete_characters()
1358 line->len = tp->cx; in tty3270_delete_characters()
1361 for (i = tp->cx; i + n < line->len; i++) in tty3270_delete_characters()
1369 static void tty3270_erase_characters(struct tty3270 *tp, int n) in tty3270_erase_characters() argument
1374 line = tty3270_get_write_line(tp, tp->cy); in tty3270_erase_characters()
1375 while (line->len > tp->cx && n-- > 0) { in tty3270_erase_characters()
1376 cell = line->cells + tp->cx++; in tty3270_erase_characters()
1377 tty3270_reset_cell(tp, cell); in tty3270_erase_characters()
1379 tp->cx += n; in tty3270_erase_characters()
1380 tp->cx = min_t(int, tp->cx, tp->view.cols - 1); in tty3270_erase_characters()
1389 static void tty3270_erase_line(struct tty3270 *tp, int mode) in tty3270_erase_line() argument
1395 line = tty3270_get_write_line(tp, tp->cy); in tty3270_erase_line()
1399 start = tp->cx; in tty3270_erase_line()
1400 end = tp->view.cols; in tty3270_erase_line()
1404 end = tp->cx; in tty3270_erase_line()
1408 end = tp->view.cols; in tty3270_erase_line()
1416 tty3270_reset_cell(tp, cell); in tty3270_erase_line()
1417 cell->attributes.b_color = tp->attributes.b_color; in tty3270_erase_line()
1430 static void tty3270_erase_display(struct tty3270 *tp, int mode) in tty3270_erase_display() argument
1437 tty3270_erase_line(tp, 0); in tty3270_erase_display()
1438 start = tp->cy + 1; in tty3270_erase_display()
1439 end = tty3270_tty_rows(tp); in tty3270_erase_display()
1443 end = tp->cy; in tty3270_erase_display()
1444 tty3270_erase_line(tp, 1); in tty3270_erase_display()
1448 end = tty3270_tty_rows(tp); in tty3270_erase_display()
1454 line = tty3270_get_write_line(tp, i); in tty3270_erase_display()
1464 static void tty3270_set_attributes(struct tty3270 *tp) in tty3270_set_attributes() argument
1468 for (i = 0; i <= tp->esc_npar; i++) { in tty3270_set_attributes()
1469 attr = tp->esc_par[i]; in tty3270_set_attributes()
1472 tty3270_reset_attributes(&tp->attributes); in tty3270_set_attributes()
1476 tp->attributes.highlight = TTY3270_HIGHLIGHT_UNDERSCORE; in tty3270_set_attributes()
1479 tp->attributes.highlight = TTY3270_HIGHLIGHT_BLINK; in tty3270_set_attributes()
1482 tp->attributes.highlight = TTY3270_HIGHLIGHT_REVERSE; in tty3270_set_attributes()
1485 tp->attributes.highlight &= ~TTY3270_HIGHLIGHT_UNDERSCORE; in tty3270_set_attributes()
1488 tp->attributes.highlight &= ~TTY3270_HIGHLIGHT_BLINK; in tty3270_set_attributes()
1491 tp->attributes.highlight &= ~TTY3270_HIGHLIGHT_REVERSE; in tty3270_set_attributes()
1503 tp->attributes.f_color = attr - 30; in tty3270_set_attributes()
1515 tp->attributes.b_color = attr - 40; in tty3270_set_attributes()
1521 static inline int tty3270_getpar(struct tty3270 *tp, int ix) in tty3270_getpar() argument
1523 return (tp->esc_par[ix] > 0) ? tp->esc_par[ix] : 1; in tty3270_getpar()
1526 static void tty3270_goto_xy(struct tty3270 *tp, int cx, int cy) in tty3270_goto_xy() argument
1533 tp->cx = min_t(int, tp->view.cols - 1, max_cx); in tty3270_goto_xy()
1534 line = tty3270_get_write_line(tp, tp->cy); in tty3270_goto_xy()
1535 while (line->len < tp->cx) { in tty3270_goto_xy()
1538 cell->attributes = tp->attributes; in tty3270_goto_xy()
1541 tp->cy = min_t(int, tty3270_tty_rows(tp) - 1, max_cy); in tty3270_goto_xy()
1564 static void tty3270_escape_sequence(struct tty3270 *tp, char ch) in tty3270_escape_sequence() argument
1568 if (tp->esc_state == ES_NORMAL) { in tty3270_escape_sequence()
1571 tp->esc_state = ES_ESC; in tty3270_escape_sequence()
1574 if (tp->esc_state == ES_ESC) { in tty3270_escape_sequence()
1575 tp->esc_state = ES_NORMAL; in tty3270_escape_sequence()
1578 tp->esc_state = ES_SQUARE; in tty3270_escape_sequence()
1581 tp->esc_state = ES_PAREN; in tty3270_escape_sequence()
1584 tty3270_cr(tp); in tty3270_escape_sequence()
1585 tty3270_lf(tp); in tty3270_escape_sequence()
1588 tty3270_ri(tp); in tty3270_escape_sequence()
1591 tty3270_lf(tp); in tty3270_escape_sequence()
1594 kbd_puts_queue(&tp->port, "\033[?6c"); in tty3270_escape_sequence()
1597 tp->saved_cx = tp->cx; in tty3270_escape_sequence()
1598 tp->saved_cy = tp->cy; in tty3270_escape_sequence()
1599 tp->saved_attributes = tp->attributes; in tty3270_escape_sequence()
1602 tty3270_goto_xy(tp, tp->saved_cx, tp->saved_cy); in tty3270_escape_sequence()
1603 tp->attributes = tp->saved_attributes; in tty3270_escape_sequence()
1606 tp->cx = 0; in tty3270_escape_sequence()
1607 tp->cy = 0; in tty3270_escape_sequence()
1608 tp->saved_cx = 0; in tty3270_escape_sequence()
1609 tp->saved_cy = 0; in tty3270_escape_sequence()
1610 tty3270_reset_attributes(&tp->attributes); in tty3270_escape_sequence()
1611 tty3270_reset_attributes(&tp->saved_attributes); in tty3270_escape_sequence()
1612 tty3270_erase_display(tp, 2); in tty3270_escape_sequence()
1618 switch (tp->esc_state) { in tty3270_escape_sequence()
1620 tp->esc_state = ES_NORMAL; in tty3270_escape_sequence()
1623 tp->attributes.alternate_charset = 0; in tty3270_escape_sequence()
1626 tp->attributes.alternate_charset = 1; in tty3270_escape_sequence()
1631 tp->esc_state = ES_GETPARS; in tty3270_escape_sequence()
1632 memset(tp->esc_par, 0, sizeof(tp->esc_par)); in tty3270_escape_sequence()
1633 tp->esc_npar = 0; in tty3270_escape_sequence()
1634 tp->esc_ques = (ch == '?'); in tty3270_escape_sequence()
1635 if (tp->esc_ques) in tty3270_escape_sequence()
1639 if (ch == ';' && tp->esc_npar < ESCAPE_NPAR - 1) { in tty3270_escape_sequence()
1640 tp->esc_npar++; in tty3270_escape_sequence()
1644 tp->esc_par[tp->esc_npar] *= 10; in tty3270_escape_sequence()
1645 tp->esc_par[tp->esc_npar] += ch - '0'; in tty3270_escape_sequence()
1652 tp->esc_state = ES_NORMAL; in tty3270_escape_sequence()
1653 if (ch == 'n' && !tp->esc_ques) { in tty3270_escape_sequence()
1654 if (tp->esc_par[0] == 5) /* Status report. */ in tty3270_escape_sequence()
1655 kbd_puts_queue(&tp->port, "\033[0n"); in tty3270_escape_sequence()
1656 else if (tp->esc_par[0] == 6) { /* Cursor report. */ in tty3270_escape_sequence()
1659 sprintf(buf, "\033[%d;%dR", tp->cy + 1, tp->cx + 1); in tty3270_escape_sequence()
1660 kbd_puts_queue(&tp->port, buf); in tty3270_escape_sequence()
1664 if (tp->esc_ques) in tty3270_escape_sequence()
1668 tty3270_set_attributes(tp); in tty3270_escape_sequence()
1672 tty3270_goto_xy(tp, tty3270_getpar(tp, 1) - 1, in tty3270_escape_sequence()
1673 tty3270_getpar(tp, 0) - 1); in tty3270_escape_sequence()
1676 tty3270_goto_xy(tp, tp->cx, tty3270_getpar(tp, 0) - 1); in tty3270_escape_sequence()
1680 tty3270_goto_xy(tp, tp->cx, tp->cy - tty3270_getpar(tp, 0)); in tty3270_escape_sequence()
1685 tty3270_goto_xy(tp, tp->cx, tp->cy + tty3270_getpar(tp, 0)); in tty3270_escape_sequence()
1689 tty3270_goto_xy(tp, tp->cx + tty3270_getpar(tp, 0), tp->cy); in tty3270_escape_sequence()
1692 tty3270_goto_xy(tp, tp->cx - tty3270_getpar(tp, 0), tp->cy); in tty3270_escape_sequence()
1696 tty3270_goto_xy(tp, tty3270_getpar(tp, 0), tp->cy); in tty3270_escape_sequence()
1699 tty3270_erase_characters(tp, tty3270_getpar(tp, 0)); in tty3270_escape_sequence()
1702 tty3270_erase_display(tp, tp->esc_par[0]); in tty3270_escape_sequence()
1705 tty3270_erase_line(tp, tp->esc_par[0]); in tty3270_escape_sequence()
1708 tty3270_delete_characters(tp, tty3270_getpar(tp, 0)); in tty3270_escape_sequence()
1711 tty3270_insert_characters(tp, tty3270_getpar(tp, 0)); in tty3270_escape_sequence()
1714 tp->saved_cx = tp->cx; in tty3270_escape_sequence()
1715 tp->saved_cy = tp->cy; in tty3270_escape_sequence()
1716 tp->saved_attributes = tp->attributes; in tty3270_escape_sequence()
1719 tty3270_goto_xy(tp, tp->saved_cx, tp->saved_cy); in tty3270_escape_sequence()
1720 tp->attributes = tp->saved_attributes; in tty3270_escape_sequence()
1728 static void tty3270_do_write(struct tty3270 *tp, struct tty_struct *tty, in tty3270_do_write() argument
1733 spin_lock_irq(&tp->view.lock); in tty3270_do_write()
1735 if (tp->esc_state != 0) { in tty3270_do_write()
1737 tty3270_escape_sequence(tp, buf[i_msg]); in tty3270_do_write()
1745 tp->wcc |= TW_PLUSALARM; in tty3270_do_write()
1748 if (tp->cx > 0) { in tty3270_do_write()
1749 tp->cx--; in tty3270_do_write()
1750 tty3270_put_character(tp, ' '); in tty3270_do_write()
1754 for (i = tp->cx % 8; i < 8; i++) { in tty3270_do_write()
1755 if (tp->cx >= tp->view.cols) { in tty3270_do_write()
1756 tty3270_cr(tp); in tty3270_do_write()
1757 tty3270_lf(tp); in tty3270_do_write()
1760 tty3270_put_character(tp, ' '); in tty3270_do_write()
1761 tp->cx++; in tty3270_do_write()
1765 tty3270_cr(tp); in tty3270_do_write()
1766 tty3270_lf(tp); in tty3270_do_write()
1769 tty3270_erase_display(tp, 2); in tty3270_do_write()
1770 tp->cx = 0; in tty3270_do_write()
1771 tp->cy = 0; in tty3270_do_write()
1774 tp->cx = 0; in tty3270_do_write()
1777 tp->attributes.alternate_charset = 1; in tty3270_do_write()
1780 tp->attributes.alternate_charset = 0; in tty3270_do_write()
1783 tty3270_escape_sequence(tp, buf[i_msg]); in tty3270_do_write()
1786 if (tp->cx >= tp->view.cols) { in tty3270_do_write()
1787 tty3270_cr(tp); in tty3270_do_write()
1788 tty3270_lf(tp); in tty3270_do_write()
1790 tty3270_put_character(tp, buf[i_msg]); in tty3270_do_write()
1791 tp->cx++; in tty3270_do_write()
1796 tp->update_flags |= TTY_UPDATE_LINES; in tty3270_do_write()
1797 if (!timer_pending(&tp->timer)) in tty3270_do_write()
1798 tty3270_set_timer(tp, msecs_to_jiffies(100)); in tty3270_do_write()
1800 spin_unlock_irq(&tp->view.lock); in tty3270_do_write()
1809 struct tty3270 *tp; in tty3270_write() local
1811 tp = tty->driver_data; in tty3270_write()
1812 if (!tp) in tty3270_write()
1814 if (tp->char_count > 0) { in tty3270_write()
1815 tty3270_do_write(tp, tty, tp->char_buf, tp->char_count); in tty3270_write()
1816 tp->char_count = 0; in tty3270_write()
1818 tty3270_do_write(tp, tty, buf, count); in tty3270_write()
1827 struct tty3270 *tp; in tty3270_put_char() local
1829 tp = tty->driver_data; in tty3270_put_char()
1830 if (!tp || tp->char_count >= TTY3270_CHAR_BUF_SIZE) in tty3270_put_char()
1832 tp->char_buf[tp->char_count++] = ch; in tty3270_put_char()
1842 struct tty3270 *tp; in tty3270_flush_chars() local
1844 tp = tty->driver_data; in tty3270_flush_chars()
1845 if (!tp) in tty3270_flush_chars()
1847 if (tp->char_count > 0) { in tty3270_flush_chars()
1848 tty3270_do_write(tp, tty, tp->char_buf, tp->char_count); in tty3270_flush_chars()
1849 tp->char_count = 0; in tty3270_flush_chars()
1858 struct tty3270 *tp; in tty3270_set_termios() local
1861 tp = tty->driver_data; in tty3270_set_termios()
1862 if (!tp) in tty3270_set_termios()
1864 spin_lock_irq(&tp->view.lock); in tty3270_set_termios()
1867 if (new != tp->inattr) { in tty3270_set_termios()
1868 tp->inattr = new; in tty3270_set_termios()
1869 tty3270_update_prompt(tp, ""); in tty3270_set_termios()
1870 tty3270_set_timer(tp, 1); in tty3270_set_termios()
1873 spin_unlock_irq(&tp->view.lock); in tty3270_set_termios()
1881 struct tty3270 *tp; in tty3270_throttle() local
1883 tp = tty->driver_data; in tty3270_throttle()
1884 if (!tp) in tty3270_throttle()
1886 tp->throttle = 1; in tty3270_throttle()
1894 struct tty3270 *tp; in tty3270_unthrottle() local
1896 tp = tty->driver_data; in tty3270_unthrottle()
1897 if (!tp) in tty3270_unthrottle()
1899 tp->throttle = 0; in tty3270_unthrottle()
1900 if (tp->attn) in tty3270_unthrottle()
1901 tty3270_issue_read(tp, 1); in tty3270_unthrottle()
1909 struct tty3270 *tp; in tty3270_hangup() local
1911 tp = tty->driver_data; in tty3270_hangup()
1912 if (!tp) in tty3270_hangup()
1914 spin_lock_irq(&tp->view.lock); in tty3270_hangup()
1915 tp->cx = 0; in tty3270_hangup()
1916 tp->cy = 0; in tty3270_hangup()
1917 tp->saved_cx = 0; in tty3270_hangup()
1918 tp->saved_cy = 0; in tty3270_hangup()
1919 tty3270_reset_attributes(&tp->attributes); in tty3270_hangup()
1920 tty3270_reset_attributes(&tp->saved_attributes); in tty3270_hangup()
1921 tty3270_blank_screen(tp); in tty3270_hangup()
1922 tp->update_flags = TTY_UPDATE_ALL; in tty3270_hangup()
1923 spin_unlock_irq(&tp->view.lock); in tty3270_hangup()
1924 tty3270_set_timer(tp, 1); in tty3270_hangup()
1934 struct tty3270 *tp; in tty3270_ioctl() local
1936 tp = tty->driver_data; in tty3270_ioctl()
1937 if (!tp) in tty3270_ioctl()
1941 return kbd_ioctl(tp->kbd, cmd, arg); in tty3270_ioctl()
1948 struct tty3270 *tp; in tty3270_compat_ioctl() local
1950 tp = tty->driver_data; in tty3270_compat_ioctl()
1951 if (!tp) in tty3270_compat_ioctl()
1955 return kbd_ioctl(tp->kbd, cmd, (unsigned long)compat_ptr(arg)); in tty3270_compat_ioctl()
2053 struct tty3270 *tp = co->data; in con3270_write() local
2057 spin_lock_irqsave(&tp->view.lock, flags); in con3270_write()
2061 tty3270_cr(tp); in con3270_write()
2062 tty3270_lf(tp); in con3270_write()
2064 if (tp->cx >= tp->view.cols) { in con3270_write()
2065 tty3270_cr(tp); in con3270_write()
2066 tty3270_lf(tp); in con3270_write()
2068 tty3270_put_character(tp, c); in con3270_write()
2069 tp->cx++; in con3270_write()
2072 spin_unlock_irqrestore(&tp->view.lock, flags); in con3270_write()
2083 con3270_wait_write(struct tty3270 *tp) in con3270_wait_write() argument
2085 while (!tp->write) { in con3270_wait_write()
2086 raw3270_wait_cons_dev(tp->view.dev); in con3270_wait_write()
2102 struct tty3270 *tp; in con3270_notify() local
2106 tp = condev; in con3270_notify()
2107 if (!tp->view.dev) in con3270_notify()
2109 if (!raw3270_view_lock_unavailable(&tp->view)) { in con3270_notify()
2110 rc = raw3270_activate_view(&tp->view); in con3270_notify()
2114 if (!spin_trylock_irqsave(&tp->view.lock, flags)) in con3270_notify()
2116 con3270_wait_write(tp); in con3270_notify()
2117 tp->nr_up = 0; in con3270_notify()
2118 tp->update_flags = TTY_UPDATE_ALL; in con3270_notify()
2119 while (tp->update_flags != 0) { in con3270_notify()
2120 spin_unlock_irqrestore(&tp->view.lock, flags); in con3270_notify()
2121 tty3270_update(&tp->timer); in con3270_notify()
2122 spin_lock_irqsave(&tp->view.lock, flags); in con3270_notify()
2123 con3270_wait_write(tp); in con3270_notify()
2125 spin_unlock_irqrestore(&tp->view.lock, flags); in con3270_notify()
2151 struct tty3270 *tp; in con3270_init() local
2171 rc = tty3270_create_view(0, &tp); in con3270_init()
2175 tp = container_of(view, struct tty3270, view); in con3270_init()
2176 tp->inattr = TF_INPUT; in con3270_init()
2178 con3270.data = tp; in con3270_init()
2179 condev = tp; in con3270_init()