randrstr.h revision 9ace9065
1/*
2 * Copyright © 2000 Compaq Computer Corporation
3 * Copyright © 2002 Hewlett-Packard Company
4 * Copyright © 2006 Intel Corporation
5 * Copyright © 2008 Red Hat, Inc.
6 *
7 * Permission to use, copy, modify, distribute, and sell this software and its
8 * documentation for any purpose is hereby granted without fee, provided that
9 * the above copyright notice appear in all copies and that both that copyright
10 * notice and this permission notice appear in supporting documentation, and
11 * that the name of the copyright holders not be used in advertising or
12 * publicity pertaining to distribution of the software without specific,
13 * written prior permission.  The copyright holders make no representations
14 * about the suitability of this software for any purpose.  It is provided "as
15 * is" without express or implied warranty.
16 *
17 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
18 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
19 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
20 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
22 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
23 * OF THIS SOFTWARE.
24 *
25 * Author:  Jim Gettys, Hewlett-Packard Company, Inc.
26 *	    Keith Packard, Intel Corporation
27 */
28
29#ifdef HAVE_DIX_CONFIG_H
30#include <dix-config.h>
31#endif
32
33#ifndef _RANDRSTR_H_
34#define _RANDRSTR_H_
35
36#include <X11/X.h>
37#include <X11/Xproto.h>
38#include "misc.h"
39#include "os.h"
40#include "dixstruct.h"
41#include "resource.h"
42#include "scrnintstr.h"
43#include "windowstr.h"
44#include "pixmapstr.h"
45#include "extnsionst.h"
46#include "servermd.h"
47#include "rrtransform.h"
48#include <X11/extensions/randr.h>
49#include <X11/extensions/randrproto.h>
50#include <X11/extensions/render.h> 	/* we share subpixel order information */
51#include "picturestr.h"
52#include <X11/Xfuncproto.h>
53
54/* required for ABI compatibility for now */
55#define RANDR_10_INTERFACE 1
56#define RANDR_12_INTERFACE 1
57#define RANDR_13_INTERFACE 1 /* requires RANDR_12_INTERFACE */
58#define RANDR_GET_CRTC_INTERFACE 1
59
60#define RANDR_INTERFACE_VERSION 0x0103
61
62typedef XID	RRMode;
63typedef XID	RROutput;
64typedef XID	RRCrtc;
65
66extern _X_EXPORT int	RREventBase, RRErrorBase;
67
68extern _X_EXPORT int (*ProcRandrVector[RRNumberRequests])(ClientPtr);
69extern _X_EXPORT int (*SProcRandrVector[RRNumberRequests])(ClientPtr);
70
71/*
72 * Modeline for a monitor. Name follows directly after this struct
73 */
74
75#define RRModeName(pMode) ((char *) (pMode + 1))
76typedef struct _rrMode		RRModeRec, *RRModePtr;
77typedef struct _rrPropertyValue	RRPropertyValueRec, *RRPropertyValuePtr;
78typedef struct _rrProperty	RRPropertyRec, *RRPropertyPtr;
79typedef struct _rrCrtc		RRCrtcRec, *RRCrtcPtr;
80typedef struct _rrOutput	RROutputRec, *RROutputPtr;
81
82struct _rrMode {
83    int		    refcnt;
84    xRRModeInfo	    mode;
85    char	    *name;
86    ScreenPtr	    userScreen;
87};
88
89struct _rrPropertyValue {
90    Atom	    type;       /* ignored by server */
91    short	    format;     /* format of data for swapping - 8,16,32 */
92    long	    size;	/* size of data in (format/8) bytes */
93    pointer         data;	/* private to client */
94};
95
96struct _rrProperty {
97    RRPropertyPtr   next;
98    ATOM 	    propertyName;
99    Bool	    is_pending;
100    Bool	    range;
101    Bool	    immutable;
102    int		    num_valid;
103    INT32	    *valid_values;
104    RRPropertyValueRec	current, pending;
105};
106
107struct _rrCrtc {
108    RRCrtc	    id;
109    ScreenPtr	    pScreen;
110    RRModePtr	    mode;
111    int		    x, y;
112    Rotation	    rotation;
113    Rotation	    rotations;
114    Bool	    changed;
115    int		    numOutputs;
116    RROutputPtr	    *outputs;
117    int		    gammaSize;
118    CARD16	    *gammaRed;
119    CARD16	    *gammaBlue;
120    CARD16	    *gammaGreen;
121    void	    *devPrivate;
122    Bool	    transforms;
123    RRTransformRec  client_pending_transform;
124    RRTransformRec  client_current_transform;
125    PictTransform   transform;
126    struct pict_f_transform f_transform;
127    struct pict_f_transform f_inverse;
128};
129
130struct _rrOutput {
131    RROutput	    id;
132    ScreenPtr	    pScreen;
133    char	    *name;
134    int		    nameLength;
135    CARD8	    connection;
136    CARD8	    subpixelOrder;
137    int		    mmWidth;
138    int		    mmHeight;
139    RRCrtcPtr	    crtc;
140    int		    numCrtcs;
141    RRCrtcPtr	    *crtcs;
142    int		    numClones;
143    RROutputPtr	    *clones;
144    int		    numModes;
145    int		    numPreferred;
146    RRModePtr	    *modes;
147    int		    numUserModes;
148    RRModePtr	    *userModes;
149    Bool	    changed;
150    RRPropertyPtr   properties;
151    Bool	    pendingProperties;
152    void	    *devPrivate;
153};
154
155#if RANDR_12_INTERFACE
156typedef Bool (*RRScreenSetSizeProcPtr) (ScreenPtr	pScreen,
157					CARD16		width,
158					CARD16		height,
159					CARD32		mmWidth,
160					CARD32		mmHeight);
161
162typedef Bool (*RRCrtcSetProcPtr) (ScreenPtr		pScreen,
163				  RRCrtcPtr		crtc,
164				  RRModePtr		mode,
165				  int			x,
166				  int			y,
167				  Rotation		rotation,
168				  int			numOutputs,
169				  RROutputPtr		*outputs);
170
171typedef Bool (*RRCrtcSetGammaProcPtr) (ScreenPtr	pScreen,
172				       RRCrtcPtr	crtc);
173
174typedef Bool (*RRCrtcGetGammaProcPtr) (ScreenPtr	pScreen,
175				       RRCrtcPtr	crtc);
176
177typedef Bool (*RROutputSetPropertyProcPtr) (ScreenPtr		pScreen,
178					    RROutputPtr		output,
179					    Atom		property,
180					    RRPropertyValuePtr	value);
181
182typedef Bool (*RROutputValidateModeProcPtr) (ScreenPtr		pScreen,
183					     RROutputPtr	output,
184					     RRModePtr		mode);
185
186typedef void (*RRModeDestroyProcPtr) (ScreenPtr	    pScreen,
187				      RRModePtr	    mode);
188
189#endif
190
191#if RANDR_13_INTERFACE
192typedef Bool (*RROutputGetPropertyProcPtr) (ScreenPtr		pScreen,
193					    RROutputPtr		output,
194					    Atom		property);
195typedef Bool (*RRGetPanningProcPtr)    (ScreenPtr		pScrn,
196					RRCrtcPtr		crtc,
197					BoxPtr		totalArea,
198					BoxPtr		trackingArea,
199					INT16		*border);
200typedef Bool (*RRSetPanningProcPtr)    (ScreenPtr		pScrn,
201					RRCrtcPtr		crtc,
202					BoxPtr		totalArea,
203					BoxPtr		trackingArea,
204					INT16		*border);
205
206#endif /* RANDR_13_INTERFACE */
207
208typedef Bool (*RRGetInfoProcPtr) (ScreenPtr pScreen, Rotation *rotations);
209typedef Bool (*RRCloseScreenProcPtr) ( int i, ScreenPtr pscreen);
210
211/* These are for 1.0 compatibility */
212
213typedef struct _rrRefresh {
214    CARD16	    rate;
215    RRModePtr	    mode;
216} RRScreenRate, *RRScreenRatePtr;
217
218typedef struct _rrScreenSize {
219    int		    id;
220    short	    width, height;
221    short	    mmWidth, mmHeight;
222    int		    nRates;
223    RRScreenRatePtr pRates;
224} RRScreenSize, *RRScreenSizePtr;
225
226#ifdef RANDR_10_INTERFACE
227
228typedef Bool (*RRSetConfigProcPtr) (ScreenPtr		pScreen,
229				    Rotation		rotation,
230				    int			rate,
231				    RRScreenSizePtr	pSize);
232
233#endif
234
235
236typedef struct _rrScrPriv {
237    /*
238     * 'public' part of the structure; DDXen fill this in
239     * as they initialize
240     */
241#if RANDR_10_INTERFACE
242    RRSetConfigProcPtr	    rrSetConfig;
243#endif
244    RRGetInfoProcPtr	    rrGetInfo;
245#if RANDR_12_INTERFACE
246    RRScreenSetSizeProcPtr  rrScreenSetSize;
247    RRCrtcSetProcPtr	    rrCrtcSet;
248    RRCrtcSetGammaProcPtr   rrCrtcSetGamma;
249    RRCrtcGetGammaProcPtr   rrCrtcGetGamma;
250    RROutputSetPropertyProcPtr	rrOutputSetProperty;
251    RROutputValidateModeProcPtr	rrOutputValidateMode;
252    RRModeDestroyProcPtr	rrModeDestroy;
253#endif
254#if RANDR_13_INTERFACE
255    RROutputGetPropertyProcPtr	rrOutputGetProperty;
256    RRGetPanningProcPtr	rrGetPanning;
257    RRSetPanningProcPtr	rrSetPanning;
258#endif
259
260    /*
261     * Private part of the structure; not considered part of the ABI
262     */
263    TimeStamp		    lastSetTime;	/* last changed by client */
264    TimeStamp		    lastConfigTime;	/* possible configs changed */
265    RRCloseScreenProcPtr    CloseScreen;
266
267    Bool		    changed;		/* some config changed */
268    Bool		    configChanged;	/* configuration changed */
269    Bool		    layoutChanged;	/* screen layout changed */
270
271    CARD16		    minWidth, minHeight;
272    CARD16		    maxWidth, maxHeight;
273    CARD16		    width, height;	/* last known screen size */
274    CARD16		    mmWidth, mmHeight;	/* last known screen size */
275
276    int			    numOutputs;
277    RROutputPtr		    *outputs;
278    RROutputPtr		    primaryOutput;
279
280    int			    numCrtcs;
281    RRCrtcPtr		    *crtcs;
282
283    /* Last known pointer position */
284    RRCrtcPtr		    pointerCrtc;
285
286#ifdef RANDR_10_INTERFACE
287    /*
288     * Configuration information
289     */
290    Rotation		    rotations;
291    CARD16		    reqWidth, reqHeight;
292
293    int			    nSizes;
294    RRScreenSizePtr	    pSizes;
295
296    Rotation		    rotation;
297    int			    rate;
298    int			    size;
299#endif
300} rrScrPrivRec, *rrScrPrivPtr;
301
302extern _X_EXPORT DevPrivateKeyRec rrPrivKeyRec;
303#define rrPrivKey (&rrPrivKeyRec)
304
305#define rrGetScrPriv(pScr)  ((rrScrPrivPtr)dixLookupPrivate(&(pScr)->devPrivates, rrPrivKey))
306#define rrScrPriv(pScr)	rrScrPrivPtr    pScrPriv = rrGetScrPriv(pScr)
307#define SetRRScreen(s,p) dixSetPrivate(&(s)->devPrivates, rrPrivKey, p)
308
309/*
310 * each window has a list of clients requesting
311 * RRNotify events.  Each client has a resource
312 * for each window it selects RRNotify input for,
313 * this resource is used to delete the RRNotifyRec
314 * entry from the per-window queue.
315 */
316
317typedef struct _RREvent *RREventPtr;
318
319typedef struct _RREvent {
320    RREventPtr  next;
321    ClientPtr	client;
322    WindowPtr	window;
323    XID		clientResource;
324    int		mask;
325} RREventRec;
326
327typedef struct _RRTimes {
328    TimeStamp	setTime;
329    TimeStamp	configTime;
330} RRTimesRec, *RRTimesPtr;
331
332typedef struct _RRClient {
333    int		major_version;
334    int		minor_version;
335/*  RRTimesRec	times[0]; */
336} RRClientRec, *RRClientPtr;
337
338extern _X_EXPORT RESTYPE RRClientType, RREventType; /* resource types for event masks */
339extern _X_EXPORT DevPrivateKeyRec RRClientPrivateKeyRec;
340#define RRClientPrivateKey (&RRClientPrivateKeyRec)
341extern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType;
342
343#define VERIFY_RR_OUTPUT(id, ptr, a)\
344    {\
345	int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
346	                                 RROutputType, client, a);\
347	if (rc != Success) {\
348	    client->errorValue = id;\
349	    return rc;\
350	}\
351    }
352
353#define VERIFY_RR_CRTC(id, ptr, a)\
354    {\
355	int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
356	                                 RRCrtcType, client, a);\
357	if (rc != Success) {\
358	    client->errorValue = id;\
359	    return rc;\
360	}\
361    }
362
363#define VERIFY_RR_MODE(id, ptr, a)\
364    {\
365	int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
366	                                 RRModeType, client, a);\
367	if (rc != Success) {\
368	    client->errorValue = id;\
369	    return rc;\
370	}\
371    }
372
373#define GetRRClient(pClient)    ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey))
374#define rrClientPriv(pClient)	RRClientPtr pRRClient = GetRRClient(pClient)
375
376/* Initialize the extension */
377extern _X_EXPORT void
378RRExtensionInit (void);
379
380#ifdef RANDR_12_INTERFACE
381/*
382 * Set the range of sizes for the screen
383 */
384extern _X_EXPORT void
385RRScreenSetSizeRange (ScreenPtr	pScreen,
386		      CARD16	minWidth,
387		      CARD16	minHeight,
388		      CARD16	maxWidth,
389		      CARD16	maxHeight);
390#endif
391
392/* rrscreen.c */
393/*
394 * Notify the extension that the screen size has been changed.
395 * The driver is responsible for calling this whenever it has changed
396 * the size of the screen
397 */
398extern _X_EXPORT void
399RRScreenSizeNotify (ScreenPtr	pScreen);
400
401/*
402 * Request that the screen be resized
403 */
404extern _X_EXPORT Bool
405RRScreenSizeSet (ScreenPtr  pScreen,
406		 CARD16	    width,
407		 CARD16	    height,
408		 CARD32	    mmWidth,
409		 CARD32	    mmHeight);
410
411/*
412 * Send ConfigureNotify event to root window when 'something' happens
413 */
414extern _X_EXPORT void
415RRSendConfigNotify (ScreenPtr pScreen);
416
417/*
418 * screen dispatch
419 */
420extern _X_EXPORT int
421ProcRRGetScreenSizeRange (ClientPtr client);
422
423extern _X_EXPORT int
424ProcRRSetScreenSize (ClientPtr client);
425
426extern _X_EXPORT int
427ProcRRGetScreenResources (ClientPtr client);
428
429extern _X_EXPORT int
430ProcRRGetScreenResourcesCurrent (ClientPtr client);
431
432extern _X_EXPORT int
433ProcRRSetScreenConfig (ClientPtr client);
434
435extern _X_EXPORT int
436ProcRRGetScreenInfo (ClientPtr client);
437
438/*
439 * Deliver a ScreenNotify event
440 */
441extern _X_EXPORT void
442RRDeliverScreenEvent (ClientPtr client, WindowPtr pWin, ScreenPtr pScreen);
443
444/* randr.c */
445/*
446 * Send all pending events
447 */
448extern _X_EXPORT void
449RRTellChanged (ScreenPtr pScreen);
450
451/*
452 * Poll the driver for changed information
453 */
454extern _X_EXPORT Bool
455RRGetInfo (ScreenPtr pScreen, Bool force_query);
456
457extern _X_EXPORT Bool RRInit (void);
458
459extern _X_EXPORT Bool RRScreenInit(ScreenPtr pScreen);
460
461extern _X_EXPORT RROutputPtr
462RRFirstOutput (ScreenPtr pScreen);
463
464extern _X_EXPORT Rotation
465RRGetRotation (ScreenPtr pScreen);
466
467extern _X_EXPORT CARD16
468RRVerticalRefresh (xRRModeInfo *mode);
469
470#ifdef RANDR_10_INTERFACE
471/*
472 * This is the old interface, deprecated but left
473 * around for compatibility
474 */
475
476/*
477 * Then, register the specific size with the screen
478 */
479
480extern _X_EXPORT RRScreenSizePtr
481RRRegisterSize (ScreenPtr		pScreen,
482		short			width,
483		short			height,
484		short			mmWidth,
485		short			mmHeight);
486
487extern _X_EXPORT Bool
488RRRegisterRate (ScreenPtr		pScreen,
489		     RRScreenSizePtr	pSize,
490		     int		rate);
491
492/*
493 * Finally, set the current configuration of the screen
494 */
495
496extern _X_EXPORT void
497RRSetCurrentConfig (ScreenPtr		pScreen,
498		    Rotation		rotation,
499		    int			rate,
500		    RRScreenSizePtr	pSize);
501
502extern _X_EXPORT Bool RRScreenInit (ScreenPtr pScreen);
503
504extern _X_EXPORT Rotation
505RRGetRotation (ScreenPtr pScreen);
506
507#endif
508
509/* rrcrtc.c */
510
511/*
512 * Notify the CRTC of some change; layoutChanged indicates that
513 * some position or size element changed
514 */
515extern _X_EXPORT void
516RRCrtcChanged (RRCrtcPtr crtc, Bool layoutChanged);
517
518/*
519 * Create a CRTC
520 */
521extern _X_EXPORT RRCrtcPtr
522RRCrtcCreate (ScreenPtr pScreen, void	*devPrivate);
523
524/*
525 * Set the allowed rotations on a CRTC
526 */
527extern _X_EXPORT void
528RRCrtcSetRotations (RRCrtcPtr crtc, Rotation rotations);
529
530/*
531 * Set whether transforms are allowed on a CRTC
532 */
533extern _X_EXPORT void
534RRCrtcSetTransformSupport (RRCrtcPtr crtc, Bool transforms);
535
536/*
537 * Notify the extension that the Crtc has been reconfigured,
538 * the driver calls this whenever it has updated the mode
539 */
540extern _X_EXPORT Bool
541RRCrtcNotify (RRCrtcPtr	    crtc,
542	      RRModePtr	    mode,
543	      int	    x,
544	      int	    y,
545	      Rotation	    rotation,
546	      RRTransformPtr transform,
547	      int	    numOutputs,
548	      RROutputPtr   *outputs);
549
550extern _X_EXPORT void
551RRDeliverCrtcEvent (ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc);
552
553/*
554 * Request that the Crtc be reconfigured
555 */
556extern _X_EXPORT Bool
557RRCrtcSet (RRCrtcPtr    crtc,
558	   RRModePtr	mode,
559	   int		x,
560	   int		y,
561	   Rotation	rotation,
562	   int		numOutput,
563	   RROutputPtr  *outputs);
564
565/*
566 * Request that the Crtc gamma be changed
567 */
568
569extern _X_EXPORT Bool
570RRCrtcGammaSet (RRCrtcPtr   crtc,
571		CARD16	    *red,
572		CARD16	    *green,
573		CARD16	    *blue);
574
575/*
576 * Request current gamma back from the DDX (if possible).
577 * This includes gamma size.
578 */
579
580extern _X_EXPORT Bool
581RRCrtcGammaGet(RRCrtcPtr crtc);
582
583/*
584 * Notify the extension that the Crtc gamma has been changed
585 * The driver calls this whenever it has changed the gamma values
586 * in the RRCrtcRec
587 */
588
589extern _X_EXPORT Bool
590RRCrtcGammaNotify (RRCrtcPtr	crtc);
591
592/*
593 * Set the size of the gamma table at server startup time
594 */
595
596extern _X_EXPORT Bool
597RRCrtcGammaSetSize (RRCrtcPtr	crtc,
598		    int		size);
599
600/*
601 * Return the area of the frame buffer scanned out by the crtc,
602 * taking into account the current mode and rotation
603 */
604
605extern _X_EXPORT void
606RRCrtcGetScanoutSize(RRCrtcPtr crtc, int *width, int *height);
607
608/*
609 * Compute the complete transformation matrix including
610 * client-specified transform, rotation/reflection values and the crtc
611 * offset.
612 *
613 * Return TRUE if the resulting transform is not a simple translation.
614 */
615extern _X_EXPORT Bool
616RRTransformCompute (int			    x,
617		    int			    y,
618		    int			    width,
619		    int			    height,
620		    Rotation		    rotation,
621		    RRTransformPtr	    rr_transform,
622
623		    PictTransformPtr	    transform,
624		    struct pict_f_transform *f_transform,
625		    struct pict_f_transform *f_inverse);
626
627/*
628 * Return crtc transform
629 */
630extern _X_EXPORT RRTransformPtr
631RRCrtcGetTransform (RRCrtcPtr crtc);
632
633/*
634 * Check whether the pending and current transforms are the same
635 */
636extern _X_EXPORT Bool
637RRCrtcPendingTransform (RRCrtcPtr crtc);
638
639/*
640 * Destroy a Crtc at shutdown
641 */
642extern _X_EXPORT void
643RRCrtcDestroy (RRCrtcPtr crtc);
644
645
646/*
647 * Set the pending CRTC transformation
648 */
649
650extern _X_EXPORT int
651RRCrtcTransformSet (RRCrtcPtr		crtc,
652		    PictTransformPtr	transform,
653		    struct pict_f_transform *f_transform,
654		    struct pict_f_transform *f_inverse,
655		    char		*filter,
656		    int			filter_len,
657		    xFixed		*params,
658		    int			nparams);
659
660/*
661 * Initialize crtc type
662 */
663extern _X_EXPORT Bool
664RRCrtcInit (void);
665
666/*
667 * Initialize crtc type error value
668 */
669extern _X_EXPORT void
670RRCrtcInitErrorValue (void);
671
672/*
673 * Crtc dispatch
674 */
675
676extern _X_EXPORT int
677ProcRRGetCrtcInfo (ClientPtr client);
678
679extern _X_EXPORT int
680ProcRRSetCrtcConfig (ClientPtr client);
681
682extern _X_EXPORT int
683ProcRRGetCrtcGammaSize (ClientPtr client);
684
685extern _X_EXPORT int
686ProcRRGetCrtcGamma (ClientPtr client);
687
688extern _X_EXPORT int
689ProcRRSetCrtcGamma (ClientPtr client);
690
691extern _X_EXPORT int
692ProcRRSetCrtcTransform (ClientPtr client);
693
694extern _X_EXPORT int
695ProcRRGetCrtcTransform (ClientPtr client);
696
697int
698ProcRRGetPanning (ClientPtr client);
699
700int
701ProcRRSetPanning (ClientPtr client);
702
703/* rrdispatch.c */
704extern _X_EXPORT Bool
705RRClientKnowsRates (ClientPtr	pClient);
706
707/* rrmode.c */
708/*
709 * Find, and if necessary, create a mode
710 */
711
712extern _X_EXPORT RRModePtr
713RRModeGet (xRRModeInfo	*modeInfo,
714	   const char	*name);
715
716/*
717 * Destroy a mode.
718 */
719
720extern _X_EXPORT void
721RRModeDestroy (RRModePtr mode);
722
723/*
724 * Return a list of modes that are valid for some output in pScreen
725 */
726extern _X_EXPORT RRModePtr *
727RRModesForScreen (ScreenPtr pScreen, int *num_ret);
728
729/*
730 * Initialize mode type
731 */
732extern _X_EXPORT Bool
733RRModeInit (void);
734
735/*
736 * Initialize mode type error value
737 */
738extern _X_EXPORT void
739RRModeInitErrorValue (void);
740
741extern _X_EXPORT int
742ProcRRCreateMode (ClientPtr client);
743
744extern _X_EXPORT int
745ProcRRDestroyMode (ClientPtr client);
746
747extern _X_EXPORT int
748ProcRRAddOutputMode (ClientPtr client);
749
750extern _X_EXPORT int
751ProcRRDeleteOutputMode (ClientPtr client);
752
753/* rroutput.c */
754
755/*
756 * Notify the output of some change. configChanged indicates whether
757 * any external configuration (mode list, clones, connected status)
758 * has changed, or whether the change was strictly internal
759 * (which crtc is in use)
760 */
761extern _X_EXPORT void
762RROutputChanged (RROutputPtr output, Bool configChanged);
763
764/*
765 * Create an output
766 */
767
768extern _X_EXPORT RROutputPtr
769RROutputCreate (ScreenPtr   pScreen,
770		const char  *name,
771		int	    nameLength,
772		void	    *devPrivate);
773
774/*
775 * Notify extension that output parameters have been changed
776 */
777extern _X_EXPORT Bool
778RROutputSetClones (RROutputPtr  output,
779		   RROutputPtr  *clones,
780		   int		numClones);
781
782extern _X_EXPORT Bool
783RROutputSetModes (RROutputPtr	output,
784		  RRModePtr	*modes,
785		  int		numModes,
786		  int		numPreferred);
787
788extern _X_EXPORT int
789RROutputAddUserMode (RROutputPtr    output,
790		     RRModePtr	    mode);
791
792extern _X_EXPORT int
793RROutputDeleteUserMode (RROutputPtr output,
794			RRModePtr   mode);
795
796extern _X_EXPORT Bool
797RROutputSetCrtcs (RROutputPtr	output,
798		  RRCrtcPtr	*crtcs,
799		  int		numCrtcs);
800
801extern _X_EXPORT Bool
802RROutputSetConnection (RROutputPtr  output,
803		       CARD8	    connection);
804
805extern _X_EXPORT Bool
806RROutputSetSubpixelOrder (RROutputPtr output,
807			  int	      subpixelOrder);
808
809extern _X_EXPORT Bool
810RROutputSetPhysicalSize (RROutputPtr	output,
811			 int		mmWidth,
812			 int		mmHeight);
813
814extern _X_EXPORT void
815RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output);
816
817extern _X_EXPORT void
818RROutputDestroy (RROutputPtr	output);
819
820extern _X_EXPORT int
821ProcRRGetOutputInfo (ClientPtr client);
822
823extern _X_EXPORT int
824ProcRRSetOutputPrimary (ClientPtr client);
825
826extern _X_EXPORT int
827ProcRRGetOutputPrimary (ClientPtr client);
828
829/*
830 * Initialize output type
831 */
832extern _X_EXPORT Bool
833RROutputInit (void);
834
835/*
836 * Initialize output type error value
837 */
838extern _X_EXPORT void
839RROutputInitErrorValue (void);
840
841/* rrpointer.c */
842extern _X_EXPORT void
843RRPointerMoved (ScreenPtr pScreen, int x, int y);
844
845extern _X_EXPORT void
846RRPointerScreenConfigured (ScreenPtr pScreen);
847
848/* rrproperty.c */
849
850extern _X_EXPORT void
851RRDeleteAllOutputProperties (RROutputPtr output);
852
853extern _X_EXPORT RRPropertyValuePtr
854RRGetOutputProperty (RROutputPtr output, Atom property, Bool pending);
855
856extern _X_EXPORT RRPropertyPtr
857RRQueryOutputProperty (RROutputPtr output, Atom property);
858
859extern _X_EXPORT void
860RRDeleteOutputProperty (RROutputPtr output, Atom property);
861
862extern _X_EXPORT Bool
863RRPostPendingProperties (RROutputPtr output);
864
865extern _X_EXPORT int
866RRChangeOutputProperty (RROutputPtr output, Atom property, Atom type,
867			int format, int mode, unsigned long len,
868			pointer value, Bool sendevent, Bool pending);
869
870extern _X_EXPORT int
871RRConfigureOutputProperty (RROutputPtr output, Atom property,
872			   Bool pending, Bool range, Bool immutable,
873			   int num_values, INT32 *values);
874extern _X_EXPORT int
875ProcRRChangeOutputProperty (ClientPtr client);
876
877extern _X_EXPORT int
878ProcRRGetOutputProperty (ClientPtr client);
879
880extern _X_EXPORT int
881ProcRRListOutputProperties (ClientPtr client);
882
883extern _X_EXPORT int
884ProcRRQueryOutputProperty (ClientPtr client);
885
886extern _X_EXPORT int
887ProcRRConfigureOutputProperty (ClientPtr client);
888
889extern _X_EXPORT int
890ProcRRDeleteOutputProperty (ClientPtr client);
891
892/* rrxinerama.c */
893#ifdef XINERAMA
894extern _X_EXPORT void
895RRXineramaExtensionInit(void);
896#endif
897
898#endif /* _RANDRSTR_H_ */
899
900/*
901
902randr extension implementation structure
903
904Query state:
905    ProcRRGetScreenInfo/ProcRRGetScreenResources
906	RRGetInfo
907
908	    • Request configuration from driver, either 1.0 or 1.2 style
909	    • These functions only record state changes, all
910	      other actions are pended until RRTellChanged is called
911
912	    ->rrGetInfo
913	    1.0:
914		RRRegisterSize
915		RRRegisterRate
916		RRSetCurrentConfig
917	    1.2:
918		RRScreenSetSizeRange
919		RROutputSetCrtcs
920		RRModeGet
921		RROutputSetModes
922		RROutputSetConnection
923		RROutputSetSubpixelOrder
924		RROutputSetClones
925		RRCrtcNotify
926
927	• Must delay scanning configuration until after ->rrGetInfo returns
928	  because some drivers will call SetCurrentConfig in the middle
929	  of the ->rrGetInfo operation.
930
931	1.0:
932
933	    • Scan old configuration, mirror to new structures
934
935	    RRScanOldConfig
936		RRCrtcCreate
937		RROutputCreate
938		RROutputSetCrtcs
939		RROutputSetConnection
940		RROutputSetSubpixelOrder
941		RROldModeAdd	• This adds modes one-at-a-time
942		    RRModeGet
943		RRCrtcNotify
944
945	• send events, reset pointer if necessary
946
947	RRTellChanged
948	    WalkTree (sending events)
949
950	    • when layout has changed:
951		RRPointerScreenConfigured
952		RRSendConfigNotify
953
954Asynchronous state setting (1.2 only)
955    When setting state asynchronously, the driver invokes the
956    ->rrGetInfo function and then calls RRTellChanged to flush
957    the changes to the clients and reset pointer if necessary
958
959Set state
960
961    ProcRRSetScreenConfig
962	RRCrtcSet
963	    1.2:
964		->rrCrtcSet
965		    RRCrtcNotify
966	    1.0:
967		->rrSetConfig
968		RRCrtcNotify
969	    RRTellChanged
970 */
971