> 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>
> 
> 

Reply via email to