diff options
author | Mark Kettenis <kettenis@cvs.openbsd.org> | 2013-08-15 18:29:57 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@cvs.openbsd.org> | 2013-08-15 18:29:57 +0000 |
commit | f88c3be3098e822c84b1b72b4a42980ee696bc04 (patch) | |
tree | 77e4c03e4eac8e59d3e03ce037ee18800571a112 /sys/arch | |
parent | c630e4f7ec3f620d5241ab23d100f4a289f28c92 (diff) |
Add RI_VCONS support.
ok miod@
Diffstat (limited to 'sys/arch')
-rw-r--r-- | sys/arch/sparc/dev/fb.c | 26 | ||||
-rw-r--r-- | sys/arch/sparc64/dev/fb.c | 27 |
2 files changed, 39 insertions, 14 deletions
diff --git a/sys/arch/sparc/dev/fb.c b/sys/arch/sparc/dev/fb.c index bf299342ec1..52cc7d2ed41 100644 --- a/sys/arch/sparc/dev/fb.c +++ b/sys/arch/sparc/dev/fb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fb.c,v 1.52 2010/07/10 19:32:24 miod Exp $ */ +/* $OpenBSD: fb.c,v 1.53 2013/08/15 18:29:56 kettenis Exp $ */ /* $NetBSD: fb.c,v 1.23 1997/07/07 23:30:22 pk Exp $ */ /* @@ -462,6 +462,7 @@ void fbwscons_console_init(struct sunfb *sf, int row) { struct rasops_info *ri = &sf->sf_ro; + void *cookie; long defattr; if (CPU_ISSUN4 || romgetcursoraddr(&sf->sf_crowp, &sf->sf_ccolp)) @@ -508,14 +509,19 @@ fbwscons_console_init(struct sunfb *sf, int row) (sf->sf_ccolp != NULL || sf->sf_crowp != NULL)) ri->ri_updatecursor = fb_updatecursor; + if (ri->ri_flg & RI_VCONS) + cookie = ri->ri_active; + else + cookie = ri; + if (ISSET(ri->ri_caps, WSSCREEN_WSCOLORS)) - ri->ri_ops.alloc_attr(ri, + ri->ri_ops.alloc_attr(cookie, WSCOL_BLACK, WSCOL_WHITE, WSATTR_WSCOLORS, &defattr); else - ri->ri_ops.alloc_attr(ri, 0, 0, 0, &defattr); + ri->ri_ops.alloc_attr(cookie, 0, 0, 0, &defattr); fb_initwsd(sf); - wsdisplay_cnattach(&sf->sf_wsd, ri, + wsdisplay_cnattach(&sf->sf_wsd, cookie, ri->ri_ccol, ri->ri_crow, defattr); } @@ -590,18 +596,24 @@ fb_alloc_screen(void *v, const struct wsscreen_descr *type, { struct sunfb *sf = v; struct rasops_info *ri = &sf->sf_ro; + void *cookie; if (sf->sf_nscreens > 0) return (ENOMEM); - *cookiep = ri; + if (ri->ri_flg & RI_VCONS) + cookie = ri->ri_active; + else + cookie = ri; + + *cookiep = cookie; *curyp = 0; *curxp = 0; if (ISSET(ri->ri_caps, WSSCREEN_WSCOLORS)) - ri->ri_ops.alloc_attr(ri, + ri->ri_ops.alloc_attr(cookie, WSCOL_BLACK, WSCOL_WHITE, WSATTR_WSCOLORS, attrp); else - ri->ri_ops.alloc_attr(ri, 0, 0, 0, attrp); + ri->ri_ops.alloc_attr(cookie, 0, 0, 0, attrp); sf->sf_nscreens++; return (0); } diff --git a/sys/arch/sparc64/dev/fb.c b/sys/arch/sparc64/dev/fb.c index e947e23391c..6613fedd878 100644 --- a/sys/arch/sparc64/dev/fb.c +++ b/sys/arch/sparc64/dev/fb.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fb.c,v 1.23 2011/04/07 15:30:16 miod Exp $ */ +/* $OpenBSD: fb.c,v 1.24 2013/08/15 18:29:56 kettenis Exp $ */ /* $NetBSD: fb.c,v 1.23 1997/07/07 23:30:22 pk Exp $ */ /* @@ -303,6 +303,7 @@ void fbwscons_console_init(struct sunfb *sf, int row) { struct rasops_info *ri = &sf->sf_ro; + void *cookie; long defattr; if (romgetcursoraddr(&sf->sf_crowp, &sf->sf_ccolp)) @@ -349,14 +350,20 @@ fbwscons_console_init(struct sunfb *sf, int row) (sf->sf_ccolp != NULL || sf->sf_crowp != NULL)) ri->ri_updatecursor = fb_updatecursor; + if (ri->ri_flg & RI_VCONS) + cookie = ri->ri_active; + else + cookie = ri; + if (ISSET(ri->ri_caps, WSSCREEN_WSCOLORS)) - ri->ri_ops.alloc_attr(ri, + ri->ri_ops.alloc_attr(cookie, WSCOL_BLACK, WSCOL_WHITE, WSATTR_WSCOLORS, &defattr); else - ri->ri_ops.alloc_attr(ri, 0, 0, 0, &defattr); + ri->ri_ops.alloc_attr(cookie, 0, 0, 0, &defattr); fb_initwsd(sf); - wsdisplay_cnattach(&sf->sf_wsd, ri, ri->ri_ccol, ri->ri_crow, defattr); + wsdisplay_cnattach(&sf->sf_wsd, cookie, + ri->ri_ccol, ri->ri_crow, defattr); } void @@ -430,18 +437,24 @@ fb_alloc_screen(void *v, const struct wsscreen_descr *type, { struct sunfb *sf = v; struct rasops_info *ri = &sf->sf_ro; + void *cookie; if (sf->sf_nscreens > 0) return (ENOMEM); - *cookiep = ri; + if (ri->ri_flg & RI_VCONS) + cookie = ri->ri_active; + else + cookie = ri; + + *cookiep = cookie; *curyp = 0; *curxp = 0; if (ISSET(ri->ri_caps, WSSCREEN_WSCOLORS)) - ri->ri_ops.alloc_attr(ri, + ri->ri_ops.alloc_attr(cookie, WSCOL_BLACK, WSCOL_WHITE, WSATTR_WSCOLORS, attrp); else - ri->ri_ops.alloc_attr(ri, 0, 0, 0, attrp); + ri->ri_ops.alloc_attr(cookie, 0, 0, 0, attrp); sf->sf_nscreens++; return (0); } |