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"
8 #include "xf86Cursor.h"
12 #define _XF86DRI_SERVER_
16 #include "nouveau_drm.h"
21 #error "This driver requires a DRI-enabled X server"
24 #include "nv50_type.h"
25 #include "nv_pcicompat.h"
27 #define NV_ARCH_03 0x03
28 #define NV_ARCH_04 0x04
29 #define NV_ARCH_10 0x10
30 #define NV_ARCH_20 0x20
31 #define NV_ARCH_30 0x30
32 #define NV_ARCH_40 0x40
33 #define NV_ARCH_50 0x50
35 #define CHIPSET_NV03 0x0010
36 #define CHIPSET_NV04 0x0020
37 #define CHIPSET_NV10 0x0100
38 #define CHIPSET_NV11 0x0110
39 #define CHIPSET_NV15 0x0150
40 #define CHIPSET_NV17 0x0170
41 #define CHIPSET_NV18 0x0180
42 #define CHIPSET_NFORCE 0x01A0
43 #define CHIPSET_NFORCE2 0x01F0
44 #define CHIPSET_NV20 0x0200
45 #define CHIPSET_NV25 0x0250
46 #define CHIPSET_NV28 0x0280
47 #define CHIPSET_NV30 0x0300
48 #define CHIPSET_NV31 0x0310
49 #define CHIPSET_NV34 0x0320
50 #define CHIPSET_NV35 0x0330
51 #define CHIPSET_NV36 0x0340
52 #define CHIPSET_NV40 0x0040
53 #define CHIPSET_NV41 0x00C0
54 #define CHIPSET_NV43 0x0140
55 #define CHIPSET_NV44 0x0160
56 #define CHIPSET_NV44A 0x0220
57 #define CHIPSET_NV45 0x0210
58 #define CHIPSET_NV50 0x0190
59 #define CHIPSET_NV84 0x0400
60 #define CHIPSET_MISC_BRIDGED 0x00F0
61 #define CHIPSET_G70 0x0090
62 #define CHIPSET_G71 0x0290
63 #define CHIPSET_G72 0x01D0
64 #define CHIPSET_G73 0x0390
65 // integrated GeForces (6100, 6150)
66 #define CHIPSET_C51 0x0240
67 // variant of C51, seems based on a G70 design
68 #define CHIPSET_C512 0x03D0
69 #define CHIPSET_G73_BRIDGED 0x02E0
72 #define BITMASK(t,b) (((unsigned)(1U << (((t)-(b)+1)))-1) << (b))
73 #define MASKEXPAND(mask) BITMASK(1?mask,0?mask)
74 #define SetBF(mask,value) ((value) << (0?mask))
75 #define GetBF(var,mask) (((unsigned)((var) & MASKEXPAND(mask))) >> (0?mask) )
76 #define SetBitField(value,from,to) SetBF(to, GetBF(value,from))
77 #define SetBit(n) (1<<(n))
78 #define Set8Bits(value) ((value)&0xff)
81 #define MAX_NUM_DCB_ENTRIES 16
83 typedef enum /* matches DCB types */
100 typedef struct _nv_crtc_reg
102 unsigned char MiscOutReg; /* */
107 unsigned char DAC[768]; /* Internal Colorlookuptable */
116 } NVCrtcRegRec, *NVCrtcRegPtr;
118 typedef struct _nv_output_reg
135 CARD32 fp_horiz_regs[7];
136 CARD32 fp_vert_regs[7];
137 CARD32 fp_hvalid_start;
138 CARD32 fp_hvalid_end;
139 CARD32 fp_vvalid_start;
140 CARD32 fp_vvalid_end;
142 } NVOutputRegRec, *NVOutputRegPtr;
144 typedef struct _riva_hw_state
183 NVCrtcRegRec crtc_reg[2];
184 NVOutputRegRec dac_reg[2];
185 } RIVA_HW_STATE, *NVRegPtr;
187 typedef struct _nv50_crtc_reg
190 } NV50CrtcRegRec, *NV50CrtcRegPtr;
192 typedef struct _nv50_hw_state
194 NV50CrtcRegRec crtc_reg[2];
195 } NV50_HW_STATE, *NV50RegPtr;
209 typedef struct _NVOutputPrivateRec {
211 Bool ramdac_assigned;
212 uint8_t valid_ramdac;
218 DisplayModePtr native_mode;
220 } NVOutputPrivateRec, *NVOutputPrivatePtr;
222 typedef struct _MiscStartupInfo {
224 CARD32 ramdac_0_reg_580;
225 CARD32 ramdac_0_pllsel;
230 OUTPUT_0_SLAVED = (1 << 0),
231 OUTPUT_1_SLAVED = (1 << 1),
232 OUTPUT_0_LVDS = (1 << 2),
233 OUTPUT_1_LVDS = (1 << 3),
234 OUTPUT_0_CROSSWIRED_TMDS = (1 << 4),
235 OUTPUT_1_CROSSWIRED_TMDS = (1 << 5)
238 #define NVOutputPrivate(o) ((NVOutputPrivatePtr (o)->driver_private)
240 typedef struct _NVRec *NVPtr;
241 typedef struct _NVRec {
242 RIVA_HW_STATE SavedReg;
243 RIVA_HW_STATE ModeReg;
244 RIVA_HW_STATE *CurrentState;
245 NV50_HW_STATE NV50SavedReg;
246 NV50_HW_STATE NV50ModeReg;
249 #ifndef XSERVER_LIBPCIACCESS
253 struct pci_device *PciInfo;
254 #endif /* XSERVER_LIBPCIACCESS */
261 /* VRAM physical address */
262 unsigned long VRAMPhysical;
263 /* Size of VRAM BAR */
264 unsigned long VRAMPhysicalSize;
265 /* Accesible VRAM size (by the GPU) */
266 unsigned long VRAMSize;
267 /* AGP physical address */
268 unsigned long AGPPhysical;
269 /* Accessible AGP size */
270 unsigned long AGPSize;
271 /* PCI buffer virtual address */
272 unsigned long SGPhysical;
277 NVAllocRec * CLUT; /* NV50 only */
278 NVAllocRec * ScratchBuffer;
279 NVAllocRec * GARTScratch;
284 unsigned char * ShadowPtr;
286 CARD32 MinVClockFreqKHz;
287 CARD32 MaxVClockFreqKHz;
288 CARD32 CrystalFreqKHz;
289 CARD32 RamAmountKBytes;
292 volatile CARD32 *REGS;
293 volatile CARD32 *PCRTC0;
294 volatile CARD32 *PCRTC1;
296 volatile CARD32 *NV50_PCRTC;
298 volatile CARD32 *PRAMDAC0;
299 volatile CARD32 *PRAMDAC1;
300 volatile CARD32 *PFB;
301 volatile CARD32 *PFIFO;
302 volatile CARD32 *PGRAPH;
303 volatile CARD32 *PEXTDEV;
304 volatile CARD32 *PTIMER;
305 volatile CARD32 *PVIDEO;
306 volatile CARD32 *PMC;
307 volatile CARD32 *PRAMIN;
308 volatile CARD32 *FIFO;
309 volatile CARD32 *CURSOR;
310 volatile CARD8 *PCIO0;
311 volatile CARD8 *PCIO1;
312 volatile CARD8 *PVIO0;
313 volatile CARD8 *PVIO1;
314 volatile CARD8 *PDIO0;
315 volatile CARD8 *PDIO1;
316 volatile CARD8 *PROM;
319 volatile CARD32 *RAMHT;
322 unsigned int SaveGeneration;
324 ExaDriverPtr EXADriverPtr;
325 xf86CursorInfoPtr CursorInfoRec;
326 void (*PointerMoved)(int index, int x, int y);
327 ScreenBlockHandlerProcPtr BlockHandler;
328 CloseScreenProcPtr CloseScreen;
330 NVFBLayout CurrentLayout;
333 CARD32 curImage[256];
336 xf86Int10InfoPtr pInt10;
338 void (*VideoTimerCallback)(ScrnInfoPtr, Time);
339 void (*DMAKickoffCallback)(NVPtr pNv);
340 XF86VideoAdaptorPtr overlayAdaptor;
341 XF86VideoAdaptorPtr blitAdaptor;
349 Bool ramdac_active[2];
350 OptionInfoPtr Options;
352 unsigned char DDCBase;
365 volatile void * NotifierBlock;
366 struct drm_nouveau_notifierobj_alloc *Notifier0;
368 struct drm_nouveau_channel_alloc fifo;
378 Bool WaitVSyncPossible;
379 Bool BlendingPossible;
382 drmVersionPtr pLibDRMVersion;
383 drmVersionPtr pKernelDRMVersion;
386 CreateScreenResourcesProcPtr CreateScreenResources;
388 I2CBusPtr pI2CBus[MAX_NUM_DCB_ENTRIES];
396 uint32_t connection[MAX_NUM_DCB_ENTRIES];
397 uint32_t config[MAX_NUM_DCB_ENTRIES];
398 unsigned char i2c_read[MAX_NUM_DCB_ENTRIES];
399 unsigned char i2c_write[MAX_NUM_DCB_ENTRIES];
402 uint32_t output_info;
403 MiscStartupInfo misc_info;
415 typedef struct _NVCrtcPrivateRec {
419 DisplayModeRec lastMode; /* If we need to free ramdac0 */
421 } NVCrtcPrivateRec, *NVCrtcPrivatePtr;
423 typedef struct _NV50CrtcPrivRec {
425 int pclk; /* Target pixel clock in kHz */
429 } NV50CrtcPrivRec, *NV50CrtcPrivPtr;
431 #define NVCrtcPrivate(c) ((NVCrtcPrivatePtr)(c)->driver_private)
433 #define NVPTR(p) ((NVPtr)((p)->driverPrivate))
435 #define nvReadRAMDAC0(pNv, reg) nvReadRAMDAC(pNv, 0, reg)
436 #define nvWriteRAMDAC0(pNv, reg, val) nvWriteRAMDAC(pNv, 0, reg, val)
438 #define nvReadCurRAMDAC(pNv, reg) nvReadRAMDAC(pNv, pNv->cur_head, reg)
439 #define nvWriteCurRAMDAC(pNv, reg, val) nvWriteRAMDAC(pNv, pNv->cur_head, reg, val)
441 #define nvReadCRTC0(pNv, reg) nvReadCRTC(pNv, 0, reg)
442 #define nvWriteCRTC0(pNv, reg, val) nvWriteCRTC(pNv, 0, reg, val)
444 #define nvReadCurCRTC(pNv, reg) nvReadCRTC(pNv, pNv->cur_head, reg)
445 #define nvWriteCurCRTC(pNv, reg, val) nvWriteCRTC(pNv, pNv->cur_head, reg, val)
447 #define nvReadFB(pNv, fb_reg) MMIO_IN32(pNv->PFB, fb_reg)
448 #define nvWriteFB(pNv, fb_reg, val) MMIO_OUT32(pNv->PFB, fb_reg, val)
450 #define nvReadGRAPH(pNv, reg) MMIO_IN32(pNv->PGRAPH, reg)
451 #define nvWriteGRAPH(pNv, reg, val) MMIO_OUT32(pNv->PGRAPH, reg, val)
453 #define nvReadMC(pNv, reg) MMIO_IN32(pNv->PMC, reg)
454 #define nvWriteMC(pNv, reg, val) MMIO_OUT32(pNv->PMC, reg, val)
456 #define nvReadEXTDEV(pNv, reg) MMIO_IN32(pNv->PEXTDEV, reg)
457 #define nvWriteEXTDEV(pNv, reg, val) MMIO_OUT32(pNv->PEXTDEV, reg, val)
459 #define nvReadTIMER(pNv, reg) MMIO_IN32(pNv->PTIMER, reg)
460 #define nvWriteTIMER(pNv, reg, val) MMIO_OUT32(pNv->PTIMER, reg, val)
462 #define nvReadVIDEO(pNv, reg) MMIO_IN32(pNv->PVIDEO, reg)
463 #define nvWriteVIDEO(pNv, reg, val) MMIO_OUT32(pNv->PVIDEO, reg, val)
465 #endif /* __NV_STRUCT_H__ */