Lines Matching refs:cons

43 #include <sys/cons.h>
66 typedef void xencons_early_init_t(struct xencons_priv *cons);
69 typedef int xencons_read_t(struct xencons_priv *cons, char *buffer,
71 typedef int xencons_write_t(struct xencons_priv *cons, const char *buffer,
202 static inline void xencons_lock(struct xencons_priv *cons)
206 mtx_lock_spin(&cons->mtx);
210 static inline void xencons_unlock(struct xencons_priv *cons)
214 mtx_unlock_spin(&cons->mtx);
217 #define xencons_lock_assert(cons) mtx_assert(&(cons)->mtx, MA_OWNED)
221 xencons_early_init_hypervisor(struct xencons_priv *cons)
233 struct xencons_priv *cons;
236 cons = tty_softc(tp);
239 intr_handler, tp, INTR_TYPE_TTY | INTR_MPSAFE, &cons->intr_handle);
247 xencons_write_hypervisor(struct xencons_priv *cons, const char *buffer,
257 xencons_read_hypervisor(struct xencons_priv *cons, char *buffer,
261 xencons_lock_assert(cons);
275 xencons_early_init_ring(struct xencons_priv *cons)
278 cons->intf = (struct xencons_interface *)console_page;
279 cons->evtchn = HYPERVISOR_start_info->console.domU.evtchn;
285 struct xencons_priv *cons;
288 cons = tty_softc(tp);
290 if (cons->evtchn == 0)
293 err = xen_intr_bind_local_port(dev, cons->evtchn, NULL,
294 intr_handler, tp, INTR_TYPE_TTY | INTR_MPSAFE, &cons->intr_handle);
302 xencons_notify_ring(struct xencons_priv *cons)
309 if (__predict_true(cons->intr_handle != NULL))
310 xen_intr_signal(cons->intr_handle);
313 .port = cons->evtchn
321 xencons_write_ring(struct xencons_priv *cons, const char *buffer,
328 intf = cons->intf;
330 xencons_lock_assert(cons);
348 xencons_notify_ring(cons);
354 xencons_read_ring(struct xencons_priv *cons, char *buffer, unsigned int size)
360 intf = cons->intf;
362 xencons_lock_assert(cons);
379 xencons_notify_ring(cons);
417 xencons_rx(struct xencons_priv *cons)
422 xencons_lock(cons);
423 while ((sz = cons->ops->read(cons, buf, sizeof(buf))) > 0) {
427 cons->rbuf[RBUF_MASK(cons->rp++)] = buf[i];
429 xencons_unlock(cons);
434 xencons_tx_full(struct xencons_priv *cons)
438 xencons_lock(cons);
439 used = cons->wp - cons->wc;
440 xencons_unlock(cons);
446 xencons_tx_flush(struct xencons_priv *cons, int force)
450 xencons_lock(cons);
451 while (cons->wc != cons->wp) {
453 sz = cons->wp - cons->wc;
454 if (sz > (WBUF_SIZE - WBUF_MASK(cons->wc)))
455 sz = WBUF_SIZE - WBUF_MASK(cons->wc);
456 sent = cons->ops->write(cons, &cons->wbuf[WBUF_MASK(cons->wc)],
473 cons->wc += sent;
475 xencons_unlock(cons);
479 xencons_putc(struct xencons_priv *cons, int c, bool force_flush)
482 xencons_lock(cons);
483 if ((cons->wp - cons->wc) < WBUF_SIZE)
484 cons->wbuf[WBUF_MASK(cons->wp++)] = c;
485 xencons_unlock(cons);
487 xencons_tx_flush(cons, force_flush);
489 return (xencons_tx_full(cons));
493 xencons_getc(struct xencons_priv *cons)
497 xencons_lock(cons);
498 if (cons->rp != cons->rc) {
500 ret = (int)cons->rbuf[RBUF_MASK(cons->rc)];
501 cons->rc++;
506 xencons_unlock(cons);
516 struct xencons_priv *cons;
518 cons = tty_softc(tp);
526 if (xencons_tx_full(cons))
531 cons_full = xencons_putc(cons, c, false);
540 struct xencons_priv *cons;
544 cons = tty_softc(tp);
555 if (!cons->opened)
558 xencons_rx(cons);
561 while ((ret = xencons_getc(cons)) != -1) {
563 kdb_alt_break(ret, &cons->altbrk);
571 xencons_tx_flush(cons, 0);
648 struct xencons_priv *cons;
650 cons = tty_softc(tp);
652 cons->opened = true;
660 struct xencons_priv *cons;
662 cons = tty_softc(tp);
664 cons->opened = false;
671 struct xencons_priv *cons;
674 cons = tty_softc(tp);
677 callout_reset(&cons->callout, XC_POLLTIME,
684 struct xencons_priv *cons;
686 cons = tty_softc(tp);
688 callout_stop(&cons->callout);
691 callout_reset(&cons->callout, XC_POLLTIME,
735 struct xencons_priv *cons;
738 cons = &main_cons;
740 tp = tty_alloc(&xencons_ttydevsw, cons);
744 callout_init_mtx(&cons->callout, tty_getlock(tp), 0);
746 err = cons->ops->init(dev, tp, xencons_intr);
764 struct xencons_priv *cons;
769 cons = tty_softc(tp);
770 xen_intr_unbind(&cons->intr_handle);
772 err = cons->ops->init(dev, tp, xencons_intr);