040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Copyright © 2006 Keith Packard
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Permission to use, copy, modify, distribute, and sell this software and its
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * documentation for any purpose is hereby granted without fee, provided that
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * the above copyright notice appear in all copies and that both that copyright
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * notice and this permission notice appear in supporting documentation, and
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * that the name of the copyright holders not be used in advertising or
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * publicity pertaining to distribution of the software without specific,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * written prior permission. The copyright holders make no representations
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * about the suitability of this software for any purpose. It is provided "as
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * is" without express or implied warranty.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * OF THIS SOFTWARE.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#ifndef _XF86CRTC_H_
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define _XF86CRTC_H_
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#include <edid.h>
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#include "randrstr.h"
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#if XF86_MODES_RENAME
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#include "xf86Rename.h"
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#include "xf86Modes.h"
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#include "xf86Cursor.h"
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#include "xf86i2c.h"
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#include "damage.h"
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#include "picturestr.h"
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/* Compat definitions for older X Servers. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#ifndef M_T_PREFERRED
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define M_T_PREFERRED 0x08
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#ifndef M_T_DRIVER
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define M_T_DRIVER 0x40
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#ifndef M_T_USERPREF
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define M_T_USERPREF 0x80
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#ifndef HARDWARE_CURSOR_ARGB
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define HARDWARE_CURSOR_ARGB 0x00004000
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsynctypedef struct _xf86Crtc xf86CrtcRec, *xf86CrtcPtr;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsynctypedef struct _xf86Output xf86OutputRec, *xf86OutputPtr;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/* define a standard for connector types */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsynctypedef enum _xf86ConnectorType {
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorNone,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorVGA,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorDVI_I,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorDVI_D,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorDVI_A,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorComposite,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorSvideo,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorComponent,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorLFP,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorProprietary,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorHDMI,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConnectorDisplayPort,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync} xf86ConnectorType;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsynctypedef enum _xf86OutputStatus {
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86OutputStatusConnected,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86OutputStatusDisconnected,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86OutputStatusUnknown
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync} xf86OutputStatus;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsynctypedef struct _xf86CrtcFuncs {
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Turns the crtc on/off, or sets intermediate power levels if available.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Unsupported intermediate modes drop to the lower power setting. If the
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * mode is DPMSModeOff, the crtc must be disabled sufficiently for it to
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * be safe to call mode_set.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*dpms)(xf86CrtcPtr crtc,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int mode);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Saves the crtc's state for restoration on VT switch.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*save)(xf86CrtcPtr crtc);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Restore's the crtc's state at VT switch.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*restore)(xf86CrtcPtr crtc);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Lock CRTC prior to mode setting, mostly for DRI.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Returns whether unlock is needed
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*lock) (xf86CrtcPtr crtc);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Unlock CRTC after mode setting, mostly for DRI
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*unlock) (xf86CrtcPtr crtc);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback to adjust the mode to be set in the CRTC.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * This allows a CRTC to adjust the clock or even the entire set of
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * timings, which is used for panels with fixed timings or for
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * buses with clock limitations.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*mode_fixup)(xf86CrtcPtr crtc,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr mode,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr adjusted_mode);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Prepare CRTC for an upcoming mode set.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*prepare)(xf86CrtcPtr crtc);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback for setting up a video mode after fixups have been made.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*mode_set)(xf86CrtcPtr crtc,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr mode,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr adjusted_mode,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int x, int y);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Commit mode changes to a CRTC
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*commit)(xf86CrtcPtr crtc);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /* Set the color ramps for the CRTC to the given values. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*gamma_set)(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int size);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Allocate the shadow area, delay the pixmap creation until needed
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*shadow_allocate) (xf86CrtcPtr crtc, int width, int height);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Create shadow pixmap for rotation support
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync PixmapPtr
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*shadow_create) (xf86CrtcPtr crtc, void *data, int width, int height);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Destroy shadow pixmap
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*shadow_destroy) (xf86CrtcPtr crtc, PixmapPtr pPixmap, void *data);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Set cursor colors
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*set_cursor_colors) (xf86CrtcPtr crtc, int bg, int fg);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Set cursor position
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*set_cursor_position) (xf86CrtcPtr crtc, int x, int y);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Show cursor
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*show_cursor) (xf86CrtcPtr crtc);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Hide cursor
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*hide_cursor) (xf86CrtcPtr crtc);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Load monochrome image
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*load_cursor_image) (xf86CrtcPtr crtc, CARD8 *image);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Load ARGB image
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*load_cursor_argb) (xf86CrtcPtr crtc, CARD32 *image);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Clean up driver-specific bits of the crtc
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*destroy) (xf86CrtcPtr crtc);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Less fine-grained mode setting entry point for kernel modesetting
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*set_mode_major)(xf86CrtcPtr crtc, DisplayModePtr mode,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Rotation rotation, int x, int y);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync} xf86CrtcFuncsRec, *xf86CrtcFuncsPtr;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstruct _xf86Crtc {
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Associated ScrnInfo
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ScrnInfoPtr scrn;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Active state of this CRTC
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Set when this CRTC is driving one or more outputs
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool enabled;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Active mode
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * This reflects the mode as set in the CRTC currently
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * It will be cleared when the VT is not active or
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * during server startup
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModeRec mode;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Rotation rotation;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync PixmapPtr rotatedPixmap;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void *rotatedData;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Position on screen
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Locates this CRTC within the frame buffer
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int x, y;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Desired mode
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * This is set to the requested mode, independent of
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * whether the VT is active. In particular, it receives
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * the startup configured mode and saves the active mode
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * on VT switch.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModeRec desiredMode;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Rotation desiredRotation;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int desiredX, desiredY;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** crtc-specific functions */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync const xf86CrtcFuncsRec *funcs;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Driver private
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Holds driver-private information
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void *driver_private;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#ifdef RANDR_12_INTERFACE
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * RandR crtc
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * When RandR 1.2 is available, this
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * points at the associated crtc object
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync RRCrtcPtr randr_crtc;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void *randr_crtc;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Current cursor is ARGB
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool cursor_argb;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Track whether cursor is within CRTC range
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool cursor_in_range;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Track state of cursor associated with this CRTC
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool cursor_shown;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Current transformation matrix
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync PictTransform crtc_to_framebuffer;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync PictTransform framebuffer_to_crtc;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool transform_in_use;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Bounding box in screen space
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync BoxRec bounds;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync};
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsynctypedef struct _xf86OutputFuncs {
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Called to allow the output a chance to create properties after the
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * RandR objects have been created.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*create_resources)(xf86OutputPtr output);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Turns the output on/off, or sets intermediate power levels if available.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Unsupported intermediate modes drop to the lower power setting. If the
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * mode is DPMSModeOff, the output must be disabled, as the DPLL may be
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * disabled afterwards.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*dpms)(xf86OutputPtr output,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int mode);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Saves the output's state for restoration on VT switch.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*save)(xf86OutputPtr output);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Restore's the output's state at VT switch.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*restore)(xf86OutputPtr output);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback for testing a video mode for a given output.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * This function should only check for cases where a mode can't be supported
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * on the output specifically, and not represent generic CRTC limitations.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * \return MODE_OK if the mode is valid, or another MODE_* otherwise.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*mode_valid)(xf86OutputPtr output,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr pMode);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback to adjust the mode to be set in the CRTC.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * This allows an output to adjust the clock or even the entire set of
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * timings, which is used for panels with fixed timings or for
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * buses with clock limitations.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*mode_fixup)(xf86OutputPtr output,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr mode,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr adjusted_mode);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback for preparing mode changes on an output
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*prepare)(xf86OutputPtr output);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback for committing mode changes on an output
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*commit)(xf86OutputPtr output);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback for setting up a video mode after fixups have been made.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * This is only called while the output is disabled. The dpms callback
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * must be all that's necessary for the output, to turn the output on
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * after this function is called.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*mode_set)(xf86OutputPtr output,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr mode,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr adjusted_mode);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Probe for a connected output, and return detect_status.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync xf86OutputStatus
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*detect)(xf86OutputPtr output);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Query the device for the modes it provides.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * This function may also update MonInfo, mm_width, and mm_height.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * \return singly-linked list of modes or NULL if no modes found.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*get_modes)(xf86OutputPtr output);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#ifdef RANDR_12_INTERFACE
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback when an output's property has changed.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*set_property)(xf86OutputPtr output,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Atom property,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync RRPropertyValuePtr value);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Clean up driver-specific bits of the output
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*destroy) (xf86OutputPtr output);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync} xf86OutputFuncsRec, *xf86OutputFuncsPtr;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncstruct _xf86Output {
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Associated ScrnInfo
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ScrnInfoPtr scrn;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Currently connected crtc (if any)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * If this output is not in use, this field will be NULL.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync xf86CrtcPtr crtc;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Possible CRTCs for this output as a mask of crtc indices
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CARD32 possible_crtcs;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Possible outputs to share the same CRTC as a mask of output indices
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CARD32 possible_clones;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Whether this output can support interlaced modes
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool interlaceAllowed;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Whether this output can support double scan modes
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool doubleScanAllowed;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * List of available modes on this output.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * This should be the list from get_modes(), plus perhaps additional
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * compatible modes added later.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr probed_modes;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Options parsed from the related monitor section
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync OptionInfoPtr options;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Configured monitor section
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync XF86ConfMonitorPtr conf_monitor;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Desired initial position
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int initial_x, initial_y;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Desired initial rotation
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Rotation initial_rotation;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Current connection status
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * This indicates whether a monitor is known to be connected
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * to this output or not, or whether there is no way to tell
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync xf86OutputStatus status;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** EDID monitor information */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync xf86MonPtr MonInfo;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** subpixel order */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int subpixel_order;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** Physical size of the currently attached output device. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int mm_width, mm_height;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** Output name */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync char *name;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** output-specific functions */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync const xf86OutputFuncsRec *funcs;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** driver private information */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void *driver_private;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** Whether to use the old per-screen Monitor config section */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool use_screen_monitor;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#ifdef RANDR_12_INTERFACE
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * RandR 1.2 output structure.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * When RandR 1.2 is available, this points at the associated
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * RandR output structure and is created when this output is created
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync RROutputPtr randr_output;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#else
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync void *randr_output;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync};
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsynctypedef struct _xf86CrtcConfigFuncs {
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Requests that the driver resize the screen.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * The driver is responsible for updating scrn->virtualX and scrn->virtualY.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * If the requested size cannot be set, the driver should leave those values
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * alone and return FALSE.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * A naive driver that cannot reallocate the screen may simply change
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * virtual[XY]. A more advanced driver will want to also change the
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * devPrivate.ptr and devKind of the screen pixmap, update any offscreen
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * pixmaps it may have moved, and change pScrn->displayWidth.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*resize)(ScrnInfoPtr scrn,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int width,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int height);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync} xf86CrtcConfigFuncsRec, *xf86CrtcConfigFuncsPtr;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsynctypedef struct _xf86CrtcConfig {
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int num_output;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync xf86OutputPtr *output;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * compat_output is used whenever we deal
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * with legacy code that only understands a single
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * output. pScrn->modes will be loaded from this output,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * adjust frame will whack this output, etc.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int compat_output;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int num_crtc;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync xf86CrtcPtr *crtc;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int minWidth, minHeight;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int maxWidth, maxHeight;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /* For crtc-based rotation */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DamagePtr rotation_damage;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool rotation_damage_registered;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /* DGA */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync unsigned int dga_flags;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync unsigned long dga_address;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DGAModePtr dga_modes;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int dga_nmode;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int dga_width, dga_height, dga_stride;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync DisplayModePtr dga_save_mode;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync const xf86CrtcConfigFuncsRec *funcs;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CreateScreenResourcesProcPtr CreateScreenResources;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CloseScreenProcPtr CloseScreen;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /* Cursor information */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync xf86CursorInfoPtr cursor_info;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CursorPtr cursor;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CARD8 *cursor_image;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool cursor_on;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CARD32 cursor_fg, cursor_bg;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Options parsed from the related device section
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync OptionInfoPtr options;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync Bool debug_modes;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /* wrap screen BlockHandler for rotation */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync ScreenBlockHandlerProcPtr BlockHandler;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync} xf86CrtcConfigRec, *xf86CrtcConfigPtr;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncextern int xf86CrtcConfigPrivateIndex;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define XF86_CRTC_CONFIG_PTR(p) ((xf86CrtcConfigPtr) ((p)->privates[xf86CrtcConfigPrivateIndex].ptr))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Initialize xf86CrtcConfig structure
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcConfigInit (ScrnInfoPtr scrn,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync const xf86CrtcConfigFuncsRec *funcs);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcSetSizeRange (ScrnInfoPtr scrn,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int minWidth, int minHeight,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int maxWidth, int maxHeight);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Crtc functions
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcPtr
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcCreate (ScrnInfoPtr scrn,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync const xf86CrtcFuncsRec *funcs);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcDestroy (xf86CrtcPtr crtc);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Sets the given video mode on the given crtc
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int x, int y);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Assign crtc rotation during mode set
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcRotate (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Clean up rotation during CloseScreen
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86RotateCloseScreen (ScreenPtr pScreen);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Return whether any output is assigned to the crtc
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcInUse (xf86CrtcPtr crtc);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Output functions
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputPtr
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputCreate (ScrnInfoPtr scrn,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync const xf86OutputFuncsRec *funcs,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync const char *name);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputUseScreenMonitor (xf86OutputPtr output, Bool use_screen_monitor);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputRename (xf86OutputPtr output, const char *name);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputDestroy (xf86OutputPtr output);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86ProbeOutputModes (ScrnInfoPtr pScrn, int maxX, int maxY);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86SetScrnInfoModes (ScrnInfoPtr pScrn);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcScreenInit (ScreenPtr pScreen);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86InitialConfiguration (ScrnInfoPtr pScrn, Bool canGrow);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86DPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86SaveScreen(ScreenPtr pScreen, int mode);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86DisableUnusedFunctions(ScrnInfoPtr pScrn);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncDisplayModePtr
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputFindClosestMode (xf86OutputPtr output, DisplayModePtr desired);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86SetSingleMode (ScrnInfoPtr pScrn, DisplayModePtr desired, Rotation rotation);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Set the EDID information for the specified output
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Return the list of modes supported by the EDID information
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * stored in 'output'
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncDisplayModePtr
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputGetEDIDModes (xf86OutputPtr output);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86MonPtr
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputGetEDID (xf86OutputPtr output, I2CBusPtr pDDCBus);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Initialize dga for this screen
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Re-initialize dga for this screen (as when the set of modes changes)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86DiDGAReInit (ScreenPtr pScreen);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Set the subpixel order reported for the screen using
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * the information from the outputs
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcSetScreenSubpixelOrder (ScreenPtr pScreen);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Get a standard string name for a connector type
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncchar *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86ConnectorGetName(xf86ConnectorType connector);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Using the desired mode information in each crtc, set
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * modes (used in EnterVT functions, or at server startup)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86SetDesiredModes (ScrnInfoPtr pScrn);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Initialize the CRTC-based cursor code. CRTC function vectors must
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * contain relevant cursor setting functions.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Driver should call this from ScreenInit function
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86_cursors_init (ScreenPtr screen, int max_width, int max_height, int flags);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Called when anything on the screen is reconfigured.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Reloads cursor images as needed, then adjusts cursor positions.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync *
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Driver should call this from crtc commit function.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86_reload_cursors (ScreenPtr screen);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Called from EnterVT to turn the cursors back on
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86_show_cursors (ScrnInfoPtr scrn);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Called by the driver to turn cursors off
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86_hide_cursors (ScrnInfoPtr scrn);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/**
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Clean up CRTC-based cursor code. Driver must call this at CloseScreen time.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncvoid
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86_cursors_fini (ScreenPtr screen);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/*
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * For overlay video, compute the relevant CRTC and
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * clip video to that.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * wraps xf86XVClipVideoHelper()
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncBool
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86_crtc_clip_video_helper(ScrnInfoPtr pScrn,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync xf86CrtcPtr *crtc_ret,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync xf86CrtcPtr desired_crtc,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync BoxPtr dst,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync INT32 *xa,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync INT32 *xb,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync INT32 *ya,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync INT32 *yb,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync RegionPtr reg,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync INT32 width,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync INT32 height);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* _XF86CRTC_H_ */