1 1.10 mhitch /* $NetBSD: grf_clreg.h,v 1.10 2008/12/18 05:04:22 mhitch Exp $ */ 2 1.1 chopps 3 1.1 chopps /* 4 1.1 chopps * Copyright (c) 1995 Ezra Story 5 1.1 chopps * Copyright (c) 1995 Kari Mettinen 6 1.1 chopps * Copyright (c) 1994 Markus Wild 7 1.1 chopps * Copyright (c) 1994 Lutz Vieweg 8 1.1 chopps * All rights reserved. 9 1.1 chopps * 10 1.1 chopps * Redistribution and use in source and binary forms, with or without 11 1.1 chopps * modification, are permitted provided that the following conditions 12 1.1 chopps * are met: 13 1.1 chopps * 1. Redistributions of source code must retain the above copyright 14 1.1 chopps * notice, this list of conditions and the following disclaimer. 15 1.1 chopps * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 chopps * notice, this list of conditions and the following disclaimer in the 17 1.1 chopps * documentation and/or other materials provided with the distribution. 18 1.1 chopps * 3. All advertising materials mentioning features or use of this software 19 1.1 chopps * must display the following acknowledgement: 20 1.1 chopps * This product includes software developed by Lutz Vieweg. 21 1.1 chopps * 4. The name of the author may not be used to endorse or promote products 22 1.1 chopps * derived from this software without specific prior written permission 23 1.1 chopps * 24 1.1 chopps * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 25 1.1 chopps * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 26 1.1 chopps * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 27 1.1 chopps * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 28 1.1 chopps * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 29 1.1 chopps * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 30 1.1 chopps * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 31 1.1 chopps * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 32 1.1 chopps * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 33 1.7 aymeric * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34 1.1 chopps */ 35 1.1 chopps 36 1.1 chopps #ifndef _GRF_CLREG_H 37 1.1 chopps #define _GRF_CLREG_H 38 1.1 chopps 39 1.1 chopps /* 40 1.1 chopps * Written & Copyright by Kari Mettinen, Ezra Story. 41 1.1 chopps * 42 1.1 chopps * This is derived from retina driver source 43 1.1 chopps */ 44 1.1 chopps 45 1.1 chopps /* Extension to grfvideo_mode to support text modes. 46 1.7 aymeric * This can be passed to both text & gfx functions 47 1.1 chopps * without worry. If gv.depth == 4, then the extended 48 1.1 chopps * fields for a text mode are present. 49 1.1 chopps */ 50 1.1 chopps struct grfcltext_mode { 51 1.1 chopps struct grfvideo_mode gv; 52 1.1 chopps unsigned short fx; /* font x dimension */ 53 1.1 chopps unsigned short fy; /* font y dimension */ 54 1.1 chopps unsigned short cols; /* screen dimensions */ 55 1.1 chopps unsigned short rows; 56 1.1 chopps void *fdata; /* font data */ 57 1.1 chopps unsigned short fdstart; 58 1.1 chopps unsigned short fdend; 59 1.1 chopps }; 60 1.1 chopps 61 1.1 chopps 62 1.1 chopps /* 5426 boards types, stored in cltype in grf_cl.c . 63 1.7 aymeric * used to decide how to handle SR7 and Pass-through 64 1.1 chopps */ 65 1.1 chopps 66 1.1 chopps #define PICASSO 2167 67 1.1 chopps #define SPECTRUM 2193 68 1.1 chopps #define PICCOLO 2195 69 1.1 chopps 70 1.1 chopps /* read VGA register */ 71 1.1 chopps #define vgar(ba, reg) (*(((volatile unsigned char *)ba)+reg)) 72 1.1 chopps 73 1.1 chopps /* write VGA register */ 74 1.1 chopps #define vgaw(ba, reg, val) \ 75 1.1 chopps *(((volatile unsigned char *)ba)+reg) = ((val) & 0xff) 76 1.1 chopps 77 1.1 chopps /* 78 1.1 chopps * defines for the used register addresses (mw) 79 1.1 chopps * 80 1.1 chopps * NOTE: there are some registers that have different addresses when 81 1.1 chopps * in mono or color mode. We only support color mode, and thus 82 1.1 chopps * some addresses won't work in mono-mode! 83 1.1 chopps * 84 1.1 chopps * General and VGA-registers taken from retina driver. Fixed a few 85 1.1 chopps * bugs in it. (SR and GR read address is Port + 1, NOT Port) 86 1.1 chopps * 87 1.1 chopps */ 88 1.1 chopps 89 1.1 chopps 90 1.1 chopps 91 1.1 chopps 92 1.1 chopps /* General Registers: */ 93 1.1 chopps #define GREG_STATUS0_R 0x03C2 94 1.1 chopps #define GREG_STATUS1_R 0x03DA 95 1.1 chopps #define GREG_MISC_OUTPUT_R 0x03CC 96 1.7 aymeric #define GREG_MISC_OUTPUT_W 0x03C2 97 1.1 chopps #define GREG_FEATURE_CONTROL_R 0x03CA 98 1.1 chopps #define GREG_FEATURE_CONTROL_W 0x03DA 99 1.1 chopps #define GREG_POS 0x0102 100 1.1 chopps 101 1.1 chopps /* Attribute Controller: */ 102 1.1 chopps #define ACT_ADDRESS 0x03C0 103 1.1 chopps #define ACT_ADDRESS_R 0x03C1 104 1.1 chopps #define ACT_ADDRESS_W 0x03C0 105 1.1 chopps #define ACT_ADDRESS_RESET 0x03DA 106 1.1 chopps #define ACT_ID_PALETTE0 0x00 107 1.1 chopps #define ACT_ID_PALETTE1 0x01 108 1.1 chopps #define ACT_ID_PALETTE2 0x02 109 1.1 chopps #define ACT_ID_PALETTE3 0x03 110 1.1 chopps #define ACT_ID_PALETTE4 0x04 111 1.1 chopps #define ACT_ID_PALETTE5 0x05 112 1.1 chopps #define ACT_ID_PALETTE6 0x06 113 1.1 chopps #define ACT_ID_PALETTE7 0x07 114 1.1 chopps #define ACT_ID_PALETTE8 0x08 115 1.1 chopps #define ACT_ID_PALETTE9 0x09 116 1.1 chopps #define ACT_ID_PALETTE10 0x0A 117 1.1 chopps #define ACT_ID_PALETTE11 0x0B 118 1.1 chopps #define ACT_ID_PALETTE12 0x0C 119 1.1 chopps #define ACT_ID_PALETTE13 0x0D 120 1.1 chopps #define ACT_ID_PALETTE14 0x0E 121 1.1 chopps #define ACT_ID_PALETTE15 0x0F 122 1.1 chopps #define ACT_ID_ATTR_MODE_CNTL 0x10 123 1.1 chopps #define ACT_ID_OVERSCAN_COLOR 0x11 124 1.1 chopps #define ACT_ID_COLOR_PLANE_ENA 0x12 125 1.1 chopps #define ACT_ID_HOR_PEL_PANNING 0x13 126 1.1 chopps #define ACT_ID_COLOR_SELECT 0x14 127 1.1 chopps 128 1.1 chopps /* Graphics Controller: */ 129 1.1 chopps #define GCT_ADDRESS 0x03CE 130 1.1 chopps #define GCT_ADDRESS_R 0x03CF 131 1.1 chopps #define GCT_ADDRESS_W 0x03CF 132 1.1 chopps #define GCT_ID_SET_RESET 0x00 133 1.1 chopps #define GCT_WR5_BG_EXT 0x00 134 1.1 chopps #define GCT_ID_ENABLE_SET_RESET 0x01 135 1.1 chopps #define GCT_ID_WR45_FG_EXT 0x01 136 1.1 chopps #define GCT_ID_COLOR_COMPARE 0x02 137 1.1 chopps #define GCT_ID_DATA_ROTATE 0x03 138 1.1 chopps #define GCT_ID_READ_MAP_SELECT 0x04 139 1.1 chopps #define GCT_ID_GRAPHICS_MODE 0x05 140 1.1 chopps #define GCT_ID_MISC 0x06 141 1.1 chopps #define GCT_ID_COLOR_XCARE 0x07 142 1.1 chopps #define GCT_ID_BITMASK 0x08 143 1.1 chopps #define GCT_ID_OFFSET_0 0x09 144 1.1 chopps #define GCT_ID_OFFSET_1 0x0A 145 1.1 chopps #define GCT_ID_MODE_EXT 0x0B 146 1.1 chopps #define GCT_ID_COLOR_KEY 0x0C 147 1.1 chopps #define GCT_ID_COLOR_KEY_MASK 0x0D 148 1.1 chopps #define GCT_ID_MISC_CNTL 0x0E 149 1.1 chopps #define GCT_ID_16BIT_BG_HIGH 0x10 150 1.1 chopps #define GCT_ID_16BIT_FG_HIGH 0x11 151 1.1 chopps #define GCT_ID_BLT_WIDTH_LOW 0x20 152 1.1 chopps #define GCT_ID_BLT_WIDTH_HIGH 0x21 153 1.1 chopps #define GCT_ID_BLT_HEIGHT_LOW 0x22 154 1.1 chopps #define GCT_ID_BLT_HEIGHT_HIGH 0x23 155 1.1 chopps #define GCT_ID_DST_PITCH_LOW 0x24 156 1.1 chopps #define GCT_ID_DST_PITCH_HIGH 0x25 157 1.1 chopps #define GCT_ID_SRC_PITCH_LOW 0x26 158 1.1 chopps #define GCT_ID_SRC_PITCH_HIGH 0x27 159 1.1 chopps #define GCT_ID_DST_START_LOW 0x28 160 1.1 chopps #define GCT_ID_DST_START_MID 0x29 161 1.1 chopps #define GCT_ID_DST_START_HIGH 0x2A 162 1.1 chopps #define GCT_ID_SRC_START_LOW 0x2C 163 1.1 chopps #define GCT_ID_SRC_START_MID 0x2D 164 1.1 chopps #define GCT_ID_SRC_START_HIGH 0x2E 165 1.1 chopps #define GCT_ID_BLT_MODE 0x30 166 1.1 chopps #define GCT_ID_BLT_STAT_START 0x31 167 1.1 chopps #define GCT_ID_BLT_ROP 0x32 168 1.4 veego #define GCT_ID_RESERVED 0x33 169 1.1 chopps #define GCT_ID_TRP_COL_LOW 0x34 /* transparent color */ 170 1.1 chopps #define GCT_ID_TRP_COL_HIGH 0x35 171 1.1 chopps #define GCT_ID_TRP_MASK_LOW 0x38 172 1.1 chopps #define GCT_ID_TRP_MASK_HIGH 0x39 173 1.1 chopps 174 1.1 chopps 175 1.1 chopps /* Sequencer: */ 176 1.1 chopps #define SEQ_ADDRESS 0x03C4 177 1.1 chopps #define SEQ_ADDRESS_R 0x03C5 178 1.1 chopps #define SEQ_ADDRESS_W 0x03C5 179 1.1 chopps #define SEQ_ID_RESET 0x00 180 1.1 chopps #define SEQ_ID_CLOCKING_MODE 0x01 181 1.1 chopps #define SEQ_ID_MAP_MASK 0x02 182 1.1 chopps #define SEQ_ID_CHAR_MAP_SELECT 0x03 183 1.1 chopps 184 1.1 chopps #define TEXT_PLANE_CHAR 0x01 185 1.1 chopps #define TEXT_PLANE_ATTR 0x02 186 1.1 chopps #define TEXT_PLANE_FONT 0x04 187 1.1 chopps 188 1.1 chopps #define SEQ_ID_MEMORY_MODE 0x04 189 1.1 chopps #define SEQ_ID_UNLOCK_EXT 0x06 /* down from here, all seq registers are Cirrus extensions */ 190 1.1 chopps #define SEQ_ID_EXT_SEQ_MODE 0x07 191 1.1 chopps #define SEQ_ID_EEPROM_CNTL 0x08 192 1.1 chopps #define SEQ_ID_SCRATCH_0 0x09 193 1.1 chopps #define SEQ_ID_SCRATCH_1 0x0A 194 1.1 chopps #define SEQ_ID_VCLK_0_NUM 0x0B 195 1.1 chopps #define SEQ_ID_VCLK_1_NUM 0x0C 196 1.1 chopps #define SEQ_ID_VCLK_2_NUM 0x0D 197 1.1 chopps #define SEQ_ID_VCLK_3_NUM 0x0E 198 1.1 chopps #define SEQ_ID_DRAM_CNTL 0x0F 199 1.1 chopps #define SEQ_ID_CURSOR_X 0x10 /* Cursor position can't be set with WSeq 200 1.1 chopps */ 201 1.1 chopps #define SEQ_ID_CURSOR_Y 0x11 202 1.1 chopps #define SEQ_ID_CURSOR_ATTR 0x12 203 1.1 chopps #define SEQ_ID_CURSOR_STORE 0x13 204 1.1 chopps #define SEQ_ID_SCRATCH_2 0x14 205 1.1 chopps #define SEQ_ID_SCRATCH_3 0x15 206 1.1 chopps #define SEQ_ID_PERF_TUNE 0x16 207 1.1 chopps #define SEQ_ID_CONF_RBACK 0x17 208 1.1 chopps #define SEQ_ID_SIG_CNTL 0x18 209 1.1 chopps #define SEQ_ID_SIG_RES_LOW 0x19 210 1.1 chopps #define SEQ_ID_SIG_RES_HIGH 0x1A 211 1.1 chopps #define SEQ_ID_VCLK_0_DENOM 0x1B 212 1.1 chopps #define SEQ_ID_VCLK_1_DENOM 0x1C 213 1.1 chopps #define SEQ_ID_VCLK_2_DENOM 0x1D 214 1.1 chopps #define SEQ_ID_VCLK_3_DENOM 0x1E 215 1.1 chopps #define SEQ_ID_MCLK_SELECT 0x1F 216 1.1 chopps 217 1.1 chopps /* CRT Controller: */ 218 1.1 chopps #define CRT_ADDRESS 0x03D4 219 1.1 chopps #define CRT_ADDRESS_R 0x03D5 220 1.1 chopps #define CRT_ADDRESS_W 0x03D5 221 1.1 chopps #define CRT_ID_HOR_TOTAL 0x00 222 1.1 chopps #define CRT_ID_HOR_DISP_ENA_END 0x01 223 1.1 chopps #define CRT_ID_START_HOR_BLANK 0x02 224 1.1 chopps #define CRT_ID_END_HOR_BLANK 0x03 225 1.1 chopps #define CRT_ID_START_HOR_RETR 0x04 226 1.1 chopps #define CRT_ID_END_HOR_RETR 0x05 227 1.1 chopps #define CRT_ID_VER_TOTAL 0x06 228 1.1 chopps #define CRT_ID_OVERFLOW 0x07 229 1.1 chopps #define CRT_ID_PRESET_ROW_SCAN 0x08 230 1.1 chopps #define CRT_ID_CHAR_HEIGHT 0x09 /* was MAX_SCANLINES on retina, weird, eh? */ 231 1.1 chopps #define CRT_ID_CURSOR_START 0x0A 232 1.1 chopps #define CRT_ID_CURSOR_END 0x0B 233 1.1 chopps #define CRT_ID_START_ADDR_HIGH 0x0C 234 1.1 chopps #define CRT_ID_START_ADDR_LOW 0x0D 235 1.1 chopps #define CRT_ID_CURSOR_LOC_HIGH 0x0E 236 1.1 chopps #define CRT_ID_CURSOR_LOC_LOW 0x0F 237 1.1 chopps #define CRT_ID_START_VER_RETR 0x10 238 1.1 chopps #define CRT_ID_END_VER_RETR 0x11 239 1.1 chopps #define CRT_ID_VER_DISP_ENA_END 0x12 240 1.1 chopps #define CRT_ID_OFFSET 0x13 241 1.1 chopps #define CRT_ID_UNDERLINE_LOC 0x14 242 1.1 chopps #define CRT_ID_START_VER_BLANK 0x15 243 1.1 chopps #define CRT_ID_END_VER_BLANK 0x16 244 1.1 chopps #define CRT_ID_MODE_CONTROL 0x17 245 1.1 chopps #define CRT_ID_LINE_COMPARE 0x18 246 1.1 chopps #define CRT_ID_LACE_END 0x19 247 1.1 chopps #define CRT_ID_LACE_CNTL 0x1A 248 1.1 chopps #define CRT_ID_EXT_DISP_CNTL 0x1B 249 1.4 veego #define CRT_ID_SYNC_ADJ_GENLOCK 0x1C 250 1.4 veego #define CRT_ID_OVERLAY_EXT_CTRL_REG 0x1D 251 1.1 chopps 252 1.1 chopps #define CRT_ID_GD_LATCH_RBACK 0x22 253 1.1 chopps 254 1.1 chopps #define CRT_ID_ACT_TOGGLE_RBACK 0x24 255 1.1 chopps #define CRT_ID_ACT_INDEX_RBACK 0x26 256 1.1 chopps 257 1.1 chopps /* Pass-through */ 258 1.1 chopps #define PASS_ADDRESS 0x8000 259 1.1 chopps #define PASS_ADDRESS_W 0x8000 260 1.1 chopps /* Special Picasso Address */ 261 1.1 chopps #define PASS_ADDRESS_WP 0x9000 262 1.1 chopps 263 1.1 chopps /* Video DAC */ 264 1.2 is #define VDAC_ADDRESS 0x03c8 265 1.2 is #define VDAC_ADDRESS_W 0x03c8 266 1.6 veego #define VDAC_ADDRESS_R (((cltype==PICASSO)&&(cl_64bit==0))?0x03c7+0xfff:0x3c7) 267 1.2 is #define VDAC_STATE 0x03c7 268 1.6 veego #define VDAC_DATA (((cltype==PICASSO)&&(cl_64bit==0))?0x03c9+0xfff:0x3c9) 269 1.2 is #define VDAC_MASK 0x03c6 270 1.2 is #define HDR 0x03c6 /* Hidden DAC register, 4 reads to access */ 271 1.1 chopps 272 1.1 chopps 273 1.1 chopps #define WGfx(ba, idx, val) \ 274 1.5 thorpej do { \ 275 1.5 thorpej vgaw(ba, GCT_ADDRESS, idx); \ 276 1.5 thorpej vgaw(ba, GCT_ADDRESS_W , val); \ 277 1.5 thorpej } while (0) 278 1.1 chopps 279 1.1 chopps #define WSeq(ba, idx, val) \ 280 1.5 thorpej do { \ 281 1.5 thorpej vgaw(ba, SEQ_ADDRESS, idx); \ 282 1.5 thorpej vgaw(ba, SEQ_ADDRESS_W , val); \ 283 1.5 thorpej } while (0) \ 284 1.5 thorpej 285 1.9 perry /* __asm volatile ("nop"); \ */ 286 1.1 chopps 287 1.1 chopps #define WCrt(ba, idx, val) \ 288 1.5 thorpej do { \ 289 1.5 thorpej vgaw(ba, CRT_ADDRESS, idx); \ 290 1.5 thorpej vgaw(ba, CRT_ADDRESS_W , val); \ 291 1.5 thorpej } while (0) 292 1.1 chopps 293 1.1 chopps #define WAttr(ba, idx, val) \ 294 1.1 chopps do { \ 295 1.5 thorpej vgar(ba, ACT_ADDRESS_RESET); \ 296 1.5 thorpej vgaw(ba, ACT_ADDRESS_W, idx); \ 297 1.5 thorpej vgaw(ba, ACT_ADDRESS_W, val); \ 298 1.1 chopps } while (0) 299 1.1 chopps 300 1.1 chopps #define SetTextPlane(ba, m) \ 301 1.1 chopps do { \ 302 1.5 thorpej WGfx(ba, GCT_ID_READ_MAP_SELECT, m & 3 ); \ 303 1.5 thorpej WSeq(ba, SEQ_ID_MAP_MASK, (1 << (m & 3))); \ 304 1.5 thorpej } while (0) 305 1.1 chopps 306 1.10 mhitch #ifdef _KERNEL 307 1.7 aymeric int cl_mode(register struct grf_softc *gp, u_long cmd, void *arg, 308 1.7 aymeric u_long a2, int a3); 309 1.7 aymeric int cl_load_mon(struct grf_softc *gp, struct grfcltext_mode *gv); 310 1.7 aymeric int grfcl_cnprobe(void); 311 1.7 aymeric void grfcl_iteinit(struct grf_softc *gp); 312 1.10 mhitch #endif 313 1.1 chopps 314 1.1 chopps #endif /* _GRF_RHREG_H */ 315