summaryrefslogtreecommitdiffstats
path: root/sys/dev/tga/tga_pci.h
blob: 26991310449333df6719a47bdada2654e95b964a (plain)
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_ */
OpenPOWER on IntegriCloud