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