Hi tech@, Nothing uses the rasops4 (4-bit color depth) functions anymore.
It seems unlikely that any future new platform will ever need them. Should we remove them? Comments? OK? Index: sys/conf/files =================================================================== RCS file: /cvs/src/sys/conf/files,v retrieving revision 1.664 diff -u -p -r1.664 files --- sys/conf/files 13 Jul 2018 09:25:22 -0000 1.664 +++ sys/conf/files 22 Jul 2018 10:29:36 -0000 @@ -41,7 +41,6 @@ attach midi at midibus # raster operations attributes define rasops1 -define rasops4 define rasops8 define rasops15 define rasops16 Index: sys/dev/rasops/files.rasops =================================================================== RCS file: /cvs/src/sys/dev/rasops/files.rasops,v retrieving revision 1.7 diff -u -p -r1.7 files.rasops --- sys/dev/rasops/files.rasops 15 Dec 2016 19:18:41 -0000 1.7 +++ sys/dev/rasops/files.rasops 22 Jul 2018 10:29:36 -0000 @@ -3,14 +3,13 @@ # Note: `rasops_glue' is only here to force the header file's name # hence it must be mentioned first (shudder...) -file dev/rasops/rasops.c ((rasops_glue | rasops1 | rasops4 | rasops8 | +file dev/rasops/rasops.c ((rasops_glue | rasops1 | rasops8 | rasops15 | rasops16 | rasops24 | rasops32 | rasops_bswap | rasops_rotation) & wsdisplay) needs-flag -file dev/rasops/rasops_masks.c wsdisplay & (rasops1 | rasops4) +file dev/rasops/rasops_masks.c wsdisplay & rasops1 file dev/rasops/rasops1.c wsdisplay & rasops1 -file dev/rasops/rasops4.c wsdisplay & rasops4 file dev/rasops/rasops8.c wsdisplay & rasops8 file dev/rasops/rasops15.c wsdisplay & (rasops15 | rasops16) file dev/rasops/rasops24.c wsdisplay & rasops24 Index: sys/dev/rasops/rasops.c =================================================================== RCS file: /cvs/src/sys/dev/rasops/rasops.c,v retrieving revision 1.54 diff -u -p -r1.54 rasops.c --- sys/dev/rasops/rasops.c 3 May 2018 10:05:47 -0000 1.54 +++ sys/dev/rasops/rasops.c 22 Jul 2018 10:29:37 -0000 @@ -428,11 +428,6 @@ rasops_reconfig(struct rasops_info *ri, rasops1_init(ri); break; #endif -#if NRASOPS4 > 0 - case 4: - rasops4_init(ri); - break; -#endif #if NRASOPS8 > 0 case 8: rasops8_init(ri); @@ -785,8 +780,6 @@ rasops_init_devcmap(struct rasops_info * int i; #if NRASOPS15 > 0 || NRASOPS16 > 0 || NRASOPS24 > 0 || NRASOPS32 > 0 const u_char *p; -#endif -#if NRASOPS4 > 0 || NRASOPS15 > 0 || NRASOPS16 > 0 || NRASOPS24 > 0 || NRASOPS32 > 0 int c; #endif @@ -798,14 +791,6 @@ rasops_init_devcmap(struct rasops_info * } switch (ri->ri_depth) { -#if NRASOPS4 > 0 - case 4: - for (i = 0; i < 16; i++) { - c = i | (i << 4); - ri->ri_devcmap[i] = c | (c<<8) | (c<<16) | (c<<24); - } - return; -#endif #if NRASOPS8 > 0 case 8: for (i = 0; i < 16; i++) Index: sys/dev/rasops/rasops.h =================================================================== RCS file: /cvs/src/sys/dev/rasops/rasops.h,v retrieving revision 1.22 diff -u -p -r1.22 rasops.h --- sys/dev/rasops/rasops.h 27 Apr 2018 21:36:12 -0000 1.22 +++ sys/dev/rasops/rasops.h 22 Jul 2018 10:29:37 -0000 @@ -159,7 +159,6 @@ struct rasops_info { * the rasops code. */ void rasops1_init(struct rasops_info *); -void rasops4_init(struct rasops_info *); void rasops8_init(struct rasops_info *); void rasops15_init(struct rasops_info *); void rasops24_init(struct rasops_info *); Index: sys/dev/rasops/rasops4.c =================================================================== RCS file: sys/dev/rasops/rasops4.c diff -N sys/dev/rasops/rasops4.c --- sys/dev/rasops/rasops4.c 19 Dec 2014 22:44:59 -0000 1.11 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,479 +0,0 @@ -/* $OpenBSD: rasops4.c,v 1.11 2014/12/19 22:44:59 guenther Exp $ */ -/* $NetBSD: rasops4.c,v 1.4 2001/11/15 09:48:15 lukem Exp $ */ - -/*- - * Copyright (c) 1999 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Andrew Doran. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/time.h> -#include <sys/endian.h> - -#include <dev/wscons/wsdisplayvar.h> -#include <dev/wscons/wsconsio.h> -#include <dev/rasops/rasops.h> -#include <dev/rasops/rasops_masks.h> - -int rasops4_copycols(void *, int, int, int, int); -int rasops4_erasecols(void *, int, int, int, long); -int rasops4_do_cursor(struct rasops_info *); -int rasops4_putchar(void *, int, int col, u_int, long); -#ifndef RASOPS_SMALL -int rasops4_putchar8(void *, int, int col, u_int, long); -int rasops4_putchar12(void *, int, int col, u_int, long); -int rasops4_putchar16(void *, int, int col, u_int, long); -void rasops4_makestamp(struct rasops_info *, long); - -/* - * 4x1 stamp for optimized character blitting - */ -static u_int16_t stamp[16]; -static long stamp_attr; -static int stamp_mutex; /* XXX see note in README */ -#endif - -/* - * Initialize rasops_info struct for this colordepth. - */ -void -rasops4_init(struct rasops_info *ri) -{ - rasops_masks_init(); - - switch (ri->ri_font->fontwidth) { -#ifndef RASOPS_SMALL - case 8: - ri->ri_ops.putchar = rasops4_putchar8; - break; - case 12: - ri->ri_ops.putchar = rasops4_putchar12; - break; - case 16: - ri->ri_ops.putchar = rasops4_putchar16; - break; -#endif /* !RASOPS_SMALL */ - default: - panic("fontwidth not 8/12/16 or RASOPS_SMALL - fixme!"); - ri->ri_ops.putchar = rasops4_putchar; - break; - } - - if ((ri->ri_font->fontwidth & 1) != 0) { - ri->ri_ops.erasecols = rasops4_erasecols; - ri->ri_ops.copycols = rasops4_copycols; - ri->ri_do_cursor = rasops4_do_cursor; - } -} - -#ifdef notyet -/* - * Paint a single character. This is the generic version, this is ugly. - */ -int -rasops4_putchar(void *cookie, int row, int col, u_int uc, long attr) -{ - int height, width, fs, rs, fb, bg, fg, lmask, rmask; - struct rasops_info *ri; - int32_t *rp; - u_char *fr; - - ri = (struct rasops_info *)cookie; - -#ifdef RASOPS_CLIPPING - /* Catches 'row < 0' case too */ - if ((unsigned)row >= (unsigned)ri->ri_rows) - return 0; - - if ((unsigned)col >= (unsigned)ri->ri_cols) - return 0; -#endif - - width = ri->ri_font->fontwidth << 1; - height = ri->ri_font->fontheight; - col *= width; - rp = (int32_t *)(ri->ri_bits + row * ri->ri_yscale + ((col >> 3) & ~3)); - col = col & 31; - rs = ri->ri_stride; - - bg = ri->ri_devcmap[(attr >> 16) & 0xf]; - fg = ri->ri_devcmap[(attr >> 24) & 0xf]; - - /* If fg and bg match this becomes a space character */ - if (fg == bg || uc == ' ') { - uc = (u_int)-1; - fr = 0; /* shutup gcc */ - fs = 0; /* shutup gcc */ - } else { - uc -= ri->ri_font->firstchar; - fr = (u_char *)ri->ri_font->data + uc * ri->ri_fontscale; - fs = ri->ri_font->stride; - } - - /* Single word, one mask */ - if ((col + width) <= 32) { - rmask = rasops_pmask[col][width]; - lmask = ~rmask; - - if (uc == (u_int)-1) { - bg &= rmask; - - while (height--) { - *rp = (*rp & lmask) | bg; - DELTA(rp, rs, int32_t *); - } - } else { - while (height--) { - /* get bits, mask */ - /* compose sl */ - /* mask sl */ - /* put word */ - } - } - - /* Do underline */ - if (attr & 1) { - DELTA(rp, -(ri->ri_stride << 1), int32_t *); - *rp = (*rp & lmask) | (fg & rmask); - } - } else { - lmask = ~rasops_lmask[col]; - rmask = ~rasops_rmask[(col + width) & 31]; - - if (uc == (u_int)-1) { - bg = bg & ~lmask; - width = bg & ~rmask; - - while (height--) { - rp[0] = (rp[0] & lmask) | bg; - rp[1] = (rp[1] & rmask) | width; - DELTA(rp, rs, int32_t *); - } - } else { - width = 32 - col; - - /* NOT fontbits if bg is white */ - while (height--) { - fb = ~(fr[3] | (fr[2] << 8) | - (fr[1] << 16) | (fr[0] << 24)); - - rp[0] = (rp[0] & lmask) - | MBE((u_int)fb >> col); - - rp[1] = (rp[1] & rmask) - | (MBE((u_int)fb << width) & ~rmask); - - fr += fs; - DELTA(rp, rs, int32_t *); - } - } - - /* Do underline */ - if (attr & 1) { - DELTA(rp, -(ri->ri_stride << 1), int32_t *); - rp[0] = (rp[0] & lmask) | (fg & ~lmask); - rp[1] = (rp[1] & rmask) | (fg & ~rmask); - } - } - - return 0; -} -#endif - -/* - * Put a single character. This is the generic version. - */ -int -rasops4_putchar(void *cookie, int row, int col, u_int uc, long attr) -{ - - /* XXX punt */ - return (EAGAIN); -} - -#ifndef RASOPS_SMALL -/* - * Recompute the blitting stamp. - */ -void -rasops4_makestamp(struct rasops_info *ri, long attr) -{ - int i, fg, bg; - - fg = ri->ri_devcmap[(attr >> 24) & 0xf] & 0xf; - bg = ri->ri_devcmap[(attr >> 16) & 0xf] & 0xf; - stamp_attr = attr; - - for (i = 0; i < 16; i++) { -#if BYTE_ORDER == LITTLE_ENDIAN - stamp[i] = (i & 1 ? fg : bg) << 8; - stamp[i] |= (i & 2 ? fg : bg) << 12; - stamp[i] |= (i & 4 ? fg : bg) << 0; - stamp[i] |= (i & 8 ? fg : bg) << 4; -#else - stamp[i] = (i & 1 ? fg : bg) << 0; - stamp[i] |= (i & 2 ? fg : bg) << 4; - stamp[i] |= (i & 4 ? fg : bg) << 8; - stamp[i] |= (i & 8 ? fg : bg) << 12; -#endif - } -} - -/* - * Put a single character. This is for 8-pixel wide fonts. - */ -int -rasops4_putchar8(void *cookie, int row, int col, u_int uc, long attr) -{ - struct rasops_info *ri; - int height, fs, rs; - u_char *fr; - u_int16_t *rp; - - /* Can't risk remaking the stamp if it's already in use */ - if (stamp_mutex++) { - stamp_mutex--; - return rasops4_putchar(cookie, row, col, uc, attr); - } - - ri = (struct rasops_info *)cookie; - -#ifdef RASOPS_CLIPPING - /* Catches 'row < 0' case too */ - if ((unsigned)row >= (unsigned)ri->ri_rows) { - stamp_mutex--; - return 0; - } - - if ((unsigned)col >= (unsigned)ri->ri_cols) { - stamp_mutex--; - return 0; - } -#endif - - rp = (u_int16_t *)(ri->ri_bits + row * ri->ri_yscale + col * ri->ri_xscale); - height = ri->ri_font->fontheight; - rs = ri->ri_stride / sizeof(*rp); - - /* Recompute stamp? */ - if (attr != stamp_attr) - rasops4_makestamp(ri, attr); - - if (uc == ' ') { - u_int16_t c = stamp[0]; - while (height--) { - rp[0] = c; - rp[1] = c; - rp += rs; - } - } else { - uc -= ri->ri_font->firstchar; - fr = (u_char *)ri->ri_font->data + uc * ri->ri_fontscale; - fs = ri->ri_font->stride; - - while (height--) { - rp[0] = stamp[(*fr >> 4) & 0xf]; - rp[1] = stamp[*fr & 0xf]; - fr += fs; - rp += rs; - } - } - - /* Do underline */ - if ((attr & 1) != 0) { - rp -= (rs << 1); - rp[0] = stamp[15]; - rp[1] = stamp[15]; - } - - stamp_mutex--; - - return 0; -} - -/* - * Put a single character. This is for 12-pixel wide fonts. - */ -int -rasops4_putchar12(void *cookie, int row, int col, u_int uc, long attr) -{ - struct rasops_info *ri; - int height, fs, rs; - u_char *fr; - u_int16_t *rp; - - /* Can't risk remaking the stamp if it's already in use */ - if (stamp_mutex++) { - stamp_mutex--; - return rasops4_putchar(cookie, row, col, uc, attr); - } - - ri = (struct rasops_info *)cookie; - -#ifdef RASOPS_CLIPPING - /* Catches 'row < 0' case too */ - if ((unsigned)row >= (unsigned)ri->ri_rows) { - stamp_mutex--; - return 0; - } - - if ((unsigned)col >= (unsigned)ri->ri_cols) { - stamp_mutex--; - return 0; - } -#endif - - rp = (u_int16_t *)(ri->ri_bits + row * ri->ri_yscale + col * ri->ri_xscale); - height = ri->ri_font->fontheight; - rs = ri->ri_stride / sizeof(*rp); - - /* Recompute stamp? */ - if (attr != stamp_attr) - rasops4_makestamp(ri, attr); - - if (uc == ' ') { - u_int16_t c = stamp[0]; - while (height--) { - rp[0] = c; - rp[1] = c; - rp[2] = c; - rp += rs; - } - } else { - uc -= ri->ri_font->firstchar; - fr = (u_char *)ri->ri_font->data + uc * ri->ri_fontscale; - fs = ri->ri_font->stride; - - while (height--) { - rp[0] = stamp[(fr[0] >> 4) & 0xf]; - rp[1] = stamp[fr[0] & 0xf]; - rp[2] = stamp[(fr[1] >> 4) & 0xf]; - fr += fs; - rp += rs; - } - } - - /* Do underline */ - if ((attr & 1) != 0) { - rp -= (rs << 1); - rp[0] = stamp[15]; - rp[1] = stamp[15]; - rp[2] = stamp[15]; - } - - stamp_mutex--; - - return 0; -} - -/* - * Put a single character. This is for 16-pixel wide fonts. - */ -int -rasops4_putchar16(void *cookie, int row, int col, u_int uc, long attr) -{ - struct rasops_info *ri; - int height, fs, rs; - u_char *fr; - u_int16_t *rp; - - /* Can't risk remaking the stamp if it's already in use */ - if (stamp_mutex++) { - stamp_mutex--; - return rasops4_putchar(cookie, row, col, uc, attr); - } - - ri = (struct rasops_info *)cookie; - -#ifdef RASOPS_CLIPPING - /* Catches 'row < 0' case too */ - if ((unsigned)row >= (unsigned)ri->ri_rows) { - stamp_mutex--; - return 0; - } - - if ((unsigned)col >= (unsigned)ri->ri_cols) { - stamp_mutex--; - return 0; - } -#endif - - rp = (u_int16_t *)(ri->ri_bits + row * ri->ri_yscale + col * ri->ri_xscale); - height = ri->ri_font->fontheight; - rs = ri->ri_stride / sizeof(*rp); - - /* Recompute stamp? */ - if (attr != stamp_attr) - rasops4_makestamp(ri, attr); - - if (uc == ' ') { - u_int16_t c = stamp[0]; - while (height--) { - rp[0] = c; - rp[1] = c; - rp[2] = c; - rp[3] = c; - rp += rs; - } - } else { - uc -= ri->ri_font->firstchar; - fr = (u_char *)ri->ri_font->data + uc * ri->ri_fontscale; - fs = ri->ri_font->stride; - - while (height--) { - rp[0] = stamp[(fr[0] >> 4) & 0xf]; - rp[1] = stamp[fr[0] & 0xf]; - rp[2] = stamp[(fr[1] >> 4) & 0xf]; - rp[3] = stamp[fr[1] & 0xf]; - fr += fs; - rp += rs; - } - } - - /* Do underline */ - if ((attr & 1) != 0) { - rp -= (rs << 1); - rp[0] = stamp[15]; - rp[1] = stamp[15]; - rp[2] = stamp[15]; - rp[3] = stamp[15]; - } - - stamp_mutex--; - - return 0; -} -#endif /* !RASOPS_SMALL */ - -/* - * Grab routines common to depths where (bpp < 8) - */ -#define NAME(ident) rasops4_##ident -#define PIXEL_SHIFT 2 - -#include <dev/rasops/rasops_bitops.h>