• Home
  • Raw
  • Download

Lines Matching +full:display +full:- +full:rows

1 // SPDX-License-Identifier: GPL-2.0
3 * IBM/3270 Driver - console view.
53 struct string *status; /* last line of display. */
66 /* con3270->update_flags. See con3270_update for details. */
68 #define CON_UPDATE_LIST 2 /* Update lines in tty3270->update. */
80 del_timer(&cp->timer); in con3270_set_timer()
82 mod_timer(&cp->timer, jiffies + expires); in con3270_set_timer()
95 str = (cp->nr_up != 0) ? "History" : "Running"; in con3270_update_status()
96 memcpy(cp->status->string + 24, str, 7); in con3270_update_status()
97 codepage_convert(cp->view.ascebc, cp->status->string + 24, 7); in con3270_update_status()
98 cp->update_flags |= CON_UPDATE_STATUS; in con3270_update_status()
109 cp->status = alloc_string(&cp->freemem, sizeof(blueprint)); in con3270_create_status()
111 memcpy(cp->status->string, blueprint, sizeof(blueprint)); in con3270_create_status()
113 raw3270_buffer_address(cp->view.dev, cp->status->string + 1, in con3270_create_status()
114 cp->view.cols * (cp->view.rows - 1)); in con3270_create_status()
115 raw3270_buffer_address(cp->view.dev, cp->status->string + 21, in con3270_create_status()
116 cp->view.cols * cp->view.rows - 8); in con3270_create_status()
118 codepage_convert(cp->view.ascebc, cp->status->string + 8, 12); in con3270_create_status()
119 codepage_convert(cp->view.ascebc, cp->status->string + 24, 7); in con3270_create_status()
128 if (s->len < 4) { in con3270_update_string()
133 if (s->string[s->len - 4] != TO_RA) in con3270_update_string()
135 raw3270_buffer_address(cp->view.dev, s->string + s->len - 3, in con3270_update_string()
136 cp->view.cols * (nr + 1)); in con3270_update_string()
152 list_for_each_entry_safe(s, n, &cp->update, update) in con3270_rebuild_update()
153 list_del_init(&s->update); in con3270_rebuild_update()
154 nr = cp->view.rows - 2 + cp->nr_up; in con3270_rebuild_update()
155 list_for_each_entry_reverse(s, &cp->lines, list) { in con3270_rebuild_update()
156 if (nr < cp->view.rows - 1) in con3270_rebuild_update()
157 list_add(&s->update, &cp->update); in con3270_rebuild_update()
158 if (--nr < 0) in con3270_rebuild_update()
161 cp->line_nr = 0; in con3270_rebuild_update()
162 cp->update_flags |= CON_UPDATE_LIST; in con3270_rebuild_update()
173 s = alloc_string(&cp->freemem, size); in con3270_alloc_string()
176 list_for_each_entry_safe(s, n, &cp->lines, list) { in con3270_alloc_string()
177 list_del(&s->list); in con3270_alloc_string()
178 if (!list_empty(&s->update)) in con3270_alloc_string()
179 list_del(&s->update); in con3270_alloc_string()
180 cp->nr_lines--; in con3270_alloc_string()
181 if (free_string(&cp->freemem, s) >= size) in con3270_alloc_string()
184 s = alloc_string(&cp->freemem, size); in con3270_alloc_string()
186 if (cp->nr_up != 0 && cp->nr_up + cp->view.rows > cp->nr_lines) { in con3270_alloc_string()
187 cp->nr_up = cp->nr_lines - cp->view.rows + 1; in con3270_alloc_string()
201 xchg(&((struct con3270 *) rq->view)->write, rq); in con3270_write_callback()
205 * Update console display.
218 if (!auto_update && !raw3270_view_active(&cp->view)) in con3270_update()
220 if (cp->view.dev) in con3270_update()
221 raw3270_activate_view(&cp->view); in con3270_update()
223 wrq = xchg(&cp->write, 0); in con3270_update()
229 spin_lock_irqsave(&cp->view.lock, flags); in con3270_update()
231 if (cp->update_flags & CON_UPDATE_ALL) { in con3270_update()
234 cp->update_flags = CON_UPDATE_ERASE | CON_UPDATE_LIST | in con3270_update()
237 if (cp->update_flags & CON_UPDATE_ERASE) { in con3270_update()
238 /* Use erase write alternate to initialize display. */ in con3270_update()
250 if (cp->update_flags & CON_UPDATE_STATUS) in con3270_update()
251 if (raw3270_request_add_data(wrq, cp->status->string, in con3270_update()
252 cp->status->len) == 0) in con3270_update()
255 if (cp->update_flags & CON_UPDATE_LIST) { in con3270_update()
260 raw3270_buffer_address(cp->view.dev, prolog + 1, in con3270_update()
261 cp->view.cols * cp->line_nr); in con3270_update()
264 list_for_each_entry_safe(s, n, &cp->update, update) { in con3270_update()
265 if (s != cp->cline) in con3270_update()
266 con3270_update_string(cp, s, cp->line_nr); in con3270_update()
267 if (raw3270_request_add_data(wrq, s->string, in con3270_update()
268 s->len) != 0) in con3270_update()
270 list_del_init(&s->update); in con3270_update()
271 if (s != cp->cline) in con3270_update()
272 cp->line_nr++; in con3270_update()
274 if (list_empty(&cp->update)) in con3270_update()
277 wrq->callback = con3270_write_callback; in con3270_update()
278 rc = raw3270_start(&cp->view, wrq); in con3270_update()
280 cp->update_flags &= ~updated; in con3270_update()
281 if (cp->update_flags) in con3270_update()
285 xchg(&cp->write, wrq); in con3270_update()
287 spin_unlock_irqrestore(&cp->view.lock, flags); in con3270_update()
301 cp = (struct con3270 *) rrq->view; in con3270_read_tasklet()
302 spin_lock_irqsave(&cp->view.lock, flags); in con3270_read_tasklet()
303 nr_up = cp->nr_up; in con3270_read_tasklet()
306 switch (cp->input->string[0]) { in con3270_read_tasklet()
314 cp->update_flags = CON_UPDATE_ALL; in con3270_read_tasklet()
318 nr_up += cp->view.rows - 2; in con3270_read_tasklet()
319 if (nr_up + cp->view.rows - 1 > cp->nr_lines) { in con3270_read_tasklet()
320 nr_up = cp->nr_lines - cp->view.rows + 1; in con3270_read_tasklet()
326 nr_up -= cp->view.rows - 2; in con3270_read_tasklet()
331 if (nr_up != cp->nr_up) { in con3270_read_tasklet()
332 cp->nr_up = nr_up; in con3270_read_tasklet()
337 spin_unlock_irqrestore(&cp->view.lock, flags); in con3270_read_tasklet()
340 raw3270_request_reset(cp->kreset); in con3270_read_tasklet()
341 raw3270_request_set_cmd(cp->kreset, TC_WRITE); in con3270_read_tasklet()
342 raw3270_request_add_data(cp->kreset, &kreset_data, 1); in con3270_read_tasklet()
343 raw3270_start(&cp->view, cp->kreset); in con3270_read_tasklet()
346 raw3270_deactivate_view(&cp->view); in con3270_read_tasklet()
349 xchg(&cp->read, rrq); in con3270_read_tasklet()
350 raw3270_put_view(&cp->view); in con3270_read_tasklet()
359 raw3270_get_view(rq->view); in con3270_read_callback()
361 tasklet_schedule(&((struct con3270 *) rq->view)->readlet); in con3270_read_callback()
373 rrq = xchg(&cp->read, 0); in con3270_issue_read()
377 rrq->callback = con3270_read_callback; in con3270_issue_read()
378 rrq->callback_data = cp; in con3270_issue_read()
380 raw3270_request_set_data(rrq, cp->input->string, cp->input->len); in con3270_issue_read()
382 rc = raw3270_start_irq(&cp->view, rrq); in con3270_issue_read()
396 cp->update_flags = CON_UPDATE_ALL; in con3270_activate()
407 del_timer(&cp->timer); in con3270_deactivate()
414 if (irb->scsw.cmd.dstat & DEV_STAT_ATTENTION) in con3270_irq()
418 if (irb->scsw.cmd.dstat & DEV_STAT_UNIT_CHECK) in con3270_irq()
419 rq->rc = -EIO; in con3270_irq()
422 rq->rescnt = irb->scsw.cmd.count; in con3270_irq()
423 } else if (irb->scsw.cmd.dstat & DEV_STAT_DEV_END) { in con3270_irq()
424 /* Interrupt without an outstanding request -> update all */ in con3270_irq()
425 cp->update_flags = CON_UPDATE_ALL; in con3270_irq()
440 if (!list_empty(&cp->cline->list)) in con3270_cline_add()
443 list_add_tail(&cp->cline->list, &cp->lines); in con3270_cline_add()
444 cp->nr_lines++; in con3270_cline_add()
451 cp->cline->string[cp->cline->len++] = in con3270_cline_insert()
452 cp->view.ascebc[(c < ' ') ? ' ' : c]; in con3270_cline_insert()
453 if (list_empty(&cp->cline->update)) { in con3270_cline_insert()
454 list_add_tail(&cp->cline->update, &cp->update); in con3270_cline_insert()
455 cp->update_flags |= CON_UPDATE_LIST; in con3270_cline_insert()
466 size = (cp->cline->len < cp->view.cols - 5) ? in con3270_cline_end()
467 cp->cline->len + 4 : cp->view.cols; in con3270_cline_end()
469 memcpy(s->string, cp->cline->string, cp->cline->len); in con3270_cline_end()
470 if (cp->cline->len < cp->view.cols - 5) { in con3270_cline_end()
471 s->string[s->len - 4] = TO_RA; in con3270_cline_end()
472 s->string[s->len - 1] = 0; in con3270_cline_end()
474 while (--size >= cp->cline->len) in con3270_cline_end()
475 s->string[size] = cp->view.ascebc[' ']; in con3270_cline_end()
478 list_add(&s->list, &cp->cline->list); in con3270_cline_end()
479 list_del_init(&cp->cline->list); in con3270_cline_end()
480 if (!list_empty(&cp->cline->update)) { in con3270_cline_end()
481 list_add(&s->update, &cp->cline->update); in con3270_cline_end()
482 list_del_init(&cp->cline->update); in con3270_cline_end()
484 cp->cline->len = 0; in con3270_cline_end()
498 spin_lock_irqsave(&cp->view.lock, flags); in con3270_write()
499 while (count-- > 0) { in con3270_write()
501 if (cp->cline->len == 0) in con3270_write()
505 if (c == '\n' || cp->cline->len >= cp->view.cols) in con3270_write()
509 cp->nr_up = 0; in con3270_write()
510 if (cp->view.dev && !timer_pending(&cp->timer)) in con3270_write()
512 spin_unlock_irqrestore(&cp->view.lock,flags); in con3270_write()
518 *index = c->index; in con3270_device()
528 while (!cp->write) { in con3270_wait_write()
529 raw3270_wait_cons_dev(cp->view.dev); in con3270_wait_write()
545 if (!cp->view.dev) in con3270_flush()
547 raw3270_pm_unfreeze(&cp->view); in con3270_flush()
548 raw3270_activate_view(&cp->view); in con3270_flush()
549 spin_lock_irqsave(&cp->view.lock, flags); in con3270_flush()
551 cp->nr_up = 0; in con3270_flush()
554 while (cp->update_flags != 0) { in con3270_flush()
555 spin_unlock_irqrestore(&cp->view.lock, flags); in con3270_flush()
556 con3270_update(&cp->timer); in con3270_flush()
557 spin_lock_irqsave(&cp->view.lock, flags); in con3270_flush()
560 spin_unlock_irqrestore(&cp->view.lock, flags); in con3270_flush()
602 return -ENODEV; in con3270_init()
616 return -ENOMEM; in con3270_init()
617 condev->view.dev = rp; in con3270_init()
619 condev->read = raw3270_request_alloc(0); in con3270_init()
620 condev->read->callback = con3270_read_callback; in con3270_init()
621 condev->read->callback_data = condev; in con3270_init()
622 condev->write = raw3270_request_alloc(CON3270_OUTPUT_BUFFER_SIZE); in con3270_init()
623 condev->kreset = raw3270_request_alloc(1); in con3270_init()
625 INIT_LIST_HEAD(&condev->lines); in con3270_init()
626 INIT_LIST_HEAD(&condev->update); in con3270_init()
627 timer_setup(&condev->timer, con3270_update, 0); in con3270_init()
628 tasklet_init(&condev->readlet, in con3270_init()
630 (unsigned long) condev->read); in con3270_init()
632 raw3270_add_view(&condev->view, &con3270_fn, 1, RAW3270_VIEW_LOCK_IRQ); in con3270_init()
634 INIT_LIST_HEAD(&condev->freemem); in con3270_init()
637 add_string_memory(&condev->freemem, cbuf, PAGE_SIZE); in con3270_init()
639 condev->cline = alloc_string(&condev->freemem, condev->view.cols); in con3270_init()
640 condev->cline->len = 0; in con3270_init()
642 condev->input = alloc_string(&condev->freemem, 80); in con3270_init()