Minor r200 vertex program cleanups. Remove disabled leftovers from r300 vertex progra...
[mesa.git] / src / mesa / drivers / dri / i810 / server / i810_reg.h
1 /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i810_reg.h,v 1.13 2003/02/06 04:18:04 dawes Exp $ */
2 /**************************************************************************
3
4 Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
5 All Rights Reserved.
6
7 Permission is hereby granted, free of charge, to any person obtaining a
8 copy of this software and associated documentation files (the
9 "Software"), to deal in the Software without restriction, including
10 without limitation the rights to use, copy, modify, merge, publish,
11 distribute, sub license, and/or sell copies of the Software, and to
12 permit persons to whom the Software is furnished to do so, subject to
13 the following conditions:
14
15 The above copyright notice and this permission notice (including the
16 next paragraph) shall be included in all copies or substantial portions
17 of the Software.
18
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22 IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
23 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24 TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
27 **************************************************************************/
28
29 /*
30 * Authors:
31 * Keith Whitwell <keith@tungstengraphics.com>
32 *
33 * based on the i740 driver by
34 * Kevin E. Martin <kevin@precisioninsight.com>
35 *
36 *
37 */
38
39 #ifndef _I810_REG_H
40 #define _I810_REG_H
41
42 /* I/O register offsets
43 */
44 #define SRX 0x3C4 /* p208 */
45 #define GRX 0x3CE /* p213 */
46 #define ARX 0x3C0 /* p224 */
47
48 /* VGA Color Palette Registers */
49 #define DACMASK 0x3C6 /* p232 */
50 #define DACSTATE 0x3C7 /* p232 */
51 #define DACRX 0x3C7 /* p233 */
52 #define DACWX 0x3C8 /* p233 */
53 #define DACDATA 0x3C9 /* p233 */
54
55 /* CRT Controller Registers (CRX) */
56 #define START_ADDR_HI 0x0C /* p246 */
57 #define START_ADDR_LO 0x0D /* p247 */
58 #define VERT_SYNC_END 0x11 /* p249 */
59 #define EXT_VERT_TOTAL 0x30 /* p257 */
60 #define EXT_VERT_DISPLAY 0x31 /* p258 */
61 #define EXT_VERT_SYNC_START 0x32 /* p259 */
62 #define EXT_VERT_BLANK_START 0x33 /* p260 */
63 #define EXT_HORIZ_TOTAL 0x35 /* p261 */
64 #define EXT_HORIZ_BLANK 0x39 /* p261 */
65 #define EXT_START_ADDR 0x40 /* p262 */
66 #define EXT_START_ADDR_ENABLE 0x80
67 #define EXT_OFFSET 0x41 /* p263 */
68 #define EXT_START_ADDR_HI 0x42 /* p263 */
69 #define INTERLACE_CNTL 0x70 /* p264 */
70 #define INTERLACE_ENABLE 0x80
71 #define INTERLACE_DISABLE 0x00
72
73 /* Miscellaneous Output Register
74 */
75 #define MSR_R 0x3CC /* p207 */
76 #define MSR_W 0x3C2 /* p207 */
77 #define IO_ADDR_SELECT 0x01
78
79 #define MDA_BASE 0x3B0 /* p207 */
80 #define CGA_BASE 0x3D0 /* p207 */
81
82 /* CR80 - IO Control, p264
83 */
84 #define IO_CTNL 0x80
85 #define EXTENDED_ATTR_CNTL 0x02
86 #define EXTENDED_CRTC_CNTL 0x01
87
88 /* GR10 - Address mapping, p221
89 */
90 #define ADDRESS_MAPPING 0x10
91 #define PAGE_TO_LOCAL_MEM_ENABLE 0x10
92 #define GTT_MEM_MAP_ENABLE 0x08
93 #define PACKED_MODE_ENABLE 0x04
94 #define LINEAR_MODE_ENABLE 0x02
95 #define PAGE_MAPPING_ENABLE 0x01
96
97 /* Blitter control, p378
98 */
99 #define BITBLT_CNTL 0x7000c
100 #define COLEXP_MODE 0x30
101 #define COLEXP_8BPP 0x00
102 #define COLEXP_16BPP 0x10
103 #define COLEXP_24BPP 0x20
104 #define COLEXP_RESERVED 0x30
105 #define BITBLT_STATUS 0x01
106
107 /* p375.
108 */
109 #define DISPLAY_CNTL 0x70008
110 #define VGA_WRAP_MODE 0x02
111 #define VGA_WRAP_AT_256KB 0x00
112 #define VGA_NO_WRAP 0x02
113 #define GUI_MODE 0x01
114 #define STANDARD_VGA_MODE 0x00
115 #define HIRES_MODE 0x01
116
117 /* p375
118 */
119 #define PIXPIPE_CONFIG_0 0x70009
120 #define DAC_8_BIT 0x80
121 #define DAC_6_BIT 0x00
122 #define HW_CURSOR_ENABLE 0x10
123 #define EXTENDED_PALETTE 0x01
124
125 /* p375
126 */
127 #define PIXPIPE_CONFIG_1 0x7000a
128 #define DISPLAY_COLOR_MODE 0x0F
129 #define DISPLAY_VGA_MODE 0x00
130 #define DISPLAY_8BPP_MODE 0x02
131 #define DISPLAY_15BPP_MODE 0x04
132 #define DISPLAY_16BPP_MODE 0x05
133 #define DISPLAY_24BPP_MODE 0x06
134 #define DISPLAY_32BPP_MODE 0x07
135
136 /* p375
137 */
138 #define PIXPIPE_CONFIG_2 0x7000b
139 #define DISPLAY_GAMMA_ENABLE 0x08
140 #define DISPLAY_GAMMA_DISABLE 0x00
141 #define OVERLAY_GAMMA_ENABLE 0x04
142 #define OVERLAY_GAMMA_DISABLE 0x00
143
144
145 /* p380
146 */
147 #define DISPLAY_BASE 0x70020
148 #define DISPLAY_BASE_MASK 0x03fffffc
149
150
151 /* Cursor control registers, pp383-384
152 */
153 /* Desktop (845G, 865G) */
154 #define CURSOR_CONTROL 0x70080
155 #define CURSOR_ENABLE 0x80000000
156 #define CURSOR_GAMMA_ENABLE 0x40000000
157 #define CURSOR_STRIDE_MASK 0x30000000
158 #define CURSOR_FORMAT_SHIFT 24
159 #define CURSOR_FORMAT_MASK (0x07 << CURSOR_FORMAT_SHIFT)
160 #define CURSOR_FORMAT_2C (0x00 << CURSOR_FORMAT_SHIFT)
161 #define CURSOR_FORMAT_3C (0x01 << CURSOR_FORMAT_SHIFT)
162 #define CURSOR_FORMAT_4C (0x02 << CURSOR_FORMAT_SHIFT)
163 #define CURSOR_FORMAT_ARGB (0x04 << CURSOR_FORMAT_SHIFT)
164 #define CURSOR_FORMAT_XRGB (0x05 << CURSOR_FORMAT_SHIFT)
165
166 /* Mobile and i810 */
167 #define CURSOR_A_CONTROL CURSOR_CONTROL
168 #define CURSOR_ORIGIN_SCREEN 0x00 /* i810 only */
169 #define CURSOR_ORIGIN_DISPLAY 0x1 /* i810 only */
170 #define CURSOR_MODE 0x27
171 #define CURSOR_MODE_DISABLE 0x00
172 #define CURSOR_MODE_32_4C_AX 0x01 /* i810 only */
173 #define CURSOR_MODE_64_3C 0x04
174 #define CURSOR_MODE_64_4C_AX 0x05
175 #define CURSOR_MODE_64_4C 0x06
176 #define CURSOR_MODE_64_32B_AX 0x07
177 #define CURSOR_MODE_64_ARGB_AX (0x20 | CURSOR_MODE_64_32B_AX)
178 #define MCURSOR_PIPE_SELECT (1 << 28)
179 #define MCURSOR_PIPE_A 0x00
180 #define MCURSOR_PIPE_B (1 << 28)
181 #define MCURSOR_GAMMA_ENABLE (1 << 26)
182 #define MCURSOR_MEM_TYPE_LOCAL (1 << 25)
183
184
185 #define CURSOR_BASEADDR 0x70084
186 #define CURSOR_A_BASE CURSOR_BASEADDR
187 #define CURSOR_BASEADDR_MASK 0x1FFFFF00
188 #define CURSOR_A_POSITION 0x70088
189 #define CURSOR_POS_SIGN 0x8000
190 #define CURSOR_POS_MASK 0x007FF
191 #define CURSOR_X_SHIFT 0
192 #define CURSOR_Y_SHIFT 16
193 #define CURSOR_X_LO 0x70088
194 #define CURSOR_X_HI 0x70089
195 #define CURSOR_X_POS 0x00
196 #define CURSOR_X_NEG 0x80
197 #define CURSOR_Y_LO 0x7008A
198 #define CURSOR_Y_HI 0x7008B
199 #define CURSOR_Y_POS 0x00
200 #define CURSOR_Y_NEG 0x80
201
202 #define CURSOR_A_PALETTE0 0x70090
203 #define CURSOR_A_PALETTE1 0x70094
204 #define CURSOR_A_PALETTE2 0x70098
205 #define CURSOR_A_PALETTE3 0x7009C
206
207 #define CURSOR_SIZE 0x700A0
208 #define CURSOR_SIZE_MASK 0x3FF
209 #define CURSOR_SIZE_HSHIFT 0
210 #define CURSOR_SIZE_VSHIFT 12
211
212
213 /* Similar registers exist in Device 0 on the i810 (pp55-65), but I'm
214 * not sure they refer to local (graphics) memory.
215 *
216 * These details are for the local memory control registers,
217 * (pp301-310). The test machines are not equiped with local memory,
218 * so nothing is tested. Only a single row seems to be supported.
219 */
220 #define DRAM_ROW_TYPE 0x3000
221 #define DRAM_ROW_0 0x01
222 #define DRAM_ROW_0_SDRAM 0x01
223 #define DRAM_ROW_0_EMPTY 0x00
224 #define DRAM_ROW_CNTL_LO 0x3001
225 #define DRAM_PAGE_MODE_CTRL 0x10
226 #define DRAM_RAS_TO_CAS_OVRIDE 0x08
227 #define DRAM_CAS_LATENCY 0x04
228 #define DRAM_RAS_TIMING 0x02
229 #define DRAM_RAS_PRECHARGE 0x01
230 #define DRAM_ROW_CNTL_HI 0x3002
231 #define DRAM_REFRESH_RATE 0x18
232 #define DRAM_REFRESH_DISABLE 0x00
233 #define DRAM_REFRESH_60HZ 0x08
234 #define DRAM_REFRESH_FAST_TEST 0x10
235 #define DRAM_REFRESH_RESERVED 0x18
236 #define DRAM_SMS 0x07
237 #define DRAM_SMS_NORMAL 0x00
238 #define DRAM_SMS_NOP_ENABLE 0x01
239 #define DRAM_SMS_ABPCE 0x02
240 #define DRAM_SMS_MRCE 0x03
241 #define DRAM_SMS_CBRCE 0x04
242
243 /* p307
244 */
245 #define DPMS_SYNC_SELECT 0x5002
246 #define VSYNC_CNTL 0x08
247 #define VSYNC_ON 0x00
248 #define VSYNC_OFF 0x08
249 #define HSYNC_CNTL 0x02
250 #define HSYNC_ON 0x00
251 #define HSYNC_OFF 0x02
252
253
254
255 /* p317, 319
256 */
257 #define VCLK2_VCO_M 0x6008 /* treat as 16 bit? (includes msbs) */
258 #define VCLK2_VCO_N 0x600a
259 #define VCLK2_VCO_DIV_SEL 0x6012
260
261 #define VCLK_DIVISOR_VGA0 0x6000
262 #define VCLK_DIVISOR_VGA1 0x6004
263 #define VCLK_POST_DIV 0x6010
264
265 #define POST_DIV_SELECT 0x70
266 #define POST_DIV_1 0x00
267 #define POST_DIV_2 0x10
268 #define POST_DIV_4 0x20
269 #define POST_DIV_8 0x30
270 #define POST_DIV_16 0x40
271 #define POST_DIV_32 0x50
272 #define VCO_LOOP_DIV_BY_4M 0x00
273 #define VCO_LOOP_DIV_BY_16M 0x04
274
275
276 /* Instruction Parser Mode Register
277 * - p281
278 * - 2 new bits.
279 */
280 #define INST_PM 0x20c0
281 #define AGP_SYNC_PACKET_FLUSH_ENABLE 0x20 /* reserved */
282 #define SYNC_PACKET_FLUSH_ENABLE 0x10
283 #define TWO_D_INST_DISABLE 0x08
284 #define THREE_D_INST_DISABLE 0x04
285 #define STATE_VAR_UPDATE_DISABLE 0x02
286 #define PAL_STIP_DISABLE 0x01
287
288 #define INST_DONE 0x2090
289 #define INST_PS 0x20c4
290
291 #define MEMMODE 0x20dc
292
293
294 /* Instruction parser error register. p279
295 */
296 #define IPEIR 0x2088
297 #define IPEHR 0x208C
298
299
300 /* General error reporting regs, p296
301 */
302 #define EIR 0x20B0
303 #define EMR 0x20B4
304 #define ESR 0x20B8
305 #define IP_ERR 0x0001
306 #define ERROR_RESERVED 0xffc6
307
308
309 /* Interrupt Control Registers
310 * - new bits for i810
311 * - new register hwstam (mask)
312 */
313 #define HWSTAM 0x2098 /* p290 */
314 #define IER 0x20a0 /* p291 */
315 #define IIR 0x20a4 /* p292 */
316 #define IMR 0x20a8 /* p293 */
317 #define ISR 0x20ac /* p294 */
318 #define HW_ERROR 0x8000
319 #define SYNC_STATUS_TOGGLE 0x1000
320 #define DPY_0_FLIP_PENDING 0x0800
321 #define DPY_1_FLIP_PENDING 0x0400 /* not implemented on i810 */
322 #define OVL_0_FLIP_PENDING 0x0200
323 #define OVL_1_FLIP_PENDING 0x0100 /* not implemented on i810 */
324 #define DPY_0_VBLANK 0x0080
325 #define DPY_0_EVENT 0x0040
326 #define DPY_1_VBLANK 0x0020 /* not implemented on i810 */
327 #define DPY_1_EVENT 0x0010 /* not implemented on i810 */
328 #define HOST_PORT_EVENT 0x0008 /* */
329 #define CAPTURE_EVENT 0x0004 /* */
330 #define USER_DEFINED 0x0002
331 #define BREAKPOINT 0x0001
332
333
334 #define INTR_RESERVED (0x6000 | \
335 DPY_1_FLIP_PENDING | \
336 OVL_1_FLIP_PENDING | \
337 DPY_1_VBLANK | \
338 DPY_1_EVENT | \
339 HOST_PORT_EVENT | \
340 CAPTURE_EVENT )
341
342 /* FIFO Watermark and Burst Length Control Register
343 *
344 * - different offset and contents on i810 (p299) (fewer bits per field)
345 * - some overlay fields added
346 * - what does it all mean?
347 */
348 #define FWATER_BLC 0x20d8
349 #define FWATER_BLC2 0x20dc
350 #define MM_BURST_LENGTH 0x00700000
351 #define MM_FIFO_WATERMARK 0x0001F000
352 #define LM_BURST_LENGTH 0x00000700
353 #define LM_FIFO_WATERMARK 0x0000001F
354
355
356 /* Fence/Tiling ranges [0..7]
357 */
358 #define FENCE 0x2000
359 #define FENCE_NR 8
360
361 #define I830_FENCE_START_MASK 0x07f80000
362
363 #define FENCE_START_MASK 0x03F80000
364 #define FENCE_X_MAJOR 0x00000000
365 #define FENCE_Y_MAJOR 0x00001000
366 #define FENCE_SIZE_MASK 0x00000700
367 #define FENCE_SIZE_512K 0x00000000
368 #define FENCE_SIZE_1M 0x00000100
369 #define FENCE_SIZE_2M 0x00000200
370 #define FENCE_SIZE_4M 0x00000300
371 #define FENCE_SIZE_8M 0x00000400
372 #define FENCE_SIZE_16M 0x00000500
373 #define FENCE_SIZE_32M 0x00000600
374 #define FENCE_SIZE_64M 0x00000700
375 #define FENCE_PITCH_MASK 0x00000070
376 #define FENCE_PITCH_1 0x00000000
377 #define FENCE_PITCH_2 0x00000010
378 #define FENCE_PITCH_4 0x00000020
379 #define FENCE_PITCH_8 0x00000030
380 #define FENCE_PITCH_16 0x00000040
381 #define FENCE_PITCH_32 0x00000050
382 #define FENCE_PITCH_64 0x00000060
383 #define FENCE_VALID 0x00000001
384
385
386 /* Registers to control page table, p274
387 */
388 #define PGETBL_CTL 0x2020
389 #define PGETBL_ADDR_MASK 0xFFFFF000
390 #define PGETBL_ENABLE_MASK 0x00000001
391 #define PGETBL_ENABLED 0x00000001
392
393 /* Register containing pge table error results, p276
394 */
395 #define PGE_ERR 0x2024
396 #define PGE_ERR_ADDR_MASK 0xFFFFF000
397 #define PGE_ERR_ID_MASK 0x00000038
398 #define PGE_ERR_CAPTURE 0x00000000
399 #define PGE_ERR_OVERLAY 0x00000008
400 #define PGE_ERR_DISPLAY 0x00000010
401 #define PGE_ERR_HOST 0x00000018
402 #define PGE_ERR_RENDER 0x00000020
403 #define PGE_ERR_BLITTER 0x00000028
404 #define PGE_ERR_MAPPING 0x00000030
405 #define PGE_ERR_CMD_PARSER 0x00000038
406 #define PGE_ERR_TYPE_MASK 0x00000007
407 #define PGE_ERR_INV_TABLE 0x00000000
408 #define PGE_ERR_INV_PTE 0x00000001
409 #define PGE_ERR_MIXED_TYPES 0x00000002
410 #define PGE_ERR_PAGE_MISS 0x00000003
411 #define PGE_ERR_ILLEGAL_TRX 0x00000004
412 #define PGE_ERR_LOCAL_MEM 0x00000005
413 #define PGE_ERR_TILED 0x00000006
414
415
416
417 /* Page table entries loaded via mmio region, p323
418 */
419 #define PTE_BASE 0x10000
420 #define PTE_ADDR_MASK 0x3FFFF000
421 #define PTE_TYPE_MASK 0x00000006
422 #define PTE_LOCAL 0x00000002
423 #define PTE_MAIN_UNCACHED 0x00000000
424 #define PTE_MAIN_CACHED 0x00000006
425 #define PTE_VALID_MASK 0x00000001
426 #define PTE_VALID 0x00000001
427
428
429 /* Ring buffer registers, p277, overview p19
430 */
431 #define LP_RING 0x2030
432 #define HP_RING 0x2040
433
434 #define RING_TAIL 0x00
435 #define TAIL_ADDR 0x000FFFF8
436 #define I830_TAIL_MASK 0x001FFFF8
437
438 #define RING_HEAD 0x04
439 #define HEAD_WRAP_COUNT 0xFFE00000
440 #define HEAD_WRAP_ONE 0x00200000
441 #define HEAD_ADDR 0x001FFFFC
442 #define I830_HEAD_MASK 0x001FFFFC
443
444 #define RING_START 0x08
445 #define START_ADDR 0x00FFFFF8
446 #define I830_RING_START_MASK 0xFFFFF000
447
448 #define RING_LEN 0x0C
449 #define RING_NR_PAGES 0x000FF000
450 #define I830_RING_NR_PAGES 0x001FF000
451 #define RING_REPORT_MASK 0x00000006
452 #define RING_REPORT_64K 0x00000002
453 #define RING_REPORT_128K 0x00000004
454 #define RING_NO_REPORT 0x00000000
455 #define RING_VALID_MASK 0x00000001
456 #define RING_VALID 0x00000001
457 #define RING_INVALID 0x00000000
458
459
460
461 /* BitBlt Instructions
462 *
463 * There are many more masks & ranges yet to add.
464 */
465 #define BR00_BITBLT_CLIENT 0x40000000
466 #define BR00_OP_COLOR_BLT 0x10000000
467 #define BR00_OP_SRC_COPY_BLT 0x10C00000
468 #define BR00_OP_FULL_BLT 0x11400000
469 #define BR00_OP_MONO_SRC_BLT 0x11800000
470 #define BR00_OP_MONO_SRC_COPY_BLT 0x11000000
471 #define BR00_OP_MONO_PAT_BLT 0x11C00000
472 #define BR00_OP_MONO_SRC_COPY_IMMEDIATE_BLT (0x61 << 22)
473 #define BR00_OP_TEXT_IMMEDIATE_BLT 0xc000000
474
475
476 #define BR00_TPCY_DISABLE 0x00000000
477 #define BR00_TPCY_ENABLE 0x00000010
478
479 #define BR00_TPCY_ROP 0x00000000
480 #define BR00_TPCY_NO_ROP 0x00000020
481 #define BR00_TPCY_EQ 0x00000000
482 #define BR00_TPCY_NOT_EQ 0x00000040
483
484 #define BR00_PAT_MSB_FIRST 0x00000000 /* ? */
485
486 #define BR00_PAT_VERT_ALIGN 0x000000e0
487
488 #define BR00_LENGTH 0x0000000F
489
490 #define BR09_DEST_ADDR 0x03FFFFFF
491
492 #define BR11_SOURCE_PITCH 0x00003FFF
493
494 #define BR12_SOURCE_ADDR 0x03FFFFFF
495
496 #define BR13_SOLID_PATTERN 0x80000000
497 #define BR13_RIGHT_TO_LEFT 0x40000000
498 #define BR13_LEFT_TO_RIGHT 0x00000000
499 #define BR13_MONO_TRANSPCY 0x20000000
500 #define BR13_USE_DYN_DEPTH 0x04000000
501 #define BR13_DYN_8BPP 0x00000000
502 #define BR13_DYN_16BPP 0x01000000
503 #define BR13_DYN_24BPP 0x02000000
504 #define BR13_ROP_MASK 0x00FF0000
505 #define BR13_DEST_PITCH 0x0000FFFF
506 #define BR13_PITCH_SIGN_BIT 0x00008000
507
508 #define BR14_DEST_HEIGHT 0xFFFF0000
509 #define BR14_DEST_WIDTH 0x0000FFFF
510
511 #define BR15_PATTERN_ADDR 0x03FFFFFF
512
513 #define BR16_SOLID_PAT_COLOR 0x00FFFFFF
514 #define BR16_BACKGND_PAT_CLR 0x00FFFFFF
515
516 #define BR17_FGND_PAT_CLR 0x00FFFFFF
517
518 #define BR18_SRC_BGND_CLR 0x00FFFFFF
519 #define BR19_SRC_FGND_CLR 0x00FFFFFF
520
521
522 /* Instruction parser instructions
523 */
524
525 #define INST_PARSER_CLIENT 0x00000000
526 #define INST_OP_FLUSH 0x02000000
527 #define INST_FLUSH_MAP_CACHE 0x00000001
528
529
530 #define GFX_OP_USER_INTERRUPT ((0<<29)|(2<<23))
531
532
533 /* Registers in the i810 host-pci bridge pci config space which affect
534 * the i810 graphics operations.
535 */
536 #define SMRAM_MISCC 0x70
537 #define GMS 0x000000c0
538 #define GMS_DISABLE 0x00000000
539 #define GMS_ENABLE_BARE 0x00000040
540 #define GMS_ENABLE_512K 0x00000080
541 #define GMS_ENABLE_1M 0x000000c0
542 #define USMM 0x00000030
543 #define USMM_DISABLE 0x00000000
544 #define USMM_TSEG_ZERO 0x00000010
545 #define USMM_TSEG_512K 0x00000020
546 #define USMM_TSEG_1M 0x00000030
547 #define GFX_MEM_WIN_SIZE 0x00010000
548 #define GFX_MEM_WIN_32M 0x00010000
549 #define GFX_MEM_WIN_64M 0x00000000
550
551 /* Overkill? I don't know. Need to figure out top of mem to make the
552 * SMRAM calculations come out. Linux seems to have problems
553 * detecting it all on its own, so this seems a reasonable double
554 * check to any user supplied 'mem=...' boot param.
555 *
556 * ... unfortunately this reg doesn't work according to spec on the
557 * test hardware.
558 */
559 #define WHTCFG_PAMR_DRP 0x50
560 #define SYS_DRAM_ROW_0_SHIFT 16
561 #define SYS_DRAM_ROW_1_SHIFT 20
562 #define DRAM_MASK 0x0f
563 #define DRAM_VALUE_0 0
564 #define DRAM_VALUE_1 8
565 /* No 2 value defined */
566 #define DRAM_VALUE_3 16
567 #define DRAM_VALUE_4 16
568 #define DRAM_VALUE_5 24
569 #define DRAM_VALUE_6 32
570 #define DRAM_VALUE_7 32
571 #define DRAM_VALUE_8 48
572 #define DRAM_VALUE_9 64
573 #define DRAM_VALUE_A 64
574 #define DRAM_VALUE_B 96
575 #define DRAM_VALUE_C 128
576 #define DRAM_VALUE_D 128
577 #define DRAM_VALUE_E 192
578 #define DRAM_VALUE_F 256 /* nice one, geezer */
579 #define LM_FREQ_MASK 0x10
580 #define LM_FREQ_133 0x10
581 #define LM_FREQ_100 0x00
582
583
584
585
586 /* These are 3d state registers, but the state is invarient, so we let
587 * the X server handle it:
588 */
589
590
591
592 /* GFXRENDERSTATE_COLOR_CHROMA_KEY, p135
593 */
594 #define GFX_OP_COLOR_CHROMA_KEY ((0x3<<29)|(0x1d<<24)|(0x2<<16)|0x1)
595 #define CC1_UPDATE_KILL_WRITE (1<<28)
596 #define CC1_ENABLE_KILL_WRITE (1<<27)
597 #define CC1_DISABLE_KILL_WRITE 0
598 #define CC1_UPDATE_COLOR_IDX (1<<26)
599 #define CC1_UPDATE_CHROMA_LOW (1<<25)
600 #define CC1_UPDATE_CHROMA_HI (1<<24)
601 #define CC1_CHROMA_LOW_MASK ((1<<24)-1)
602 #define CC2_COLOR_IDX_SHIFT 24
603 #define CC2_COLOR_IDX_MASK (0xff<<24)
604 #define CC2_CHROMA_HI_MASK ((1<<24)-1)
605
606
607 #define GFX_CMD_CONTEXT_SEL ((0<<29)|(0x5<<23))
608 #define CS_UPDATE_LOAD (1<<17)
609 #define CS_UPDATE_USE (1<<16)
610 #define CS_UPDATE_LOAD (1<<17)
611 #define CS_LOAD_CTX0 0
612 #define CS_LOAD_CTX1 (1<<8)
613 #define CS_USE_CTX0 0
614 #define CS_USE_CTX1 (1<<0)
615
616 /* I810 LCD/TV registers */
617 #define LCD_TV_HTOTAL 0x60000
618 #define LCD_TV_C 0x60018
619 #define LCD_TV_OVRACT 0x6001C
620
621 #define LCD_TV_ENABLE (1 << 31)
622 #define LCD_TV_VGAMOD (1 << 28)
623
624 /* I830 CRTC registers */
625 #define HTOTAL_A 0x60000
626 #define HBLANK_A 0x60004
627 #define HSYNC_A 0x60008
628 #define VTOTAL_A 0x6000c
629 #define VBLANK_A 0x60010
630 #define VSYNC_A 0x60014
631 #define PIPEASRC 0x6001c
632 #define BCLRPAT_A 0x60020
633
634 #define HTOTAL_B 0x61000
635 #define HBLANK_B 0x61004
636 #define HSYNC_B 0x61008
637 #define VTOTAL_B 0x6100c
638 #define VBLANK_B 0x61010
639 #define VSYNC_B 0x61014
640 #define PIPEBSRC 0x6101c
641 #define BCLRPAT_B 0x61020
642
643 #define DPLL_A 0x06014
644 #define DPLL_B 0x06018
645 #define FPA0 0x06040
646 #define FPA1 0x06044
647
648 #define I830_HTOTAL_MASK 0xfff0000
649 #define I830_HACTIVE_MASK 0x7ff
650
651 #define I830_HBLANKEND_MASK 0xfff0000
652 #define I830_HBLANKSTART_MASK 0xfff
653
654 #define I830_HSYNCEND_MASK 0xfff0000
655 #define I830_HSYNCSTART_MASK 0xfff
656
657 #define I830_VTOTAL_MASK 0xfff0000
658 #define I830_VACTIVE_MASK 0x7ff
659
660 #define I830_VBLANKEND_MASK 0xfff0000
661 #define I830_VBLANKSTART_MASK 0xfff
662
663 #define I830_VSYNCEND_MASK 0xfff0000
664 #define I830_VSYNCSTART_MASK 0xfff
665
666 #define I830_PIPEA_HORZ_MASK 0x7ff0000
667 #define I830_PIPEA_VERT_MASK 0x7ff
668
669 #define ADPA 0x61100
670 #define ADPA_DAC_ENABLE (1<<31)
671 #define ADPA_DAC_DISABLE 0
672 #define ADPA_PIPE_SELECT_MASK (1<<30)
673 #define ADPA_PIPE_A_SELECT 0
674 #define ADPA_PIPE_B_SELECT (1<<30)
675 #define ADPA_USE_VGA_HVPOLARITY (1<<15)
676 #define ADPA_SETS_HVPOLARITY 0
677 #define ADPA_VSYNC_CNTL_DISABLE (1<<11)
678 #define ADPA_VSYNC_CNTL_ENABLE 0
679 #define ADPA_HSYNC_CNTL_DISABLE (1<<10)
680 #define ADPA_HSYNC_CNTL_ENABLE 0
681 #define ADPA_VSYNC_ACTIVE_HIGH (1<<4)
682 #define ADPA_VSYNC_ACTIVE_LOW 0
683 #define ADPA_HSYNC_ACTIVE_HIGH (1<<3)
684 #define ADPA_HSYNC_ACTIVE_LOW 0
685
686
687 #define DVOA 0x61120
688 #define DVOB 0x61140
689 #define DVOC 0x61160
690 #define DVO_ENABLE (1<<31)
691
692 #define DVOA_SRCDIM 0x61124
693 #define DVOB_SRCDIM 0x61144
694 #define DVOC_SRCDIM 0x61164
695
696 #define LVDS 0x61180
697
698 #define PIPEACONF 0x70008
699 #define PIPEACONF_ENABLE (1<<31)
700 #define PIPEACONF_DISABLE 0
701 #define PIPEACONF_DOUBLE_WIDE (1<<30)
702 #define PIPEACONF_SINGLE_WIDE 0
703 #define PIPEACONF_PIPE_UNLOCKED 0
704 #define PIPEACONF_PIPE_LOCKED (1<<25)
705 #define PIPEACONF_PALETTE 0
706 #define PIPEACONF_GAMMA (1<<24)
707
708 #define PIPEBCONF 0x71008
709 #define PIPEBCONF_ENABLE (1<<31)
710 #define PIPEBCONF_DISABLE 0
711 #define PIPEBCONF_GAMMA (1<<24)
712 #define PIPEBCONF_PALETTE 0
713
714 #define DSPACNTR 0x70180
715 #define DSPBCNTR 0x71180
716 #define DISPLAY_PLANE_ENABLE (1<<31)
717 #define DISPLAY_PLANE_DISABLE 0
718 #define DISPPLANE_GAMMA_ENABLE (1<<30)
719 #define DISPPLANE_GAMMA_DISABLE 0
720 #define DISPPLANE_PIXFORMAT_MASK (0xf<<26)
721 #define DISPPLANE_8BPP (0x2<<26)
722 #define DISPPLANE_15_16BPP (0x4<<26)
723 #define DISPPLANE_16BPP (0x5<<26)
724 #define DISPPLANE_32BPP_NO_ALPHA (0x6<<26)
725 #define DISPPLANE_32BPP (0x7<<26)
726 #define DISPPLANE_STEREO_ENABLE (1<<25)
727 #define DISPPLANE_STEREO_DISABLE 0
728 #define DISPPLANE_SEL_PIPE_MASK (1<<24)
729 #define DISPPLANE_SEL_PIPE_A 0
730 #define DISPPLANE_SEL_PIPE_B (1<<24)
731 #define DISPPLANE_SRC_KEY_ENABLE (1<<22)
732 #define DISPPLANE_SRC_KEY_DISABLE 0
733 #define DISPPLANE_LINE_DOUBLE (1<<20)
734 #define DISPPLANE_NO_LINE_DOUBLE 0
735 #define DISPPLANE_STEREO_POLARITY_FIRST 0
736 #define DISPPLANE_STEREO_POLARITY_SECOND (1<<18)
737 /* plane B only */
738 #define DISPPLANE_ALPHA_TRANS_ENABLE (1<<15)
739 #define DISPPLANE_ALPHA_TRANS_DISABLE 0
740 #define DISPPLANE_SPRITE_ABOVE_DISPLAYA 0
741 #define DISPPLANE_SPRITE_ABOVE_OVERLAY (1)
742
743 #define DSPABASE 0x70184
744 #define DSPASTRIDE 0x70188
745
746 #define DSPBBASE 0x71184
747 #define DSPBADDR DSPBBASE
748 #define DSPBSTRIDE 0x71188
749
750 /* Various masks for reserved bits, etc. */
751 #define I830_FWATER1_MASK (~((1<<11)|(1<<10)|(1<<9)| \
752 (1<<8)|(1<<26)|(1<<25)|(1<<24)|(1<<5)|(1<<4)|(1<<3)| \
753 (1<<2)|(1<<1)|1|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)))
754 #define I830_FWATER2_MASK ~(0)
755
756 #define DV0A_RESERVED ((1<<26)|(1<<25)|(1<<24)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<16)|(1<<5)|(1<<1)|1)
757 #define DV0B_RESERVED ((1<<27)|(1<<26)|(1<<25)|(1<<24)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<16)|(1<<5)|(1<<1)|1)
758 #define VGA0_N_DIVISOR_MASK ((1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
759 #define VGA0_M1_DIVISOR_MASK ((1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8))
760 #define VGA0_M2_DIVISOR_MASK ((1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
761 #define VGA0_M1M2N_RESERVED ~(VGA0_N_DIVISOR_MASK|VGA0_M1_DIVISOR_MASK|VGA0_M2_DIVISOR_MASK)
762 #define VGA0_POSTDIV_MASK ((1<<7)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
763 #define VGA1_POSTDIV_MASK ((1<<15)|(1<<13)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8))
764 #define VGA_POSTDIV_RESERVED ~(VGA0_POSTDIV_MASK|VGA1_POSTDIV_MASK|(1<<7)|(1<<15))
765 #define DPLLA_POSTDIV_MASK ((1<<23)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
766 #define DPLLA_RESERVED ((1<<27)|(1<<26)|(1<<25)|(1<<24)|(1<<22)|(1<<15)|(1<<12)|(1<<11)|(1<<10)|(1<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
767 #define ADPA_RESERVED ((1<<2)|(1<<1)|1|(1<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<26)|(1<<25)|(1<<24)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
768 #define SUPER_WORD 32
769 #define BURST_A_MASK ((1<<11)|(1<<10)|(1<<9)|(1<<8))
770 #define BURST_B_MASK ((1<<26)|(1<<25)|(1<<24))
771 #define WATER_A_MASK ((1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)|1)
772 #define WATER_B_MASK ((1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16))
773 #define WATER_RESERVED ((1<<31)|(1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<23)|(1<<22)|(1<<21)|(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<7)|(1<<6))
774 #define PIPEACONF_RESERVED ((1<<29)|(1<<28)|(1<<27)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)|0xffff)
775 #define PIPEBCONF_RESERVED ((1<<30)|(1<<29)|(1<<28)|(1<<27)|(1<<26)|(1<<25)|(1<<23)|(1<<22)|(1<<21)|(1<<20)|(1<<19)|(1<<18)|(1<<17)|(1<<16)|0xffff)
776 #define DSPACNTR_RESERVED ((1<<23)|(1<<19)|(1<<17)|(1<<16)|0xffff)
777 #define DSPBCNTR_RESERVED ((1<<23)|(1<<19)|(1<<17)|(1<<16)|0x7ffe)
778
779 #define I830_GMCH_CTRL 0x52
780
781 #define I830_GMCH_ENABLED 0x4
782 #define I830_GMCH_MEM_MASK 0x1
783 #define I830_GMCH_MEM_64M 0x1
784 #define I830_GMCH_MEM_128M 0
785
786 #define I830_GMCH_GMS_MASK 0x70
787 #define I830_GMCH_GMS_DISABLED 0x00
788 #define I830_GMCH_GMS_LOCAL 0x10
789 #define I830_GMCH_GMS_STOLEN_512 0x20
790 #define I830_GMCH_GMS_STOLEN_1024 0x30
791 #define I830_GMCH_GMS_STOLEN_8192 0x40
792
793 #define I830_RDRAM_CHANNEL_TYPE 0x03010
794 #define I830_RDRAM_ND(x) (((x) & 0x20) >> 5)
795 #define I830_RDRAM_DDT(x) (((x) & 0x18) >> 3)
796
797 #define I855_GMCH_GMS_MASK (0x7 << 4)
798 #define I855_GMCH_GMS_DISABLED 0x00
799 #define I855_GMCH_GMS_STOLEN_1M (0x1 << 4)
800 #define I855_GMCH_GMS_STOLEN_4M (0x2 << 4)
801 #define I855_GMCH_GMS_STOLEN_8M (0x3 << 4)
802 #define I855_GMCH_GMS_STOLEN_16M (0x4 << 4)
803 #define I855_GMCH_GMS_STOLEN_32M (0x5 << 4)
804
805 #define I85X_CAPID 0x44
806 #define I85X_VARIANT_MASK 0x7
807 #define I85X_VARIANT_SHIFT 5
808 #define I855_GME 0x0
809 #define I855_GM 0x4
810 #define I852_GME 0x2
811 #define I852_GM 0x5
812
813 /* BLT commands */
814 #define COLOR_BLT_CMD ((2<<29)|(0x40<<22)|(0x3))
815 #define COLOR_BLT_WRITE_ALPHA (1<<21)
816 #define COLOR_BLT_WRITE_RGB (1<<20)
817
818 #define XY_COLOR_BLT_CMD ((2<<29)|(0x50<<22)|(0x4))
819 #define XY_COLOR_BLT_WRITE_ALPHA (1<<21)
820 #define XY_COLOR_BLT_WRITE_RGB (1<<20)
821
822 #define XY_SETUP_CLIP_BLT_CMD ((2<<29)|(3<<22)|1)
823
824 #define XY_SRC_COPY_BLT_CMD ((2<<29)|(0x53<<22)|6)
825 #define XY_SRC_COPY_BLT_WRITE_ALPHA (1<<21)
826 #define XY_SRC_COPY_BLT_WRITE_RGB (1<<20)
827
828 #define SRC_COPY_BLT_CMD ((2<<29)|(0x43<<22)|0x4)
829 #define SRC_COPY_BLT_WRITE_ALPHA (1<<21)
830 #define SRC_COPY_BLT_WRITE_RGB (1<<20)
831
832 #define XY_MONO_PAT_BLT_CMD ((0x2<<29)|(0x52<<22)|0x7)
833 #define XY_MONO_PAT_VERT_SEED ((1<<10)|(1<<9)|(1<<8))
834 #define XY_MONO_PAT_HORT_SEED ((1<<14)|(1<<13)|(1<<12))
835 #define XY_MONO_PAT_BLT_WRITE_ALPHA (1<<21)
836 #define XY_MONO_PAT_BLT_WRITE_RGB (1<<20)
837
838 #define XY_MONO_SRC_BLT_CMD ((0x2<<29)|(0x54<<22)|(0x6))
839 #define XY_MONO_SRC_BLT_WRITE_ALPHA (1<<21)
840 #define XY_MONO_SRC_BLT_WRITE_RGB (1<<20)
841
842 /* 3d state */
843 #define STATE3D_FOG_MODE ((3<<29)|(0x1d<<24)|(0x89<<16)|2)
844 #define FOG_MODE_VERTEX (1<<31)
845 #define STATE3D_MAP_COORD_TRANSFORM ((3<<29)|(0x1d<<24)|(0x8c<<16))
846 #define DISABLE_TEX_TRANSFORM (1<<28)
847 #define TEXTURE_SET(x) (x<<29)
848 #define STATE3D_RASTERIZATION_RULES ((3<<29)|(0x07<<24))
849 #define POINT_RASTER_ENABLE (1<<15)
850 #define POINT_RASTER_OGL (1<<13)
851 #define STATE3D_VERTEX_TRANSFORM ((3<<29)|(0x1d<<24)|(0x8b<<16))
852 #define DISABLE_VIEWPORT_TRANSFORM (1<<31)
853 #define DISABLE_PERSPECTIVE_DIVIDE (1<<29)
854
855 #define MI_SET_CONTEXT (0x18<<23)
856 #define CTXT_NO_RESTORE (1)
857 #define CTXT_PALETTE_SAVE_DISABLE (1<<3)
858 #define CTXT_PALETTE_RESTORE_DISABLE (1<<2)
859
860 /* Dword 0 */
861 #define MI_VERTEX_BUFFER (0x17<<23)
862 #define MI_VERTEX_BUFFER_IDX(x) (x<<20)
863 #define MI_VERTEX_BUFFER_PITCH(x) (x<<13)
864 #define MI_VERTEX_BUFFER_WIDTH(x) (x<<6)
865 /* Dword 1 */
866 #define MI_VERTEX_BUFFER_DISABLE (1)
867
868 /* Overlay Flip */
869 #define MI_OVERLAY_FLIP (0x11<<23)
870 #define MI_OVERLAY_FLIP_CONTINUE (0<<21)
871 #define MI_OVERLAY_FLIP_ON (1<<21)
872 #define MI_OVERLAY_FLIP_OFF (2<<21)
873
874 /* Wait for Events */
875 #define MI_WAIT_FOR_EVENT (0x03<<23)
876 #define MI_WAIT_FOR_OVERLAY_FLIP (1<<16)
877
878 /* Flush */
879 #define MI_FLUSH (0x04<<23)
880 #define MI_WRITE_DIRTY_STATE (1<<4)
881 #define MI_END_SCENE (1<<3)
882 #define MI_INHIBIT_RENDER_CACHE_FLUSH (1<<2)
883 #define MI_INVALIDATE_MAP_CACHE (1<<0)
884
885 /* Noop */
886 #define MI_NOOP 0x00
887 #define MI_NOOP_WRITE_ID (1<<22)
888 #define MI_NOOP_ID_MASK (1<<22 - 1)
889
890 #define STATE3D_COLOR_FACTOR ((0x3<<29)|(0x1d<<24)|(0x01<<16))
891
892 /* STATE3D_FOG_MODE stuff */
893 #define ENABLE_FOG_SOURCE (1<<27)
894 #define ENABLE_FOG_CONST (1<<24)
895 #define ENABLE_FOG_DENSITY (1<<23)
896
897
898 #define MAX_DISPLAY_PIPES 2
899
900 typedef enum {
901 CrtIndex = 0,
902 TvIndex,
903 DfpIndex,
904 LfpIndex,
905 Tv2Index,
906 Dfp2Index,
907 UnknownIndex,
908 Unknown2Index,
909 NumDisplayTypes,
910 NumKnownDisplayTypes = UnknownIndex
911 } DisplayType;
912
913 /* What's connected to the pipes (as reported by the BIOS) */
914 #define PIPE_ACTIVE_MASK 0xff
915 #define PIPE_CRT_ACTIVE (1 << CrtIndex)
916 #define PIPE_TV_ACTIVE (1 << TvIndex)
917 #define PIPE_DFP_ACTIVE (1 << DfpIndex)
918 #define PIPE_LCD_ACTIVE (1 << LfpIndex)
919 #define PIPE_TV2_ACTIVE (1 << Tv2Index)
920 #define PIPE_DFP2_ACTIVE (1 << Dfp2Index)
921 #define PIPE_UNKNOWN_ACTIVE ((1 << UnknownIndex) | \
922 (1 << Unknown2Index))
923
924 #define PIPE_SIZED_DISP_MASK (PIPE_DFP_ACTIVE | \
925 PIPE_LCD_ACTIVE | \
926 PIPE_DFP2_ACTIVE)
927
928 #define PIPE_A_SHIFT 0
929 #define PIPE_B_SHIFT 8
930 #define PIPE_SHIFT(n) ((n) == 0 ? \
931 PIPE_A_SHIFT : PIPE_B_SHIFT)
932
933 /*
934 * Some BIOS scratch area registers. The 845 (and 830?) store the amount
935 * of video memory available to the BIOS in SWF1.
936 */
937
938 #define SWF0 0x71410
939 #define SWF1 0x71414
940 #define SWF2 0x71418
941 #define SWF3 0x7141c
942 #define SWF4 0x71420
943 #define SWF5 0x71424
944 #define SWF6 0x71428
945
946 /*
947 * 855 scratch registers.
948 */
949 #define SWF00 0x70410
950 #define SWF01 0x70414
951 #define SWF02 0x70418
952 #define SWF03 0x7041c
953 #define SWF04 0x70420
954 #define SWF05 0x70424
955 #define SWF06 0x70428
956
957 #define SWF10 SWF0
958 #define SWF11 SWF1
959 #define SWF12 SWF2
960 #define SWF13 SWF3
961 #define SWF14 SWF4
962 #define SWF15 SWF5
963 #define SWF16 SWF6
964
965 #define SWF30 0x72414
966 #define SWF31 0x72418
967 #define SWF32 0x7241c
968
969 /*
970 * Overlay registers. These are overlay registers accessed via MMIO.
971 * Those loaded via the overlay register page are defined in i830_video.c.
972 */
973 #define OVADD 0x30000
974
975 #define DOVSTA 0x30008
976 #define OC_BUF (0x3<<20)
977
978 #define OGAMC5 0x30010
979 #define OGAMC4 0x30014
980 #define OGAMC3 0x30018
981 #define OGAMC2 0x3001c
982 #define OGAMC1 0x30020
983 #define OGAMC0 0x30024
984
985
986 /*
987 * Palette registers
988 */
989 #define PALETTE_A 0x0a000
990 #define PALETTE_B 0x0a800
991
992 #endif /* _I810_REG_H */