2008-12-13 08:51:28 +01:00
|
|
|
/*
|
|
|
|
* Copyright 2004-2008 Luc Verhaegen <lverhaegen@novell.com>
|
|
|
|
* Copyright 2007, 2008 Matthias Hopf <mhopf@novell.com>
|
|
|
|
* Copyright 2007, 2008 Egbert Eich <eich@novell.com>
|
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
|
|
* to deal in the Software without restriction, including without limitation
|
|
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be included in
|
|
|
|
* all copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
|
|
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
|
|
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
|
|
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
|
|
* OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _RHD_CRTC_H
|
|
|
|
# define _RHD_CRTC_H
|
|
|
|
|
|
|
|
struct rhdFMTDither {
|
|
|
|
Bool LVDS24Bit;
|
|
|
|
Bool LVDSSpatialDither;
|
|
|
|
Bool LVDSTemporalDither;
|
|
|
|
int LVDSGreyLevel;
|
|
|
|
};
|
|
|
|
|
|
|
|
enum rhdCrtcScaleType {
|
|
|
|
RHD_CRTC_SCALE_TYPE_NONE, /* top left */
|
|
|
|
RHD_CRTC_SCALE_TYPE_CENTER, /* center of the actual mode */
|
|
|
|
RHD_CRTC_SCALE_TYPE_SCALE, /* scaled to fullscreen */
|
|
|
|
RHD_CRTC_SCALE_TYPE_SCALE_KEEP_ASPECT_RATIO /* scaled to fullscreen */
|
|
|
|
};
|
|
|
|
|
|
|
|
#define RHD_CRTC_SCALE_TYPE_DEFAULT RHD_CRTC_SCALE_TYPE_SCALE_KEEP_ASPECT_RATIO
|
|
|
|
|
|
|
|
|
|
|
|
struct rhdCrtc {
|
|
|
|
int scrnIndex;
|
|
|
|
|
|
|
|
char *Name;
|
|
|
|
#define RHD_CRTC_1 0
|
|
|
|
#define RHD_CRTC_2 1
|
|
|
|
int Id; /* for others to hook onto */
|
|
|
|
|
|
|
|
Bool Active;
|
|
|
|
|
|
|
|
int Offset; /* Current offset */
|
|
|
|
int bpp;
|
|
|
|
int Pitch;
|
|
|
|
int Width;
|
|
|
|
int Height;
|
|
|
|
int X, Y; /* Current frame */
|
|
|
|
int MinX, MinY, MaxX, MaxY; /* Panning Area: Max != 0 if used */
|
|
|
|
enum rhdCrtcScaleType ScaleType;
|
|
|
|
struct rhdPLL *PLL; /* Currently attached PLL: move to private */
|
|
|
|
struct rhdLUT *LUT; /* Currently attached LUT: move to private */
|
|
|
|
struct rhdCursor *Cursor; /* Fixed to the MODE engine */
|
|
|
|
|
|
|
|
DisplayModePtr CurrentMode;
|
|
|
|
DisplayModePtr Modes; /* Validated ones: Cycle through these */
|
|
|
|
|
|
|
|
DisplayModePtr ScaledToMode; /* usually a fixed mode from one of the monitors */
|
|
|
|
|
|
|
|
struct rhdCrtcFMTPrivate *FMTPriv; /* each CRTC subsystem may define this independently */
|
|
|
|
void (*FMTModeSet)(struct rhdCrtc *Crtc, struct rhdFMTDither *FMTDither);
|
|
|
|
void (*FMTSave)(struct rhdCrtc *Crtc);
|
|
|
|
void (*FMTRestore)(struct rhdCrtc *Crtc);
|
|
|
|
void (*FMTDestroy) (struct rhdCrtc *Crtc);
|
|
|
|
|
|
|
|
struct rhdCrtcFBPrivate *FBPriv; /* each CRTC subsystem may define this independently */
|
|
|
|
ModeStatus (*FBValid) (struct rhdCrtc *Crtc, CARD16 Width, CARD16 Height,
|
|
|
|
int bpp, CARD32 Offset, CARD32 Size, CARD32 *pPitch);
|
|
|
|
void (*FBSet) (struct rhdCrtc *Crtc, CARD16 Pitch, CARD16 Width,
|
|
|
|
CARD16 Height, int bpp, CARD32 Offset);
|
|
|
|
void (*FBSave) (struct rhdCrtc *Crtc);
|
|
|
|
void (*FBRestore) (struct rhdCrtc *Crtc);
|
|
|
|
void (*FBDestroy) (struct rhdCrtc *Crtc);
|
|
|
|
|
|
|
|
struct rhdCrtcModePrivate *ModePriv; /* each CRTC subsystem may define this independently */
|
|
|
|
ModeStatus (*ModeValid) (struct rhdCrtc *Crtc, DisplayModePtr Mode);
|
|
|
|
void (*ModeSet) (struct rhdCrtc *Crtc, DisplayModePtr Mode);
|
|
|
|
void (*ModeSave) (struct rhdCrtc *Crtc);
|
|
|
|
void (*ModeRestore) (struct rhdCrtc *Crtc);
|
|
|
|
void (*ModeDestroy) (struct rhdCrtc *Crtc);
|
|
|
|
|
|
|
|
struct rhdCrtcScalePrivate *ScalePriv; /* each CRTC subsystem may define this independently */
|
|
|
|
ModeStatus (*ScaleValid) (struct rhdCrtc *Crtc, enum rhdCrtcScaleType Type, DisplayModePtr Mode, DisplayModePtr ScaledToMode);
|
|
|
|
void (*ScaleSet) (struct rhdCrtc *Crtc, enum rhdCrtcScaleType Type, DisplayModePtr Mode, DisplayModePtr ScaledToMode);
|
|
|
|
void (*ScaleSave) (struct rhdCrtc *Crtc);
|
|
|
|
void (*ScaleRestore) (struct rhdCrtc *Crtc);
|
|
|
|
void (*ScaleDestroy) (struct rhdCrtc *Crtc);
|
|
|
|
|
|
|
|
void (*FrameSet) (struct rhdCrtc *Crtc, CARD16 X, CARD16 Y);
|
|
|
|
|
|
|
|
/* callback for pll setting lives here */
|
|
|
|
/* callback for lut setting lives here */
|
|
|
|
struct rhdCrtcLUTPrivate *LUTPriv; /* each CRTC subsystem may define this independently */
|
|
|
|
void (*LUTSelect) (struct rhdCrtc *Crtc, struct rhdLUT *LUT);
|
|
|
|
void (*LUTSave) (struct rhdCrtc *Crtc);
|
|
|
|
void (*LUTRestore) (struct rhdCrtc *Crtc);
|
|
|
|
void (*LUTDestroy) (struct rhdCrtc *Crtc);
|
|
|
|
|
2009-02-11 07:52:01 +01:00
|
|
|
Bool (*Power) (struct rhdCrtc *Crtc, int Power);
|
2008-12-13 08:51:28 +01:00
|
|
|
void (*Blank) (struct rhdCrtc *Crtc, Bool Blank);
|
|
|
|
};
|
|
|
|
|
|
|
|
Bool RHDCrtcsInit(RHDPtr rhdPtr);
|
|
|
|
void RHDAtomCrtcsInit(RHDPtr rhdPtr);
|
|
|
|
void RHDCrtcsDestroy(RHDPtr rhdPtr);
|
|
|
|
void RHDCrtcSave(struct rhdCrtc *Crtc);
|
|
|
|
void RHDCrtcRestore(struct rhdCrtc *Crtc);
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Calculate overscan values for scaler.
|
|
|
|
*/
|
|
|
|
struct rhdScalerOverscan
|
|
|
|
{
|
|
|
|
int OverscanTop;
|
|
|
|
int OverscanBottom;
|
|
|
|
int OverscanLeft;
|
|
|
|
int OverscanRight;
|
|
|
|
enum rhdCrtcScaleType Type;
|
|
|
|
};
|
|
|
|
|
|
|
|
extern struct rhdScalerOverscan
|
|
|
|
rhdCalculateOverscan(DisplayModePtr Mode,
|
|
|
|
DisplayModePtr ScaledToMode,
|
|
|
|
enum rhdCrtcScaleType Type);
|
|
|
|
|
|
|
|
|
|
|
|
#endif /* _RHD_CRTC_H */
|