Lines Matching refs:cons
67 typedef void xencons_early_init_t(struct xencons_priv *cons);
70 typedef int xencons_read_t(struct xencons_priv *cons, char *buffer,
72 typedef int xencons_write_t(struct xencons_priv *cons, const char *buffer,
202 static inline void xencons_lock(struct xencons_priv *cons) in xencons_lock() argument
206 mtx_lock_spin(&cons->mtx); in xencons_lock()
210 static inline void xencons_unlock(struct xencons_priv *cons) in xencons_unlock() argument
214 mtx_unlock_spin(&cons->mtx); in xencons_unlock()
217 #define xencons_lock_assert(cons) mtx_assert(&(cons)->mtx, MA_OWNED) argument
221 xencons_early_init_hypervisor(struct xencons_priv *cons) in xencons_early_init_hypervisor() argument
233 struct xencons_priv *cons; in xencons_init_hypervisor() local
236 cons = tty_softc(tp); in xencons_init_hypervisor()
239 intr_handler, tp, INTR_TYPE_TTY | INTR_MPSAFE, &cons->intr_handle); in xencons_init_hypervisor()
247 xencons_write_hypervisor(struct xencons_priv *cons, const char *buffer, in xencons_write_hypervisor() argument
257 xencons_read_hypervisor(struct xencons_priv *cons, char *buffer, in xencons_read_hypervisor() argument
261 xencons_lock_assert(cons); in xencons_read_hypervisor()
275 xencons_early_init_ring(struct xencons_priv *cons) in xencons_early_init_ring() argument
277 cons->intf = pmap_mapdev_attr(ptoa(xen_get_console_mfn()), PAGE_SIZE, in xencons_early_init_ring()
279 cons->evtchn = xen_get_console_evtchn(); in xencons_early_init_ring()
285 struct xencons_priv *cons; in xencons_init_ring() local
288 cons = tty_softc(tp); in xencons_init_ring()
290 if (cons->evtchn == 0) in xencons_init_ring()
293 err = xen_intr_bind_local_port(dev, cons->evtchn, NULL, in xencons_init_ring()
294 intr_handler, tp, INTR_TYPE_TTY | INTR_MPSAFE, &cons->intr_handle); in xencons_init_ring()
302 xencons_notify_ring(struct xencons_priv *cons) in xencons_notify_ring() argument
309 if (__predict_true(cons->intr_handle != NULL)) in xencons_notify_ring()
310 xen_intr_signal(cons->intr_handle); in xencons_notify_ring()
313 .port = cons->evtchn in xencons_notify_ring()
321 xencons_write_ring(struct xencons_priv *cons, const char *buffer, in xencons_write_ring() argument
328 intf = cons->intf; in xencons_write_ring()
330 xencons_lock_assert(cons); in xencons_write_ring()
348 xencons_notify_ring(cons); in xencons_write_ring()
354 xencons_read_ring(struct xencons_priv *cons, char *buffer, unsigned int size) in xencons_read_ring() argument
360 intf = cons->intf; in xencons_read_ring()
362 xencons_lock_assert(cons); in xencons_read_ring()
379 xencons_notify_ring(cons); in xencons_read_ring()
417 xencons_rx(struct xencons_priv *cons) in xencons_rx() argument
422 xencons_lock(cons); in xencons_rx()
423 while ((sz = cons->ops->read(cons, buf, sizeof(buf))) > 0) { in xencons_rx()
427 cons->rbuf[RBUF_MASK(cons->rp++)] = buf[i]; in xencons_rx()
429 xencons_unlock(cons); in xencons_rx()
434 xencons_tx_full(struct xencons_priv *cons) in xencons_tx_full() argument
438 xencons_lock(cons); in xencons_tx_full()
439 used = cons->wp - cons->wc; in xencons_tx_full()
440 xencons_unlock(cons); in xencons_tx_full()
446 xencons_tx_flush(struct xencons_priv *cons, int force) in xencons_tx_flush() argument
450 xencons_lock(cons); in xencons_tx_flush()
451 while (cons->wc != cons->wp) { in xencons_tx_flush()
453 sz = cons->wp - cons->wc; in xencons_tx_flush()
454 if (sz > (WBUF_SIZE - WBUF_MASK(cons->wc))) in xencons_tx_flush()
455 sz = WBUF_SIZE - WBUF_MASK(cons->wc); in xencons_tx_flush()
456 sent = cons->ops->write(cons, &cons->wbuf[WBUF_MASK(cons->wc)], in xencons_tx_flush()
473 cons->wc += sent; in xencons_tx_flush()
475 xencons_unlock(cons); in xencons_tx_flush()
479 xencons_putc(struct xencons_priv *cons, int c, bool force_flush) in xencons_putc() argument
482 xencons_lock(cons); in xencons_putc()
483 if ((cons->wp - cons->wc) < WBUF_SIZE) in xencons_putc()
484 cons->wbuf[WBUF_MASK(cons->wp++)] = c; in xencons_putc()
485 xencons_unlock(cons); in xencons_putc()
487 xencons_tx_flush(cons, force_flush); in xencons_putc()
489 return (xencons_tx_full(cons)); in xencons_putc()
493 xencons_getc(struct xencons_priv *cons) in xencons_getc() argument
497 xencons_lock(cons); in xencons_getc()
498 if (cons->rp != cons->rc) { in xencons_getc()
500 ret = (int)cons->rbuf[RBUF_MASK(cons->rc)]; in xencons_getc()
501 cons->rc++; in xencons_getc()
506 xencons_unlock(cons); in xencons_getc()
516 struct xencons_priv *cons; in xencons_tx() local
518 cons = tty_softc(tp); in xencons_tx()
526 if (xencons_tx_full(cons)) in xencons_tx()
531 cons_full = xencons_putc(cons, c, false); in xencons_tx()
540 struct xencons_priv *cons; in xencons_intr() local
544 cons = tty_softc(tp); in xencons_intr()
555 if (!cons->opened) in xencons_intr()
558 xencons_rx(cons); in xencons_intr()
561 while ((ret = xencons_getc(cons)) != -1) { in xencons_intr()
563 kdb_alt_break(ret, &cons->altbrk); in xencons_intr()
571 xencons_tx_flush(cons, 0); in xencons_intr()
648 struct xencons_priv *cons; in xencons_tty_open() local
650 cons = tty_softc(tp); in xencons_tty_open()
652 cons->opened = true; in xencons_tty_open()
660 struct xencons_priv *cons; in xencons_tty_close() local
662 cons = tty_softc(tp); in xencons_tty_close()
664 cons->opened = false; in xencons_tty_close()
671 struct xencons_priv *cons; in xencons_timeout() local
674 cons = tty_softc(tp); in xencons_timeout()
677 callout_reset(&cons->callout, XC_POLLTIME, in xencons_timeout()
684 struct xencons_priv *cons; in xencons_tty_outwakeup() local
686 cons = tty_softc(tp); in xencons_tty_outwakeup()
688 callout_stop(&cons->callout); in xencons_tty_outwakeup()
691 callout_reset(&cons->callout, XC_POLLTIME, in xencons_tty_outwakeup()
730 struct xencons_priv *cons; in xencons_attach() local
733 cons = &main_cons; in xencons_attach()
735 tp = tty_alloc(&xencons_ttydevsw, cons); in xencons_attach()
739 callout_init_mtx(&cons->callout, tty_getlock(tp), 0); in xencons_attach()
741 err = cons->ops->init(dev, tp, xencons_intr); in xencons_attach()
759 struct xencons_priv *cons; in xencons_resume() local
764 cons = tty_softc(tp); in xencons_resume()
765 xen_intr_unbind(&cons->intr_handle); in xencons_resume()
767 err = cons->ops->init(dev, tp, xencons_intr); in xencons_resume()