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