#ifndef _XF86CRTC_H_
#define _XF86CRTC_H_
#include <edid.h>
#include "randrstr.h"
#if XF86_MODES_RENAME
#include "xf86Rename.h"
#endif
#include "xf86Modes.h"
#include "xf86Cursor.h"
#include "xf86i2c.h"
#include "damage.h"
#include "picturestr.h"
#ifndef M_T_PREFERRED
#define M_T_PREFERRED 0x08
#endif
#ifndef M_T_DRIVER
#define M_T_DRIVER 0x40
#endif
#ifndef M_T_USERPREF
#define M_T_USERPREF 0x80
#endif
#ifndef HARDWARE_CURSOR_ARGB
#define HARDWARE_CURSOR_ARGB 0x00004000
#endif
typedef struct _xf86Crtc xf86CrtcRec, *xf86CrtcPtr;
typedef struct _xf86Output xf86OutputRec, *xf86OutputPtr;
typedef enum _xf86ConnectorType {
XF86ConnectorNone,
XF86ConnectorVGA,
XF86ConnectorDVI_I,
XF86ConnectorDVI_D,
XF86ConnectorDVI_A,
XF86ConnectorComposite,
XF86ConnectorSvideo,
XF86ConnectorComponent,
XF86ConnectorLFP,
XF86ConnectorProprietary,
XF86ConnectorHDMI,
XF86ConnectorDisplayPort,
} xf86ConnectorType;
typedef enum _xf86OutputStatus {
XF86OutputStatusConnected,
XF86OutputStatusDisconnected,
XF86OutputStatusUnknown
} xf86OutputStatus;
typedef struct _xf86CrtcFuncs {
void
(*dpms)(xf86CrtcPtr crtc,
int mode);
void
(*save)(xf86CrtcPtr crtc);
void
(*restore)(xf86CrtcPtr crtc);
Bool
(*lock) (xf86CrtcPtr crtc);
void
(*unlock) (xf86CrtcPtr crtc);
Bool
(*mode_fixup)(xf86CrtcPtr crtc,
DisplayModePtr mode,
DisplayModePtr adjusted_mode);
void
(*prepare)(xf86CrtcPtr crtc);
void
(*mode_set)(xf86CrtcPtr crtc,
DisplayModePtr mode,
DisplayModePtr adjusted_mode,
int x, int y);
void
(*commit)(xf86CrtcPtr crtc);
void
(*gamma_set)(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue,
int size);
void *
(*shadow_allocate) (xf86CrtcPtr crtc, int width, int height);
PixmapPtr
(*shadow_create) (xf86CrtcPtr crtc, void *data, int width, int height);
void
(*shadow_destroy) (xf86CrtcPtr crtc, PixmapPtr pPixmap, void *data);
void
(*set_cursor_colors) (xf86CrtcPtr crtc, int bg, int fg);
void
(*set_cursor_position) (xf86CrtcPtr crtc, int x, int y);
void
(*show_cursor) (xf86CrtcPtr crtc);
void
(*hide_cursor) (xf86CrtcPtr crtc);
void
(*load_cursor_image) (xf86CrtcPtr crtc, CARD8 *image);
void
(*load_cursor_argb) (xf86CrtcPtr crtc, CARD32 *image);
void
(*destroy) (xf86CrtcPtr crtc);
Bool
(*set_mode_major)(xf86CrtcPtr crtc, DisplayModePtr mode,
Rotation rotation, int x, int y);
void
(*set_origin)(xf86CrtcPtr crtc, int x, int y);
} xf86CrtcFuncsRec, *xf86CrtcFuncsPtr;
#define XF86_CRTC_VERSION 3
struct _xf86Crtc {
int version;
ScrnInfoPtr scrn;
Bool enabled;
DisplayModeRec mode;
Rotation rotation;
PixmapPtr rotatedPixmap;
void *rotatedData;
int x, y;
DisplayModeRec desiredMode;
Rotation desiredRotation;
int desiredX, desiredY;
const xf86CrtcFuncsRec *funcs;
void *driver_private;
#ifdef RANDR_12_INTERFACE
RRCrtcPtr randr_crtc;
#else
void *randr_crtc;
#endif
Bool cursor_argb;
Bool cursor_in_range;
Bool cursor_shown;
PictTransform crtc_to_framebuffer;
struct pict_f_transform f_crtc_to_framebuffer;
struct pict_f_transform f_framebuffer_to_crtc;
PictFilterPtr filter;
xFixed *params;
int nparams;
int filter_width;
int filter_height;
Bool transform_in_use;
RRTransformRec transform;
Bool transformPresent;
RRTransformRec desiredTransform;
Bool desiredTransformPresent;
BoxRec bounds;
BoxRec panningTotalArea;
BoxRec panningTrackingArea;
INT16 panningBorder[4];
CARD16 *gamma_red;
CARD16 *gamma_green;
CARD16 *gamma_blue;
int gamma_size;
Bool active;
Bool shadowClear;
};
typedef struct _xf86OutputFuncs {
void
(*create_resources)(xf86OutputPtr output);
void
(*dpms)(xf86OutputPtr output,
int mode);
void
(*save)(xf86OutputPtr output);
void
(*restore)(xf86OutputPtr output);
int
(*mode_valid)(xf86OutputPtr output,
DisplayModePtr pMode);
Bool
(*mode_fixup)(xf86OutputPtr output,
DisplayModePtr mode,
DisplayModePtr adjusted_mode);
void
(*prepare)(xf86OutputPtr output);
void
(*commit)(xf86OutputPtr output);
void
(*mode_set)(xf86OutputPtr output,
DisplayModePtr mode,
DisplayModePtr adjusted_mode);
xf86OutputStatus
(*detect)(xf86OutputPtr output);
DisplayModePtr
(*get_modes)(xf86OutputPtr output);
#ifdef RANDR_12_INTERFACE
Bool
(*set_property)(xf86OutputPtr output,
Atom property,
RRPropertyValuePtr value);
#endif
#ifdef RANDR_13_INTERFACE
Bool
(*get_property)(xf86OutputPtr output,
Atom property);
#endif
#ifdef RANDR_GET_CRTC_INTERFACE
xf86CrtcPtr
(*get_crtc)(xf86OutputPtr output);
#endif
void
(*destroy) (xf86OutputPtr output);
} xf86OutputFuncsRec, *xf86OutputFuncsPtr;
#define XF86_OUTPUT_VERSION 2
struct _xf86Output {
int version;
ScrnInfoPtr scrn;
xf86CrtcPtr crtc;
CARD32 possible_crtcs;
CARD32 possible_clones;
Bool interlaceAllowed;
Bool doubleScanAllowed;
DisplayModePtr probed_modes;
OptionInfoPtr options;
XF86ConfMonitorPtr conf_monitor;
int initial_x, initial_y;
Rotation initial_rotation;
xf86OutputStatus status;
xf86MonPtr MonInfo;
int subpixel_order;
int mm_width, mm_height;
char *name;
const xf86OutputFuncsRec *funcs;
void *driver_private;
Bool use_screen_monitor;
#ifdef RANDR_12_INTERFACE
RROutputPtr randr_output;
#else
void *randr_output;
#endif
BoxRec initialTotalArea;
BoxRec initialTrackingArea;
INT16 initialBorder[4];
};
typedef struct _xf86CrtcConfigFuncs {
Bool
(*resize)(ScrnInfoPtr scrn,
int width,
int height);
} xf86CrtcConfigFuncsRec, *xf86CrtcConfigFuncsPtr;
typedef void (*xf86_crtc_notify_proc_ptr) (ScreenPtr pScreen);
typedef struct _xf86CrtcConfig {
int num_output;
xf86OutputPtr *output;
int compat_output;
int num_crtc;
xf86CrtcPtr *crtc;
int minWidth, minHeight;
int maxWidth, maxHeight;
DamagePtr rotation_damage;
Bool rotation_damage_registered;
unsigned int dga_flags;
unsigned long dga_address;
DGAModePtr dga_modes;
int dga_nmode;
int dga_width, dga_height, dga_stride;
DisplayModePtr dga_save_mode;
const xf86CrtcConfigFuncsRec *funcs;
CreateScreenResourcesProcPtr CreateScreenResources;
CloseScreenProcPtr CloseScreen;
xf86CursorInfoPtr cursor_info;
CursorPtr cursor;
CARD8 *cursor_image;
Bool cursor_on;
CARD32 cursor_fg, cursor_bg;
OptionInfoPtr options;
Bool debug_modes;
ScreenBlockHandlerProcPtr BlockHandler;
xf86_crtc_notify_proc_ptr xf86_crtc_notify;
} xf86CrtcConfigRec, *xf86CrtcConfigPtr;
extern _X_EXPORT int xf86CrtcConfigPrivateIndex;
#define XF86_CRTC_CONFIG_PTR(p) ((xf86CrtcConfigPtr) ((p)->privates[xf86CrtcConfigPrivateIndex].ptr))
static _X_INLINE xf86OutputPtr
xf86CompatOutput(ScrnInfoPtr pScrn)
{
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
return config->output[config->compat_output];
}
static _X_INLINE xf86CrtcPtr
xf86CompatCrtc(ScrnInfoPtr pScrn)
{
xf86OutputPtr compat_output = xf86CompatOutput(pScrn);
if (!compat_output)
return NULL;
return compat_output->crtc;
}
static _X_INLINE RRCrtcPtr
xf86CompatRRCrtc(ScrnInfoPtr pScrn)
{
xf86CrtcPtr compat_crtc = xf86CompatCrtc(pScrn);
if (!compat_crtc)
return NULL;
return compat_crtc->randr_crtc;
}
extern _X_EXPORT void
xf86CrtcConfigInit (ScrnInfoPtr scrn,
const xf86CrtcConfigFuncsRec *funcs);
extern _X_EXPORT void
xf86CrtcSetSizeRange (ScrnInfoPtr scrn,
int minWidth, int minHeight,
int maxWidth, int maxHeight);
extern _X_EXPORT xf86CrtcPtr
xf86CrtcCreate (ScrnInfoPtr scrn,
const xf86CrtcFuncsRec *funcs);
extern _X_EXPORT void
xf86CrtcDestroy (xf86CrtcPtr crtc);
extern _X_EXPORT Bool
xf86CrtcSetModeTransform (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
RRTransformPtr transform, int x, int y);
extern _X_EXPORT Bool
xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
int x, int y);
extern _X_EXPORT void
xf86CrtcSetOrigin (xf86CrtcPtr crtc, int x, int y);
extern _X_EXPORT Bool
xf86CrtcRotate (xf86CrtcPtr crtc);
extern _X_EXPORT void
xf86RotateDestroy (xf86CrtcPtr crtc);
extern _X_EXPORT void
xf86RotateFreeShadow(ScrnInfoPtr pScrn);
extern _X_EXPORT void
xf86RotateCloseScreen (ScreenPtr pScreen);
extern _X_EXPORT Bool
xf86CrtcInUse (xf86CrtcPtr crtc);
extern _X_EXPORT xf86OutputPtr
xf86OutputCreate (ScrnInfoPtr scrn,
const xf86OutputFuncsRec *funcs,
const char *name);
extern _X_EXPORT void
xf86OutputUseScreenMonitor (xf86OutputPtr output, Bool use_screen_monitor);
extern _X_EXPORT Bool
xf86OutputRename (xf86OutputPtr output, const char *name);
extern _X_EXPORT void
xf86OutputDestroy (xf86OutputPtr output);
extern _X_EXPORT void
xf86ProbeOutputModes (ScrnInfoPtr pScrn, int maxX, int maxY);
extern _X_EXPORT void
xf86SetScrnInfoModes (ScrnInfoPtr pScrn);
#ifdef RANDR_13_INTERFACE
# define ScreenInitRetType int
#else
# define ScreenInitRetType Bool
#endif
extern _X_EXPORT ScreenInitRetType
xf86CrtcScreenInit (ScreenPtr pScreen);
extern _X_EXPORT Bool
xf86InitialConfiguration (ScrnInfoPtr pScrn, Bool canGrow);
extern _X_EXPORT void
xf86DPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags);
extern _X_EXPORT Bool
xf86SaveScreen(ScreenPtr pScreen, int mode);
extern _X_EXPORT void
xf86DisableUnusedFunctions(ScrnInfoPtr pScrn);
extern _X_EXPORT DisplayModePtr
xf86OutputFindClosestMode (xf86OutputPtr output, DisplayModePtr desired);
extern _X_EXPORT Bool
xf86SetSingleMode (ScrnInfoPtr pScrn, DisplayModePtr desired, Rotation rotation);
extern _X_EXPORT void
xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon);
extern _X_EXPORT DisplayModePtr
xf86OutputGetEDIDModes (xf86OutputPtr output);
extern _X_EXPORT xf86MonPtr
xf86OutputGetEDID (xf86OutputPtr output, I2CBusPtr pDDCBus);
#ifdef XFreeXDGA
extern _X_EXPORT Bool
xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address);
_X_INTERNAL Bool
_xf86_di_dga_init_internal (ScreenPtr pScreen);
extern _X_EXPORT Bool
xf86DiDGAReInit (ScreenPtr pScreen);
#endif
_X_INTERNAL Bool
_xf86_di_dga_reinit_internal (ScreenPtr pScreen);
extern _X_EXPORT void
xf86CrtcSetScreenSubpixelOrder (ScreenPtr pScreen);
extern _X_EXPORT char *
xf86ConnectorGetName(xf86ConnectorType connector);
extern _X_EXPORT Bool
xf86SetDesiredModes (ScrnInfoPtr pScrn);
extern _X_EXPORT Bool
xf86_cursors_init (ScreenPtr screen, int max_width, int max_height, int flags);
extern _X_EXPORT void
xf86_reload_cursors (ScreenPtr screen);
extern _X_EXPORT void
xf86_show_cursors (ScrnInfoPtr scrn);
extern _X_EXPORT void
xf86_hide_cursors (ScrnInfoPtr scrn);
extern _X_EXPORT void
xf86_cursors_fini (ScreenPtr screen);
extern _X_EXPORT Bool
xf86_crtc_clip_video_helper(ScrnInfoPtr pScrn,
xf86CrtcPtr *crtc_ret,
xf86CrtcPtr desired_crtc,
BoxPtr dst,
INT32 *xa,
INT32 *xb,
INT32 *ya,
INT32 *yb,
RegionPtr reg,
INT32 width,
INT32 height);
extern _X_EXPORT xf86_crtc_notify_proc_ptr
xf86_wrap_crtc_notify (ScreenPtr pScreen, xf86_crtc_notify_proc_ptr new);
extern _X_EXPORT void
xf86_unwrap_crtc_notify(ScreenPtr pScreen, xf86_crtc_notify_proc_ptr old);
extern _X_EXPORT void
xf86_crtc_notify(ScreenPtr pScreen);
extern _X_EXPORT Bool
xf86_crtc_supports_gamma(ScrnInfoPtr pScrn);
#endif