root/dev/rasops/rasops.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


    1 /*      $OpenBSD: rasops.h,v 1.8 2006/11/29 19:08:22 miod Exp $ */
    2 /*      $NetBSD: rasops.h,v 1.13 2000/06/13 13:36:54 ad Exp $ */
    3 
    4 /*-
    5  * Copyright (c) 1999 The NetBSD Foundation, Inc.
    6  * All rights reserved.
    7  *
    8  * This code is derived from software contributed to The NetBSD Foundation
    9  * by Andrew Doran.
   10  *
   11  * Redistribution and use in source and binary forms, with or without
   12  * modification, are permitted provided that the following conditions
   13  * are met:
   14  * 1. Redistributions of source code must retain the above copyright
   15  *    notice, this list of conditions and the following disclaimer.
   16  * 2. Redistributions in binary form must reproduce the above copyright
   17  *    notice, this list of conditions and the following disclaimer in the
   18  *    documentation and/or other materials provided with the distribution.
   19  * 3. All advertising materials mentioning features or use of this software
   20  *    must display the following acknowledgement:
   21  *      This product includes software developed by the NetBSD
   22  *      Foundation, Inc. and its contributors.
   23  * 4. Neither the name of The NetBSD Foundation nor the names of its
   24  *    contributors may be used to endorse or promote products derived
   25  *    from this software without specific prior written permission.
   26  *
   27  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
   28  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
   29  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   30  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
   31  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   37  * POSSIBILITY OF SUCH DAMAGE.
   38  */
   39 
   40 #ifndef _RASOPS_H_
   41 #define _RASOPS_H_ 1
   42 
   43 #ifdef  SMALL_KERNEL
   44 #define RASOPS_SMALL
   45 #endif
   46 
   47 #include "rasops_glue.h"
   48 
   49 struct wsdisplay_font;
   50 
   51 /* For rasops_info::ri_flg */
   52 #define RI_FULLCLEAR    0x0001  /* eraserows() hack to clear full screen */
   53 #define RI_FORCEMONO    0x0002  /* monochrome output even if we can do color */
   54 #define RI_BSWAP        0x0004  /* framebuffer endianness doesn't match CPU */
   55 #define RI_CURSOR       0x0008  /* cursor is switched on */
   56 #define RI_CLEAR        0x0010  /* clear display on startup */
   57 #define RI_CLEARMARGINS 0x0020  /* clear display margins on startup */
   58 #define RI_CENTER       0x0040  /* center onscreen output */
   59 #define RI_CURSORCLIP   0x0080  /* cursor is currently clipped */
   60 #define RI_ROTATE_CW    0x0100  /* display is rotated, quarter clockwise */
   61 #define RI_CFGDONE      0x0200  /* rasops_reconfig() completed successfully */
   62 
   63 struct rasops_info {
   64         /* These must be filled in by the caller */
   65         int     ri_depth;       /* depth in bits */
   66         u_char  *ri_bits;       /* ptr to bits */
   67         int     ri_width;       /* width (pels) */
   68         int     ri_height;      /* height (pels) */
   69         int     ri_stride;      /* stride in bytes */
   70 
   71         /*
   72          * These can optionally be left zeroed out. If you fill ri_font,
   73          * but aren't using wsfont, set ri_wsfcookie to -1.
   74          */
   75         struct  wsdisplay_font *ri_font;
   76         int     ri_wsfcookie;   /* wsfont cookie */
   77         void    *ri_hw;         /* driver private data; ignored by rasops */
   78         int     ri_crow;        /* cursor row */
   79         int     ri_ccol;        /* cursor column */
   80         int     ri_flg;         /* various operational flags */
   81 
   82         /*
   83          * These are optional and will default if zero. Meaningless
   84          * on depths other than 15, 16, 24 and 32 bits per pel. On
   85          * 24 bit displays, ri_{r,g,b}num must be 8.
   86          */
   87         u_char  ri_rnum;        /* number of bits for red */
   88         u_char  ri_gnum;        /* number of bits for green */
   89         u_char  ri_bnum;        /* number of bits for blue */
   90         u_char  ri_rpos;        /* which bit red starts at */
   91         u_char  ri_gpos;        /* which bit green starts at */
   92         u_char  ri_bpos;        /* which bit blue starts at */
   93 
   94         /* These are filled in by rasops_init() */
   95         int     ri_emuwidth;    /* width we actually care about */
   96         int     ri_emuheight;   /* height we actually care about */
   97         int     ri_emustride;   /* bytes per row we actually care about */
   98         int     ri_rows;        /* number of rows (characters, not pels) */
   99         int     ri_cols;        /* number of columns (characters, not pels) */
  100         int     ri_delta;       /* row delta in bytes */
  101         int     ri_pelbytes;    /* bytes per pel (may be zero) */
  102         int     ri_fontscale;   /* fontheight * fontstride */
  103         int     ri_xscale;      /* fontwidth * pelbytes */
  104         int     ri_yscale;      /* fontheight * stride */
  105         u_char  *ri_origbits;   /* where screen bits actually start */
  106         int     ri_xorigin;     /* where ri_bits begins (x) */
  107         int     ri_yorigin;     /* where ri_bits begins (y) */
  108         int32_t ri_devcmap[16]; /* color -> framebuffer data */
  109 
  110         /* The emulops you need to use, and the screen caps for wscons */
  111         struct  wsdisplay_emulops ri_ops;
  112         int     ri_caps;
  113 
  114         /* Callbacks so we can share some code */
  115         void    (*ri_do_cursor)(struct rasops_info *);
  116         void    (*ri_updatecursor)(struct rasops_info *);
  117 
  118 #if NRASOPS_ROTATION > 0
  119         /* Used to intercept putchar to permit display rotation */
  120         struct  wsdisplay_emulops ri_real_ops;
  121 #endif
  122 };
  123 
  124 #define DELTA(p, d, cast) ((p) = (cast)((caddr_t)(p) + (d)))
  125 
  126 /*
  127  * rasops_init().
  128  *
  129  * Integer parameters are the number of rows and columns we'd *like*.
  130  *
  131  * In terms of optimization, fonts that are a multiple of 8 pixels wide
  132  * work the best.
  133  *
  134  * rasops_init() takes care of rasops_reconfig(). The parameters to both
  135  * are the same. If calling rasops_reconfig() to change the font and
  136  * ri_wsfcookie >= 0, you must call wsfont_unlock() on it, and reset it
  137  * to -1 (or a new, valid cookie).
  138  */
  139 
  140 /*
  141  * Per-depth initialization functions. These should not be called outside
  142  * the rasops code.
  143  */
  144 void    rasops1_init(struct rasops_info *);
  145 void    rasops2_init(struct rasops_info *);
  146 void    rasops4_init(struct rasops_info *);
  147 void    rasops8_init(struct rasops_info *);
  148 void    rasops15_init(struct rasops_info *);
  149 void    rasops24_init(struct rasops_info *);
  150 void    rasops32_init(struct rasops_info *);
  151 
  152 /* rasops.c */
  153 int     rasops_init(struct rasops_info *, int, int);
  154 int     rasops_reconfig(struct rasops_info *, int, int);
  155 void    rasops_eraserows(void *, int, int, long);
  156 void    rasops_erasecols(void *, int, int, int, long);
  157 
  158 extern const u_char     rasops_isgray[16];
  159 extern const u_char     rasops_cmap[256*3];
  160 
  161 #endif /* _RASOPS_H_ */

/* [<][>][^][v][top][bottom][index][help] */