Imported Upstream version 1.15.1
[deb_xorg-server.git] / hw / xfree86 / modes / xf86Crtc.h
CommitLineData
a09e091a
JB
1/*
2 * Copyright © 2006 Keith Packard
3 * Copyright © 2011 Aaron Plattner
4 *
5 * Permission to use, copy, modify, distribute, and sell this software and its
6 * documentation for any purpose is hereby granted without fee, provided that
7 * the above copyright notice appear in all copies and that both that copyright
8 * notice and this permission notice appear in supporting documentation, and
9 * that the name of the copyright holders not be used in advertising or
10 * publicity pertaining to distribution of the software without specific,
11 * written prior permission. The copyright holders make no representations
12 * about the suitability of this software for any purpose. It is provided "as
13 * is" without express or implied warranty.
14 *
15 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
16 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
17 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
18 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
19 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
20 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
21 * OF THIS SOFTWARE.
22 */
23#ifndef _XF86CRTC_H_
24#define _XF86CRTC_H_
25
26#include <edid.h>
27#include "randrstr.h"
28#include "xf86Modes.h"
29#include "xf86Cursor.h"
30#include "xf86i2c.h"
31#include "damage.h"
32#include "picturestr.h"
33
34/* Compat definitions for older X Servers. */
35#ifndef M_T_PREFERRED
36#define M_T_PREFERRED 0x08
37#endif
38#ifndef M_T_DRIVER
39#define M_T_DRIVER 0x40
40#endif
41#ifndef M_T_USERPREF
42#define M_T_USERPREF 0x80
43#endif
44#ifndef HARDWARE_CURSOR_ARGB
45#define HARDWARE_CURSOR_ARGB 0x00004000
46#endif
47
48typedef struct _xf86Crtc xf86CrtcRec, *xf86CrtcPtr;
49typedef struct _xf86Output xf86OutputRec, *xf86OutputPtr;
50
51/* define a standard for connector types */
52typedef enum _xf86ConnectorType {
53 XF86ConnectorNone,
54 XF86ConnectorVGA,
55 XF86ConnectorDVI_I,
56 XF86ConnectorDVI_D,
57 XF86ConnectorDVI_A,
58 XF86ConnectorComposite,
59 XF86ConnectorSvideo,
60 XF86ConnectorComponent,
61 XF86ConnectorLFP,
62 XF86ConnectorProprietary,
63 XF86ConnectorHDMI,
64 XF86ConnectorDisplayPort,
65} xf86ConnectorType;
66
67typedef enum _xf86OutputStatus {
68 XF86OutputStatusConnected,
69 XF86OutputStatusDisconnected,
70 XF86OutputStatusUnknown
71} xf86OutputStatus;
72
73typedef struct _xf86CrtcFuncs {
74 /**
75 * Turns the crtc on/off, or sets intermediate power levels if available.
76 *
77 * Unsupported intermediate modes drop to the lower power setting. If the
78 * mode is DPMSModeOff, the crtc must be disabled sufficiently for it to
79 * be safe to call mode_set.
80 */
81 void
82 (*dpms) (xf86CrtcPtr crtc, int mode);
83
84 /**
85 * Saves the crtc's state for restoration on VT switch.
86 */
87 void
88 (*save) (xf86CrtcPtr crtc);
89
90 /**
91 * Restore's the crtc's state at VT switch.
92 */
93 void
94 (*restore) (xf86CrtcPtr crtc);
95
96 /**
97 * Lock CRTC prior to mode setting, mostly for DRI.
98 * Returns whether unlock is needed
99 */
100 Bool
101 (*lock) (xf86CrtcPtr crtc);
102
103 /**
104 * Unlock CRTC after mode setting, mostly for DRI
105 */
106 void
107 (*unlock) (xf86CrtcPtr crtc);
108
109 /**
110 * Callback to adjust the mode to be set in the CRTC.
111 *
112 * This allows a CRTC to adjust the clock or even the entire set of
113 * timings, which is used for panels with fixed timings or for
114 * buses with clock limitations.
115 */
116 Bool
117 (*mode_fixup) (xf86CrtcPtr crtc,
118 DisplayModePtr mode, DisplayModePtr adjusted_mode);
119
120 /**
121 * Prepare CRTC for an upcoming mode set.
122 */
123 void
124 (*prepare) (xf86CrtcPtr crtc);
125
126 /**
127 * Callback for setting up a video mode after fixups have been made.
128 */
129 void
130 (*mode_set) (xf86CrtcPtr crtc,
131 DisplayModePtr mode,
132 DisplayModePtr adjusted_mode, int x, int y);
133
134 /**
135 * Commit mode changes to a CRTC
136 */
137 void
138 (*commit) (xf86CrtcPtr crtc);
139
140 /* Set the color ramps for the CRTC to the given values. */
141 void
142 (*gamma_set) (xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue,
143 int size);
144
145 /**
146 * Allocate the shadow area, delay the pixmap creation until needed
147 */
148 void *(*shadow_allocate) (xf86CrtcPtr crtc, int width, int height);
149
150 /**
151 * Create shadow pixmap for rotation support
152 */
153 PixmapPtr
154 (*shadow_create) (xf86CrtcPtr crtc, void *data, int width, int height);
155
156 /**
157 * Destroy shadow pixmap
158 */
159 void
160 (*shadow_destroy) (xf86CrtcPtr crtc, PixmapPtr pPixmap, void *data);
161
162 /**
163 * Set cursor colors
164 */
165 void
166 (*set_cursor_colors) (xf86CrtcPtr crtc, int bg, int fg);
167
168 /**
169 * Set cursor position
170 */
171 void
172 (*set_cursor_position) (xf86CrtcPtr crtc, int x, int y);
173
174 /**
175 * Show cursor
176 */
177 void
178 (*show_cursor) (xf86CrtcPtr crtc);
179
180 /**
181 * Hide cursor
182 */
183 void
184 (*hide_cursor) (xf86CrtcPtr crtc);
185
186 /**
187 * Load monochrome image
188 */
189 void
190 (*load_cursor_image) (xf86CrtcPtr crtc, CARD8 *image);
191
192 /**
193 * Load ARGB image
194 */
195 void
196 (*load_cursor_argb) (xf86CrtcPtr crtc, CARD32 *image);
197
198 /**
199 * Clean up driver-specific bits of the crtc
200 */
201 void
202 (*destroy) (xf86CrtcPtr crtc);
203
204 /**
205 * Less fine-grained mode setting entry point for kernel modesetting
206 */
207 Bool
208 (*set_mode_major) (xf86CrtcPtr crtc, DisplayModePtr mode,
209 Rotation rotation, int x, int y);
210
211 /**
212 * Callback for panning. Doesn't change the mode.
213 * Added in ABI version 2
214 */
215 void
216 (*set_origin) (xf86CrtcPtr crtc, int x, int y);
217
218 /**
219 */
220 Bool
221 (*set_scanout_pixmap)(xf86CrtcPtr crtc, PixmapPtr pixmap);
222
223} xf86CrtcFuncsRec, *xf86CrtcFuncsPtr;
224
225#define XF86_CRTC_VERSION 5
226
227struct _xf86Crtc {
228 /**
229 * ABI versioning
230 */
231 int version;
232
233 /**
234 * Associated ScrnInfo
235 */
236 ScrnInfoPtr scrn;
237
238 /**
239 * Desired state of this CRTC
240 *
241 * Set when this CRTC should be driving one or more outputs
242 */
243 Bool enabled;
244
245 /**
246 * Active mode
247 *
248 * This reflects the mode as set in the CRTC currently
249 * It will be cleared when the VT is not active or
250 * during server startup
251 */
252 DisplayModeRec mode;
253 Rotation rotation;
254 PixmapPtr rotatedPixmap;
255 void *rotatedData;
256
257 /**
258 * Position on screen
259 *
260 * Locates this CRTC within the frame buffer
261 */
262 int x, y;
263
264 /**
265 * Desired mode
266 *
267 * This is set to the requested mode, independent of
268 * whether the VT is active. In particular, it receives
269 * the startup configured mode and saves the active mode
270 * on VT switch.
271 */
272 DisplayModeRec desiredMode;
273 Rotation desiredRotation;
274 int desiredX, desiredY;
275
276 /** crtc-specific functions */
277 const xf86CrtcFuncsRec *funcs;
278
279 /**
280 * Driver private
281 *
282 * Holds driver-private information
283 */
284 void *driver_private;
285
286#ifdef RANDR_12_INTERFACE
287 /**
288 * RandR crtc
289 *
290 * When RandR 1.2 is available, this
291 * points at the associated crtc object
292 */
293 RRCrtcPtr randr_crtc;
294#else
295 void *randr_crtc;
296#endif
297
298 /**
299 * Current cursor is ARGB
300 */
301 Bool cursor_argb;
302 /**
303 * Track whether cursor is within CRTC range
304 */
305 Bool cursor_in_range;
306 /**
307 * Track state of cursor associated with this CRTC
308 */
309 Bool cursor_shown;
310
311 /**
312 * Current transformation matrix
313 */
314 PictTransform crtc_to_framebuffer;
315 /* framebuffer_to_crtc was removed in ABI 2 */
316 struct pict_f_transform f_crtc_to_framebuffer; /* ABI 2 */
317 struct pict_f_transform f_framebuffer_to_crtc; /* ABI 2 */
318 PictFilterPtr filter; /* ABI 2 */
319 xFixed *params; /* ABI 2 */
320 int nparams; /* ABI 2 */
321 int filter_width; /* ABI 2 */
322 int filter_height; /* ABI 2 */
323 Bool transform_in_use;
324 RRTransformRec transform; /* ABI 2 */
325 Bool transformPresent; /* ABI 2 */
326 RRTransformRec desiredTransform; /* ABI 2 */
327 Bool desiredTransformPresent; /* ABI 2 */
328 /**
329 * Bounding box in screen space
330 */
331 BoxRec bounds;
332 /**
333 * Panning:
334 * TotalArea: total panning area, larger than CRTC's size
335 * TrackingArea: Area of the pointer for which the CRTC is panned
336 * border: Borders of the displayed CRTC area which induces panning if the pointer reaches them
337 * Added in ABI version 2
338 */
339 BoxRec panningTotalArea;
340 BoxRec panningTrackingArea;
341 INT16 panningBorder[4];
342
343 /**
344 * Current gamma, especially useful after initial config.
345 * Added in ABI version 3
346 */
347 CARD16 *gamma_red;
348 CARD16 *gamma_green;
349 CARD16 *gamma_blue;
350 int gamma_size;
351
352 /**
353 * Actual state of this CRTC
354 *
355 * Set to TRUE after modesetting, set to FALSE if no outputs are connected
356 * Added in ABI version 3
357 */
358 Bool active;
359 /**
360 * Clear the shadow
361 */
362 Bool shadowClear;
363
364 /**
365 * Indicates that the driver is handling the transform, so the shadow
366 * surface should be disabled. The driver writes this field before calling
367 * xf86CrtcRotate to indicate that it is handling the transform (including
368 * rotation and reflection).
369 *
370 * Setting this flag also causes the server to stop adjusting the cursor
371 * image and position.
372 *
373 * Added in ABI version 4
374 */
375 Bool driverIsPerformingTransform;
376
377 /* Added in ABI version 5
378 */
379 PixmapPtr current_scanout;
380};
381
382typedef struct _xf86OutputFuncs {
383 /**
384 * Called to allow the output a chance to create properties after the
385 * RandR objects have been created.
386 */
387 void
388 (*create_resources) (xf86OutputPtr output);
389
390 /**
391 * Turns the output on/off, or sets intermediate power levels if available.
392 *
393 * Unsupported intermediate modes drop to the lower power setting. If the
394 * mode is DPMSModeOff, the output must be disabled, as the DPLL may be
395 * disabled afterwards.
396 */
397 void
398 (*dpms) (xf86OutputPtr output, int mode);
399
400 /**
401 * Saves the output's state for restoration on VT switch.
402 */
403 void
404 (*save) (xf86OutputPtr output);
405
406 /**
407 * Restore's the output's state at VT switch.
408 */
409 void
410 (*restore) (xf86OutputPtr output);
411
412 /**
413 * Callback for testing a video mode for a given output.
414 *
415 * This function should only check for cases where a mode can't be supported
416 * on the output specifically, and not represent generic CRTC limitations.
417 *
418 * \return MODE_OK if the mode is valid, or another MODE_* otherwise.
419 */
420 int
421 (*mode_valid) (xf86OutputPtr output, DisplayModePtr pMode);
422
423 /**
424 * Callback to adjust the mode to be set in the CRTC.
425 *
426 * This allows an output to adjust the clock or even the entire set of
427 * timings, which is used for panels with fixed timings or for
428 * buses with clock limitations.
429 */
430 Bool
431 (*mode_fixup) (xf86OutputPtr output,
432 DisplayModePtr mode, DisplayModePtr adjusted_mode);
433
434 /**
435 * Callback for preparing mode changes on an output
436 */
437 void
438 (*prepare) (xf86OutputPtr output);
439
440 /**
441 * Callback for committing mode changes on an output
442 */
443 void
444 (*commit) (xf86OutputPtr output);
445
446 /**
447 * Callback for setting up a video mode after fixups have been made.
448 *
449 * This is only called while the output is disabled. The dpms callback
450 * must be all that's necessary for the output, to turn the output on
451 * after this function is called.
452 */
453 void
454 (*mode_set) (xf86OutputPtr output,
455 DisplayModePtr mode, DisplayModePtr adjusted_mode);
456
457 /**
458 * Probe for a connected output, and return detect_status.
459 */
460 xf86OutputStatus(*detect) (xf86OutputPtr output);
461
462 /**
463 * Query the device for the modes it provides.
464 *
465 * This function may also update MonInfo, mm_width, and mm_height.
466 *
467 * \return singly-linked list of modes or NULL if no modes found.
468 */
469 DisplayModePtr(*get_modes) (xf86OutputPtr output);
470
471#ifdef RANDR_12_INTERFACE
472 /**
473 * Callback when an output's property has changed.
474 */
475 Bool
476 (*set_property) (xf86OutputPtr output,
477 Atom property, RRPropertyValuePtr value);
478#endif
479#ifdef RANDR_13_INTERFACE
480 /**
481 * Callback to get an updated property value
482 */
483 Bool
484 (*get_property) (xf86OutputPtr output, Atom property);
485#endif
486#ifdef RANDR_GET_CRTC_INTERFACE
487 /**
488 * Callback to get current CRTC for a given output
489 */
490 xf86CrtcPtr(*get_crtc) (xf86OutputPtr output);
491#endif
492 /**
493 * Clean up driver-specific bits of the output
494 */
495 void
496 (*destroy) (xf86OutputPtr output);
497} xf86OutputFuncsRec, *xf86OutputFuncsPtr;
498
499#define XF86_OUTPUT_VERSION 2
500
501struct _xf86Output {
502 /**
503 * ABI versioning
504 */
505 int version;
506
507 /**
508 * Associated ScrnInfo
509 */
510 ScrnInfoPtr scrn;
511
512 /**
513 * Currently connected crtc (if any)
514 *
515 * If this output is not in use, this field will be NULL.
516 */
517 xf86CrtcPtr crtc;
518
519 /**
520 * Possible CRTCs for this output as a mask of crtc indices
521 */
522 CARD32 possible_crtcs;
523
524 /**
525 * Possible outputs to share the same CRTC as a mask of output indices
526 */
527 CARD32 possible_clones;
528
529 /**
530 * Whether this output can support interlaced modes
531 */
532 Bool interlaceAllowed;
533
534 /**
535 * Whether this output can support double scan modes
536 */
537 Bool doubleScanAllowed;
538
539 /**
540 * List of available modes on this output.
541 *
542 * This should be the list from get_modes(), plus perhaps additional
543 * compatible modes added later.
544 */
545 DisplayModePtr probed_modes;
546
547 /**
548 * Options parsed from the related monitor section
549 */
550 OptionInfoPtr options;
551
552 /**
553 * Configured monitor section
554 */
555 XF86ConfMonitorPtr conf_monitor;
556
557 /**
558 * Desired initial position
559 */
560 int initial_x, initial_y;
561
562 /**
563 * Desired initial rotation
564 */
565 Rotation initial_rotation;
566
567 /**
568 * Current connection status
569 *
570 * This indicates whether a monitor is known to be connected
571 * to this output or not, or whether there is no way to tell
572 */
573 xf86OutputStatus status;
574
575 /** EDID monitor information */
576 xf86MonPtr MonInfo;
577
578 /** subpixel order */
579 int subpixel_order;
580
581 /** Physical size of the currently attached output device. */
582 int mm_width, mm_height;
583
584 /** Output name */
585 char *name;
586
587 /** output-specific functions */
588 const xf86OutputFuncsRec *funcs;
589
590 /** driver private information */
591 void *driver_private;
592
593 /** Whether to use the old per-screen Monitor config section */
594 Bool use_screen_monitor;
595
596#ifdef RANDR_12_INTERFACE
597 /**
598 * RandR 1.2 output structure.
599 *
600 * When RandR 1.2 is available, this points at the associated
601 * RandR output structure and is created when this output is created
602 */
603 RROutputPtr randr_output;
604#else
605 void *randr_output;
606#endif
607 /**
608 * Desired initial panning
609 * Added in ABI version 2
610 */
611 BoxRec initialTotalArea;
612 BoxRec initialTrackingArea;
613 INT16 initialBorder[4];
614};
615
616typedef struct _xf86ProviderFuncs {
617 /**
618 * Called to allow the provider a chance to create properties after the
619 * RandR objects have been created.
620 */
621 void
622 (*create_resources) (ScrnInfoPtr scrn);
623
624 /**
625 * Callback when an provider's property has changed.
626 */
627 Bool
628 (*set_property) (ScrnInfoPtr scrn,
629 Atom property, RRPropertyValuePtr value);
630
631 /**
632 * Callback to get an updated property value
633 */
634 Bool
635 (*get_property) (ScrnInfoPtr provider, Atom property);
636
637} xf86ProviderFuncsRec, *xf86ProviderFuncsPtr;
638
639typedef struct _xf86CrtcConfigFuncs {
640 /**
641 * Requests that the driver resize the screen.
642 *
643 * The driver is responsible for updating scrn->virtualX and scrn->virtualY.
644 * If the requested size cannot be set, the driver should leave those values
645 * alone and return FALSE.
646 *
647 * A naive driver that cannot reallocate the screen may simply change
648 * virtual[XY]. A more advanced driver will want to also change the
649 * devPrivate.ptr and devKind of the screen pixmap, update any offscreen
650 * pixmaps it may have moved, and change pScrn->displayWidth.
651 */
652 Bool
653 (*resize) (ScrnInfoPtr scrn, int width, int height);
654} xf86CrtcConfigFuncsRec, *xf86CrtcConfigFuncsPtr;
655
656typedef void (*xf86_crtc_notify_proc_ptr) (ScreenPtr pScreen);
657
658typedef struct _xf86CrtcConfig {
659 int num_output;
660 xf86OutputPtr *output;
661 /**
662 * compat_output is used whenever we deal
663 * with legacy code that only understands a single
664 * output. pScrn->modes will be loaded from this output,
665 * adjust frame will whack this output, etc.
666 */
667 int compat_output;
668
669 int num_crtc;
670 xf86CrtcPtr *crtc;
671
672 int minWidth, minHeight;
673 int maxWidth, maxHeight;
674
675 /* For crtc-based rotation */
676 DamagePtr rotation_damage;
677 Bool rotation_damage_registered;
678
679 /* DGA */
680 unsigned int dga_flags;
681 unsigned long dga_address;
682 DGAModePtr dga_modes;
683 int dga_nmode;
684 int dga_width, dga_height, dga_stride;
685 DisplayModePtr dga_save_mode;
686
687 const xf86CrtcConfigFuncsRec *funcs;
688
689 CreateScreenResourcesProcPtr CreateScreenResources;
690
691 CloseScreenProcPtr CloseScreen;
692
693 /* Cursor information */
694 xf86CursorInfoPtr cursor_info;
695 CursorPtr cursor;
696 CARD8 *cursor_image;
697 Bool cursor_on;
698 CARD32 cursor_fg, cursor_bg;
699
700 /**
701 * Options parsed from the related device section
702 */
703 OptionInfoPtr options;
704
705 Bool debug_modes;
706
707 /* wrap screen BlockHandler for rotation */
708 ScreenBlockHandlerProcPtr BlockHandler;
709
710 /* callback when crtc configuration changes */
711 xf86_crtc_notify_proc_ptr xf86_crtc_notify;
712
713 char *name;
714 const xf86ProviderFuncsRec *provider_funcs;
715#ifdef RANDR_12_INTERFACE
716 RRProviderPtr randr_provider;
717#else
718 void *randr_provider;
719#endif
720} xf86CrtcConfigRec, *xf86CrtcConfigPtr;
721
722extern _X_EXPORT int xf86CrtcConfigPrivateIndex;
723
724#define XF86_CRTC_CONFIG_PTR(p) ((xf86CrtcConfigPtr) ((p)->privates[xf86CrtcConfigPrivateIndex].ptr))
725
726static _X_INLINE xf86OutputPtr
727xf86CompatOutput(ScrnInfoPtr pScrn)
728{
729 xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
730
731 return config->output[config->compat_output];
732}
733
734static _X_INLINE xf86CrtcPtr
735xf86CompatCrtc(ScrnInfoPtr pScrn)
736{
737 xf86OutputPtr compat_output = xf86CompatOutput(pScrn);
738
739 if (!compat_output)
740 return NULL;
741 return compat_output->crtc;
742}
743
744static _X_INLINE RRCrtcPtr
745xf86CompatRRCrtc(ScrnInfoPtr pScrn)
746{
747 xf86CrtcPtr compat_crtc = xf86CompatCrtc(pScrn);
748
749 if (!compat_crtc)
750 return NULL;
751 return compat_crtc->randr_crtc;
752}
753
754/*
755 * Initialize xf86CrtcConfig structure
756 */
757
758extern _X_EXPORT void
759 xf86CrtcConfigInit(ScrnInfoPtr scrn, const xf86CrtcConfigFuncsRec * funcs);
760
761extern _X_EXPORT void
762
763xf86CrtcSetSizeRange(ScrnInfoPtr scrn,
764 int minWidth, int minHeight, int maxWidth, int maxHeight);
765
766/*
767 * Crtc functions
768 */
769extern _X_EXPORT xf86CrtcPtr
770xf86CrtcCreate(ScrnInfoPtr scrn, const xf86CrtcFuncsRec * funcs);
771
772extern _X_EXPORT void
773 xf86CrtcDestroy(xf86CrtcPtr crtc);
774
775/**
776 * Sets the given video mode on the given crtc
777 */
778
779extern _X_EXPORT Bool
780
781xf86CrtcSetModeTransform(xf86CrtcPtr crtc, DisplayModePtr mode,
782 Rotation rotation, RRTransformPtr transform, int x,
783 int y);
784
785extern _X_EXPORT Bool
786
787xf86CrtcSetMode(xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
788 int x, int y);
789
790extern _X_EXPORT void
791 xf86CrtcSetOrigin(xf86CrtcPtr crtc, int x, int y);
792
793/*
794 * Assign crtc rotation during mode set
795 */
796extern _X_EXPORT Bool
797 xf86CrtcRotate(xf86CrtcPtr crtc);
798
799/*
800 * Clean up any rotation data, used when a crtc is turned off
801 * as well as when rotation is disabled.
802 */
803extern _X_EXPORT void
804 xf86RotateDestroy(xf86CrtcPtr crtc);
805
806/*
807 * free shadow memory allocated for all crtcs
808 */
809extern _X_EXPORT void
810 xf86RotateFreeShadow(ScrnInfoPtr pScrn);
811
812/*
813 * Clean up rotation during CloseScreen
814 */
815extern _X_EXPORT void
816 xf86RotateCloseScreen(ScreenPtr pScreen);
817
818/**
819 * Return whether any output is assigned to the crtc
820 */
821extern _X_EXPORT Bool
822 xf86CrtcInUse(xf86CrtcPtr crtc);
823
824/*
825 * Output functions
826 */
827extern _X_EXPORT xf86OutputPtr
828xf86OutputCreate(ScrnInfoPtr scrn,
829 const xf86OutputFuncsRec * funcs, const char *name);
830
831extern _X_EXPORT void
832 xf86OutputUseScreenMonitor(xf86OutputPtr output, Bool use_screen_monitor);
833
834extern _X_EXPORT Bool
835 xf86OutputRename(xf86OutputPtr output, const char *name);
836
837extern _X_EXPORT void
838 xf86OutputDestroy(xf86OutputPtr output);
839
840extern _X_EXPORT void
841 xf86ProbeOutputModes(ScrnInfoPtr pScrn, int maxX, int maxY);
842
843extern _X_EXPORT void
844 xf86SetScrnInfoModes(ScrnInfoPtr pScrn);
845
846#ifdef RANDR_13_INTERFACE
847#define ScreenInitRetType int
848#else
849#define ScreenInitRetType Bool
850#endif
851
852extern _X_EXPORT ScreenInitRetType xf86CrtcScreenInit(ScreenPtr pScreen);
853
854extern _X_EXPORT Bool
855 xf86InitialConfiguration(ScrnInfoPtr pScrn, Bool canGrow);
856
857extern _X_EXPORT void
858 xf86DPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags);
859
860extern _X_EXPORT Bool
861 xf86SaveScreen(ScreenPtr pScreen, int mode);
862
863extern _X_EXPORT void
864 xf86DisableUnusedFunctions(ScrnInfoPtr pScrn);
865
866extern _X_EXPORT DisplayModePtr
867xf86OutputFindClosestMode(xf86OutputPtr output, DisplayModePtr desired);
868
869extern _X_EXPORT Bool
870
871xf86SetSingleMode(ScrnInfoPtr pScrn, DisplayModePtr desired, Rotation rotation);
872
873/**
874 * Set the EDID information for the specified output
875 */
876extern _X_EXPORT void
877 xf86OutputSetEDID(xf86OutputPtr output, xf86MonPtr edid_mon);
878
879/**
880 * Return the list of modes supported by the EDID information
881 * stored in 'output'
882 */
883extern _X_EXPORT DisplayModePtr xf86OutputGetEDIDModes(xf86OutputPtr output);
884
885extern _X_EXPORT xf86MonPtr
886xf86OutputGetEDID(xf86OutputPtr output, I2CBusPtr pDDCBus);
887
888/**
889 * Initialize dga for this screen
890 */
891
892#ifdef XFreeXDGA
893extern _X_EXPORT Bool
894 xf86DiDGAInit(ScreenPtr pScreen, unsigned long dga_address);
895
896/* this is the real function, used only internally */
897_X_INTERNAL Bool
898 _xf86_di_dga_init_internal(ScreenPtr pScreen);
899
900/**
901 * Re-initialize dga for this screen (as when the set of modes changes)
902 */
903
904extern _X_EXPORT Bool
905 xf86DiDGAReInit(ScreenPtr pScreen);
906#endif
907
908/* This is the real function, used only internally */
909_X_INTERNAL Bool
910 _xf86_di_dga_reinit_internal(ScreenPtr pScreen);
911
912/*
913 * Set the subpixel order reported for the screen using
914 * the information from the outputs
915 */
916
917extern _X_EXPORT void
918 xf86CrtcSetScreenSubpixelOrder(ScreenPtr pScreen);
919
920/*
921 * Get a standard string name for a connector type
922 */
923extern _X_EXPORT const char *xf86ConnectorGetName(xf86ConnectorType connector);
924
925/*
926 * Using the desired mode information in each crtc, set
927 * modes (used in EnterVT functions, or at server startup)
928 */
929
930extern _X_EXPORT Bool
931 xf86SetDesiredModes(ScrnInfoPtr pScrn);
932
933/**
934 * Initialize the CRTC-based cursor code. CRTC function vectors must
935 * contain relevant cursor setting functions.
936 *
937 * Driver should call this from ScreenInit function
938 */
939extern _X_EXPORT Bool
940 xf86_cursors_init(ScreenPtr screen, int max_width, int max_height, int flags);
941
942/**
943 * Called when anything on the screen is reconfigured.
944 *
945 * Reloads cursor images as needed, then adjusts cursor positions.
946 *
947 * Driver should call this from crtc commit function.
948 */
949extern _X_EXPORT void
950 xf86_reload_cursors(ScreenPtr screen);
951
952/**
953 * Called from EnterVT to turn the cursors back on
954 */
955extern _X_EXPORT void
956 xf86_show_cursors(ScrnInfoPtr scrn);
957
958/**
959 * Called by the driver to turn cursors off
960 */
961extern _X_EXPORT void
962 xf86_hide_cursors(ScrnInfoPtr scrn);
963
964/**
965 * Clean up CRTC-based cursor code. Driver must call this at CloseScreen time.
966 */
967extern _X_EXPORT void
968 xf86_cursors_fini(ScreenPtr screen);
969
970/**
971 * Transform the cursor's coordinates based on the crtc transform. Normally
972 * this is done by the server, but if crtc->driverIsPerformingTransform is TRUE,
973 * then the server does not transform the cursor position automatically.
974 */
975extern _X_EXPORT void
976 xf86CrtcTransformCursorPos(xf86CrtcPtr crtc, int *x, int *y);
977
978#ifdef XV
979/*
980 * For overlay video, compute the relevant CRTC and
981 * clip video to that.
982 * wraps xf86XVClipVideoHelper()
983 */
984
985extern _X_EXPORT Bool
986
987xf86_crtc_clip_video_helper(ScrnInfoPtr pScrn,
988 xf86CrtcPtr * crtc_ret,
989 xf86CrtcPtr desired_crtc,
990 BoxPtr dst,
991 INT32 *xa,
992 INT32 *xb,
993 INT32 *ya,
994 INT32 *yb,
995 RegionPtr reg, INT32 width, INT32 height);
996#endif
997
998extern _X_EXPORT xf86_crtc_notify_proc_ptr
999xf86_wrap_crtc_notify(ScreenPtr pScreen, xf86_crtc_notify_proc_ptr new);
1000
1001extern _X_EXPORT void
1002 xf86_unwrap_crtc_notify(ScreenPtr pScreen, xf86_crtc_notify_proc_ptr old);
1003
1004extern _X_EXPORT void
1005 xf86_crtc_notify(ScreenPtr pScreen);
1006
1007/**
1008 * Gamma
1009 */
1010
1011extern _X_EXPORT Bool
1012 xf86_crtc_supports_gamma(ScrnInfoPtr pScrn);
1013
1014extern _X_EXPORT void
1015xf86ProviderSetup(ScrnInfoPtr scrn,
1016 const xf86ProviderFuncsRec * funcs, const char *name);
1017
1018extern _X_EXPORT void
1019xf86DetachAllCrtc(ScrnInfoPtr scrn);
1020
1021#endif /* _XF86CRTC_H_ */