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