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