i810.h revision fa225cbc
1fa225cbcSrjs
2fa225cbcSrjs/**************************************************************************
3fa225cbcSrjs
4fa225cbcSrjsCopyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
5fa225cbcSrjsCopyright © 2002 David Dawes
6fa225cbcSrjs
7fa225cbcSrjsAll Rights Reserved.
8fa225cbcSrjs
9fa225cbcSrjsPermission is hereby granted, free of charge, to any person obtaining a
10fa225cbcSrjscopy of this software and associated documentation files (the
11fa225cbcSrjs"Software"), to deal in the Software without restriction, including
12fa225cbcSrjswithout limitation the rights to use, copy, modify, merge, publish,
13fa225cbcSrjsdistribute, sub license, and/or sell copies of the Software, and to
14fa225cbcSrjspermit persons to whom the Software is furnished to do so, subject to
15fa225cbcSrjsthe following conditions:
16fa225cbcSrjs
17fa225cbcSrjsThe above copyright notice and this permission notice (including the
18fa225cbcSrjsnext paragraph) shall be included in all copies or substantial portions
19fa225cbcSrjsof the Software.
20fa225cbcSrjs
21fa225cbcSrjsTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22fa225cbcSrjsOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23fa225cbcSrjsMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
24fa225cbcSrjsIN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
25fa225cbcSrjsANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26fa225cbcSrjsTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27fa225cbcSrjsSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28fa225cbcSrjs
29fa225cbcSrjs**************************************************************************/
30fa225cbcSrjs
31fa225cbcSrjs/*
32fa225cbcSrjs * Authors:
33fa225cbcSrjs *   Keith Whitwell <keith@tungstengraphics.com>
34fa225cbcSrjs *   David Dawes <dawes@xfree86.org>
35fa225cbcSrjs *
36fa225cbcSrjs */
37fa225cbcSrjs
38fa225cbcSrjs#ifndef _I810_H_
39fa225cbcSrjs#define _I810_H_
40fa225cbcSrjs
41fa225cbcSrjs#include <stdint.h>
42fa225cbcSrjs#include "compiler.h"
43fa225cbcSrjs#include "xf86PciInfo.h"
44fa225cbcSrjs#include "xf86Pci.h"
45fa225cbcSrjs#include "i810_reg.h"
46fa225cbcSrjs#include "xaa.h"
47fa225cbcSrjs#include "xf86Cursor.h"
48fa225cbcSrjs#include "xf86xv.h"
49fa225cbcSrjs#include "vbe.h"
50fa225cbcSrjs#include "vgaHW.h"
51fa225cbcSrjs
52fa225cbcSrjs#include "xorg-server.h"
53fa225cbcSrjs#include <pciaccess.h>
54fa225cbcSrjs
55fa225cbcSrjs#ifdef XF86DRI
56fa225cbcSrjs#include "xf86drm.h"
57fa225cbcSrjs#include "sarea.h"
58fa225cbcSrjs#define _XF86DRI_SERVER_
59fa225cbcSrjs#include "dri.h"
60fa225cbcSrjs#include "GL/glxint.h"
61fa225cbcSrjs#include "i810_dri.h"
62fa225cbcSrjs#endif
63fa225cbcSrjs
64fa225cbcSrjs#include "common.h"
65fa225cbcSrjs#include "i810_ring.h"
66fa225cbcSrjs
67fa225cbcSrjs#define I810_VERSION 4000
68fa225cbcSrjs#define I810_NAME "intel"
69fa225cbcSrjs#define I810_DRIVER_NAME "intel"
70fa225cbcSrjs
71fa225cbcSrjs#define INTEL_VERSION_MAJOR PACKAGE_VERSION_MAJOR
72fa225cbcSrjs#define INTEL_VERSION_MINOR PACKAGE_VERSION_MINOR
73fa225cbcSrjs#define INTEL_VERSION_PATCH PACKAGE_VERSION_PATCHLEVEL
74fa225cbcSrjs
75fa225cbcSrjs/* HWMC Surfaces */
76fa225cbcSrjs#define I810_MAX_SURFACES 7
77fa225cbcSrjs#define I810_MAX_SUBPICTURES 2
78fa225cbcSrjs#define I810_TOTAL_SURFACES 9
79fa225cbcSrjs
80fa225cbcSrjs/* Globals */
81fa225cbcSrjs
82fa225cbcSrjstypedef struct _I810Rec *I810Ptr;
83fa225cbcSrjs
84fa225cbcSrjstypedef void (*I810WriteIndexedByteFunc)(I810Ptr pI810, IOADDRESS addr,
85fa225cbcSrjs					 uint8_t index, uint8_t value);
86fa225cbcSrjstypedef uint8_t(*I810ReadIndexedByteFunc)(I810Ptr pI810, IOADDRESS addr,
87fa225cbcSrjs					  uint8_t index);
88fa225cbcSrjstypedef void (*I810WriteByteFunc)(I810Ptr pI810, IOADDRESS addr,
89fa225cbcSrjs				  uint8_t value);
90fa225cbcSrjstypedef uint8_t(*I810ReadByteFunc)(I810Ptr pI810, IOADDRESS addr);
91fa225cbcSrjs
92fa225cbcSrjsextern void I810SetTiledMemory(ScrnInfoPtr pScrn, int nr, unsigned start,
93fa225cbcSrjs			       unsigned pitch, unsigned size);
94fa225cbcSrjs
95fa225cbcSrjstypedef struct {
96fa225cbcSrjs   unsigned long Start;
97fa225cbcSrjs   unsigned long End;
98fa225cbcSrjs   unsigned long Size;
99fa225cbcSrjs} I810MemRange;
100fa225cbcSrjs
101fa225cbcSrjstypedef struct {
102fa225cbcSrjs   int tail_mask;
103fa225cbcSrjs   I810MemRange mem;
104fa225cbcSrjs   unsigned char *virtual_start;
105fa225cbcSrjs   int head;
106fa225cbcSrjs   int tail;
107fa225cbcSrjs   int space;
108fa225cbcSrjs} I810RingBuffer;
109fa225cbcSrjs
110fa225cbcSrjstypedef struct {
111fa225cbcSrjs   unsigned char DisplayControl;
112fa225cbcSrjs   unsigned char PixelPipeCfg0;
113fa225cbcSrjs   unsigned char PixelPipeCfg1;
114fa225cbcSrjs   unsigned char PixelPipeCfg2;
115fa225cbcSrjs   unsigned short VideoClk2_M;
116fa225cbcSrjs   unsigned short VideoClk2_N;
117fa225cbcSrjs   unsigned char VideoClk2_DivisorSel;
118fa225cbcSrjs   unsigned char AddressMapping;
119fa225cbcSrjs   unsigned char IOControl;
120fa225cbcSrjs   unsigned char BitBLTControl;
121fa225cbcSrjs   unsigned char ExtVertTotal;
122fa225cbcSrjs   unsigned char ExtVertDispEnd;
123fa225cbcSrjs   unsigned char ExtVertSyncStart;
124fa225cbcSrjs   unsigned char ExtVertBlankStart;
125fa225cbcSrjs   unsigned char ExtHorizTotal;
126fa225cbcSrjs   unsigned char ExtHorizBlank;
127fa225cbcSrjs   unsigned char ExtOffset;
128fa225cbcSrjs   unsigned char InterlaceControl;
129fa225cbcSrjs   unsigned int LMI_FIFO_Watermark;
130fa225cbcSrjs
131fa225cbcSrjs   unsigned int LprbTail;
132fa225cbcSrjs   unsigned int LprbHead;
133fa225cbcSrjs   unsigned int LprbStart;
134fa225cbcSrjs   unsigned int LprbLen;
135fa225cbcSrjs
136fa225cbcSrjs   unsigned int Fence[8];
137fa225cbcSrjs
138fa225cbcSrjs   unsigned short OverlayActiveStart;
139fa225cbcSrjs   unsigned short OverlayActiveEnd;
140fa225cbcSrjs
141fa225cbcSrjs} I810RegRec, *I810RegPtr;
142fa225cbcSrjs
143fa225cbcSrjstypedef struct _I810Rec {
144fa225cbcSrjs   unsigned char *MMIOBase;
145fa225cbcSrjs   unsigned char *FbBase;
146fa225cbcSrjs   long FbMapSize;
147fa225cbcSrjs   long DepthOffset;
148fa225cbcSrjs   long BackOffset;
149fa225cbcSrjs   int cpp;
150fa225cbcSrjs   int MaxClock;
151fa225cbcSrjs
152fa225cbcSrjs   unsigned int bufferOffset;		/* for I810SelectBuffer */
153fa225cbcSrjs   Bool DoneFrontAlloc;
154fa225cbcSrjs   BoxRec FbMemBox;
155fa225cbcSrjs   I810MemRange FrontBuffer;
156fa225cbcSrjs   I810MemRange BackBuffer;
157fa225cbcSrjs   I810MemRange DepthBuffer;
158fa225cbcSrjs   I810MemRange TexMem;
159fa225cbcSrjs   I810MemRange Scratch;
160fa225cbcSrjs   I810MemRange BufferMem;
161fa225cbcSrjs   I810MemRange ContextMem;
162fa225cbcSrjs   I810MemRange MC;
163fa225cbcSrjs
164fa225cbcSrjs   int auxPitch;
165fa225cbcSrjs   int auxPitchBits;
166fa225cbcSrjs
167fa225cbcSrjs   Bool CursorIsARGB;
168fa225cbcSrjs   int CursorOffset;
169fa225cbcSrjs   unsigned long CursorPhysical;
170fa225cbcSrjs   unsigned long CursorStart;
171fa225cbcSrjs   int CursorARGBOffset;
172fa225cbcSrjs   unsigned long CursorARGBPhysical;
173fa225cbcSrjs   unsigned long CursorARGBStart;
174fa225cbcSrjs   unsigned long OverlayPhysical;
175fa225cbcSrjs   unsigned long OverlayStart;
176fa225cbcSrjs   int colorKey;
177fa225cbcSrjs   unsigned int surfaceAllocation[I810_TOTAL_SURFACES];
178fa225cbcSrjs   int numSurfaces;
179fa225cbcSrjs
180fa225cbcSrjs   DGAModePtr DGAModes;
181fa225cbcSrjs   int numDGAModes;
182fa225cbcSrjs   Bool DGAactive;
183fa225cbcSrjs   int DGAViewportStatus;
184fa225cbcSrjs
185fa225cbcSrjs   int Chipset;
186fa225cbcSrjs   unsigned long LinearAddr;
187fa225cbcSrjs   unsigned long MMIOAddr;
188fa225cbcSrjs   IOADDRESS ioBase;
189fa225cbcSrjs   EntityInfoPtr pEnt;
190fa225cbcSrjs   struct pci_device *PciInfo;
191fa225cbcSrjs
192fa225cbcSrjs   I810RingBuffer *LpRing;
193fa225cbcSrjs   unsigned int BR[20];
194fa225cbcSrjs
195fa225cbcSrjs   int LmFreqSel;
196fa225cbcSrjs
197fa225cbcSrjs   int VramKey;
198fa225cbcSrjs   unsigned long VramOffset;
199fa225cbcSrjs   int DcacheKey;
200fa225cbcSrjs   unsigned long DcacheOffset;
201fa225cbcSrjs   int HwcursKey;
202fa225cbcSrjs   unsigned long HwcursOffset;
203fa225cbcSrjs   int ARGBHwcursKey;
204fa225cbcSrjs   unsigned long ARGBHwcursOffset;
205fa225cbcSrjs
206fa225cbcSrjs   int GttBound;
207fa225cbcSrjs
208fa225cbcSrjs   I810MemRange DcacheMem;
209fa225cbcSrjs   I810MemRange SysMem;
210fa225cbcSrjs
211fa225cbcSrjs   I810MemRange SavedDcacheMem;
212fa225cbcSrjs   I810MemRange SavedSysMem;
213fa225cbcSrjs
214fa225cbcSrjs   unsigned char **ScanlineColorExpandBuffers;
215fa225cbcSrjs   int NumScanlineColorExpandBuffers;
216fa225cbcSrjs   int nextColorExpandBuf;
217fa225cbcSrjs
218fa225cbcSrjs   I810RegRec SavedReg;
219fa225cbcSrjs   I810RegRec ModeReg;
220fa225cbcSrjs
221fa225cbcSrjs   XAAInfoRecPtr AccelInfoRec;
222fa225cbcSrjs   xf86CursorInfoPtr CursorInfoRec;
223fa225cbcSrjs   CloseScreenProcPtr CloseScreen;
224fa225cbcSrjs   ScreenBlockHandlerProcPtr BlockHandler;
225fa225cbcSrjs
226fa225cbcSrjs   I810WriteIndexedByteFunc writeControl;
227fa225cbcSrjs   I810ReadIndexedByteFunc readControl;
228fa225cbcSrjs   I810WriteByteFunc writeStandard;
229fa225cbcSrjs   I810ReadByteFunc readStandard;
230fa225cbcSrjs
231fa225cbcSrjs   Bool directRenderingDisabled;        /* DRI disabled in PreInit */
232fa225cbcSrjs   Bool directRenderingEnabled;		/* false if XF86DRI not defined. */
233fa225cbcSrjs
234fa225cbcSrjs#ifdef XF86DRI
235fa225cbcSrjs   int LockHeld;
236fa225cbcSrjs   DRIInfoPtr pDRIInfo;
237fa225cbcSrjs   int drmSubFD;
238fa225cbcSrjs   int numVisualConfigs;
239fa225cbcSrjs   __GLXvisualConfig *pVisualConfigs;
240fa225cbcSrjs   I810ConfigPrivPtr pVisualConfigsPriv;
241fa225cbcSrjs   unsigned long dcacheHandle;
242fa225cbcSrjs   unsigned long backHandle;
243fa225cbcSrjs   unsigned long zHandle;
244fa225cbcSrjs   unsigned long cursorHandle;
245fa225cbcSrjs   unsigned long cursorARGBHandle;
246fa225cbcSrjs   unsigned long xvmcHandle;
247fa225cbcSrjs   unsigned long sysmemHandle;
248fa225cbcSrjs   Bool agpAcquired;
249fa225cbcSrjs   drm_handle_t buffer_map;
250fa225cbcSrjs   drm_handle_t ring_map;
251fa225cbcSrjs   drm_handle_t overlay_map;
252fa225cbcSrjs   drm_handle_t mc_map;
253fa225cbcSrjs   drm_handle_t xvmcContext;
254fa225cbcSrjs#endif
255fa225cbcSrjs   Bool agpAcquired2d;
256fa225cbcSrjs
257fa225cbcSrjs   XF86VideoAdaptorPtr adaptor;
258fa225cbcSrjs   OptionInfoPtr Options;
259fa225cbcSrjs
260fa225cbcSrjs   int configured_device;
261fa225cbcSrjs
262fa225cbcSrjs   Bool showCache;
263fa225cbcSrjs   Bool noAccel;
264fa225cbcSrjs   Bool allowPageFlip;
265fa225cbcSrjs   Bool have3DWindows;
266fa225cbcSrjs   int  drmMinor;
267fa225cbcSrjs} I810Rec;
268fa225cbcSrjs
269fa225cbcSrjs#define I810PTR(p) ((I810Ptr)((p)->driverPrivate))
270fa225cbcSrjs
271fa225cbcSrjs#define I810_SELECT_FRONT	0
272fa225cbcSrjs#define I810_SELECT_BACK	1
273fa225cbcSrjs#define I810_SELECT_DEPTH	2
274fa225cbcSrjs
275fa225cbcSrjs#ifdef XF86DRI
276fa225cbcSrjsextern Bool I810DRIScreenInit(ScreenPtr pScreen);
277fa225cbcSrjsextern void I810DRICloseScreen(ScreenPtr pScreen);
278fa225cbcSrjsextern Bool I810DRIFinishScreenInit(ScreenPtr pScreen);
279fa225cbcSrjsextern Bool I810DRILeave(ScrnInfoPtr pScrn);
280fa225cbcSrjsextern Bool I810DRIEnter(ScrnInfoPtr pScrn);
281fa225cbcSrjs#endif
282fa225cbcSrjsextern Bool I810InitDma(ScrnInfoPtr pScrn);
283fa225cbcSrjsextern Bool I810CleanupDma(ScrnInfoPtr pScrn);
284fa225cbcSrjs
285fa225cbcSrjs#define I810PTR(p) ((I810Ptr)((p)->driverPrivate))
286fa225cbcSrjs#define I810REGPTR(p) (&(I810PTR(p)->ModeReg))
287fa225cbcSrjs
288fa225cbcSrjsextern Bool I810CursorInit(ScreenPtr pScreen);
289fa225cbcSrjsextern Bool I810AccelInit(ScreenPtr pScreen);
290fa225cbcSrjsextern void I810SetPIOAccess(I810Ptr pI810);
291fa225cbcSrjsextern void I810SetMMIOAccess(I810Ptr pI810);
292fa225cbcSrjsextern unsigned int I810CalcWatermark(ScrnInfoPtr pScrn, double freq,
293fa225cbcSrjs				      Bool dcache);
294fa225cbcSrjsextern void I810PrintErrorState(ScrnInfoPtr pScrn);
295fa225cbcSrjsextern int I810WaitLpRing(ScrnInfoPtr pScrn, int n, int timeout_millis);
296fa225cbcSrjsextern void I810Sync(ScrnInfoPtr pScrn);
297fa225cbcSrjsextern unsigned long I810LocalToPhysical(ScrnInfoPtr pScrn,
298fa225cbcSrjs					 unsigned long local);
299fa225cbcSrjsextern int I810AllocLow(I810MemRange * result, I810MemRange * pool,
300fa225cbcSrjs			int size);
301fa225cbcSrjsextern int I810AllocHigh(I810MemRange * result, I810MemRange * pool,
302fa225cbcSrjs			int size);
303fa225cbcSrjsextern Bool I810AllocateFront(ScrnInfoPtr pScrn);
304fa225cbcSrjs
305fa225cbcSrjsextern int I810AllocateGARTMemory(ScrnInfoPtr pScrn);
306fa225cbcSrjsextern void I810FreeGARTMemory(ScrnInfoPtr pScrn);
307fa225cbcSrjs
308fa225cbcSrjsextern Bool I810BindGARTMemory(ScrnInfoPtr pScrn);
309fa225cbcSrjsextern Bool I810UnbindGARTMemory(ScrnInfoPtr pScrn);
310fa225cbcSrjs
311fa225cbcSrjsextern int I810CheckAvailableMemory(ScrnInfoPtr pScrn);
312fa225cbcSrjs
313fa225cbcSrjsextern Bool I810SwitchMode(int scrnIndex, DisplayModePtr mode, int flags);
314fa225cbcSrjsextern void I810AdjustFrame(int scrnIndex, int x, int y, int flags);
315fa225cbcSrjs
316fa225cbcSrjsextern void I810SetupForScreenToScreenCopy(ScrnInfoPtr pScrn, int xdir,
317fa225cbcSrjs					   int ydir, int rop,
318fa225cbcSrjs					   unsigned int planemask,
319fa225cbcSrjs					   int trans_color);
320fa225cbcSrjsextern void I810SubsequentScreenToScreenCopy(ScrnInfoPtr pScrn, int srcX,
321fa225cbcSrjs					     int srcY, int dstX, int dstY,
322fa225cbcSrjs					     int w, int h);
323fa225cbcSrjsextern void I810SetupForSolidFill(ScrnInfoPtr pScrn, int color, int rop,
324fa225cbcSrjs				  unsigned int planemask);
325fa225cbcSrjsextern void I810SubsequentSolidFillRect(ScrnInfoPtr pScrn, int x, int y,
326fa225cbcSrjs					int w, int h);
327fa225cbcSrjs
328fa225cbcSrjsextern void I810SelectBuffer(ScrnInfoPtr pScrn, int buffer);
329fa225cbcSrjs
330fa225cbcSrjsextern void I810RefreshRing(ScrnInfoPtr pScrn);
331fa225cbcSrjsextern void I810EmitFlush(ScrnInfoPtr pScrn);
332fa225cbcSrjsextern void I810EmitInvarientState(ScrnInfoPtr pScrn);
333fa225cbcSrjs
334fa225cbcSrjsextern Bool I810DGAInit(ScreenPtr pScreen);
335fa225cbcSrjs
336fa225cbcSrjsextern void I810InitVideo(ScreenPtr pScreen);
337fa225cbcSrjsextern void I810InitMC(ScreenPtr pScreen);
338fa225cbcSrjs
339fa225cbcSrjsextern const OptionInfoRec *I810AvailableOptions(int chipid, int busid);
340fa225cbcSrjs
341fa225cbcSrjs#endif /* _I810_H_ */
342