/*
* Copyright © 2000 Compaq Computer Corporation
* Copyright © 2002 Hewlett-Packard Company
* Copyright © 2006 Intel Corporation
* Copyright © 2008 Red Hat, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software and its
* documentation for any purpose is hereby granted without fee, provided that
* the above copyright notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting documentation, and
* that the name of the copyright holders not be used in advertising or
* publicity pertaining to distribution of the software without specific,
* written prior permission. The copyright holders make no representations
* about the suitability of this software for any purpose. It is provided "as
* is" without express or implied warranty.
*
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
* DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE.
*
* Author: Jim Gettys, Hewlett-Packard Company, Inc.
* Keith Packard, Intel Corporation
*/
#ifdef HAVE_DIX_CONFIG_H
#include <dix-config.h>
#endif
#ifndef _RANDRSTR_H_
#define _RANDRSTR_H_
#include "misc.h"
#include "os.h"
#include "dixstruct.h"
#include "resource.h"
#include "scrnintstr.h"
#include "windowstr.h"
#include "pixmapstr.h"
#include "extnsionst.h"
#include "servermd.h"
#include "rrtransform.h"
#include "picturestr.h"
#include <X11/Xfuncproto.h>
/* required for ABI compatibility for now */
/*
* Modeline for a monitor. Name follows directly after this struct
*/
struct _rrMode {
int refcnt;
char *name;
};
struct _rrPropertyValue {
};
struct _rrProperty {
int num_valid;
};
struct _rrCrtc {
int x, y;
int numOutputs;
int gammaSize;
void *devPrivate;
};
struct _rrOutput {
char *name;
int nameLength;
int mmWidth;
int mmHeight;
int numCrtcs;
int numClones;
int numModes;
int numPreferred;
int numUserModes;
void *devPrivate;
};
struct _rrProvider {
char *name;
int nameLength;
};
int x,
int y,
#endif
#endif /* RANDR_13_INTERFACE */
/* These are for 1.0 compatibility */
typedef struct _rrRefresh {
typedef struct _rrScreenSize {
int id;
int nRates;
#ifdef RANDR_10_INTERFACE
#endif
typedef struct _rrScrPriv {
/*
* 'public' part of the structure; DDXen fill this in
* as they initialize
*/
#endif
#endif
#endif
/* TODO #if RANDR_15_INTERFACE */
/*
* Private part of the structure; not considered part of the ABI
*/
int numOutputs;
int numCrtcs;
/* Last known pointer position */
#ifdef RANDR_10_INTERFACE
/*
* Configuration information
*/
int nSizes;
int rate;
int size;
#endif
/*
* each window has a list of clients requesting
* RRNotify events. Each client has a resource
* for each window it selects RRNotify input for,
* this resource is used to delete the RRNotifyRec
* entry from the per-window queue.
*/
typedef struct _RREvent {
int mask;
} RREventRec;
typedef struct _RRTimes {
typedef struct _RRClient {
int major_version;
int minor_version;
/* RRTimesRec times[0]; */
{\
RROutputType, client, a);\
return rc;\
}\
}
{\
RRCrtcType, client, a);\
return rc;\
}\
}
{\
RRModeType, client, a);\
return rc;\
}\
}
{\
RRProviderType, client, a);\
return rc;\
}\
}
#define GetRRClient(pClient) ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey))
#ifdef RANDR_12_INTERFACE
/*
* Set the range of sizes for the screen
*/
extern _X_EXPORT void
#endif
/* rrscreen.c */
/*
* Notify the extension that the screen size has been changed.
* The driver is responsible for calling this whenever it has changed
* the size of the screen
*/
extern _X_EXPORT void
/*
* Request that the screen be resized
*/
/*
* Send ConfigureNotify event to root window when 'something' happens
*/
extern _X_EXPORT void
/*
* screen dispatch
*/
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
/*
* Deliver a ScreenNotify event
*/
extern _X_EXPORT void
extern _X_EXPORT void
/* randr.c */
/* set a screen change on the primary screen */
extern _X_EXPORT void
/*
* Send all pending events
*/
extern _X_EXPORT void
/*
* Poll the driver for changed information
*/
#ifdef RANDR_10_INTERFACE
/*
* This is the old interface, deprecated but left
* around for compatibility
*/
/*
* Then, register the specific size with the screen
*/
extern _X_EXPORT RRScreenSizePtr
/*
* Finally, set the current configuration of the screen
*/
extern _X_EXPORT void
#endif
/* rrcrtc.c */
/*
* Notify the CRTC of some change; layoutChanged indicates that
* some position or size element changed
*/
extern _X_EXPORT void
/*
* Create a CRTC
*/
/*
* Set the allowed rotations on a CRTC
*/
extern _X_EXPORT void
/*
* Set whether transforms are allowed on a CRTC
*/
extern _X_EXPORT void
/*
* Notify the extension that the Crtc has been reconfigured,
* the driver calls this whenever it has updated the mode
*/
int x,
int y,
extern _X_EXPORT void
/*
* Request that the Crtc be reconfigured
*/
int x,
/*
* Request that the Crtc gamma be changed
*/
/*
* Request current gamma back from the DDX (if possible).
* This includes gamma size.
*/
/*
* Notify the extension that the Crtc gamma has been changed
* The driver calls this whenever it has changed the gamma values
* in the RRCrtcRec
*/
/*
* Set the size of the gamma table at server startup time
*/
/*
* Return the area of the frame buffer scanned out by the crtc,
* taking into account the current mode and rotation
*/
extern _X_EXPORT void
/*
* Return crtc transform
*/
/*
* Check whether the pending and current transforms are the same
*/
/*
* Destroy a Crtc at shutdown
*/
extern _X_EXPORT void
/*
* Set the pending CRTC transformation
*/
extern _X_EXPORT int
struct pict_f_transform *f_transform,
struct pict_f_transform *f_inverse,
/*
* Initialize crtc type
*/
RRCrtcInit(void);
/*
* Initialize crtc type error value
*/
extern _X_EXPORT void
RRCrtcInitErrorValue(void);
/*
* Detach and free a scanout pixmap
*/
extern _X_EXPORT void
/*
* Crtc dispatch
*/
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
int
int
void
/* rrdispatch.c */
/* rrmode.c */
/*
* Find, and if necessary, create a mode
*/
/*
* Destroy a mode.
*/
extern _X_EXPORT void
/*
* Return a list of modes that are valid for some output in pScreen
*/
/*
* Initialize mode type
*/
RRModeInit(void);
/*
* Initialize mode type error value
*/
extern _X_EXPORT void
RRModeInitErrorValue(void);
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
/* rroutput.c */
/*
* Notify the output of some change. configChanged indicates whether
* any external configuration (mode list, clones, connected status)
* has changed, or whether the change was strictly internal
* (which crtc is in use)
*/
extern _X_EXPORT void
/*
* Create an output
*/
extern _X_EXPORT RROutputPtr
/*
* Notify extension that output parameters have been changed
*/
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT void
extern _X_EXPORT void
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
/*
* Initialize output type
*/
RROutputInit(void);
/*
* Initialize output type error value
*/
extern _X_EXPORT void
RROutputInitErrorValue(void);
/* rrpointer.c */
extern _X_EXPORT void
extern _X_EXPORT void
/* rrproperty.c */
extern _X_EXPORT void
extern _X_EXPORT RRPropertyValuePtr
extern _X_EXPORT RRPropertyPtr
extern _X_EXPORT void
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
/* rrprovider.c */
extern _X_EXPORT void
RRProviderInitErrorValue(void);
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
RRProviderInit(void);
extern _X_EXPORT RRProviderPtr
int nameLength);
extern _X_EXPORT void
extern _X_EXPORT void
extern _X_EXPORT void
/* rrproviderproperty.c */
extern _X_EXPORT void
extern _X_EXPORT RRPropertyValuePtr
extern _X_EXPORT RRPropertyPtr
extern _X_EXPORT void
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
extern _X_EXPORT int
/* rrxinerama.c */
#ifdef XINERAMA
extern _X_EXPORT void
RRXineramaExtensionInit(void);
#endif
#endif /* _RANDRSTR_H_ */
/*
randr extension implementation structure
Query state:
RRGetInfo
• Request configuration from driver, either 1.0 or 1.2 style
• These functions only record state changes, all
other actions are pended until RRTellChanged is called
->rrGetInfo
1.0:
RRRegisterSize
RRRegisterRate
RRSetCurrentConfig
1.2:
RRScreenSetSizeRange
RROutputSetCrtcs
RRModeGet
RROutputSetModes
RROutputSetConnection
RROutputSetSubpixelOrder
RROutputSetClones
RRCrtcNotify
• Must delay scanning configuration until after ->rrGetInfo returns
because some drivers will call SetCurrentConfig in the middle
of the ->rrGetInfo operation.
1.0:
• Scan old configuration, mirror to new structures
RRScanOldConfig
RRCrtcCreate
RROutputCreate
RROutputSetCrtcs
RROutputSetConnection
RROutputSetSubpixelOrder
RROldModeAdd • This adds modes one-at-a-time
RRModeGet
RRCrtcNotify
• send events, reset pointer if necessary
RRTellChanged
WalkTree (sending events)
• when layout has changed:
RRPointerScreenConfigured
RRSendConfigNotify
Asynchronous state setting (1.2 only)
When setting state asynchronously, the driver invokes the
->rrGetInfo function and then calls RRTellChanged to flush
the changes to the clients and reset pointer if necessary
Set state
ProcRRSetScreenConfig
RRCrtcSet
1.2:
->rrCrtcSet
RRCrtcNotify
1.0:
->rrSetConfig
RRCrtcNotify
RRTellChanged
*/