105b261ecSmrg/*
205b261ecSmrg * Copyright © 2006 Keith Packard
305b261ecSmrg *
405b261ecSmrg * Permission to use, copy, modify, distribute, and sell this software and its
505b261ecSmrg * documentation for any purpose is hereby granted without fee, provided that
605b261ecSmrg * the above copyright notice appear in all copies and that both that copyright
705b261ecSmrg * notice and this permission notice appear in supporting documentation, and
805b261ecSmrg * that the name of the copyright holders not be used in advertising or
905b261ecSmrg * publicity pertaining to distribution of the software without specific,
1005b261ecSmrg * written prior permission.  The copyright holders make no representations
1105b261ecSmrg * about the suitability of this software for any purpose.  It is provided "as
1205b261ecSmrg * is" without express or implied warranty.
1305b261ecSmrg *
1405b261ecSmrg * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
1505b261ecSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
1605b261ecSmrg * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
1705b261ecSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
1805b261ecSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
1905b261ecSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
2005b261ecSmrg * OF THIS SOFTWARE.
2105b261ecSmrg */
2205b261ecSmrg
2305b261ecSmrg#include "randrstr.h"
2405b261ecSmrg
257e31ba66Smrgstatic int _X_COLD
26f7df2e56SmrgSProcRRQueryVersion(ClientPtr client)
2705b261ecSmrg{
2805b261ecSmrg    REQUEST(xRRQueryVersionReq);
2905b261ecSmrg
300b0d8713Smrg    REQUEST_SIZE_MATCH(xRRQueryVersionReq);
31f7df2e56Smrg    swaps(&stuff->length);
32f7df2e56Smrg    swapl(&stuff->majorVersion);
33f7df2e56Smrg    swapl(&stuff->minorVersion);
3405b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
3505b261ecSmrg}
3605b261ecSmrg
377e31ba66Smrgstatic int _X_COLD
38f7df2e56SmrgSProcRRGetScreenInfo(ClientPtr client)
3905b261ecSmrg{
4005b261ecSmrg    REQUEST(xRRGetScreenInfoReq);
4105b261ecSmrg
420b0d8713Smrg    REQUEST_SIZE_MATCH(xRRGetScreenInfoReq);
43f7df2e56Smrg    swaps(&stuff->length);
44f7df2e56Smrg    swapl(&stuff->window);
4505b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
4605b261ecSmrg}
4705b261ecSmrg
487e31ba66Smrgstatic int _X_COLD
49f7df2e56SmrgSProcRRSetScreenConfig(ClientPtr client)
5005b261ecSmrg{
5105b261ecSmrg    REQUEST(xRRSetScreenConfigReq);
5205b261ecSmrg
53f7df2e56Smrg    if (RRClientKnowsRates(client)) {
54f7df2e56Smrg        REQUEST_SIZE_MATCH(xRRSetScreenConfigReq);
55f7df2e56Smrg        swaps(&stuff->rate);
5605b261ecSmrg    }
57f7df2e56Smrg    else {
58f7df2e56Smrg        REQUEST_SIZE_MATCH(xRR1_0SetScreenConfigReq);
5905b261ecSmrg    }
60f7df2e56Smrg
61f7df2e56Smrg    swaps(&stuff->length);
62f7df2e56Smrg    swapl(&stuff->drawable);
63f7df2e56Smrg    swapl(&stuff->timestamp);
64f7df2e56Smrg    swaps(&stuff->sizeID);
65f7df2e56Smrg    swaps(&stuff->rotation);
6605b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
6705b261ecSmrg}
6805b261ecSmrg
697e31ba66Smrgstatic int _X_COLD
70f7df2e56SmrgSProcRRSelectInput(ClientPtr client)
7105b261ecSmrg{
7205b261ecSmrg    REQUEST(xRRSelectInputReq);
7305b261ecSmrg
740b0d8713Smrg    REQUEST_SIZE_MATCH(xRRSelectInputReq);
75f7df2e56Smrg    swaps(&stuff->length);
76f7df2e56Smrg    swapl(&stuff->window);
77f7df2e56Smrg    swaps(&stuff->enable);
7805b261ecSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
7905b261ecSmrg}
8005b261ecSmrg
817e31ba66Smrgstatic int _X_COLD
82f7df2e56SmrgSProcRRGetScreenSizeRange(ClientPtr client)
8305b261ecSmrg{
8405b261ecSmrg    REQUEST(xRRGetScreenSizeRangeReq);
854642e01fSmrg
8605b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetScreenSizeRangeReq);
87f7df2e56Smrg    swaps(&stuff->length);
88f7df2e56Smrg    swapl(&stuff->window);
894642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
9005b261ecSmrg}
9105b261ecSmrg
927e31ba66Smrgstatic int _X_COLD
93f7df2e56SmrgSProcRRSetScreenSize(ClientPtr client)
9405b261ecSmrg{
9505b261ecSmrg    REQUEST(xRRSetScreenSizeReq);
964642e01fSmrg
9705b261ecSmrg    REQUEST_SIZE_MATCH(xRRSetScreenSizeReq);
98f7df2e56Smrg    swaps(&stuff->length);
99f7df2e56Smrg    swapl(&stuff->window);
100f7df2e56Smrg    swaps(&stuff->width);
101f7df2e56Smrg    swaps(&stuff->height);
102f7df2e56Smrg    swapl(&stuff->widthInMillimeters);
103f7df2e56Smrg    swapl(&stuff->heightInMillimeters);
1044642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
10505b261ecSmrg}
10605b261ecSmrg
1077e31ba66Smrgstatic int _X_COLD
108f7df2e56SmrgSProcRRGetScreenResources(ClientPtr client)
10905b261ecSmrg{
11005b261ecSmrg    REQUEST(xRRGetScreenResourcesReq);
1114642e01fSmrg
11205b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetScreenResourcesReq);
113f7df2e56Smrg    swaps(&stuff->length);
114f7df2e56Smrg    swapl(&stuff->window);
1154642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
11605b261ecSmrg}
11705b261ecSmrg
1187e31ba66Smrgstatic int _X_COLD
119f7df2e56SmrgSProcRRGetOutputInfo(ClientPtr client)
12005b261ecSmrg{
1214642e01fSmrg    REQUEST(xRRGetOutputInfoReq);
1224642e01fSmrg
12305b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetOutputInfoReq);
124f7df2e56Smrg    swaps(&stuff->length);
125f7df2e56Smrg    swapl(&stuff->output);
126f7df2e56Smrg    swapl(&stuff->configTimestamp);
1274642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
12805b261ecSmrg}
12905b261ecSmrg
1307e31ba66Smrgstatic int _X_COLD
131f7df2e56SmrgSProcRRListOutputProperties(ClientPtr client)
13205b261ecSmrg{
13305b261ecSmrg    REQUEST(xRRListOutputPropertiesReq);
1344642e01fSmrg
13505b261ecSmrg    REQUEST_SIZE_MATCH(xRRListOutputPropertiesReq);
136f7df2e56Smrg    swaps(&stuff->length);
137f7df2e56Smrg    swapl(&stuff->output);
1384642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
13905b261ecSmrg}
14005b261ecSmrg
1417e31ba66Smrgstatic int _X_COLD
142f7df2e56SmrgSProcRRQueryOutputProperty(ClientPtr client)
14305b261ecSmrg{
14405b261ecSmrg    REQUEST(xRRQueryOutputPropertyReq);
1454642e01fSmrg
14605b261ecSmrg    REQUEST_SIZE_MATCH(xRRQueryOutputPropertyReq);
147f7df2e56Smrg    swaps(&stuff->length);
148f7df2e56Smrg    swapl(&stuff->output);
149f7df2e56Smrg    swapl(&stuff->property);
1504642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
15105b261ecSmrg}
15205b261ecSmrg
1537e31ba66Smrgstatic int _X_COLD
154f7df2e56SmrgSProcRRConfigureOutputProperty(ClientPtr client)
15505b261ecSmrg{
15605b261ecSmrg    REQUEST(xRRConfigureOutputPropertyReq);
1574642e01fSmrg
1580b0d8713Smrg    REQUEST_AT_LEAST_SIZE(xRRConfigureOutputPropertyReq);
159f7df2e56Smrg    swaps(&stuff->length);
160f7df2e56Smrg    swapl(&stuff->output);
161f7df2e56Smrg    swapl(&stuff->property);
1624642e01fSmrg    SwapRestL(stuff);
1634642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
16405b261ecSmrg}
16505b261ecSmrg
1667e31ba66Smrgstatic int _X_COLD
167f7df2e56SmrgSProcRRChangeOutputProperty(ClientPtr client)
16805b261ecSmrg{
16905b261ecSmrg    REQUEST(xRRChangeOutputPropertyReq);
1704642e01fSmrg
171f7df2e56Smrg    REQUEST_AT_LEAST_SIZE(xRRChangeOutputPropertyReq);
172f7df2e56Smrg    swaps(&stuff->length);
173f7df2e56Smrg    swapl(&stuff->output);
174f7df2e56Smrg    swapl(&stuff->property);
175f7df2e56Smrg    swapl(&stuff->type);
176f7df2e56Smrg    swapl(&stuff->nUnits);
177f7df2e56Smrg    switch (stuff->format) {
178f7df2e56Smrg    case 8:
179f7df2e56Smrg        break;
180f7df2e56Smrg    case 16:
181f7df2e56Smrg        SwapRestS(stuff);
182f7df2e56Smrg        break;
183f7df2e56Smrg    case 32:
184f7df2e56Smrg        SwapRestL(stuff);
185f7df2e56Smrg        break;
186f7df2e56Smrg    default:
187f7df2e56Smrg        client->errorValue = stuff->format;
188f7df2e56Smrg        return BadValue;
1894642e01fSmrg    }
1904642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
19105b261ecSmrg}
19205b261ecSmrg
1937e31ba66Smrgstatic int _X_COLD
194f7df2e56SmrgSProcRRDeleteOutputProperty(ClientPtr client)
19505b261ecSmrg{
19605b261ecSmrg    REQUEST(xRRDeleteOutputPropertyReq);
197f7df2e56Smrg
19805b261ecSmrg    REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq);
199f7df2e56Smrg    swaps(&stuff->length);
200f7df2e56Smrg    swapl(&stuff->output);
201f7df2e56Smrg    swapl(&stuff->property);
2024642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
20305b261ecSmrg}
20405b261ecSmrg
2057e31ba66Smrgstatic int _X_COLD
206f7df2e56SmrgSProcRRGetOutputProperty(ClientPtr client)
20705b261ecSmrg{
20805b261ecSmrg    REQUEST(xRRGetOutputPropertyReq);
2094642e01fSmrg
21005b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetOutputPropertyReq);
211f7df2e56Smrg    swaps(&stuff->length);
212f7df2e56Smrg    swapl(&stuff->output);
213f7df2e56Smrg    swapl(&stuff->property);
214f7df2e56Smrg    swapl(&stuff->type);
215f7df2e56Smrg    swapl(&stuff->longOffset);
216f7df2e56Smrg    swapl(&stuff->longLength);
2174642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
21805b261ecSmrg}
21905b261ecSmrg
2207e31ba66Smrgstatic int _X_COLD
221f7df2e56SmrgSProcRRCreateMode(ClientPtr client)
22205b261ecSmrg{
2234642e01fSmrg    xRRModeInfo *modeinfo;
224f7df2e56Smrg
22505b261ecSmrg    REQUEST(xRRCreateModeReq);
2264642e01fSmrg
2274642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRCreateModeReq);
228f7df2e56Smrg    swaps(&stuff->length);
229f7df2e56Smrg    swapl(&stuff->window);
2304642e01fSmrg
2314642e01fSmrg    modeinfo = &stuff->modeInfo;
232f7df2e56Smrg    swapl(&modeinfo->id);
233f7df2e56Smrg    swaps(&modeinfo->width);
234f7df2e56Smrg    swaps(&modeinfo->height);
235f7df2e56Smrg    swapl(&modeinfo->dotClock);
236f7df2e56Smrg    swaps(&modeinfo->hSyncStart);
237f7df2e56Smrg    swaps(&modeinfo->hSyncEnd);
238f7df2e56Smrg    swaps(&modeinfo->hTotal);
239f7df2e56Smrg    swaps(&modeinfo->vSyncStart);
240f7df2e56Smrg    swaps(&modeinfo->vSyncEnd);
241f7df2e56Smrg    swaps(&modeinfo->vTotal);
242f7df2e56Smrg    swaps(&modeinfo->nameLength);
243f7df2e56Smrg    swapl(&modeinfo->modeFlags);
2444642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
24505b261ecSmrg}
24605b261ecSmrg
2477e31ba66Smrgstatic int _X_COLD
248f7df2e56SmrgSProcRRDestroyMode(ClientPtr client)
24905b261ecSmrg{
25005b261ecSmrg    REQUEST(xRRDestroyModeReq);
2514642e01fSmrg
25205b261ecSmrg    REQUEST_SIZE_MATCH(xRRDestroyModeReq);
253f7df2e56Smrg    swaps(&stuff->length);
254f7df2e56Smrg    swapl(&stuff->mode);
2554642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
25605b261ecSmrg}
25705b261ecSmrg
2587e31ba66Smrgstatic int _X_COLD
259f7df2e56SmrgSProcRRAddOutputMode(ClientPtr client)
26005b261ecSmrg{
26105b261ecSmrg    REQUEST(xRRAddOutputModeReq);
2624642e01fSmrg
26305b261ecSmrg    REQUEST_SIZE_MATCH(xRRAddOutputModeReq);
264f7df2e56Smrg    swaps(&stuff->length);
265f7df2e56Smrg    swapl(&stuff->output);
266f7df2e56Smrg    swapl(&stuff->mode);
2674642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
26805b261ecSmrg}
26905b261ecSmrg
2707e31ba66Smrgstatic int _X_COLD
271f7df2e56SmrgSProcRRDeleteOutputMode(ClientPtr client)
27205b261ecSmrg{
27305b261ecSmrg    REQUEST(xRRDeleteOutputModeReq);
2744642e01fSmrg
27505b261ecSmrg    REQUEST_SIZE_MATCH(xRRDeleteOutputModeReq);
276f7df2e56Smrg    swaps(&stuff->length);
277f7df2e56Smrg    swapl(&stuff->output);
278f7df2e56Smrg    swapl(&stuff->mode);
2794642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
28005b261ecSmrg}
28105b261ecSmrg
2827e31ba66Smrgstatic int _X_COLD
283f7df2e56SmrgSProcRRGetCrtcInfo(ClientPtr client)
28405b261ecSmrg{
28505b261ecSmrg    REQUEST(xRRGetCrtcInfoReq);
2864642e01fSmrg
28705b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcInfoReq);
288f7df2e56Smrg    swaps(&stuff->length);
289f7df2e56Smrg    swapl(&stuff->crtc);
290f7df2e56Smrg    swapl(&stuff->configTimestamp);
2914642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
29205b261ecSmrg}
29305b261ecSmrg
2947e31ba66Smrgstatic int _X_COLD
295f7df2e56SmrgSProcRRSetCrtcConfig(ClientPtr client)
29605b261ecSmrg{
29705b261ecSmrg    REQUEST(xRRSetCrtcConfigReq);
2984642e01fSmrg
2994642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRSetCrtcConfigReq);
300f7df2e56Smrg    swaps(&stuff->length);
301f7df2e56Smrg    swapl(&stuff->crtc);
302f7df2e56Smrg    swapl(&stuff->timestamp);
303f7df2e56Smrg    swapl(&stuff->configTimestamp);
304f7df2e56Smrg    swaps(&stuff->x);
305f7df2e56Smrg    swaps(&stuff->y);
306f7df2e56Smrg    swapl(&stuff->mode);
307f7df2e56Smrg    swaps(&stuff->rotation);
3084642e01fSmrg    SwapRestL(stuff);
3094642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
31005b261ecSmrg}
31105b261ecSmrg
3127e31ba66Smrgstatic int _X_COLD
313f7df2e56SmrgSProcRRGetCrtcGammaSize(ClientPtr client)
31405b261ecSmrg{
31505b261ecSmrg    REQUEST(xRRGetCrtcGammaSizeReq);
3164642e01fSmrg
31705b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcGammaSizeReq);
318f7df2e56Smrg    swaps(&stuff->length);
319f7df2e56Smrg    swapl(&stuff->crtc);
3204642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
32105b261ecSmrg}
32205b261ecSmrg
3237e31ba66Smrgstatic int _X_COLD
324f7df2e56SmrgSProcRRGetCrtcGamma(ClientPtr client)
32505b261ecSmrg{
32605b261ecSmrg    REQUEST(xRRGetCrtcGammaReq);
3274642e01fSmrg
32805b261ecSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcGammaReq);
329f7df2e56Smrg    swaps(&stuff->length);
330f7df2e56Smrg    swapl(&stuff->crtc);
3314642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
33205b261ecSmrg}
33305b261ecSmrg
3347e31ba66Smrgstatic int _X_COLD
335f7df2e56SmrgSProcRRSetCrtcGamma(ClientPtr client)
33605b261ecSmrg{
33705b261ecSmrg    REQUEST(xRRSetCrtcGammaReq);
3384642e01fSmrg
3394642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRSetCrtcGammaReq);
340f7df2e56Smrg    swaps(&stuff->length);
341f7df2e56Smrg    swapl(&stuff->crtc);
342f7df2e56Smrg    swaps(&stuff->size);
3434642e01fSmrg    SwapRestS(stuff);
3444642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
3454642e01fSmrg}
3464642e01fSmrg
3477e31ba66Smrgstatic int _X_COLD
348f7df2e56SmrgSProcRRSetCrtcTransform(ClientPtr client)
3494642e01fSmrg{
350f7df2e56Smrg    int nparams;
3514642e01fSmrg    char *filter;
3524642e01fSmrg    CARD32 *params;
353f7df2e56Smrg
3544642e01fSmrg    REQUEST(xRRSetCrtcTransformReq);
3554642e01fSmrg
3564642e01fSmrg    REQUEST_AT_LEAST_SIZE(xRRSetCrtcTransformReq);
357f7df2e56Smrg    swaps(&stuff->length);
358f7df2e56Smrg    swapl(&stuff->crtc);
359f7df2e56Smrg    SwapLongs((CARD32 *) &stuff->transform,
360f7df2e56Smrg              bytes_to_int32(sizeof(xRenderTransform)));
361f7df2e56Smrg    swaps(&stuff->nbytesFilter);
362f7df2e56Smrg    filter = (char *) (stuff + 1);
3636747b715Smrg    params = (CARD32 *) (filter + pad_to_int32(stuff->nbytesFilter));
3644642e01fSmrg    nparams = ((CARD32 *) stuff + client->req_len) - params;
3654642e01fSmrg    if (nparams < 0)
366f7df2e56Smrg        return BadLength;
3674642e01fSmrg
3684642e01fSmrg    SwapLongs(params, nparams);
3694642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
3704642e01fSmrg}
3714642e01fSmrg
3727e31ba66Smrgstatic int _X_COLD
373f7df2e56SmrgSProcRRGetCrtcTransform(ClientPtr client)
3744642e01fSmrg{
3754642e01fSmrg    REQUEST(xRRGetCrtcTransformReq);
3764642e01fSmrg
3774642e01fSmrg    REQUEST_SIZE_MATCH(xRRGetCrtcTransformReq);
378f7df2e56Smrg    swaps(&stuff->length);
379f7df2e56Smrg    swapl(&stuff->crtc);
3804642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
3814642e01fSmrg}
3824642e01fSmrg
3837e31ba66Smrgstatic int _X_COLD
384f7df2e56SmrgSProcRRGetPanning(ClientPtr client)
3854642e01fSmrg{
3864642e01fSmrg    REQUEST(xRRGetPanningReq);
387f7df2e56Smrg
3884642e01fSmrg    REQUEST_SIZE_MATCH(xRRGetPanningReq);
389f7df2e56Smrg    swaps(&stuff->length);
390f7df2e56Smrg    swapl(&stuff->crtc);
3914642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
3924642e01fSmrg}
3934642e01fSmrg
3947e31ba66Smrgstatic int _X_COLD
395f7df2e56SmrgSProcRRSetPanning(ClientPtr client)
3964642e01fSmrg{
3974642e01fSmrg    REQUEST(xRRSetPanningReq);
398f7df2e56Smrg
3994642e01fSmrg    REQUEST_SIZE_MATCH(xRRSetPanningReq);
400f7df2e56Smrg    swaps(&stuff->length);
401f7df2e56Smrg    swapl(&stuff->crtc);
402f7df2e56Smrg    swapl(&stuff->timestamp);
403f7df2e56Smrg    swaps(&stuff->left);
404f7df2e56Smrg    swaps(&stuff->top);
405f7df2e56Smrg    swaps(&stuff->width);
406f7df2e56Smrg    swaps(&stuff->height);
407f7df2e56Smrg    swaps(&stuff->track_left);
408f7df2e56Smrg    swaps(&stuff->track_top);
409f7df2e56Smrg    swaps(&stuff->track_width);
410f7df2e56Smrg    swaps(&stuff->track_height);
411f7df2e56Smrg    swaps(&stuff->border_left);
412f7df2e56Smrg    swaps(&stuff->border_top);
413f7df2e56Smrg    swaps(&stuff->border_right);
414f7df2e56Smrg    swaps(&stuff->border_bottom);
4154642e01fSmrg    return (*ProcRandrVector[stuff->randrReqType]) (client);
4164642e01fSmrg}
4174642e01fSmrg
4187e31ba66Smrgstatic int _X_COLD
419f7df2e56SmrgSProcRRSetOutputPrimary(ClientPtr client)
4204642e01fSmrg{
4214642e01fSmrg    REQUEST(xRRSetOutputPrimaryReq);
4224642e01fSmrg
4234642e01fSmrg    REQUEST_SIZE_MATCH(xRRSetOutputPrimaryReq);
424f7df2e56Smrg    swaps(&stuff->length);
425f7df2e56Smrg    swapl(&stuff->window);
426f7df2e56Smrg    swapl(&stuff->output);
427f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
4284642e01fSmrg}
4294642e01fSmrg
4307e31ba66Smrgstatic int _X_COLD
431f7df2e56SmrgSProcRRGetOutputPrimary(ClientPtr client)
4324642e01fSmrg{
4336747b715Smrg    REQUEST(xRRGetOutputPrimaryReq);
4344642e01fSmrg
4354642e01fSmrg    REQUEST_SIZE_MATCH(xRRGetOutputPrimaryReq);
436f7df2e56Smrg    swaps(&stuff->length);
437f7df2e56Smrg    swapl(&stuff->window);
438f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
439f7df2e56Smrg}
440f7df2e56Smrg
4417e31ba66Smrgstatic int _X_COLD
4427e31ba66SmrgSProcRRGetProviders(ClientPtr client)
443f7df2e56Smrg{
444f7df2e56Smrg    REQUEST(xRRGetProvidersReq);
445f7df2e56Smrg
446f7df2e56Smrg    REQUEST_SIZE_MATCH(xRRGetProvidersReq);
447f7df2e56Smrg    swaps(&stuff->length);
448f7df2e56Smrg    swapl(&stuff->window);
449f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
450f7df2e56Smrg}
451f7df2e56Smrg
4527e31ba66Smrgstatic int _X_COLD
4537e31ba66SmrgSProcRRGetProviderInfo(ClientPtr client)
454f7df2e56Smrg{
455f7df2e56Smrg    REQUEST(xRRGetProviderInfoReq);
456f7df2e56Smrg
457f7df2e56Smrg    REQUEST_SIZE_MATCH(xRRGetProviderInfoReq);
458f7df2e56Smrg    swaps(&stuff->length);
459f7df2e56Smrg    swapl(&stuff->provider);
460f7df2e56Smrg    swapl(&stuff->configTimestamp);
461f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
462f7df2e56Smrg}
463f7df2e56Smrg
4647e31ba66Smrgstatic int _X_COLD
4657e31ba66SmrgSProcRRSetProviderOffloadSink(ClientPtr client)
466f7df2e56Smrg{
467f7df2e56Smrg    REQUEST(xRRSetProviderOffloadSinkReq);
468f7df2e56Smrg
469f7df2e56Smrg    REQUEST_SIZE_MATCH(xRRSetProviderOffloadSinkReq);
470f7df2e56Smrg    swaps(&stuff->length);
471f7df2e56Smrg    swapl(&stuff->provider);
472f7df2e56Smrg    swapl(&stuff->sink_provider);
473f7df2e56Smrg    swapl(&stuff->configTimestamp);
474f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
475f7df2e56Smrg}
476f7df2e56Smrg
4777e31ba66Smrgstatic int _X_COLD
4787e31ba66SmrgSProcRRSetProviderOutputSource(ClientPtr client)
479f7df2e56Smrg{
480f7df2e56Smrg    REQUEST(xRRSetProviderOutputSourceReq);
481f7df2e56Smrg
482f7df2e56Smrg    REQUEST_SIZE_MATCH(xRRSetProviderOutputSourceReq);
483f7df2e56Smrg    swaps(&stuff->length);
484f7df2e56Smrg    swapl(&stuff->provider);
485f7df2e56Smrg    swapl(&stuff->source_provider);
486f7df2e56Smrg    swapl(&stuff->configTimestamp);
487f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
488f7df2e56Smrg}
489f7df2e56Smrg
4907e31ba66Smrgstatic int _X_COLD
4917e31ba66SmrgSProcRRListProviderProperties(ClientPtr client)
492f7df2e56Smrg{
493f7df2e56Smrg    REQUEST(xRRListProviderPropertiesReq);
494f7df2e56Smrg
495f7df2e56Smrg    REQUEST_SIZE_MATCH(xRRListProviderPropertiesReq);
496f7df2e56Smrg    swaps(&stuff->length);
497f7df2e56Smrg    swapl(&stuff->provider);
498f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
499f7df2e56Smrg}
500f7df2e56Smrg
5017e31ba66Smrgstatic int _X_COLD
5027e31ba66SmrgSProcRRQueryProviderProperty(ClientPtr client)
503f7df2e56Smrg{
504f7df2e56Smrg    REQUEST(xRRQueryProviderPropertyReq);
505f7df2e56Smrg
506f7df2e56Smrg    REQUEST_SIZE_MATCH(xRRQueryProviderPropertyReq);
507f7df2e56Smrg    swaps(&stuff->length);
508f7df2e56Smrg    swapl(&stuff->provider);
509f7df2e56Smrg    swapl(&stuff->property);
510f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
511f7df2e56Smrg}
512f7df2e56Smrg
5137e31ba66Smrgstatic int _X_COLD
5147e31ba66SmrgSProcRRConfigureProviderProperty(ClientPtr client)
515f7df2e56Smrg{
516f7df2e56Smrg    REQUEST(xRRConfigureProviderPropertyReq);
517f7df2e56Smrg
518f7df2e56Smrg    REQUEST_AT_LEAST_SIZE(xRRConfigureProviderPropertyReq);
519f7df2e56Smrg    swaps(&stuff->length);
520f7df2e56Smrg    swapl(&stuff->provider);
521f7df2e56Smrg    swapl(&stuff->property);
522f7df2e56Smrg    /* TODO: no way to specify format? */
523f7df2e56Smrg    SwapRestL(stuff);
524f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
525f7df2e56Smrg}
526f7df2e56Smrg
5277e31ba66Smrgstatic int _X_COLD
5287e31ba66SmrgSProcRRChangeProviderProperty(ClientPtr client)
529f7df2e56Smrg{
530f7df2e56Smrg    REQUEST(xRRChangeProviderPropertyReq);
531f7df2e56Smrg
532f7df2e56Smrg    REQUEST_AT_LEAST_SIZE(xRRChangeProviderPropertyReq);
533f7df2e56Smrg    swaps(&stuff->length);
534f7df2e56Smrg    swapl(&stuff->provider);
535f7df2e56Smrg    swapl(&stuff->property);
536f7df2e56Smrg    swapl(&stuff->type);
537f7df2e56Smrg    swapl(&stuff->nUnits);
538f7df2e56Smrg    switch (stuff->format) {
539f7df2e56Smrg    case 8:
540f7df2e56Smrg        break;
541f7df2e56Smrg    case 16:
542f7df2e56Smrg        SwapRestS(stuff);
543f7df2e56Smrg        break;
544f7df2e56Smrg    case 32:
545f7df2e56Smrg        SwapRestL(stuff);
546f7df2e56Smrg        break;
547f7df2e56Smrg    }
548f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
549f7df2e56Smrg}
550f7df2e56Smrg
5517e31ba66Smrgstatic int _X_COLD
5527e31ba66SmrgSProcRRDeleteProviderProperty(ClientPtr client)
553f7df2e56Smrg{
554f7df2e56Smrg    REQUEST(xRRDeleteProviderPropertyReq);
555f7df2e56Smrg
556f7df2e56Smrg    REQUEST_SIZE_MATCH(xRRDeleteProviderPropertyReq);
557f7df2e56Smrg    swaps(&stuff->length);
558f7df2e56Smrg    swapl(&stuff->provider);
559f7df2e56Smrg    swapl(&stuff->property);
560f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
56105b261ecSmrg}
56205b261ecSmrg
5637e31ba66Smrgstatic int _X_COLD
5647e31ba66SmrgSProcRRGetProviderProperty(ClientPtr client)
565f7df2e56Smrg{
566f7df2e56Smrg    REQUEST(xRRGetProviderPropertyReq);
567f7df2e56Smrg
568f7df2e56Smrg    REQUEST_SIZE_MATCH(xRRGetProviderPropertyReq);
569f7df2e56Smrg    swaps(&stuff->length);
570f7df2e56Smrg    swapl(&stuff->provider);
571f7df2e56Smrg    swapl(&stuff->property);
572f7df2e56Smrg    swapl(&stuff->type);
573f7df2e56Smrg    swapl(&stuff->longOffset);
574f7df2e56Smrg    swapl(&stuff->longLength);
575f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
576f7df2e56Smrg}
577f7df2e56Smrg
5787e31ba66Smrgstatic int _X_COLD
5797e31ba66SmrgSProcRRGetMonitors(ClientPtr client) {
580f7df2e56Smrg    REQUEST(xRRGetMonitorsReq);
581f7df2e56Smrg
582f7df2e56Smrg    REQUEST_SIZE_MATCH(xRRGetMonitorsReq);
583f7df2e56Smrg    swaps(&stuff->length);
584f7df2e56Smrg    swapl(&stuff->window);
585f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
586f7df2e56Smrg}
587f7df2e56Smrg
5887e31ba66Smrgstatic int _X_COLD
5897e31ba66SmrgSProcRRSetMonitor(ClientPtr client) {
590f7df2e56Smrg    REQUEST(xRRSetMonitorReq);
591f7df2e56Smrg
592f7df2e56Smrg    REQUEST_AT_LEAST_SIZE(xRRGetMonitorsReq);
593f7df2e56Smrg    swaps(&stuff->length);
594f7df2e56Smrg    swapl(&stuff->window);
595f7df2e56Smrg    swapl(&stuff->monitor.name);
596f7df2e56Smrg    swaps(&stuff->monitor.noutput);
597f7df2e56Smrg    swaps(&stuff->monitor.x);
598f7df2e56Smrg    swaps(&stuff->monitor.y);
599f7df2e56Smrg    swaps(&stuff->monitor.width);
600f7df2e56Smrg    swaps(&stuff->monitor.height);
601f7df2e56Smrg    SwapRestL(stuff);
602f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
603f7df2e56Smrg}
604f7df2e56Smrg
6057e31ba66Smrgstatic int _X_COLD
6067e31ba66SmrgSProcRRDeleteMonitor(ClientPtr client) {
607f7df2e56Smrg    REQUEST(xRRDeleteMonitorReq);
608f7df2e56Smrg
609f7df2e56Smrg    REQUEST_SIZE_MATCH(xRRDeleteMonitorReq);
610f7df2e56Smrg    swaps(&stuff->length);
611f7df2e56Smrg    swapl(&stuff->window);
612f7df2e56Smrg    swapl(&stuff->name);
613f7df2e56Smrg    return ProcRandrVector[stuff->randrReqType] (client);
614f7df2e56Smrg}
615f7df2e56Smrg
6167e31ba66Smrgstatic int _X_COLD
6177e31ba66SmrgSProcRRCreateLease(ClientPtr client) {
6187e31ba66Smrg    REQUEST(xRRCreateLeaseReq);
6197e31ba66Smrg
6207e31ba66Smrg    REQUEST_AT_LEAST_SIZE(xRRCreateLeaseReq);
6217e31ba66Smrg    swaps(&stuff->length);
6227e31ba66Smrg    swapl(&stuff->window);
6237e31ba66Smrg    swaps(&stuff->nCrtcs);
6247e31ba66Smrg    swaps(&stuff->nOutputs);
6257e31ba66Smrg    SwapRestL(stuff);
6267e31ba66Smrg    return ProcRandrVector[stuff->randrReqType] (client);
6277e31ba66Smrg}
6287e31ba66Smrg
6297e31ba66Smrgstatic int _X_COLD
6307e31ba66SmrgSProcRRFreeLease(ClientPtr client) {
6317e31ba66Smrg    REQUEST(xRRFreeLeaseReq);
6327e31ba66Smrg
6337e31ba66Smrg    REQUEST_SIZE_MATCH(xRRFreeLeaseReq);
6347e31ba66Smrg    swaps(&stuff->length);
6357e31ba66Smrg    swapl(&stuff->lid);
6367e31ba66Smrg    return ProcRandrVector[stuff->randrReqType] (client);
6377e31ba66Smrg}
6387e31ba66Smrg
639f7df2e56Smrgint (*SProcRandrVector[RRNumberRequests]) (ClientPtr) = {
640f7df2e56Smrg    SProcRRQueryVersion,        /* 0 */
64105b261ecSmrg/* we skip 1 to make old clients fail pretty immediately */
642f7df2e56Smrg        NULL,                   /* 1 SProcRandrOldGetScreenInfo */
64305b261ecSmrg/* V1.0 apps share the same set screen config request id */
644f7df2e56Smrg        SProcRRSetScreenConfig, /* 2 */
645f7df2e56Smrg        NULL,                   /* 3 SProcRandrOldScreenChangeSelectInput */
64605b261ecSmrg/* 3 used to be ScreenChangeSelectInput; deprecated */
647f7df2e56Smrg        SProcRRSelectInput,     /* 4 */
648f7df2e56Smrg        SProcRRGetScreenInfo,   /* 5 */
64905b261ecSmrg/* V1.2 additions */
650f7df2e56Smrg        SProcRRGetScreenSizeRange,      /* 6 */
651f7df2e56Smrg        SProcRRSetScreenSize,   /* 7 */
652f7df2e56Smrg        SProcRRGetScreenResources,      /* 8 */
653f7df2e56Smrg        SProcRRGetOutputInfo,   /* 9 */
654f7df2e56Smrg        SProcRRListOutputProperties,    /* 10 */
655f7df2e56Smrg        SProcRRQueryOutputProperty,     /* 11 */
656f7df2e56Smrg        SProcRRConfigureOutputProperty, /* 12 */
657f7df2e56Smrg        SProcRRChangeOutputProperty,    /* 13 */
658f7df2e56Smrg        SProcRRDeleteOutputProperty,    /* 14 */
659f7df2e56Smrg        SProcRRGetOutputProperty,       /* 15 */
660f7df2e56Smrg        SProcRRCreateMode,      /* 16 */
661f7df2e56Smrg        SProcRRDestroyMode,     /* 17 */
662f7df2e56Smrg        SProcRRAddOutputMode,   /* 18 */
663f7df2e56Smrg        SProcRRDeleteOutputMode,        /* 19 */
664f7df2e56Smrg        SProcRRGetCrtcInfo,     /* 20 */
665f7df2e56Smrg        SProcRRSetCrtcConfig,   /* 21 */
666f7df2e56Smrg        SProcRRGetCrtcGammaSize,        /* 22 */
667f7df2e56Smrg        SProcRRGetCrtcGamma,    /* 23 */
668f7df2e56Smrg        SProcRRSetCrtcGamma,    /* 24 */
6694642e01fSmrg/* V1.3 additions */
670f7df2e56Smrg        SProcRRGetScreenResources,      /* 25 GetScreenResourcesCurrent */
671f7df2e56Smrg        SProcRRSetCrtcTransform,        /* 26 */
672f7df2e56Smrg        SProcRRGetCrtcTransform,        /* 27 */
673f7df2e56Smrg        SProcRRGetPanning,      /* 28 */
674f7df2e56Smrg        SProcRRSetPanning,      /* 29 */
675f7df2e56Smrg        SProcRRSetOutputPrimary,        /* 30 */
676f7df2e56Smrg        SProcRRGetOutputPrimary,        /* 31 */
677f7df2e56Smrg/* V1.4 additions */
678f7df2e56Smrg        SProcRRGetProviders,            /* 32 */
679f7df2e56Smrg        SProcRRGetProviderInfo,         /* 33 */
680f7df2e56Smrg        SProcRRSetProviderOffloadSink,  /* 34 */
681f7df2e56Smrg        SProcRRSetProviderOutputSource, /* 35 */
682f7df2e56Smrg        SProcRRListProviderProperties,  /* 36 */
683f7df2e56Smrg        SProcRRQueryProviderProperty,   /* 37 */
684f7df2e56Smrg        SProcRRConfigureProviderProperty, /* 38 */
685f7df2e56Smrg        SProcRRChangeProviderProperty,  /* 39 */
686f7df2e56Smrg        SProcRRDeleteProviderProperty,  /* 40 */
687f7df2e56Smrg        SProcRRGetProviderProperty,     /* 41 */
6887e31ba66Smrg/* V1.5 additions */
689f7df2e56Smrg        SProcRRGetMonitors,            /* 42 */
690f7df2e56Smrg        SProcRRSetMonitor,             /* 43 */
691f7df2e56Smrg        SProcRRDeleteMonitor,          /* 44 */
6927e31ba66Smrg/* V1.6 additions */
6937e31ba66Smrg        SProcRRCreateLease,            /* 45 */
6947e31ba66Smrg        SProcRRFreeLease,              /* 46 */
69505b261ecSmrg};
696