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, HP Labs, Hewlett-Packard, Inc.
26 *	    Keith Packard, Intel Corporation
27 */
28
29#ifndef _RANDR_H_
30#define _RANDR_H_
31
32typedef unsigned short	Rotation;
33typedef unsigned short	SizeID;
34typedef unsigned short	SubpixelOrder;
35typedef unsigned short	Connection;
36typedef unsigned short	XRandrRotation;
37typedef unsigned short	XRandrSizeID;
38typedef unsigned short	XRandrSubpixelOrder;
39typedef unsigned long	XRandrModeFlags;
40
41#define RANDR_NAME		"RANDR"
42#define RANDR_MAJOR		1
43#define RANDR_MINOR		6
44
45#define RRNumberErrors		5
46#define RRNumberEvents		2
47#define RRNumberRequests	47
48
49#define X_RRQueryVersion	0
50/* we skip 1 to make old clients fail pretty immediately */
51#define X_RROldGetScreenInfo	1
52#define X_RR1_0SetScreenConfig	2
53/* V1.0 apps share the same set screen config request id */
54#define X_RRSetScreenConfig	2
55#define X_RROldScreenChangeSelectInput	3
56/* 3 used to be ScreenChangeSelectInput; deprecated */
57#define X_RRSelectInput		4
58#define X_RRGetScreenInfo	5
59
60/* V1.2 additions */
61#define X_RRGetScreenSizeRange	    6
62#define X_RRSetScreenSize	    7
63#define X_RRGetScreenResources	    8
64#define X_RRGetOutputInfo	    9
65#define X_RRListOutputProperties    10
66#define X_RRQueryOutputProperty	    11
67#define X_RRConfigureOutputProperty 12
68#define X_RRChangeOutputProperty    13
69#define X_RRDeleteOutputProperty    14
70#define X_RRGetOutputProperty	    15
71#define X_RRCreateMode		    16
72#define X_RRDestroyMode		    17
73#define X_RRAddOutputMode	    18
74#define X_RRDeleteOutputMode	    19
75#define X_RRGetCrtcInfo		    20
76#define X_RRSetCrtcConfig	    21
77#define X_RRGetCrtcGammaSize	    22
78#define X_RRGetCrtcGamma	    23
79#define X_RRSetCrtcGamma	    24
80
81/* V1.3 additions */
82#define X_RRGetScreenResourcesCurrent	25
83#define X_RRSetCrtcTransform	    26
84#define X_RRGetCrtcTransform	    27
85#define X_RRGetPanning		    28
86#define X_RRSetPanning		    29
87#define X_RRSetOutputPrimary	    30
88#define X_RRGetOutputPrimary	    31
89
90#define RRTransformUnit		    (1L << 0)
91#define RRTransformScaleUp	    (1L << 1)
92#define RRTransformScaleDown	    (1L << 2)
93#define RRTransformProjective	    (1L << 3)
94
95/* v1.4 */
96#define X_RRGetProviders	      32
97#define X_RRGetProviderInfo	      33
98#define X_RRSetProviderOffloadSink    34
99#define X_RRSetProviderOutputSource   35
100#define X_RRListProviderProperties    36
101#define X_RRQueryProviderProperty     37
102#define X_RRConfigureProviderProperty 38
103#define X_RRChangeProviderProperty    39
104#define X_RRDeleteProviderProperty    40
105#define X_RRGetProviderProperty	      41
106
107/* v1.5 */
108#define X_RRGetMonitors		      42
109#define X_RRSetMonitor		      43
110#define X_RRDeleteMonitor	      44
111
112/* v1.6 */
113#define X_RRCreateLease		      45
114#define X_RRFreeLease		      46
115
116/* Event selection bits */
117#define RRScreenChangeNotifyMask  (1L << 0)
118/* V1.2 additions */
119#define RRCrtcChangeNotifyMask	    (1L << 1)
120#define RROutputChangeNotifyMask    (1L << 2)
121#define RROutputPropertyNotifyMask  (1L << 3)
122/* V1.4 additions */
123#define RRProviderChangeNotifyMask   (1L << 4)
124#define RRProviderPropertyNotifyMask (1L << 5)
125#define RRResourceChangeNotifyMask   (1L << 6)
126/* V1.6 additions */
127#define RRLeaseNotifyMask            (1L << 7)
128
129/* Event codes */
130#define RRScreenChangeNotify	0
131/* V1.2 additions */
132#define RRNotify		    1
133/* RRNotify Subcodes */
134#define  RRNotify_CrtcChange	    0
135#define  RRNotify_OutputChange	    1
136#define  RRNotify_OutputProperty    2
137#define  RRNotify_ProviderChange    3
138#define  RRNotify_ProviderProperty  4
139#define  RRNotify_ResourceChange    5
140/* V1.6 additions */
141#define  RRNotify_Lease             6
142/* used in the rotation field; rotation and reflection in 0.1 proto. */
143#define RR_Rotate_0		1
144#define RR_Rotate_90		2
145#define RR_Rotate_180		4
146#define RR_Rotate_270		8
147
148/* new in 1.0 protocol, to allow reflection of screen */
149
150#define RR_Reflect_X		16
151#define RR_Reflect_Y		32
152
153#define RRSetConfigSuccess		0
154#define RRSetConfigInvalidConfigTime	1
155#define RRSetConfigInvalidTime		2
156#define RRSetConfigFailed		3
157
158/* new in 1.2 protocol */
159
160#define RR_HSyncPositive	0x00000001
161#define RR_HSyncNegative	0x00000002
162#define RR_VSyncPositive	0x00000004
163#define RR_VSyncNegative	0x00000008
164#define RR_Interlace		0x00000010
165#define RR_DoubleScan		0x00000020
166#define RR_CSync		0x00000040
167#define RR_CSyncPositive	0x00000080
168#define RR_CSyncNegative	0x00000100
169#define RR_HSkewPresent		0x00000200
170#define RR_BCast		0x00000400
171#define RR_PixelMultiplex	0x00000800
172#define RR_DoubleClock		0x00001000
173#define RR_ClockDivideBy2	0x00002000
174
175#define RR_Connected		0
176#define RR_Disconnected		1
177#define RR_UnknownConnection	2
178
179#define BadRROutput		0
180#define BadRRCrtc		1
181#define BadRRMode		2
182#define BadRRProvider		3
183#define BadRRLease		4
184
185/* Conventional RandR output properties */
186
187#define RR_PROPERTY_BACKLIGHT		"Backlight"
188#define RR_PROPERTY_RANDR_EDID		"EDID"
189#define RR_PROPERTY_SIGNAL_FORMAT	"SignalFormat"
190#define RR_PROPERTY_SIGNAL_PROPERTIES	"SignalProperties"
191#define RR_PROPERTY_CONNECTOR_TYPE	"ConnectorType"
192#define RR_PROPERTY_CONNECTOR_NUMBER	"ConnectorNumber"
193#define RR_PROPERTY_COMPATIBILITY_LIST	"CompatibilityList"
194#define RR_PROPERTY_CLONE_LIST		"CloneList"
195#define RR_PROPERTY_BORDER		"Border"
196#define RR_PROPERTY_BORDER_DIMENSIONS	"BorderDimensions"
197#define RR_PROPERTY_GUID		"GUID"
198#define RR_PROPERTY_RANDR_TILE		"TILE"
199#define RR_PROPERTY_NON_DESKTOP		"non-desktop"
200
201/* roles this device can carry out */
202#define RR_Capability_None 0
203#define RR_Capability_SourceOutput 1
204#define RR_Capability_SinkOutput 2
205#define RR_Capability_SourceOffload 4
206#define RR_Capability_SinkOffload 8
207
208#endif	/* _RANDR_H_ */
209