summaryrefslogtreecommitdiff
path: root/sys/arch/sparc/dev/fb.c
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2006-06-30 21:38:20 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2006-06-30 21:38:20 +0000
commitb06dcbe12fcf1901e5515acc951a8c18ab23e8c6 (patch)
treeb2474be510eb7efb17db69ee2c8f676d381958c1 /sys/arch/sparc/dev/fb.c
parent4c0ac263ded8f53c10fafb84a0cf047c25b626d4 (diff)
For 32bit sun frame buffers, tweak ri_devcmap to get the BoW palette instead
of needing different WSCOL_{BLACK,WHITE} values than 8bit frame buffers. This allows us to not special case the alloc_attr() invocations depending on the color depth, and to make WSCOL_{BLACK,WHITE} constants again in the wsemul_sun land.
Diffstat (limited to 'sys/arch/sparc/dev/fb.c')
-rw-r--r--sys/arch/sparc/dev/fb.c43
1 files changed, 22 insertions, 21 deletions
diff --git a/sys/arch/sparc/dev/fb.c b/sys/arch/sparc/dev/fb.c
index 33c91e963c7..4d1d520ac03 100644
--- a/sys/arch/sparc/dev/fb.c
+++ b/sys/arch/sparc/dev/fb.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fb.c,v 1.37 2006/06/29 17:54:30 miod Exp $ */
+/* $OpenBSD: fb.c,v 1.38 2006/06/30 21:38:17 miod Exp $ */
/* $NetBSD: fb.c,v 1.23 1997/07/07 23:30:22 pk Exp $ */
/*
@@ -370,19 +370,21 @@ fbwscons_init(struct sunfb *sf, int flags)
void
fbwscons_console_init(struct sunfb *sf, int row)
{
+ struct rasops_info *ri = &sf->sf_ro;
+ int32_t tmp;
long defattr;
if (CPU_ISSUN4 || romgetcursoraddr(&sf->sf_crowp, &sf->sf_ccolp))
sf->sf_ccolp = sf->sf_crowp = NULL;
if (sf->sf_ccolp != NULL)
- sf->sf_ro.ri_ccol = *sf->sf_ccolp;
+ ri->ri_ccol = *sf->sf_ccolp;
if (row < 0) {
if (sf->sf_crowp != NULL)
- sf->sf_ro.ri_crow = *sf->sf_crowp;
+ ri->ri_crow = *sf->sf_crowp;
else
/* assume last row */
- sf->sf_ro.ri_crow = sf->sf_ro.ri_rows - 1;
+ ri->ri_crow = ri->ri_rows - 1;
} else {
/*
* If we force the display row, this is because the screen
@@ -392,45 +394,44 @@ fbwscons_console_init(struct sunfb *sf, int row)
* upon shutdown...
*/
sf->sf_crowp = sf->sf_ccolp = NULL;
- sf->sf_ro.ri_crow = row;
+ ri->ri_crow = row;
}
/*
* Scale back rows and columns if the font would not otherwise
* fit on this display. Without this we would panic later.
*/
- if (sf->sf_ro.ri_crow >= sf->sf_ro.ri_rows)
- sf->sf_ro.ri_crow = sf->sf_ro.ri_rows - 1;
- if (sf->sf_ro.ri_ccol >= sf->sf_ro.ri_cols)
- sf->sf_ro.ri_ccol = sf->sf_ro.ri_cols - 1;
+ if (ri->ri_crow >= ri->ri_rows)
+ ri->ri_crow = ri->ri_rows - 1;
+ if (ri->ri_ccol >= ri->ri_cols)
+ ri->ri_ccol = ri->ri_cols - 1;
/*
* Take care of updating the PROM cursor position as well if we can.
*/
- if (sf->sf_ro.ri_updatecursor == NULL &&
+ if (ri->ri_updatecursor == NULL &&
(sf->sf_ccolp != NULL || sf->sf_crowp != NULL))
- sf->sf_ro.ri_updatecursor = fb_updatecursor;
+ ri->ri_updatecursor = fb_updatecursor;
/*
* Select appropriate color settings to mimic a
* black on white Sun console.
*/
if (sf->sf_depth > 8) {
- wscol_white = 0;
- wscol_black = 255;
+ tmp = ri->ri_devcmap[WSCOL_WHITE];
+ ri->ri_devcmap[WSCOL_WHITE] = ri->ri_devcmap[WSCOL_BLACK];
+ ri->ri_devcmap[WSCOL_BLACK] = tmp;
}
- if (ISSET(sf->sf_ro.ri_caps, WSSCREEN_WSCOLORS) &&
- sf->sf_depth == 8) {
- sf->sf_ro.ri_ops.alloc_attr(&sf->sf_ro,
+ if (ISSET(ri->ri_caps, WSSCREEN_WSCOLORS))
+ ri->ri_ops.alloc_attr(ri,
WSCOL_BLACK, WSCOL_WHITE, WSATTR_WSCOLORS, &defattr);
- } else {
- sf->sf_ro.ri_ops.alloc_attr(&sf->sf_ro, 0, 0, 0, &defattr);
- }
+ else
+ ri->ri_ops.alloc_attr(ri, 0, 0, 0, &defattr);
fb_initwsd(sf);
- wsdisplay_cnattach(&sf->sf_wsd, &sf->sf_ro,
- sf->sf_ro.ri_ccol, sf->sf_ro.ri_crow, defattr);
+ wsdisplay_cnattach(&sf->sf_wsd, ri,
+ ri->ri_ccol, ri->ri_crow, defattr);
}
void