1 /* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/nv/nv_type.h,v 1.51 2005/04/16 23:57:26 mvojkovi Exp $ */
3 #ifndef __NV_STRUCT_H__
4 #define __NV_STRUCT_H__
6 #include "colormapst.h"
9 #include "xf86Cursor.h"
10 #include "xf86int10.h"
13 #define _XF86DRI_SERVER_
17 #include "nouveau_drm.h"
22 #error "This driver requires a DRI-enabled X server"
25 #include "nv50_type.h"
26 #include "nv_pcicompat.h"
28 #define NV_ARCH_03 0x03
29 #define NV_ARCH_04 0x04
30 #define NV_ARCH_10 0x10
31 #define NV_ARCH_20 0x20
32 #define NV_ARCH_30 0x30
33 #define NV_ARCH_40 0x40
34 #define NV_ARCH_50 0x50
36 #define CHIPSET_NV03 0x0010
37 #define CHIPSET_NV04 0x0020
38 #define CHIPSET_NV10 0x0100
39 #define CHIPSET_NV11 0x0110
40 #define CHIPSET_NV15 0x0150
41 #define CHIPSET_NV17 0x0170
42 #define CHIPSET_NV18 0x0180
43 #define CHIPSET_NFORCE 0x01A0
44 #define CHIPSET_NFORCE2 0x01F0
45 #define CHIPSET_NV20 0x0200
46 #define CHIPSET_NV25 0x0250
47 #define CHIPSET_NV28 0x0280
48 #define CHIPSET_NV30 0x0300
49 #define CHIPSET_NV31 0x0310
50 #define CHIPSET_NV34 0x0320
51 #define CHIPSET_NV35 0x0330
52 #define CHIPSET_NV36 0x0340
53 #define CHIPSET_NV40 0x0040
54 #define CHIPSET_NV41 0x00C0
55 #define CHIPSET_NV43 0x0140
56 #define CHIPSET_NV44 0x0160
57 #define CHIPSET_NV44A 0x0220
58 #define CHIPSET_NV45 0x0210
59 #define CHIPSET_NV50 0x0190
60 #define CHIPSET_NV84 0x0400
61 #define CHIPSET_MISC_BRIDGED 0x00F0
62 #define CHIPSET_G70 0x0090
63 #define CHIPSET_G71 0x0290
64 #define CHIPSET_G72 0x01D0
65 #define CHIPSET_G73 0x0390
66 // integrated GeForces (6100, 6150)
67 #define CHIPSET_C51 0x0240
68 // variant of C51, seems based on a G70 design
69 #define CHIPSET_C512 0x03D0
70 #define CHIPSET_G73_BRIDGED 0x02E0
73 #define BITMASK(t,b) (((unsigned)(1U << (((t)-(b)+1)))-1) << (b))
74 #define MASKEXPAND(mask) BITMASK(1?mask,0?mask)
75 #define SetBF(mask,value) ((value) << (0?mask))
76 #define GetBF(var,mask) (((unsigned)((var) & MASKEXPAND(mask))) >> (0?mask) )
77 #define SetBitField(value,from,to) SetBF(to, GetBF(value,from))
78 #define SetBit(n) (1<<(n))
79 #define Set8Bits(value) ((value)&0xff)
82 #define NV_I2C_BUSES 3
83 #define NV40_NUM_DCB_ENTRIES 10
102 typedef struct _nv_crtc_reg
104 unsigned char MiscOutReg; /* */
109 unsigned char DAC[768]; /* Internal Colorlookuptable */
115 } NVCrtcRegRec, *NVCrtcRegPtr;
117 typedef struct _nv_output_reg
129 CARD32 fp_horiz_regs[7];
130 CARD32 fp_vert_regs[7];
131 CARD32 fp_hvalid_start;
132 CARD32 fp_hvalid_end;
133 CARD32 fp_vvalid_start;
134 CARD32 fp_vvalid_end;
136 } NVOutputRegRec, *NVOutputRegPtr;
138 typedef struct _riva_hw_state
176 NVCrtcRegRec crtc_reg[2];
177 NVOutputRegRec dac_reg[2];
178 } RIVA_HW_STATE, *NVRegPtr;
180 typedef struct _nv50_crtc_reg
183 } NV50CrtcRegRec, *NV50CrtcRegPtr;
185 typedef struct _nv50_hw_state
187 NV50CrtcRegRec crtc_reg[2];
188 } NV50_HW_STATE, *NV50RegPtr;
197 typedef struct _NVOutputPrivateRec {
205 } NVOutputPrivateRec, *NVOutputPrivatePtr;
207 #define NVOutputPrivate(o) ((NVOutputPrivatePtr (o)->driver_private)
209 typedef struct _NVRec *NVPtr;
210 typedef struct _NVRec {
211 RIVA_HW_STATE SavedReg;
212 RIVA_HW_STATE ModeReg;
213 RIVA_HW_STATE *CurrentState;
214 NV50_HW_STATE NV50SavedReg;
215 NV50_HW_STATE NV50ModeReg;
218 #ifndef XSERVER_LIBPCIACCESS
222 struct pci_device *PciInfo;
223 #endif /* XSERVER_LIBPCIACCESS */
230 /* VRAM physical address */
231 unsigned long VRAMPhysical;
232 /* Size of VRAM BAR */
233 unsigned long VRAMPhysicalSize;
234 /* Accesible VRAM size (by the GPU) */
235 unsigned long VRAMSize;
236 /* AGP physical address */
237 unsigned long AGPPhysical;
238 /* Accessible AGP size */
239 unsigned long AGPSize;
240 /* PCI buffer virtual address */
241 unsigned long SGPhysical;
246 NVAllocRec * CLUT; /* NV50 only */
247 NVAllocRec * ScratchBuffer;
248 NVAllocRec * GARTScratch;
253 unsigned char * ShadowPtr;
255 CARD32 MinVClockFreqKHz;
256 CARD32 MaxVClockFreqKHz;
257 CARD32 CrystalFreqKHz;
258 CARD32 RamAmountKBytes;
261 volatile CARD32 *REGS;
262 volatile CARD32 *PCRTC0;
263 volatile CARD32 *PCRTC1;
265 volatile CARD32 *NV50_PCRTC;
267 volatile CARD32 *PRAMDAC0;
268 volatile CARD32 *PRAMDAC1;
269 volatile CARD32 *PFB;
270 volatile CARD32 *PFIFO;
271 volatile CARD32 *PGRAPH;
272 volatile CARD32 *PEXTDEV;
273 volatile CARD32 *PTIMER;
274 volatile CARD32 *PVIDEO;
275 volatile CARD32 *PMC;
276 volatile CARD32 *PRAMIN;
277 volatile CARD32 *FIFO;
278 volatile CARD32 *CURSOR;
279 volatile CARD8 *PCIO0;
280 volatile CARD8 *PCIO1;
281 volatile CARD8 *PVIO;
282 volatile CARD8 *PDIO0;
283 volatile CARD8 *PDIO1;
284 volatile CARD8 *PROM;
287 volatile CARD32 *RAMHT;
290 unsigned int SaveGeneration;
292 ExaDriverPtr EXADriverPtr;
293 xf86CursorInfoPtr CursorInfoRec;
294 void (*PointerMoved)(int index, int x, int y);
295 ScreenBlockHandlerProcPtr BlockHandler;
296 CloseScreenProcPtr CloseScreen;
298 NVFBLayout CurrentLayout;
301 CARD32 curImage[256];
304 xf86Int10InfoPtr pInt10;
306 void (*VideoTimerCallback)(ScrnInfoPtr, Time);
307 void (*DMAKickoffCallback)(NVPtr pNv);
308 XF86VideoAdaptorPtr overlayAdaptor;
309 XF86VideoAdaptorPtr blitAdaptor;
317 OptionInfoPtr Options;
319 unsigned char DDCBase;
332 volatile void * NotifierBlock;
333 struct drm_nouveau_notifierobj_alloc *Notifier0;
335 struct drm_nouveau_channel_alloc fifo;
345 Bool WaitVSyncPossible;
346 Bool BlendingPossible;
349 drmVersionPtr pLibDRMVersion;
350 drmVersionPtr pKernelDRMVersion;
353 CreateScreenResourcesProcPtr CreateScreenResources;
355 /* we know about 3 i2c buses */
356 I2CBusPtr pI2CBus[3];
361 CARD32 dcb_table[NV40_NUM_DCB_ENTRIES]; /* 10 is a good limit */
362 Bool crosswired_tmds;
363 Bool ramdac_occupied[2];
364 int crtc_associated[2];
376 typedef struct _NVCrtcPrivateRec {
380 } NVCrtcPrivateRec, *NVCrtcPrivatePtr;
382 typedef struct _NV50CrtcPrivRec {
384 int pclk; /* Target pixel clock in kHz */
388 } NV50CrtcPrivRec, *NV50CrtcPrivPtr;
390 #define NVCrtcPrivate(c) ((NVCrtcPrivatePtr)(c)->driver_private)
392 #define NVPTR(p) ((NVPtr)((p)->driverPrivate))
394 #define nvReadRAMDAC0(pNv, reg) nvReadRAMDAC(pNv, 0, reg)
395 #define nvWriteRAMDAC0(pNv, reg, val) nvWriteRAMDAC(pNv, 0, reg, val)
397 #define nvReadCurRAMDAC(pNv, reg) nvReadRAMDAC(pNv, pNv->cur_head, reg)
398 #define nvWriteCurRAMDAC(pNv, reg, val) nvWriteRAMDAC(pNv, pNv->cur_head, reg, val)
400 #define nvReadCRTC0(pNv, reg) nvReadCRTC(pNv, 0, reg)
401 #define nvWriteCRTC0(pNv, reg, val) nvWriteCRTC(pNv, 0, reg, val)
403 #define nvReadCurCRTC(pNv, reg) nvReadCRTC(pNv, pNv->cur_head, reg)
404 #define nvWriteCurCRTC(pNv, reg, val) nvWriteCRTC(pNv, pNv->cur_head, reg, val)
406 #define nvReadFB(pNv, fb_reg) MMIO_IN32(pNv->PFB, fb_reg)
407 #define nvWriteFB(pNv, fb_reg, val) MMIO_OUT32(pNv->PFB, fb_reg, val)
409 #define nvReadGRAPH(pNv, reg) MMIO_IN32(pNv->PGRAPH, reg)
410 #define nvWriteGRAPH(pNv, reg, val) MMIO_OUT32(pNv->PGRAPH, reg, val)
412 #define nvReadMC(pNv, reg) MMIO_IN32(pNv->PMC, reg)
413 #define nvWriteMC(pNv, reg, val) MMIO_OUT32(pNv->PMC, reg, val)
415 #define nvReadEXTDEV(pNv, reg) MMIO_IN32(pNv->PEXTDEV, reg)
416 #define nvWriteEXTDEV(pNv, reg, val) MMIO_OUT32(pNv->PEXTDEV, reg, val)
418 #define nvReadTIMER(pNv, reg) MMIO_IN32(pNv->PTIMER, reg)
419 #define nvWriteTIMER(pNv, reg, val) MMIO_OUT32(pNv->PTIMER, reg, val)
421 #define nvReadVIDEO(pNv, reg) MMIO_IN32(pNv->PVIDEO, reg)
422 #define nvWriteVIDEO(pNv, reg, val) MMIO_OUT32(pNv->PVIDEO, reg, val)
424 #endif /* __NV_STRUCT_H__ */