1 1.15 tsutsui /* $NetBSD: grfabs_reg.h,v 1.15 2023/01/06 10:28:28 tsutsui Exp $ */ 2 1.1 leo 3 1.1 leo /* 4 1.1 leo * Copyright (c) 1995 Leo Weppelman 5 1.1 leo * Copyright (c) 1994 Christian E. Hopps 6 1.1 leo * All rights reserved. 7 1.1 leo * Redistribution and use in source and binary forms, with or without 8 1.1 leo * modification, are permitted provided that the following conditions 9 1.1 leo * are met: 10 1.1 leo * 1. Redistributions of source code must retain the above copyright 11 1.1 leo * notice, this list of conditions and the following disclaimer. 12 1.1 leo * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 leo * notice, this list of conditions and the following disclaimer in the 14 1.1 leo * documentation and/or other materials provided with the distribution. 15 1.1 leo * 3. All advertising materials mentioning features or use of this software 16 1.1 leo * must display the following acknowledgement: 17 1.1 leo * This product includes software developed by Christian E. Hopps. 18 1.1 leo * 4. The name of the author may not be used to endorse or promote products 19 1.1 leo * derived from this software without specific prior written permission 20 1.1 leo * 21 1.1 leo * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 22 1.1 leo * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 23 1.1 leo * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 24 1.1 leo * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 25 1.1 leo * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 26 1.1 leo * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 27 1.1 leo * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 28 1.1 leo * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29 1.1 leo * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 30 1.1 leo * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 1.1 leo */ 32 1.1 leo 33 1.1 leo #ifndef _GRFABS_REG_H 34 1.1 leo #define _GRFABS_REG_H 35 1.1 leo 36 1.1 leo struct point { 37 1.1 leo long x; 38 1.1 leo long y; 39 1.1 leo }; 40 1.1 leo typedef struct point point_t; 41 1.1 leo 42 1.1 leo struct dimension { 43 1.1 leo u_long width; 44 1.1 leo u_long height; 45 1.1 leo }; 46 1.1 leo typedef struct dimension dimen_t; 47 1.1 leo 48 1.1 leo struct box { 49 1.1 leo long x; 50 1.1 leo long y; 51 1.1 leo u_long width; 52 1.1 leo u_long height; 53 1.1 leo }; 54 1.1 leo typedef struct box box_t; 55 1.1 leo 56 1.1 leo struct rectangle { 57 1.1 leo long left; 58 1.1 leo long top; 59 1.1 leo long right; 60 1.1 leo long bottom; 61 1.1 leo }; 62 1.1 leo typedef struct rectangle rect_t; 63 1.1 leo 64 1.1 leo typedef struct bitmap bmap_t; 65 1.1 leo typedef struct colormap colormap_t; 66 1.1 leo typedef struct display_mode dmode_t; 67 1.1 leo 68 1.1 leo /* 69 1.1 leo * View stuff. 70 1.1 leo */ 71 1.1 leo 72 1.1 leo struct view { 73 1.1 leo bmap_t *bitmap; /* bitmap. */ 74 1.1 leo box_t display; /* viewable area. */ 75 1.1 leo dmode_t *mode; /* the mode for this view */ 76 1.1 leo colormap_t *colormap; /* the colormap for this view */ 77 1.1 leo int flags; 78 1.9 leo void *save_area; /* Save frame-buffer when not on screen */ 79 1.1 leo }; 80 1.1 leo typedef struct view view_t; 81 1.1 leo 82 1.1 leo /* View-flags: */ 83 1.1 leo #define VF_DISPLAY 1 /* view is on the air now */ 84 1.1 leo 85 1.1 leo /* 86 1.1 leo * Bitmap stuff. 87 1.1 leo */ 88 1.1 leo struct bitmap { 89 1.1 leo u_short bytes_per_row; /* number of bytes per display row. */ 90 1.1 leo u_short rows; /* number of display rows. */ 91 1.1 leo u_short depth; /* depth of bitmap. */ 92 1.11 thomas u_char *plane; /* plane data for bitmap/vga. */ 93 1.11 thomas u_char *hw_address; /* mappable linear bitplane pointer. */ 94 1.11 thomas u_char *vga_address; /* mappable vga bitplane pointer */ 95 1.7 leo u_char *regs; /* where the registers are */ 96 1.7 leo u_char *hw_regs; /* mappable registers */ 97 1.7 leo u_short reg_size; /* size of the register area */ 98 1.11 thomas u_int phys_mappable; /* amount of mappable lin. plane mem. */ 99 1.11 thomas u_int vga_mappable; /* amount of mappable vga plane mem. */ 100 1.11 thomas u_int lin_base; /* linear framebuffer card base */ 101 1.11 thomas u_int vga_base; /* vga memory card base */ 102 1.1 leo }; 103 1.1 leo 104 1.1 leo /* 105 1.1 leo * Colormap stuff. 106 1.1 leo */ 107 1.1 leo struct colormap { 108 1.2 leo u_char type; /* what type of entries these are. */ 109 1.2 leo union { 110 1.2 leo u_char grey; /* CM_GREYSCALE */ 111 1.2 leo struct { /* CM_COLOR */ 112 1.2 leo u_char red; 113 1.2 leo u_char green; 114 1.2 leo u_char blue; 115 1.2 leo } rgb_mask; 116 1.2 leo } valid_mask; 117 1.2 leo u_short first; /* color register entry[0] refers to */ 118 1.2 leo u_short size; /* number of entries */ 119 1.2 leo u_long *entry; /* the table of actual color values */ 120 1.1 leo }; 121 1.1 leo 122 1.1 leo /* 123 1.2 leo * Mask short-hands 124 1.2 leo */ 125 1.2 leo #define grey_mask valid_mask.grey 126 1.2 leo #define red_mask valid_mask.rgb_mask.red 127 1.2 leo #define green_mask valid_mask.rgb_mask.green 128 1.2 leo #define blue_mask valid_mask.rgb_mask.blue 129 1.2 leo 130 1.2 leo enum colormap_type { 131 1.2 leo CM_MONO, /* only on or off allowed */ 132 1.2 leo CM_GREYSCALE, /* grey values */ 133 1.2 leo CM_COLOR /* RGB values */ 134 1.2 leo }; 135 1.2 leo 136 1.2 leo #define MAX_CENTRIES 256 /* that all there is */ 137 1.2 leo /* 138 1.1 leo * Create a colormap entry 139 1.1 leo */ 140 1.4 leo #define MAKE_COLOR_ENTRY(r,g,b) (((r & 0xff)<<16)|((g & 0xff)<<8)|(b & 0xff)) 141 1.2 leo #define MAKE_MONO_ENTRY(x) ((x) ? 1 : 0) 142 1.2 leo #define MAKE_GREY_ENTRY(l) (l & 0xff) 143 1.2 leo 144 1.4 leo struct grfabs_sw { 145 1.14 dsl void (*display_view)(view_t*); 146 1.14 dsl view_t * (*alloc_view)(dmode_t *, dimen_t *, u_char); 147 1.14 dsl void (*free_view)(view_t *); 148 1.14 dsl void (*remove_view)(view_t *); 149 1.14 dsl void (*save_view)(view_t *); 150 1.15 tsutsui int (*use_colormap)(view_t *, colormap_t *); 151 1.4 leo }; 152 1.6 leo 153 1.1 leo /* display mode */ 154 1.1 leo struct display_mode { 155 1.1 leo LIST_ENTRY(display_mode) link; 156 1.12 he const u_char *name; /* logical name for mode. */ 157 1.1 leo dimen_t size; /* screen size */ 158 1.1 leo u_char depth; /* screen depth */ 159 1.7 leo void *data; /* opaque driver data */ 160 1.4 leo struct grfabs_sw *grfabs_funcs; /* hardware switch table */ 161 1.1 leo view_t *current_view; /* view displaying me */ 162 1.1 leo }; 163 1.6 leo 164 1.1 leo /* 165 1.4 leo * Definition of available graphic mode list. 166 1.4 leo */ 167 1.4 leo typedef LIST_HEAD(modelist, display_mode) MODES; 168 1.4 leo 169 1.4 leo /* 170 1.1 leo * Misc draw related macros. 171 1.1 leo */ 172 1.1 leo #define INIT_BOX(b,xx,yy,ww,hh) \ 173 1.1 leo do { \ 174 1.1 leo (b)->x = xx; \ 175 1.1 leo (b)->y = yy; \ 176 1.1 leo (b)->width = ww; \ 177 1.1 leo (b)->height = hh; \ 178 1.1 leo } while(0) 179 1.1 leo 180 1.4 leo 181 1.4 leo /* 182 1.7 leo * Prototype for the probe function 183 1.7 leo */ 184 1.14 dsl typedef void (*grf_probe_t)(MODES *); 185 1.7 leo 186 1.7 leo /* 187 1.4 leo * Common variables 188 1.4 leo */ 189 1.4 leo extern view_t gra_con_view; 190 1.4 leo extern colormap_t gra_con_cmap; 191 1.4 leo extern long gra_con_colors[MAX_CENTRIES]; 192 1.4 leo extern u_long gra_def_color16[16]; 193 1.4 leo 194 1.1 leo /* 195 1.1 leo * Prototypes: 196 1.1 leo */ 197 1.14 dsl int grfabs_probe(grf_probe_t); 198 1.14 dsl view_t *grf_alloc_view(dmode_t *d, dimen_t *dim, u_char depth); 199 1.14 dsl dmode_t *grf_get_best_mode(dimen_t *dim, u_char depth); 200 1.14 dsl void grf_display_view(view_t *v); 201 1.14 dsl void grf_remove_view(view_t *v); 202 1.14 dsl void grf_free_view(view_t *v); 203 1.14 dsl int grf_get_colormap(view_t *, colormap_t *); 204 1.14 dsl int grf_use_colormap(view_t *, colormap_t *); 205 1.14 dsl void grf_save_view(view_t *v); 206 1.1 leo 207 1.1 leo #endif /* _GRFABS_REG_H */ 208