1 1.20 christos /* $NetBSD: grf_cvreg.h,v 1.20 2014/01/22 00:25:16 christos Exp $ */ 2 1.2 jtc 3 1.1 chopps /* 4 1.1 chopps * Copyright (c) 1995 Michael Teske 5 1.1 chopps * All rights reserved. 6 1.1 chopps * 7 1.1 chopps * Redistribution and use in source and binary forms, with or without 8 1.1 chopps * modification, are permitted provided that the following conditions 9 1.1 chopps * are met: 10 1.1 chopps * 1. Redistributions of source code must retain the above copyright 11 1.1 chopps * notice, this list of conditions and the following disclaimer. 12 1.1 chopps * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 chopps * notice, this list of conditions and the following disclaimer in the 14 1.1 chopps * documentation and/or other materials provided with the distribution. 15 1.1 chopps * 3. All advertising materials mentioning features or use of this software 16 1.1 chopps * must display the following acknowledgement: 17 1.1 chopps * This product includes software developed by Ezra Story, by Kari 18 1.1 chopps * Mettinen and by Bernd Ernesti. 19 1.1 chopps * 4. The name of the author may not be used to endorse or promote products 20 1.1 chopps * derived from this software without specific prior written permission 21 1.1 chopps * 22 1.1 chopps * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 23 1.1 chopps * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 24 1.1 chopps * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 25 1.1 chopps * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 26 1.1 chopps * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 27 1.1 chopps * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 1.1 chopps * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 1.1 chopps * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 1.1 chopps * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 31 1.1 chopps * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 1.1 chopps */ 33 1.1 chopps 34 1.1 chopps #ifndef _GRF_CVREG_H 35 1.1 chopps #define _GRF_CVREG_H 36 1.1 chopps 37 1.16 phx #include <machine/cpu.h> 38 1.16 phx 39 1.1 chopps /* 40 1.18 phx * This is derived from Cirrus driver source 41 1.1 chopps */ 42 1.1 chopps 43 1.1 chopps /* Extension to grfvideo_mode to support text modes. 44 1.1 chopps * This can be passed to both text & gfx functions 45 1.1 chopps * without worry. If gv.depth == 4, then the extended 46 1.1 chopps * fields for a text mode are present. 47 1.1 chopps */ 48 1.1 chopps 49 1.1 chopps struct grfcvtext_mode { 50 1.1 chopps struct grfvideo_mode gv; 51 1.1 chopps unsigned short fx; /* font x dimension */ 52 1.1 chopps unsigned short fy; /* font y dimension */ 53 1.1 chopps unsigned short cols; /* screen dimensions */ 54 1.1 chopps unsigned short rows; 55 1.1 chopps void *fdata; /* font data */ 56 1.1 chopps unsigned short fdstart; 57 1.1 chopps unsigned short fdend; 58 1.1 chopps }; 59 1.1 chopps 60 1.14 phx 61 1.1 chopps /* read VGA register */ 62 1.15 phx #define vgar(ba, reg) \ 63 1.15 phx (*(((volatile char *)ba)+reg)) 64 1.1 chopps 65 1.1 chopps /* write VGA register */ 66 1.1 chopps #define vgaw(ba, reg, val) \ 67 1.15 phx *(((volatile char *)ba)+reg) = ((val) & 0xff); \ 68 1.15 phx amiga_membarrier() 69 1.4 veego 70 1.4 veego /* read 32 Bit VGA register */ 71 1.12 he #define vgar32(ba, reg) \ 72 1.12 he ( *((volatile unsigned long *) (((volatile char *)ba)+reg)) ) 73 1.4 veego 74 1.4 veego /* write 32 Bit VGA register */ 75 1.4 veego #define vgaw32(ba, reg, val) \ 76 1.15 phx *((unsigned long *) (((volatile char *)ba)+reg)) = val; \ 77 1.15 phx amiga_membarrier() 78 1.4 veego 79 1.4 veego /* read 16 Bit VGA register */ 80 1.12 he #define vgar16(ba, reg) \ 81 1.12 he ( *((volatile unsigned short *) (((volatile char *)ba)+reg)) ) 82 1.4 veego 83 1.4 veego /* write 16 Bit VGA register */ 84 1.4 veego #define vgaw16(ba, reg, val) \ 85 1.15 phx *((volatile unsigned short *) (((volatile char *)ba)+reg)) = val; \ 86 1.15 phx amiga_membarrier() 87 1.4 veego 88 1.13 mhitch #ifdef _KERNEL 89 1.7 aymeric int grfcv_cnprobe(void); 90 1.7 aymeric void grfcv_iteinit(struct grf_softc *); 91 1.11 christos static inline void GfxBusyWait(volatile void *); 92 1.11 christos static inline void GfxFifoWait(volatile void *); 93 1.11 christos static inline unsigned char RAttr(volatile void *, short); 94 1.11 christos static inline unsigned char RSeq(volatile void *, short); 95 1.11 christos static inline unsigned char RCrt(volatile void *, short); 96 1.11 christos static inline unsigned char RGfx(volatile void *, short); 97 1.13 mhitch #endif 98 1.4 veego 99 1.4 veego 100 1.1 chopps /* 101 1.1 chopps * defines for the used register addresses (mw) 102 1.1 chopps * 103 1.1 chopps * NOTE: there are some registers that have different addresses when 104 1.1 chopps * in mono or color mode. We only support color mode, and thus 105 1.1 chopps * some addresses won't work in mono-mode! 106 1.1 chopps * 107 1.1 chopps * General and VGA-registers taken from retina driver. Fixed a few 108 1.1 chopps * bugs in it. (SR and GR read address is Port + 1, NOT Port) 109 1.1 chopps * 110 1.1 chopps */ 111 1.1 chopps 112 1.1 chopps /* General Registers: */ 113 1.1 chopps #define GREG_MISC_OUTPUT_R 0x03CC 114 1.7 aymeric #define GREG_MISC_OUTPUT_W 0x03C2 115 1.1 chopps #define GREG_FEATURE_CONTROL_R 0x03CA 116 1.1 chopps #define GREG_FEATURE_CONTROL_W 0x03DA 117 1.1 chopps #define GREG_INPUT_STATUS0_R 0x03C2 118 1.1 chopps #define GREG_INPUT_STATUS1_R 0x03DA 119 1.1 chopps 120 1.1 chopps /* Setup Registers: */ 121 1.1 chopps #define SREG_OPTION_SELECT 0x0102 122 1.1 chopps #define SREG_VIDEO_SUBS_ENABLE 0x46E8 123 1.1 chopps 124 1.1 chopps /* Attribute Controller: */ 125 1.1 chopps #define ACT_ADDRESS 0x03C0 126 1.1 chopps #define ACT_ADDRESS_R 0x03C1 127 1.1 chopps #define ACT_ADDRESS_W 0x03C0 128 1.1 chopps #define ACT_ADDRESS_RESET 0x03DA 129 1.1 chopps #define ACT_ID_PALETTE0 0x00 130 1.1 chopps #define ACT_ID_PALETTE1 0x01 131 1.1 chopps #define ACT_ID_PALETTE2 0x02 132 1.1 chopps #define ACT_ID_PALETTE3 0x03 133 1.1 chopps #define ACT_ID_PALETTE4 0x04 134 1.1 chopps #define ACT_ID_PALETTE5 0x05 135 1.1 chopps #define ACT_ID_PALETTE6 0x06 136 1.1 chopps #define ACT_ID_PALETTE7 0x07 137 1.1 chopps #define ACT_ID_PALETTE8 0x08 138 1.1 chopps #define ACT_ID_PALETTE9 0x09 139 1.1 chopps #define ACT_ID_PALETTE10 0x0A 140 1.1 chopps #define ACT_ID_PALETTE11 0x0B 141 1.1 chopps #define ACT_ID_PALETTE12 0x0C 142 1.1 chopps #define ACT_ID_PALETTE13 0x0D 143 1.1 chopps #define ACT_ID_PALETTE14 0x0E 144 1.1 chopps #define ACT_ID_PALETTE15 0x0F 145 1.1 chopps #define ACT_ID_ATTR_MODE_CNTL 0x10 146 1.1 chopps #define ACT_ID_OVERSCAN_COLOR 0x11 147 1.1 chopps #define ACT_ID_COLOR_PLANE_ENA 0x12 148 1.1 chopps #define ACT_ID_HOR_PEL_PANNING 0x13 149 1.1 chopps #define ACT_ID_COLOR_SELECT 0x14 150 1.1 chopps 151 1.1 chopps /* Graphics Controller: */ 152 1.1 chopps #define GCT_ADDRESS 0x03CE 153 1.1 chopps #define GCT_ADDRESS_R 0x03CF 154 1.1 chopps #define GCT_ADDRESS_W 0x03CF 155 1.1 chopps #define GCT_ID_SET_RESET 0x00 156 1.1 chopps #define GCT_ID_ENABLE_SET_RESET 0x01 157 1.1 chopps #define GCT_ID_COLOR_COMPARE 0x02 158 1.1 chopps #define GCT_ID_DATA_ROTATE 0x03 159 1.1 chopps #define GCT_ID_READ_MAP_SELECT 0x04 160 1.1 chopps #define GCT_ID_GRAPHICS_MODE 0x05 161 1.1 chopps #define GCT_ID_MISC 0x06 162 1.1 chopps #define GCT_ID_COLOR_XCARE 0x07 163 1.1 chopps #define GCT_ID_BITMASK 0x08 164 1.1 chopps 165 1.1 chopps /* Sequencer: */ 166 1.1 chopps #define SEQ_ADDRESS 0x03C4 167 1.1 chopps #define SEQ_ADDRESS_R 0x03C5 168 1.1 chopps #define SEQ_ADDRESS_W 0x03C5 169 1.1 chopps #define SEQ_ID_RESET 0x00 170 1.1 chopps #define SEQ_ID_CLOCKING_MODE 0x01 171 1.1 chopps #define SEQ_ID_MAP_MASK 0x02 172 1.1 chopps #define SEQ_ID_CHAR_MAP_SELECT 0x03 173 1.1 chopps #define SEQ_ID_MEMORY_MODE 0x04 174 1.1 chopps #define SEQ_ID_UNKNOWN1 0x05 175 1.1 chopps #define SEQ_ID_UNKNOWN2 0x06 176 1.1 chopps #define SEQ_ID_UNKNOWN3 0x07 177 1.1 chopps /* S3 extensions */ 178 1.1 chopps #define SEQ_ID_UNLOCK_EXT 0x08 179 1.1 chopps #define SEQ_ID_EXT_SEQ_REG9 0x09 180 1.1 chopps #define SEQ_ID_BUS_REQ_CNTL 0x0A 181 1.1 chopps #define SEQ_ID_EXT_MISC_SEQ 0x0B 182 1.1 chopps #define SEQ_ID_UNKNOWN4 0x0C 183 1.1 chopps #define SEQ_ID_EXT_SEQ 0x0D 184 1.1 chopps #define SEQ_ID_UNKNOWN5 0x0E 185 1.1 chopps #define SEQ_ID_UNKNOWN6 0x0F 186 1.1 chopps #define SEQ_ID_MCLK_LO 0x10 187 1.1 chopps #define SEQ_ID_MCLK_HI 0x11 188 1.1 chopps #define SEQ_ID_DCLK_LO 0x12 189 1.1 chopps #define SEQ_ID_DCLK_HI 0x13 190 1.1 chopps #define SEQ_ID_CLKSYN_CNTL_1 0x14 191 1.1 chopps #define SEQ_ID_CLKSYN_CNTL_2 0x15 192 1.1 chopps #define SEQ_ID_CLKSYN_TEST_HI 0x16 /* reserved for S3 testing of the */ 193 1.1 chopps #define SEQ_ID_CLKSYN_TEST_LO 0x17 /* internal clock synthesizer */ 194 1.1 chopps #define SEQ_ID_RAMDAC_CNTL 0x18 195 1.3 chopps #define SEQ_ID_MORE_MAGIC 0x1A 196 1.1 chopps 197 1.1 chopps /* CRT Controller: */ 198 1.1 chopps #define CRT_ADDRESS 0x03D4 199 1.1 chopps #define CRT_ADDRESS_R 0x03D5 200 1.1 chopps #define CRT_ADDRESS_W 0x03D5 201 1.1 chopps #define CRT_ID_HOR_TOTAL 0x00 202 1.1 chopps #define CRT_ID_HOR_DISP_ENA_END 0x01 203 1.1 chopps #define CRT_ID_START_HOR_BLANK 0x02 204 1.1 chopps #define CRT_ID_END_HOR_BLANK 0x03 205 1.1 chopps #define CRT_ID_START_HOR_RETR 0x04 206 1.1 chopps #define CRT_ID_END_HOR_RETR 0x05 207 1.1 chopps #define CRT_ID_VER_TOTAL 0x06 208 1.1 chopps #define CRT_ID_OVERFLOW 0x07 209 1.1 chopps #define CRT_ID_PRESET_ROW_SCAN 0x08 210 1.1 chopps #define CRT_ID_MAX_SCAN_LINE 0x09 211 1.1 chopps #define CRT_ID_CURSOR_START 0x0A 212 1.1 chopps #define CRT_ID_CURSOR_END 0x0B 213 1.1 chopps #define CRT_ID_START_ADDR_HIGH 0x0C 214 1.1 chopps #define CRT_ID_START_ADDR_LOW 0x0D 215 1.1 chopps #define CRT_ID_CURSOR_LOC_HIGH 0x0E 216 1.1 chopps #define CRT_ID_CURSOR_LOC_LOW 0x0F 217 1.1 chopps #define CRT_ID_START_VER_RETR 0x10 218 1.1 chopps #define CRT_ID_END_VER_RETR 0x11 219 1.1 chopps #define CRT_ID_VER_DISP_ENA_END 0x12 220 1.1 chopps #define CRT_ID_SCREEN_OFFSET 0x13 221 1.1 chopps #define CRT_ID_UNDERLINE_LOC 0x14 222 1.1 chopps #define CRT_ID_START_VER_BLANK 0x15 223 1.1 chopps #define CRT_ID_END_VER_BLANK 0x16 224 1.1 chopps #define CRT_ID_MODE_CONTROL 0x17 225 1.1 chopps #define CRT_ID_LINE_COMPARE 0x18 226 1.1 chopps #define CRT_ID_GD_LATCH_RBACK 0x22 227 1.1 chopps #define CRT_ID_ACT_TOGGLE_RBACK 0x24 228 1.1 chopps #define CRT_ID_ACT_INDEX_RBACK 0x26 229 1.1 chopps /* S3 extensions: S3 VGA Registers */ 230 1.1 chopps #define CRT_ID_DEVICE_HIGH 0x2D 231 1.1 chopps #define CRT_ID_DEVICE_LOW 0x2E 232 1.1 chopps #define CRT_ID_REVISION 0x2F 233 1.1 chopps #define CRT_ID_CHIP_ID_REV 0x30 234 1.1 chopps #define CRT_ID_MEMORY_CONF 0x31 235 1.1 chopps #define CRT_ID_BACKWAD_COMP_1 0x32 236 1.1 chopps #define CRT_ID_BACKWAD_COMP_2 0x33 237 1.1 chopps #define CRT_ID_BACKWAD_COMP_3 0x34 238 1.1 chopps #define CRT_ID_REGISTER_LOCK 0x35 239 1.1 chopps #define CRT_ID_CONFIG_1 0x36 240 1.1 chopps #define CRT_ID_CONFIG_2 0x37 241 1.1 chopps #define CRT_ID_REGISTER_LOCK_1 0x38 242 1.1 chopps #define CRT_ID_REGISTER_LOCK_2 0x39 243 1.1 chopps #define CRT_ID_MISC_1 0x3A 244 1.1 chopps #define CRT_ID_DISPLAY_FIFO 0x3B 245 1.1 chopps #define CRT_ID_LACE_RETR_START 0x3C 246 1.1 chopps /* S3 extensions: System Control Registers */ 247 1.1 chopps #define CRT_ID_SYSTEM_CONFIG 0x40 248 1.1 chopps #define CRT_ID_BIOS_FLAG 0x41 249 1.1 chopps #define CRT_ID_LACE_CONTROL 0x42 250 1.1 chopps #define CRT_ID_EXT_MODE 0x43 251 1.1 chopps #define CRT_ID_HWGC_MODE 0x45 /* HWGC = Hardware Graphics Cursor */ 252 1.1 chopps #define CRT_ID_HWGC_ORIGIN_X_HI 0x46 253 1.1 chopps #define CRT_ID_HWGC_ORIGIN_X_LO 0x47 254 1.1 chopps #define CRT_ID_HWGC_ORIGIN_Y_HI 0x48 255 1.1 chopps #define CRT_ID_HWGC_ORIGIN_Y_LO 0x49 256 1.1 chopps #define CRT_ID_HWGC_FG_STACK 0x4A 257 1.1 chopps #define CRT_ID_HWGC_BG_STACK 0x4B 258 1.1 chopps #define CRT_ID_HWGC_START_AD_HI 0x4C 259 1.1 chopps #define CRT_ID_HWGC_START_AD_LO 0x4D 260 1.1 chopps #define CRT_ID_HWGC_DSTART_X 0x4E 261 1.1 chopps #define CRT_ID_HWGC_DSTART_Y 0x4F 262 1.1 chopps /* S3 extensions: System Extension Registers */ 263 1.1 chopps #define CRT_ID_EXT_SYS_CNTL_1 0x50 264 1.1 chopps #define CRT_ID_EXT_SYS_CNTL_2 0x51 265 1.1 chopps #define CRT_ID_EXT_BIOS_FLAG_1 0x52 266 1.1 chopps #define CRT_ID_EXT_MEM_CNTL_1 0x53 267 1.1 chopps #define CRT_ID_EXT_MEM_CNTL_2 0x54 268 1.1 chopps #define CRT_ID_EXT_DAC_CNTL 0x55 269 1.1 chopps #define CRT_ID_EX_SYNC_1 0x56 270 1.1 chopps #define CRT_ID_EX_SYNC_2 0x57 271 1.1 chopps #define CRT_ID_LAW_CNTL 0x58 /* LAW = Linear Address Window */ 272 1.1 chopps #define CRT_ID_LAW_POS_HI 0x59 273 1.1 chopps #define CRT_ID_LAW_POS_LO 0x5A 274 1.1 chopps #define CRT_ID_GOUT_PORT 0x5C 275 1.1 chopps #define CRT_ID_EXT_HOR_OVF 0x5D 276 1.1 chopps #define CRT_ID_EXT_VER_OVF 0x5E 277 1.1 chopps #define CRT_ID_EXT_MEM_CNTL_3 0x60 278 1.1 chopps #define CRT_ID_EX_SYNC_3 0x63 279 1.1 chopps #define CRT_ID_EXT_MISC_CNTL 0x65 280 1.1 chopps #define CRT_ID_EXT_MISC_CNTL_1 0x66 281 1.1 chopps #define CRT_ID_EXT_MISC_CNTL_2 0x67 282 1.1 chopps #define CRT_ID_CONFIG_3 0x68 283 1.1 chopps #define CRT_ID_EXT_SYS_CNTL_3 0x69 284 1.1 chopps #define CRT_ID_EXT_SYS_CNTL_4 0x6A 285 1.1 chopps #define CRT_ID_EXT_BIOS_FLAG_3 0x6B 286 1.1 chopps #define CRT_ID_EXT_BIOS_FLAG_4 0x6C 287 1.1 chopps 288 1.1 chopps /* Enhanced Commands Registers: */ 289 1.1 chopps #define ECR_SUBSYSTEM_STAT 0x42E8 290 1.1 chopps #define ECR_SUBSYSTEM_CNTL 0x42E8 291 1.1 chopps #define ECR_ADV_FUNC_CNTL 0x4AE8 292 1.1 chopps #define ECR_CURRENT_Y_POS 0x82E8 293 1.1 chopps #define ECR_CURRENT_Y_POS2 0x82EA /* Trio64 only */ 294 1.1 chopps #define ECR_CURRENT_X_POS 0x86E8 295 1.1 chopps #define ECR_CURRENT_X_POS2 0x86EA /* Trio64 only */ 296 1.1 chopps #define ECR_DEST_Y__AX_STEP 0x8AE8 297 1.1 chopps #define ECR_DEST_Y2__AX_STEP2 0x8AEA /* Trio64 only */ 298 1.1 chopps #define ECR_DEST_X__DIA_STEP 0x8EE8 299 1.1 chopps #define ECR_DEST_X2__DIA_STEP2 0x8EEA /* Trio64 only */ 300 1.1 chopps #define ECR_ERR_TERM 0x92E8 301 1.1 chopps #define ECR_ERR_TERM2 0x92EA /* Trio64 only */ 302 1.1 chopps #define ECR_MAJ_AXIS_PIX_CNT 0x96E8 303 1.1 chopps #define ECR_MAJ_AXIS_PIX_CNT2 0x96EA /* Trio64 only */ 304 1.1 chopps #define ECR_GP_STAT 0x9AE8 /* GP = Graphics Processor */ 305 1.1 chopps #define ECR_DRAW_CMD 0x9AE8 306 1.1 chopps #define ECR_DRAW_CMD2 0x9AEA /* Trio64 only */ 307 1.1 chopps #define ECR_SHORT_STROKE 0x9EE8 308 1.1 chopps #define ECR_BKGD_COLOR 0xA2E8 /* BKGD = Background */ 309 1.1 chopps #define ECR_FRGD_COLOR 0xA6E8 /* FRGD = Foreground */ 310 1.1 chopps #define ECR_BITPLANE_WRITE_MASK 0xAAE8 311 1.1 chopps #define ECR_BITPLANE_READ_MASK 0xAEE8 312 1.1 chopps #define ECR_COLOR_COMPARE 0xB2E8 313 1.1 chopps #define ECR_BKGD_MIX 0xB6E8 314 1.1 chopps #define ECR_FRGD_MIX 0xBAE8 315 1.1 chopps #define ECR_READ_REG_DATA 0xBEE8 316 1.1 chopps #define ECR_ID_MIN_AXIS_PIX_CNT 0x00 317 1.1 chopps #define ECR_ID_SCISSORS_TOP 0x01 318 1.1 chopps #define ECR_ID_SCISSORS_LEFT 0x02 319 1.1 chopps #define ECR_ID_SCISSORS_BUTTOM 0x03 320 1.1 chopps #define ECR_ID_SCISSORS_RIGHT 0x04 321 1.1 chopps #define ECR_ID_PIX_CNTL 0x0A 322 1.1 chopps #define ECR_ID_MULT_CNTL_MISC_2 0x0D 323 1.1 chopps #define ECR_ID_MULT_CNTL_MISC 0x0E 324 1.1 chopps #define ECR_ID_READ_SEL 0x0F 325 1.1 chopps #define ECR_PIX_TRANS 0xE2E8 326 1.1 chopps #define ECR_PIX_TRANS_EXT 0xE2EA 327 1.1 chopps #define ECR_PATTERN_Y 0xEAE8 /* Trio64 only */ 328 1.1 chopps #define ECR_PATTERN_X 0xEAEA /* Trio64 only */ 329 1.1 chopps 330 1.1 chopps 331 1.1 chopps /* Pass-through */ 332 1.1 chopps #define PASS_ADDRESS 0x40001 333 1.1 chopps #define PASS_ADDRESS_W 0x40001 334 1.1 chopps 335 1.1 chopps /* Video DAC */ 336 1.1 chopps #define VDAC_ADDRESS 0x03c8 337 1.1 chopps #define VDAC_ADDRESS_W 0x03c8 338 1.1 chopps #define VDAC_ADDRESS_R 0x03c7 339 1.1 chopps #define VDAC_STATE 0x03c7 340 1.1 chopps #define VDAC_DATA 0x03c9 341 1.1 chopps #define VDAC_MASK 0x03c6 342 1.1 chopps 343 1.1 chopps 344 1.1 chopps #define WGfx(ba, idx, val) \ 345 1.1 chopps do { vgaw(ba, GCT_ADDRESS, idx); vgaw(ba, GCT_ADDRESS_W , val); } while (0) 346 1.1 chopps 347 1.1 chopps #define WSeq(ba, idx, val) \ 348 1.1 chopps do { vgaw(ba, SEQ_ADDRESS, idx); vgaw(ba, SEQ_ADDRESS_W , val); } while (0) 349 1.1 chopps 350 1.1 chopps #define WCrt(ba, idx, val) \ 351 1.1 chopps do { vgaw(ba, CRT_ADDRESS, idx); vgaw(ba, CRT_ADDRESS_W , val); } while (0) 352 1.1 chopps 353 1.1 chopps #define WAttr(ba, idx, val) \ 354 1.1 chopps do { \ 355 1.1 chopps unsigned char tmp;\ 356 1.1 chopps tmp = vgar(ba, ACT_ADDRESS_RESET);\ 357 1.20 christos __USE(tmp);\ 358 1.1 chopps vgaw(ba, ACT_ADDRESS_W, idx);\ 359 1.1 chopps vgaw(ba, ACT_ADDRESS_W, val);\ 360 1.1 chopps } while (0) 361 1.1 chopps 362 1.1 chopps 363 1.1 chopps #define SetTextPlane(ba, m) \ 364 1.1 chopps do { \ 365 1.1 chopps WGfx(ba, GCT_ID_READ_MAP_SELECT, m & 3 );\ 366 1.1 chopps WSeq(ba, SEQ_ID_MAP_MASK, (1 << (m & 3)));\ 367 1.1 chopps } while (0) 368 1.1 chopps 369 1.4 veego 370 1.4 veego /* Gfx engine busy wait */ 371 1.17 christos #ifdef _KERNEL 372 1.10 perry static inline void 373 1.19 matt GfxBusyWait (volatile void *ba) 374 1.4 veego { 375 1.4 veego int test; 376 1.4 veego 377 1.4 veego do { 378 1.4 veego test = vgar16 (ba, ECR_GP_STAT); 379 1.15 phx amiga_cpu_sync(); 380 1.4 veego } while (test & (1 << 9)); 381 1.4 veego } 382 1.4 veego 383 1.4 veego 384 1.10 perry static inline void 385 1.19 matt GfxFifoWait(volatile void *ba) 386 1.4 veego { 387 1.4 veego int test; 388 1.4 veego 389 1.4 veego do { 390 1.4 veego test = vgar16 (ba, ECR_GP_STAT); 391 1.4 veego } while (test & 0x0f); 392 1.4 veego } 393 1.4 veego 394 1.4 veego 395 1.1 chopps /* Special wakeup/passthrough registers on graphics boards 396 1.1 chopps * 397 1.1 chopps * The methods have diverged a bit for each board, so 398 1.1 chopps * WPass(P) has been converted into a set of specific 399 1.10 perry * inline functions. 400 1.1 chopps */ 401 1.1 chopps 402 1.10 perry static inline unsigned char 403 1.19 matt RAttr(volatile void *ba, short idx) 404 1.1 chopps { 405 1.1 chopps 406 1.1 chopps vgaw(ba, ACT_ADDRESS_W, idx); 407 1.1 chopps delay(0); 408 1.1 chopps return vgar(ba, ACT_ADDRESS_R); 409 1.1 chopps } 410 1.1 chopps 411 1.10 perry static inline unsigned char 412 1.19 matt RSeq(volatile void *ba, short idx) 413 1.1 chopps { 414 1.1 chopps vgaw(ba, SEQ_ADDRESS, idx); 415 1.1 chopps return vgar(ba, SEQ_ADDRESS_R); 416 1.1 chopps } 417 1.1 chopps 418 1.10 perry static inline unsigned char 419 1.19 matt RCrt(volatile void *ba, short idx) 420 1.1 chopps { 421 1.1 chopps vgaw(ba, CRT_ADDRESS, idx); 422 1.1 chopps return vgar(ba, CRT_ADDRESS_R); 423 1.1 chopps } 424 1.1 chopps 425 1.10 perry static inline unsigned char 426 1.19 matt RGfx(volatile void *ba, short idx) 427 1.1 chopps { 428 1.1 chopps vgaw(ba, GCT_ADDRESS, idx); 429 1.1 chopps return vgar(ba, GCT_ADDRESS_R); 430 1.1 chopps } 431 1.17 christos #endif 432 1.1 chopps 433 1.18 phx #endif /* _GRF_CVREG_H */ 434