040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Copyright © 2006 Keith Packard
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 * 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/* Compat definitions for older X Servers. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsynctypedef struct _xf86Output xf86OutputRec, *xf86OutputPtr;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync/* define a standard for connector types */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Turns the crtc on/off, or sets intermediate power levels if available.
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 * Saves the crtc's state for restoration on VT switch.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Restore's the crtc's state at VT switch.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Lock CRTC prior to mode setting, mostly for DRI.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Returns whether unlock is needed
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Unlock CRTC after mode setting, mostly for DRI
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback to adjust the mode to be set in the CRTC.
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 * Prepare CRTC for an upcoming mode set.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback for setting up a video mode after fixups have been made.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int x, int y);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Commit mode changes to a CRTC
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /* Set the color ramps for the CRTC to the given values. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*gamma_set)(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Allocate the shadow area, delay the pixmap creation until needed
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*shadow_allocate) (xf86CrtcPtr crtc, int width, int height);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Create shadow pixmap for rotation support
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*shadow_create) (xf86CrtcPtr crtc, void *data, int width, int height);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Destroy shadow pixmap
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*shadow_destroy) (xf86CrtcPtr crtc, PixmapPtr pPixmap, void *data);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Set cursor colors
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*set_cursor_colors) (xf86CrtcPtr crtc, int bg, int fg);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Set cursor position
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*set_cursor_position) (xf86CrtcPtr crtc, int x, int y);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Show cursor
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Hide cursor
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Load monochrome image
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*load_cursor_image) (xf86CrtcPtr crtc, CARD8 *image);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Load ARGB image
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*load_cursor_argb) (xf86CrtcPtr crtc, CARD32 *image);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Clean up driver-specific bits of the crtc
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Less fine-grained mode setting entry point for kernel modesetting
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync (*set_mode_major)(xf86CrtcPtr crtc, DisplayModePtr mode,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Associated ScrnInfo
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Active state of this CRTC
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Set when this CRTC is driving one or more outputs
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Active mode
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 * Position on screen
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Locates this CRTC within the frame buffer
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Desired mode
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 /** crtc-specific functions */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Driver private
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Holds driver-private information
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * RandR crtc
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * When RandR 1.2 is available, this
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * points at the associated crtc object
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Current cursor is ARGB
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Track whether cursor is within CRTC range
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Track state of cursor associated with this CRTC
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Current transformation matrix
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Bounding box in screen space
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Called to allow the output a chance to create properties after the
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * RandR objects have been created.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Turns the output on/off, or sets intermediate power levels if available.
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 * Saves the output's state for restoration on VT switch.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Restore's the output's state at VT switch.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback for testing a video mode for a given output.
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 * \return MODE_OK if the mode is valid, or another MODE_* otherwise.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback to adjust the mode to be set in the CRTC.
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 * Callback for preparing mode changes on an output
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback for committing mode changes on an output
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback for setting up a video mode after fixups have been made.
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 * Probe for a connected output, and return detect_status.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Query the device for the modes it provides.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * This function may also update MonInfo, mm_width, and mm_height.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * \return singly-linked list of modes or NULL if no modes found.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Callback when an output's property has changed.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Clean up driver-specific bits of the output
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Associated ScrnInfo
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Currently connected crtc (if any)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * If this output is not in use, this field will be NULL.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Possible CRTCs for this output as a mask of crtc indices
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Possible outputs to share the same CRTC as a mask of output indices
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Whether this output can support interlaced modes
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Whether this output can support double scan modes
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * List of available modes on this output.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * This should be the list from get_modes(), plus perhaps additional
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * compatible modes added later.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Options parsed from the related monitor section
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Configured monitor section
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Desired initial position
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Desired initial rotation
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Current connection status
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 /** EDID monitor information */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** subpixel order */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** Physical size of the currently attached output device. */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** Output name */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** output-specific functions */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** driver private information */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /** Whether to use the old per-screen Monitor config section */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * RandR 1.2 output structure.
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 * Requests that the driver resize the screen.
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 * 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 * 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 /* For crtc-based rotation */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync CreateScreenResourcesProcPtr CreateScreenResources;
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /* Cursor information */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Options parsed from the related device section
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync /* wrap screen BlockHandler for rotation */
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#define XF86_CRTC_CONFIG_PTR(p) ((xf86CrtcConfigPtr) ((p)->privates[xf86CrtcConfigPrivateIndex].ptr))
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Initialize xf86CrtcConfig structure
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Crtc functions
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Sets the given video mode on the given crtc
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync int x, int y);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Assign crtc rotation during mode set
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86CrtcRotate (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Clean up rotation during CloseScreen
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Return whether any output is assigned to the crtc
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Output functions
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync const char *name);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputUseScreenMonitor (xf86OutputPtr output, Bool use_screen_monitor);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputRename (xf86OutputPtr output, const char *name);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86ProbeOutputModes (ScrnInfoPtr pScrn, int maxX, int maxY);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86InitialConfiguration (ScrnInfoPtr pScrn, Bool canGrow);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86DPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputFindClosestMode (xf86OutputPtr output, DisplayModePtr desired);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86SetSingleMode (ScrnInfoPtr pScrn, DisplayModePtr desired, Rotation rotation);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Set the EDID information for the specified output
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Return the list of modes supported by the EDID information
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * stored in 'output'
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86OutputGetEDID (xf86OutputPtr output, I2CBusPtr pDDCBus);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Initialize dga for this screen
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Re-initialize dga for this screen (as when the set of modes changes)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Set the subpixel order reported for the screen using
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * the information from the outputs
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Get a standard string name for a connector type
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Using the desired mode information in each crtc, set
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * modes (used in EnterVT functions, or at server startup)
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Initialize the CRTC-based cursor code. CRTC function vectors must
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * contain relevant cursor setting functions.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Driver should call this from ScreenInit function
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsyncxf86_cursors_init (ScreenPtr screen, int max_width, int max_height, int flags);
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Called when anything on the screen is reconfigured.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Reloads cursor images as needed, then adjusts cursor positions.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Driver should call this from crtc commit function.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Called from EnterVT to turn the cursors back on
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Called by the driver to turn cursors off
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * Clean up CRTC-based cursor code. Driver must call this at CloseScreen time.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * For overlay video, compute the relevant CRTC and
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * clip video to that.
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync * wraps xf86XVClipVideoHelper()
040abec2534dadc53ebc8fa378ef03f4feecb7dbvboxsync#endif /* _XF86CRTC_H_ */