randrstr.h revision 7e31ba66
105b261ecSmrg/*
205b261ecSmrg * Copyright © 2000 Compaq Computer Corporation
305b261ecSmrg * Copyright © 2002 Hewlett-Packard Company
405b261ecSmrg * Copyright © 2006 Intel Corporation
54642e01fSmrg * Copyright © 2008 Red Hat, Inc.
605b261ecSmrg *
705b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its
805b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that
905b261ecSmrg * the above copyright notice appear in all copies and that both that copyright
1005b261ecSmrg * notice and this permission notice appear in supporting documentation, and
1105b261ecSmrg * that the name of the copyright holders not be used in advertising or
1205b261ecSmrg * publicity pertaining to distribution of the software without specific,
1305b261ecSmrg * written prior permission.  The copyright holders make no representations
1405b261ecSmrg * about the suitability of this software for any purpose.  It is provided "as
1505b261ecSmrg * is" without express or implied warranty.
1605b261ecSmrg *
1705b261ecSmrg * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1805b261ecSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1905b261ecSmrg * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
2005b261ecSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
2105b261ecSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
2205b261ecSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
2305b261ecSmrg * OF THIS SOFTWARE.
2405b261ecSmrg *
2505b261ecSmrg * Author:  Jim Gettys, Hewlett-Packard Company, Inc.
2605b261ecSmrg *	    Keith Packard, Intel Corporation
2705b261ecSmrg */
2805b261ecSmrg
2905b261ecSmrg#ifdef HAVE_DIX_CONFIG_H
3005b261ecSmrg#include <dix-config.h>
3105b261ecSmrg#endif
3205b261ecSmrg
3305b261ecSmrg#ifndef _RANDRSTR_H_
3405b261ecSmrg#define _RANDRSTR_H_
3505b261ecSmrg
3605b261ecSmrg#include <X11/X.h>
3705b261ecSmrg#include <X11/Xproto.h>
3805b261ecSmrg#include "misc.h"
3905b261ecSmrg#include "os.h"
4005b261ecSmrg#include "dixstruct.h"
4105b261ecSmrg#include "resource.h"
4205b261ecSmrg#include "scrnintstr.h"
4305b261ecSmrg#include "windowstr.h"
4405b261ecSmrg#include "pixmapstr.h"
4505b261ecSmrg#include "extnsionst.h"
4605b261ecSmrg#include "servermd.h"
474642e01fSmrg#include "rrtransform.h"
4805b261ecSmrg#include <X11/extensions/randr.h>
4905b261ecSmrg#include <X11/extensions/randrproto.h>
50f7df2e56Smrg#include <X11/extensions/render.h>      /* we share subpixel order information */
5105b261ecSmrg#include "picturestr.h"
5205b261ecSmrg#include <X11/Xfuncproto.h>
5305b261ecSmrg
5405b261ecSmrg/* required for ABI compatibility for now */
5505b261ecSmrg#define RANDR_10_INTERFACE 1
5605b261ecSmrg#define RANDR_12_INTERFACE 1
57f7df2e56Smrg#define RANDR_13_INTERFACE 1    /* requires RANDR_12_INTERFACE */
584642e01fSmrg#define RANDR_GET_CRTC_INTERFACE 1
594642e01fSmrg
60f7df2e56Smrg#define RANDR_INTERFACE_VERSION 0x0104
6105b261ecSmrg
62f7df2e56Smrgtypedef XID RRMode;
63f7df2e56Smrgtypedef XID RROutput;
64f7df2e56Smrgtypedef XID RRCrtc;
65f7df2e56Smrgtypedef XID RRProvider;
667e31ba66Smrgtypedef XID RRLease;
6705b261ecSmrg
68f7df2e56Smrgextern int RREventBase, RRErrorBase;
69f7df2e56Smrg
70f7df2e56Smrgextern int (*ProcRandrVector[RRNumberRequests]) (ClientPtr);
71f7df2e56Smrgextern int (*SProcRandrVector[RRNumberRequests]) (ClientPtr);
7205b261ecSmrg
7305b261ecSmrg/*
7405b261ecSmrg * Modeline for a monitor. Name follows directly after this struct
7505b261ecSmrg */
7605b261ecSmrg
7705b261ecSmrg#define RRModeName(pMode) ((char *) (pMode + 1))
78f7df2e56Smrgtypedef struct _rrMode RRModeRec, *RRModePtr;
79f7df2e56Smrgtypedef struct _rrPropertyValue RRPropertyValueRec, *RRPropertyValuePtr;
80f7df2e56Smrgtypedef struct _rrProperty RRPropertyRec, *RRPropertyPtr;
81f7df2e56Smrgtypedef struct _rrCrtc RRCrtcRec, *RRCrtcPtr;
82f7df2e56Smrgtypedef struct _rrOutput RROutputRec, *RROutputPtr;
83f7df2e56Smrgtypedef struct _rrProvider RRProviderRec, *RRProviderPtr;
84f7df2e56Smrgtypedef struct _rrMonitor RRMonitorRec, *RRMonitorPtr;
857e31ba66Smrgtypedef struct _rrLease RRLeaseRec, *RRLeasePtr;
8605b261ecSmrg
8705b261ecSmrgstruct _rrMode {
88f7df2e56Smrg    int refcnt;
89f7df2e56Smrg    xRRModeInfo mode;
90f7df2e56Smrg    char *name;
91f7df2e56Smrg    ScreenPtr userScreen;
9205b261ecSmrg};
9305b261ecSmrg
9405b261ecSmrgstruct _rrPropertyValue {
95f7df2e56Smrg    Atom type;                  /* ignored by server */
96f7df2e56Smrg    short format;               /* format of data for swapping - 8,16,32 */
97f7df2e56Smrg    long size;                  /* size of data in (format/8) bytes */
98f7df2e56Smrg    void *data;                 /* private to client */
9905b261ecSmrg};
10005b261ecSmrg
10105b261ecSmrgstruct _rrProperty {
102f7df2e56Smrg    RRPropertyPtr next;
103f7df2e56Smrg    ATOM propertyName;
104f7df2e56Smrg    Bool is_pending;
105f7df2e56Smrg    Bool range;
106f7df2e56Smrg    Bool immutable;
107f7df2e56Smrg    int num_valid;
108f7df2e56Smrg    INT32 *valid_values;
109f7df2e56Smrg    RRPropertyValueRec current, pending;
11005b261ecSmrg};
11105b261ecSmrg
11205b261ecSmrgstruct _rrCrtc {
113f7df2e56Smrg    RRCrtc id;
114f7df2e56Smrg    ScreenPtr pScreen;
115f7df2e56Smrg    RRModePtr mode;
116f7df2e56Smrg    int x, y;
117f7df2e56Smrg    Rotation rotation;
118f7df2e56Smrg    Rotation rotations;
119f7df2e56Smrg    Bool changed;
120f7df2e56Smrg    int numOutputs;
121f7df2e56Smrg    RROutputPtr *outputs;
122f7df2e56Smrg    int gammaSize;
123f7df2e56Smrg    CARD16 *gammaRed;
124f7df2e56Smrg    CARD16 *gammaBlue;
125f7df2e56Smrg    CARD16 *gammaGreen;
126f7df2e56Smrg    void *devPrivate;
127f7df2e56Smrg    Bool transforms;
128f7df2e56Smrg    RRTransformRec client_pending_transform;
129f7df2e56Smrg    RRTransformRec client_current_transform;
130f7df2e56Smrg    PictTransform transform;
1314642e01fSmrg    struct pict_f_transform f_transform;
1324642e01fSmrg    struct pict_f_transform f_inverse;
133f7df2e56Smrg
134f7df2e56Smrg    PixmapPtr scanout_pixmap;
1357e31ba66Smrg    PixmapPtr scanout_pixmap_back;
13605b261ecSmrg};
13705b261ecSmrg
13805b261ecSmrgstruct _rrOutput {
139f7df2e56Smrg    RROutput id;
140f7df2e56Smrg    ScreenPtr pScreen;
141f7df2e56Smrg    char *name;
142f7df2e56Smrg    int nameLength;
143f7df2e56Smrg    CARD8 connection;
144f7df2e56Smrg    CARD8 subpixelOrder;
145f7df2e56Smrg    int mmWidth;
146f7df2e56Smrg    int mmHeight;
147f7df2e56Smrg    RRCrtcPtr crtc;
148f7df2e56Smrg    int numCrtcs;
149f7df2e56Smrg    RRCrtcPtr *crtcs;
150f7df2e56Smrg    int numClones;
151f7df2e56Smrg    RROutputPtr *clones;
152f7df2e56Smrg    int numModes;
153f7df2e56Smrg    int numPreferred;
154f7df2e56Smrg    RRModePtr *modes;
155f7df2e56Smrg    int numUserModes;
156f7df2e56Smrg    RRModePtr *userModes;
157f7df2e56Smrg    Bool changed;
1587e31ba66Smrg    Bool nonDesktop;
159f7df2e56Smrg    RRPropertyPtr properties;
160f7df2e56Smrg    Bool pendingProperties;
161f7df2e56Smrg    void *devPrivate;
162f7df2e56Smrg};
163f7df2e56Smrg
164f7df2e56Smrgstruct _rrProvider {
165f7df2e56Smrg    RRProvider id;
166f7df2e56Smrg    ScreenPtr pScreen;
167f7df2e56Smrg    uint32_t capabilities;
168f7df2e56Smrg    char *name;
169f7df2e56Smrg    int nameLength;
170f7df2e56Smrg    RRPropertyPtr properties;
171f7df2e56Smrg    Bool pendingProperties;
172f7df2e56Smrg    Bool changed;
173f7df2e56Smrg    struct _rrProvider *offload_sink;
174f7df2e56Smrg    struct _rrProvider *output_source;
175f7df2e56Smrg};
176f7df2e56Smrg
177f7df2e56Smrgtypedef struct _rrMonitorGeometry {
178f7df2e56Smrg    BoxRec box;
179f7df2e56Smrg    CARD32 mmWidth;
180f7df2e56Smrg    CARD32 mmHeight;
181f7df2e56Smrg} RRMonitorGeometryRec, *RRMonitorGeometryPtr;
182f7df2e56Smrg
183f7df2e56Smrgstruct _rrMonitor {
184f7df2e56Smrg    Atom name;
185f7df2e56Smrg    ScreenPtr pScreen;
186f7df2e56Smrg    int numOutputs;
187f7df2e56Smrg    RROutput *outputs;
188f7df2e56Smrg    Bool primary;
189f7df2e56Smrg    Bool automatic;
190f7df2e56Smrg    RRMonitorGeometryRec geometry;
19105b261ecSmrg};
19205b261ecSmrg
1937e31ba66Smrgtypedef enum _rrLeaseState { RRLeaseCreating, RRLeaseRunning, RRLeaseTerminating } RRLeaseState;
1947e31ba66Smrg
1957e31ba66Smrgstruct _rrLease {
1967e31ba66Smrg    struct xorg_list list;
1977e31ba66Smrg    ScreenPtr screen;
1987e31ba66Smrg    RRLease id;
1997e31ba66Smrg    RRLeaseState state;
2007e31ba66Smrg    void *devPrivate;
2017e31ba66Smrg    int numCrtcs;
2027e31ba66Smrg    RRCrtcPtr *crtcs;
2037e31ba66Smrg    int numOutputs;
2047e31ba66Smrg    RROutputPtr *outputs;
2057e31ba66Smrg};
2067e31ba66Smrg
20705b261ecSmrg#if RANDR_12_INTERFACE
208f7df2e56Smrgtypedef Bool (*RRScreenSetSizeProcPtr) (ScreenPtr pScreen,
209f7df2e56Smrg                                        CARD16 width,
210f7df2e56Smrg                                        CARD16 height,
211f7df2e56Smrg                                        CARD32 mmWidth, CARD32 mmHeight);
212f7df2e56Smrg
213f7df2e56Smrgtypedef Bool (*RRCrtcSetProcPtr) (ScreenPtr pScreen,
214f7df2e56Smrg                                  RRCrtcPtr crtc,
215f7df2e56Smrg                                  RRModePtr mode,
216f7df2e56Smrg                                  int x,
217f7df2e56Smrg                                  int y,
218f7df2e56Smrg                                  Rotation rotation,
219f7df2e56Smrg                                  int numOutputs, RROutputPtr * outputs);
220f7df2e56Smrg
221f7df2e56Smrgtypedef Bool (*RRCrtcSetGammaProcPtr) (ScreenPtr pScreen, RRCrtcPtr crtc);
222f7df2e56Smrg
223f7df2e56Smrgtypedef Bool (*RRCrtcGetGammaProcPtr) (ScreenPtr pScreen, RRCrtcPtr crtc);
224f7df2e56Smrg
225f7df2e56Smrgtypedef Bool (*RROutputSetPropertyProcPtr) (ScreenPtr pScreen,
226f7df2e56Smrg                                            RROutputPtr output,
227f7df2e56Smrg                                            Atom property,
228f7df2e56Smrg                                            RRPropertyValuePtr value);
229f7df2e56Smrg
230f7df2e56Smrgtypedef Bool (*RROutputValidateModeProcPtr) (ScreenPtr pScreen,
231f7df2e56Smrg                                             RROutputPtr output,
232f7df2e56Smrg                                             RRModePtr mode);
233f7df2e56Smrg
234f7df2e56Smrgtypedef void (*RRModeDestroyProcPtr) (ScreenPtr pScreen, RRModePtr mode);
23505b261ecSmrg
23605b261ecSmrg#endif
23705b261ecSmrg
2384642e01fSmrg#if RANDR_13_INTERFACE
239f7df2e56Smrgtypedef Bool (*RROutputGetPropertyProcPtr) (ScreenPtr pScreen,
240f7df2e56Smrg                                            RROutputPtr output, Atom property);
241f7df2e56Smrgtypedef Bool (*RRGetPanningProcPtr) (ScreenPtr pScrn,
242f7df2e56Smrg                                     RRCrtcPtr crtc,
243f7df2e56Smrg                                     BoxPtr totalArea,
244f7df2e56Smrg                                     BoxPtr trackingArea, INT16 *border);
245f7df2e56Smrgtypedef Bool (*RRSetPanningProcPtr) (ScreenPtr pScrn,
246f7df2e56Smrg                                     RRCrtcPtr crtc,
247f7df2e56Smrg                                     BoxPtr totalArea,
248f7df2e56Smrg                                     BoxPtr trackingArea, INT16 *border);
249f7df2e56Smrg
250f7df2e56Smrg#endif                          /* RANDR_13_INTERFACE */
251f7df2e56Smrg
252f7df2e56Smrgtypedef Bool (*RRProviderGetPropertyProcPtr) (ScreenPtr pScreen,
253f7df2e56Smrg                                            RRProviderPtr provider, Atom property);
254f7df2e56Smrgtypedef Bool (*RRProviderSetPropertyProcPtr) (ScreenPtr pScreen,
255f7df2e56Smrg                                              RRProviderPtr provider,
256f7df2e56Smrg                                              Atom property,
257f7df2e56Smrg                                              RRPropertyValuePtr value);
258f7df2e56Smrg
259f7df2e56Smrgtypedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation * rotations);
260f7df2e56Smrgtypedef Bool (*RRCloseScreenProcPtr) (ScreenPtr pscreen);
261f7df2e56Smrg
262f7df2e56Smrgtypedef Bool (*RRProviderSetOutputSourceProcPtr)(ScreenPtr pScreen,
263f7df2e56Smrg                                          RRProviderPtr provider,
264f7df2e56Smrg                                          RRProviderPtr output_source);
265f7df2e56Smrg
266f7df2e56Smrgtypedef Bool (*RRProviderSetOffloadSinkProcPtr)(ScreenPtr pScreen,
267f7df2e56Smrg                                         RRProviderPtr provider,
268f7df2e56Smrg                                         RRProviderPtr offload_sink);
269f7df2e56Smrg
270f7df2e56Smrg
271f7df2e56Smrgtypedef void (*RRProviderDestroyProcPtr)(ScreenPtr pScreen,
272f7df2e56Smrg                                         RRProviderPtr provider);
27305b261ecSmrg
2747e31ba66Smrg/* Additions for 1.6 */
2757e31ba66Smrg
2767e31ba66Smrgtypedef int (*RRCreateLeaseProcPtr)(ScreenPtr screen,
2777e31ba66Smrg                                    RRLeasePtr lease,
2787e31ba66Smrg                                    int *fd);
2797e31ba66Smrg
2807e31ba66Smrgtypedef void (*RRTerminateLeaseProcPtr)(ScreenPtr screen,
2817e31ba66Smrg                                        RRLeasePtr lease);
2827e31ba66Smrg
28305b261ecSmrg/* These are for 1.0 compatibility */
284f7df2e56Smrg
28505b261ecSmrgtypedef struct _rrRefresh {
286f7df2e56Smrg    CARD16 rate;
287f7df2e56Smrg    RRModePtr mode;
28805b261ecSmrg} RRScreenRate, *RRScreenRatePtr;
28905b261ecSmrg
29005b261ecSmrgtypedef struct _rrScreenSize {
291f7df2e56Smrg    int id;
292f7df2e56Smrg    short width, height;
293f7df2e56Smrg    short mmWidth, mmHeight;
294f7df2e56Smrg    int nRates;
29505b261ecSmrg    RRScreenRatePtr pRates;
29605b261ecSmrg} RRScreenSize, *RRScreenSizePtr;
29705b261ecSmrg
29805b261ecSmrg#ifdef RANDR_10_INTERFACE
29905b261ecSmrg
300f7df2e56Smrgtypedef Bool (*RRSetConfigProcPtr) (ScreenPtr pScreen,
301f7df2e56Smrg                                    Rotation rotation,
302f7df2e56Smrg                                    int rate, RRScreenSizePtr pSize);
30305b261ecSmrg
30405b261ecSmrg#endif
305f7df2e56Smrg
306f7df2e56Smrgtypedef Bool (*RRCrtcSetScanoutPixmapProcPtr)(RRCrtcPtr crtc, PixmapPtr pixmap);
30705b261ecSmrg
3087e31ba66Smrgtypedef Bool (*RRStartFlippingPixmapTrackingProcPtr)(RRCrtcPtr, DrawablePtr,
3097e31ba66Smrg                                                     PixmapPtr, PixmapPtr,
3107e31ba66Smrg                                                     int x, int y,
3117e31ba66Smrg                                                     int dst_x, int dst_y,
3127e31ba66Smrg                                                     Rotation rotation);
3137e31ba66Smrg
3147e31ba66Smrgtypedef Bool (*RREnableSharedPixmapFlippingProcPtr)(RRCrtcPtr,
3157e31ba66Smrg                                                    PixmapPtr front,
3167e31ba66Smrg                                                    PixmapPtr back);
3177e31ba66Smrg
3187e31ba66Smrgtypedef void (*RRDisableSharedPixmapFlippingProcPtr)(RRCrtcPtr);
3197e31ba66Smrg
3207e31ba66Smrg
32105b261ecSmrgtypedef struct _rrScrPriv {
32205b261ecSmrg    /*
32305b261ecSmrg     * 'public' part of the structure; DDXen fill this in
32405b261ecSmrg     * as they initialize
32505b261ecSmrg     */
32605b261ecSmrg#if RANDR_10_INTERFACE
327f7df2e56Smrg    RRSetConfigProcPtr rrSetConfig;
32805b261ecSmrg#endif
329f7df2e56Smrg    RRGetInfoProcPtr rrGetInfo;
33005b261ecSmrg#if RANDR_12_INTERFACE
331f7df2e56Smrg    RRScreenSetSizeProcPtr rrScreenSetSize;
332f7df2e56Smrg    RRCrtcSetProcPtr rrCrtcSet;
333f7df2e56Smrg    RRCrtcSetGammaProcPtr rrCrtcSetGamma;
334f7df2e56Smrg    RRCrtcGetGammaProcPtr rrCrtcGetGamma;
335f7df2e56Smrg    RROutputSetPropertyProcPtr rrOutputSetProperty;
336f7df2e56Smrg    RROutputValidateModeProcPtr rrOutputValidateMode;
337f7df2e56Smrg    RRModeDestroyProcPtr rrModeDestroy;
33805b261ecSmrg#endif
3394642e01fSmrg#if RANDR_13_INTERFACE
340f7df2e56Smrg    RROutputGetPropertyProcPtr rrOutputGetProperty;
341f7df2e56Smrg    RRGetPanningProcPtr rrGetPanning;
342f7df2e56Smrg    RRSetPanningProcPtr rrSetPanning;
3434642e01fSmrg#endif
344f7df2e56Smrg    /* TODO #if RANDR_15_INTERFACE */
345f7df2e56Smrg    RRCrtcSetScanoutPixmapProcPtr rrCrtcSetScanoutPixmap;
346f7df2e56Smrg
3477e31ba66Smrg    RRStartFlippingPixmapTrackingProcPtr rrStartFlippingPixmapTracking;
3487e31ba66Smrg    RREnableSharedPixmapFlippingProcPtr rrEnableSharedPixmapFlipping;
3497e31ba66Smrg    RRDisableSharedPixmapFlippingProcPtr rrDisableSharedPixmapFlipping;
3507e31ba66Smrg
351f7df2e56Smrg    RRProviderSetOutputSourceProcPtr rrProviderSetOutputSource;
352f7df2e56Smrg    RRProviderSetOffloadSinkProcPtr rrProviderSetOffloadSink;
353f7df2e56Smrg    RRProviderGetPropertyProcPtr rrProviderGetProperty;
354f7df2e56Smrg    RRProviderSetPropertyProcPtr rrProviderSetProperty;
3557e31ba66Smrg
3567e31ba66Smrg    RRCreateLeaseProcPtr rrCreateLease;
3577e31ba66Smrg    RRTerminateLeaseProcPtr rrTerminateLease;
3587e31ba66Smrg
35905b261ecSmrg    /*
36005b261ecSmrg     * Private part of the structure; not considered part of the ABI
36105b261ecSmrg     */
362f7df2e56Smrg    TimeStamp lastSetTime;      /* last changed by client */
363f7df2e56Smrg    TimeStamp lastConfigTime;   /* possible configs changed */
364f7df2e56Smrg    RRCloseScreenProcPtr CloseScreen;
36505b261ecSmrg
366f7df2e56Smrg    Bool changed;               /* some config changed */
367f7df2e56Smrg    Bool configChanged;         /* configuration changed */
368f7df2e56Smrg    Bool layoutChanged;         /* screen layout changed */
369f7df2e56Smrg    Bool resourcesChanged;      /* screen resources change */
3707e31ba66Smrg    Bool leasesChanged;         /* leases change */
37105b261ecSmrg
372f7df2e56Smrg    CARD16 minWidth, minHeight;
373f7df2e56Smrg    CARD16 maxWidth, maxHeight;
374f7df2e56Smrg    CARD16 width, height;       /* last known screen size */
375f7df2e56Smrg    CARD16 mmWidth, mmHeight;   /* last known screen size */
37605b261ecSmrg
377f7df2e56Smrg    int numOutputs;
378f7df2e56Smrg    RROutputPtr *outputs;
379f7df2e56Smrg    RROutputPtr primaryOutput;
38005b261ecSmrg
381f7df2e56Smrg    int numCrtcs;
382f7df2e56Smrg    RRCrtcPtr *crtcs;
38305b261ecSmrg
38405b261ecSmrg    /* Last known pointer position */
385f7df2e56Smrg    RRCrtcPtr pointerCrtc;
38605b261ecSmrg
38705b261ecSmrg#ifdef RANDR_10_INTERFACE
38805b261ecSmrg    /*
38905b261ecSmrg     * Configuration information
39005b261ecSmrg     */
391f7df2e56Smrg    Rotation rotations;
392f7df2e56Smrg    CARD16 reqWidth, reqHeight;
393f7df2e56Smrg
394f7df2e56Smrg    int nSizes;
395f7df2e56Smrg    RRScreenSizePtr pSizes;
396f7df2e56Smrg
397f7df2e56Smrg    Rotation rotation;
398f7df2e56Smrg    int rate;
399f7df2e56Smrg    int size;
40005b261ecSmrg#endif
401f7df2e56Smrg    Bool discontiguous;
402f7df2e56Smrg
403f7df2e56Smrg    RRProviderPtr provider;
404f7df2e56Smrg
405f7df2e56Smrg    RRProviderDestroyProcPtr rrProviderDestroy;
406f7df2e56Smrg
407f7df2e56Smrg    int numMonitors;
408f7df2e56Smrg    RRMonitorPtr *monitors;
409f7df2e56Smrg
4107e31ba66Smrg    struct xorg_list leases;
41105b261ecSmrg} rrScrPrivRec, *rrScrPrivPtr;
41205b261ecSmrg
4136747b715Smrgextern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec;
414f7df2e56Smrg
4156747b715Smrg#define rrPrivKey (&rrPrivKeyRec)
41605b261ecSmrg
4174642e01fSmrg#define rrGetScrPriv(pScr)  ((rrScrPrivPtr)dixLookupPrivate(&(pScr)->devPrivates, rrPrivKey))
41805b261ecSmrg#define rrScrPriv(pScr)	rrScrPrivPtr    pScrPriv = rrGetScrPriv(pScr)
4194642e01fSmrg#define SetRRScreen(s,p) dixSetPrivate(&(s)->devPrivates, rrPrivKey, p)
42005b261ecSmrg
42105b261ecSmrg/*
42205b261ecSmrg * each window has a list of clients requesting
42305b261ecSmrg * RRNotify events.  Each client has a resource
42405b261ecSmrg * for each window it selects RRNotify input for,
42505b261ecSmrg * this resource is used to delete the RRNotifyRec
42605b261ecSmrg * entry from the per-window queue.
42705b261ecSmrg */
42805b261ecSmrg
42905b261ecSmrgtypedef struct _RREvent *RREventPtr;
43005b261ecSmrg
43105b261ecSmrgtypedef struct _RREvent {
432f7df2e56Smrg    RREventPtr next;
433f7df2e56Smrg    ClientPtr client;
434f7df2e56Smrg    WindowPtr window;
435f7df2e56Smrg    XID clientResource;
436f7df2e56Smrg    int mask;
43705b261ecSmrg} RREventRec;
43805b261ecSmrg
43905b261ecSmrgtypedef struct _RRTimes {
440f7df2e56Smrg    TimeStamp setTime;
441f7df2e56Smrg    TimeStamp configTime;
44205b261ecSmrg} RRTimesRec, *RRTimesPtr;
44305b261ecSmrg
44405b261ecSmrgtypedef struct _RRClient {
445f7df2e56Smrg    int major_version;
446f7df2e56Smrg    int minor_version;
44705b261ecSmrg/*  RRTimesRec	times[0]; */
44805b261ecSmrg} RRClientRec, *RRClientPtr;
44905b261ecSmrg
450f7df2e56Smrgextern RESTYPE RRClientType, RREventType;     /* resource types for event masks */
451f7df2e56Smrgextern DevPrivateKeyRec RRClientPrivateKeyRec;
452f7df2e56Smrg
4536747b715Smrg#define RRClientPrivateKey (&RRClientPrivateKeyRec)
4547e31ba66Smrgextern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType, RRProviderType, RRLeaseType;
4556747b715Smrg
4566747b715Smrg#define VERIFY_RR_OUTPUT(id, ptr, a)\
4576747b715Smrg    {\
458f7df2e56Smrg	int rc = dixLookupResourceByType((void **)&(ptr), id,\
4596747b715Smrg	                                 RROutputType, client, a);\
4606747b715Smrg	if (rc != Success) {\
4616747b715Smrg	    client->errorValue = id;\
4626747b715Smrg	    return rc;\
4636747b715Smrg	}\
4646747b715Smrg    }
4656747b715Smrg
4666747b715Smrg#define VERIFY_RR_CRTC(id, ptr, a)\
4676747b715Smrg    {\
468f7df2e56Smrg	int rc = dixLookupResourceByType((void **)&(ptr), id,\
4696747b715Smrg	                                 RRCrtcType, client, a);\
4706747b715Smrg	if (rc != Success) {\
4716747b715Smrg	    client->errorValue = id;\
4726747b715Smrg	    return rc;\
4736747b715Smrg	}\
4746747b715Smrg    }
4756747b715Smrg
4766747b715Smrg#define VERIFY_RR_MODE(id, ptr, a)\
4776747b715Smrg    {\
478f7df2e56Smrg	int rc = dixLookupResourceByType((void **)&(ptr), id,\
4796747b715Smrg	                                 RRModeType, client, a);\
4806747b715Smrg	if (rc != Success) {\
4816747b715Smrg	    client->errorValue = id;\
4826747b715Smrg	    return rc;\
4836747b715Smrg	}\
4846747b715Smrg    }
48505b261ecSmrg
486f7df2e56Smrg#define VERIFY_RR_PROVIDER(id, ptr, a)\
487f7df2e56Smrg    {\
488f7df2e56Smrg        int rc = dixLookupResourceByType((void **)&(ptr), id,\
489f7df2e56Smrg                                         RRProviderType, client, a);\
490f7df2e56Smrg        if (rc != Success) {\
491f7df2e56Smrg            client->errorValue = id;\
492f7df2e56Smrg            return rc;\
493f7df2e56Smrg        }\
494f7df2e56Smrg    }
495f7df2e56Smrg
4967e31ba66Smrg#define VERIFY_RR_LEASE(id, ptr, a)\
4977e31ba66Smrg    {\
4987e31ba66Smrg        int rc = dixLookupResourceByType((void **)&(ptr), id,\
4997e31ba66Smrg                                         RRLeaseType, client, a);\
5007e31ba66Smrg        if (rc != Success) {\
5017e31ba66Smrg            client->errorValue = id;\
5027e31ba66Smrg            return rc;\
5037e31ba66Smrg        }\
5047e31ba66Smrg    }
5057e31ba66Smrg
5064642e01fSmrg#define GetRRClient(pClient)    ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey))
50705b261ecSmrg#define rrClientPriv(pClient)	RRClientPtr pRRClient = GetRRClient(pClient)
50805b261ecSmrg
50905b261ecSmrg#ifdef RANDR_12_INTERFACE
51005b261ecSmrg/*
51105b261ecSmrg * Set the range of sizes for the screen
51205b261ecSmrg */
5136747b715Smrgextern _X_EXPORT void
514f7df2e56Smrg
515f7df2e56SmrgRRScreenSetSizeRange(ScreenPtr pScreen,
516f7df2e56Smrg                     CARD16 minWidth,
517f7df2e56Smrg                     CARD16 minHeight, CARD16 maxWidth, CARD16 maxHeight);
51805b261ecSmrg#endif
51905b261ecSmrg
52005b261ecSmrg/* rrscreen.c */
52105b261ecSmrg/*
52205b261ecSmrg * Notify the extension that the screen size has been changed.
52305b261ecSmrg * The driver is responsible for calling this whenever it has changed
52405b261ecSmrg * the size of the screen
52505b261ecSmrg */
5266747b715Smrgextern _X_EXPORT void
527f7df2e56Smrg RRScreenSizeNotify(ScreenPtr pScreen);
52805b261ecSmrg
52905b261ecSmrg/*
53005b261ecSmrg * Request that the screen be resized
53105b261ecSmrg */
5326747b715Smrgextern _X_EXPORT Bool
533f7df2e56Smrg
534f7df2e56SmrgRRScreenSizeSet(ScreenPtr pScreen,
535f7df2e56Smrg                CARD16 width, CARD16 height, CARD32 mmWidth, CARD32 mmHeight);
53605b261ecSmrg
53705b261ecSmrg/*
53805b261ecSmrg * Send ConfigureNotify event to root window when 'something' happens
53905b261ecSmrg */
5406747b715Smrgextern _X_EXPORT void
541f7df2e56Smrg RRSendConfigNotify(ScreenPtr pScreen);
542f7df2e56Smrg
54305b261ecSmrg/*
54405b261ecSmrg * screen dispatch
54505b261ecSmrg */
5466747b715Smrgextern _X_EXPORT int
547f7df2e56Smrg ProcRRGetScreenSizeRange(ClientPtr client);
54805b261ecSmrg
5496747b715Smrgextern _X_EXPORT int
550f7df2e56Smrg ProcRRSetScreenSize(ClientPtr client);
55105b261ecSmrg
5526747b715Smrgextern _X_EXPORT int
553f7df2e56Smrg ProcRRGetScreenResources(ClientPtr client);
55405b261ecSmrg
5556747b715Smrgextern _X_EXPORT int
556f7df2e56Smrg ProcRRGetScreenResourcesCurrent(ClientPtr client);
5574642e01fSmrg
5586747b715Smrgextern _X_EXPORT int
559f7df2e56Smrg ProcRRSetScreenConfig(ClientPtr client);
56005b261ecSmrg
5616747b715Smrgextern _X_EXPORT int
562f7df2e56Smrg ProcRRGetScreenInfo(ClientPtr client);
56305b261ecSmrg
56405b261ecSmrg/*
56505b261ecSmrg * Deliver a ScreenNotify event
56605b261ecSmrg */
5676747b715Smrgextern _X_EXPORT void
568f7df2e56Smrg RRDeliverScreenEvent(ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
569f7df2e56Smrg
570f7df2e56Smrgextern _X_EXPORT void
571f7df2e56Smrg RRResourcesChanged(ScreenPtr pScreen);
572f7df2e56Smrg
57305b261ecSmrg/* randr.c */
574f7df2e56Smrg/* set a screen change on the primary screen */
575f7df2e56Smrgextern _X_EXPORT void
576f7df2e56SmrgRRSetChanged(ScreenPtr pScreen);
577f7df2e56Smrg
57805b261ecSmrg/*
57905b261ecSmrg * Send all pending events
58005b261ecSmrg */
5816747b715Smrgextern _X_EXPORT void
582f7df2e56Smrg RRTellChanged(ScreenPtr pScreen);
58305b261ecSmrg
584051b6151Schristosextern _X_EXPORT void
585051b6151SchristosRRSetChanged (ScreenPtr pScreen);
586051b6151Schristos
58705b261ecSmrg/*
58805b261ecSmrg * Poll the driver for changed information
58905b261ecSmrg */
5906747b715Smrgextern _X_EXPORT Bool
591f7df2e56Smrg RRGetInfo(ScreenPtr pScreen, Bool force_query);
59205b261ecSmrg
593f7df2e56Smrgextern _X_EXPORT Bool RRInit(void);
59405b261ecSmrg
5956747b715Smrgextern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen);
59605b261ecSmrg
597f7df2e56Smrgextern _X_EXPORT RROutputPtr RRFirstOutput(ScreenPtr pScreen);
59805b261ecSmrg
5997e31ba66Smrgextern _X_EXPORT Bool RROutputSetNonDesktop(RROutputPtr output, Bool non_desktop);
6007e31ba66Smrg
6016747b715Smrgextern _X_EXPORT CARD16
602f7df2e56Smrg RRVerticalRefresh(xRRModeInfo * mode);
60305b261ecSmrg
604f7df2e56Smrg#ifdef RANDR_10_INTERFACE
60505b261ecSmrg/*
60605b261ecSmrg * This is the old interface, deprecated but left
60705b261ecSmrg * around for compatibility
60805b261ecSmrg */
60905b261ecSmrg
61005b261ecSmrg/*
61105b261ecSmrg * Then, register the specific size with the screen
61205b261ecSmrg */
61305b261ecSmrg
6146747b715Smrgextern _X_EXPORT RRScreenSizePtr
615f7df2e56SmrgRRRegisterSize(ScreenPtr pScreen,
616f7df2e56Smrg               short width, short height, short mmWidth, short mmHeight);
61705b261ecSmrg
6186747b715Smrgextern _X_EXPORT Bool
619f7df2e56Smrg RRRegisterRate(ScreenPtr pScreen, RRScreenSizePtr pSize, int rate);
62005b261ecSmrg
62105b261ecSmrg/*
62205b261ecSmrg * Finally, set the current configuration of the screen
62305b261ecSmrg */
62405b261ecSmrg
6256747b715Smrgextern _X_EXPORT void
62605b261ecSmrg
627f7df2e56SmrgRRSetCurrentConfig(ScreenPtr pScreen,
628f7df2e56Smrg                   Rotation rotation, int rate, RRScreenSizePtr pSize);
62905b261ecSmrg
630f7df2e56Smrgextern _X_EXPORT Rotation RRGetRotation(ScreenPtr pScreen);
631f7df2e56Smrg
632f7df2e56Smrg#endif
63305b261ecSmrg
63405b261ecSmrg/* rrcrtc.c */
63505b261ecSmrg
63605b261ecSmrg/*
63705b261ecSmrg * Notify the CRTC of some change; layoutChanged indicates that
63805b261ecSmrg * some position or size element changed
63905b261ecSmrg */
6406747b715Smrgextern _X_EXPORT void
641f7df2e56Smrg RRCrtcChanged(RRCrtcPtr crtc, Bool layoutChanged);
64205b261ecSmrg
64305b261ecSmrg/*
64405b261ecSmrg * Create a CRTC
64505b261ecSmrg */
646f7df2e56Smrgextern _X_EXPORT RRCrtcPtr RRCrtcCreate(ScreenPtr pScreen, void *devPrivate);
64705b261ecSmrg
64805b261ecSmrg/*
64905b261ecSmrg * Set the allowed rotations on a CRTC
65005b261ecSmrg */
6516747b715Smrgextern _X_EXPORT void
652f7df2e56Smrg RRCrtcSetRotations(RRCrtcPtr crtc, Rotation rotations);
65305b261ecSmrg
6544642e01fSmrg/*
6554642e01fSmrg * Set whether transforms are allowed on a CRTC
6564642e01fSmrg */
6576747b715Smrgextern _X_EXPORT void
658f7df2e56Smrg RRCrtcSetTransformSupport(RRCrtcPtr crtc, Bool transforms);
6594642e01fSmrg
66005b261ecSmrg/*
66105b261ecSmrg * Notify the extension that the Crtc has been reconfigured,
66205b261ecSmrg * the driver calls this whenever it has updated the mode
66305b261ecSmrg */
6646747b715Smrgextern _X_EXPORT Bool
665f7df2e56Smrg
666f7df2e56SmrgRRCrtcNotify(RRCrtcPtr crtc,
667f7df2e56Smrg             RRModePtr mode,
668f7df2e56Smrg             int x,
669f7df2e56Smrg             int y,
670f7df2e56Smrg             Rotation rotation,
671f7df2e56Smrg             RRTransformPtr transform, int numOutputs, RROutputPtr * outputs);
67205b261ecSmrg
6736747b715Smrgextern _X_EXPORT void
674f7df2e56Smrg RRDeliverCrtcEvent(ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc);
675f7df2e56Smrg
67605b261ecSmrg/*
67705b261ecSmrg * Request that the Crtc be reconfigured
67805b261ecSmrg */
6796747b715Smrgextern _X_EXPORT Bool
680f7df2e56Smrg
681f7df2e56SmrgRRCrtcSet(RRCrtcPtr crtc,
682f7df2e56Smrg          RRModePtr mode,
683f7df2e56Smrg          int x,
684f7df2e56Smrg          int y, Rotation rotation, int numOutput, RROutputPtr * outputs);
68505b261ecSmrg
68605b261ecSmrg/*
68705b261ecSmrg * Request that the Crtc gamma be changed
68805b261ecSmrg */
68905b261ecSmrg
6906747b715Smrgextern _X_EXPORT Bool
691f7df2e56Smrg RRCrtcGammaSet(RRCrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue);
69205b261ecSmrg
6936747b715Smrg/*
6946747b715Smrg * Request current gamma back from the DDX (if possible).
6956747b715Smrg * This includes gamma size.
6966747b715Smrg */
697f7df2e56Smrg
6986747b715Smrgextern _X_EXPORT Bool
699f7df2e56Smrg RRCrtcGammaGet(RRCrtcPtr crtc);
7006747b715Smrg
70105b261ecSmrg/*
70205b261ecSmrg * Notify the extension that the Crtc gamma has been changed
70305b261ecSmrg * The driver calls this whenever it has changed the gamma values
70405b261ecSmrg * in the RRCrtcRec
70505b261ecSmrg */
70605b261ecSmrg
7076747b715Smrgextern _X_EXPORT Bool
708f7df2e56Smrg RRCrtcGammaNotify(RRCrtcPtr crtc);
70905b261ecSmrg
71005b261ecSmrg/*
71105b261ecSmrg * Set the size of the gamma table at server startup time
71205b261ecSmrg */
71305b261ecSmrg
7146747b715Smrgextern _X_EXPORT Bool
715f7df2e56Smrg RRCrtcGammaSetSize(RRCrtcPtr crtc, int size);
71605b261ecSmrg
71705b261ecSmrg/*
71805b261ecSmrg * Return the area of the frame buffer scanned out by the crtc,
71905b261ecSmrg * taking into account the current mode and rotation
72005b261ecSmrg */
72105b261ecSmrg
7226747b715Smrgextern _X_EXPORT void
723f7df2e56Smrg RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height);
72405b261ecSmrg
7254642e01fSmrg/*
7264642e01fSmrg * Return crtc transform
7274642e01fSmrg */
728f7df2e56Smrgextern _X_EXPORT RRTransformPtr RRCrtcGetTransform(RRCrtcPtr crtc);
7294642e01fSmrg
7304642e01fSmrg/*
7314642e01fSmrg * Check whether the pending and current transforms are the same
7324642e01fSmrg */
7336747b715Smrgextern _X_EXPORT Bool
734f7df2e56Smrg RRCrtcPendingTransform(RRCrtcPtr crtc);
7354642e01fSmrg
73605b261ecSmrg/*
73705b261ecSmrg * Destroy a Crtc at shutdown
73805b261ecSmrg */
7396747b715Smrgextern _X_EXPORT void
740f7df2e56Smrg RRCrtcDestroy(RRCrtcPtr crtc);
7414642e01fSmrg
7424642e01fSmrg/*
7434642e01fSmrg * Set the pending CRTC transformation
7444642e01fSmrg */
7454642e01fSmrg
7466747b715Smrgextern _X_EXPORT int
747f7df2e56Smrg
748f7df2e56SmrgRRCrtcTransformSet(RRCrtcPtr crtc,
749f7df2e56Smrg                   PictTransformPtr transform,
750f7df2e56Smrg                   struct pict_f_transform *f_transform,
751f7df2e56Smrg                   struct pict_f_transform *f_inverse,
752f7df2e56Smrg                   char *filter, int filter_len, xFixed * params, int nparams);
7534642e01fSmrg
75405b261ecSmrg/*
75505b261ecSmrg * Initialize crtc type
75605b261ecSmrg */
7576747b715Smrgextern _X_EXPORT Bool
758f7df2e56Smrg RRCrtcInit(void);
75905b261ecSmrg
7606747b715Smrg/*
7616747b715Smrg * Initialize crtc type error value
7626747b715Smrg */
7636747b715Smrgextern _X_EXPORT void
764f7df2e56Smrg RRCrtcInitErrorValue(void);
765f7df2e56Smrg
766f7df2e56Smrg/*
767f7df2e56Smrg * Detach and free a scanout pixmap
768f7df2e56Smrg */
769f7df2e56Smrgextern _X_EXPORT void
770f7df2e56Smrg RRCrtcDetachScanoutPixmap(RRCrtcPtr crtc);
771f7df2e56Smrg
772f7df2e56Smrgextern _X_EXPORT Bool
773f7df2e56Smrg RRReplaceScanoutPixmap(DrawablePtr pDrawable, PixmapPtr pPixmap, Bool enable);
7746747b715Smrg
7757e31ba66Smrg/*
7767e31ba66Smrg * Return if the screen has any scanout_pixmap's attached
7777e31ba66Smrg */
7787e31ba66Smrgextern _X_EXPORT Bool
7797e31ba66Smrg RRHasScanoutPixmap(ScreenPtr pScreen);
7807e31ba66Smrg
78105b261ecSmrg/*
78205b261ecSmrg * Crtc dispatch
78305b261ecSmrg */
78405b261ecSmrg
7856747b715Smrgextern _X_EXPORT int
786f7df2e56Smrg ProcRRGetCrtcInfo(ClientPtr client);
78705b261ecSmrg
7886747b715Smrgextern _X_EXPORT int
789f7df2e56Smrg ProcRRSetCrtcConfig(ClientPtr client);
79005b261ecSmrg
7916747b715Smrgextern _X_EXPORT int
792f7df2e56Smrg ProcRRGetCrtcGammaSize(ClientPtr client);
79305b261ecSmrg
7946747b715Smrgextern _X_EXPORT int
795f7df2e56Smrg ProcRRGetCrtcGamma(ClientPtr client);
79605b261ecSmrg
7976747b715Smrgextern _X_EXPORT int
798f7df2e56Smrg ProcRRSetCrtcGamma(ClientPtr client);
79905b261ecSmrg
8006747b715Smrgextern _X_EXPORT int
801f7df2e56Smrg ProcRRSetCrtcTransform(ClientPtr client);
8024642e01fSmrg
8036747b715Smrgextern _X_EXPORT int
804f7df2e56Smrg ProcRRGetCrtcTransform(ClientPtr client);
8054642e01fSmrg
8064642e01fSmrgint
807f7df2e56Smrg ProcRRGetPanning(ClientPtr client);
8084642e01fSmrg
8094642e01fSmrgint
810f7df2e56Smrg ProcRRSetPanning(ClientPtr client);
811f7df2e56Smrg
812f7df2e56Smrgvoid
813f7df2e56Smrg RRConstrainCursorHarder(DeviceIntPtr, ScreenPtr, int, int *, int *);
8144642e01fSmrg
81505b261ecSmrg/* rrdispatch.c */
8166747b715Smrgextern _X_EXPORT Bool
817f7df2e56Smrg RRClientKnowsRates(ClientPtr pClient);
81805b261ecSmrg
8197e31ba66Smrg/* rrlease.c */
8207e31ba66Smrgvoid
8217e31ba66SmrgRRDeliverLeaseEvent(ClientPtr client, WindowPtr window);
8227e31ba66Smrg
8237e31ba66Smrgextern _X_EXPORT void
8247e31ba66SmrgRRLeaseTerminated(RRLeasePtr lease);
8257e31ba66Smrg
8267e31ba66Smrgextern _X_EXPORT void
8277e31ba66SmrgRRLeaseFree(RRLeasePtr lease);
8287e31ba66Smrg
8297e31ba66Smrgextern _X_EXPORT Bool
8307e31ba66SmrgRRCrtcIsLeased(RRCrtcPtr crtc);
8317e31ba66Smrg
8327e31ba66Smrgextern _X_EXPORT Bool
8337e31ba66SmrgRROutputIsLeased(RROutputPtr output);
8347e31ba66Smrg
8357e31ba66Smrgvoid
8367e31ba66SmrgRRTerminateLease(RRLeasePtr lease);
8377e31ba66Smrg
8387e31ba66SmrgBool
8397e31ba66SmrgRRLeaseInit(void);
8407e31ba66Smrg
84105b261ecSmrg/* rrmode.c */
84205b261ecSmrg/*
84305b261ecSmrg * Find, and if necessary, create a mode
84405b261ecSmrg */
84505b261ecSmrg
846f7df2e56Smrgextern _X_EXPORT RRModePtr RRModeGet(xRRModeInfo * modeInfo, const char *name);
84705b261ecSmrg
84805b261ecSmrg/*
84905b261ecSmrg * Destroy a mode.
85005b261ecSmrg */
85105b261ecSmrg
8526747b715Smrgextern _X_EXPORT void
853f7df2e56Smrg RRModeDestroy(RRModePtr mode);
85405b261ecSmrg
85505b261ecSmrg/*
85605b261ecSmrg * Return a list of modes that are valid for some output in pScreen
85705b261ecSmrg */
858f7df2e56Smrgextern _X_EXPORT RRModePtr *RRModesForScreen(ScreenPtr pScreen, int *num_ret);
859f7df2e56Smrg
86005b261ecSmrg/*
86105b261ecSmrg * Initialize mode type
86205b261ecSmrg */
8636747b715Smrgextern _X_EXPORT Bool
864f7df2e56Smrg RRModeInit(void);
8656747b715Smrg
8666747b715Smrg/*
8676747b715Smrg * Initialize mode type error value
8686747b715Smrg */
8696747b715Smrgextern _X_EXPORT void
870f7df2e56Smrg RRModeInitErrorValue(void);
871f7df2e56Smrg
8726747b715Smrgextern _X_EXPORT int
873f7df2e56Smrg ProcRRCreateMode(ClientPtr client);
87405b261ecSmrg
8756747b715Smrgextern _X_EXPORT int
876f7df2e56Smrg ProcRRDestroyMode(ClientPtr client);
87705b261ecSmrg
8786747b715Smrgextern _X_EXPORT int
879f7df2e56Smrg ProcRRAddOutputMode(ClientPtr client);
88005b261ecSmrg
8816747b715Smrgextern _X_EXPORT int
882f7df2e56Smrg ProcRRDeleteOutputMode(ClientPtr client);
88305b261ecSmrg
88405b261ecSmrg/* rroutput.c */
88505b261ecSmrg
88605b261ecSmrg/*
88705b261ecSmrg * Notify the output of some change. configChanged indicates whether
88805b261ecSmrg * any external configuration (mode list, clones, connected status)
88905b261ecSmrg * has changed, or whether the change was strictly internal
89005b261ecSmrg * (which crtc is in use)
89105b261ecSmrg */
8926747b715Smrgextern _X_EXPORT void
893f7df2e56Smrg RROutputChanged(RROutputPtr output, Bool configChanged);
89405b261ecSmrg
89505b261ecSmrg/*
89605b261ecSmrg * Create an output
89705b261ecSmrg */
89805b261ecSmrg
8996747b715Smrgextern _X_EXPORT RROutputPtr
900f7df2e56SmrgRROutputCreate(ScreenPtr pScreen,
901f7df2e56Smrg               const char *name, int nameLength, void *devPrivate);
90205b261ecSmrg
90305b261ecSmrg/*
90405b261ecSmrg * Notify extension that output parameters have been changed
90505b261ecSmrg */
9066747b715Smrgextern _X_EXPORT Bool
907f7df2e56Smrg RROutputSetClones(RROutputPtr output, RROutputPtr * clones, int numClones);
90805b261ecSmrg
9096747b715Smrgextern _X_EXPORT Bool
910f7df2e56Smrg
911f7df2e56SmrgRROutputSetModes(RROutputPtr output,
912f7df2e56Smrg                 RRModePtr * modes, int numModes, int numPreferred);
91305b261ecSmrg
9146747b715Smrgextern _X_EXPORT int
915f7df2e56Smrg RROutputAddUserMode(RROutputPtr output, RRModePtr mode);
91605b261ecSmrg
9176747b715Smrgextern _X_EXPORT int
918f7df2e56Smrg RROutputDeleteUserMode(RROutputPtr output, RRModePtr mode);
91905b261ecSmrg
9206747b715Smrgextern _X_EXPORT Bool
921f7df2e56Smrg RROutputSetCrtcs(RROutputPtr output, RRCrtcPtr * crtcs, int numCrtcs);
92205b261ecSmrg
9236747b715Smrgextern _X_EXPORT Bool
924f7df2e56Smrg RROutputSetConnection(RROutputPtr output, CARD8 connection);
92505b261ecSmrg
9266747b715Smrgextern _X_EXPORT Bool
927f7df2e56Smrg RROutputSetSubpixelOrder(RROutputPtr output, int subpixelOrder);
92805b261ecSmrg
9296747b715Smrgextern _X_EXPORT Bool
930f7df2e56Smrg RROutputSetPhysicalSize(RROutputPtr output, int mmWidth, int mmHeight);
93105b261ecSmrg
9326747b715Smrgextern _X_EXPORT void
933f7df2e56Smrg RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output);
93405b261ecSmrg
9356747b715Smrgextern _X_EXPORT void
936f7df2e56Smrg RROutputDestroy(RROutputPtr output);
93705b261ecSmrg
9386747b715Smrgextern _X_EXPORT int
939f7df2e56Smrg ProcRRGetOutputInfo(ClientPtr client);
94005b261ecSmrg
9416747b715Smrgextern _X_EXPORT int
942f7df2e56Smrg ProcRRSetOutputPrimary(ClientPtr client);
9434642e01fSmrg
9446747b715Smrgextern _X_EXPORT int
945f7df2e56Smrg ProcRRGetOutputPrimary(ClientPtr client);
9464642e01fSmrg
94705b261ecSmrg/*
94805b261ecSmrg * Initialize output type
94905b261ecSmrg */
9506747b715Smrgextern _X_EXPORT Bool
951f7df2e56Smrg RROutputInit(void);
9526747b715Smrg
9536747b715Smrg/*
9546747b715Smrg * Initialize output type error value
9556747b715Smrg */
9566747b715Smrgextern _X_EXPORT void
957f7df2e56Smrg RROutputInitErrorValue(void);
958f7df2e56Smrg
95905b261ecSmrg/* rrpointer.c */
9606747b715Smrgextern _X_EXPORT void
961f7df2e56Smrg RRPointerMoved(ScreenPtr pScreen, int x, int y);
96205b261ecSmrg
9636747b715Smrgextern _X_EXPORT void
964f7df2e56Smrg RRPointerScreenConfigured(ScreenPtr pScreen);
96505b261ecSmrg
96605b261ecSmrg/* rrproperty.c */
96705b261ecSmrg
9686747b715Smrgextern _X_EXPORT void
969f7df2e56Smrg RRDeleteAllOutputProperties(RROutputPtr output);
97005b261ecSmrg
9716747b715Smrgextern _X_EXPORT RRPropertyValuePtr
972f7df2e56SmrgRRGetOutputProperty(RROutputPtr output, Atom property, Bool pending);
97305b261ecSmrg
9746747b715Smrgextern _X_EXPORT RRPropertyPtr
975f7df2e56SmrgRRQueryOutputProperty(RROutputPtr output, Atom property);
976f7df2e56Smrg
9776747b715Smrgextern _X_EXPORT void
978f7df2e56Smrg RRDeleteOutputProperty(RROutputPtr output, Atom property);
97905b261ecSmrg
9806747b715Smrgextern _X_EXPORT Bool
981f7df2e56Smrg RRPostPendingProperties(RROutputPtr output);
982f7df2e56Smrg
9836747b715Smrgextern _X_EXPORT int
984f7df2e56Smrg
985f7df2e56SmrgRRChangeOutputProperty(RROutputPtr output, Atom property, Atom type,
986f7df2e56Smrg                       int format, int mode, unsigned long len,
9877e31ba66Smrg                       const void *value, Bool sendevent, Bool pending);
98805b261ecSmrg
9896747b715Smrgextern _X_EXPORT int
990f7df2e56Smrg
991f7df2e56SmrgRRConfigureOutputProperty(RROutputPtr output, Atom property,
992f7df2e56Smrg                          Bool pending, Bool range, Bool immutable,
9937e31ba66Smrg                          int num_values, const INT32 *values);
9946747b715Smrgextern _X_EXPORT int
995f7df2e56Smrg ProcRRChangeOutputProperty(ClientPtr client);
99605b261ecSmrg
9976747b715Smrgextern _X_EXPORT int
998f7df2e56Smrg ProcRRGetOutputProperty(ClientPtr client);
99905b261ecSmrg
10006747b715Smrgextern _X_EXPORT int
1001f7df2e56Smrg ProcRRListOutputProperties(ClientPtr client);
100205b261ecSmrg
10036747b715Smrgextern _X_EXPORT int
1004f7df2e56Smrg ProcRRQueryOutputProperty(ClientPtr client);
100505b261ecSmrg
10066747b715Smrgextern _X_EXPORT int
1007f7df2e56Smrg ProcRRConfigureOutputProperty(ClientPtr client);
100805b261ecSmrg
10096747b715Smrgextern _X_EXPORT int
1010f7df2e56Smrg ProcRRDeleteOutputProperty(ClientPtr client);
1011f7df2e56Smrg
1012f7df2e56Smrg/* rrprovider.c */
10137e31ba66Smrg#define PRIME_SYNC_PROP         "PRIME Synchronization"
1014f7df2e56Smrgextern _X_EXPORT void
1015f7df2e56SmrgRRProviderInitErrorValue(void);
101605b261ecSmrg
1017f7df2e56Smrgextern _X_EXPORT int
1018f7df2e56SmrgProcRRGetProviders(ClientPtr client);
1019f7df2e56Smrg
1020f7df2e56Smrgextern _X_EXPORT int
1021f7df2e56SmrgProcRRGetProviderInfo(ClientPtr client);
1022f7df2e56Smrg
1023f7df2e56Smrgextern _X_EXPORT int
1024f7df2e56SmrgProcRRSetProviderOutputSource(ClientPtr client);
1025f7df2e56Smrg
1026f7df2e56Smrgextern _X_EXPORT int
1027f7df2e56SmrgProcRRSetProviderOffloadSink(ClientPtr client);
1028f7df2e56Smrg
1029f7df2e56Smrgextern _X_EXPORT Bool
1030f7df2e56SmrgRRProviderInit(void);
1031f7df2e56Smrg
1032f7df2e56Smrgextern _X_EXPORT RRProviderPtr
1033f7df2e56SmrgRRProviderCreate(ScreenPtr pScreen, const char *name,
1034f7df2e56Smrg                 int nameLength);
1035f7df2e56Smrg
1036f7df2e56Smrgextern _X_EXPORT void
1037f7df2e56SmrgRRProviderDestroy (RRProviderPtr provider);
1038f7df2e56Smrg
1039f7df2e56Smrgextern _X_EXPORT void
1040f7df2e56SmrgRRProviderSetCapabilities(RRProviderPtr provider, uint32_t capabilities);
1041f7df2e56Smrg
1042f7df2e56Smrgextern _X_EXPORT Bool
1043f7df2e56SmrgRRProviderLookup(XID id, RRProviderPtr *provider_p);
1044f7df2e56Smrg
1045f7df2e56Smrgextern _X_EXPORT void
1046f7df2e56SmrgRRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider);
1047f7df2e56Smrg
1048f7df2e56Smrg/* rrproviderproperty.c */
1049f7df2e56Smrg
1050f7df2e56Smrgextern _X_EXPORT void
1051f7df2e56Smrg RRDeleteAllProviderProperties(RRProviderPtr provider);
1052f7df2e56Smrg
1053f7df2e56Smrgextern _X_EXPORT RRPropertyValuePtr
1054f7df2e56Smrg RRGetProviderProperty(RRProviderPtr provider, Atom property, Bool pending);
1055f7df2e56Smrg
1056f7df2e56Smrgextern _X_EXPORT RRPropertyPtr
1057f7df2e56Smrg RRQueryProviderProperty(RRProviderPtr provider, Atom property);
1058f7df2e56Smrg
1059f7df2e56Smrgextern _X_EXPORT void
1060f7df2e56Smrg RRDeleteProviderProperty(RRProviderPtr provider, Atom property);
1061f7df2e56Smrg
1062f7df2e56Smrgextern _X_EXPORT int
1063f7df2e56SmrgRRChangeProviderProperty(RRProviderPtr provider, Atom property, Atom type,
1064f7df2e56Smrg                       int format, int mode, unsigned long len,
1065f7df2e56Smrg                       void *value, Bool sendevent, Bool pending);
1066f7df2e56Smrg
1067f7df2e56Smrgextern _X_EXPORT int
1068f7df2e56Smrg RRConfigureProviderProperty(RRProviderPtr provider, Atom property,
1069f7df2e56Smrg                             Bool pending, Bool range, Bool immutable,
1070f7df2e56Smrg                             int num_values, INT32 *values);
1071f7df2e56Smrg
1072f7df2e56Smrgextern _X_EXPORT Bool
1073f7df2e56Smrg RRPostProviderPendingProperties(RRProviderPtr provider);
1074f7df2e56Smrg
1075f7df2e56Smrgextern _X_EXPORT int
1076f7df2e56Smrg ProcRRGetProviderProperty(ClientPtr client);
1077f7df2e56Smrg
1078f7df2e56Smrgextern _X_EXPORT int
1079f7df2e56Smrg ProcRRListProviderProperties(ClientPtr client);
1080f7df2e56Smrg
1081f7df2e56Smrgextern _X_EXPORT int
1082f7df2e56Smrg ProcRRQueryProviderProperty(ClientPtr client);
1083f7df2e56Smrg
1084f7df2e56Smrgextern _X_EXPORT int
1085f7df2e56SmrgProcRRConfigureProviderProperty(ClientPtr client);
1086f7df2e56Smrg
1087f7df2e56Smrgextern _X_EXPORT int
1088f7df2e56SmrgProcRRChangeProviderProperty(ClientPtr client);
1089f7df2e56Smrg
1090f7df2e56Smrgextern _X_EXPORT int
1091f7df2e56Smrg ProcRRDeleteProviderProperty(ClientPtr client);
109205b261ecSmrg/* rrxinerama.c */
10936747b715Smrg#ifdef XINERAMA
10946747b715Smrgextern _X_EXPORT void
1095f7df2e56Smrg RRXineramaExtensionInit(void);
10966747b715Smrg#endif
109705b261ecSmrg
1098f7df2e56Smrgvoid
1099f7df2e56SmrgRRMonitorInit(ScreenPtr screen);
1100f7df2e56Smrg
1101f7df2e56SmrgBool
1102f7df2e56SmrgRRMonitorMakeList(ScreenPtr screen, Bool get_active, RRMonitorPtr *monitors_ret, int *nmon_ret);
1103f7df2e56Smrg
1104f7df2e56Smrgint
1105f7df2e56SmrgRRMonitorCountList(ScreenPtr screen);
1106f7df2e56Smrg
1107f7df2e56Smrgvoid
1108f7df2e56SmrgRRMonitorFreeList(RRMonitorPtr monitors, int nmon);
1109f7df2e56Smrg
1110f7df2e56Smrgvoid
1111f7df2e56SmrgRRMonitorClose(ScreenPtr screen);
1112f7df2e56Smrg
1113f7df2e56SmrgRRMonitorPtr
1114f7df2e56SmrgRRMonitorAlloc(int noutput);
1115f7df2e56Smrg
1116f7df2e56Smrgint
1117f7df2e56SmrgRRMonitorAdd(ClientPtr client, ScreenPtr screen, RRMonitorPtr monitor);
1118f7df2e56Smrg
1119f7df2e56Smrgvoid
1120f7df2e56SmrgRRMonitorFree(RRMonitorPtr monitor);
1121f7df2e56Smrg
1122f7df2e56Smrgint
1123f7df2e56SmrgProcRRGetMonitors(ClientPtr client);
1124f7df2e56Smrg
1125f7df2e56Smrgint
1126f7df2e56SmrgProcRRSetMonitor(ClientPtr client);
1127f7df2e56Smrg
1128f7df2e56Smrgint
1129f7df2e56SmrgProcRRDeleteMonitor(ClientPtr client);
1130f7df2e56Smrg
11317e31ba66Smrgint
11327e31ba66SmrgProcRRCreateLease(ClientPtr client);
11337e31ba66Smrg
11347e31ba66Smrgint
11357e31ba66SmrgProcRRFreeLease(ClientPtr client);
11367e31ba66Smrg
1137f7df2e56Smrg#endif                          /* _RANDRSTR_H_ */
113805b261ecSmrg
113905b261ecSmrg/*
1140f7df2e56Smrg
114105b261ecSmrgrandr extension implementation structure
114205b261ecSmrg
114305b261ecSmrgQuery state:
114405b261ecSmrg    ProcRRGetScreenInfo/ProcRRGetScreenResources
114505b261ecSmrg	RRGetInfo
1146f7df2e56Smrg
114705b261ecSmrg	    • Request configuration from driver, either 1.0 or 1.2 style
114805b261ecSmrg	    • These functions only record state changes, all
114905b261ecSmrg	      other actions are pended until RRTellChanged is called
1150f7df2e56Smrg
115105b261ecSmrg	    ->rrGetInfo
115205b261ecSmrg	    1.0:
115305b261ecSmrg		RRRegisterSize
115405b261ecSmrg		RRRegisterRate
115505b261ecSmrg		RRSetCurrentConfig
115605b261ecSmrg	    1.2:
115705b261ecSmrg		RRScreenSetSizeRange
115805b261ecSmrg		RROutputSetCrtcs
115905b261ecSmrg		RRModeGet
116005b261ecSmrg		RROutputSetModes
116105b261ecSmrg		RROutputSetConnection
116205b261ecSmrg		RROutputSetSubpixelOrder
116305b261ecSmrg		RROutputSetClones
116405b261ecSmrg		RRCrtcNotify
1165f7df2e56Smrg
116605b261ecSmrg	• Must delay scanning configuration until after ->rrGetInfo returns
116705b261ecSmrg	  because some drivers will call SetCurrentConfig in the middle
116805b261ecSmrg	  of the ->rrGetInfo operation.
1169f7df2e56Smrg
117005b261ecSmrg	1.0:
117105b261ecSmrg
117205b261ecSmrg	    • Scan old configuration, mirror to new structures
1173f7df2e56Smrg
117405b261ecSmrg	    RRScanOldConfig
117505b261ecSmrg		RRCrtcCreate
117605b261ecSmrg		RROutputCreate
117705b261ecSmrg		RROutputSetCrtcs
117805b261ecSmrg		RROutputSetConnection
117905b261ecSmrg		RROutputSetSubpixelOrder
118005b261ecSmrg		RROldModeAdd	• This adds modes one-at-a-time
118105b261ecSmrg		    RRModeGet
118205b261ecSmrg		RRCrtcNotify
1183f7df2e56Smrg
118405b261ecSmrg	• send events, reset pointer if necessary
1185f7df2e56Smrg
118605b261ecSmrg	RRTellChanged
118705b261ecSmrg	    WalkTree (sending events)
1188f7df2e56Smrg
118905b261ecSmrg	    • when layout has changed:
119005b261ecSmrg		RRPointerScreenConfigured
119105b261ecSmrg		RRSendConfigNotify
1192f7df2e56Smrg
119305b261ecSmrgAsynchronous state setting (1.2 only)
119405b261ecSmrg    When setting state asynchronously, the driver invokes the
119505b261ecSmrg    ->rrGetInfo function and then calls RRTellChanged to flush
119605b261ecSmrg    the changes to the clients and reset pointer if necessary
119705b261ecSmrg
119805b261ecSmrgSet state
119905b261ecSmrg
120005b261ecSmrg    ProcRRSetScreenConfig
120105b261ecSmrg	RRCrtcSet
120205b261ecSmrg	    1.2:
120305b261ecSmrg		->rrCrtcSet
120405b261ecSmrg		    RRCrtcNotify
120505b261ecSmrg	    1.0:
120605b261ecSmrg		->rrSetConfig
120705b261ecSmrg		RRCrtcNotify
120805b261ecSmrg	    RRTellChanged
120905b261ecSmrg */
1210