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"
19 #error "This driver requires a DRI-enabled X server"
22 #include "nv50_type.h"
23 #include "nv_pcicompat.h"
25 #define NV_ARCH_03 0x03
26 #define NV_ARCH_04 0x04
27 #define NV_ARCH_10 0x10
28 #define NV_ARCH_20 0x20
29 #define NV_ARCH_30 0x30
30 #define NV_ARCH_40 0x40
31 #define NV_ARCH_50 0x50
33 #define CHIPSET_NV03 0x0010
34 #define CHIPSET_NV04 0x0020
35 #define CHIPSET_NV10 0x0100
36 #define CHIPSET_NV11 0x0110
37 #define CHIPSET_NV15 0x0150
38 #define CHIPSET_NV17 0x0170
39 #define CHIPSET_NV18 0x0180
40 #define CHIPSET_NFORCE 0x01A0
41 #define CHIPSET_NFORCE2 0x01F0
42 #define CHIPSET_NV20 0x0200
43 #define CHIPSET_NV25 0x0250
44 #define CHIPSET_NV28 0x0280
45 #define CHIPSET_NV30 0x0300
46 #define CHIPSET_NV31 0x0310
47 #define CHIPSET_NV34 0x0320
48 #define CHIPSET_NV35 0x0330
49 #define CHIPSET_NV36 0x0340
50 #define CHIPSET_NV40 0x0040
51 #define CHIPSET_NV41 0x00C0
52 #define CHIPSET_NV43 0x0140
53 #define CHIPSET_NV44 0x0160
54 #define CHIPSET_NV44A 0x0220
55 #define CHIPSET_NV45 0x0210
56 #define CHIPSET_NV50 0x0190
57 #define CHIPSET_NV84 0x0400
58 #define CHIPSET_MISC_BRIDGED 0x00F0
59 #define CHIPSET_G70 0x0090
60 #define CHIPSET_G71 0x0290
61 #define CHIPSET_G72 0x01D0
62 #define CHIPSET_G73 0x0390
63 // integrated GeForces (6100, 6150)
64 #define CHIPSET_C51 0x0240
65 // variant of C51, seems based on a G70 design
66 #define CHIPSET_C512 0x03D0
67 #define CHIPSET_G73_BRIDGED 0x02E0
70 #define BITMASK(t,b) (((unsigned)(1U << (((t)-(b)+1)))-1) << (b))
71 #define MASKEXPAND(mask) BITMASK(1?mask,0?mask)
72 #define SetBF(mask,value) ((value) << (0?mask))
73 #define GetBF(var,mask) (((unsigned)((var) & MASKEXPAND(mask))) >> (0?mask) )
74 #define SetBitField(value,from,to) SetBF(to, GetBF(value,from))
75 #define SetBit(n) (1<<(n))
76 #define Set8Bits(value) ((value)&0xff)
78 #define MAX_NUM_DCB_ENTRIES 16
80 typedef enum /* matches DCB types */
97 typedef struct _nv_crtc_reg
99 unsigned char MiscOutReg; /* */
105 unsigned char DAC[768]; /* Internal Colorlookuptable */
116 /* These are former output regs, but are believed to be crtc related */
124 CARD32 fp_horiz_regs[7];
125 CARD32 fp_vert_regs[7];
126 CARD32 fp_hvalid_start;
127 CARD32 fp_hvalid_end;
128 CARD32 fp_vvalid_start;
129 CARD32 fp_vvalid_end;
135 } NVCrtcRegRec, *NVCrtcRegPtr;
137 typedef struct _nv_output_reg
146 } NVOutputRegRec, *NVOutputRegPtr;
148 typedef struct _riva_hw_state
175 /* These vpll values are only for nv4x hardware */
196 NVCrtcRegRec crtc_reg[2];
197 NVOutputRegRec dac_reg[2];
198 } RIVA_HW_STATE, *NVRegPtr;
200 typedef struct _nv50_crtc_reg
203 } NV50CrtcRegRec, *NV50CrtcRegPtr;
205 typedef struct _nv50_hw_state
207 NV50CrtcRegRec crtc_reg[2];
208 } NV50_HW_STATE, *NV50RegPtr;
215 typedef struct _NVOutputPrivateRec {
216 uint8_t valid_ramdac;
217 uint8_t preferred_output;
225 DisplayModePtr native_mode;
227 uint8_t scaling_mode;
228 } NVOutputPrivateRec, *NVOutputPrivatePtr;
230 typedef struct _MiscStartupInfo {
232 CARD32 ramdac_0_reg_580;
233 CARD32 ramdac_0_pllsel;
239 OUTPUT_0_SLAVED = (1 << 0),
240 OUTPUT_1_SLAVED = (1 << 1),
241 OUTPUT_0_LVDS = (1 << 2),
242 OUTPUT_1_LVDS = (1 << 3),
243 OUTPUT_0_CROSSWIRED_TMDS = (1 << 4),
244 OUTPUT_1_CROSSWIRED_TMDS = (1 << 5)
254 Bool duallink_possible;
257 Bool use_straps_for_mode;
258 Bool use_power_scripts;
268 uint8_t major_version;
270 uint16_t init_script_tbls_ptr;
271 uint16_t macro_index_tbl_ptr;
272 uint16_t macro_tbl_ptr;
273 uint16_t condition_tbl_ptr;
274 uint16_t io_condition_tbl_ptr;
275 uint16_t io_flag_condition_tbl_ptr;
276 uint16_t init_function_tbl_ptr;
278 uint16_t ram_restrict_tbl_ptr;
281 DisplayModePtr native_mode;
282 uint16_t script_table;
283 Bool power_off_for_reset;
284 Bool reset_after_pclk_change;
287 uint16_t off_on_delay;
291 uint16_t output0_script_ptr;
292 uint16_t output1_script_ptr;
297 /* Order *does* matter here */
306 #define NVOutputPrivate(o) ((NVOutputPrivatePtr (o)->driver_private)
308 typedef struct _NVRec *NVPtr;
309 typedef struct _NVRec {
310 RIVA_HW_STATE SavedReg;
311 RIVA_HW_STATE ModeReg;
312 RIVA_HW_STATE *CurrentState;
313 NV50_HW_STATE NV50SavedReg;
314 NV50_HW_STATE NV50ModeReg;
317 #ifndef XSERVER_LIBPCIACCESS
321 struct pci_device *PciInfo;
322 #endif /* XSERVER_LIBPCIACCESS */
329 /* VRAM physical address */
330 unsigned long VRAMPhysical;
331 /* Size of VRAM BAR */
332 unsigned long VRAMPhysicalSize;
333 /* Accesible VRAM size (by the GPU) */
334 unsigned long VRAMSize;
335 /* Accessible AGP size */
336 unsigned long AGPSize;
338 /* Various pinned memory regions */
339 struct nouveau_bo * FB;
340 struct nouveau_bo * Cursor;
341 struct nouveau_bo * CLUT; /* NV50 only */
342 struct nouveau_bo * GART;
349 unsigned char * ShadowPtr;
351 CARD32 MinVClockFreqKHz;
352 CARD32 MaxVClockFreqKHz;
353 CARD32 CrystalFreqKHz;
354 CARD32 RamAmountKBytes;
356 volatile CARD32 *REGS;
357 volatile CARD32 *PCRTC0;
358 volatile CARD32 *PCRTC1;
360 volatile CARD32 *NV50_PCRTC;
362 volatile CARD32 *PRAMDAC0;
363 volatile CARD32 *PRAMDAC1;
364 volatile CARD32 *PFB;
365 volatile CARD32 *PFIFO;
366 volatile CARD32 *PGRAPH;
367 volatile CARD32 *PEXTDEV;
368 volatile CARD32 *PTIMER;
369 volatile CARD32 *PVIDEO;
370 volatile CARD32 *PMC;
371 volatile CARD32 *PRAMIN;
372 volatile CARD32 *CURSOR;
373 volatile CARD8 *PCIO0;
374 volatile CARD8 *PCIO1;
375 volatile CARD8 *PVIO0;
376 volatile CARD8 *PVIO1;
377 volatile CARD8 *PDIO0;
378 volatile CARD8 *PDIO1;
379 volatile CARD8 *PROM;
382 volatile CARD32 *RAMHT;
385 unsigned int SaveGeneration;
387 ExaDriverPtr EXADriverPtr;
388 xf86CursorInfoPtr CursorInfoRec;
389 void (*PointerMoved)(int index, int x, int y);
390 ScreenBlockHandlerProcPtr BlockHandler;
391 CloseScreenProcPtr CloseScreen;
393 NVFBLayout CurrentLayout;
396 CARD32 curImage[256];
399 xf86Int10InfoPtr pInt10;
401 void (*VideoTimerCallback)(ScrnInfoPtr, Time);
402 XF86VideoAdaptorPtr overlayAdaptor;
403 XF86VideoAdaptorPtr blitAdaptor;
411 Bool ramdac_active[2];
412 OptionInfoPtr Options;
414 unsigned char DDCBase;
429 Bool WaitVSyncPossible;
430 Bool BlendingPossible;
433 drmVersionPtr pLibDRMVersion;
434 drmVersionPtr pKernelDRMVersion;
437 CreateScreenResourcesProcPtr CreateScreenResources;
439 I2CBusPtr pI2CBus[MAX_NUM_DCB_ENTRIES];
448 struct dcb_entry entry[MAX_NUM_DCB_ENTRIES];
449 unsigned char i2c_read[MAX_NUM_DCB_ENTRIES];
450 unsigned char i2c_write[MAX_NUM_DCB_ENTRIES];
453 uint32_t output_info;
454 MiscStartupInfo misc_info;
466 struct nouveau_device *dev;
469 struct nouveau_channel *chan;
470 struct nouveau_notifier *notify0;
471 struct nouveau_grobj *NvNull;
472 struct nouveau_grobj *NvContextSurfaces;
473 struct nouveau_grobj *NvContextBeta1;
474 struct nouveau_grobj *NvContextBeta4;
475 struct nouveau_grobj *NvImagePattern;
476 struct nouveau_grobj *NvRop;
477 struct nouveau_grobj *NvRectangle;
478 struct nouveau_grobj *NvImageBlit;
479 struct nouveau_grobj *NvScaledImage;
480 struct nouveau_grobj *NvClipRectangle;
481 struct nouveau_grobj *NvMemFormat;
482 struct nouveau_grobj *NvImageFromCpu;
483 struct nouveau_grobj *Nv2D;
484 struct nouveau_grobj *Nv3D;
488 typedef struct _NVCrtcPrivateRec {
493 } NVCrtcPrivateRec, *NVCrtcPrivatePtr;
495 typedef struct _NV50CrtcPrivRec {
497 int pclk; /* Target pixel clock in kHz */
501 } NV50CrtcPrivRec, *NV50CrtcPrivPtr;
503 #define NVCrtcPrivate(c) ((NVCrtcPrivatePtr)(c)->driver_private)
505 #define NVPTR(p) ((NVPtr)((p)->driverPrivate))
507 #define nvReadRAMDAC0(pNv, reg) nvReadRAMDAC(pNv, 0, reg)
508 #define nvWriteRAMDAC0(pNv, reg, val) nvWriteRAMDAC(pNv, 0, reg, val)
510 #define nvReadCurRAMDAC(pNv, reg) nvReadRAMDAC(pNv, pNv->cur_head, reg)
511 #define nvWriteCurRAMDAC(pNv, reg, val) nvWriteRAMDAC(pNv, pNv->cur_head, reg, val)
513 #define nvReadCRTC0(pNv, reg) nvReadCRTC(pNv, 0, reg)
514 #define nvWriteCRTC0(pNv, reg, val) nvWriteCRTC(pNv, 0, reg, val)
516 #define nvReadCurCRTC(pNv, reg) nvReadCRTC(pNv, pNv->cur_head, reg)
517 #define nvWriteCurCRTC(pNv, reg, val) nvWriteCRTC(pNv, pNv->cur_head, reg, val)
519 #define nvReadFB(pNv, fb_reg) MMIO_IN32(pNv->PFB, fb_reg)
520 #define nvWriteFB(pNv, fb_reg, val) MMIO_OUT32(pNv->PFB, fb_reg, val)
522 #define nvReadGRAPH(pNv, reg) MMIO_IN32(pNv->PGRAPH, reg)
523 #define nvWriteGRAPH(pNv, reg, val) MMIO_OUT32(pNv->PGRAPH, reg, val)
525 #define nvReadMC(pNv, reg) MMIO_IN32(pNv->PMC, reg)
526 #define nvWriteMC(pNv, reg, val) MMIO_OUT32(pNv->PMC, reg, val)
528 #define nvReadEXTDEV(pNv, reg) MMIO_IN32(pNv->PEXTDEV, reg)
529 #define nvWriteEXTDEV(pNv, reg, val) MMIO_OUT32(pNv->PEXTDEV, reg, val)
531 #define nvReadTIMER(pNv, reg) MMIO_IN32(pNv->PTIMER, reg)
532 #define nvWriteTIMER(pNv, reg, val) MMIO_OUT32(pNv->PTIMER, reg, val)
534 #define nvReadVIDEO(pNv, reg) MMIO_IN32(pNv->PVIDEO, reg)
535 #define nvWriteVIDEO(pNv, reg, val) MMIO_OUT32(pNv->PVIDEO, reg, val)
537 #endif /* __NV_STRUCT_H__ */