2 * This code was stolen from RAC and adapted to control the legacy vga
6 * Copyright (c) 2007 Paulo R. Zanoni, Tiago Vignatti
8 * Permission is hereby granted, free of charge, to any person
9 * obtaining a copy of this software and associated documentation
10 * files (the "Software"), to deal in the Software without
11 * restriction, including without limitation the rights to use,
12 * copy, modify, merge, publish, distribute, sublicense, and/or sell
13 * copies of the Software, and to permit persons to whom the
14 * Software is furnished to do so, subject to the following
17 * The above copyright notice and this permission notice shall be
18 * included in all copies or substantial portions of the Software.
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
22 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
25 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27 * OTHER DEALINGS IN THE SOFTWARE.
31 #include "xorg-config.h"
33 #include "xf86VGAarbiter.h"
35 #ifdef HAVE_PCI_DEVICE_VGAARB_INIT
36 #include "xf86VGAarbiterPriv.h"
39 #include "pciaccess.h"
42 static GCFuncs VGAarbiterGCFuncs = {
43 VGAarbiterValidateGC, VGAarbiterChangeGC, VGAarbiterCopyGC,
44 VGAarbiterDestroyGC, VGAarbiterChangeClip, VGAarbiterDestroyClip,
48 static GCOps VGAarbiterGCOps = {
49 VGAarbiterFillSpans, VGAarbiterSetSpans, VGAarbiterPutImage,
50 VGAarbiterCopyArea, VGAarbiterCopyPlane, VGAarbiterPolyPoint,
51 VGAarbiterPolylines, VGAarbiterPolySegment, VGAarbiterPolyRectangle,
52 VGAarbiterPolyArc, VGAarbiterFillPolygon, VGAarbiterPolyFillRect,
53 VGAarbiterPolyFillArc, VGAarbiterPolyText8, VGAarbiterPolyText16,
54 VGAarbiterImageText8, VGAarbiterImageText16, VGAarbiterImageGlyphBlt,
55 VGAarbiterPolyGlyphBlt, VGAarbiterPushPixels,
56 {NULL} /* devPrivate */
59 static miPointerSpriteFuncRec VGAarbiterSpriteFuncs = {
60 VGAarbiterSpriteRealizeCursor, VGAarbiterSpriteUnrealizeCursor,
61 VGAarbiterSpriteSetCursor, VGAarbiterSpriteMoveCursor,
62 VGAarbiterDeviceCursorInitialize, VGAarbiterDeviceCursorCleanup
65 static DevPrivateKeyRec VGAarbiterScreenKeyRec;
66 #define VGAarbiterScreenKey (&VGAarbiterScreenKeyRec)
67 static DevPrivateKeyRec VGAarbiterGCKeyRec;
68 #define VGAarbiterGCKey (&VGAarbiterGCKeyRec)
70 static int vga_no_arb = 0;
72 xf86VGAarbiterInit(void)
74 if (pci_device_vgaarb_init() != 0) {
76 xf86Msg(X_WARNING, "VGA arbiter: cannot open kernel arbiter, no multi-card support\n");
81 xf86VGAarbiterFini(void)
85 pci_device_vgaarb_fini();
89 xf86VGAarbiterLock(ScrnInfoPtr pScrn)
93 pci_device_vgaarb_set_target(pScrn->vgaDev);
94 pci_device_vgaarb_lock();
98 xf86VGAarbiterUnlock(ScrnInfoPtr pScrn)
102 pci_device_vgaarb_unlock();
105 Bool xf86VGAarbiterAllowDRI(ScreenPtr pScreen)
109 ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
114 pci_device_vgaarb_get_info(pScrn->vgaDev, &vga_count, &rsrc_decodes);
124 xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn)
126 struct pci_device *dev;
132 pEnt = xf86Entities[pScrn->entityList[0]];
133 if (pEnt->bus.type != BUS_PCI)
136 dev = pEnt->bus.id.pci;
141 xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn)
145 pci_device_vgaarb_decodes(VGA_ARB_RSRC_LEGACY_MEM | VGA_ARB_RSRC_LEGACY_IO);
149 xf86VGAarbiterWrapFunctions(void)
152 VGAarbiterScreenPtr pScreenPriv;
153 miPointerScreenPtr PointPriv;
162 * we need to wrap the arbiter if we have more than
163 * one VGA card - hotplug cries.
165 pci_device_vgaarb_get_info(NULL, &vga_count, NULL);
166 if (vga_count < 2 || !xf86Screens)
169 xf86Msg(X_INFO,"Found %d VGA devices: arbiter wrapping enabled\n",
172 for (i = 0; i < xf86NumScreens; i++) {
173 pScreen = xf86Screens[i]->pScreen;
174 ps = GetPictureScreenIfSet(pScreen);
175 pScrn = xf86Screens[pScreen->myNum];
176 PointPriv = dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey);
178 if (!dixRegisterPrivateKey(&VGAarbiterGCKeyRec, PRIVATE_GC, sizeof(VGAarbiterGCRec)))
181 if (!dixRegisterPrivateKey(&VGAarbiterScreenKeyRec, PRIVATE_SCREEN, 0))
184 if (!(pScreenPriv = malloc(sizeof(VGAarbiterScreenRec))))
187 dixSetPrivate(&pScreen->devPrivates, VGAarbiterScreenKey, pScreenPriv);
189 WRAP_SCREEN(CloseScreen, VGAarbiterCloseScreen);
190 WRAP_SCREEN(SaveScreen, VGAarbiterSaveScreen);
191 WRAP_SCREEN(WakeupHandler, VGAarbiterWakeupHandler);
192 WRAP_SCREEN(BlockHandler, VGAarbiterBlockHandler);
193 WRAP_SCREEN(CreateGC, VGAarbiterCreateGC);
194 WRAP_SCREEN(GetImage, VGAarbiterGetImage);
195 WRAP_SCREEN(GetSpans, VGAarbiterGetSpans);
196 WRAP_SCREEN(SourceValidate, VGAarbiterSourceValidate);
197 WRAP_SCREEN(CopyWindow, VGAarbiterCopyWindow);
198 WRAP_SCREEN(ClearToBackground, VGAarbiterClearToBackground);
199 WRAP_SCREEN(CreatePixmap, VGAarbiterCreatePixmap);
200 WRAP_SCREEN(StoreColors, VGAarbiterStoreColors);
201 WRAP_SCREEN(DisplayCursor, VGAarbiterDisplayCursor);
202 WRAP_SCREEN(RealizeCursor, VGAarbiterRealizeCursor);
203 WRAP_SCREEN(UnrealizeCursor, VGAarbiterUnrealizeCursor);
204 WRAP_SCREEN(RecolorCursor, VGAarbiterRecolorCursor);
205 WRAP_SCREEN(SetCursorPosition, VGAarbiterSetCursorPosition);
206 WRAP_PICT(Composite,VGAarbiterComposite);
207 WRAP_PICT(Glyphs,VGAarbiterGlyphs);
208 WRAP_PICT(CompositeRects,VGAarbiterCompositeRects);
209 WRAP_SCREEN_INFO(AdjustFrame, VGAarbiterAdjustFrame);
210 WRAP_SCREEN_INFO(SwitchMode, VGAarbiterSwitchMode);
211 WRAP_SCREEN_INFO(EnterVT, VGAarbiterEnterVT);
212 WRAP_SCREEN_INFO(LeaveVT, VGAarbiterLeaveVT);
213 WRAP_SCREEN_INFO(FreeScreen, VGAarbiterFreeScreen);
222 VGAarbiterCloseScreen (int i, ScreenPtr pScreen)
225 ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
226 VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
227 &pScreen->devPrivates, VGAarbiterScreenKey);
228 miPointerScreenPtr PointPriv = (miPointerScreenPtr)dixLookupPrivate(
229 &pScreen->devPrivates, miPointerScreenKey);
230 PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
232 UNWRAP_SCREEN(CreateGC);
233 UNWRAP_SCREEN(CloseScreen);
234 UNWRAP_SCREEN(GetImage);
235 UNWRAP_SCREEN(GetSpans);
236 UNWRAP_SCREEN(SourceValidate);
237 UNWRAP_SCREEN(CopyWindow);
238 UNWRAP_SCREEN(ClearToBackground);
239 UNWRAP_SCREEN(SaveScreen);
240 UNWRAP_SCREEN(StoreColors);
241 UNWRAP_SCREEN(DisplayCursor);
242 UNWRAP_SCREEN(RealizeCursor);
243 UNWRAP_SCREEN(UnrealizeCursor);
244 UNWRAP_SCREEN(RecolorCursor);
245 UNWRAP_SCREEN(SetCursorPosition);
246 UNWRAP_PICT(Composite);
248 UNWRAP_PICT(CompositeRects);
249 UNWRAP_SCREEN_INFO(AdjustFrame);
250 UNWRAP_SCREEN_INFO(SwitchMode);
251 UNWRAP_SCREEN_INFO(EnterVT);
252 UNWRAP_SCREEN_INFO(LeaveVT);
253 UNWRAP_SCREEN_INFO(FreeScreen);
256 free((pointer) pScreenPriv);
257 xf86VGAarbiterLock(xf86Screens[i]);
258 val = (*pScreen->CloseScreen) (i, pScreen);
259 xf86VGAarbiterUnlock(xf86Screens[i]);
264 VGAarbiterBlockHandler(int i,
265 pointer blockData, pointer pTimeout, pointer pReadmask)
267 ScreenPtr pScreen = screenInfo.screens[i];
268 SCREEN_PROLOG(BlockHandler);
270 pScreen->BlockHandler(i, blockData, pTimeout, pReadmask);
272 SCREEN_EPILOG(BlockHandler, VGAarbiterBlockHandler);
276 VGAarbiterWakeupHandler(int i, pointer blockData, unsigned long result, pointer pReadmask)
278 ScreenPtr pScreen = screenInfo.screens[i];
279 SCREEN_PROLOG(WakeupHandler);
281 pScreen->WakeupHandler(i, blockData, result, pReadmask);
283 SCREEN_EPILOG(WakeupHandler, VGAarbiterWakeupHandler);
288 DrawablePtr pDrawable,
289 int sx, int sy, int w, int h,
291 unsigned long planemask,
295 ScreenPtr pScreen = pDrawable->pScreen;
296 SCREEN_PROLOG(GetImage);
297 // if (xf86Screens[pScreen->myNum]->vtSema) {
300 (*pScreen->GetImage) (pDrawable, sx, sy, w, h,
301 format, planemask, pdstLine);
303 SCREEN_EPILOG (GetImage, VGAarbiterGetImage);
308 DrawablePtr pDrawable,
316 ScreenPtr pScreen = pDrawable->pScreen;
318 SCREEN_PROLOG (GetSpans);
320 (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
322 SCREEN_EPILOG (GetSpans, VGAarbiterGetSpans);
326 VGAarbiterSourceValidate (
327 DrawablePtr pDrawable,
328 int x, int y, int width, int height )
330 ScreenPtr pScreen = pDrawable->pScreen;
331 SCREEN_PROLOG (SourceValidate);
333 if (pScreen->SourceValidate)
334 (*pScreen->SourceValidate) (pDrawable, x, y, width, height);
336 SCREEN_EPILOG (SourceValidate, VGAarbiterSourceValidate);
340 VGAarbiterCopyWindow(
342 DDXPointRec ptOldOrg,
345 ScreenPtr pScreen = pWin->drawable.pScreen;
347 SCREEN_PROLOG (CopyWindow);
349 (*pScreen->CopyWindow) (pWin, ptOldOrg, prgnSrc);
351 SCREEN_EPILOG (CopyWindow, VGAarbiterCopyWindow);
355 VGAarbiterClearToBackground (
359 Bool generateExposures )
361 ScreenPtr pScreen = pWin->drawable.pScreen;
363 SCREEN_PROLOG ( ClearToBackground);
365 (*pScreen->ClearToBackground) (pWin, x, y, w, h, generateExposures);
367 SCREEN_EPILOG (ClearToBackground, VGAarbiterClearToBackground);
371 VGAarbiterCreatePixmap(ScreenPtr pScreen, int w, int h, int depth, unsigned usage_hint)
375 SCREEN_PROLOG ( CreatePixmap);
377 pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, usage_hint);
379 SCREEN_EPILOG (CreatePixmap, VGAarbiterCreatePixmap);
385 VGAarbiterSaveScreen(ScreenPtr pScreen, Bool unblank)
389 SCREEN_PROLOG (SaveScreen);
391 val = (*pScreen->SaveScreen) (pScreen, unblank);
393 SCREEN_EPILOG (SaveScreen, VGAarbiterSaveScreen);
399 VGAarbiterStoreColors (
404 ScreenPtr pScreen = pmap->pScreen;
406 SCREEN_PROLOG (StoreColors);
408 (*pScreen->StoreColors) (pmap,ndef,pdefs);
410 SCREEN_EPILOG ( StoreColors, VGAarbiterStoreColors);
414 VGAarbiterRecolorCursor (
421 SCREEN_PROLOG (RecolorCursor);
423 (*pScreen->RecolorCursor) (pDev, pScreen, pCurs, displayed);
425 SCREEN_EPILOG ( RecolorCursor, VGAarbiterRecolorCursor);
429 VGAarbiterRealizeCursor (
437 SCREEN_PROLOG (RealizeCursor);
439 val = (*pScreen->RealizeCursor) (pDev, pScreen,pCursor);
441 SCREEN_EPILOG ( RealizeCursor, VGAarbiterRealizeCursor);
446 VGAarbiterUnrealizeCursor (
454 SCREEN_PROLOG (UnrealizeCursor);
456 val = (*pScreen->UnrealizeCursor) (pDev, pScreen, pCursor);
458 SCREEN_EPILOG ( UnrealizeCursor, VGAarbiterUnrealizeCursor);
463 VGAarbiterDisplayCursor (
471 SCREEN_PROLOG (DisplayCursor);
473 val = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor);
475 SCREEN_EPILOG ( DisplayCursor, VGAarbiterDisplayCursor);
480 VGAarbiterSetCursorPosition (
488 SCREEN_PROLOG (SetCursorPosition);
490 val = (*pScreen->SetCursorPosition) (pDev, pScreen, x, y, generateEvent);
492 SCREEN_EPILOG ( SetCursorPosition, VGAarbiterSetCursorPosition);
497 VGAarbiterAdjustFrame(int index, int x, int y, int flags)
499 ScreenPtr pScreen = screenInfo.screens[index];
500 VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
501 &pScreen->devPrivates, VGAarbiterScreenKey);
504 (*pScreenPriv->AdjustFrame)(index, x, y, flags);
509 VGAarbiterSwitchMode(int index, DisplayModePtr mode, int flags)
512 ScreenPtr pScreen = screenInfo.screens[index];
513 VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
514 &pScreen->devPrivates, VGAarbiterScreenKey);
517 val = (*pScreenPriv->SwitchMode)(index, mode, flags);
523 VGAarbiterEnterVT(int index, int flags)
526 ScrnInfoPtr pScrn = xf86Screens[index];
527 ScreenPtr pScreen = screenInfo.screens[index];
528 VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
529 &pScreen->devPrivates, VGAarbiterScreenKey);
532 pScrn->EnterVT = pScreenPriv->EnterVT;
533 val = (*pScrn->EnterVT)(index, flags);
534 pScreenPriv->EnterVT = pScrn->EnterVT;
535 pScrn->EnterVT = VGAarbiterEnterVT;
541 VGAarbiterLeaveVT(int index, int flags)
543 ScrnInfoPtr pScrn = xf86Screens[index];
544 ScreenPtr pScreen = screenInfo.screens[index];
545 VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
546 &pScreen->devPrivates, VGAarbiterScreenKey);
549 pScrn->LeaveVT = pScreenPriv->LeaveVT;
550 (*pScreenPriv->LeaveVT)(index, flags);
551 pScreenPriv->LeaveVT = pScrn->LeaveVT;
552 pScrn->LeaveVT = VGAarbiterLeaveVT;
557 VGAarbiterFreeScreen(int index, int flags)
559 ScreenPtr pScreen = screenInfo.screens[index];
560 VGAarbiterScreenPtr pScreenPriv = (VGAarbiterScreenPtr)dixLookupPrivate(
561 &pScreen->devPrivates, VGAarbiterScreenKey);
564 (*pScreenPriv->FreeScreen)(index, flags);
569 VGAarbiterCreateGC(GCPtr pGC)
571 ScreenPtr pScreen = pGC->pScreen;
572 VGAarbiterGCPtr pGCPriv = (VGAarbiterGCPtr)dixLookupPrivate(&pGC->devPrivates, VGAarbiterGCKey);
575 SCREEN_PROLOG(CreateGC);
577 ret = (*pScreen->CreateGC)(pGC);
580 SCREEN_EPILOG(CreateGC,VGAarbiterCreateGC);
587 VGAarbiterValidateGC(
589 unsigned long changes,
593 (*pGC->funcs->ValidateGC)(pGC, changes, pDraw);
599 VGAarbiterDestroyGC(GCPtr pGC)
602 (*pGC->funcs->DestroyGC)(pGC);
612 (*pGC->funcs->ChangeGC) (pGC, mask);
623 (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
628 VGAarbiterChangeClip (
635 (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
640 VGAarbiterCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
643 (* pgcDst->funcs->CopyClip)(pgcDst, pgcSrc);
648 VGAarbiterDestroyClip(GCPtr pGC)
651 (* pGC->funcs->DestroyClip)(pGC);
667 (*pGC->ops->FillSpans)(pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
677 register DDXPointPtr ppt,
684 (*pGC->ops->SetSpans)(pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
694 int x, int y, int w, int h,
701 (*pGC->ops->PutImage)(pDraw, pGC, depth, x, y, w, h,
702 leftPad, format, pImage);
713 int width, int height,
720 ret = (*pGC->ops->CopyArea)(pSrc, pDst,
721 pGC, srcx, srcy, width, height, dstx, dsty);
733 int width, int height,
735 unsigned long bitPlane )
741 ret = (*pGC->ops->CopyPlane)(pSrc, pDst, pGC, srcx, srcy,
742 width, height, dstx, dsty, bitPlane);
758 (*pGC->ops->PolyPoint)(pDraw, pGC, mode, npt, pptInit);
770 DDXPointPtr pptInit )
774 (*pGC->ops->Polylines)(pDraw, pGC, mode, npt, pptInit);
780 VGAarbiterPolySegment(
788 (*pGC->ops->PolySegment)(pDraw, pGC, nseg, pSeg);
794 VGAarbiterPolyRectangle(
798 xRectangle *pRectsInit )
802 (*pGC->ops->PolyRectangle)(pDraw, pGC, nRectsInit, pRectsInit);
816 (*pGC->ops->PolyArc)(pDraw, pGC, narcs, parcs);
822 VGAarbiterFillPolygon(
832 (*pGC->ops->FillPolygon)(pDraw, pGC, shape, mode, count, ptsIn);
838 VGAarbiterPolyFillRect(
842 xRectangle *prectInit)
846 (*pGC->ops->PolyFillRect)(pDraw, pGC, nrectFill, prectInit);
852 VGAarbiterPolyFillArc(
860 (*pGC->ops->PolyFillArc)(pDraw, pGC, narcs, parcs);
878 ret = (*pGC->ops->PolyText8)(pDraw, pGC, x, y, count, chars);
885 VGAarbiterPolyText16(
891 unsigned short *chars )
897 ret = (*pGC->ops->PolyText16)(pDraw, pGC, x, y, count, chars);
904 VGAarbiterImageText8(
914 (*pGC->ops->ImageText8)(pDraw, pGC, x, y, count, chars);
920 VGAarbiterImageText16(
926 unsigned short *chars )
930 (*pGC->ops->ImageText16)(pDraw, pGC, x, y, count, chars);
937 VGAarbiterImageGlyphBlt(
940 int xInit, int yInit,
947 (*pGC->ops->ImageGlyphBlt)(pDraw, pGC, xInit, yInit,
948 nglyph, ppci, pglyphBase);
954 VGAarbiterPolyGlyphBlt(
957 int xInit, int yInit,
964 (*pGC->ops->PolyGlyphBlt)(pDraw, pGC, xInit, yInit,
965 nglyph, ppci, pglyphBase);
971 VGAarbiterPushPixels(
975 int dx, int dy, int xOrg, int yOrg )
979 (*pGC->ops->PushPixels)(pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
987 VGAarbiterSpriteRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCur)
992 val = PointPriv->spriteFuncs->RealizeCursor(pDev, pScreen, pCur);
999 VGAarbiterSpriteUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCur)
1004 val = PointPriv->spriteFuncs->UnrealizeCursor(pDev, pScreen, pCur);
1011 VGAarbiterSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCur, int x, int y)
1015 PointPriv->spriteFuncs->SetCursor(pDev, pScreen, pCur, x, y);
1021 VGAarbiterSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
1025 PointPriv->spriteFuncs->MoveCursor(pDev, pScreen, x, y);
1031 VGAarbiterDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
1036 val = PointPriv->spriteFuncs->DeviceCursorInitialize(pDev, pScreen);
1043 VGAarbiterDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
1047 PointPriv->spriteFuncs->DeviceCursorCleanup(pDev, pScreen);
1053 VGAarbiterComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask,
1054 PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask,
1055 INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width,
1058 ScreenPtr pScreen = pDst->pDrawable->pScreen;
1059 PictureScreenPtr ps = GetPictureScreen(pScreen);
1061 PICTURE_PROLOGUE(Composite);
1064 (*ps->Composite) (op, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask, xDst,
1065 yDst, width, height);
1067 PICTURE_EPILOGUE(Composite, VGAarbiterComposite);
1071 VGAarbiterGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
1072 PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlist,
1073 GlyphListPtr list, GlyphPtr *glyphs)
1075 ScreenPtr pScreen = pDst->pDrawable->pScreen;
1076 PictureScreenPtr ps = GetPictureScreen(pScreen);
1078 PICTURE_PROLOGUE(Glyphs);
1081 (*ps->Glyphs)(op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
1083 PICTURE_EPILOGUE (Glyphs, VGAarbiterGlyphs);
1087 VGAarbiterCompositeRects(CARD8 op, PicturePtr pDst, xRenderColor *color, int nRect,
1090 ScreenPtr pScreen = pDst->pDrawable->pScreen;
1091 PictureScreenPtr ps = GetPictureScreen(pScreen);
1093 PICTURE_PROLOGUE(CompositeRects);
1096 (*ps->CompositeRects)(op, pDst, color, nRect, rects);
1098 PICTURE_EPILOGUE (CompositeRects, VGAarbiterCompositeRects);
1101 /* dummy functions */
1102 void xf86VGAarbiterInit(void) {}
1103 void xf86VGAarbiterFini(void) {}
1105 void xf86VGAarbiterLock(ScrnInfoPtr pScrn) {}
1106 void xf86VGAarbiterUnlock(ScrnInfoPtr pScrn) {}
1107 Bool xf86VGAarbiterAllowDRI(ScreenPtr pScreen) { return TRUE; }
1108 void xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn) {}
1109 void xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn) {}
1110 Bool xf86VGAarbiterWrapFunctions(void) { return FALSE; }