Lines Matching full:cons
41 #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,
201 static inline void xencons_lock(struct xencons_priv *cons) in xencons_lock() argument
205 mtx_lock_spin(&cons->mtx); in xencons_lock()
209 static inline void xencons_unlock(struct xencons_priv *cons) in xencons_unlock() argument
213 mtx_unlock_spin(&cons->mtx); in xencons_unlock()
216 #define xencons_lock_assert(cons) mtx_assert(&(cons)->mtx, MA_OWNED) argument
220 xencons_early_init_hypervisor(struct xencons_priv *cons) in xencons_early_init_hypervisor() argument
232 struct xencons_priv *cons; in xencons_init_hypervisor() local
235 cons = tty_softc(tp); in xencons_init_hypervisor()
238 intr_handler, tp, INTR_TYPE_TTY | INTR_MPSAFE, &cons->intr_handle); in xencons_init_hypervisor()
246 xencons_write_hypervisor(struct xencons_priv *cons, const char *buffer, in xencons_write_hypervisor() argument
256 xencons_read_hypervisor(struct xencons_priv *cons, char *buffer, in xencons_read_hypervisor() argument
260 xencons_lock_assert(cons); in xencons_read_hypervisor()
274 xencons_early_init_ring(struct xencons_priv *cons) in xencons_early_init_ring() argument
276 cons->intf = pmap_mapdev_attr(ptoa(xen_get_console_mfn()), PAGE_SIZE, in xencons_early_init_ring()
278 cons->evtchn = xen_get_console_evtchn(); in xencons_early_init_ring()
284 struct xencons_priv *cons; in xencons_init_ring() local
287 cons = tty_softc(tp); in xencons_init_ring()
289 if (cons->evtchn == 0) in xencons_init_ring()
292 err = xen_intr_bind_local_port(dev, cons->evtchn, NULL, in xencons_init_ring()
293 intr_handler, tp, INTR_TYPE_TTY | INTR_MPSAFE, &cons->intr_handle); in xencons_init_ring()
301 xencons_notify_ring(struct xencons_priv *cons) in xencons_notify_ring() argument
308 if (__predict_true(cons->intr_handle != NULL)) in xencons_notify_ring()
309 xen_intr_signal(cons->intr_handle); in xencons_notify_ring()
312 .port = cons->evtchn in xencons_notify_ring()
320 xencons_write_ring(struct xencons_priv *cons, const char *buffer, in xencons_write_ring() argument
327 intf = cons->intf; in xencons_write_ring()
329 xencons_lock_assert(cons); in xencons_write_ring()
347 xencons_notify_ring(cons); in xencons_write_ring()
353 xencons_read_ring(struct xencons_priv *cons, char *buffer, unsigned int size) in xencons_read_ring() argument
359 intf = cons->intf; in xencons_read_ring()
361 xencons_lock_assert(cons); in xencons_read_ring()
378 xencons_notify_ring(cons); in xencons_read_ring()
416 xencons_rx(struct xencons_priv *cons) in xencons_rx() argument
421 xencons_lock(cons); in xencons_rx()
422 while ((sz = cons->ops->read(cons, buf, sizeof(buf))) > 0) { in xencons_rx()
426 cons->rbuf[RBUF_MASK(cons->rp++)] = buf[i]; in xencons_rx()
428 xencons_unlock(cons); in xencons_rx()
433 xencons_tx_full(struct xencons_priv *cons) in xencons_tx_full() argument
437 xencons_lock(cons); in xencons_tx_full()
438 used = cons->wp - cons->wc; in xencons_tx_full()
439 xencons_unlock(cons); in xencons_tx_full()
445 xencons_tx_flush(struct xencons_priv *cons, int force) in xencons_tx_flush() argument
449 xencons_lock(cons); in xencons_tx_flush()
450 while (cons->wc != cons->wp) { in xencons_tx_flush()
452 sz = cons->wp - cons->wc; in xencons_tx_flush()
453 if (sz > (WBUF_SIZE - WBUF_MASK(cons->wc))) in xencons_tx_flush()
454 sz = WBUF_SIZE - WBUF_MASK(cons->wc); in xencons_tx_flush()
455 sent = cons->ops->write(cons, &cons->wbuf[WBUF_MASK(cons->wc)], in xencons_tx_flush()
472 cons->wc += sent; in xencons_tx_flush()
474 xencons_unlock(cons); in xencons_tx_flush()
478 xencons_putc(struct xencons_priv *cons, int c, bool force_flush) in xencons_putc() argument
481 xencons_lock(cons); in xencons_putc()
482 if ((cons->wp - cons->wc) < WBUF_SIZE) in xencons_putc()
483 cons->wbuf[WBUF_MASK(cons->wp++)] = c; in xencons_putc()
484 xencons_unlock(cons); in xencons_putc()
486 xencons_tx_flush(cons, force_flush); in xencons_putc()
488 return (xencons_tx_full(cons)); in xencons_putc()
492 xencons_getc(struct xencons_priv *cons) in xencons_getc() argument
496 xencons_lock(cons); in xencons_getc()
497 if (cons->rp != cons->rc) { in xencons_getc()
499 ret = (int)cons->rbuf[RBUF_MASK(cons->rc)]; in xencons_getc()
500 cons->rc++; in xencons_getc()
505 xencons_unlock(cons); in xencons_getc()
515 struct xencons_priv *cons; in xencons_tx() local
517 cons = tty_softc(tp); in xencons_tx()
525 if (xencons_tx_full(cons)) in xencons_tx()
530 cons_full = xencons_putc(cons, c, false); in xencons_tx()
539 struct xencons_priv *cons; in xencons_intr() local
543 cons = tty_softc(tp); in xencons_intr()
554 if (!cons->opened) in xencons_intr()
557 xencons_rx(cons); in xencons_intr()
560 while ((ret = xencons_getc(cons)) != -1) { in xencons_intr()
562 kdb_alt_break(ret, &cons->altbrk); in xencons_intr()
570 xencons_tx_flush(cons, 0); in xencons_intr()
647 struct xencons_priv *cons; in xencons_tty_open() local
649 cons = tty_softc(tp); in xencons_tty_open()
651 cons->opened = true; in xencons_tty_open()
659 struct xencons_priv *cons; in xencons_tty_close() local
661 cons = tty_softc(tp); in xencons_tty_close()
663 cons->opened = false; in xencons_tty_close()
670 struct xencons_priv *cons; in xencons_timeout() local
673 cons = tty_softc(tp); in xencons_timeout()
676 callout_reset(&cons->callout, XC_POLLTIME, in xencons_timeout()
683 struct xencons_priv *cons; in xencons_tty_outwakeup() local
685 cons = tty_softc(tp); in xencons_tty_outwakeup()
687 callout_stop(&cons->callout); in xencons_tty_outwakeup()
690 callout_reset(&cons->callout, XC_POLLTIME, in xencons_tty_outwakeup()
729 struct xencons_priv *cons; in xencons_attach() local
732 cons = &main_cons; in xencons_attach()
734 tp = tty_alloc(&xencons_ttydevsw, cons); in xencons_attach()
738 callout_init_mtx(&cons->callout, tty_getlock(tp), 0); in xencons_attach()
740 err = cons->ops->init(dev, tp, xencons_intr); in xencons_attach()
758 struct xencons_priv *cons; in xencons_resume() local
763 cons = tty_softc(tp); in xencons_resume()
764 xen_intr_unbind(&cons->intr_handle); in xencons_resume()
766 err = cons->ops->init(dev, tp, xencons_intr); in xencons_resume()