1706f2543Smrg/************************************************************************** 2706f2543Smrg 3706f2543SmrgCopyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas. 4706f2543SmrgAll Rights Reserved. 5706f2543Smrg 6706f2543SmrgPermission is hereby granted, free of charge, to any person obtaining a 7706f2543Smrgcopy of this software and associated documentation files (the 8706f2543Smrg"Software"), to deal in the Software without restriction, including 9706f2543Smrgwithout limitation the rights to use, copy, modify, merge, publish, 10706f2543Smrgdistribute, sub license, and/or sell copies of the Software, and to 11706f2543Smrgpermit persons to whom the Software is furnished to do so, subject to 12706f2543Smrgthe following conditions: 13706f2543Smrg 14706f2543SmrgThe above copyright notice and this permission notice (including the 15706f2543Smrgnext paragraph) shall be included in all copies or substantial portions 16706f2543Smrgof the Software. 17706f2543Smrg 18706f2543SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19706f2543SmrgOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20706f2543SmrgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21706f2543SmrgIN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 22706f2543SmrgANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23706f2543SmrgTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24706f2543SmrgSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25706f2543Smrg 26706f2543Smrg**************************************************************************/ 27706f2543Smrg 28706f2543Smrg/* 29706f2543Smrg * Authors: 30706f2543Smrg * Jens Owen <jens@tungstengraphics.com> 31706f2543Smrg * 32706f2543Smrg */ 33706f2543Smrg 34706f2543Smrg/* Prototypes for DRI functions */ 35706f2543Smrg 36706f2543Smrg#ifndef _DRI_H_ 37706f2543Smrg 38706f2543Smrg#include <pciaccess.h> 39706f2543Smrg 40706f2543Smrg#include "scrnintstr.h" 41706f2543Smrg#include "xf86dri.h" 42706f2543Smrg 43706f2543Smrgtypedef int DRISyncType; 44706f2543Smrg 45706f2543Smrg#define DRI_NO_SYNC 0 46706f2543Smrg#define DRI_2D_SYNC 1 47706f2543Smrg#define DRI_3D_SYNC 2 48706f2543Smrg 49706f2543Smrgtypedef int DRIContextType; 50706f2543Smrg 51706f2543Smrgtypedef struct _DRIContextPrivRec DRIContextPrivRec, *DRIContextPrivPtr; 52706f2543Smrg 53706f2543Smrgtypedef enum _DRIContextFlags 54706f2543Smrg{ 55706f2543Smrg DRI_CONTEXT_2DONLY = 0x01, 56706f2543Smrg DRI_CONTEXT_PRESERVED = 0x02, 57706f2543Smrg DRI_CONTEXT_RESERVED = 0x04 /* DRI Only -- no kernel equivalent */ 58706f2543Smrg} DRIContextFlags; 59706f2543Smrg 60706f2543Smrg#define DRI_NO_CONTEXT 0 61706f2543Smrg#define DRI_2D_CONTEXT 1 62706f2543Smrg#define DRI_3D_CONTEXT 2 63706f2543Smrg 64706f2543Smrgtypedef int DRISwapMethod; 65706f2543Smrg 66706f2543Smrg#define DRI_HIDE_X_CONTEXT 0 67706f2543Smrg#define DRI_SERVER_SWAP 1 68706f2543Smrg#define DRI_KERNEL_SWAP 2 69706f2543Smrg 70706f2543Smrgtypedef int DRIWindowRequests; 71706f2543Smrg 72706f2543Smrg#define DRI_NO_WINDOWS 0 73706f2543Smrg#define DRI_3D_WINDOWS_ONLY 1 74706f2543Smrg#define DRI_ALL_WINDOWS 2 75706f2543Smrg 76706f2543Smrg 77706f2543Smrgtypedef void (*ClipNotifyPtr)( WindowPtr, int, int ); 78706f2543Smrgtypedef void (*AdjustFramePtr)(int scrnIndex, int x, int y, int flags); 79706f2543Smrg 80706f2543Smrg 81706f2543Smrg/* 82706f2543Smrg * These functions can be wrapped by the DRI. Each of these have 83706f2543Smrg * generic default funcs (initialized in DRICreateInfoRec) and can be 84706f2543Smrg * overridden by the driver in its [driver]DRIScreenInit function. 85706f2543Smrg */ 86706f2543Smrgtypedef struct { 87706f2543Smrg ScreenWakeupHandlerProcPtr WakeupHandler; 88706f2543Smrg ScreenBlockHandlerProcPtr BlockHandler; 89706f2543Smrg WindowExposuresProcPtr WindowExposures; 90706f2543Smrg CopyWindowProcPtr CopyWindow; 91706f2543Smrg ValidateTreeProcPtr ValidateTree; 92706f2543Smrg PostValidateTreeProcPtr PostValidateTree; 93706f2543Smrg ClipNotifyProcPtr ClipNotify; 94706f2543Smrg AdjustFramePtr AdjustFrame; 95706f2543Smrg} DRIWrappedFuncsRec, *DRIWrappedFuncsPtr; 96706f2543Smrg 97706f2543Smrg 98706f2543Smrg/* 99706f2543Smrg * Prior to Xorg 6.8.99.8, the DRIInfoRec structure was implicitly versioned 100706f2543Smrg * by the XF86DRI_*_VERSION defines in xf86dristr.h. These numbers were also 101706f2543Smrg * being used to version the XFree86-DRI protocol. Bugs #3066 and #3163 102706f2543Smrg * showed that this was inadequate. The DRIInfoRec structure is now versioned 103706f2543Smrg * by the DRIINFO_*_VERSION defines in this file. - ajax, 2005-05-18. 104706f2543Smrg * 105706f2543Smrg * Revision history: 106706f2543Smrg * 4.1.0 and earlier: DRIQueryVersion returns XF86DRI_*_VERSION. 107706f2543Smrg * 4.2.0: DRIQueryVersion begins returning DRIINFO_*_VERSION. 108706f2543Smrg * 5.0.0: frameBufferPhysicalAddress changed from CARD32 to pointer. 109706f2543Smrg */ 110706f2543Smrg 111706f2543Smrg#define DRIINFO_MAJOR_VERSION 5 112706f2543Smrg#define DRIINFO_MINOR_VERSION 4 113706f2543Smrg#define DRIINFO_PATCH_VERSION 0 114706f2543Smrg 115706f2543Smrgtypedef unsigned long long (*DRITexOffsetStartProcPtr)(PixmapPtr pPix); 116706f2543Smrgtypedef void (*DRITexOffsetFinishProcPtr)(PixmapPtr pPix); 117706f2543Smrg 118706f2543Smrgtypedef struct { 119706f2543Smrg /* driver call back functions 120706f2543Smrg * 121706f2543Smrg * New fields should be added at the end for backwards compatibility. 122706f2543Smrg * Bump the DRIINFO patch number to indicate bugfixes. 123706f2543Smrg * Bump the DRIINFO minor number to indicate new fields. 124706f2543Smrg * Bump the DRIINFO major number to indicate binary-incompatible changes. 125706f2543Smrg */ 126706f2543Smrg Bool (*CreateContext)(ScreenPtr pScreen, 127706f2543Smrg VisualPtr visual, 128706f2543Smrg drm_context_t hHWContext, 129706f2543Smrg void* pVisualConfigPriv, 130706f2543Smrg DRIContextType context); 131706f2543Smrg void (*DestroyContext)(ScreenPtr pScreen, 132706f2543Smrg drm_context_t hHWContext, 133706f2543Smrg DRIContextType context); 134706f2543Smrg void (*SwapContext)(ScreenPtr pScreen, 135706f2543Smrg DRISyncType syncType, 136706f2543Smrg DRIContextType readContextType, 137706f2543Smrg void* readContextStore, 138706f2543Smrg DRIContextType writeContextType, 139706f2543Smrg void* writeContextStore); 140706f2543Smrg void (*InitBuffers)(WindowPtr pWin, 141706f2543Smrg RegionPtr prgn, 142706f2543Smrg CARD32 indx); 143706f2543Smrg void (*MoveBuffers)(WindowPtr pWin, 144706f2543Smrg DDXPointRec ptOldOrg, 145706f2543Smrg RegionPtr prgnSrc, 146706f2543Smrg CARD32 indx); 147706f2543Smrg void (*TransitionTo3d)(ScreenPtr pScreen); 148706f2543Smrg void (*TransitionTo2d)(ScreenPtr pScreen); 149706f2543Smrg 150706f2543Smrg void (*SetDrawableIndex)(WindowPtr pWin, CARD32 indx); 151706f2543Smrg Bool (*OpenFullScreen)(ScreenPtr pScreen); 152706f2543Smrg Bool (*CloseFullScreen)(ScreenPtr pScreen); 153706f2543Smrg 154706f2543Smrg /* wrapped functions */ 155706f2543Smrg DRIWrappedFuncsRec wrap; 156706f2543Smrg 157706f2543Smrg /* device info */ 158706f2543Smrg char* drmDriverName; 159706f2543Smrg char* clientDriverName; 160706f2543Smrg char* busIdString; 161706f2543Smrg int ddxDriverMajorVersion; 162706f2543Smrg int ddxDriverMinorVersion; 163706f2543Smrg int ddxDriverPatchVersion; 164706f2543Smrg pointer frameBufferPhysicalAddress; 165706f2543Smrg long frameBufferSize; 166706f2543Smrg long frameBufferStride; 167706f2543Smrg long SAREASize; 168706f2543Smrg int maxDrawableTableEntry; 169706f2543Smrg int ddxDrawableTableEntry; 170706f2543Smrg long contextSize; 171706f2543Smrg DRISwapMethod driverSwapMethod; 172706f2543Smrg DRIWindowRequests bufferRequests; 173706f2543Smrg int devPrivateSize; 174706f2543Smrg void* devPrivate; 175706f2543Smrg Bool createDummyCtx; 176706f2543Smrg Bool createDummyCtxPriv; 177706f2543Smrg 178706f2543Smrg /* New with DRI version 4.1.0 */ 179706f2543Smrg void (*TransitionSingleToMulti3D)(ScreenPtr pScreen); 180706f2543Smrg void (*TransitionMultiToSingle3D)(ScreenPtr pScreen); 181706f2543Smrg 182706f2543Smrg /* New with DRI version 5.1.0 */ 183706f2543Smrg void (*ClipNotify)(ScreenPtr pScreen, WindowPtr *ppWin, int num); 184706f2543Smrg 185706f2543Smrg /* New with DRI version 5.2.0 */ 186706f2543Smrg Bool allocSarea; 187706f2543Smrg Bool keepFDOpen; 188706f2543Smrg 189706f2543Smrg /* New with DRI version 5.3.0 */ 190706f2543Smrg DRITexOffsetStartProcPtr texOffsetStart; 191706f2543Smrg DRITexOffsetFinishProcPtr texOffsetFinish; 192706f2543Smrg 193706f2543Smrg /* New with DRI version 5.4.0 */ 194706f2543Smrg int dontMapFrameBuffer; 195706f2543Smrg drm_handle_t hFrameBuffer; /* Handle to framebuffer, either 196706f2543Smrg * mapped by DDX driver or DRI */ 197706f2543Smrg 198706f2543Smrg} DRIInfoRec, *DRIInfoPtr; 199706f2543Smrg 200706f2543Smrg 201706f2543Smrgextern _X_EXPORT Bool DRIOpenDRMMaster(ScrnInfoPtr pScrn, unsigned long sAreaSize, 202706f2543Smrg const char *busID, 203706f2543Smrg const char *drmDriverName); 204706f2543Smrg 205706f2543Smrgextern _X_EXPORT Bool DRIScreenInit(ScreenPtr pScreen, 206706f2543Smrg DRIInfoPtr pDRIInfo, 207706f2543Smrg int *pDRMFD); 208706f2543Smrg 209706f2543Smrgextern _X_EXPORT void DRICloseScreen(ScreenPtr pScreen); 210706f2543Smrg 211706f2543Smrgextern _X_EXPORT Bool DRIExtensionInit(void); 212706f2543Smrg 213706f2543Smrgextern _X_EXPORT void DRIReset(void); 214706f2543Smrg 215706f2543Smrgextern _X_EXPORT Bool DRIQueryDirectRenderingCapable(ScreenPtr pScreen, 216706f2543Smrg Bool *isCapable); 217706f2543Smrg 218706f2543Smrgextern _X_EXPORT Bool DRIOpenConnection(ScreenPtr pScreen, 219706f2543Smrg drm_handle_t * hSAREA, 220706f2543Smrg char **busIdString); 221706f2543Smrg 222706f2543Smrgextern _X_EXPORT Bool DRIAuthConnection(ScreenPtr pScreen, drm_magic_t magic); 223706f2543Smrg 224706f2543Smrgextern _X_EXPORT Bool DRICloseConnection(ScreenPtr pScreen); 225706f2543Smrg 226706f2543Smrgextern _X_EXPORT Bool DRIGetClientDriverName(ScreenPtr pScreen, 227706f2543Smrg int* ddxDriverMajorVersion, 228706f2543Smrg int* ddxDriverMinorVersion, 229706f2543Smrg int* ddxDriverPatchVersion, 230706f2543Smrg char** clientDriverName); 231706f2543Smrg 232706f2543Smrgextern _X_EXPORT Bool DRICreateContext(ScreenPtr pScreen, 233706f2543Smrg VisualPtr visual, 234706f2543Smrg XID context, 235706f2543Smrg drm_context_t * pHWContext); 236706f2543Smrg 237706f2543Smrgextern _X_EXPORT Bool DRIDestroyContext(ScreenPtr pScreen, XID context); 238706f2543Smrg 239706f2543Smrgextern _X_EXPORT Bool DRIContextPrivDelete(pointer pResource, XID id); 240706f2543Smrg 241706f2543Smrgextern _X_EXPORT Bool DRICreateDrawable(ScreenPtr pScreen, 242706f2543Smrg ClientPtr client, 243706f2543Smrg DrawablePtr pDrawable, 244706f2543Smrg drm_drawable_t * hHWDrawable); 245706f2543Smrg 246706f2543Smrgextern _X_EXPORT Bool DRIDestroyDrawable(ScreenPtr pScreen, 247706f2543Smrg ClientPtr client, 248706f2543Smrg DrawablePtr pDrawable); 249706f2543Smrg 250706f2543Smrgextern _X_EXPORT Bool DRIDrawablePrivDelete(pointer pResource, 251706f2543Smrg XID id); 252706f2543Smrg 253706f2543Smrgextern _X_EXPORT Bool DRIGetDrawableInfo(ScreenPtr pScreen, 254706f2543Smrg DrawablePtr pDrawable, 255706f2543Smrg unsigned int* indx, 256706f2543Smrg unsigned int* stamp, 257706f2543Smrg int* X, 258706f2543Smrg int* Y, 259706f2543Smrg int* W, 260706f2543Smrg int* H, 261706f2543Smrg int* numClipRects, 262706f2543Smrg drm_clip_rect_t ** pClipRects, 263706f2543Smrg int* backX, 264706f2543Smrg int* backY, 265706f2543Smrg int* numBackClipRects, 266706f2543Smrg drm_clip_rect_t ** pBackClipRects); 267706f2543Smrg 268706f2543Smrgextern _X_EXPORT Bool DRIGetDeviceInfo(ScreenPtr pScreen, 269706f2543Smrg drm_handle_t * hFrameBuffer, 270706f2543Smrg int* fbOrigin, 271706f2543Smrg int* fbSize, 272706f2543Smrg int* fbStride, 273706f2543Smrg int* devPrivateSize, 274706f2543Smrg void** pDevPrivate); 275706f2543Smrg 276706f2543Smrgextern _X_EXPORT DRIInfoPtr DRICreateInfoRec(void); 277706f2543Smrg 278706f2543Smrgextern _X_EXPORT void DRIDestroyInfoRec(DRIInfoPtr DRIInfo); 279706f2543Smrg 280706f2543Smrgextern _X_EXPORT Bool DRIFinishScreenInit(ScreenPtr pScreen); 281706f2543Smrg 282706f2543Smrgextern _X_EXPORT void DRIWakeupHandler(pointer wakeupData, 283706f2543Smrg int result, 284706f2543Smrg pointer pReadmask); 285706f2543Smrg 286706f2543Smrgextern _X_EXPORT void DRIBlockHandler(pointer blockData, 287706f2543Smrg OSTimePtr pTimeout, 288706f2543Smrg pointer pReadmask); 289706f2543Smrg 290706f2543Smrgextern _X_EXPORT void DRIDoWakeupHandler(int screenNum, 291706f2543Smrg pointer wakeupData, 292706f2543Smrg unsigned long result, 293706f2543Smrg pointer pReadmask); 294706f2543Smrg 295706f2543Smrgextern _X_EXPORT void DRIDoBlockHandler(int screenNum, 296706f2543Smrg pointer blockData, 297706f2543Smrg pointer pTimeout, 298706f2543Smrg pointer pReadmask); 299706f2543Smrg 300706f2543Smrgextern _X_EXPORT void DRISwapContext(int drmFD, 301706f2543Smrg void *oldctx, 302706f2543Smrg void *newctx); 303706f2543Smrg 304706f2543Smrgextern _X_EXPORT void *DRIGetContextStore(DRIContextPrivPtr context); 305706f2543Smrg 306706f2543Smrgextern _X_EXPORT void DRIWindowExposures(WindowPtr pWin, 307706f2543Smrg RegionPtr prgn, 308706f2543Smrg RegionPtr bsreg); 309706f2543Smrg 310706f2543Smrgextern _X_EXPORT Bool DRIDestroyWindow(WindowPtr pWin); 311706f2543Smrg 312706f2543Smrgextern _X_EXPORT void DRICopyWindow(WindowPtr pWin, 313706f2543Smrg DDXPointRec ptOldOrg, 314706f2543Smrg RegionPtr prgnSrc); 315706f2543Smrg 316706f2543Smrgextern _X_EXPORT int DRIValidateTree(WindowPtr pParent, 317706f2543Smrg WindowPtr pChild, 318706f2543Smrg VTKind kind); 319706f2543Smrg 320706f2543Smrgextern _X_EXPORT void DRIPostValidateTree(WindowPtr pParent, 321706f2543Smrg WindowPtr pChild, 322706f2543Smrg VTKind kind); 323706f2543Smrg 324706f2543Smrgextern _X_EXPORT void DRIClipNotify(WindowPtr pWin, 325706f2543Smrg int dx, 326706f2543Smrg int dy); 327706f2543Smrg 328706f2543Smrgextern _X_EXPORT CARD32 DRIGetDrawableIndex(WindowPtr pWin); 329706f2543Smrg 330706f2543Smrgextern _X_EXPORT void DRIPrintDrawableLock(ScreenPtr pScreen, char *msg); 331706f2543Smrg 332706f2543Smrgextern _X_EXPORT void DRILock(ScreenPtr pScreen, int flags); 333706f2543Smrg 334706f2543Smrgextern _X_EXPORT void DRIUnlock(ScreenPtr pScreen); 335706f2543Smrg 336706f2543Smrgextern _X_EXPORT DRIWrappedFuncsRec *DRIGetWrappedFuncs(ScreenPtr pScreen); 337706f2543Smrg 338706f2543Smrgextern _X_EXPORT void *DRIGetSAREAPrivate(ScreenPtr pScreen); 339706f2543Smrg 340706f2543Smrgextern _X_EXPORT unsigned int DRIGetDrawableStamp(ScreenPtr pScreen, 341706f2543Smrg CARD32 drawable_index); 342706f2543Smrg 343706f2543Smrgextern _X_EXPORT DRIContextPrivPtr DRICreateContextPriv(ScreenPtr pScreen, 344706f2543Smrg drm_context_t * pHWContext, 345706f2543Smrg DRIContextFlags flags); 346706f2543Smrg 347706f2543Smrgextern _X_EXPORT DRIContextPrivPtr DRICreateContextPrivFromHandle(ScreenPtr pScreen, 348706f2543Smrg drm_context_t hHWContext, 349706f2543Smrg DRIContextFlags flags); 350706f2543Smrg 351706f2543Smrgextern _X_EXPORT Bool DRIDestroyContextPriv(DRIContextPrivPtr pDRIContextPriv); 352706f2543Smrg 353706f2543Smrgextern _X_EXPORT drm_context_t DRIGetContext(ScreenPtr pScreen); 354706f2543Smrg 355706f2543Smrgextern _X_EXPORT void DRIQueryVersion(int *majorVersion, 356706f2543Smrg int *minorVersion, 357706f2543Smrg int *patchVersion); 358706f2543Smrg 359706f2543Smrgextern _X_EXPORT void DRIAdjustFrame(int scrnIndex, int x, int y, int flags); 360706f2543Smrg 361706f2543Smrgextern _X_EXPORT void DRIMoveBuffersHelper(ScreenPtr pScreen, 362706f2543Smrg int dx, 363706f2543Smrg int dy, 364706f2543Smrg int *xdir, 365706f2543Smrg int *ydir, 366706f2543Smrg RegionPtr reg); 367706f2543Smrg 368706f2543Smrgextern _X_EXPORT char *DRICreatePCIBusID(const struct pci_device *PciInfo); 369706f2543Smrg 370706f2543Smrgextern _X_EXPORT int drmInstallSIGIOHandler(int fd, void (*f)(int, void *, void *)); 371706f2543Smrgextern _X_EXPORT int drmRemoveSIGIOHandler(int fd); 372706f2543Smrgextern _X_EXPORT int DRIMasterFD(ScrnInfoPtr pScrn); 373706f2543Smrg 374706f2543Smrgextern _X_EXPORT void *DRIMasterSareaPointer(ScrnInfoPtr pScrn); 375706f2543Smrg 376706f2543Smrgextern _X_EXPORT drm_handle_t DRIMasterSareaHandle(ScrnInfoPtr pScrn); 377706f2543Smrg 378706f2543Smrgextern _X_EXPORT void DRIGetTexOffsetFuncs(ScreenPtr pScreen, 379706f2543Smrg DRITexOffsetStartProcPtr *texOffsetStartFunc, 380706f2543Smrg DRITexOffsetFinishProcPtr *texOffsetFinishFunc); 381706f2543Smrg 382706f2543Smrg#define _DRI_H_ 383706f2543Smrg 384706f2543Smrg#endif 385