1*7688df22SAndroid Build Coastguard Worker /* $XFree86: xc/lib/GL/dri/XF86dri.c,v 1.13 2002/10/30 12:51:25 alanh Exp $ */
2*7688df22SAndroid Build Coastguard Worker /**************************************************************************
3*7688df22SAndroid Build Coastguard Worker
4*7688df22SAndroid Build Coastguard Worker Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
5*7688df22SAndroid Build Coastguard Worker Copyright 2000 VA Linux Systems, Inc.
6*7688df22SAndroid Build Coastguard Worker All Rights Reserved.
7*7688df22SAndroid Build Coastguard Worker
8*7688df22SAndroid Build Coastguard Worker Permission is hereby granted, free of charge, to any person obtaining a
9*7688df22SAndroid Build Coastguard Worker copy of this software and associated documentation files (the
10*7688df22SAndroid Build Coastguard Worker "Software"), to deal in the Software without restriction, including
11*7688df22SAndroid Build Coastguard Worker without limitation the rights to use, copy, modify, merge, publish,
12*7688df22SAndroid Build Coastguard Worker distribute, sub license, and/or sell copies of the Software, and to
13*7688df22SAndroid Build Coastguard Worker permit persons to whom the Software is furnished to do so, subject to
14*7688df22SAndroid Build Coastguard Worker the following conditions:
15*7688df22SAndroid Build Coastguard Worker
16*7688df22SAndroid Build Coastguard Worker The above copyright notice and this permission notice (including the
17*7688df22SAndroid Build Coastguard Worker next paragraph) shall be included in all copies or substantial portions
18*7688df22SAndroid Build Coastguard Worker of the Software.
19*7688df22SAndroid Build Coastguard Worker
20*7688df22SAndroid Build Coastguard Worker THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
21*7688df22SAndroid Build Coastguard Worker OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22*7688df22SAndroid Build Coastguard Worker MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
23*7688df22SAndroid Build Coastguard Worker IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
24*7688df22SAndroid Build Coastguard Worker ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
25*7688df22SAndroid Build Coastguard Worker TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
26*7688df22SAndroid Build Coastguard Worker SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27*7688df22SAndroid Build Coastguard Worker
28*7688df22SAndroid Build Coastguard Worker **************************************************************************/
29*7688df22SAndroid Build Coastguard Worker
30*7688df22SAndroid Build Coastguard Worker /*
31*7688df22SAndroid Build Coastguard Worker * Authors:
32*7688df22SAndroid Build Coastguard Worker * Kevin E. Martin <[email protected]>
33*7688df22SAndroid Build Coastguard Worker * Jens Owen <[email protected]>
34*7688df22SAndroid Build Coastguard Worker * Rickard E. (Rik) Faith <[email protected]>
35*7688df22SAndroid Build Coastguard Worker *
36*7688df22SAndroid Build Coastguard Worker */
37*7688df22SAndroid Build Coastguard Worker
38*7688df22SAndroid Build Coastguard Worker /* THIS IS NOT AN X CONSORTIUM STANDARD */
39*7688df22SAndroid Build Coastguard Worker
40*7688df22SAndroid Build Coastguard Worker #ifdef HAVE_CONFIG_H
41*7688df22SAndroid Build Coastguard Worker #include "config.h"
42*7688df22SAndroid Build Coastguard Worker #endif
43*7688df22SAndroid Build Coastguard Worker
44*7688df22SAndroid Build Coastguard Worker #include <X11/Xlibint.h>
45*7688df22SAndroid Build Coastguard Worker #include <X11/extensions/Xext.h>
46*7688df22SAndroid Build Coastguard Worker #include <X11/extensions/extutil.h>
47*7688df22SAndroid Build Coastguard Worker #include <stdint.h>
48*7688df22SAndroid Build Coastguard Worker #include "xf86dristr.h"
49*7688df22SAndroid Build Coastguard Worker
50*7688df22SAndroid Build Coastguard Worker static XExtensionInfo _xf86dri_info_data;
51*7688df22SAndroid Build Coastguard Worker static XExtensionInfo *xf86dri_info = &_xf86dri_info_data;
52*7688df22SAndroid Build Coastguard Worker static char xf86dri_extension_name[] = XF86DRINAME;
53*7688df22SAndroid Build Coastguard Worker
54*7688df22SAndroid Build Coastguard Worker #define uniDRICheckExtension(dpy,i,val) \
55*7688df22SAndroid Build Coastguard Worker XextCheckExtension (dpy, i, xf86dri_extension_name, val)
56*7688df22SAndroid Build Coastguard Worker
57*7688df22SAndroid Build Coastguard Worker /*****************************************************************************
58*7688df22SAndroid Build Coastguard Worker * *
59*7688df22SAndroid Build Coastguard Worker * private utility routines *
60*7688df22SAndroid Build Coastguard Worker * *
61*7688df22SAndroid Build Coastguard Worker *****************************************************************************/
62*7688df22SAndroid Build Coastguard Worker
63*7688df22SAndroid Build Coastguard Worker static int close_display(Display * dpy, XExtCodes * extCodes);
64*7688df22SAndroid Build Coastguard Worker static /* const */ XExtensionHooks xf86dri_extension_hooks = {
65*7688df22SAndroid Build Coastguard Worker NULL, /* create_gc */
66*7688df22SAndroid Build Coastguard Worker NULL, /* copy_gc */
67*7688df22SAndroid Build Coastguard Worker NULL, /* flush_gc */
68*7688df22SAndroid Build Coastguard Worker NULL, /* free_gc */
69*7688df22SAndroid Build Coastguard Worker NULL, /* create_font */
70*7688df22SAndroid Build Coastguard Worker NULL, /* free_font */
71*7688df22SAndroid Build Coastguard Worker close_display, /* close_display */
72*7688df22SAndroid Build Coastguard Worker NULL, /* wire_to_event */
73*7688df22SAndroid Build Coastguard Worker NULL, /* event_to_wire */
74*7688df22SAndroid Build Coastguard Worker NULL, /* error */
75*7688df22SAndroid Build Coastguard Worker NULL, /* error_string */
76*7688df22SAndroid Build Coastguard Worker };
77*7688df22SAndroid Build Coastguard Worker
78*7688df22SAndroid Build Coastguard Worker static
79*7688df22SAndroid Build Coastguard Worker XEXT_GENERATE_FIND_DISPLAY(find_display, xf86dri_info,
80*7688df22SAndroid Build Coastguard Worker xf86dri_extension_name, &xf86dri_extension_hooks, 0, NULL)
81*7688df22SAndroid Build Coastguard Worker
82*7688df22SAndroid Build Coastguard Worker static XEXT_GENERATE_CLOSE_DISPLAY(close_display, xf86dri_info)
83*7688df22SAndroid Build Coastguard Worker
84*7688df22SAndroid Build Coastguard Worker /*****************************************************************************
85*7688df22SAndroid Build Coastguard Worker * *
86*7688df22SAndroid Build Coastguard Worker * public XFree86-DRI Extension routines *
87*7688df22SAndroid Build Coastguard Worker * *
88*7688df22SAndroid Build Coastguard Worker *****************************************************************************/
89*7688df22SAndroid Build Coastguard Worker #if 0
90*7688df22SAndroid Build Coastguard Worker #include <stdio.h>
91*7688df22SAndroid Build Coastguard Worker #define TRACE(msg) fprintf(stderr,"uniDRI%s\n", msg);
92*7688df22SAndroid Build Coastguard Worker #else
93*7688df22SAndroid Build Coastguard Worker #define TRACE(msg)
94*7688df22SAndroid Build Coastguard Worker #endif
95*7688df22SAndroid Build Coastguard Worker Bool uniDRIQueryExtension(dpy, event_basep, error_basep)
96*7688df22SAndroid Build Coastguard Worker Display *dpy;
97*7688df22SAndroid Build Coastguard Worker int *event_basep, *error_basep;
98*7688df22SAndroid Build Coastguard Worker {
99*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
100*7688df22SAndroid Build Coastguard Worker
101*7688df22SAndroid Build Coastguard Worker TRACE("QueryExtension...");
102*7688df22SAndroid Build Coastguard Worker if (XextHasExtension(info)) {
103*7688df22SAndroid Build Coastguard Worker *event_basep = info->codes->first_event;
104*7688df22SAndroid Build Coastguard Worker *error_basep = info->codes->first_error;
105*7688df22SAndroid Build Coastguard Worker TRACE("QueryExtension... return True");
106*7688df22SAndroid Build Coastguard Worker return True;
107*7688df22SAndroid Build Coastguard Worker } else {
108*7688df22SAndroid Build Coastguard Worker TRACE("QueryExtension... return False");
109*7688df22SAndroid Build Coastguard Worker return False;
110*7688df22SAndroid Build Coastguard Worker }
111*7688df22SAndroid Build Coastguard Worker }
112*7688df22SAndroid Build Coastguard Worker
113*7688df22SAndroid Build Coastguard Worker Bool
uniDRIQueryVersion(dpy,majorVersion,minorVersion,patchVersion)114*7688df22SAndroid Build Coastguard Worker uniDRIQueryVersion(dpy, majorVersion, minorVersion, patchVersion)
115*7688df22SAndroid Build Coastguard Worker Display *dpy;
116*7688df22SAndroid Build Coastguard Worker int *majorVersion;
117*7688df22SAndroid Build Coastguard Worker int *minorVersion;
118*7688df22SAndroid Build Coastguard Worker int *patchVersion;
119*7688df22SAndroid Build Coastguard Worker {
120*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
121*7688df22SAndroid Build Coastguard Worker xXF86DRIQueryVersionReply rep;
122*7688df22SAndroid Build Coastguard Worker xXF86DRIQueryVersionReq *req;
123*7688df22SAndroid Build Coastguard Worker
124*7688df22SAndroid Build Coastguard Worker TRACE("QueryVersion...");
125*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
126*7688df22SAndroid Build Coastguard Worker
127*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
128*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRIQueryVersion, req);
129*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
130*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRIQueryVersion;
131*7688df22SAndroid Build Coastguard Worker if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
132*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
133*7688df22SAndroid Build Coastguard Worker SyncHandle();
134*7688df22SAndroid Build Coastguard Worker TRACE("QueryVersion... return False");
135*7688df22SAndroid Build Coastguard Worker return False;
136*7688df22SAndroid Build Coastguard Worker }
137*7688df22SAndroid Build Coastguard Worker *majorVersion = rep.majorVersion;
138*7688df22SAndroid Build Coastguard Worker *minorVersion = rep.minorVersion;
139*7688df22SAndroid Build Coastguard Worker *patchVersion = rep.patchVersion;
140*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
141*7688df22SAndroid Build Coastguard Worker SyncHandle();
142*7688df22SAndroid Build Coastguard Worker TRACE("QueryVersion... return True");
143*7688df22SAndroid Build Coastguard Worker return True;
144*7688df22SAndroid Build Coastguard Worker }
145*7688df22SAndroid Build Coastguard Worker
146*7688df22SAndroid Build Coastguard Worker Bool
uniDRIQueryDirectRenderingCapable(dpy,screen,isCapable)147*7688df22SAndroid Build Coastguard Worker uniDRIQueryDirectRenderingCapable(dpy, screen, isCapable)
148*7688df22SAndroid Build Coastguard Worker Display *dpy;
149*7688df22SAndroid Build Coastguard Worker int screen;
150*7688df22SAndroid Build Coastguard Worker Bool *isCapable;
151*7688df22SAndroid Build Coastguard Worker {
152*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
153*7688df22SAndroid Build Coastguard Worker xXF86DRIQueryDirectRenderingCapableReply rep;
154*7688df22SAndroid Build Coastguard Worker xXF86DRIQueryDirectRenderingCapableReq *req;
155*7688df22SAndroid Build Coastguard Worker
156*7688df22SAndroid Build Coastguard Worker TRACE("QueryDirectRenderingCapable...");
157*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
158*7688df22SAndroid Build Coastguard Worker
159*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
160*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRIQueryDirectRenderingCapable, req);
161*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
162*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRIQueryDirectRenderingCapable;
163*7688df22SAndroid Build Coastguard Worker req->screen = screen;
164*7688df22SAndroid Build Coastguard Worker if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
165*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
166*7688df22SAndroid Build Coastguard Worker SyncHandle();
167*7688df22SAndroid Build Coastguard Worker TRACE("QueryDirectRenderingCapable... return False");
168*7688df22SAndroid Build Coastguard Worker return False;
169*7688df22SAndroid Build Coastguard Worker }
170*7688df22SAndroid Build Coastguard Worker *isCapable = rep.isCapable;
171*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
172*7688df22SAndroid Build Coastguard Worker SyncHandle();
173*7688df22SAndroid Build Coastguard Worker TRACE("QueryDirectRenderingCapable... return True");
174*7688df22SAndroid Build Coastguard Worker return True;
175*7688df22SAndroid Build Coastguard Worker }
176*7688df22SAndroid Build Coastguard Worker
177*7688df22SAndroid Build Coastguard Worker Bool
uniDRIOpenConnection(dpy,screen,hSAREA,busIdString)178*7688df22SAndroid Build Coastguard Worker uniDRIOpenConnection(dpy, screen, hSAREA, busIdString)
179*7688df22SAndroid Build Coastguard Worker Display *dpy;
180*7688df22SAndroid Build Coastguard Worker int screen;
181*7688df22SAndroid Build Coastguard Worker drm_handle_t *hSAREA;
182*7688df22SAndroid Build Coastguard Worker char **busIdString;
183*7688df22SAndroid Build Coastguard Worker {
184*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
185*7688df22SAndroid Build Coastguard Worker xXF86DRIOpenConnectionReply rep;
186*7688df22SAndroid Build Coastguard Worker xXF86DRIOpenConnectionReq *req;
187*7688df22SAndroid Build Coastguard Worker
188*7688df22SAndroid Build Coastguard Worker TRACE("OpenConnection...");
189*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
190*7688df22SAndroid Build Coastguard Worker
191*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
192*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRIOpenConnection, req);
193*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
194*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRIOpenConnection;
195*7688df22SAndroid Build Coastguard Worker req->screen = screen;
196*7688df22SAndroid Build Coastguard Worker if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
197*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
198*7688df22SAndroid Build Coastguard Worker SyncHandle();
199*7688df22SAndroid Build Coastguard Worker TRACE("OpenConnection... return False");
200*7688df22SAndroid Build Coastguard Worker return False;
201*7688df22SAndroid Build Coastguard Worker }
202*7688df22SAndroid Build Coastguard Worker
203*7688df22SAndroid Build Coastguard Worker *hSAREA = rep.hSAREALow;
204*7688df22SAndroid Build Coastguard Worker #ifdef LONG64
205*7688df22SAndroid Build Coastguard Worker if (sizeof(drm_handle_t) == 8) {
206*7688df22SAndroid Build Coastguard Worker *hSAREA |= ((unsigned long)rep.hSAREAHigh) << 32;
207*7688df22SAndroid Build Coastguard Worker }
208*7688df22SAndroid Build Coastguard Worker #endif
209*7688df22SAndroid Build Coastguard Worker if (rep.length) {
210*7688df22SAndroid Build Coastguard Worker if (!(*busIdString = (char *)Xcalloc(rep.busIdStringLength + 1, 1))) {
211*7688df22SAndroid Build Coastguard Worker _XEatData(dpy, ((rep.busIdStringLength + 3) & ~3));
212*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
213*7688df22SAndroid Build Coastguard Worker SyncHandle();
214*7688df22SAndroid Build Coastguard Worker TRACE("OpenConnection... return False");
215*7688df22SAndroid Build Coastguard Worker return False;
216*7688df22SAndroid Build Coastguard Worker }
217*7688df22SAndroid Build Coastguard Worker _XReadPad(dpy, *busIdString, rep.busIdStringLength);
218*7688df22SAndroid Build Coastguard Worker } else {
219*7688df22SAndroid Build Coastguard Worker *busIdString = NULL;
220*7688df22SAndroid Build Coastguard Worker }
221*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
222*7688df22SAndroid Build Coastguard Worker SyncHandle();
223*7688df22SAndroid Build Coastguard Worker TRACE("OpenConnection... return True");
224*7688df22SAndroid Build Coastguard Worker return True;
225*7688df22SAndroid Build Coastguard Worker }
226*7688df22SAndroid Build Coastguard Worker
227*7688df22SAndroid Build Coastguard Worker Bool
uniDRIAuthConnection(dpy,screen,magic)228*7688df22SAndroid Build Coastguard Worker uniDRIAuthConnection(dpy, screen, magic)
229*7688df22SAndroid Build Coastguard Worker Display *dpy;
230*7688df22SAndroid Build Coastguard Worker int screen;
231*7688df22SAndroid Build Coastguard Worker drm_magic_t magic;
232*7688df22SAndroid Build Coastguard Worker {
233*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
234*7688df22SAndroid Build Coastguard Worker xXF86DRIAuthConnectionReq *req;
235*7688df22SAndroid Build Coastguard Worker xXF86DRIAuthConnectionReply rep;
236*7688df22SAndroid Build Coastguard Worker
237*7688df22SAndroid Build Coastguard Worker TRACE("AuthConnection...");
238*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
239*7688df22SAndroid Build Coastguard Worker
240*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
241*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRIAuthConnection, req);
242*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
243*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRIAuthConnection;
244*7688df22SAndroid Build Coastguard Worker req->screen = screen;
245*7688df22SAndroid Build Coastguard Worker req->magic = magic;
246*7688df22SAndroid Build Coastguard Worker rep.authenticated = 0;
247*7688df22SAndroid Build Coastguard Worker if (!_XReply(dpy, (xReply *) & rep, 0, xFalse) || !rep.authenticated) {
248*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
249*7688df22SAndroid Build Coastguard Worker SyncHandle();
250*7688df22SAndroid Build Coastguard Worker TRACE("AuthConnection... return False");
251*7688df22SAndroid Build Coastguard Worker return False;
252*7688df22SAndroid Build Coastguard Worker }
253*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
254*7688df22SAndroid Build Coastguard Worker SyncHandle();
255*7688df22SAndroid Build Coastguard Worker TRACE("AuthConnection... return True");
256*7688df22SAndroid Build Coastguard Worker return True;
257*7688df22SAndroid Build Coastguard Worker }
258*7688df22SAndroid Build Coastguard Worker
259*7688df22SAndroid Build Coastguard Worker Bool
uniDRICloseConnection(dpy,screen)260*7688df22SAndroid Build Coastguard Worker uniDRICloseConnection(dpy, screen)
261*7688df22SAndroid Build Coastguard Worker Display *dpy;
262*7688df22SAndroid Build Coastguard Worker int screen;
263*7688df22SAndroid Build Coastguard Worker {
264*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
265*7688df22SAndroid Build Coastguard Worker xXF86DRICloseConnectionReq *req;
266*7688df22SAndroid Build Coastguard Worker
267*7688df22SAndroid Build Coastguard Worker TRACE("CloseConnection...");
268*7688df22SAndroid Build Coastguard Worker
269*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
270*7688df22SAndroid Build Coastguard Worker
271*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
272*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRICloseConnection, req);
273*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
274*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRICloseConnection;
275*7688df22SAndroid Build Coastguard Worker req->screen = screen;
276*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
277*7688df22SAndroid Build Coastguard Worker SyncHandle();
278*7688df22SAndroid Build Coastguard Worker TRACE("CloseConnection... return True");
279*7688df22SAndroid Build Coastguard Worker return True;
280*7688df22SAndroid Build Coastguard Worker }
281*7688df22SAndroid Build Coastguard Worker
282*7688df22SAndroid Build Coastguard Worker Bool
uniDRIGetClientDriverName(dpy,screen,ddxDriverMajorVersion,ddxDriverMinorVersion,ddxDriverPatchVersion,clientDriverName)283*7688df22SAndroid Build Coastguard Worker uniDRIGetClientDriverName(dpy, screen, ddxDriverMajorVersion,
284*7688df22SAndroid Build Coastguard Worker ddxDriverMinorVersion, ddxDriverPatchVersion, clientDriverName)
285*7688df22SAndroid Build Coastguard Worker Display *dpy;
286*7688df22SAndroid Build Coastguard Worker int screen;
287*7688df22SAndroid Build Coastguard Worker int *ddxDriverMajorVersion;
288*7688df22SAndroid Build Coastguard Worker int *ddxDriverMinorVersion;
289*7688df22SAndroid Build Coastguard Worker int *ddxDriverPatchVersion;
290*7688df22SAndroid Build Coastguard Worker char **clientDriverName;
291*7688df22SAndroid Build Coastguard Worker {
292*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
293*7688df22SAndroid Build Coastguard Worker xXF86DRIGetClientDriverNameReply rep;
294*7688df22SAndroid Build Coastguard Worker xXF86DRIGetClientDriverNameReq *req;
295*7688df22SAndroid Build Coastguard Worker
296*7688df22SAndroid Build Coastguard Worker TRACE("GetClientDriverName...");
297*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
298*7688df22SAndroid Build Coastguard Worker
299*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
300*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRIGetClientDriverName, req);
301*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
302*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRIGetClientDriverName;
303*7688df22SAndroid Build Coastguard Worker req->screen = screen;
304*7688df22SAndroid Build Coastguard Worker if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
305*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
306*7688df22SAndroid Build Coastguard Worker SyncHandle();
307*7688df22SAndroid Build Coastguard Worker TRACE("GetClientDriverName... return False");
308*7688df22SAndroid Build Coastguard Worker return False;
309*7688df22SAndroid Build Coastguard Worker }
310*7688df22SAndroid Build Coastguard Worker
311*7688df22SAndroid Build Coastguard Worker *ddxDriverMajorVersion = rep.ddxDriverMajorVersion;
312*7688df22SAndroid Build Coastguard Worker *ddxDriverMinorVersion = rep.ddxDriverMinorVersion;
313*7688df22SAndroid Build Coastguard Worker *ddxDriverPatchVersion = rep.ddxDriverPatchVersion;
314*7688df22SAndroid Build Coastguard Worker
315*7688df22SAndroid Build Coastguard Worker if (rep.length) {
316*7688df22SAndroid Build Coastguard Worker if (!(*clientDriverName =
317*7688df22SAndroid Build Coastguard Worker (char *)Xcalloc(rep.clientDriverNameLength + 1, 1))) {
318*7688df22SAndroid Build Coastguard Worker _XEatData(dpy, ((rep.clientDriverNameLength + 3) & ~3));
319*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
320*7688df22SAndroid Build Coastguard Worker SyncHandle();
321*7688df22SAndroid Build Coastguard Worker TRACE("GetClientDriverName... return False");
322*7688df22SAndroid Build Coastguard Worker return False;
323*7688df22SAndroid Build Coastguard Worker }
324*7688df22SAndroid Build Coastguard Worker _XReadPad(dpy, *clientDriverName, rep.clientDriverNameLength);
325*7688df22SAndroid Build Coastguard Worker } else {
326*7688df22SAndroid Build Coastguard Worker *clientDriverName = NULL;
327*7688df22SAndroid Build Coastguard Worker }
328*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
329*7688df22SAndroid Build Coastguard Worker SyncHandle();
330*7688df22SAndroid Build Coastguard Worker TRACE("GetClientDriverName... return True");
331*7688df22SAndroid Build Coastguard Worker return True;
332*7688df22SAndroid Build Coastguard Worker }
333*7688df22SAndroid Build Coastguard Worker
334*7688df22SAndroid Build Coastguard Worker Bool
uniDRICreateContextWithConfig(dpy,screen,configID,context,hHWContext)335*7688df22SAndroid Build Coastguard Worker uniDRICreateContextWithConfig(dpy, screen, configID, context, hHWContext)
336*7688df22SAndroid Build Coastguard Worker Display *dpy;
337*7688df22SAndroid Build Coastguard Worker int screen;
338*7688df22SAndroid Build Coastguard Worker int configID;
339*7688df22SAndroid Build Coastguard Worker XID *context;
340*7688df22SAndroid Build Coastguard Worker drm_context_t *hHWContext;
341*7688df22SAndroid Build Coastguard Worker {
342*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
343*7688df22SAndroid Build Coastguard Worker xXF86DRICreateContextReply rep;
344*7688df22SAndroid Build Coastguard Worker xXF86DRICreateContextReq *req;
345*7688df22SAndroid Build Coastguard Worker
346*7688df22SAndroid Build Coastguard Worker TRACE("CreateContext...");
347*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
348*7688df22SAndroid Build Coastguard Worker
349*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
350*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRICreateContext, req);
351*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
352*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRICreateContext;
353*7688df22SAndroid Build Coastguard Worker req->visual = configID;
354*7688df22SAndroid Build Coastguard Worker req->screen = screen;
355*7688df22SAndroid Build Coastguard Worker *context = XAllocID(dpy);
356*7688df22SAndroid Build Coastguard Worker req->context = *context;
357*7688df22SAndroid Build Coastguard Worker if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
358*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
359*7688df22SAndroid Build Coastguard Worker SyncHandle();
360*7688df22SAndroid Build Coastguard Worker TRACE("CreateContext... return False");
361*7688df22SAndroid Build Coastguard Worker return False;
362*7688df22SAndroid Build Coastguard Worker }
363*7688df22SAndroid Build Coastguard Worker *hHWContext = rep.hHWContext;
364*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
365*7688df22SAndroid Build Coastguard Worker SyncHandle();
366*7688df22SAndroid Build Coastguard Worker TRACE("CreateContext... return True");
367*7688df22SAndroid Build Coastguard Worker return True;
368*7688df22SAndroid Build Coastguard Worker }
369*7688df22SAndroid Build Coastguard Worker
370*7688df22SAndroid Build Coastguard Worker Bool
uniDRICreateContext(dpy,screen,visual,context,hHWContext)371*7688df22SAndroid Build Coastguard Worker uniDRICreateContext(dpy, screen, visual, context, hHWContext)
372*7688df22SAndroid Build Coastguard Worker Display *dpy;
373*7688df22SAndroid Build Coastguard Worker int screen;
374*7688df22SAndroid Build Coastguard Worker Visual *visual;
375*7688df22SAndroid Build Coastguard Worker XID *context;
376*7688df22SAndroid Build Coastguard Worker drm_context_t *hHWContext;
377*7688df22SAndroid Build Coastguard Worker {
378*7688df22SAndroid Build Coastguard Worker return uniDRICreateContextWithConfig(dpy, screen, visual->visualid,
379*7688df22SAndroid Build Coastguard Worker context, hHWContext);
380*7688df22SAndroid Build Coastguard Worker }
381*7688df22SAndroid Build Coastguard Worker
382*7688df22SAndroid Build Coastguard Worker Bool
uniDRIDestroyContext(Display * ndpy,int screen,XID context)383*7688df22SAndroid Build Coastguard Worker uniDRIDestroyContext(Display * ndpy, int screen, XID context)
384*7688df22SAndroid Build Coastguard Worker {
385*7688df22SAndroid Build Coastguard Worker Display *const dpy = (Display *) ndpy;
386*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
387*7688df22SAndroid Build Coastguard Worker xXF86DRIDestroyContextReq *req;
388*7688df22SAndroid Build Coastguard Worker
389*7688df22SAndroid Build Coastguard Worker TRACE("DestroyContext...");
390*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
391*7688df22SAndroid Build Coastguard Worker
392*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
393*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRIDestroyContext, req);
394*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
395*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRIDestroyContext;
396*7688df22SAndroid Build Coastguard Worker req->screen = screen;
397*7688df22SAndroid Build Coastguard Worker req->context = context;
398*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
399*7688df22SAndroid Build Coastguard Worker SyncHandle();
400*7688df22SAndroid Build Coastguard Worker TRACE("DestroyContext... return True");
401*7688df22SAndroid Build Coastguard Worker return True;
402*7688df22SAndroid Build Coastguard Worker }
403*7688df22SAndroid Build Coastguard Worker
404*7688df22SAndroid Build Coastguard Worker Bool
uniDRICreateDrawable(Display * ndpy,int screen,Drawable drawable,drm_drawable_t * hHWDrawable)405*7688df22SAndroid Build Coastguard Worker uniDRICreateDrawable(Display * ndpy, int screen,
406*7688df22SAndroid Build Coastguard Worker Drawable drawable, drm_drawable_t * hHWDrawable)
407*7688df22SAndroid Build Coastguard Worker {
408*7688df22SAndroid Build Coastguard Worker Display *const dpy = (Display *) ndpy;
409*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
410*7688df22SAndroid Build Coastguard Worker xXF86DRICreateDrawableReply rep;
411*7688df22SAndroid Build Coastguard Worker xXF86DRICreateDrawableReq *req;
412*7688df22SAndroid Build Coastguard Worker
413*7688df22SAndroid Build Coastguard Worker TRACE("CreateDrawable...");
414*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
415*7688df22SAndroid Build Coastguard Worker
416*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
417*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRICreateDrawable, req);
418*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
419*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRICreateDrawable;
420*7688df22SAndroid Build Coastguard Worker req->screen = screen;
421*7688df22SAndroid Build Coastguard Worker req->drawable = drawable;
422*7688df22SAndroid Build Coastguard Worker if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
423*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
424*7688df22SAndroid Build Coastguard Worker SyncHandle();
425*7688df22SAndroid Build Coastguard Worker TRACE("CreateDrawable... return False");
426*7688df22SAndroid Build Coastguard Worker return False;
427*7688df22SAndroid Build Coastguard Worker }
428*7688df22SAndroid Build Coastguard Worker *hHWDrawable = rep.hHWDrawable;
429*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
430*7688df22SAndroid Build Coastguard Worker SyncHandle();
431*7688df22SAndroid Build Coastguard Worker TRACE("CreateDrawable... return True");
432*7688df22SAndroid Build Coastguard Worker return True;
433*7688df22SAndroid Build Coastguard Worker }
434*7688df22SAndroid Build Coastguard Worker
435*7688df22SAndroid Build Coastguard Worker Bool
uniDRIDestroyDrawable(Display * ndpy,int screen,Drawable drawable)436*7688df22SAndroid Build Coastguard Worker uniDRIDestroyDrawable(Display * ndpy, int screen, Drawable drawable)
437*7688df22SAndroid Build Coastguard Worker {
438*7688df22SAndroid Build Coastguard Worker Display *const dpy = (Display *) ndpy;
439*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
440*7688df22SAndroid Build Coastguard Worker xXF86DRIDestroyDrawableReq *req;
441*7688df22SAndroid Build Coastguard Worker
442*7688df22SAndroid Build Coastguard Worker TRACE("DestroyDrawable...");
443*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
444*7688df22SAndroid Build Coastguard Worker
445*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
446*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRIDestroyDrawable, req);
447*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
448*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRIDestroyDrawable;
449*7688df22SAndroid Build Coastguard Worker req->screen = screen;
450*7688df22SAndroid Build Coastguard Worker req->drawable = drawable;
451*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
452*7688df22SAndroid Build Coastguard Worker SyncHandle();
453*7688df22SAndroid Build Coastguard Worker TRACE("DestroyDrawable... return True");
454*7688df22SAndroid Build Coastguard Worker return True;
455*7688df22SAndroid Build Coastguard Worker }
456*7688df22SAndroid Build Coastguard Worker
457*7688df22SAndroid Build Coastguard Worker Bool
uniDRIGetDrawableInfo(Display * dpy,int screen,Drawable drawable,unsigned int * index,unsigned int * stamp,int * X,int * Y,int * W,int * H,int * numClipRects,drm_clip_rect_t ** pClipRects,int * backX,int * backY,int * numBackClipRects,drm_clip_rect_t ** pBackClipRects)458*7688df22SAndroid Build Coastguard Worker uniDRIGetDrawableInfo(Display * dpy, int screen, Drawable drawable,
459*7688df22SAndroid Build Coastguard Worker unsigned int *index, unsigned int *stamp,
460*7688df22SAndroid Build Coastguard Worker int *X, int *Y, int *W, int *H,
461*7688df22SAndroid Build Coastguard Worker int *numClipRects, drm_clip_rect_t ** pClipRects,
462*7688df22SAndroid Build Coastguard Worker int *backX, int *backY,
463*7688df22SAndroid Build Coastguard Worker int *numBackClipRects, drm_clip_rect_t ** pBackClipRects)
464*7688df22SAndroid Build Coastguard Worker {
465*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
466*7688df22SAndroid Build Coastguard Worker xXF86DRIGetDrawableInfoReply rep;
467*7688df22SAndroid Build Coastguard Worker xXF86DRIGetDrawableInfoReq *req;
468*7688df22SAndroid Build Coastguard Worker int total_rects;
469*7688df22SAndroid Build Coastguard Worker
470*7688df22SAndroid Build Coastguard Worker TRACE("GetDrawableInfo...");
471*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
472*7688df22SAndroid Build Coastguard Worker
473*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
474*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRIGetDrawableInfo, req);
475*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
476*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRIGetDrawableInfo;
477*7688df22SAndroid Build Coastguard Worker req->screen = screen;
478*7688df22SAndroid Build Coastguard Worker req->drawable = drawable;
479*7688df22SAndroid Build Coastguard Worker
480*7688df22SAndroid Build Coastguard Worker if (!_XReply(dpy, (xReply *) & rep, 1, xFalse)) {
481*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
482*7688df22SAndroid Build Coastguard Worker SyncHandle();
483*7688df22SAndroid Build Coastguard Worker TRACE("GetDrawableInfo... return False");
484*7688df22SAndroid Build Coastguard Worker return False;
485*7688df22SAndroid Build Coastguard Worker }
486*7688df22SAndroid Build Coastguard Worker *index = rep.drawableTableIndex;
487*7688df22SAndroid Build Coastguard Worker *stamp = rep.drawableTableStamp;
488*7688df22SAndroid Build Coastguard Worker *X = (int)rep.drawableX;
489*7688df22SAndroid Build Coastguard Worker *Y = (int)rep.drawableY;
490*7688df22SAndroid Build Coastguard Worker *W = (int)rep.drawableWidth;
491*7688df22SAndroid Build Coastguard Worker *H = (int)rep.drawableHeight;
492*7688df22SAndroid Build Coastguard Worker *numClipRects = rep.numClipRects;
493*7688df22SAndroid Build Coastguard Worker total_rects = *numClipRects;
494*7688df22SAndroid Build Coastguard Worker
495*7688df22SAndroid Build Coastguard Worker *backX = rep.backX;
496*7688df22SAndroid Build Coastguard Worker *backY = rep.backY;
497*7688df22SAndroid Build Coastguard Worker *numBackClipRects = rep.numBackClipRects;
498*7688df22SAndroid Build Coastguard Worker total_rects += *numBackClipRects;
499*7688df22SAndroid Build Coastguard Worker
500*7688df22SAndroid Build Coastguard Worker #if 0
501*7688df22SAndroid Build Coastguard Worker /* Because of the fix in Xserver/GL/dri/xf86dri.c, this check breaks
502*7688df22SAndroid Build Coastguard Worker * backwards compatibility (Because of the >> 2 shift) but the fix
503*7688df22SAndroid Build Coastguard Worker * enables multi-threaded apps to work.
504*7688df22SAndroid Build Coastguard Worker */
505*7688df22SAndroid Build Coastguard Worker if (rep.length != ((((SIZEOF(xXF86DRIGetDrawableInfoReply) -
506*7688df22SAndroid Build Coastguard Worker SIZEOF(xGenericReply) +
507*7688df22SAndroid Build Coastguard Worker total_rects * sizeof(drm_clip_rect_t)) +
508*7688df22SAndroid Build Coastguard Worker 3) & ~3) >> 2)) {
509*7688df22SAndroid Build Coastguard Worker _XEatData(dpy, rep.length);
510*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
511*7688df22SAndroid Build Coastguard Worker SyncHandle();
512*7688df22SAndroid Build Coastguard Worker TRACE("GetDrawableInfo... return False");
513*7688df22SAndroid Build Coastguard Worker return False;
514*7688df22SAndroid Build Coastguard Worker }
515*7688df22SAndroid Build Coastguard Worker #endif
516*7688df22SAndroid Build Coastguard Worker
517*7688df22SAndroid Build Coastguard Worker if (*numClipRects) {
518*7688df22SAndroid Build Coastguard Worker int len = sizeof(drm_clip_rect_t) * (*numClipRects);
519*7688df22SAndroid Build Coastguard Worker
520*7688df22SAndroid Build Coastguard Worker *pClipRects = (drm_clip_rect_t *) Xcalloc(len, 1);
521*7688df22SAndroid Build Coastguard Worker if (*pClipRects)
522*7688df22SAndroid Build Coastguard Worker _XRead(dpy, (char *)*pClipRects, len);
523*7688df22SAndroid Build Coastguard Worker } else {
524*7688df22SAndroid Build Coastguard Worker *pClipRects = NULL;
525*7688df22SAndroid Build Coastguard Worker }
526*7688df22SAndroid Build Coastguard Worker
527*7688df22SAndroid Build Coastguard Worker if (*numBackClipRects) {
528*7688df22SAndroid Build Coastguard Worker int len = sizeof(drm_clip_rect_t) * (*numBackClipRects);
529*7688df22SAndroid Build Coastguard Worker
530*7688df22SAndroid Build Coastguard Worker *pBackClipRects = (drm_clip_rect_t *) Xcalloc(len, 1);
531*7688df22SAndroid Build Coastguard Worker if (*pBackClipRects)
532*7688df22SAndroid Build Coastguard Worker _XRead(dpy, (char *)*pBackClipRects, len);
533*7688df22SAndroid Build Coastguard Worker } else {
534*7688df22SAndroid Build Coastguard Worker *pBackClipRects = NULL;
535*7688df22SAndroid Build Coastguard Worker }
536*7688df22SAndroid Build Coastguard Worker
537*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
538*7688df22SAndroid Build Coastguard Worker SyncHandle();
539*7688df22SAndroid Build Coastguard Worker TRACE("GetDrawableInfo... return True");
540*7688df22SAndroid Build Coastguard Worker return True;
541*7688df22SAndroid Build Coastguard Worker }
542*7688df22SAndroid Build Coastguard Worker
543*7688df22SAndroid Build Coastguard Worker Bool
uniDRIGetDeviceInfo(dpy,screen,hFrameBuffer,fbOrigin,fbSize,fbStride,devPrivateSize,pDevPrivate)544*7688df22SAndroid Build Coastguard Worker uniDRIGetDeviceInfo(dpy, screen, hFrameBuffer,
545*7688df22SAndroid Build Coastguard Worker fbOrigin, fbSize, fbStride, devPrivateSize, pDevPrivate)
546*7688df22SAndroid Build Coastguard Worker Display *dpy;
547*7688df22SAndroid Build Coastguard Worker int screen;
548*7688df22SAndroid Build Coastguard Worker drm_handle_t *hFrameBuffer;
549*7688df22SAndroid Build Coastguard Worker int *fbOrigin;
550*7688df22SAndroid Build Coastguard Worker int *fbSize;
551*7688df22SAndroid Build Coastguard Worker int *fbStride;
552*7688df22SAndroid Build Coastguard Worker int *devPrivateSize;
553*7688df22SAndroid Build Coastguard Worker void **pDevPrivate;
554*7688df22SAndroid Build Coastguard Worker {
555*7688df22SAndroid Build Coastguard Worker XExtDisplayInfo *info = find_display(dpy);
556*7688df22SAndroid Build Coastguard Worker xXF86DRIGetDeviceInfoReply rep;
557*7688df22SAndroid Build Coastguard Worker xXF86DRIGetDeviceInfoReq *req;
558*7688df22SAndroid Build Coastguard Worker
559*7688df22SAndroid Build Coastguard Worker TRACE("GetDeviceInfo...");
560*7688df22SAndroid Build Coastguard Worker uniDRICheckExtension(dpy, info, False);
561*7688df22SAndroid Build Coastguard Worker
562*7688df22SAndroid Build Coastguard Worker LockDisplay(dpy);
563*7688df22SAndroid Build Coastguard Worker GetReq(XF86DRIGetDeviceInfo, req);
564*7688df22SAndroid Build Coastguard Worker req->reqType = info->codes->major_opcode;
565*7688df22SAndroid Build Coastguard Worker req->driReqType = X_XF86DRIGetDeviceInfo;
566*7688df22SAndroid Build Coastguard Worker req->screen = screen;
567*7688df22SAndroid Build Coastguard Worker if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
568*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
569*7688df22SAndroid Build Coastguard Worker SyncHandle();
570*7688df22SAndroid Build Coastguard Worker TRACE("GetDeviceInfo... return False");
571*7688df22SAndroid Build Coastguard Worker return False;
572*7688df22SAndroid Build Coastguard Worker }
573*7688df22SAndroid Build Coastguard Worker
574*7688df22SAndroid Build Coastguard Worker *hFrameBuffer = rep.hFrameBufferLow;
575*7688df22SAndroid Build Coastguard Worker #ifdef LONG64
576*7688df22SAndroid Build Coastguard Worker if (sizeof(drm_handle_t) == 8) {
577*7688df22SAndroid Build Coastguard Worker *hFrameBuffer |= ((unsigned long)rep.hFrameBufferHigh) << 32;
578*7688df22SAndroid Build Coastguard Worker }
579*7688df22SAndroid Build Coastguard Worker #endif
580*7688df22SAndroid Build Coastguard Worker
581*7688df22SAndroid Build Coastguard Worker *fbOrigin = rep.framebufferOrigin;
582*7688df22SAndroid Build Coastguard Worker *fbSize = rep.framebufferSize;
583*7688df22SAndroid Build Coastguard Worker *fbStride = rep.framebufferStride;
584*7688df22SAndroid Build Coastguard Worker *devPrivateSize = rep.devPrivateSize;
585*7688df22SAndroid Build Coastguard Worker
586*7688df22SAndroid Build Coastguard Worker if (rep.length) {
587*7688df22SAndroid Build Coastguard Worker if (!(*pDevPrivate = (void *)Xcalloc(rep.devPrivateSize, 1))) {
588*7688df22SAndroid Build Coastguard Worker _XEatData(dpy, ((rep.devPrivateSize + 3) & ~3));
589*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
590*7688df22SAndroid Build Coastguard Worker SyncHandle();
591*7688df22SAndroid Build Coastguard Worker TRACE("GetDeviceInfo... return False");
592*7688df22SAndroid Build Coastguard Worker return False;
593*7688df22SAndroid Build Coastguard Worker }
594*7688df22SAndroid Build Coastguard Worker _XRead(dpy, (char *)*pDevPrivate, rep.devPrivateSize);
595*7688df22SAndroid Build Coastguard Worker } else {
596*7688df22SAndroid Build Coastguard Worker *pDevPrivate = NULL;
597*7688df22SAndroid Build Coastguard Worker }
598*7688df22SAndroid Build Coastguard Worker
599*7688df22SAndroid Build Coastguard Worker UnlockDisplay(dpy);
600*7688df22SAndroid Build Coastguard Worker SyncHandle();
601*7688df22SAndroid Build Coastguard Worker TRACE("GetDeviceInfo... return True");
602*7688df22SAndroid Build Coastguard Worker return True;
603*7688df22SAndroid Build Coastguard Worker }
604