1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
|
/* $NetBSD: grf_cv3dreg.h,v 1.13 2016/06/17 07:41:56 phx Exp $ */
/*
* Copyright (c) 1995 Michael Teske
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Ezra Story and by Kari
* Mettinen.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _GRF_CV3DREG_H
#define _GRF_CV3DREG_H
/*
* This is derived from Cirrus driver source.
*/
/* Extension to grfvideo_mode to support text modes.
* This can be passed to both text & gfx functions
* without worry. If gv.depth == 4, then the extended
* fields for a text mode are present.
*/
struct grfcv3dtext_mode {
struct grfvideo_mode gv;
unsigned short fx; /* font x dimension */
unsigned short fy; /* font y dimension */
unsigned short cols; /* screen dimensions */
unsigned short rows;
void *fdata; /* font data */
unsigned short fdstart;
unsigned short fdend;
};
/* read VGA register */
#define vgar(ba, reg) \
*(((volatile char *)ba)+(reg ^ 3))
/* write VGA register */
#define vgaw(ba, reg, val) \
*(((volatile char *)ba)+(reg ^ 3)) = ((val) & 0xff)
/* MMIO access */
#define ByteAccessIO(x) ( ((x) & 0x3ffc) | (((x) & 3)^3) | (((x) & 3) <<14) )
#define vgario(ba, reg) \
*(((volatile char *)ba) + ( ByteAccessIO(reg) ))
#define vgawio(ba, reg, val) \
do { \
if (!cv3d_zorroIII) { \
*(((volatile char *)cv3d_vcode_switch_base) + \
0x04) = (0x01 & 0xffff); \
__asm volatile ("nop"); \
} \
*(((volatile char *)cv3d_special_register_base) + \
( ByteAccessIO(reg) & 0xffff )) = ((val) & 0xff); \
if (!cv3d_zorroIII) { \
*(((volatile char *)cv3d_vcode_switch_base) + \
0x04) = (0x02 & 0xffff); \
__asm volatile ("nop"); \
} \
} while (0)
/* read 32 Bit VGA register */
#define vgar32(ba, reg) \
*((volatile unsigned long *) (((volatile char *)ba)+reg))
/* write 32 Bit VGA register */
#define vgaw32(ba, reg, val) \
*((volatile unsigned long *) (((volatile char *)ba)+reg)) = val
/* read 16 Bit VGA register */
#define vgar16(ba, reg) \
*((volatile unsigned short *) (((volatile char *)ba)+reg))
/* write 16 Bit VGA register */
#define vgaw16(ba, reg, val) \
*((volatile unsigned short *) (((volatile char *)ba)+reg)) = val
#define Select_Zorro2_FrameBuffer(flag) \
do { \
*(((volatile char *)cv3d_vcode_switch_base) + \
0x08) = ((flag * 0x40) & 0xffff); \
__asm volatile ("nop"); \
} while (0)
int grfcv3d_cnprobe(void);
void grfcv3d_iteinit(struct grf_softc *);
static inline void GfxBusyWait(volatile void *);
static inline void GfxFifoWait(volatile void *);
static inline unsigned char RAttr(volatile void *, short);
static inline unsigned char RSeq(volatile void *, short);
static inline unsigned char RCrt(volatile void *, short);
static inline unsigned char RGfx(volatile void *, short);
/*
* defines for the used register addresses (mw)
*
* NOTE: there are some registers that have different addresses when
* in mono or color mode. We only support color mode, and thus
* some addresses won't work in mono-mode!
*
* General and VGA-registers taken from retina driver. Fixed a few
* bugs in it. (SR and GR read address is Port + 1, NOT Port)
*
*/
/* General Registers: */
#define GREG_MISC_OUTPUT_R 0x03CC
#define GREG_MISC_OUTPUT_W 0x03C2
#define GREG_FEATURE_CONTROL_R 0x03CA
#define GREG_FEATURE_CONTROL_W 0x03DA
#define GREG_INPUT_STATUS0_R 0x03C2
#define GREG_INPUT_STATUS1_R 0x03DA
/* Setup Registers: */
#define SREG_OPTION_SELECT 0x0102
#define SREG_VIDEO_SUBS_ENABLE 0x03C3 /* Trio64: 0x46E8 */
/* Attribute Controller: */
#define ACT_ADDRESS 0x03C0
#define ACT_ADDRESS_R 0x03C1
#define ACT_ADDRESS_W 0x03C0
#define ACT_ADDRESS_RESET 0x03DA
#define ACT_ID_PALETTE0 0x00
#define ACT_ID_PALETTE1 0x01
#define ACT_ID_PALETTE2 0x02
#define ACT_ID_PALETTE3 0x03
#define ACT_ID_PALETTE4 0x04
#define ACT_ID_PALETTE5 0x05
#define ACT_ID_PALETTE6 0x06
#define ACT_ID_PALETTE7 0x07
#define ACT_ID_PALETTE8 0x08
#define ACT_ID_PALETTE9 0x09
#define ACT_ID_PALETTE10 0x0A
#define ACT_ID_PALETTE11 0x0B
#define ACT_ID_PALETTE12 0x0C
#define ACT_ID_PALETTE13 0x0D
#define ACT_ID_PALETTE14 0x0E
#define ACT_ID_PALETTE15 0x0F
#define ACT_ID_ATTR_MODE_CNTL 0x10
#define ACT_ID_OVERSCAN_COLOR 0x11
#define ACT_ID_COLOR_PLANE_ENA 0x12
#define ACT_ID_HOR_PEL_PANNING 0x13
#define ACT_ID_COLOR_SELECT 0x14 /* ACT_ID_PIXEL_PADDING */
/* Graphics Controller: */
#define GCT_ADDRESS 0x03CE
#define GCT_ADDRESS_R 0x03CF
#define GCT_ADDRESS_W 0x03CF
#define GCT_ID_SET_RESET 0x00
#define GCT_ID_ENABLE_SET_RESET 0x01
#define GCT_ID_COLOR_COMPARE 0x02
#define GCT_ID_DATA_ROTATE 0x03
#define GCT_ID_READ_MAP_SELECT 0x04
#define GCT_ID_GRAPHICS_MODE 0x05
#define GCT_ID_MISC 0x06
#define GCT_ID_COLOR_XCARE 0x07
#define GCT_ID_BITMASK 0x08
/* Sequencer: */
#define SEQ_ADDRESS 0x03C4
#define SEQ_ADDRESS_R 0x03C5
#define SEQ_ADDRESS_W 0x03C5
#define SEQ_ID_RESET 0x00
#define SEQ_ID_CLOCKING_MODE 0x01
#define SEQ_ID_MAP_MASK 0x02
#define SEQ_ID_CHAR_MAP_SELECT 0x03
#define SEQ_ID_MEMORY_MODE 0x04
#define SEQ_ID_UNKNOWN1 0x05
#define SEQ_ID_UNKNOWN2 0x06
#define SEQ_ID_UNKNOWN3 0x07
/* S3 extensions */
#define SEQ_ID_UNLOCK_EXT 0x08
#define SEQ_ID_MMIO_SELECT 0x09 /* Trio64: SEQ_ID_EXT_SEQ_REG9 */
#define SEQ_ID_BUS_REQ_CNTL 0x0A
#define SEQ_ID_EXT_MISC_SEQ 0x0B
#define SEQ_ID_UNKNOWN4 0x0C
#define SEQ_ID_EXT_SEQ 0x0D
#define SEQ_ID_UNKNOWN5 0x0E
#define SEQ_ID_UNKNOWN6 0x0F
#define SEQ_ID_MCLK_LO 0x10
#define SEQ_ID_MCLK_HI 0x11
#define SEQ_ID_DCLK_LO 0x12
#define SEQ_ID_DCLK_HI 0x13
#define SEQ_ID_CLKSYN_CNTL_1 0x14
#define SEQ_ID_CLKSYN_CNTL_2 0x15
#define SEQ_ID_CLKSYN_TEST_HI 0x16 /* reserved for S3 testing of the */
#define SEQ_ID_CLKSYN_TEST_LO 0x17 /* internal clock synthesizer */
#define SEQ_ID_RAMDAC_CNTL 0x18
#define SEQ_ID_MORE_MAGIC 0x1A /* not available on the Virge */
#define SEQ_ID_SIGNAL_SELECT 0x1C
/* CRT Controller: */
#define CRT_ADDRESS 0x03D4
#define CRT_ADDRESS_R 0x03D5
#define CRT_ADDRESS_W 0x03D5
#define CRT_ID_HOR_TOTAL 0x00
#define CRT_ID_HOR_DISP_ENA_END 0x01
#define CRT_ID_START_HOR_BLANK 0x02
#define CRT_ID_END_HOR_BLANK 0x03
#define CRT_ID_START_HOR_RETR 0x04
#define CRT_ID_END_HOR_RETR 0x05
#define CRT_ID_VER_TOTAL 0x06
#define CRT_ID_OVERFLOW 0x07
#define CRT_ID_PRESET_ROW_SCAN 0x08
#define CRT_ID_MAX_SCAN_LINE 0x09
#define CRT_ID_CURSOR_START 0x0A
#define CRT_ID_CURSOR_END 0x0B
#define CRT_ID_START_ADDR_HIGH 0x0C
#define CRT_ID_START_ADDR_LOW 0x0D
#define CRT_ID_CURSOR_LOC_HIGH 0x0E
#define CRT_ID_CURSOR_LOC_LOW 0x0F
#define CRT_ID_START_VER_RETR 0x10
#define CRT_ID_END_VER_RETR 0x11
#define CRT_ID_VER_DISP_ENA_END 0x12
#define CRT_ID_SCREEN_OFFSET 0x13
#define CRT_ID_UNDERLINE_LOC 0x14
#define CRT_ID_START_VER_BLANK 0x15
#define CRT_ID_END_VER_BLANK 0x16
#define CRT_ID_MODE_CONTROL 0x17
#define CRT_ID_LINE_COMPARE 0x18
#define CRT_ID_GD_LATCH_RBACK 0x22
#define CRT_ID_ACT_TOGGLE_RBACK 0x24
#define CRT_ID_ACT_INDEX_RBACK 0x26
/* S3 extensions: S3 VGA Registers */
#define CRT_ID_DEVICE_HIGH 0x2D
#define CRT_ID_DEVICE_LOW 0x2E
#define CRT_ID_REVISION 0x2F
#define CRT_ID_CHIP_ID_REV 0x30
#define CRT_ID_MEMORY_CONF 0x31
#define CRT_ID_BACKWAD_COMP_1 0x32
#define CRT_ID_BACKWAD_COMP_2 0x33
#define CRT_ID_BACKWAD_COMP_3 0x34
#define CRT_ID_REGISTER_LOCK 0x35
#define CRT_ID_CONFIG_1 0x36
#define CRT_ID_CONFIG_2 0x37
#define CRT_ID_REGISTER_LOCK_1 0x38
#define CRT_ID_REGISTER_LOCK_2 0x39
#define CRT_ID_MISC_1 0x3A
#define CRT_ID_DISPLAY_FIFO 0x3B
#define CRT_ID_LACE_RETR_START 0x3C
/* S3 extensions: System Control Registers */
#define CRT_ID_SYSTEM_CONFIG 0x40
#define CRT_ID_BIOS_FLAG 0x41
#define CRT_ID_LACE_CONTROL 0x42
#define CRT_ID_EXT_MODE 0x43
#define CRT_ID_HWGC_MODE 0x45 /* HWGC = Hardware Graphics Cursor */
#define CRT_ID_HWGC_ORIGIN_X_HI 0x46
#define CRT_ID_HWGC_ORIGIN_X_LO 0x47
#define CRT_ID_HWGC_ORIGIN_Y_HI 0x48
#define CRT_ID_HWGC_ORIGIN_Y_LO 0x49
#define CRT_ID_HWGC_FG_STACK 0x4A
#define CRT_ID_HWGC_BG_STACK 0x4B
#define CRT_ID_HWGC_START_AD_HI 0x4C
#define CRT_ID_HWGC_START_AD_LO 0x4D
#define CRT_ID_HWGC_DSTART_X 0x4E
#define CRT_ID_HWGC_DSTART_Y 0x4F
/* S3 extensions: System Extension Registers */
#define CRT_ID_EXT_SYS_CNTL_1 0x50
#define CRT_ID_EXT_SYS_CNTL_2 0x51
#define CRT_ID_EXT_BIOS_FLAG_1 0x52
#define CRT_ID_EXT_MEM_CNTL_1 0x53
#define CRT_ID_EXT_MEM_CNTL_2 0x54
#define CRT_ID_EXT_DAC_CNTL 0x55
#define CRT_ID_EX_SYNC_1 0x56
#define CRT_ID_EX_SYNC_2 0x57
#define CRT_ID_LAW_CNTL 0x58 /* LAW = Linear Address Window */
#define CRT_ID_LAW_POS_HI 0x59
#define CRT_ID_LAW_POS_LO 0x5A
#define CRT_ID_GOUT_PORT 0x5C
#define CRT_ID_EXT_HOR_OVF 0x5D
#define CRT_ID_EXT_VER_OVF 0x5E
#define CRT_ID_EXT_MEM_CNTL_3 0x60
#define CRT_ID_EXT_MEM_CNTL_4 0x61 /* only available on the Virge */
#define CRT_ID_EX_SYNC_3 0x63 /* not available on the Virge */
#define CRT_ID_EXT_MISC_CNTL 0x65
#define CRT_ID_EXT_MISC_CNTL_1 0x66
#define CRT_ID_EXT_MISC_CNTL_2 0x67
#define CRT_ID_CONFIG_3 0x68
#define CRT_ID_EXT_SYS_CNTL_3 0x69
#define CRT_ID_EXT_SYS_CNTL_4 0x6A
#define CRT_ID_EXT_BIOS_FLAG_3 0x6B
#define CRT_ID_EXT_BIOS_FLAG_4 0x6C
#define CRT_ID_EXT_BIOS_FLAG_5 0x6D /* only available on the Virge */
#define CRT_ID_RAMDAC_SIG_TEST 0x6E /* only available on the Virge */
#define CRT_ID_CONFIG_4 0x6F /* only available on the Virge */
/* Streams Processor */
#define SP_PRIMARY_CONTROL 0x8180
#define SP_COLOR_CHROMA_KEY_CONTROL 0x8184
#define SP_SECONDARY_CONTROL 0x8190
#define SP_CHROMA_KEY_UPPER_BOUND 0x8194
#define SP_SECONDARY_CONSTANTS 0x8198
#define SP_BLEND_CONTROL 0x81A0
#define SP_PRIMARY_ADDRESS_0 0x81C0
#define SP_PRIMARY_ADDRESS_1 0x81C4
#define SP_PRIMARY_STRIDE 0x81C8
#define SP_DOUBLE_BUFFER_LPB_SUPPORT 0x81CC
#define SP_SECONDARY_ADDRESS_0 0x81D0
#define SP_SECONDARY_ADDRESS_1 0x81D4
#define SP_SECONDARY_STRIDE 0x81D8
#define SP_OPAQUE_OVERLAY_CONTROL 0x81DC
#define SP_K1_VERTICAL_SCALE_FACTOR 0x81E0
#define SP_K2_VERTICAL_SCALE_FACTOR 0x81E4
#define SP_DDA_VERTICAL_ACCUMULATOR 0x81E8
#define SP_FIFO_CONTROL 0x81EC
#define SP_PRIMARY_WINDOW_TOP_LEFT 0x81F0
#define SP_PRIMARY_WINDOW_SIZE 0x81F4
#define SP_SECONDARY_WINDOW_TOP_LEFT 0x81F8
#define SP_SECONDARY_WINDOW_SIZE 0x81FC
/* Memory Port Controller */
#define MPC_FIFO_CONTROL 0x8200
#define MPC_MIU_CONTROL 0x8204
#define MPC_STREAMS_TIMEOUT 0x8208
#define MPC_MISC_TIMEOUT 0x820C
#define MPC_DMA_READ_BASE_ADDRESS 0x8220
#define MPC_DMA_READ_STRIDE_WIDTH 0x8224
/* Miscellaneous Registers */
#define MR_SUBSYSTEM_STATUS_CNTL 0x8504
#define MR_ADVANCED_FUNCTION_CONTROL 0x850C
/* S3d Engine */
#define S3D_BIT_BLT_RECT_FILL 0xA400
#define S3D_LINE_2D 0xA800
#define S3D_POLYGON_2D 0xAC00
#define S3D_LINE_3D 0xB000
#define S3D_TRIANGLE_3D 0xB400
#define BLT_ADDRESS 0xA4D4
#define BLT_SOURCE_ADDRESS 0xA4D4
#define BLT_DEST_ADDRESS 0xA4D8
#define BLT_CLIP_LEFT_RIGHT 0xA4DC
#define BLT_CLIP_LEFT BLT_CLIP_LEFT_RIGHT
#define BLT_CLIP_RIGHT 0xA4DE
#define BLT_CLIP_TOP_BOTTOM 0xA4E0
#define BLT_CLIP_BOTTOM BLT_CLIP_TOP_BOTTOM
#define BLT_CLIP_TOP 0xA4E2
#define BLT_DEST_SOURCE_PITCH 0xA4E4
#define BLT_SOURCE_PITCH BLT_DEST_SOURCE_PITCH
#define BLT_DEST_PITCH 0xA4E6
#define BLT_MONO_PATTERN 0xA4E8
#define BLT_MONO_PATTERN_0 BLT_MONO_PATTERN
#define BLT_MONO_PATTERN_1 0xA4EC
#define BLT_PATTERN_BG_COLOR 0xA4F0
#define BLT_PATTERN_BG_COLOR_TRUE_COLOR BLT_PATTERN_BG_COLOR
#define BLT_PATTERN_BG_COLOR_ALPHA BLT_PATTERN_BG_COLOR
#define BLT_PATTERN_BG_COLOR_RED 0xA4F1
#define BLT_PATTERN_BG_COLOR_HI_COLOR 0xA4F2
#define BLT_PATTERN_BG_COLOR_GREEN BLT_PATTERN_BG_COLOR_HI_COLOR
#define BLT_PATTERN_BG_COLOR_INDEX 0xA4F3
#define BLT_PATTERN_BG_COLOR_BLUE BLT_PATTERN_BG_COLOR_INDEX
#define BLT_PATTERN_FG_COLOR 0xA4F4
#define BLT_PATTERN_FG_COLOR_TRUE_COLOR BLT_PATTERN_FG_COLOR
#define BLT_PATTERN_FG_COLOR_ALPHA BLT_PATTERN_FG_COLOR
#define BLT_PATTERN_FG_COLOR_RED 0xA4F5
#define BLT_PATTERN_FG_COLOR_HI_COLOR 0xA4F6
#define BLT_PATTERN_FG_COLOR_GREEN BLT_PATTERN_FG_COLOR_HI_COLOR
#define BLT_PATTERN_FG_COLOR_INDEX 0xA4F7
#define BLT_PATTERN_FG_COLOR_BLUE BLT_PATTERN_FG_COLOR_INDEX
#define BLT_SOURCE_BG_COLOR 0xA4F8
#define BLT_SOURCE_BG_COLOR_TRUE_COLOR BLT_SOURCE_BG_COLOR
#define BLT_SOURCE_BG_COLOR_ALPHA BLT_SOURCE_BG_COLOR
#define BLT_SOURCE_BG_COLOR_RED 0xA4F9
#define BLT_SOURCE_BG_COLOR_HI_COLOR 0xA4FA
#define BLT_SOURCE_BG_COLOR_GREEN BLT_SOURCE_BG_COLOR_HI_COLOR
#define BLT_SOURCE_BG_COLOR_INDEX 0xA4FB
#define BLT_SOURCE_BG_COLOR_BLUE BLT_SOURCE_BG_COLOR_INDEX
#define BLT_SOURCE_FG_COLOR 0xA4FC
#define BLT_SOURCE_FG_COLOR_TRUE_COLOR BLT_SOURCE_FG_COLOR
#define BLT_SOURCE_FG_COLOR_ALPHA BLT_SOURCE_FG_COLOR
#define BLT_SOURCE_FG_COLOR_RED 0xA4FD
#define BLT_SOURCE_FG_COLOR_HI_COLOR 0xA4FE
#define BLT_SOURCE_FG_COLOR_GREEN BLT_SOURCE_FG_COLOR_HI_COLOR
#define BLT_SOURCE_FG_COLOR_INDEX 0xA4FF
#define BLT_SOURCE_FG_COLOR_BLUE BLT_SOURCE_FG_COLOR_INDEX
#define BLT_COMMAND_SET 0xA500
#define BLT_WIDTH_HEIGHT 0xA504
#define BLT_HEIGHT BLT_WIDTH_HEIGHT
#define BLT_WIDTH 0xA506
#define BLT_SOURCE_XY 0xA508
#define BLT_SOURCE_Y BLT_SOURCE_XY
#define BLT_SOURCE_X 0xA50A
#define BLT_DESTINATION_XY 0xA50C
#define BLT_DESTINATION_Y BLT_DESTINATION_XY
#define BLT_DESTINATION_X 0xA50E
#define L2D_ADDRESS 0xA8D4
#define L2D_SOURCE_ADDRESS 0xA8D4
#define L2D_DEST_ADDRESS 0xA8D8
#define L2D_CLIP_LEFT_RIGHT 0xA8DC
#define L2D_CLIP_LEFT L2D_CLIP_LEFT_RIGHT
#define L2D_CLIP_RIGHT 0xA8DE
#define L2D_CLIP_TOP_BOTTOM 0xA8E0
#define L2D_CLIP_BOTTOM L2D_CLIP_TOP_BOTTOM
#define L2D_CLIP_TOP 0xA8E2
#define L2D_DEST_SOURCE_PITCH 0xA8E4
#define L2D_SOURCE_PITCH L2D_DEST_SOURCE_PITCH
#define L2D_DEST_PITCH 0xA8E6
#define L2D_PAD_0 0xA8E8
#define L2D_PATTERN_FG_COLOR_TRUE_COLOR 0xA8F4
#define L2D_PATTERN_FG_COLOR_ALPHA L2D_PATTERN_FG_COLOR_TRUECOLOR
#define L2D_PATTERN_FG_COLOR_RED 0xA8F5
#define L2D_PATTERN_FG_COLOR_HI_COLOR 0xA8F6
#define L2D_PATTERN_FG_COLOR_GREEN L2D_PATTERN_FG_COLOR_HICOLOR
#define L2D_PATTERN_FG_COLOR_INDEX 0xA8F7
#define L2D_PATTERN_FG_COLOR_BLUE L2D_PATTERN_FG_COLOR_INDEX
#define L2D_PAD_1 0xA8F8
#define L2D_COMMAND_SET 0xA900
#define L2D_PAD_2 0xA904
#define L2D_END_0_END_1 0xA96C
#define L2D_END_1 L2D_END_0_END_1
#define L2D_END_0 0xA96E
#define L2D_DX 0xA970
#define L2D_X_START 0xA974
#define L2D_Y_START 0xA978
#define L2D_Y_COUNT 0xA97C
#define P2D_ADDRESS 0xACD4
#define P2D_SOURCE_ADDRESS 0xACD4
#define P2D_DEST_ADDRESS 0xACD8
#define P2D_CLIP_LEFT_RIGHT 0xACDC
#define P2D_CLIP_LEFT P2D_CLIP_LEFT_RIGHT
#define P2D_CLIP_RIGHT 0xACDE
#define P2D_CLIP_TOP_BOTTOM 0xACE0
#define P2D_CLIP_BOTTOM P2D_CLIP_TOP_BOTTOM
#define P2D_CLIP_TOP 0xACE2
#define P2D_DEST_SOURCE_PITCH 0xACE4
#define P2D_SOURCE_PITCH P2D_DEST_SOURCE_PITCH
#define P2D_DEST_PITCH 0xACE6
#define P2D_MONO_PATTERN 0xACE8
#define P2D_PATTERN_BG_COLOR_TRUE_COLOR 0xACF0
#define P2D_PATTERN_BG_COLOR_ALPHA P2D_PATTERN_BG_COLOR_TRUE_COLOR
#define P2D_PATTERN_BG_COLOR_RED 0xACF1
#define P2D_PATTERN_BG_COLOR_HI_COLOR 0xACF2
#define P2D_PATTERN_BG_COLOR_GREEN P2D_PATTERN_BG_COLOR_HI_COLOR
#define P2D_PATTERN_BG_COLOR_INDEX 0xACF3
#define P2D_PATTERN_BG_COLOR_BLUE P2D_PATTERN_BG_COLOR_INDEX
#define P2D_PATTERN_FG_COLOR_TRUE_COLOR 0xACF4
#define P2D_PATTERN_FG_COLOR_ALPHA P2D_PATTERN_FG_COLOR_TRUE_COLOR
#define P2D_PATTERN_FG_COLOR_RED 0xACF5
#define P2D_PATTERN_FG_COLOR_HI_COLOR 0xACF6
#define P2D_PATTERN_FG_COLOR_GREEN P2D_PATTERN_FG_COLOR_HI_COLOR
#define P2D_PATTERN_FG_COLOR_INDEX 0xACF7
#define P2D_PATTERN_FG_COLOR_BLUE P2D_PATTERN_FG_COLOR_INDEX
#define P2D_PAD_1 0xACF8
#define P2D_COMMAND_SET 0xAD00
#define P2D_PAD_2 0xAD04
#define P2D_RIGHT_DX 0xAD68
#define P2D_RIGHT_X_START 0xAD6C
#define P2D_LEFT_DX 0xAD70
#define P2D_LEFT_X_START 0xAD74
#define P2D_Y_START 0xAD78
#define P2D_Y_COUNT 0xAD7C
#define CMD_NOP (7 << 27) /* %1111 << 27 */
#define CMD_LINE (3 << 27) /* %0011 << 27 */
#define CMD_RECT (4 << 27) /* %0010 << 27 */
#define CMD_POLYGON (5 << 27) /* %0101 << 27 */
#define CMD_BITBLT (0 << 27) /* %0000 << 27 */
#define CMD_SKIP_TRANSFER_BYTES_1 (1 << 12) /* %01 << 12 */
#define CMD_SKIP_TRANSFER_BYTES_2 (2 << 12) /* %10 << 12 */
#define CMD_SKIP_TRANSFER_BYTES_3 (3 << 12) /* %11 << 12 */
#define CMD_TRANSFER_ALIGNMENT_BYTE (0 << 10) /* %00 << 10 */
#define CMD_TRANSFER_ALIGNMENT_WORD (1 << 10) /* %01 << 10 */
#define CMD_TRANSFER_ALIGNMENT_DOUBLEWORD (2 << 10) /* %10 << 10 */
#define CMD_CHUNKY (0 << 2) /* %00 << 2 */
#define CMD_HI_COLOR (1 << 2) /* %01 << 2 */
#define CMD_TRUE_COLOR (2 << 2) /* %10 << 2 */
#define ROP_FALSE 0x00
#define ROP_NOR 0x10
#define ROP_ONLYDST 0x20
#define ROP_NOTSRC 0x30
#define ROP_ONLYSRC 0x40
#define ROP_NOTDST 0x50
#define ROP_EOR 0x60
#define ROP_NAND 0x70
#define ROP_AND 0x80
#define ROP_NEOR 0x90
#define ROP_DST 0xA0
#define ROP_NOTONLYSRC 0xB0
#define ROP_SRC 0xC0
#define ROP_NOTONLYDST 0xD0
#define ROP_OR 0xE0
#define ROP_TRUE 0xF0
/* Pass-through */
#if 0 /* XXX */
#define PASS_ADDRESS 0x
#define PASS_ADDRESS_W 0x
#endif
/* Video DAC */
#define VDAC_ADDRESS 0x03C8
#define VDAC_ADDRESS_W 0x03C8
#define VDAC_ADDRESS_R 0x03C7
#define VDAC_STATE 0x03C7
#define VDAC_DATA 0x03C9
#define VDAC_MASK 0x03C6
#define WGfx(ba, idx, val) \
do { vgaw(ba, GCT_ADDRESS, idx); vgaw(ba, GCT_ADDRESS_W , val); } while (0)
#define WSeq(ba, idx, val) \
do { vgaw(ba, SEQ_ADDRESS, idx); vgaw(ba, SEQ_ADDRESS_W , val); } while (0)
#define WCrt(ba, idx, val) \
do { vgaw(ba, CRT_ADDRESS, idx); vgaw(ba, CRT_ADDRESS_W , val); } while (0)
#define WAttr(ba, idx, val) \
do { \
unsigned char tmp;\
tmp = vgar(ba, ACT_ADDRESS_RESET);\
__USE(tmp);\
vgaw(ba, ACT_ADDRESS_W, idx);\
vgaw(ba, ACT_ADDRESS_W, val);\
} while (0)
#define SetTextPlane(ba, m) \
do { \
WGfx(ba, GCT_ID_READ_MAP_SELECT, m & 3 );\
WSeq(ba, SEQ_ID_MAP_MASK, (1 << (m & 3)));\
} while (0)
/* Gfx engine busy wait */
static inline void
GfxBusyWait (volatile void *ba)
{
int test;
do {
test = vgar32(ba, MR_SUBSYSTEM_STATUS_CNTL);
__asm volatile ("nop");
} while (!(test & (1 << 13)));
}
static inline void
GfxFifoWait(volatile void *ba)
{
#if 0 /* XXX */
int test;
do {
test = vgar32(ba, MR_SUBSYSTEM_STATUS_CNTL);
} while (test & 0x0f);
#endif
}
/* Special wakeup/passthrough registers on graphics boards
*
* The methods have diverged a bit for each board, so
* WPass(P) has been converted into a set of specific
* inline functions.
*/
static inline unsigned char
RAttr(volatile void *ba, short idx)
{
vgaw(ba, ACT_ADDRESS_W, idx);
delay(0);
return vgar(ba, ACT_ADDRESS_R);
}
static inline unsigned char
RSeq(volatile void *ba, short idx)
{
vgaw(ba, SEQ_ADDRESS, idx);
return vgar(ba, SEQ_ADDRESS_R);
}
static inline unsigned char
RCrt(volatile void *ba, short idx)
{
vgaw(ba, CRT_ADDRESS, idx);
return vgar(ba, CRT_ADDRESS_R);
}
static inline unsigned char
RGfx(volatile void *ba, short idx)
{
vgaw(ba, GCT_ADDRESS, idx);
return vgar(ba, GCT_ADDRESS_R);
}
#endif /* _GRF_CV3DREG_H */
|