Lines Matching refs:cp

76 static void con3270_set_timer(struct con3270 *cp, int expires)  in con3270_set_timer()  argument
79 del_timer(&cp->timer); in con3270_set_timer()
81 mod_timer(&cp->timer, jiffies + expires); in con3270_set_timer()
90 con3270_update_status(struct con3270 *cp) in con3270_update_status() argument
94 str = (cp->nr_up != 0) ? "History" : "Running"; in con3270_update_status()
95 memcpy(cp->status->string + 24, str, 7); in con3270_update_status()
96 codepage_convert(cp->view.ascebc, cp->status->string + 24, 7); in con3270_update_status()
97 cp->update_flags |= CON_UPDATE_STATUS; in con3270_update_status()
101 con3270_create_status(struct con3270 *cp) in con3270_create_status() argument
108 cp->status = alloc_string(&cp->freemem, sizeof(blueprint)); in con3270_create_status()
110 memcpy(cp->status->string, blueprint, sizeof(blueprint)); in con3270_create_status()
112 raw3270_buffer_address(cp->view.dev, cp->status->string + 1, in con3270_create_status()
113 cp->view.cols * (cp->view.rows - 1)); in con3270_create_status()
114 raw3270_buffer_address(cp->view.dev, cp->status->string + 21, in con3270_create_status()
115 cp->view.cols * cp->view.rows - 8); in con3270_create_status()
117 codepage_convert(cp->view.ascebc, cp->status->string + 8, 12); in con3270_create_status()
118 codepage_convert(cp->view.ascebc, cp->status->string + 24, 7); in con3270_create_status()
125 con3270_update_string(struct con3270 *cp, struct string *s, int nr) in con3270_update_string() argument
127 if (s->len >= cp->view.cols - 5) in con3270_update_string()
129 raw3270_buffer_address(cp->view.dev, s->string + s->len - 3, in con3270_update_string()
130 cp->view.cols * (nr + 1)); in con3270_update_string()
137 con3270_rebuild_update(struct con3270 *cp) in con3270_rebuild_update() argument
146 list_for_each_entry_safe(s, n, &cp->update, update) in con3270_rebuild_update()
148 nr = cp->view.rows - 2 + cp->nr_up; in con3270_rebuild_update()
149 list_for_each_entry_reverse(s, &cp->lines, list) { in con3270_rebuild_update()
150 if (nr < cp->view.rows - 1) in con3270_rebuild_update()
151 list_add(&s->update, &cp->update); in con3270_rebuild_update()
155 cp->line_nr = 0; in con3270_rebuild_update()
156 cp->update_flags |= CON_UPDATE_LIST; in con3270_rebuild_update()
163 con3270_alloc_string(struct con3270 *cp, size_t size) in con3270_alloc_string() argument
167 s = alloc_string(&cp->freemem, size); in con3270_alloc_string()
170 list_for_each_entry_safe(s, n, &cp->lines, list) { in con3270_alloc_string()
174 cp->nr_lines--; in con3270_alloc_string()
175 if (free_string(&cp->freemem, s) >= size) in con3270_alloc_string()
178 s = alloc_string(&cp->freemem, size); in con3270_alloc_string()
180 if (cp->nr_up != 0 && cp->nr_up + cp->view.rows > cp->nr_lines) { in con3270_alloc_string()
181 cp->nr_up = cp->nr_lines - cp->view.rows + 1; in con3270_alloc_string()
182 con3270_rebuild_update(cp); in con3270_alloc_string()
183 con3270_update_status(cp); in con3270_alloc_string()
202 con3270_update(struct con3270 *cp) in con3270_update() argument
211 if (!auto_update && !raw3270_view_active(&cp->view)) in con3270_update()
213 if (cp->view.dev) in con3270_update()
214 raw3270_activate_view(&cp->view); in con3270_update()
216 wrq = xchg(&cp->write, 0); in con3270_update()
218 con3270_set_timer(cp, 1); in con3270_update()
222 spin_lock_irqsave(&cp->view.lock, flags); in con3270_update()
224 if (cp->update_flags & CON_UPDATE_ALL) { in con3270_update()
225 con3270_rebuild_update(cp); in con3270_update()
226 con3270_update_status(cp); in con3270_update()
227 cp->update_flags = CON_UPDATE_ERASE | CON_UPDATE_LIST | in con3270_update()
230 if (cp->update_flags & CON_UPDATE_ERASE) { in con3270_update()
243 if (cp->update_flags & CON_UPDATE_STATUS) in con3270_update()
244 if (raw3270_request_add_data(wrq, cp->status->string, in con3270_update()
245 cp->status->len) == 0) in con3270_update()
248 if (cp->update_flags & CON_UPDATE_LIST) { in con3270_update()
253 raw3270_buffer_address(cp->view.dev, prolog + 1, in con3270_update()
254 cp->view.cols * cp->line_nr); in con3270_update()
257 list_for_each_entry_safe(s, n, &cp->update, update) { in con3270_update()
258 if (s != cp->cline) in con3270_update()
259 con3270_update_string(cp, s, cp->line_nr); in con3270_update()
264 if (s != cp->cline) in con3270_update()
265 cp->line_nr++; in con3270_update()
267 if (list_empty(&cp->update)) in con3270_update()
271 rc = raw3270_start(&cp->view, wrq); in con3270_update()
273 cp->update_flags &= ~updated; in con3270_update()
274 if (cp->update_flags) in con3270_update()
275 con3270_set_timer(cp, 1); in con3270_update()
278 xchg(&cp->write, wrq); in con3270_update()
280 spin_unlock_irqrestore(&cp->view.lock, flags); in con3270_update()
290 struct con3270 *cp; in con3270_read_tasklet() local
294 cp = (struct con3270 *) rrq->view; in con3270_read_tasklet()
295 spin_lock_irqsave(&cp->view.lock, flags); in con3270_read_tasklet()
296 nr_up = cp->nr_up; in con3270_read_tasklet()
299 switch (cp->input->string[0]) { in con3270_read_tasklet()
307 cp->update_flags = CON_UPDATE_ALL; in con3270_read_tasklet()
308 con3270_set_timer(cp, 1); in con3270_read_tasklet()
311 nr_up += cp->view.rows - 2; in con3270_read_tasklet()
312 if (nr_up + cp->view.rows - 1 > cp->nr_lines) { in con3270_read_tasklet()
313 nr_up = cp->nr_lines - cp->view.rows + 1; in con3270_read_tasklet()
319 nr_up -= cp->view.rows - 2; in con3270_read_tasklet()
324 if (nr_up != cp->nr_up) { in con3270_read_tasklet()
325 cp->nr_up = nr_up; in con3270_read_tasklet()
326 con3270_rebuild_update(cp); in con3270_read_tasklet()
327 con3270_update_status(cp); in con3270_read_tasklet()
328 con3270_set_timer(cp, 1); in con3270_read_tasklet()
330 spin_unlock_irqrestore(&cp->view.lock, flags); in con3270_read_tasklet()
333 raw3270_request_reset(cp->kreset); in con3270_read_tasklet()
334 raw3270_request_set_cmd(cp->kreset, TC_WRITE); in con3270_read_tasklet()
335 raw3270_request_add_data(cp->kreset, &kreset_data, 1); in con3270_read_tasklet()
336 raw3270_start(&cp->view, cp->kreset); in con3270_read_tasklet()
339 raw3270_deactivate_view(&cp->view); in con3270_read_tasklet()
342 xchg(&cp->read, rrq); in con3270_read_tasklet()
343 raw3270_put_view(&cp->view); in con3270_read_tasklet()
361 con3270_issue_read(struct con3270 *cp) in con3270_issue_read() argument
366 rrq = xchg(&cp->read, 0); in con3270_issue_read()
371 rrq->callback_data = cp; in con3270_issue_read()
373 raw3270_request_set_data(rrq, cp->input->string, cp->input->len); in con3270_issue_read()
375 rc = raw3270_start_irq(&cp->view, rrq); in con3270_issue_read()
386 struct con3270 *cp; in con3270_activate() local
388 cp = (struct con3270 *) view; in con3270_activate()
389 cp->update_flags = CON_UPDATE_ALL; in con3270_activate()
390 con3270_set_timer(cp, 1); in con3270_activate()
397 struct con3270 *cp; in con3270_deactivate() local
399 cp = (struct con3270 *) view; in con3270_deactivate()
400 del_timer(&cp->timer); in con3270_deactivate()
404 con3270_irq(struct con3270 *cp, struct raw3270_request *rq, struct irb *irb) in con3270_irq() argument
408 con3270_issue_read(cp); in con3270_irq()
418 cp->update_flags = CON_UPDATE_ALL; in con3270_irq()
419 con3270_set_timer(cp, 1); in con3270_irq()
432 con3270_cline_add(struct con3270 *cp) in con3270_cline_add() argument
434 if (!list_empty(&cp->cline->list)) in con3270_cline_add()
437 list_add_tail(&cp->cline->list, &cp->lines); in con3270_cline_add()
438 cp->nr_lines++; in con3270_cline_add()
439 con3270_rebuild_update(cp); in con3270_cline_add()
443 con3270_cline_insert(struct con3270 *cp, unsigned char c) in con3270_cline_insert() argument
445 cp->cline->string[cp->cline->len++] = in con3270_cline_insert()
446 cp->view.ascebc[(c < ' ') ? ' ' : c]; in con3270_cline_insert()
447 if (list_empty(&cp->cline->update)) { in con3270_cline_insert()
448 list_add_tail(&cp->cline->update, &cp->update); in con3270_cline_insert()
449 cp->update_flags |= CON_UPDATE_LIST; in con3270_cline_insert()
454 con3270_cline_end(struct con3270 *cp) in con3270_cline_end() argument
460 size = (cp->cline->len < cp->view.cols - 5) ? in con3270_cline_end()
461 cp->cline->len + 4 : cp->view.cols; in con3270_cline_end()
462 s = con3270_alloc_string(cp, size); in con3270_cline_end()
463 memcpy(s->string, cp->cline->string, cp->cline->len); in con3270_cline_end()
464 if (s->len < cp->view.cols - 5) { in con3270_cline_end()
468 while (--size > cp->cline->len) in con3270_cline_end()
469 s->string[size] = cp->view.ascebc[' ']; in con3270_cline_end()
472 list_add(&s->list, &cp->cline->list); in con3270_cline_end()
473 list_del_init(&cp->cline->list); in con3270_cline_end()
474 if (!list_empty(&cp->cline->update)) { in con3270_cline_end()
475 list_add(&s->update, &cp->cline->update); in con3270_cline_end()
476 list_del_init(&cp->cline->update); in con3270_cline_end()
478 cp->cline->len = 0; in con3270_cline_end()
487 struct con3270 *cp; in con3270_write() local
491 cp = condev; in con3270_write()
492 spin_lock_irqsave(&cp->view.lock, flags); in con3270_write()
495 if (cp->cline->len == 0) in con3270_write()
496 con3270_cline_add(cp); in con3270_write()
498 con3270_cline_insert(cp, c); in con3270_write()
499 if (c == '\n' || cp->cline->len >= cp->view.cols) in con3270_write()
500 con3270_cline_end(cp); in con3270_write()
503 cp->nr_up = 0; in con3270_write()
504 if (cp->view.dev && !timer_pending(&cp->timer)) in con3270_write()
505 con3270_set_timer(cp, HZ/10); in con3270_write()
506 spin_unlock_irqrestore(&cp->view.lock,flags); in con3270_write()
520 con3270_wait_write(struct con3270 *cp) in con3270_wait_write() argument
522 while (!cp->write) { in con3270_wait_write()
523 raw3270_wait_cons_dev(cp->view.dev); in con3270_wait_write()
535 struct con3270 *cp; in con3270_flush() local
538 cp = condev; in con3270_flush()
539 if (!cp->view.dev) in con3270_flush()
541 raw3270_pm_unfreeze(&cp->view); in con3270_flush()
542 raw3270_activate_view(&cp->view); in con3270_flush()
543 spin_lock_irqsave(&cp->view.lock, flags); in con3270_flush()
544 con3270_wait_write(cp); in con3270_flush()
545 cp->nr_up = 0; in con3270_flush()
546 con3270_rebuild_update(cp); in con3270_flush()
547 con3270_update_status(cp); in con3270_flush()
548 while (cp->update_flags != 0) { in con3270_flush()
549 spin_unlock_irqrestore(&cp->view.lock, flags); in con3270_flush()
550 con3270_update(cp); in con3270_flush()
551 spin_lock_irqsave(&cp->view.lock, flags); in con3270_flush()
552 con3270_wait_write(cp); in con3270_flush()
554 spin_unlock_irqrestore(&cp->view.lock, flags); in con3270_flush()