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
|
/*-
* Copyright (c) 1995, 1996 Carnegie-Mellon University.
* All rights reserved.
*
* Author: Chris G. Demetriou
*
* Permission to use, copy, modify and distribute this software and
* its documentation is hereby granted, provided that both the copyright
* notice and this permission notice appear in all copies of the
* software, derivative works or modified versions, and any portions
* thereof, and that both notices appear in supporting documentation.
*
* CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
* CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
* FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
*
* Carnegie Mellon requests users of this software to return to
*
* Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
* School of Computer Science
* Carnegie Mellon University
* Pittsburgh PA 15213-3890
*
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
* Copyright (c) 2000 Andrew Miklic
*
* $FreeBSD$
*/
#ifndef _PCI_TGA_H_
#define _PCI_TGA_H_
/*
* Device-specific PCI register offsets and contents.
*/
#define TGA_PCIREG_PVRR 0x40 /* PCI Address Extension Register */
#define TGA_PCIREG_PAER 0x44 /* PCI VGA Redirect Register */
/*
* TGA Memory Space offsets
*/
#define TGA_MEM_ALTROM 0x0000000 /* 0MB -- Alternate ROM space */
#define TGA2_MEM_EXTDEV 0x0000000 /* 0MB -- External Device Access */
#define TGA_MEM_CREGS 0x0100000 /* 1MB -- Core Registers */
#define TGA_CREGS_SIZE 0x0100000 /* Core registers occupy 1MB */
#define TGA_CREGS_ALIAS 0x0000400 /* Register copies every 1kB */
#define TGA2_MEM_CLOCK 0x0060000 /* TGA2 Clock access */
#define TGA2_MEM_RAMDAC 0x0080000 /* TGA2 RAMDAC access */
/*
* TGA Core Space register numbers and contents.
*/
#define TGA_REG_GCBR0 0x000 /* Copy buffer 0 */
#define TGA_REG_GCBR1 0x001 /* Copy buffer 1 */
#define TGA_REG_GCBR2 0x002 /* Copy buffer 2 */
#define TGA_REG_GCBR3 0x003 /* Copy buffer 3 */
#define TGA_REG_GCBR4 0x004 /* Copy buffer 4 */
#define TGA_REG_GCBR5 0x005 /* Copy buffer 5 */
#define TGA_REG_GCBR6 0x006 /* Copy buffer 6 */
#define TGA_REG_GCBR7 0x007 /* Copy buffer 7 */
#define TGA_REG_GFGR 0x008 /* Foreground */
#define TGA_REG_GBGR 0x009 /* Background */
#define TGA_REG_GPMR 0x00a /* Plane Mask */
#define TGA_REG_GPXR_S 0x00b /* Pixel Mask (one-shot) */
#define TGA_REG_GMOR 0x00c /* Mode */
#define TGA_REG_GOPR 0x00d /* Raster Operation */
#define TGA_REG_GPSR 0x00e /* Pixel Shift */
#define TGA_REG_GADR 0x00f /* Address */
#define TGA_REG_GB1R 0x010 /* Bresenham 1 */
#define TGA_REG_GB2R 0x011 /* Bresenham 2 */
#define TGA_REG_GB3R 0x012 /* Bresenham 3 */
#define TGA_REG_GCTR 0x013 /* Continue */
#define TGA_REG_GDER 0x014 /* Deep */
#define TGA_REG_GREV 0x015 /* Start/Version on TGA,
* Revision on TGA2 */
#define TGA_REG_GSMR 0x016 /* Stencil Mode */
#define TGA_REG_GPXR_P 0x017 /* Pixel Mask (persistent) */
#define TGA_REG_CCBR 0x018 /* Cursor Base Address */
#define TGA_REG_VHCR 0x019 /* Horizontal Control */
#define TGA_REG_VVCR 0x01a /* Vertical Control */
#define TGA_REG_VVBR 0x01b /* Video Base Address */
#define TGA_REG_VVVR 0x01c /* Video Valid */
#define TGA_REG_CXYR 0x01d /* Cursor XY */
#define TGA_REG_VSAR 0x01e /* Video Shift Address */
#define TGA_REG_SISR 0x01f /* Interrupt Status */
#define TGA_REG_GDAR 0x020 /* Data */
#define TGA_REG_GRIR 0x021 /* Red Increment */
#define TGA_REG_GGIR 0x022 /* Green Increment */
#define TGA_REG_GBIR 0x023 /* Blue Increment */
#define TGA_REG_GZIR_L 0x024 /* Z-increment Low */
#define TGA_REG_GZIR_H 0x025 /* Z-Increment High */
#define TGA_REG_GDBR 0x026 /* DMA Base Address */
#define TGA_REG_GBWR 0x027 /* Bresenham Width */
#define TGA_REG_GZVR_L 0x028 /* Z-value Low */
#define TGA_REG_GZVR_H 0x029 /* Z-value High */
#define TGA_REG_GZBR 0x02a /* Z-base address */
/* GADR alias 0x02b */
#define TGA_REG_GRVR 0x02c /* Red Value */
#define TGA_REG_GGVR 0x02d /* Green Value */
#define TGA_REG_GBVR 0x02e /* Blue Value */
#define TGA_REG_GSWR 0x02f /* Span Width */
#define TGA_REG_EPSR 0x030 /* Pallete and DAC Setup */
/* reserved 0x031 - 0x3f */
#define TGA_REG_GSNR0 0x040 /* Slope-no-go 0 */
#define TGA_REG_GSNR1 0x041 /* Slope-no-go 1 */
#define TGA_REG_GSNR2 0x042 /* Slope-no-go 2 */
#define TGA_REG_GSNR3 0x043 /* Slope-no-go 3 */
#define TGA_REG_GSNR4 0x044 /* Slope-no-go 4 */
#define TGA_REG_GSNR5 0x045 /* Slope-no-go 5 */
#define TGA_REG_GSNR6 0x046 /* Slope-no-go 6 */
#define TGA_REG_GSNR7 0x047 /* Slope-no-go 7 */
#define TGA_REG_GSLR0 0x048 /* Slope 0 */
#define TGA_REG_GSLR1 0x049 /* Slope 1 */
#define TGA_REG_GSLR2 0x04a /* Slope 2 */
#define TGA_REG_GSLR3 0x04b /* Slope 3 */
#define TGA_REG_GSLR4 0x04c /* Slope 4 */
#define TGA_REG_GSLR5 0x04d /* Slope 5 */
#define TGA_REG_GSLR6 0x04e /* Slope 6 */
#define TGA_REG_GSLR7 0x04f /* Slope 7 */
#define TGA_REG_GBCR0 0x050 /* Block Color 0 */
#define TGA_REG_GBCR1 0x051 /* Block Color 1 */
#define TGA_REG_GBCR2 0x052 /* Block Color 2 */
#define TGA_REG_GBCR3 0x053 /* Block Color 3 */
#define TGA_REG_GBCR4 0x054 /* Block Color 4 */
#define TGA_REG_GBCR5 0x055 /* Block Color 5 */
#define TGA_REG_GBCR6 0x056 /* Block Color 6 */
#define TGA_REG_GBCR7 0x057 /* Block Color 7 */
#define TGA_REG_GCSR 0x058 /* Copy 64 Source */
#define TGA_REG_GCDR 0x059 /* Copy 64 Destination */
/* GC[SD]R aliases 0x05a - 0x05f */
/* reserved 0x060 - 0x077 */
#define TGA_REG_ERWR 0x078 /* EEPROM write */
/* reserved 0x079 */
#define TGA_REG_ECGR 0x07a /* Clock */
/* reserved 0x07b */
#define TGA_REG_EPDR 0x07c /* Pallete and DAC Data */
/* reserved 0x07d */
#define TGA_REG_SCSR 0x07e /* Command Status */
/* reserved 0x07f */
/*
* Deep register
*/
#define GDER_HSS 0x00010000 /* Horizontal sync select */
#define GDER_SDAC 0x00004000 /* Slow DAC */
#define GDER_RWE 0x00001000 /* ROM write enable */
#define GDER_SAMS 0x00000400 /* Serial-access memory size */
#define GDER_CS 0x00000200 /* Column size */
#define GDER_BLOCK_MASK 0x000001e0 /* eight/four column segments */
#define GDER_BLOCK_SHIFT 5
#define GDER_ADDR_MASK 0x0000001c /* PCI address mask */
#define GDER_ADDR_SHIFT 2
#define GDER_ADDR_4MB 0x00000000 /* PCI mask <24:22> = 4MB */
#define GDER_ADDR_8MB 0x00000001 /* PCI mask <24:23> = 8MB */
#define GDER_ADDR_16MB 0x00000003 /* PCI mask bit 24 = 16MB */
#define GDER_ADDR_32MB 0x00000007 /* No PCI masking = 32MB */
#define GDER_DEEP 0x00000001 /* 32-bpp or 8 bpp frame buffer */
/*
* Graphics mode register
*/
#define GMOR_CE 0x00008000 /* Cap ends */
#define GMOR_Z16 0x00004000 /* 16 or 24 bit Z valuesx */
#define GMOR_GE 0x00002000 /* Win32 or X environment */
#define GMOR_SBY_MASK 0x00001800 /* Source byte mask for 32-bpp FB */
#define GMOR_SBY_0 0x00000000 /* Source byte 0 */
#define GMOR_SBY_1 0x00000800 /* Source byte 1 */
#define GMOR_SBY_2 0x00001000 /* Source byte 2 */
#define GMOR_SBY_3 0x00001800 /* Source byte 3 */
#define GMOR_SBM_MASK 0x00000700 /* Source bitmap format (32-bpp FB) */
#define GMOR_SBM_8P 0x00000000 /* 8-bpp packed */
#define GMOR_SBM_8U 0x00000100 /* 8-bpp unpacked */
#define GMOR_SBM_12L 0x00000200 /* 12-bpp low */
#define GMOR_SBM_12H 0x00000600 /* 12-bpp high */
#define GMOR_SBM_24 0x00000300 /* 24-bpp */
#define GMOR_MODE_MASK 0x0000007f /* Graphics mode mask */
#define GMOR_MODE_SIMPLE 0x0000 /* Simple */
#define GMOR_MODE_SIMPLEZ 0x0010 /* Simple Z */
#define GMOR_MODE_OPQ_STPL 0x0001 /* Opaque Stipple */
#define GMOR_MODE_OPQ_FILL 0x0021 /* Opaque Fill */
#define GMOR_MODE_TRN_STPL 0x0005 /* Transparent Stipple */
#define GMOR_MODE_TRN_FILL 0x0025 /* Transparent Fill */
#define GMOR_MODE_BLK_STPL 0x000d /* Block Stipple */
#define GMOR_MODE_BLK_FILL 0x002d /* Block Fill */
#define GMOR_MODE_OPQ_LINE 0x0002 /* Opaque Line */
#define GMOR_MODE_TRN_LINE 0x0006 /* Transparent Line */
#define GMOR_MODE_CITNDL 0x000e /* Color-interpolated transparent */
/* non-dithered line */
#define GMOR_MODE_CITDL 0x002e /* Color-intrp. trans. dithered line */
#define GMOR_MODE_SITL 0x004e /* Sequential-intrp. transp line */
#define GMOR_MODE_ZOPQ_LINE 0x0012 /* Z buffered Opaque Line */
#define GMOR_MODE_ZTRN_LINE 0x0016 /* Z buffered Trans Line */
#define GMOR_MODE_ZOCITNDL 0x001a /* Z buffered Opaque CITND line */
#define GMOR_MODE_ZOCITDL 0x003a /* Z buffered Opaque CITD line */
#define GMOR_MODE_ZOSITL 0x005a /* Z buffered Opaque SIT line */
#define GMOR_MODE_ZTCITNDL 0x001e /* Z buffered transparent CITND line */
#define GMOR_MODE_ZTCITDL 0x003e /* Z buffered transparent CITD line */
#define GMOR_MODE_ZTSITL 0x005e /* Z buffered transparent SIT line */
#define GMOR_MODE_COPY 0x0007 /* Copy */
#define GMOR_MODE_DRDND 0x0017 /* DMA-read copy, non-dithered */
#define GMOR_MODE_DRDD 0x0037 /* DMA-read copy, dithered */
#define GMOR_MODE_DWCOPY 0x001f /* DMA-write copy */
/*
* Video Horizontal Control Register
*/
#define VHCR_ODD 0x80000000 /* Enable 4-pixel line skew */
#define VHCR_HSP 0x40000000 /* Horizontal sync polarity */
#define VHCR_BPORCH_MASK 0xfe00000 /* Back porch pixels / 4 */
#define VHCR_BPORCH_SHIFT 21
#define VHCR_HSYNC_MASK 0x001fc000 /* Hsync width / 4 */
#define VHCR_HSYNC_SHIFT 14
#define VHCR_FPORCH_MASK 0x3e00 /* Front porch pixels / 4 */
#define VHCR_FPORCH_SHIFT 9
#define VHCR_ACTIVE_MASK 0x01ff /* Active lines */
#define VHCR_REG2ACTIVE(reg) ((((reg) >> 19) & 0x0600) | ((reg) & 0x01ff))
#define VHCR_ACTIVE2REG(val) ((((val) & 0x0600) << 19) | ((val) & 0x01ff))
/*
* Video Vertical Control Register
*/
#define VVCR_SE 0x80000000 /* Stereo Enable */
#define VVCR_VSP 0x40000000 /* Vertical sync polarity */
#define VVCR_BPORCH_MASK 0xfc00000 /* Back porch in lines */
#define VVCR_BPORCH_SHIFT 22
#define VVCR_VSYNC_MASK 0x003f0000 /* Vsync width in lines */
#define VVCR_VSYNC_SHIFT 16
#define VVCR_FPORCH_MASK 0xf800 /* Front porch in lines */
#define VVCR_FPORCH_SHIFT 11
#define VVCR_ACTIVE_MASK 0x07ff /* Active lines */
/*
* Video Valid Register
*/
#define VVR_VIDEOVALID 0x00000001 /* 0 VGA, 1 TGA2 (TGA2 only) */
#define VVR_BLANK 0x00000002 /* 0 active, 1 blank */
#define VVR_CURSOR 0x00000004 /* 0 disable, 1 enable (TGA2 R/O) */
#define VVR_INTERLACE 0x00000008 /* 0 N/Int, 1 Int. (TGA2 R/O) */
#define VVR_DPMS_MASK 0x00000030 /* See "DMPS mask" below */
#define VVR_DPMS_SHIFT 4
#define VVR_DDC 0x00000040 /* DDC-in pin value (R/O) */
#define VVR_TILED 0x00000400 /* 0 linear, 1 tiled (not on TGA2) */
#define VVR_LDDLY_MASK 0x01ff0000 /* load delay in quad pixel clock ticks
(not on TGA2) */
#define VVR_LDDLY_SHIFT 16
/* TGA PCI register values */
#define DEC_VENDORID 0x1011
#define DEC_DEVICEID_TGA 0x0004
#define DEC_DEVICEID_TGA2 0x000D /* This is 0x000C in the documentation,
but probing yields 0x000D... */
#define TGA_TYPE_T8_01 0 /* 8bpp, 1MB */
#define TGA_TYPE_T8_02 1 /* 8bpp, 2MB */
#define TGA_TYPE_T8_22 2 /* 8bpp, 4MB */
#define TGA_TYPE_T8_44 3 /* 8bpp, 8MB */
#define TGA_TYPE_T32_04 4 /* 32bpp, 4MB */
#define TGA_TYPE_T32_08 5 /* 32bpp, 8MB */
#define TGA_TYPE_T32_88 6 /* 32bpp, 16MB */
#define TGA2_TYPE_3D30 7 /* 8bpp, 8MB */
#define TGA2_TYPE_4D20 8 /* 32bpp, 16MB */
#define TGA_TYPE_UNKNOWN 9 /* unknown */
/* Possible video modes for TGA2... */
#define TGA2_VGA_MODE 0
#define TGA2_2DA_MODE 1
/* TGA register access macros */
#define TGA_REG_SPACE_OFFSET 0x100000
#define BASIC_READ_TGA_REGISTER(adp, reg) \
*(u_int32_t *)((adp)->va_mem_base + \
(vm_offset_t)TGA_REG_SPACE_OFFSET + \
(((vm_offset_t)(reg) << 2L)))
#endif /* _PCI_TGA_H_ */
|