Lines Matching refs:scr
229 #define WSSCREEN_HAS_EMULATOR(scr) ((scr)->scr_dconf->wsemul != NULL)
230 #define WSSCREEN_HAS_TTY(scr) ((scr)->scr_tty != NULL)
296 struct wsscreen *scr = priv;
301 WSSCREEN_HAS_EMULATOR(scr) && WSSCREEN_HAS_TTY(scr)) {
302 struct tty *tp = scr->scr_tty;
310 callout_schedule(&scr->scr_getc_ch, mstohz(10));
320 struct wsscreen *scr;
322 scr = malloc(sizeof(struct wsscreen), M_DEVBUF, M_WAITOK);
331 (*dconf->wsemul->attach)(1, 0, 0, 0, 0, scr, 0);
341 free(scr, M_DEVBUF);
346 ccol, crow, scr, defattr);
352 scr->scr_dconf = dconf;
354 scr->scr_tty = tty_alloc();
355 tty_attach(scr->scr_tty);
356 scr->scr_hold_screen = 0;
357 if (WSSCREEN_HAS_EMULATOR(scr))
358 scr->scr_flags = 0;
360 scr->scr_flags = SCR_GRAPHICS;
362 scr->scr_syncops = 0;
363 scr->sc = sc;
365 scr->scr_rawkbd = 0;
368 callout_init(&scr->scr_getc_ch, 0);
369 callout_setfunc(&scr->scr_getc_ch, wsscreen_getc_poll, scr);
371 callout_schedule(&scr->scr_getc_ch, mstohz(10));
373 return scr;
377 wsscreen_detach(struct wsscreen *scr)
381 if (WSSCREEN_HAS_TTY(scr)) {
382 tty_detach(scr->scr_tty);
383 tty_free(scr->scr_tty);
385 if (WSSCREEN_HAS_EMULATOR(scr)) {
386 (*scr->scr_dconf->wsemul->detach)(scr->scr_dconf->wsemulcookie,
388 wsemul_drop(scr->scr_dconf->wsemul);
390 if (scr->scr_dconf->scrdata->capabilities & WSSCREEN_FREE)
391 free(__UNCONST(scr->scr_dconf->scrdata), M_DEVBUF);
393 callout_halt(&scr->scr_getc_ch, NULL);
394 callout_destroy(&scr->scr_getc_ch);
396 free(scr->scr_dconf, M_DEVBUF);
397 free(scr, M_DEVBUF);
404 const struct wsscreen_descr *scr;
411 scr = scrdata->screens[i];
412 if (!strcmp(name, scr->name))
413 return scr;
446 struct wsscreen *scr;
474 scr = wsscreen_attach(sc, 0, emul, scrdesc,
476 if (scr == NULL) {
482 sc->sc_scr[idx] = scr;
488 scr->scr_dconf->emulcookie,
491 sc->sc_focus = scr;
498 wsdisplay_closescreen(struct wsdisplay_softc *sc, struct wsscreen *scr)
503 if (WSSCREEN_HAS_TTY(scr)) {
504 struct tty *tp = scr->scr_tty;
512 if (scr == sc->sc_scr[idx])
530 struct wsscreen *scr;
533 scr = sc->sc_focus;
535 if (!scr)
558 struct wsscreen *scr;
564 if ((scr = sc->sc_scr[idx]) == NULL)
567 if (scr->scr_dconf == &wsdisplay_console_conf ||
568 scr->scr_syncops ||
569 ((scr->scr_flags & SCR_OPEN) && !(flags & WSDISPLAY_DELSCR_FORCE)))
572 wsdisplay_closescreen(sc, scr);
579 if (sc->sc_focus == scr) {
593 if (scr->scr_flags & SCR_WAITACTIVE)
594 wakeup(scr);
597 cookie = scr->scr_dconf->emulcookie;
599 scr);
737 struct wsscreen *scr;
741 scr = sc->sc_focus;
742 if (!scr || !scr->scr_syncops)
748 op = scr->scr_syncops->attach;
750 op = scr->scr_syncops->detach;
751 res = (*op)(scr->scr_synccookie, 1, wsdisplay_swdone_cb, sc);
793 struct wsscreen *scr = sc->sc_focus;
796 KASSERT(scr);
797 KASSERT(scr->scr_syncops);
1011 struct wsscreen *scr;
1027 if ((scr = sc->sc_scr[WSDISPLAYSCREEN(dev)]) == NULL)
1030 if (WSSCREEN_HAS_TTY(scr)) {
1031 tp = scr->scr_tty;
1057 if (newopen && WSSCREEN_HAS_EMULATOR(scr)) {
1060 tp->t_winsize.ws_row = scr->scr_dconf->scrdata->nrows;
1061 tp->t_winsize.ws_col = scr->scr_dconf->scrdata->ncols;
1067 scr->scr_flags |= SCR_OPEN;
1077 struct wsscreen *scr;
1090 if ((scr = sc->sc_scr[WSDISPLAYSCREEN(dev)]) == NULL)
1093 if (WSSCREEN_HAS_TTY(scr)) {
1094 if (scr->scr_hold_screen) {
1102 tp = scr->scr_tty;
1107 if (scr->scr_syncops)
1108 (*scr->scr_syncops->destroy)(scr->scr_synccookie);
1110 if (WSSCREEN_HAS_EMULATOR(scr)) {
1111 scr->scr_flags &= ~SCR_GRAPHICS;
1112 (*scr->scr_dconf->wsemul->reset)(scr->scr_dconf->wsemulcookie,
1115 (*scr->scr_dconf->wsemul->reset)
1116 (scr->scr_dconf->wsemulcookie,
1121 if (scr->scr_rawkbd) {
1123 (void)wsdisplay_internal_ioctl(sc, scr, WSKBDIO_SETMODE,
1128 scr->scr_flags &= ~SCR_OPEN;
1138 struct wsscreen *scr;
1151 if ((scr = sc->sc_scr[WSDISPLAYSCREEN(dev)]) == NULL)
1154 if (!WSSCREEN_HAS_TTY(scr))
1157 tp = scr->scr_tty;
1166 struct wsscreen *scr;
1177 if ((scr = sc->sc_scr[WSDISPLAYSCREEN(dev)]) == NULL)
1180 if (!WSSCREEN_HAS_TTY(scr))
1183 tp = scr->scr_tty;
1192 struct wsscreen *scr;
1202 if ((scr = sc->sc_scr[WSDISPLAYSCREEN(dev)]) == NULL)
1205 if (!WSSCREEN_HAS_TTY(scr))
1208 tp = scr->scr_tty;
1216 struct wsscreen *scr;
1223 if ((scr = sc->sc_scr[WSDISPLAYSCREEN(dev)]) == NULL)
1227 if (WSSCREEN_HAS_TTY(scr))
1237 struct wsscreen *scr;
1247 if ((scr = sc->sc_scr[WSDISPLAYSCREEN(dev)]) == NULL)
1250 return scr->scr_tty;
1260 struct wsscreen *scr;
1277 if ((scr = sc->sc_scr[WSDISPLAYSCREEN(dev)]) == NULL)
1280 if (WSSCREEN_HAS_TTY(scr)) {
1281 tp = scr->scr_tty;
1295 error = wsdisplay_usl_ioctl2(sc, scr, cmd, data, flag, l);
1300 return wsdisplay_internal_ioctl(sc, scr, cmd, data, flag, l);
1313 wsdisplay_internal_ioctl(struct wsdisplay_softc *sc, struct wsscreen *scr,
1329 scr->scr_rawkbd = (*(int *)data == WSKBD_RAW);
1330 return wsdisplay_update_rawkbd(sc, scr);
1332 *(int *)data = (scr->scr_rawkbd ?
1347 if (scr->scr_flags & SCR_GRAPHICS) {
1348 if (scr->scr_flags & SCR_DUMBFB)
1363 if (WSSCREEN_HAS_EMULATOR(scr)) {
1364 scr->scr_flags &= ~SCR_GRAPHICS;
1367 scr->scr_flags |= SCR_GRAPHICS |
1373 scr->scr_dconf->emulcookie, cmd, data, flag, l);
1421 scr->scr_dconf->emulcookie, &fd);
1422 if (!error && WSSCREEN_HAS_EMULATOR(scr)) {
1423 (*scr->scr_dconf->wsemul->reset)
1424 (scr->scr_dconf->wsemulcookie, WSEMUL_SYNCFONT);
1425 if (scr->scr_dconf->wsemul->resize) {
1426 (*scr->scr_dconf->wsemul->resize)
1427 (scr->scr_dconf->wsemulcookie,
1428 scr->scr_dconf->scrdata);
1430 scr->scr_tty->t_winsize.ws_row =
1431 scr->scr_dconf->scrdata->nrows;
1432 scr->scr_tty->t_winsize.ws_col =
1433 scr->scr_dconf->scrdata->ncols;
1436 ttysig(scr->scr_tty, TTYSIG_PG1, SIGWINCH);
1446 (*scr->scr_dconf->wsemul->getmsgattrs)
1447 (scr->scr_dconf->wsemulcookie, d);
1474 scr->scr_dconf->emulcookie, cmd, data, flag, l);
1641 struct wsscreen *scr;
1651 if ((scr = sc->sc_scr[WSDISPLAYSCREEN(dev)]) == NULL)
1654 if (!(scr->scr_flags & SCR_GRAPHICS))
1659 scr->scr_dconf->emulcookie, offset, prot);
1666 struct wsscreen *scr;
1676 if ((scr = sc->sc_scr[WSDISPLAYSCREEN(tp->t_dev)]) == NULL) {
1681 if (scr->scr_hold_screen) {
1690 scr->scr_in_ttyoutput = 1;
1705 if (!(scr->scr_flags & SCR_GRAPHICS)) {
1706 KASSERT(WSSCREEN_HAS_EMULATOR(scr));
1707 (*scr->scr_dconf->wsemul->output)(scr->scr_dconf->wsemulcookie,
1711 scr->scr_dconf == &wsdisplay_console_conf &&
1724 if (!(scr->scr_flags & SCR_GRAPHICS)) {
1725 KASSERT(WSSCREEN_HAS_EMULATOR(scr));
1726 (*scr->scr_dconf->wsemul->output)
1727 (scr->scr_dconf->wsemulcookie, tbuf, n, 0);
1731 scr->scr_dconf == &wsdisplay_console_conf &&
1743 scr->scr_in_ttyoutput = 0;
1785 struct wsscreen *scr = v;
1787 if (scr == NULL) /* console, before real attach */
1790 if (scr->scr_flags & SCR_GRAPHICS) /* can this happen? */
1793 (void) wsdisplay_internal_ioctl(scr->sc, scr, WSKBDIO_BELL, NULL,
1800 struct wsscreen *scr = v;
1807 if (scr->scr_flags & SCR_GRAPHICS) /* XXX can't happen */
1809 if (!WSSCREEN_HAS_TTY(scr))
1812 tp = scr->scr_tty;
1821 KASSERT(scr->scr_in_ttyoutput);
1837 struct wsscreen *scr;
1844 scr = sc->sc_focus;
1846 if (!scr || !WSSCREEN_HAS_TTY(scr))
1849 tp = scr->scr_tty;
1853 else if (WSSCREEN_HAS_EMULATOR(scr)) {
1854 count = (*scr->scr_dconf->wsemul->translate)
1855 (scr->scr_dconf->wsemulcookie, ks, &dp);
1863 wsdisplay_update_rawkbd(struct wsdisplay_softc *sc, struct wsscreen *scr)
1871 raw = (scr ? scr->scr_rawkbd : 0);
1873 if (scr != sc->sc_focus ||
1909 struct wsscreen *scr;
1919 scr = sc->sc_scr[no];
1920 if (!scr) {
1944 if (scr->scr_syncops && !error)
1949 if (!error && (scr->scr_flags & SCR_WAITACTIVE))
1950 wakeup(scr);
1967 struct wsscreen *scr;
1977 scr = sc->sc_scr[no];
1978 if (!scr) {
2000 sc->sc_focus = scr;
2003 (void) wsdisplay_update_rawkbd(sc, scr);
2007 if (scr->scr_syncops &&
2009 error = (*scr->scr_syncops->attach)(scr->scr_synccookie, waitok,
2033 struct wsscreen *scr;
2052 scr = sc->sc_scr[no];
2053 if (!scr) {
2067 scr->scr_dconf->emulcookie,
2083 struct wsscreen *scr;
2112 scr = sc->sc_focus;
2113 if (!scr) {
2119 if (scr->scr_syncops) {
2125 res = (*scr->scr_syncops->detach)(scr->scr_synccookie, waitok,
2131 } else if (scr->scr_flags & SCR_GRAPHICS) {
2143 struct wsscreen *scr;
2146 scr = sc->sc_focus;
2148 if (!scr)
2153 if (!WSSCREEN_HAS_EMULATOR(scr))
2155 (*scr->scr_dconf->wsemul->reset)(scr->scr_dconf->wsemulcookie,
2159 wsdisplay_closescreen(sc, scr);
2175 wsscreen_attach_sync(struct wsscreen *scr, const struct wscons_syncops *ops,
2178 if (scr->scr_syncops) {
2183 if ((*scr->scr_syncops->check)(scr->scr_synccookie))
2186 scr->scr_syncops = ops;
2187 scr->scr_synccookie = cookie;
2188 if (scr == scr->sc->sc_focus)
2189 scr->sc->sc_flags |= SC_XATTACHED;
2194 wsscreen_detach_sync(struct wsscreen *scr)
2196 if (!scr->scr_syncops)
2198 scr->scr_syncops = 0;
2199 if (scr == scr->sc->sc_focus)
2200 scr->sc->sc_flags &= ~SC_XATTACHED;
2205 wsscreen_lookup_sync(struct wsscreen *scr,
2209 if (!scr->scr_syncops || ops != scr->scr_syncops)
2211 *cookiep = scr->scr_synccookie;
2243 struct wsscreen *scr;
2257 scr = sc->sc_scr[no];
2258 if (!scr)
2262 if (scr != sc->sc_focus) {
2263 scr->scr_flags |= SCR_WAITACTIVE;
2264 res = tsleep(scr, PCATCH, "wswait", 0);
2265 if (scr != sc->sc_scr[no])
2268 scr->scr_flags &= ~SCR_WAITACTIVE;
2278 struct wsscreen *scr;
2280 scr = sc->sc_focus;
2282 if (!scr)
2286 scr->scr_hold_screen = 1;
2288 scr->scr_hold_screen = 0;
2289 callout_schedule(&scr->scr_tty->t_rstrt_ch, 0);