Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
video
riva
riva_hw.h
Go to the documentation of this file.
1
/***************************************************************************\
2
|* *|
3
|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
4
|* *|
5
|* NOTICE TO USER: The source code is copyrighted under U.S. and *|
6
|* international laws. Users and possessors of this source code are *|
7
|* hereby granted a nonexclusive, royalty-free copyright license to *|
8
|* use this code in individual and commercial software. *|
9
|* *|
10
|* Any use of this source code must include, in the user documenta- *|
11
|* tion and internal comments to the code, notices to the end user *|
12
|* as follows: *|
13
|* *|
14
|* Copyright 1993-1999 NVIDIA, Corporation. All rights reserved. *|
15
|* *|
16
|* NVIDIA, CORPORATION MAKES NO REPRESENTATION ABOUT THE SUITABILITY *|
17
|* OF THIS SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" *|
18
|* WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND. NVIDIA, CORPOR- *|
19
|* ATION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOURCE CODE, *|
20
|* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGE- *|
21
|* MENT, AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL *|
22
|* NVIDIA, CORPORATION BE LIABLE FOR ANY SPECIAL, INDIRECT, INCI- *|
23
|* DENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RE- *|
24
|* SULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION *|
25
|* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *|
26
|* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOURCE CODE. *|
27
|* *|
28
|* U.S. Government End Users. This source code is a "commercial *|
29
|* item," as that term is defined at 48 C.F.R. 2.101 (OCT 1995), *|
30
|* consisting of "commercial computer software" and "commercial *|
31
|* computer software documentation," as such terms are used in *|
32
|* 48 C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Govern- *|
33
|* ment only as a commercial end item. Consistent with 48 C.F.R. *|
34
|* 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), *|
35
|* all U.S. Government End Users acquire the source code with only *|
36
|* those rights set forth herein. *|
37
|* *|
38
\***************************************************************************/
39
40
/*
41
* GPL licensing note -- nVidia is allowing a liberal interpretation of
42
* the documentation restriction above, to merely say that this nVidia's
43
* copyright and disclaimer should be included with all code derived
44
* from this source. -- Jeff Garzik <
[email protected]
>, 01/Nov/99
45
*/
46
47
/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/riva_hw.h,v 1.21 2002/10/14 18:22:46 mvojkovi Exp $ */
48
#ifndef __RIVA_HW_H__
49
#define __RIVA_HW_H__
50
#define RIVA_SW_VERSION 0x00010003
51
52
#ifndef Bool
53
typedef
int
Bool
;
54
#endif
55
56
#ifndef TRUE
57
#define TRUE 1
58
#endif
59
#ifndef FALSE
60
#define FALSE 0
61
#endif
62
#ifndef NULL
63
#define NULL 0
64
#endif
65
66
/*
67
* Typedefs to force certain sized values.
68
*/
69
typedef
unsigned
char
U008
;
70
typedef
unsigned
short
U016
;
71
typedef
unsigned
int
U032
;
72
73
/*
74
* HW access macros.
75
*/
76
#include <asm/io.h>
77
78
#define NV_WR08(p,i,d) (__raw_writeb((d), (void __iomem *)(p) + (i)))
79
#define NV_RD08(p,i) (__raw_readb((void __iomem *)(p) + (i)))
80
#define NV_WR16(p,i,d) (__raw_writew((d), (void __iomem *)(p) + (i)))
81
#define NV_RD16(p,i) (__raw_readw((void __iomem *)(p) + (i)))
82
#define NV_WR32(p,i,d) (__raw_writel((d), (void __iomem *)(p) + (i)))
83
#define NV_RD32(p,i) (__raw_readl((void __iomem *)(p) + (i)))
84
85
#define VGA_WR08(p,i,d) (writeb((d), (void __iomem *)(p) + (i)))
86
#define VGA_RD08(p,i) (readb((void __iomem *)(p) + (i)))
87
88
/*
89
* Define different architectures.
90
*/
91
#define NV_ARCH_03 0x03
92
#define NV_ARCH_04 0x04
93
#define NV_ARCH_10 0x10
94
#define NV_ARCH_20 0x20
95
#define NV_ARCH_30 0x30
96
#define NV_ARCH_40 0x40
97
98
/***************************************************************************\
99
* *
100
* FIFO registers. *
101
* *
102
\***************************************************************************/
103
104
/*
105
* Raster OPeration. Windows style ROP3.
106
*/
107
typedef
volatile
struct
108
{
109
U032
reserved00[4];
110
#ifdef __BIG_ENDIAN
111
U032
FifoFree;
112
#else
113
U016
FifoFree
;
114
U016
Nop
;
115
#endif
116
U032
reserved01[0x0BB];
117
U032
Rop3
;
118
}
RivaRop
;
119
/*
120
* 8X8 Monochrome pattern.
121
*/
122
typedef
volatile
struct
123
{
124
U032
reserved00[4];
125
#ifdef __BIG_ENDIAN
126
U032
FifoFree;
127
#else
128
U016
FifoFree
;
129
U016
Nop
;
130
#endif
131
U032
reserved01[0x0BD];
132
U032
Shape
;
133
U032
reserved03[0x001];
134
U032
Color0
;
135
U032
Color1
;
136
U032
Monochrome[2];
137
}
RivaPattern
;
138
/*
139
* Scissor clip rectangle.
140
*/
141
typedef
volatile
struct
142
{
143
U032
reserved00[4];
144
#ifdef __BIG_ENDIAN
145
U032
FifoFree;
146
#else
147
U016
FifoFree
;
148
U016
Nop
;
149
#endif
150
U032
reserved01[0x0BB];
151
U032
TopLeft
;
152
U032
WidthHeight
;
153
}
RivaClip
;
154
/*
155
* 2D filled rectangle.
156
*/
157
typedef
volatile
struct
158
{
159
U032
reserved00[4];
160
#ifdef __BIG_ENDIAN
161
U032
FifoFree;
162
#else
163
U016
FifoFree
;
164
U016
Nop[1];
165
#endif
166
U032
reserved01[0x0BC];
167
U032
Color
;
168
U032
reserved03[0x03E];
169
U032
TopLeft
;
170
U032
WidthHeight
;
171
}
RivaRectangle
;
172
/*
173
* 2D screen-screen BLT.
174
*/
175
typedef
volatile
struct
176
{
177
U032
reserved00[4];
178
#ifdef __BIG_ENDIAN
179
U032
FifoFree;
180
#else
181
U016
FifoFree
;
182
U016
Nop
;
183
#endif
184
U032
reserved01[0x0BB];
185
U032
TopLeftSrc
;
186
U032
TopLeftDst
;
187
U032
WidthHeight
;
188
}
RivaScreenBlt
;
189
/*
190
* 2D pixel BLT.
191
*/
192
typedef
volatile
struct
193
{
194
U032
reserved00[4];
195
#ifdef __BIG_ENDIAN
196
U032
FifoFree;
197
#else
198
U016
FifoFree
;
199
U016
Nop[1];
200
#endif
201
U032
reserved01[0x0BC];
202
U032
TopLeft
;
203
U032
WidthHeight
;
204
U032
WidthHeightIn
;
205
U032
reserved02[0x03C];
206
U032
Pixels
;
207
}
RivaPixmap
;
208
/*
209
* Filled rectangle combined with monochrome expand. Useful for glyphs.
210
*/
211
typedef
volatile
struct
212
{
213
U032
reserved00[4];
214
#ifdef __BIG_ENDIAN
215
U032
FifoFree;
216
#else
217
U016
FifoFree
;
218
U016
Nop
;
219
#endif
220
U032
reserved01[0x0BB];
221
U032
reserved03[(0x040)-1];
222
U032
Color1A
;
223
struct
224
{
225
U032
TopLeft
;
226
U032
WidthHeight
;
227
} UnclippedRectangle[64];
228
U032
reserved04[(0x080)-3];
229
struct
230
{
231
U032
TopLeft;
232
U032
BottomRight
;
233
} ClipB;
234
U032
Color1B
;
235
struct
236
{
237
U032
TopLeft;
238
U032
BottomRight;
239
} ClippedRectangle[64];
240
U032
reserved05[(0x080)-5];
241
struct
242
{
243
U032
TopLeft;
244
U032
BottomRight;
245
} ClipC;
246
U032
Color1C
;
247
U032
WidthHeightC
;
248
U032
PointC
;
249
U032
MonochromeData1C
;
250
U032
reserved06[(0x080)+121];
251
struct
252
{
253
U032
TopLeft;
254
U032
BottomRight;
255
} ClipD;
256
U032
Color1D
;
257
U032
WidthHeightInD
;
258
U032
WidthHeightOutD
;
259
U032
PointD
;
260
U032
MonochromeData1D
;
261
U032
reserved07[(0x080)+120];
262
struct
263
{
264
U032
TopLeft;
265
U032
BottomRight;
266
} ClipE;
267
U032
Color0E
;
268
U032
Color1E
;
269
U032
WidthHeightInE
;
270
U032
WidthHeightOutE
;
271
U032
PointE
;
272
U032
MonochromeData01E
;
273
}
RivaBitmap
;
274
/*
275
* 3D textured, Z buffered triangle.
276
*/
277
typedef
volatile
struct
278
{
279
U032
reserved00[4];
280
#ifdef __BIG_ENDIAN
281
U032
FifoFree;
282
#else
283
U016
FifoFree
;
284
U016
Nop
;
285
#endif
286
U032
reserved01[0x0BC];
287
U032
TextureOffset
;
288
U032
TextureFormat
;
289
U032
TextureFilter
;
290
U032
FogColor
;
291
/* This is a problem on LynxOS */
292
#ifdef Control
293
#undef Control
294
#endif
295
U032
Control
;
296
U032
AlphaTest
;
297
U032
reserved02[0x339];
298
U032
FogAndIndex
;
299
U032
Color
;
300
float
ScreenX
;
301
float
ScreenY
;
302
float
ScreenZ
;
303
float
EyeM
;
304
float
TextureS
;
305
float
TextureT
;
306
}
RivaTexturedTriangle03
;
307
typedef
volatile
struct
308
{
309
U032
reserved00[4];
310
#ifdef __BIG_ENDIAN
311
U032
FifoFree;
312
#else
313
U016
FifoFree
;
314
U016
Nop
;
315
#endif
316
U032
reserved01[0x0BB];
317
U032
ColorKey
;
318
U032
TextureOffset
;
319
U032
TextureFormat
;
320
U032
TextureFilter
;
321
U032
Blend
;
322
/* This is a problem on LynxOS */
323
#ifdef Control
324
#undef Control
325
#endif
326
U032
Control
;
327
U032
FogColor
;
328
U032
reserved02[0x39];
329
struct
330
{
331
float
ScreenX
;
332
float
ScreenY
;
333
float
ScreenZ
;
334
float
EyeM
;
335
U032
Color
;
336
U032
Specular
;
337
float
TextureS
;
338
float
TextureT
;
339
} Vertex[16];
340
U032
DrawTriangle3D
;
341
}
RivaTexturedTriangle05
;
342
/*
343
* 2D line.
344
*/
345
typedef
volatile
struct
346
{
347
U032
reserved00[4];
348
#ifdef __BIG_ENDIAN
349
U032
FifoFree;
350
#else
351
U016
FifoFree
;
352
U016
Nop[1];
353
#endif
354
U032
reserved01[0x0BC];
355
U032
Color
;
/* source color 0304-0307*/
356
U032
Reserved02[0x03e];
357
struct
{
/* start aliased methods in array 0400- */
358
U032
point0
;
/* y_x S16_S16 in pixels 0- 3*/
359
U032
point1
;
/* y_x S16_S16 in pixels 4- 7*/
360
} Lin[16];
/* end of aliased methods in array -047f*/
361
struct
{
/* start aliased methods in array 0480- */
362
U032
point0X
;
/* in pixels, 0 at left 0- 3*/
363
U032
point0Y
;
/* in pixels, 0 at top 4- 7*/
364
U032
point1X
;
/* in pixels, 0 at left 8- b*/
365
U032
point1Y
;
/* in pixels, 0 at top c- f*/
366
} Lin32[8];
/* end of aliased methods in array -04ff*/
367
U032
PolyLin[32];
/* y_x S16_S16 in pixels 0500-057f*/
368
struct
{
/* start aliased methods in array 0580- */
369
U032
x
;
/* in pixels, 0 at left 0- 3*/
370
U032
y
;
/* in pixels, 0 at top 4- 7*/
371
} PolyLin32[16];
/* end of aliased methods in array -05ff*/
372
struct
{
/* start aliased methods in array 0600- */
373
U032
color
;
/* source color 0- 3*/
374
U032
point
;
/* y_x S16_S16 in pixels 4- 7*/
375
} ColorPolyLin[16];
/* end of aliased methods in array -067f*/
376
}
RivaLine
;
377
/*
378
* 2D/3D surfaces
379
*/
380
typedef
volatile
struct
381
{
382
U032
reserved00[4];
383
#ifdef __BIG_ENDIAN
384
U032
FifoFree;
385
#else
386
U016
FifoFree
;
387
U016
Nop
;
388
#endif
389
U032
reserved01[0x0BE];
390
U032
Offset
;
391
}
RivaSurface
;
392
typedef
volatile
struct
393
{
394
U032
reserved00[4];
395
#ifdef __BIG_ENDIAN
396
U032
FifoFree;
397
#else
398
U016
FifoFree
;
399
U016
Nop
;
400
#endif
401
U032
reserved01[0x0BD];
402
U032
Pitch
;
403
U032
RenderBufferOffset
;
404
U032
ZBufferOffset
;
405
}
RivaSurface3D
;
406
407
/***************************************************************************\
408
* *
409
* Virtualized RIVA H/W interface. *
410
* *
411
\***************************************************************************/
412
413
#define FP_ENABLE 1
414
#define FP_DITHER 2
415
416
struct
_riva_hw_inst
;
417
struct
_riva_hw_state
;
418
/*
419
* Virtialized chip interface. Makes RIVA 128 and TNT look alike.
420
*/
421
typedef
struct
_riva_hw_inst
422
{
423
/*
424
* Chip specific settings.
425
*/
426
U032
Architecture
;
427
U032
Version
;
428
U032
Chipset
;
429
U032
CrystalFreqKHz
;
430
U032
RamAmountKBytes
;
431
U032
MaxVClockFreqKHz
;
432
U032
RamBandwidthKBytesPerSec
;
433
U032
EnableIRQ
;
434
U032
IO
;
435
U032
VBlankBit
;
436
U032
FifoFreeCount
;
437
U032
FifoEmptyCount
;
438
U032
CursorStart
;
439
U032
flatPanel
;
440
Bool
twoHeads
;
441
/*
442
* Non-FIFO registers.
443
*/
444
volatile
U032
__iomem
*
PCRTC0
;
445
volatile
U032
__iomem
*
PCRTC
;
446
volatile
U032
__iomem
*
PRAMDAC0
;
447
volatile
U032
__iomem
*
PFB
;
448
volatile
U032
__iomem
*
PFIFO
;
449
volatile
U032
__iomem
*
PGRAPH
;
450
volatile
U032
__iomem
*
PEXTDEV
;
451
volatile
U032
__iomem
*
PTIMER
;
452
volatile
U032
__iomem
*
PMC
;
453
volatile
U032
__iomem
*
PRAMIN
;
454
volatile
U032
__iomem
*
FIFO
;
455
volatile
U032
__iomem
*
CURSOR
;
456
volatile
U008
__iomem
*
PCIO0
;
457
volatile
U008
__iomem
*
PCIO
;
458
volatile
U008
__iomem
*
PVIO
;
459
volatile
U008
__iomem
*
PDIO0
;
460
volatile
U008
__iomem
*
PDIO
;
461
volatile
U032
__iomem
*
PRAMDAC
;
462
/*
463
* Common chip functions.
464
*/
465
int
(*
Busy
)(
struct
_riva_hw_inst
*);
466
void
(*
LoadStateExt
)(
struct
_riva_hw_inst
*,
struct
_riva_hw_state
*);
467
void
(*
UnloadStateExt
)(
struct
_riva_hw_inst
*,
struct
_riva_hw_state
*);
468
void
(*
SetStartAddress
)(
struct
_riva_hw_inst
*,
U032
);
469
void
(*
SetSurfaces2D
)(
struct
_riva_hw_inst
*,
U032
,
U032
);
470
void
(*
SetSurfaces3D
)(
struct
_riva_hw_inst
*,
U032
,
U032
);
471
int
(*
ShowHideCursor
)(
struct
_riva_hw_inst
*,
int
);
472
void
(*
LockUnlock
)(
struct
_riva_hw_inst
*,
int
);
473
/*
474
* Current extended mode settings.
475
*/
476
struct
_riva_hw_state
*
CurrentState
;
477
/*
478
* FIFO registers.
479
*/
480
RivaRop
__iomem
*
Rop
;
481
RivaPattern
__iomem
*
Patt
;
482
RivaClip
__iomem
*
Clip
;
483
RivaPixmap
__iomem
*
Pixmap
;
484
RivaScreenBlt
__iomem
*
Blt
;
485
RivaBitmap
__iomem
*
Bitmap
;
486
RivaLine
__iomem
*
Line
;
487
RivaTexturedTriangle03
__iomem
*
Tri03
;
488
RivaTexturedTriangle05
__iomem
*
Tri05
;
489
}
RIVA_HW_INST
;
490
/*
491
* Extended mode state information.
492
*/
493
typedef
struct
_riva_hw_state
494
{
495
U032
bpp
;
496
U032
width
;
497
U032
height
;
498
U032
interlace
;
499
U032
repaint0
;
500
U032
repaint1
;
501
U032
screen
;
502
U032
scale
;
503
U032
dither
;
504
U032
extra
;
505
U032
pixel
;
506
U032
horiz
;
507
U032
arbitration0
;
508
U032
arbitration1
;
509
U032
vpll
;
510
U032
vpll2
;
511
U032
pllsel
;
512
U032
general
;
513
U032
crtcOwner
;
514
U032
head
;
515
U032
head2
;
516
U032
config
;
517
U032
cursorConfig
;
518
U032
cursor0
;
519
U032
cursor1
;
520
U032
cursor2
;
521
U032
offset0
;
522
U032
offset1
;
523
U032
offset2
;
524
U032
offset3
;
525
U032
pitch0
;
526
U032
pitch1
;
527
U032
pitch2
;
528
U032
pitch3
;
529
}
RIVA_HW_STATE
;
530
531
/*
532
* function prototypes
533
*/
534
535
extern
int
CalcStateExt
536
(
537
RIVA_HW_INST
*
chip
,
538
RIVA_HW_STATE
*
state
,
539
int
bpp
,
540
int
width
,
541
int
hDisplaySize,
542
int
height
,
543
int
dotClock
544
);
545
546
/*
547
* External routines.
548
*/
549
int
RivaGetConfig
(
RIVA_HW_INST
*,
unsigned
int
);
550
/*
551
* FIFO Free Count. Should attempt to yield processor if RIVA is busy.
552
*/
553
554
#define RIVA_FIFO_FREE(hwinst,hwptr,cnt) \
555
{ \
556
while ((hwinst).FifoFreeCount < (cnt)) { \
557
mb();mb(); \
558
(hwinst).FifoFreeCount = NV_RD32(&(hwinst).hwptr->FifoFree, 0) >> 2; \
559
} \
560
(hwinst).FifoFreeCount -= (cnt); \
561
}
562
#endif
/* __RIVA_HW_H__ */
563
Generated on Thu Jan 10 2013 14:41:34 for Linux Kernel by
1.8.2