> Date: Sun, 22 Jul 2018 15:12:09 +0200 > From: Frederic Cambus <f...@statdns.com> > > 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?
Hmm, apparently 4-bit is quite common for e-ink displays. So maybe it makes sense to keep this... > 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> > >