Module Name: src Committed By: macallan Date: Thu Jun 14 00:56:38 UTC 2012
Modified Files: src/sys/dev/pci: machfb.c Log Message: more preparation for alpha support: - use R3G3B2 colour map - consistently use ri_devcmap[] - reshuffle cmap setup, screen cleaning, msg buffer replay etc. to deal with the above To generate a diff of this commit: cvs rdiff -u -r1.77 -r1.78 src/sys/dev/pci/machfb.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/machfb.c diff -u src/sys/dev/pci/machfb.c:1.77 src/sys/dev/pci/machfb.c:1.78 --- src/sys/dev/pci/machfb.c:1.77 Thu Jun 14 00:21:55 2012 +++ src/sys/dev/pci/machfb.c Thu Jun 14 00:56:37 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: machfb.c,v 1.77 2012/06/14 00:21:55 macallan Exp $ */ +/* $NetBSD: machfb.c,v 1.78 2012/06/14 00:56:37 macallan Exp $ */ /* * Copyright (c) 2002 Bang Jun-Young @@ -34,7 +34,7 @@ #include <sys/cdefs.h> __KERNEL_RCSID(0, - "$NetBSD: machfb.c,v 1.77 2012/06/14 00:21:55 macallan Exp $"); + "$NetBSD: machfb.c,v 1.78 2012/06/14 00:56:37 macallan Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -745,14 +745,9 @@ mach64_attach(device_t parent, device_t wsfont_init(); - sc->sc_bg = WS_DEFAULT_BG; vcons_init(&sc->vd, sc, &mach64_defaultscreen, &sc->sc_accessops); sc->vd.init_screen = mach64_init_screen; - mach64_init_lut(sc); - mach64_clearscreen(sc); - machfb_blank(sc, 0); /* unblank the screen */ - if (sc->sc_console) { vcons_init_screen(&sc->vd, &mach64_console_screen, 1, @@ -766,7 +761,6 @@ mach64_attach(device_t parent, device_t mach64_defaultscreen.ncols = ri->ri_cols; wsdisplay_cnattach(&mach64_defaultscreen, ri, 0, 0, defattr); - vcons_replay_msgbuf(&mach64_console_screen); } else { /* * since we're not the console we can postpone the rest @@ -779,6 +773,14 @@ mach64_attach(device_t parent, device_t &defattr); } } + sc->sc_bg = mach64_console_screen.scr_ri.ri_devcmap[WS_DEFAULT_BG]; + mach64_clearscreen(sc); + mach64_init_lut(sc); + + if (sc->sc_console) + vcons_replay_msgbuf(&mach64_console_screen); + + machfb_blank(sc, 0); /* unblank the screen */ aa.console = sc->sc_console; aa.scrdata = &mach64_screenlist; @@ -813,6 +815,8 @@ mach64_init_screen(void *cookie, struct ri->ri_height = sc->sc_my_mode->vdisplay; ri->ri_stride = ri->ri_width; ri->ri_flg = RI_CENTER; + if (ri->ri_depth == 8) + ri->ri_flg |= RI_8BIT_IS_RGB/* | RI_ENABLE_ALPHA*/; set_address(ri, sc->sc_aperture); #ifdef VCONS_DRAW_INTR @@ -1305,12 +1309,14 @@ mach64_set_pll(struct mach64_softc *sc, static void mach64_init_lut(struct mach64_softc *sc) { + uint8_t cmap[768]; int i, idx; + rasops_get_cmap(&mach64_console_screen.scr_ri, cmap, sizeof(cmap)); idx = 0; for (i = 0; i < 256; i++) { - mach64_putpalreg(sc, i, rasops_cmap[idx], rasops_cmap[idx + 1], - rasops_cmap[idx + 2]); + mach64_putpalreg(sc, i, cmap[idx], cmap[idx + 1], + cmap[idx + 2]); idx += 3; } } @@ -1537,7 +1543,7 @@ mach64_erasecols(void *cookie, int row, height = ri->ri_font->fontheight; rasops_unpack_attr(fillattr, &fg, &bg, &ul); - mach64_rectfill(sc, x, y, width, height, bg); + mach64_rectfill(sc, x, y, width, height, ri->ri_devcmap[bg]); } } @@ -1574,7 +1580,7 @@ mach64_eraserows(void *cookie, int row, height = ri->ri_font->fontheight * nrows; rasops_unpack_attr(fillattr, &fg, &bg, &ul); - mach64_rectfill(sc, x, y, width, height, bg); + mach64_rectfill(sc, x, y, width, height, ri->ri_devcmap[bg]); } }