b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/**************************************************************************
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncCopyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncAll Rights Reserved.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncPermission is hereby granted, free of charge, to any person obtaining a
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynccopy of this software and associated documentation files (the
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync"Software"), to deal in the Software without restriction, including
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncwithout limitation the rights to use, copy, modify, merge, publish,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncdistribute, sub license, and/or sell copies of the Software, and to
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncpermit persons to whom the Software is furnished to do so, subject to
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncthe following conditions:
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncThe above copyright notice and this permission notice (including the
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncnext paragraph) shall be included in all copies or substantial portions
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncof the Software.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncIN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync**************************************************************************/
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync/*
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Authors:
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync * Jens Owen <jens@tungstengraphics.com>
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync *
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#ifndef DRI_STRUCT_H
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define DRI_STRUCT_H
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#include "xf86drm.h"
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#include "xf86Crtc.h"
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define DRI_DRAWABLE_PRIV_FROM_WINDOW(pWin) ((DRIDrawablePrivPtr) \
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync dixLookupPrivate(&(pWin)->devPrivates, DRIWindowPrivKey))
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define DRI_DRAWABLE_PRIV_FROM_PIXMAP(pPix) ((DRIDrawablePrivPtr) \
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync dixLookupPrivate(&(pPix)->devPrivates, DRIWindowPrivKey))
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct _DRIDrawablePrivRec
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync{
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync drm_drawable_t hwDrawable;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int drawableIndex;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScreenPtr pScreen;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int refCount;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int nrects;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} DRIDrawablePrivRec, *DRIDrawablePrivPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsyncstruct _DRIContextPrivRec
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync{
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync drm_context_t hwContext;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScreenPtr pScreen;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool valid3D;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DRIContextFlags flags;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void** pContextStore;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync};
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define DRI_SCREEN_PRIV(pScreen) ((DRIScreenPrivPtr) \
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync dixLookupPrivate(&(pScreen)->devPrivates, DRIScreenPrivKey))
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define DRI_SCREEN_PRIV_FROM_INDEX(screenIndex) ((DRIScreenPrivPtr) \
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync dixLookupPrivate(&screenInfo.screens[screenIndex]->devPrivates, \
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DRIScreenPrivKey))
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#define DRI_ENT_PRIV(pScrn) \
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ((DRIEntPrivIndex < 0) ? \
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync NULL: \
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ((DRIEntPrivPtr)(xf86GetEntityPrivate((pScrn)->entityList[0], \
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DRIEntPrivIndex)->ptr)))
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct _DRIScreenPrivRec
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync{
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool directRenderingSupport;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int drmFD; /* File descriptor for /dev/video/? */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync drm_handle_t hSAREA; /* Handle to SAREA, for mapping */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync XF86DRISAREAPtr pSAREA; /* Mapped pointer to SAREA */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync drm_context_t myContext; /* DDX Driver's context */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DRIContextPrivPtr myContextPriv;/* Pointer to server's private area */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DRIContextPrivPtr lastPartial3DContext; /* last one partially saved */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void** hiddenContextStore; /* hidden X context */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync void** partial3DContextStore; /* parital 3D context */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DRIInfoPtr pDriverInfo;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int nrWindows;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int nrWindowsVisible;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int nrWalked;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync drm_clip_rect_t private_buffer_rect; /* management of private buffers */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DrawablePtr fullscreen; /* pointer to fullscreen drawable */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync drm_clip_rect_t fullscreen_rect; /* fake rect for fullscreen mode */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DRIWrappedFuncsRec wrap;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DestroyWindowProcPtr DestroyWindow;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DrawablePtr DRIDrawables[SAREA_MAX_DRAWABLES];
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync DRIContextPrivPtr dummyCtxPriv; /* Pointer to dummy context */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool createDummyCtx;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool createDummyCtxPriv;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool grabbedDRILock;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool drmSIGIOHandlerInstalled;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool wrapped;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool windowsTouched;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int lockRefCount;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync drm_handle_t hLSAREA; /* Handle to SAREA containing lock, for mapping */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync XF86DRILSAREAPtr pLSAREA; /* Mapped pointer to SAREA containing lock */
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int* pLockRefCount;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int* pLockingContext;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync xf86_crtc_notify_proc_ptr xf86_crtc_notify;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} DRIScreenPrivRec, *DRIScreenPrivPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsynctypedef struct _DRIEntPrivRec {
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int drmFD;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool drmOpened;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool sAreaGrabbed;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync drm_handle_t hLSAREA;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync XF86DRILSAREAPtr pLSAREA;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync unsigned long sAreaSize;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int lockRefCount;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int lockingContext;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync ScreenPtr resOwner;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync Bool keepFDOpen;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync int refCount;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync} DRIEntPrivRec, *DRIEntPrivPtr;
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync
b9a21c3c91c47e090316e28d759194e46628ed49vboxsync#endif /* DRI_STRUCT_H */