1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun * This code was stolen from RAC and adapted to control the legacy vga
3*4882a593Smuzhiyun * interface.
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun * Copyright (c) 2007 Paulo R. Zanoni, Tiago Vignatti
7*4882a593Smuzhiyun *
8*4882a593Smuzhiyun * Permission is hereby granted, free of charge, to any person
9*4882a593Smuzhiyun * obtaining a copy of this software and associated documentation
10*4882a593Smuzhiyun * files (the "Software"), to deal in the Software without
11*4882a593Smuzhiyun * restriction, including without limitation the rights to use,
12*4882a593Smuzhiyun * copy, modify, merge, publish, distribute, sublicense, and/or sell
13*4882a593Smuzhiyun * copies of the Software, and to permit persons to whom the
14*4882a593Smuzhiyun * Software is furnished to do so, subject to the following
15*4882a593Smuzhiyun * conditions:
16*4882a593Smuzhiyun *
17*4882a593Smuzhiyun * The above copyright notice and this permission notice shall be
18*4882a593Smuzhiyun * included in all copies or substantial portions of the Software.
19*4882a593Smuzhiyun *
20*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21*4882a593Smuzhiyun * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
22*4882a593Smuzhiyun * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23*4882a593Smuzhiyun * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
24*4882a593Smuzhiyun * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
25*4882a593Smuzhiyun * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
26*4882a593Smuzhiyun * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
27*4882a593Smuzhiyun * OTHER DEALINGS IN THE SOFTWARE.
28*4882a593Smuzhiyun *
29*4882a593Smuzhiyun */
30*4882a593Smuzhiyun
31*4882a593Smuzhiyun #include "xorg-config.h"
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun #include "xf86VGAarbiter.h"
34*4882a593Smuzhiyun #include "xf86VGAarbiterPriv.h"
35*4882a593Smuzhiyun #include "xf86Bus.h"
36*4882a593Smuzhiyun #include "xf86Priv.h"
37*4882a593Smuzhiyun #include "pciaccess.h"
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun static GCFuncs VGAarbiterGCFuncs = {
40*4882a593Smuzhiyun VGAarbiterValidateGC, VGAarbiterChangeGC, VGAarbiterCopyGC,
41*4882a593Smuzhiyun VGAarbiterDestroyGC, VGAarbiterChangeClip, VGAarbiterDestroyClip,
42*4882a593Smuzhiyun VGAarbiterCopyClip
43*4882a593Smuzhiyun };
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun static GCOps VGAarbiterGCOps = {
46*4882a593Smuzhiyun VGAarbiterFillSpans, VGAarbiterSetSpans, VGAarbiterPutImage,
47*4882a593Smuzhiyun VGAarbiterCopyArea, VGAarbiterCopyPlane, VGAarbiterPolyPoint,
48*4882a593Smuzhiyun VGAarbiterPolylines, VGAarbiterPolySegment, VGAarbiterPolyRectangle,
49*4882a593Smuzhiyun VGAarbiterPolyArc, VGAarbiterFillPolygon, VGAarbiterPolyFillRect,
50*4882a593Smuzhiyun VGAarbiterPolyFillArc, VGAarbiterPolyText8, VGAarbiterPolyText16,
51*4882a593Smuzhiyun VGAarbiterImageText8, VGAarbiterImageText16, VGAarbiterImageGlyphBlt,
52*4882a593Smuzhiyun VGAarbiterPolyGlyphBlt, VGAarbiterPushPixels,
53*4882a593Smuzhiyun };
54*4882a593Smuzhiyun
55*4882a593Smuzhiyun static miPointerSpriteFuncRec VGAarbiterSpriteFuncs = {
56*4882a593Smuzhiyun VGAarbiterSpriteRealizeCursor, VGAarbiterSpriteUnrealizeCursor,
57*4882a593Smuzhiyun VGAarbiterSpriteSetCursor, VGAarbiterSpriteMoveCursor,
58*4882a593Smuzhiyun VGAarbiterDeviceCursorInitialize, VGAarbiterDeviceCursorCleanup
59*4882a593Smuzhiyun };
60*4882a593Smuzhiyun
61*4882a593Smuzhiyun static DevPrivateKeyRec VGAarbiterScreenKeyRec;
62*4882a593Smuzhiyun
63*4882a593Smuzhiyun #define VGAarbiterScreenKey (&VGAarbiterScreenKeyRec)
64*4882a593Smuzhiyun static DevPrivateKeyRec VGAarbiterGCKeyRec;
65*4882a593Smuzhiyun
66*4882a593Smuzhiyun #define VGAarbiterGCKey (&VGAarbiterGCKeyRec)
67*4882a593Smuzhiyun
68*4882a593Smuzhiyun static int vga_no_arb = 0;
69*4882a593Smuzhiyun void
xf86VGAarbiterInit(void)70*4882a593Smuzhiyun xf86VGAarbiterInit(void)
71*4882a593Smuzhiyun {
72*4882a593Smuzhiyun if (pci_device_vgaarb_init() != 0) {
73*4882a593Smuzhiyun vga_no_arb = 1;
74*4882a593Smuzhiyun xf86Msg(X_WARNING,
75*4882a593Smuzhiyun "VGA arbiter: cannot open kernel arbiter, no multi-card support\n");
76*4882a593Smuzhiyun }
77*4882a593Smuzhiyun }
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun void
xf86VGAarbiterFini(void)80*4882a593Smuzhiyun xf86VGAarbiterFini(void)
81*4882a593Smuzhiyun {
82*4882a593Smuzhiyun if (vga_no_arb)
83*4882a593Smuzhiyun return;
84*4882a593Smuzhiyun pci_device_vgaarb_fini();
85*4882a593Smuzhiyun }
86*4882a593Smuzhiyun
87*4882a593Smuzhiyun void
xf86VGAarbiterLock(ScrnInfoPtr pScrn)88*4882a593Smuzhiyun xf86VGAarbiterLock(ScrnInfoPtr pScrn)
89*4882a593Smuzhiyun {
90*4882a593Smuzhiyun if (vga_no_arb)
91*4882a593Smuzhiyun return;
92*4882a593Smuzhiyun pci_device_vgaarb_set_target(pScrn->vgaDev);
93*4882a593Smuzhiyun pci_device_vgaarb_lock();
94*4882a593Smuzhiyun }
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun void
xf86VGAarbiterUnlock(ScrnInfoPtr pScrn)97*4882a593Smuzhiyun xf86VGAarbiterUnlock(ScrnInfoPtr pScrn)
98*4882a593Smuzhiyun {
99*4882a593Smuzhiyun if (vga_no_arb)
100*4882a593Smuzhiyun return;
101*4882a593Smuzhiyun pci_device_vgaarb_unlock();
102*4882a593Smuzhiyun }
103*4882a593Smuzhiyun
104*4882a593Smuzhiyun Bool
xf86VGAarbiterAllowDRI(ScreenPtr pScreen)105*4882a593Smuzhiyun xf86VGAarbiterAllowDRI(ScreenPtr pScreen)
106*4882a593Smuzhiyun {
107*4882a593Smuzhiyun int vga_count;
108*4882a593Smuzhiyun int rsrc_decodes = 0;
109*4882a593Smuzhiyun ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun if (vga_no_arb)
112*4882a593Smuzhiyun return TRUE;
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun pci_device_vgaarb_get_info(pScrn->vgaDev, &vga_count, &rsrc_decodes);
115*4882a593Smuzhiyun if (vga_count > 1) {
116*4882a593Smuzhiyun if (rsrc_decodes) {
117*4882a593Smuzhiyun return FALSE;
118*4882a593Smuzhiyun }
119*4882a593Smuzhiyun }
120*4882a593Smuzhiyun return TRUE;
121*4882a593Smuzhiyun }
122*4882a593Smuzhiyun
123*4882a593Smuzhiyun void
xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn)124*4882a593Smuzhiyun xf86VGAarbiterScrnInit(ScrnInfoPtr pScrn)
125*4882a593Smuzhiyun {
126*4882a593Smuzhiyun struct pci_device *dev;
127*4882a593Smuzhiyun EntityPtr pEnt;
128*4882a593Smuzhiyun
129*4882a593Smuzhiyun if (vga_no_arb)
130*4882a593Smuzhiyun return;
131*4882a593Smuzhiyun
132*4882a593Smuzhiyun pEnt = xf86Entities[pScrn->entityList[0]];
133*4882a593Smuzhiyun if (pEnt->bus.type != BUS_PCI)
134*4882a593Smuzhiyun return;
135*4882a593Smuzhiyun
136*4882a593Smuzhiyun dev = pEnt->bus.id.pci;
137*4882a593Smuzhiyun pScrn->vgaDev = dev;
138*4882a593Smuzhiyun }
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun void
xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn,int rsrc)141*4882a593Smuzhiyun xf86VGAarbiterDeviceDecodes(ScrnInfoPtr pScrn, int rsrc)
142*4882a593Smuzhiyun {
143*4882a593Smuzhiyun if (vga_no_arb)
144*4882a593Smuzhiyun return;
145*4882a593Smuzhiyun pci_device_vgaarb_set_target(pScrn->vgaDev);
146*4882a593Smuzhiyun pci_device_vgaarb_decodes(rsrc);
147*4882a593Smuzhiyun }
148*4882a593Smuzhiyun
149*4882a593Smuzhiyun Bool
xf86VGAarbiterWrapFunctions(void)150*4882a593Smuzhiyun xf86VGAarbiterWrapFunctions(void)
151*4882a593Smuzhiyun {
152*4882a593Smuzhiyun ScrnInfoPtr pScrn;
153*4882a593Smuzhiyun VGAarbiterScreenPtr pScreenPriv;
154*4882a593Smuzhiyun miPointerScreenPtr PointPriv;
155*4882a593Smuzhiyun PictureScreenPtr ps;
156*4882a593Smuzhiyun ScreenPtr pScreen;
157*4882a593Smuzhiyun int vga_count, i;
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun if (vga_no_arb)
160*4882a593Smuzhiyun return FALSE;
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun /*
163*4882a593Smuzhiyun * we need to wrap the arbiter if we have more than
164*4882a593Smuzhiyun * one VGA card - hotplug cries.
165*4882a593Smuzhiyun */
166*4882a593Smuzhiyun pci_device_vgaarb_get_info(NULL, &vga_count, NULL);
167*4882a593Smuzhiyun if (vga_count < 2 || !xf86Screens)
168*4882a593Smuzhiyun return FALSE;
169*4882a593Smuzhiyun
170*4882a593Smuzhiyun xf86Msg(X_INFO, "Found %d VGA devices: arbiter wrapping enabled\n",
171*4882a593Smuzhiyun vga_count);
172*4882a593Smuzhiyun
173*4882a593Smuzhiyun for (i = 0; i < xf86NumScreens; i++) {
174*4882a593Smuzhiyun pScreen = xf86Screens[i]->pScreen;
175*4882a593Smuzhiyun ps = GetPictureScreenIfSet(pScreen);
176*4882a593Smuzhiyun pScrn = xf86ScreenToScrn(pScreen);
177*4882a593Smuzhiyun PointPriv = dixLookupPrivate(&pScreen->devPrivates, miPointerScreenKey);
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun if (!dixRegisterPrivateKey
180*4882a593Smuzhiyun (&VGAarbiterGCKeyRec, PRIVATE_GC, sizeof(VGAarbiterGCRec)))
181*4882a593Smuzhiyun return FALSE;
182*4882a593Smuzhiyun
183*4882a593Smuzhiyun if (!dixRegisterPrivateKey(&VGAarbiterScreenKeyRec, PRIVATE_SCREEN, 0))
184*4882a593Smuzhiyun return FALSE;
185*4882a593Smuzhiyun
186*4882a593Smuzhiyun if (!(pScreenPriv = malloc(sizeof(VGAarbiterScreenRec))))
187*4882a593Smuzhiyun return FALSE;
188*4882a593Smuzhiyun
189*4882a593Smuzhiyun dixSetPrivate(&pScreen->devPrivates, VGAarbiterScreenKey, pScreenPriv);
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun WRAP_SCREEN(CloseScreen, VGAarbiterCloseScreen);
192*4882a593Smuzhiyun WRAP_SCREEN(SaveScreen, VGAarbiterSaveScreen);
193*4882a593Smuzhiyun WRAP_SCREEN(WakeupHandler, VGAarbiterWakeupHandler);
194*4882a593Smuzhiyun WRAP_SCREEN(BlockHandler, VGAarbiterBlockHandler);
195*4882a593Smuzhiyun WRAP_SCREEN(CreateGC, VGAarbiterCreateGC);
196*4882a593Smuzhiyun WRAP_SCREEN(GetImage, VGAarbiterGetImage);
197*4882a593Smuzhiyun WRAP_SCREEN(GetSpans, VGAarbiterGetSpans);
198*4882a593Smuzhiyun WRAP_SCREEN(SourceValidate, VGAarbiterSourceValidate);
199*4882a593Smuzhiyun WRAP_SCREEN(CopyWindow, VGAarbiterCopyWindow);
200*4882a593Smuzhiyun WRAP_SCREEN(ClearToBackground, VGAarbiterClearToBackground);
201*4882a593Smuzhiyun WRAP_SCREEN(CreatePixmap, VGAarbiterCreatePixmap);
202*4882a593Smuzhiyun WRAP_SCREEN(StoreColors, VGAarbiterStoreColors);
203*4882a593Smuzhiyun WRAP_SCREEN(DisplayCursor, VGAarbiterDisplayCursor);
204*4882a593Smuzhiyun WRAP_SCREEN(RealizeCursor, VGAarbiterRealizeCursor);
205*4882a593Smuzhiyun WRAP_SCREEN(UnrealizeCursor, VGAarbiterUnrealizeCursor);
206*4882a593Smuzhiyun WRAP_SCREEN(RecolorCursor, VGAarbiterRecolorCursor);
207*4882a593Smuzhiyun WRAP_SCREEN(SetCursorPosition, VGAarbiterSetCursorPosition);
208*4882a593Smuzhiyun WRAP_PICT(Composite, VGAarbiterComposite);
209*4882a593Smuzhiyun WRAP_PICT(Glyphs, VGAarbiterGlyphs);
210*4882a593Smuzhiyun WRAP_PICT(CompositeRects, VGAarbiterCompositeRects);
211*4882a593Smuzhiyun WRAP_SCREEN_INFO(AdjustFrame, VGAarbiterAdjustFrame);
212*4882a593Smuzhiyun WRAP_SCREEN_INFO(SwitchMode, VGAarbiterSwitchMode);
213*4882a593Smuzhiyun WRAP_SCREEN_INFO(EnterVT, VGAarbiterEnterVT);
214*4882a593Smuzhiyun WRAP_SCREEN_INFO(LeaveVT, VGAarbiterLeaveVT);
215*4882a593Smuzhiyun WRAP_SCREEN_INFO(FreeScreen, VGAarbiterFreeScreen);
216*4882a593Smuzhiyun WRAP_SPRITE;
217*4882a593Smuzhiyun }
218*4882a593Smuzhiyun
219*4882a593Smuzhiyun return TRUE;
220*4882a593Smuzhiyun }
221*4882a593Smuzhiyun
222*4882a593Smuzhiyun /* Screen funcs */
223*4882a593Smuzhiyun static Bool
VGAarbiterCloseScreen(ScreenPtr pScreen)224*4882a593Smuzhiyun VGAarbiterCloseScreen(ScreenPtr pScreen)
225*4882a593Smuzhiyun {
226*4882a593Smuzhiyun Bool val;
227*4882a593Smuzhiyun ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
228*4882a593Smuzhiyun VGAarbiterScreenPtr pScreenPriv =
229*4882a593Smuzhiyun (VGAarbiterScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
230*4882a593Smuzhiyun VGAarbiterScreenKey);
231*4882a593Smuzhiyun miPointerScreenPtr PointPriv =
232*4882a593Smuzhiyun (miPointerScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
233*4882a593Smuzhiyun miPointerScreenKey);
234*4882a593Smuzhiyun PictureScreenPtr ps = GetPictureScreenIfSet(pScreen);
235*4882a593Smuzhiyun
236*4882a593Smuzhiyun UNWRAP_SCREEN(CreateGC);
237*4882a593Smuzhiyun UNWRAP_SCREEN(CloseScreen);
238*4882a593Smuzhiyun UNWRAP_SCREEN(GetImage);
239*4882a593Smuzhiyun UNWRAP_SCREEN(GetSpans);
240*4882a593Smuzhiyun UNWRAP_SCREEN(SourceValidate);
241*4882a593Smuzhiyun UNWRAP_SCREEN(CopyWindow);
242*4882a593Smuzhiyun UNWRAP_SCREEN(ClearToBackground);
243*4882a593Smuzhiyun UNWRAP_SCREEN(SaveScreen);
244*4882a593Smuzhiyun UNWRAP_SCREEN(StoreColors);
245*4882a593Smuzhiyun UNWRAP_SCREEN(DisplayCursor);
246*4882a593Smuzhiyun UNWRAP_SCREEN(RealizeCursor);
247*4882a593Smuzhiyun UNWRAP_SCREEN(UnrealizeCursor);
248*4882a593Smuzhiyun UNWRAP_SCREEN(RecolorCursor);
249*4882a593Smuzhiyun UNWRAP_SCREEN(SetCursorPosition);
250*4882a593Smuzhiyun UNWRAP_PICT(Composite);
251*4882a593Smuzhiyun UNWRAP_PICT(Glyphs);
252*4882a593Smuzhiyun UNWRAP_PICT(CompositeRects);
253*4882a593Smuzhiyun UNWRAP_SCREEN_INFO(AdjustFrame);
254*4882a593Smuzhiyun UNWRAP_SCREEN_INFO(SwitchMode);
255*4882a593Smuzhiyun UNWRAP_SCREEN_INFO(EnterVT);
256*4882a593Smuzhiyun UNWRAP_SCREEN_INFO(LeaveVT);
257*4882a593Smuzhiyun UNWRAP_SCREEN_INFO(FreeScreen);
258*4882a593Smuzhiyun UNWRAP_SPRITE;
259*4882a593Smuzhiyun
260*4882a593Smuzhiyun free((void *) pScreenPriv);
261*4882a593Smuzhiyun xf86VGAarbiterLock(xf86ScreenToScrn(pScreen));
262*4882a593Smuzhiyun val = (*pScreen->CloseScreen) (pScreen);
263*4882a593Smuzhiyun xf86VGAarbiterUnlock(xf86ScreenToScrn(pScreen));
264*4882a593Smuzhiyun return val;
265*4882a593Smuzhiyun }
266*4882a593Smuzhiyun
267*4882a593Smuzhiyun static void
VGAarbiterBlockHandler(ScreenPtr pScreen,void * pTimeout)268*4882a593Smuzhiyun VGAarbiterBlockHandler(ScreenPtr pScreen, void *pTimeout)
269*4882a593Smuzhiyun {
270*4882a593Smuzhiyun SCREEN_PROLOG(BlockHandler);
271*4882a593Smuzhiyun VGAGet(pScreen);
272*4882a593Smuzhiyun pScreen->BlockHandler(pScreen, pTimeout);
273*4882a593Smuzhiyun VGAPut();
274*4882a593Smuzhiyun SCREEN_EPILOG(BlockHandler, VGAarbiterBlockHandler);
275*4882a593Smuzhiyun }
276*4882a593Smuzhiyun
277*4882a593Smuzhiyun static void
VGAarbiterWakeupHandler(ScreenPtr pScreen,int result)278*4882a593Smuzhiyun VGAarbiterWakeupHandler(ScreenPtr pScreen, int result)
279*4882a593Smuzhiyun {
280*4882a593Smuzhiyun SCREEN_PROLOG(WakeupHandler);
281*4882a593Smuzhiyun VGAGet(pScreen);
282*4882a593Smuzhiyun pScreen->WakeupHandler(pScreen, result);
283*4882a593Smuzhiyun VGAPut();
284*4882a593Smuzhiyun SCREEN_EPILOG(WakeupHandler, VGAarbiterWakeupHandler);
285*4882a593Smuzhiyun }
286*4882a593Smuzhiyun
287*4882a593Smuzhiyun static void
VGAarbiterGetImage(DrawablePtr pDrawable,int sx,int sy,int w,int h,unsigned int format,unsigned long planemask,char * pdstLine)288*4882a593Smuzhiyun VGAarbiterGetImage(DrawablePtr pDrawable,
289*4882a593Smuzhiyun int sx, int sy, int w, int h,
290*4882a593Smuzhiyun unsigned int format, unsigned long planemask, char *pdstLine)
291*4882a593Smuzhiyun {
292*4882a593Smuzhiyun ScreenPtr pScreen = pDrawable->pScreen;
293*4882a593Smuzhiyun
294*4882a593Smuzhiyun SCREEN_PROLOG(GetImage);
295*4882a593Smuzhiyun VGAGet(pScreen);
296*4882a593Smuzhiyun (*pScreen->GetImage) (pDrawable, sx, sy, w, h, format, planemask, pdstLine);
297*4882a593Smuzhiyun VGAPut();
298*4882a593Smuzhiyun SCREEN_EPILOG(GetImage, VGAarbiterGetImage);
299*4882a593Smuzhiyun }
300*4882a593Smuzhiyun
301*4882a593Smuzhiyun static void
VGAarbiterGetSpans(DrawablePtr pDrawable,int wMax,DDXPointPtr ppt,int * pwidth,int nspans,char * pdstStart)302*4882a593Smuzhiyun VGAarbiterGetSpans(DrawablePtr pDrawable,
303*4882a593Smuzhiyun int wMax,
304*4882a593Smuzhiyun DDXPointPtr ppt, int *pwidth, int nspans, char *pdstStart)
305*4882a593Smuzhiyun {
306*4882a593Smuzhiyun ScreenPtr pScreen = pDrawable->pScreen;
307*4882a593Smuzhiyun
308*4882a593Smuzhiyun SCREEN_PROLOG(GetSpans);
309*4882a593Smuzhiyun VGAGet(pScreen);
310*4882a593Smuzhiyun (*pScreen->GetSpans) (pDrawable, wMax, ppt, pwidth, nspans, pdstStart);
311*4882a593Smuzhiyun VGAPut();
312*4882a593Smuzhiyun SCREEN_EPILOG(GetSpans, VGAarbiterGetSpans);
313*4882a593Smuzhiyun }
314*4882a593Smuzhiyun
315*4882a593Smuzhiyun static void
VGAarbiterSourceValidate(DrawablePtr pDrawable,int x,int y,int width,int height,unsigned int subWindowMode)316*4882a593Smuzhiyun VGAarbiterSourceValidate(DrawablePtr pDrawable,
317*4882a593Smuzhiyun int x, int y, int width, int height,
318*4882a593Smuzhiyun unsigned int subWindowMode)
319*4882a593Smuzhiyun {
320*4882a593Smuzhiyun ScreenPtr pScreen = pDrawable->pScreen;
321*4882a593Smuzhiyun
322*4882a593Smuzhiyun SCREEN_PROLOG(SourceValidate);
323*4882a593Smuzhiyun VGAGet(pScreen);
324*4882a593Smuzhiyun if (pScreen->SourceValidate)
325*4882a593Smuzhiyun (*pScreen->SourceValidate) (pDrawable, x, y, width, height,
326*4882a593Smuzhiyun subWindowMode);
327*4882a593Smuzhiyun VGAPut();
328*4882a593Smuzhiyun SCREEN_EPILOG(SourceValidate, VGAarbiterSourceValidate);
329*4882a593Smuzhiyun }
330*4882a593Smuzhiyun
331*4882a593Smuzhiyun static void
VGAarbiterCopyWindow(WindowPtr pWin,DDXPointRec ptOldOrg,RegionPtr prgnSrc)332*4882a593Smuzhiyun VGAarbiterCopyWindow(WindowPtr pWin, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
333*4882a593Smuzhiyun {
334*4882a593Smuzhiyun ScreenPtr pScreen = pWin->drawable.pScreen;
335*4882a593Smuzhiyun
336*4882a593Smuzhiyun SCREEN_PROLOG(CopyWindow);
337*4882a593Smuzhiyun VGAGet(pScreen);
338*4882a593Smuzhiyun (*pScreen->CopyWindow) (pWin, ptOldOrg, prgnSrc);
339*4882a593Smuzhiyun VGAPut();
340*4882a593Smuzhiyun SCREEN_EPILOG(CopyWindow, VGAarbiterCopyWindow);
341*4882a593Smuzhiyun }
342*4882a593Smuzhiyun
343*4882a593Smuzhiyun static void
VGAarbiterClearToBackground(WindowPtr pWin,int x,int y,int w,int h,Bool generateExposures)344*4882a593Smuzhiyun VGAarbiterClearToBackground(WindowPtr pWin,
345*4882a593Smuzhiyun int x, int y, int w, int h, Bool generateExposures)
346*4882a593Smuzhiyun {
347*4882a593Smuzhiyun ScreenPtr pScreen = pWin->drawable.pScreen;
348*4882a593Smuzhiyun
349*4882a593Smuzhiyun SCREEN_PROLOG(ClearToBackground);
350*4882a593Smuzhiyun VGAGet(pScreen);
351*4882a593Smuzhiyun (*pScreen->ClearToBackground) (pWin, x, y, w, h, generateExposures);
352*4882a593Smuzhiyun VGAPut();
353*4882a593Smuzhiyun SCREEN_EPILOG(ClearToBackground, VGAarbiterClearToBackground);
354*4882a593Smuzhiyun }
355*4882a593Smuzhiyun
356*4882a593Smuzhiyun static PixmapPtr
VGAarbiterCreatePixmap(ScreenPtr pScreen,int w,int h,int depth,unsigned usage_hint)357*4882a593Smuzhiyun VGAarbiterCreatePixmap(ScreenPtr pScreen, int w, int h, int depth,
358*4882a593Smuzhiyun unsigned usage_hint)
359*4882a593Smuzhiyun {
360*4882a593Smuzhiyun PixmapPtr pPix;
361*4882a593Smuzhiyun
362*4882a593Smuzhiyun SCREEN_PROLOG(CreatePixmap);
363*4882a593Smuzhiyun VGAGet(pScreen);
364*4882a593Smuzhiyun pPix = (*pScreen->CreatePixmap) (pScreen, w, h, depth, usage_hint);
365*4882a593Smuzhiyun VGAPut();
366*4882a593Smuzhiyun SCREEN_EPILOG(CreatePixmap, VGAarbiterCreatePixmap);
367*4882a593Smuzhiyun
368*4882a593Smuzhiyun return pPix;
369*4882a593Smuzhiyun }
370*4882a593Smuzhiyun
371*4882a593Smuzhiyun static Bool
VGAarbiterSaveScreen(ScreenPtr pScreen,Bool unblank)372*4882a593Smuzhiyun VGAarbiterSaveScreen(ScreenPtr pScreen, Bool unblank)
373*4882a593Smuzhiyun {
374*4882a593Smuzhiyun Bool val;
375*4882a593Smuzhiyun
376*4882a593Smuzhiyun SCREEN_PROLOG(SaveScreen);
377*4882a593Smuzhiyun VGAGet(pScreen);
378*4882a593Smuzhiyun val = (*pScreen->SaveScreen) (pScreen, unblank);
379*4882a593Smuzhiyun VGAPut();
380*4882a593Smuzhiyun SCREEN_EPILOG(SaveScreen, VGAarbiterSaveScreen);
381*4882a593Smuzhiyun
382*4882a593Smuzhiyun return val;
383*4882a593Smuzhiyun }
384*4882a593Smuzhiyun
385*4882a593Smuzhiyun static void
VGAarbiterStoreColors(ColormapPtr pmap,int ndef,xColorItem * pdefs)386*4882a593Smuzhiyun VGAarbiterStoreColors(ColormapPtr pmap, int ndef, xColorItem * pdefs)
387*4882a593Smuzhiyun {
388*4882a593Smuzhiyun ScreenPtr pScreen = pmap->pScreen;
389*4882a593Smuzhiyun
390*4882a593Smuzhiyun SCREEN_PROLOG(StoreColors);
391*4882a593Smuzhiyun VGAGet(pScreen);
392*4882a593Smuzhiyun (*pScreen->StoreColors) (pmap, ndef, pdefs);
393*4882a593Smuzhiyun VGAPut();
394*4882a593Smuzhiyun SCREEN_EPILOG(StoreColors, VGAarbiterStoreColors);
395*4882a593Smuzhiyun }
396*4882a593Smuzhiyun
397*4882a593Smuzhiyun static void
VGAarbiterRecolorCursor(DeviceIntPtr pDev,ScreenPtr pScreen,CursorPtr pCurs,Bool displayed)398*4882a593Smuzhiyun VGAarbiterRecolorCursor(DeviceIntPtr pDev,
399*4882a593Smuzhiyun ScreenPtr pScreen, CursorPtr pCurs, Bool displayed)
400*4882a593Smuzhiyun {
401*4882a593Smuzhiyun SCREEN_PROLOG(RecolorCursor);
402*4882a593Smuzhiyun VGAGet(pScreen);
403*4882a593Smuzhiyun (*pScreen->RecolorCursor) (pDev, pScreen, pCurs, displayed);
404*4882a593Smuzhiyun VGAPut();
405*4882a593Smuzhiyun SCREEN_EPILOG(RecolorCursor, VGAarbiterRecolorCursor);
406*4882a593Smuzhiyun }
407*4882a593Smuzhiyun
408*4882a593Smuzhiyun static Bool
VGAarbiterRealizeCursor(DeviceIntPtr pDev,ScreenPtr pScreen,CursorPtr pCursor)409*4882a593Smuzhiyun VGAarbiterRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
410*4882a593Smuzhiyun {
411*4882a593Smuzhiyun Bool val;
412*4882a593Smuzhiyun
413*4882a593Smuzhiyun SCREEN_PROLOG(RealizeCursor);
414*4882a593Smuzhiyun VGAGet(pScreen);
415*4882a593Smuzhiyun val = (*pScreen->RealizeCursor) (pDev, pScreen, pCursor);
416*4882a593Smuzhiyun VGAPut();
417*4882a593Smuzhiyun SCREEN_EPILOG(RealizeCursor, VGAarbiterRealizeCursor);
418*4882a593Smuzhiyun return val;
419*4882a593Smuzhiyun }
420*4882a593Smuzhiyun
421*4882a593Smuzhiyun static Bool
VGAarbiterUnrealizeCursor(DeviceIntPtr pDev,ScreenPtr pScreen,CursorPtr pCursor)422*4882a593Smuzhiyun VGAarbiterUnrealizeCursor(DeviceIntPtr pDev,
423*4882a593Smuzhiyun ScreenPtr pScreen, CursorPtr pCursor)
424*4882a593Smuzhiyun {
425*4882a593Smuzhiyun Bool val;
426*4882a593Smuzhiyun
427*4882a593Smuzhiyun SCREEN_PROLOG(UnrealizeCursor);
428*4882a593Smuzhiyun VGAGet(pScreen);
429*4882a593Smuzhiyun val = (*pScreen->UnrealizeCursor) (pDev, pScreen, pCursor);
430*4882a593Smuzhiyun VGAPut();
431*4882a593Smuzhiyun SCREEN_EPILOG(UnrealizeCursor, VGAarbiterUnrealizeCursor);
432*4882a593Smuzhiyun return val;
433*4882a593Smuzhiyun }
434*4882a593Smuzhiyun
435*4882a593Smuzhiyun static Bool
VGAarbiterDisplayCursor(DeviceIntPtr pDev,ScreenPtr pScreen,CursorPtr pCursor)436*4882a593Smuzhiyun VGAarbiterDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
437*4882a593Smuzhiyun {
438*4882a593Smuzhiyun Bool val;
439*4882a593Smuzhiyun
440*4882a593Smuzhiyun SCREEN_PROLOG(DisplayCursor);
441*4882a593Smuzhiyun VGAGet(pScreen);
442*4882a593Smuzhiyun val = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor);
443*4882a593Smuzhiyun VGAPut();
444*4882a593Smuzhiyun SCREEN_EPILOG(DisplayCursor, VGAarbiterDisplayCursor);
445*4882a593Smuzhiyun return val;
446*4882a593Smuzhiyun }
447*4882a593Smuzhiyun
448*4882a593Smuzhiyun static Bool
VGAarbiterSetCursorPosition(DeviceIntPtr pDev,ScreenPtr pScreen,int x,int y,Bool generateEvent)449*4882a593Smuzhiyun VGAarbiterSetCursorPosition(DeviceIntPtr pDev,
450*4882a593Smuzhiyun ScreenPtr pScreen, int x, int y, Bool generateEvent)
451*4882a593Smuzhiyun {
452*4882a593Smuzhiyun Bool val;
453*4882a593Smuzhiyun
454*4882a593Smuzhiyun SCREEN_PROLOG(SetCursorPosition);
455*4882a593Smuzhiyun VGAGet(pScreen);
456*4882a593Smuzhiyun val = (*pScreen->SetCursorPosition) (pDev, pScreen, x, y, generateEvent);
457*4882a593Smuzhiyun VGAPut();
458*4882a593Smuzhiyun SCREEN_EPILOG(SetCursorPosition, VGAarbiterSetCursorPosition);
459*4882a593Smuzhiyun return val;
460*4882a593Smuzhiyun }
461*4882a593Smuzhiyun
462*4882a593Smuzhiyun static void
VGAarbiterAdjustFrame(ScrnInfoPtr pScrn,int x,int y)463*4882a593Smuzhiyun VGAarbiterAdjustFrame(ScrnInfoPtr pScrn, int x, int y)
464*4882a593Smuzhiyun {
465*4882a593Smuzhiyun ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
466*4882a593Smuzhiyun VGAarbiterScreenPtr pScreenPriv =
467*4882a593Smuzhiyun (VGAarbiterScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
468*4882a593Smuzhiyun VGAarbiterScreenKey);
469*4882a593Smuzhiyun
470*4882a593Smuzhiyun VGAGet(pScreen);
471*4882a593Smuzhiyun (*pScreenPriv->AdjustFrame) (pScrn, x, y);
472*4882a593Smuzhiyun VGAPut();
473*4882a593Smuzhiyun }
474*4882a593Smuzhiyun
475*4882a593Smuzhiyun static Bool
VGAarbiterSwitchMode(ScrnInfoPtr pScrn,DisplayModePtr mode)476*4882a593Smuzhiyun VGAarbiterSwitchMode(ScrnInfoPtr pScrn, DisplayModePtr mode)
477*4882a593Smuzhiyun {
478*4882a593Smuzhiyun Bool val;
479*4882a593Smuzhiyun ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
480*4882a593Smuzhiyun VGAarbiterScreenPtr pScreenPriv =
481*4882a593Smuzhiyun (VGAarbiterScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
482*4882a593Smuzhiyun VGAarbiterScreenKey);
483*4882a593Smuzhiyun
484*4882a593Smuzhiyun VGAGet(pScreen);
485*4882a593Smuzhiyun val = (*pScreenPriv->SwitchMode) (pScrn, mode);
486*4882a593Smuzhiyun VGAPut();
487*4882a593Smuzhiyun return val;
488*4882a593Smuzhiyun }
489*4882a593Smuzhiyun
490*4882a593Smuzhiyun static Bool
VGAarbiterEnterVT(ScrnInfoPtr pScrn)491*4882a593Smuzhiyun VGAarbiterEnterVT(ScrnInfoPtr pScrn)
492*4882a593Smuzhiyun {
493*4882a593Smuzhiyun Bool val;
494*4882a593Smuzhiyun ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
495*4882a593Smuzhiyun VGAarbiterScreenPtr pScreenPriv =
496*4882a593Smuzhiyun (VGAarbiterScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
497*4882a593Smuzhiyun VGAarbiterScreenKey);
498*4882a593Smuzhiyun
499*4882a593Smuzhiyun VGAGet(pScreen);
500*4882a593Smuzhiyun pScrn->EnterVT = pScreenPriv->EnterVT;
501*4882a593Smuzhiyun val = (*pScrn->EnterVT) (pScrn);
502*4882a593Smuzhiyun pScreenPriv->EnterVT = pScrn->EnterVT;
503*4882a593Smuzhiyun pScrn->EnterVT = VGAarbiterEnterVT;
504*4882a593Smuzhiyun VGAPut();
505*4882a593Smuzhiyun return val;
506*4882a593Smuzhiyun }
507*4882a593Smuzhiyun
508*4882a593Smuzhiyun static void
VGAarbiterLeaveVT(ScrnInfoPtr pScrn)509*4882a593Smuzhiyun VGAarbiterLeaveVT(ScrnInfoPtr pScrn)
510*4882a593Smuzhiyun {
511*4882a593Smuzhiyun ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
512*4882a593Smuzhiyun VGAarbiterScreenPtr pScreenPriv =
513*4882a593Smuzhiyun (VGAarbiterScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
514*4882a593Smuzhiyun VGAarbiterScreenKey);
515*4882a593Smuzhiyun
516*4882a593Smuzhiyun VGAGet(pScreen);
517*4882a593Smuzhiyun pScrn->LeaveVT = pScreenPriv->LeaveVT;
518*4882a593Smuzhiyun (*pScreenPriv->LeaveVT) (pScrn);
519*4882a593Smuzhiyun pScreenPriv->LeaveVT = pScrn->LeaveVT;
520*4882a593Smuzhiyun pScrn->LeaveVT = VGAarbiterLeaveVT;
521*4882a593Smuzhiyun VGAPut();
522*4882a593Smuzhiyun }
523*4882a593Smuzhiyun
524*4882a593Smuzhiyun static void
VGAarbiterFreeScreen(ScrnInfoPtr pScrn)525*4882a593Smuzhiyun VGAarbiterFreeScreen(ScrnInfoPtr pScrn)
526*4882a593Smuzhiyun {
527*4882a593Smuzhiyun ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
528*4882a593Smuzhiyun VGAarbiterScreenPtr pScreenPriv =
529*4882a593Smuzhiyun (VGAarbiterScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
530*4882a593Smuzhiyun VGAarbiterScreenKey);
531*4882a593Smuzhiyun
532*4882a593Smuzhiyun VGAGet(pScreen);
533*4882a593Smuzhiyun (*pScreenPriv->FreeScreen) (pScrn);
534*4882a593Smuzhiyun VGAPut();
535*4882a593Smuzhiyun }
536*4882a593Smuzhiyun
537*4882a593Smuzhiyun static Bool
VGAarbiterCreateGC(GCPtr pGC)538*4882a593Smuzhiyun VGAarbiterCreateGC(GCPtr pGC)
539*4882a593Smuzhiyun {
540*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
541*4882a593Smuzhiyun VGAarbiterGCPtr pGCPriv =
542*4882a593Smuzhiyun (VGAarbiterGCPtr) dixLookupPrivate(&pGC->devPrivates, VGAarbiterGCKey);
543*4882a593Smuzhiyun Bool ret;
544*4882a593Smuzhiyun
545*4882a593Smuzhiyun SCREEN_PROLOG(CreateGC);
546*4882a593Smuzhiyun ret = (*pScreen->CreateGC) (pGC);
547*4882a593Smuzhiyun GC_WRAP(pGC);
548*4882a593Smuzhiyun SCREEN_EPILOG(CreateGC, VGAarbiterCreateGC);
549*4882a593Smuzhiyun
550*4882a593Smuzhiyun return ret;
551*4882a593Smuzhiyun }
552*4882a593Smuzhiyun
553*4882a593Smuzhiyun /* GC funcs */
554*4882a593Smuzhiyun static void
VGAarbiterValidateGC(GCPtr pGC,unsigned long changes,DrawablePtr pDraw)555*4882a593Smuzhiyun VGAarbiterValidateGC(GCPtr pGC, unsigned long changes, DrawablePtr pDraw)
556*4882a593Smuzhiyun {
557*4882a593Smuzhiyun GC_UNWRAP(pGC);
558*4882a593Smuzhiyun (*pGC->funcs->ValidateGC) (pGC, changes, pDraw);
559*4882a593Smuzhiyun GC_WRAP(pGC);
560*4882a593Smuzhiyun }
561*4882a593Smuzhiyun
562*4882a593Smuzhiyun static void
VGAarbiterDestroyGC(GCPtr pGC)563*4882a593Smuzhiyun VGAarbiterDestroyGC(GCPtr pGC)
564*4882a593Smuzhiyun {
565*4882a593Smuzhiyun GC_UNWRAP(pGC);
566*4882a593Smuzhiyun (*pGC->funcs->DestroyGC) (pGC);
567*4882a593Smuzhiyun GC_WRAP(pGC);
568*4882a593Smuzhiyun }
569*4882a593Smuzhiyun
570*4882a593Smuzhiyun static void
VGAarbiterChangeGC(GCPtr pGC,unsigned long mask)571*4882a593Smuzhiyun VGAarbiterChangeGC(GCPtr pGC, unsigned long mask)
572*4882a593Smuzhiyun {
573*4882a593Smuzhiyun GC_UNWRAP(pGC);
574*4882a593Smuzhiyun (*pGC->funcs->ChangeGC) (pGC, mask);
575*4882a593Smuzhiyun GC_WRAP(pGC);
576*4882a593Smuzhiyun }
577*4882a593Smuzhiyun
578*4882a593Smuzhiyun static void
VGAarbiterCopyGC(GCPtr pGCSrc,unsigned long mask,GCPtr pGCDst)579*4882a593Smuzhiyun VGAarbiterCopyGC(GCPtr pGCSrc, unsigned long mask, GCPtr pGCDst)
580*4882a593Smuzhiyun {
581*4882a593Smuzhiyun GC_UNWRAP(pGCDst);
582*4882a593Smuzhiyun (*pGCDst->funcs->CopyGC) (pGCSrc, mask, pGCDst);
583*4882a593Smuzhiyun GC_WRAP(pGCDst);
584*4882a593Smuzhiyun }
585*4882a593Smuzhiyun
586*4882a593Smuzhiyun static void
VGAarbiterChangeClip(GCPtr pGC,int type,void * pvalue,int nrects)587*4882a593Smuzhiyun VGAarbiterChangeClip(GCPtr pGC, int type, void *pvalue, int nrects)
588*4882a593Smuzhiyun {
589*4882a593Smuzhiyun GC_UNWRAP(pGC);
590*4882a593Smuzhiyun (*pGC->funcs->ChangeClip) (pGC, type, pvalue, nrects);
591*4882a593Smuzhiyun GC_WRAP(pGC);
592*4882a593Smuzhiyun }
593*4882a593Smuzhiyun
594*4882a593Smuzhiyun static void
VGAarbiterCopyClip(GCPtr pgcDst,GCPtr pgcSrc)595*4882a593Smuzhiyun VGAarbiterCopyClip(GCPtr pgcDst, GCPtr pgcSrc)
596*4882a593Smuzhiyun {
597*4882a593Smuzhiyun GC_UNWRAP(pgcDst);
598*4882a593Smuzhiyun (*pgcDst->funcs->CopyClip) (pgcDst, pgcSrc);
599*4882a593Smuzhiyun GC_WRAP(pgcDst);
600*4882a593Smuzhiyun }
601*4882a593Smuzhiyun
602*4882a593Smuzhiyun static void
VGAarbiterDestroyClip(GCPtr pGC)603*4882a593Smuzhiyun VGAarbiterDestroyClip(GCPtr pGC)
604*4882a593Smuzhiyun {
605*4882a593Smuzhiyun GC_UNWRAP(pGC);
606*4882a593Smuzhiyun (*pGC->funcs->DestroyClip) (pGC);
607*4882a593Smuzhiyun GC_WRAP(pGC);
608*4882a593Smuzhiyun }
609*4882a593Smuzhiyun
610*4882a593Smuzhiyun /* GC Ops */
611*4882a593Smuzhiyun static void
VGAarbiterFillSpans(DrawablePtr pDraw,GC * pGC,int nInit,DDXPointPtr pptInit,int * pwidthInit,int fSorted)612*4882a593Smuzhiyun VGAarbiterFillSpans(DrawablePtr pDraw,
613*4882a593Smuzhiyun GC * pGC,
614*4882a593Smuzhiyun int nInit,
615*4882a593Smuzhiyun DDXPointPtr pptInit, int *pwidthInit, int fSorted)
616*4882a593Smuzhiyun {
617*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
618*4882a593Smuzhiyun
619*4882a593Smuzhiyun GC_UNWRAP(pGC);
620*4882a593Smuzhiyun VGAGet(pScreen);
621*4882a593Smuzhiyun (*pGC->ops->FillSpans) (pDraw, pGC, nInit, pptInit, pwidthInit, fSorted);
622*4882a593Smuzhiyun VGAPut();
623*4882a593Smuzhiyun GC_WRAP(pGC);
624*4882a593Smuzhiyun }
625*4882a593Smuzhiyun
626*4882a593Smuzhiyun static void
VGAarbiterSetSpans(DrawablePtr pDraw,GCPtr pGC,char * pcharsrc,register DDXPointPtr ppt,int * pwidth,int nspans,int fSorted)627*4882a593Smuzhiyun VGAarbiterSetSpans(DrawablePtr pDraw,
628*4882a593Smuzhiyun GCPtr pGC,
629*4882a593Smuzhiyun char *pcharsrc,
630*4882a593Smuzhiyun register DDXPointPtr ppt,
631*4882a593Smuzhiyun int *pwidth, int nspans, int fSorted)
632*4882a593Smuzhiyun {
633*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
634*4882a593Smuzhiyun
635*4882a593Smuzhiyun GC_UNWRAP(pGC);
636*4882a593Smuzhiyun VGAGet(pScreen);
637*4882a593Smuzhiyun (*pGC->ops->SetSpans) (pDraw, pGC, pcharsrc, ppt, pwidth, nspans, fSorted);
638*4882a593Smuzhiyun VGAPut();
639*4882a593Smuzhiyun GC_WRAP(pGC);
640*4882a593Smuzhiyun }
641*4882a593Smuzhiyun
642*4882a593Smuzhiyun static void
VGAarbiterPutImage(DrawablePtr pDraw,GCPtr pGC,int depth,int x,int y,int w,int h,int leftPad,int format,char * pImage)643*4882a593Smuzhiyun VGAarbiterPutImage(DrawablePtr pDraw,
644*4882a593Smuzhiyun GCPtr pGC,
645*4882a593Smuzhiyun int depth,
646*4882a593Smuzhiyun int x, int y, int w, int h,
647*4882a593Smuzhiyun int leftPad, int format, char *pImage)
648*4882a593Smuzhiyun {
649*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
650*4882a593Smuzhiyun
651*4882a593Smuzhiyun GC_UNWRAP(pGC);
652*4882a593Smuzhiyun VGAGet(pScreen);
653*4882a593Smuzhiyun (*pGC->ops->PutImage) (pDraw, pGC, depth, x, y, w, h,
654*4882a593Smuzhiyun leftPad, format, pImage);
655*4882a593Smuzhiyun VGAPut();
656*4882a593Smuzhiyun GC_WRAP(pGC);
657*4882a593Smuzhiyun }
658*4882a593Smuzhiyun
659*4882a593Smuzhiyun static RegionPtr
VGAarbiterCopyArea(DrawablePtr pSrc,DrawablePtr pDst,GC * pGC,int srcx,int srcy,int width,int height,int dstx,int dsty)660*4882a593Smuzhiyun VGAarbiterCopyArea(DrawablePtr pSrc,
661*4882a593Smuzhiyun DrawablePtr pDst,
662*4882a593Smuzhiyun GC * pGC,
663*4882a593Smuzhiyun int srcx, int srcy,
664*4882a593Smuzhiyun int width, int height, int dstx, int dsty)
665*4882a593Smuzhiyun {
666*4882a593Smuzhiyun RegionPtr ret;
667*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
668*4882a593Smuzhiyun
669*4882a593Smuzhiyun GC_UNWRAP(pGC);
670*4882a593Smuzhiyun VGAGet(pScreen);
671*4882a593Smuzhiyun ret = (*pGC->ops->CopyArea) (pSrc, pDst,
672*4882a593Smuzhiyun pGC, srcx, srcy, width, height, dstx, dsty);
673*4882a593Smuzhiyun VGAPut();
674*4882a593Smuzhiyun GC_WRAP(pGC);
675*4882a593Smuzhiyun return ret;
676*4882a593Smuzhiyun }
677*4882a593Smuzhiyun
678*4882a593Smuzhiyun static RegionPtr
VGAarbiterCopyPlane(DrawablePtr pSrc,DrawablePtr pDst,GCPtr pGC,int srcx,int srcy,int width,int height,int dstx,int dsty,unsigned long bitPlane)679*4882a593Smuzhiyun VGAarbiterCopyPlane(DrawablePtr pSrc,
680*4882a593Smuzhiyun DrawablePtr pDst,
681*4882a593Smuzhiyun GCPtr pGC,
682*4882a593Smuzhiyun int srcx, int srcy,
683*4882a593Smuzhiyun int width, int height,
684*4882a593Smuzhiyun int dstx, int dsty, unsigned long bitPlane)
685*4882a593Smuzhiyun {
686*4882a593Smuzhiyun RegionPtr ret;
687*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
688*4882a593Smuzhiyun
689*4882a593Smuzhiyun GC_UNWRAP(pGC);
690*4882a593Smuzhiyun VGAGet(pScreen);
691*4882a593Smuzhiyun ret = (*pGC->ops->CopyPlane) (pSrc, pDst, pGC, srcx, srcy,
692*4882a593Smuzhiyun width, height, dstx, dsty, bitPlane);
693*4882a593Smuzhiyun VGAPut();
694*4882a593Smuzhiyun GC_WRAP(pGC);
695*4882a593Smuzhiyun return ret;
696*4882a593Smuzhiyun }
697*4882a593Smuzhiyun
698*4882a593Smuzhiyun static void
VGAarbiterPolyPoint(DrawablePtr pDraw,GCPtr pGC,int mode,int npt,xPoint * pptInit)699*4882a593Smuzhiyun VGAarbiterPolyPoint(DrawablePtr pDraw,
700*4882a593Smuzhiyun GCPtr pGC, int mode, int npt, xPoint * pptInit)
701*4882a593Smuzhiyun {
702*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
703*4882a593Smuzhiyun
704*4882a593Smuzhiyun GC_UNWRAP(pGC);
705*4882a593Smuzhiyun VGAGet(pScreen);
706*4882a593Smuzhiyun (*pGC->ops->PolyPoint) (pDraw, pGC, mode, npt, pptInit);
707*4882a593Smuzhiyun VGAPut();
708*4882a593Smuzhiyun GC_WRAP(pGC);
709*4882a593Smuzhiyun }
710*4882a593Smuzhiyun
711*4882a593Smuzhiyun static void
VGAarbiterPolylines(DrawablePtr pDraw,GCPtr pGC,int mode,int npt,DDXPointPtr pptInit)712*4882a593Smuzhiyun VGAarbiterPolylines(DrawablePtr pDraw,
713*4882a593Smuzhiyun GCPtr pGC, int mode, int npt, DDXPointPtr pptInit)
714*4882a593Smuzhiyun {
715*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
716*4882a593Smuzhiyun
717*4882a593Smuzhiyun GC_UNWRAP(pGC);
718*4882a593Smuzhiyun VGAGet(pScreen);
719*4882a593Smuzhiyun (*pGC->ops->Polylines) (pDraw, pGC, mode, npt, pptInit);
720*4882a593Smuzhiyun VGAPut();
721*4882a593Smuzhiyun GC_WRAP(pGC);
722*4882a593Smuzhiyun }
723*4882a593Smuzhiyun
724*4882a593Smuzhiyun static void
VGAarbiterPolySegment(DrawablePtr pDraw,GCPtr pGC,int nseg,xSegment * pSeg)725*4882a593Smuzhiyun VGAarbiterPolySegment(DrawablePtr pDraw, GCPtr pGC, int nseg, xSegment * pSeg)
726*4882a593Smuzhiyun {
727*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
728*4882a593Smuzhiyun
729*4882a593Smuzhiyun GC_UNWRAP(pGC);
730*4882a593Smuzhiyun VGAGet(pScreen);
731*4882a593Smuzhiyun (*pGC->ops->PolySegment) (pDraw, pGC, nseg, pSeg);
732*4882a593Smuzhiyun VGAPut();
733*4882a593Smuzhiyun GC_WRAP(pGC);
734*4882a593Smuzhiyun }
735*4882a593Smuzhiyun
736*4882a593Smuzhiyun static void
VGAarbiterPolyRectangle(DrawablePtr pDraw,GCPtr pGC,int nRectsInit,xRectangle * pRectsInit)737*4882a593Smuzhiyun VGAarbiterPolyRectangle(DrawablePtr pDraw,
738*4882a593Smuzhiyun GCPtr pGC, int nRectsInit, xRectangle *pRectsInit)
739*4882a593Smuzhiyun {
740*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
741*4882a593Smuzhiyun
742*4882a593Smuzhiyun GC_UNWRAP(pGC);
743*4882a593Smuzhiyun VGAGet(pScreen);
744*4882a593Smuzhiyun (*pGC->ops->PolyRectangle) (pDraw, pGC, nRectsInit, pRectsInit);
745*4882a593Smuzhiyun VGAPut();
746*4882a593Smuzhiyun GC_WRAP(pGC);
747*4882a593Smuzhiyun }
748*4882a593Smuzhiyun
749*4882a593Smuzhiyun static void
VGAarbiterPolyArc(DrawablePtr pDraw,GCPtr pGC,int narcs,xArc * parcs)750*4882a593Smuzhiyun VGAarbiterPolyArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
751*4882a593Smuzhiyun {
752*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
753*4882a593Smuzhiyun
754*4882a593Smuzhiyun GC_UNWRAP(pGC);
755*4882a593Smuzhiyun VGAGet(pScreen);
756*4882a593Smuzhiyun (*pGC->ops->PolyArc) (pDraw, pGC, narcs, parcs);
757*4882a593Smuzhiyun VGAPut();
758*4882a593Smuzhiyun GC_WRAP(pGC);
759*4882a593Smuzhiyun }
760*4882a593Smuzhiyun
761*4882a593Smuzhiyun static void
VGAarbiterFillPolygon(DrawablePtr pDraw,GCPtr pGC,int shape,int mode,int count,DDXPointPtr ptsIn)762*4882a593Smuzhiyun VGAarbiterFillPolygon(DrawablePtr pDraw,
763*4882a593Smuzhiyun GCPtr pGC,
764*4882a593Smuzhiyun int shape, int mode, int count, DDXPointPtr ptsIn)
765*4882a593Smuzhiyun {
766*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
767*4882a593Smuzhiyun
768*4882a593Smuzhiyun GC_UNWRAP(pGC);
769*4882a593Smuzhiyun VGAGet(pScreen);
770*4882a593Smuzhiyun (*pGC->ops->FillPolygon) (pDraw, pGC, shape, mode, count, ptsIn);
771*4882a593Smuzhiyun VGAPut();
772*4882a593Smuzhiyun GC_WRAP(pGC);
773*4882a593Smuzhiyun }
774*4882a593Smuzhiyun
775*4882a593Smuzhiyun static void
VGAarbiterPolyFillRect(DrawablePtr pDraw,GCPtr pGC,int nrectFill,xRectangle * prectInit)776*4882a593Smuzhiyun VGAarbiterPolyFillRect(DrawablePtr pDraw,
777*4882a593Smuzhiyun GCPtr pGC, int nrectFill, xRectangle *prectInit)
778*4882a593Smuzhiyun {
779*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
780*4882a593Smuzhiyun
781*4882a593Smuzhiyun GC_UNWRAP(pGC);
782*4882a593Smuzhiyun VGAGet(pScreen);
783*4882a593Smuzhiyun (*pGC->ops->PolyFillRect) (pDraw, pGC, nrectFill, prectInit);
784*4882a593Smuzhiyun VGAPut();
785*4882a593Smuzhiyun GC_WRAP(pGC);
786*4882a593Smuzhiyun }
787*4882a593Smuzhiyun
788*4882a593Smuzhiyun static void
VGAarbiterPolyFillArc(DrawablePtr pDraw,GCPtr pGC,int narcs,xArc * parcs)789*4882a593Smuzhiyun VGAarbiterPolyFillArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs)
790*4882a593Smuzhiyun {
791*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
792*4882a593Smuzhiyun
793*4882a593Smuzhiyun GC_UNWRAP(pGC);
794*4882a593Smuzhiyun VGAGet(pScreen);
795*4882a593Smuzhiyun (*pGC->ops->PolyFillArc) (pDraw, pGC, narcs, parcs);
796*4882a593Smuzhiyun VGAPut();
797*4882a593Smuzhiyun GC_WRAP(pGC);
798*4882a593Smuzhiyun }
799*4882a593Smuzhiyun
800*4882a593Smuzhiyun static int
VGAarbiterPolyText8(DrawablePtr pDraw,GCPtr pGC,int x,int y,int count,char * chars)801*4882a593Smuzhiyun VGAarbiterPolyText8(DrawablePtr pDraw,
802*4882a593Smuzhiyun GCPtr pGC, int x, int y, int count, char *chars)
803*4882a593Smuzhiyun {
804*4882a593Smuzhiyun int ret;
805*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
806*4882a593Smuzhiyun
807*4882a593Smuzhiyun GC_UNWRAP(pGC);
808*4882a593Smuzhiyun VGAGet(pScreen);
809*4882a593Smuzhiyun ret = (*pGC->ops->PolyText8) (pDraw, pGC, x, y, count, chars);
810*4882a593Smuzhiyun VGAPut();
811*4882a593Smuzhiyun GC_WRAP(pGC);
812*4882a593Smuzhiyun return ret;
813*4882a593Smuzhiyun }
814*4882a593Smuzhiyun
815*4882a593Smuzhiyun static int
VGAarbiterPolyText16(DrawablePtr pDraw,GCPtr pGC,int x,int y,int count,unsigned short * chars)816*4882a593Smuzhiyun VGAarbiterPolyText16(DrawablePtr pDraw,
817*4882a593Smuzhiyun GCPtr pGC, int x, int y, int count, unsigned short *chars)
818*4882a593Smuzhiyun {
819*4882a593Smuzhiyun int ret;
820*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
821*4882a593Smuzhiyun
822*4882a593Smuzhiyun GC_UNWRAP(pGC);
823*4882a593Smuzhiyun VGAGet(pScreen);
824*4882a593Smuzhiyun ret = (*pGC->ops->PolyText16) (pDraw, pGC, x, y, count, chars);
825*4882a593Smuzhiyun VGAPut();
826*4882a593Smuzhiyun GC_WRAP(pGC);
827*4882a593Smuzhiyun return ret;
828*4882a593Smuzhiyun }
829*4882a593Smuzhiyun
830*4882a593Smuzhiyun static void
VGAarbiterImageText8(DrawablePtr pDraw,GCPtr pGC,int x,int y,int count,char * chars)831*4882a593Smuzhiyun VGAarbiterImageText8(DrawablePtr pDraw,
832*4882a593Smuzhiyun GCPtr pGC, int x, int y, int count, char *chars)
833*4882a593Smuzhiyun {
834*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
835*4882a593Smuzhiyun
836*4882a593Smuzhiyun GC_UNWRAP(pGC);
837*4882a593Smuzhiyun VGAGet(pScreen);
838*4882a593Smuzhiyun (*pGC->ops->ImageText8) (pDraw, pGC, x, y, count, chars);
839*4882a593Smuzhiyun VGAPut();
840*4882a593Smuzhiyun GC_WRAP(pGC);
841*4882a593Smuzhiyun }
842*4882a593Smuzhiyun
843*4882a593Smuzhiyun static void
VGAarbiterImageText16(DrawablePtr pDraw,GCPtr pGC,int x,int y,int count,unsigned short * chars)844*4882a593Smuzhiyun VGAarbiterImageText16(DrawablePtr pDraw,
845*4882a593Smuzhiyun GCPtr pGC, int x, int y, int count, unsigned short *chars)
846*4882a593Smuzhiyun {
847*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
848*4882a593Smuzhiyun
849*4882a593Smuzhiyun GC_UNWRAP(pGC);
850*4882a593Smuzhiyun VGAGet(pScreen);
851*4882a593Smuzhiyun (*pGC->ops->ImageText16) (pDraw, pGC, x, y, count, chars);
852*4882a593Smuzhiyun VGAPut();
853*4882a593Smuzhiyun GC_WRAP(pGC);
854*4882a593Smuzhiyun }
855*4882a593Smuzhiyun
856*4882a593Smuzhiyun static void
VGAarbiterImageGlyphBlt(DrawablePtr pDraw,GCPtr pGC,int xInit,int yInit,unsigned int nglyph,CharInfoPtr * ppci,void * pglyphBase)857*4882a593Smuzhiyun VGAarbiterImageGlyphBlt(DrawablePtr pDraw,
858*4882a593Smuzhiyun GCPtr pGC,
859*4882a593Smuzhiyun int xInit, int yInit,
860*4882a593Smuzhiyun unsigned int nglyph,
861*4882a593Smuzhiyun CharInfoPtr * ppci, void *pglyphBase)
862*4882a593Smuzhiyun {
863*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
864*4882a593Smuzhiyun
865*4882a593Smuzhiyun GC_UNWRAP(pGC);
866*4882a593Smuzhiyun VGAGet(pScreen);
867*4882a593Smuzhiyun (*pGC->ops->ImageGlyphBlt) (pDraw, pGC, xInit, yInit,
868*4882a593Smuzhiyun nglyph, ppci, pglyphBase);
869*4882a593Smuzhiyun VGAPut();
870*4882a593Smuzhiyun GC_WRAP(pGC);
871*4882a593Smuzhiyun }
872*4882a593Smuzhiyun
873*4882a593Smuzhiyun static void
VGAarbiterPolyGlyphBlt(DrawablePtr pDraw,GCPtr pGC,int xInit,int yInit,unsigned int nglyph,CharInfoPtr * ppci,void * pglyphBase)874*4882a593Smuzhiyun VGAarbiterPolyGlyphBlt(DrawablePtr pDraw,
875*4882a593Smuzhiyun GCPtr pGC,
876*4882a593Smuzhiyun int xInit, int yInit,
877*4882a593Smuzhiyun unsigned int nglyph,
878*4882a593Smuzhiyun CharInfoPtr * ppci, void *pglyphBase)
879*4882a593Smuzhiyun {
880*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
881*4882a593Smuzhiyun
882*4882a593Smuzhiyun GC_UNWRAP(pGC);
883*4882a593Smuzhiyun VGAGet(pScreen);
884*4882a593Smuzhiyun (*pGC->ops->PolyGlyphBlt) (pDraw, pGC, xInit, yInit,
885*4882a593Smuzhiyun nglyph, ppci, pglyphBase);
886*4882a593Smuzhiyun VGAPut();
887*4882a593Smuzhiyun GC_WRAP(pGC);
888*4882a593Smuzhiyun }
889*4882a593Smuzhiyun
890*4882a593Smuzhiyun static void
VGAarbiterPushPixels(GCPtr pGC,PixmapPtr pBitMap,DrawablePtr pDraw,int dx,int dy,int xOrg,int yOrg)891*4882a593Smuzhiyun VGAarbiterPushPixels(GCPtr pGC,
892*4882a593Smuzhiyun PixmapPtr pBitMap,
893*4882a593Smuzhiyun DrawablePtr pDraw, int dx, int dy, int xOrg, int yOrg)
894*4882a593Smuzhiyun {
895*4882a593Smuzhiyun ScreenPtr pScreen = pGC->pScreen;
896*4882a593Smuzhiyun
897*4882a593Smuzhiyun GC_UNWRAP(pGC);
898*4882a593Smuzhiyun VGAGet(pScreen);
899*4882a593Smuzhiyun (*pGC->ops->PushPixels) (pGC, pBitMap, pDraw, dx, dy, xOrg, yOrg);
900*4882a593Smuzhiyun VGAPut();
901*4882a593Smuzhiyun GC_WRAP(pGC);
902*4882a593Smuzhiyun }
903*4882a593Smuzhiyun
904*4882a593Smuzhiyun /* miSpriteFuncs */
905*4882a593Smuzhiyun static Bool
VGAarbiterSpriteRealizeCursor(DeviceIntPtr pDev,ScreenPtr pScreen,CursorPtr pCur)906*4882a593Smuzhiyun VGAarbiterSpriteRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
907*4882a593Smuzhiyun CursorPtr pCur)
908*4882a593Smuzhiyun {
909*4882a593Smuzhiyun Bool val;
910*4882a593Smuzhiyun
911*4882a593Smuzhiyun SPRITE_PROLOG;
912*4882a593Smuzhiyun VGAGet(pScreen);
913*4882a593Smuzhiyun val = PointPriv->spriteFuncs->RealizeCursor(pDev, pScreen, pCur);
914*4882a593Smuzhiyun VGAPut();
915*4882a593Smuzhiyun SPRITE_EPILOG;
916*4882a593Smuzhiyun return val;
917*4882a593Smuzhiyun }
918*4882a593Smuzhiyun
919*4882a593Smuzhiyun static Bool
VGAarbiterSpriteUnrealizeCursor(DeviceIntPtr pDev,ScreenPtr pScreen,CursorPtr pCur)920*4882a593Smuzhiyun VGAarbiterSpriteUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
921*4882a593Smuzhiyun CursorPtr pCur)
922*4882a593Smuzhiyun {
923*4882a593Smuzhiyun Bool val;
924*4882a593Smuzhiyun
925*4882a593Smuzhiyun SPRITE_PROLOG;
926*4882a593Smuzhiyun VGAGet(pScreen);
927*4882a593Smuzhiyun val = PointPriv->spriteFuncs->UnrealizeCursor(pDev, pScreen, pCur);
928*4882a593Smuzhiyun VGAPut();
929*4882a593Smuzhiyun SPRITE_EPILOG;
930*4882a593Smuzhiyun return val;
931*4882a593Smuzhiyun }
932*4882a593Smuzhiyun
933*4882a593Smuzhiyun static void
VGAarbiterSpriteSetCursor(DeviceIntPtr pDev,ScreenPtr pScreen,CursorPtr pCur,int x,int y)934*4882a593Smuzhiyun VGAarbiterSpriteSetCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCur,
935*4882a593Smuzhiyun int x, int y)
936*4882a593Smuzhiyun {
937*4882a593Smuzhiyun SPRITE_PROLOG;
938*4882a593Smuzhiyun VGAGet(pScreen);
939*4882a593Smuzhiyun PointPriv->spriteFuncs->SetCursor(pDev, pScreen, pCur, x, y);
940*4882a593Smuzhiyun VGAPut();
941*4882a593Smuzhiyun SPRITE_EPILOG;
942*4882a593Smuzhiyun }
943*4882a593Smuzhiyun
944*4882a593Smuzhiyun static void
VGAarbiterSpriteMoveCursor(DeviceIntPtr pDev,ScreenPtr pScreen,int x,int y)945*4882a593Smuzhiyun VGAarbiterSpriteMoveCursor(DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
946*4882a593Smuzhiyun {
947*4882a593Smuzhiyun SPRITE_PROLOG;
948*4882a593Smuzhiyun VGAGet(pScreen);
949*4882a593Smuzhiyun PointPriv->spriteFuncs->MoveCursor(pDev, pScreen, x, y);
950*4882a593Smuzhiyun VGAPut();
951*4882a593Smuzhiyun SPRITE_EPILOG;
952*4882a593Smuzhiyun }
953*4882a593Smuzhiyun
954*4882a593Smuzhiyun static Bool
VGAarbiterDeviceCursorInitialize(DeviceIntPtr pDev,ScreenPtr pScreen)955*4882a593Smuzhiyun VGAarbiterDeviceCursorInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
956*4882a593Smuzhiyun {
957*4882a593Smuzhiyun Bool val;
958*4882a593Smuzhiyun
959*4882a593Smuzhiyun SPRITE_PROLOG;
960*4882a593Smuzhiyun VGAGet(pScreen);
961*4882a593Smuzhiyun val = PointPriv->spriteFuncs->DeviceCursorInitialize(pDev, pScreen);
962*4882a593Smuzhiyun VGAPut();
963*4882a593Smuzhiyun SPRITE_EPILOG;
964*4882a593Smuzhiyun return val;
965*4882a593Smuzhiyun }
966*4882a593Smuzhiyun
967*4882a593Smuzhiyun static void
VGAarbiterDeviceCursorCleanup(DeviceIntPtr pDev,ScreenPtr pScreen)968*4882a593Smuzhiyun VGAarbiterDeviceCursorCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
969*4882a593Smuzhiyun {
970*4882a593Smuzhiyun SPRITE_PROLOG;
971*4882a593Smuzhiyun VGAGet(pScreen);
972*4882a593Smuzhiyun PointPriv->spriteFuncs->DeviceCursorCleanup(pDev, pScreen);
973*4882a593Smuzhiyun VGAPut();
974*4882a593Smuzhiyun SPRITE_EPILOG;
975*4882a593Smuzhiyun }
976*4882a593Smuzhiyun
977*4882a593Smuzhiyun static void
VGAarbiterComposite(CARD8 op,PicturePtr pSrc,PicturePtr pMask,PicturePtr pDst,INT16 xSrc,INT16 ySrc,INT16 xMask,INT16 yMask,INT16 xDst,INT16 yDst,CARD16 width,CARD16 height)978*4882a593Smuzhiyun VGAarbiterComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask,
979*4882a593Smuzhiyun PicturePtr pDst, INT16 xSrc, INT16 ySrc, INT16 xMask,
980*4882a593Smuzhiyun INT16 yMask, INT16 xDst, INT16 yDst, CARD16 width,
981*4882a593Smuzhiyun CARD16 height)
982*4882a593Smuzhiyun {
983*4882a593Smuzhiyun ScreenPtr pScreen = pDst->pDrawable->pScreen;
984*4882a593Smuzhiyun PictureScreenPtr ps = GetPictureScreen(pScreen);
985*4882a593Smuzhiyun
986*4882a593Smuzhiyun PICTURE_PROLOGUE(Composite);
987*4882a593Smuzhiyun
988*4882a593Smuzhiyun VGAGet(pScreen);
989*4882a593Smuzhiyun (*ps->Composite) (op, pSrc, pMask, pDst, xSrc, ySrc, xMask, yMask, xDst,
990*4882a593Smuzhiyun yDst, width, height);
991*4882a593Smuzhiyun VGAPut();
992*4882a593Smuzhiyun PICTURE_EPILOGUE(Composite, VGAarbiterComposite);
993*4882a593Smuzhiyun }
994*4882a593Smuzhiyun
995*4882a593Smuzhiyun static void
VGAarbiterGlyphs(CARD8 op,PicturePtr pSrc,PicturePtr pDst,PictFormatPtr maskFormat,INT16 xSrc,INT16 ySrc,int nlist,GlyphListPtr list,GlyphPtr * glyphs)996*4882a593Smuzhiyun VGAarbiterGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
997*4882a593Smuzhiyun PictFormatPtr maskFormat, INT16 xSrc, INT16 ySrc, int nlist,
998*4882a593Smuzhiyun GlyphListPtr list, GlyphPtr * glyphs)
999*4882a593Smuzhiyun {
1000*4882a593Smuzhiyun ScreenPtr pScreen = pDst->pDrawable->pScreen;
1001*4882a593Smuzhiyun PictureScreenPtr ps = GetPictureScreen(pScreen);
1002*4882a593Smuzhiyun
1003*4882a593Smuzhiyun PICTURE_PROLOGUE(Glyphs);
1004*4882a593Smuzhiyun
1005*4882a593Smuzhiyun VGAGet(pScreen);
1006*4882a593Smuzhiyun (*ps->Glyphs) (op, pSrc, pDst, maskFormat, xSrc, ySrc, nlist, list, glyphs);
1007*4882a593Smuzhiyun VGAPut();
1008*4882a593Smuzhiyun PICTURE_EPILOGUE(Glyphs, VGAarbiterGlyphs);
1009*4882a593Smuzhiyun }
1010*4882a593Smuzhiyun
1011*4882a593Smuzhiyun static void
VGAarbiterCompositeRects(CARD8 op,PicturePtr pDst,xRenderColor * color,int nRect,xRectangle * rects)1012*4882a593Smuzhiyun VGAarbiterCompositeRects(CARD8 op, PicturePtr pDst, xRenderColor * color,
1013*4882a593Smuzhiyun int nRect, xRectangle *rects)
1014*4882a593Smuzhiyun {
1015*4882a593Smuzhiyun ScreenPtr pScreen = pDst->pDrawable->pScreen;
1016*4882a593Smuzhiyun PictureScreenPtr ps = GetPictureScreen(pScreen);
1017*4882a593Smuzhiyun
1018*4882a593Smuzhiyun PICTURE_PROLOGUE(CompositeRects);
1019*4882a593Smuzhiyun
1020*4882a593Smuzhiyun VGAGet(pScreen);
1021*4882a593Smuzhiyun (*ps->CompositeRects) (op, pDst, color, nRect, rects);
1022*4882a593Smuzhiyun VGAPut();
1023*4882a593Smuzhiyun PICTURE_EPILOGUE(CompositeRects, VGAarbiterCompositeRects);
1024*4882a593Smuzhiyun }
1025