Match drm 0.0.7 interface changes
[nouveau] / src / nv_type.h
1 /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h,v 1.51 2005/04/16 23:57:26 mvojkovi Exp $ */
2
3 #ifndef __NV_STRUCT_H__
4 #define __NV_STRUCT_H__
5
6 #include "colormapst.h"
7 #include "vgaHW.h"
8 #include "xaa.h"
9 #include "xf86Cursor.h"
10 #include "xf86int10.h"
11 #include "exa.h"
12 #ifdef XF86DRI
13 #define _XF86DRI_SERVER_
14 #include "xf86drm.h"
15 #include "dri.h"
16 #include <stdint.h>
17 #include "nouveau_drm.h"
18 #else
19 #error "This driver requires a DRI-enabled X server"
20 #endif
21
22 #define NV_ARCH_03  0x03
23 #define NV_ARCH_04  0x04
24 #define NV_ARCH_10  0x10
25 #define NV_ARCH_20  0x20
26 #define NV_ARCH_30  0x30
27 #define NV_ARCH_40  0x40
28
29 #define CHIPSET_NV03     0x0010
30 #define CHIPSET_NV04     0x0020
31 #define CHIPSET_NV10     0x0100
32 #define CHIPSET_NV11     0x0110
33 #define CHIPSET_NV15     0x0150
34 #define CHIPSET_NV17     0x0170
35 #define CHIPSET_NV18     0x0180
36 #define CHIPSET_NFORCE   0x01A0
37 #define CHIPSET_NFORCE2  0x01F0
38 #define CHIPSET_NV20     0x0200
39 #define CHIPSET_NV25     0x0250
40 #define CHIPSET_NV28     0x0280
41 #define CHIPSET_NV30     0x0300
42 #define CHIPSET_NV31     0x0310
43 #define CHIPSET_NV34     0x0320
44 #define CHIPSET_NV35     0x0330
45 #define CHIPSET_NV36     0x0340
46 #define CHIPSET_NV40     0x0040
47 #define CHIPSET_NV41     0x00C0
48 #define CHIPSET_NV43     0x0140
49 #define CHIPSET_NV44     0x0160
50 #define CHIPSET_NV44A    0x0220
51 #define CHIPSET_NV45     0x0210
52 #define CHIPSET_MISC_BRIDGED  0x00F0
53 #define CHIPSET_G70      0x0090
54 #define CHIPSET_G71      0x0290
55 #define CHIPSET_G72      0x01D0
56 #define CHIPSET_G73      0x0390
57 // integrated GeForces (6100, 6150)
58 #define CHIPSET_C51      0x0240
59 // variant of C51, seems based on a G70 design
60 #define CHIPSET_C512     0x03D0
61 #define CHIPSET_G73_BRIDGED 0x02E0
62
63
64 #define BITMASK(t,b) (((unsigned)(1U << (((t)-(b)+1)))-1)  << (b))
65 #define MASKEXPAND(mask) BITMASK(1?mask,0?mask)
66 #define SetBF(mask,value) ((value) << (0?mask))
67 #define GetBF(var,mask) (((unsigned)((var) & MASKEXPAND(mask))) >> (0?mask) )
68 #define SetBitField(value,from,to) SetBF(to, GetBF(value,from))
69 #define SetBit(n) (1<<(n))
70 #define Set8Bits(value) ((value)&0xff)
71
72 typedef struct {
73     int bitsPerPixel;
74     int depth;
75     int displayWidth;
76     rgb weight;
77     DisplayModePtr mode;
78 } NVFBLayout;
79
80 typedef struct _riva_hw_state
81 {
82     CARD32 bpp;
83     CARD32 width;
84     CARD32 height;
85     CARD32 interlace;
86     CARD32 repaint0;
87     CARD32 repaint1;
88     CARD32 screen;
89     CARD32 scale;
90     CARD32 dither;
91     CARD32 extra;
92     CARD32 fifo;
93     CARD32 pixel;
94     CARD32 horiz;
95     CARD32 arbitration0;
96     CARD32 arbitration1;
97     CARD32 pll;
98     CARD32 pllB;
99     CARD32 vpll;
100     CARD32 vpll2;
101     CARD32 vpllB;
102     CARD32 vpll2B;
103     CARD32 pllsel;
104     CARD32 general;
105     CARD32 crtcOwner;
106     CARD32 head;
107     CARD32 head2;
108     CARD32 config;
109     CARD32 cursorConfig;
110     CARD32 cursor0;
111     CARD32 cursor1;
112     CARD32 cursor2;
113     CARD32 timingH;
114     CARD32 timingV;
115     CARD32 displayV;
116     CARD32 crtcSync;
117 } RIVA_HW_STATE, *NVRegPtr;
118
119 typedef struct {
120         int type;
121         uint64_t size;
122         uint64_t offset;
123         void *map;
124 } NVAllocRec;
125
126 typedef struct _NVRec *NVPtr;
127 typedef struct _NVRec {
128     RIVA_HW_STATE       SavedReg;
129     RIVA_HW_STATE       ModeReg;
130     RIVA_HW_STATE       *CurrentState;
131     CARD32              Architecture;
132     EntityInfoPtr       pEnt;
133     pciVideoPtr         PciInfo;
134     PCITAG              PciTag;
135     int                 Chipset;
136     int                 ChipRev;
137     Bool                Primary;
138     CARD32              IOAddress;
139
140     /* VRAM physical address */
141     unsigned long       VRAMPhysical;
142     /* Size of VRAM BAR */
143     unsigned long       VRAMPhysicalSize;
144     /* Accesible VRAM size (by the GPU) */
145     unsigned long       VRAMSize;
146     /* AGP physical address */
147     unsigned long       AGPPhysical;
148     /* Accesible AGP size */
149     unsigned long       AGPSize;
150
151     NVAllocRec *        FB;
152     NVAllocRec *        Cursor;
153     NVAllocRec *        ScratchBuffer;
154     NVAllocRec *        AGPScratch;
155     Bool                NoAccel;
156     Bool                HWCursor;
157     Bool                FpScale;
158     Bool                ShadowFB;
159     unsigned char *     ShadowPtr;
160     int                 ShadowPitch;
161     CARD32              MinVClockFreqKHz;
162     CARD32              MaxVClockFreqKHz;
163     CARD32              CrystalFreqKHz;
164     CARD32              RamAmountKBytes;
165     int drm_fd;
166
167     volatile CARD32 *REGS;
168     volatile CARD32 *PCRTC0;
169     volatile CARD32 *PCRTC1;
170
171     volatile CARD32 *PRAMDAC0;
172     volatile CARD32 *PRAMDAC1;
173     volatile CARD32 *PFB;
174     volatile CARD32 *PFIFO;
175     volatile CARD32 *PGRAPH;
176     volatile CARD32 *PEXTDEV;
177     volatile CARD32 *PTIMER;
178     volatile CARD32 *PVIDEO;
179     volatile CARD32 *PMC;
180     volatile CARD32 *PRAMIN;
181     volatile CARD32 *FIFO;
182     volatile CARD32 *CURSOR;
183     volatile CARD8 *PCIO0;
184     volatile CARD8 *PCIO1;
185     volatile CARD8 *PVIO;
186     volatile CARD8 *PDIO0;
187     volatile CARD8 *PDIO1;
188     volatile CARD8 *PROM;
189
190
191     volatile CARD32 *RAMHT;
192     CARD32 pramin_free;
193
194     uint8_t cur_head;
195     XAAInfoRecPtr       AccelInfoRec;
196     ExaDriverPtr        EXADriverPtr;
197     Bool                useEXA;
198     xf86CursorInfoPtr   CursorInfoRec;
199     void                (*PointerMoved)(int index, int x, int y);
200     ScreenBlockHandlerProcPtr BlockHandler;
201     CloseScreenProcPtr  CloseScreen;
202     int                 Rotate;
203     NVFBLayout          CurrentLayout;
204     /* Cursor */
205     CARD32              curFg, curBg;
206     CARD32              curImage[256];
207     /* I2C / DDC */
208     I2CBusPtr           I2C;
209     xf86Int10InfoPtr    pInt;
210     void                (*VideoTimerCallback)(ScrnInfoPtr, Time);
211     void                (*DMAKickoffCallback)(NVPtr pNv);
212     XF86VideoAdaptorPtr overlayAdaptor;
213     XF86VideoAdaptorPtr blitAdaptor;
214     int                 videoKey;
215     int                 FlatPanel;
216     Bool                FPDither;
217     Bool                Television;
218     int                 CRTCnumber;
219         int         vtOWNER;
220     OptionInfoPtr       Options;
221     Bool                alphaCursor;
222     unsigned char       DDCBase;
223     Bool                twoHeads;
224     Bool                twoStagePLL;
225     Bool                fpScaler;
226     int                 fpWidth;
227     int                 fpHeight;
228     CARD32              fpSyncs;
229     Bool                usePanelTweak;
230     int                 PanelTweak;
231     Bool                LVDS;
232
233     int                 IRQ;
234     Bool                LockedUp;
235
236     volatile void *     NotifierBlock;
237     drm_nouveau_notifier_alloc_t *Notifier0;
238
239     drm_nouveau_fifo_alloc_t fifo;
240     CARD32              dmaPut;
241     CARD32              dmaCurrent;
242     CARD32              dmaFree;
243     CARD32              dmaMax;
244     CARD32              *dmaBase;
245
246     Bool                use3D;
247     void                (*Reset3D)(NVPtr pNv);
248     void                (*InitEXA3D)(NVPtr pNv);
249
250     CARD32              currentRop;
251     int                 M2MFDirection;
252
253     Bool                WaitVSyncPossible;
254     Bool                BlendingPossible;
255     Bool                RandRRotation;
256     DRIInfoPtr          pDRIInfo;
257     drmVersionPtr       pLibDRMVersion;
258     drmVersionPtr       pKernelDRMVersion;
259 } NVRec;
260
261 #define NVPTR(p) ((NVPtr)((p)->driverPrivate))
262
263 #define nvReadRAMDAC0(pNv, reg) nvReadRAMDAC(pNv, 0, reg)
264 #define nvWriteRAMDAC0(pNv, reg, val) nvWriteRAMDAC(pNv, 0, reg, val)
265
266 #define nvReadCurRAMDAC(pNv, reg) nvReadRAMDAC(pNv, pNv->cur_head, reg)
267 #define nvWriteCurRAMDAC(pNv, reg, val) nvWriteRAMDAC(pNv, pNv->cur_head, reg, val)
268
269 #define nvReadCRTC0(pNv, reg) nvReadCRTC(pNv, 0, reg)
270 #define nvWriteCRTC0(pNv, reg, val) nvWriteCRTC(pNv, 0, reg, val)
271
272 #define nvReadCurCRTC(pNv, reg) nvReadCRTC(pNv, pNv->cur_head, reg)
273 #define nvWriteCurCRTC(pNv, reg, val) nvWriteCRTC(pNv, pNv->cur_head, reg, val)
274
275 #define nvReadFB(pNv, fb_reg) MMIO_IN32(pNv->PFB, fb_reg)
276 #define nvWriteFB(pNv, fb_reg, val) MMIO_OUT32(pNv->PFB, fb_reg, val)
277
278 #define nvReadGRAPH(pNv, reg) MMIO_IN32(pNv->PGRAPH, reg)
279 #define nvWriteGRAPH(pNv, reg, val) MMIO_OUT32(pNv->PGRAPH, reg, val)
280
281 #define nvReadMC(pNv, reg) MMIO_IN32(pNv->PMC, reg)
282 #define nvWriteMC(pNv, reg, val) MMIO_OUT32(pNv->PMC, reg, val)
283
284 #define nvReadEXTDEV(pNv, reg) MMIO_IN32(pNv->PEXTDEV, reg)
285 #define nvWriteEXTDEV(pNv, reg, val) MMIO_OUT32(pNv->PEXTDEV, reg, val)
286
287 #define nvReadTIMER(pNv, reg) MMIO_IN32(pNv->PTIMER, reg)
288 #define nvWriteTIMER(pNv, reg, val) MMIO_OUT32(pNv->PTIMER, reg, val)
289
290 #define nvReadVIDEO(pNv, reg) MMIO_IN32(pNv->PVIDEO, reg)
291 #define nvWriteVIDEO(pNv, reg, val) MMIO_OUT32(pNv->PVIDEO, reg, val)
292
293 #endif /* __NV_STRUCT_H__ */