VirtualBox

source: vbox/trunk/src/VBox/Additions/x11/x11include/xorg-server-1.4.2/xf86Crtc.h@ 81043

Last change on this file since 81043 was 43272, checked in by vboxsync, 12 years ago

Additions/x11: more original X server headers.

  • Property svn:eol-style set to native
File size: 18.4 KB
Line 
1/*
2 * Copyright © 2006 Keith Packard
3 *
4 * Permission to use, copy, modify, distribute, and sell this software and its
5 * documentation for any purpose is hereby granted without fee, provided that
6 * the above copyright notice appear in all copies and that both that copyright
7 * notice and this permission notice appear in supporting documentation, and
8 * that the name of the copyright holders not be used in advertising or
9 * publicity pertaining to distribution of the software without specific,
10 * written prior permission. The copyright holders make no representations
11 * about the suitability of this software for any purpose. It is provided "as
12 * is" without express or implied warranty.
13 *
14 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
20 * OF THIS SOFTWARE.
21 */
22#ifndef _XF86CRTC_H_
23#define _XF86CRTC_H_
24
25#include <edid.h>
26#include "randrstr.h"
27#if XF86_MODES_RENAME
28#include "xf86Rename.h"
29#endif
30#include "xf86Modes.h"
31#include "xf86Cursor.h"
32#include "damage.h"
33#include "picturestr.h"
34
35/* Compat definitions for older X Servers. */
36#ifndef M_T_PREFERRED
37#define M_T_PREFERRED 0x08
38#endif
39#ifndef M_T_DRIVER
40#define M_T_DRIVER 0x40
41#endif
42#ifndef HARDWARE_CURSOR_ARGB
43#define HARDWARE_CURSOR_ARGB 0x00004000
44#endif
45
46typedef struct _xf86Crtc xf86CrtcRec, *xf86CrtcPtr;
47typedef struct _xf86Output xf86OutputRec, *xf86OutputPtr;
48
49/* define a standard for connector types */
50typedef enum _xf86ConnectorType {
51 XF86ConnectorNone,
52 XF86ConnectorVGA,
53 XF86ConnectorDVI_I,
54 XF86ConnectorDVI_D,
55 XF86ConnectorDVI_A,
56 XF86ConnectorComposite,
57 XF86ConnectorSvideo,
58 XF86ConnectorComponent,
59 XF86ConnectorLFP,
60 XF86ConnectorProprietary,
61} xf86ConnectorType;
62
63typedef enum _xf86OutputStatus {
64 XF86OutputStatusConnected,
65 XF86OutputStatusDisconnected,
66 XF86OutputStatusUnknown,
67} xf86OutputStatus;
68
69typedef struct _xf86CrtcFuncs {
70 /**
71 * Turns the crtc on/off, or sets intermediate power levels if available.
72 *
73 * Unsupported intermediate modes drop to the lower power setting. If the
74 * mode is DPMSModeOff, the crtc must be disabled sufficiently for it to
75 * be safe to call mode_set.
76 */
77 void
78 (*dpms)(xf86CrtcPtr crtc,
79 int mode);
80
81 /**
82 * Saves the crtc's state for restoration on VT switch.
83 */
84 void
85 (*save)(xf86CrtcPtr crtc);
86
87 /**
88 * Restore's the crtc's state at VT switch.
89 */
90 void
91 (*restore)(xf86CrtcPtr crtc);
92
93 /**
94 * Lock CRTC prior to mode setting, mostly for DRI.
95 * Returns whether unlock is needed
96 */
97 Bool
98 (*lock) (xf86CrtcPtr crtc);
99
100 /**
101 * Unlock CRTC after mode setting, mostly for DRI
102 */
103 void
104 (*unlock) (xf86CrtcPtr crtc);
105
106 /**
107 * Callback to adjust the mode to be set in the CRTC.
108 *
109 * This allows a CRTC to adjust the clock or even the entire set of
110 * timings, which is used for panels with fixed timings or for
111 * buses with clock limitations.
112 */
113 Bool
114 (*mode_fixup)(xf86CrtcPtr crtc,
115 DisplayModePtr mode,
116 DisplayModePtr adjusted_mode);
117
118 /**
119 * Prepare CRTC for an upcoming mode set.
120 */
121 void
122 (*prepare)(xf86CrtcPtr crtc);
123
124 /**
125 * Callback for setting up a video mode after fixups have been made.
126 */
127 void
128 (*mode_set)(xf86CrtcPtr crtc,
129 DisplayModePtr mode,
130 DisplayModePtr adjusted_mode,
131 int x, int y);
132
133 /**
134 * Commit mode changes to a CRTC
135 */
136 void
137 (*commit)(xf86CrtcPtr crtc);
138
139 /* Set the color ramps for the CRTC to the given values. */
140 void
141 (*gamma_set)(xf86CrtcPtr crtc, CARD16 *red, CARD16 *green, CARD16 *blue,
142 int size);
143
144 /**
145 * Allocate the shadow area, delay the pixmap creation until needed
146 */
147 void *
148 (*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} xf86CrtcFuncsRec, *xf86CrtcFuncsPtr;
204
205struct _xf86Crtc {
206 /**
207 * Associated ScrnInfo
208 */
209 ScrnInfoPtr scrn;
210
211 /**
212 * Active state of this CRTC
213 *
214 * Set when this CRTC is driving one or more outputs
215 */
216 Bool enabled;
217
218 /**
219 * Active mode
220 *
221 * This reflects the mode as set in the CRTC currently
222 * It will be cleared when the VT is not active or
223 * during server startup
224 */
225 DisplayModeRec mode;
226 Rotation rotation;
227 PixmapPtr rotatedPixmap;
228 void *rotatedData;
229
230 /**
231 * Position on screen
232 *
233 * Locates this CRTC within the frame buffer
234 */
235 int x, y;
236
237 /**
238 * Desired mode
239 *
240 * This is set to the requested mode, independent of
241 * whether the VT is active. In particular, it receives
242 * the startup configured mode and saves the active mode
243 * on VT switch.
244 */
245 DisplayModeRec desiredMode;
246 Rotation desiredRotation;
247 int desiredX, desiredY;
248
249 /** crtc-specific functions */
250 const xf86CrtcFuncsRec *funcs;
251
252 /**
253 * Driver private
254 *
255 * Holds driver-private information
256 */
257 void *driver_private;
258
259#ifdef RANDR_12_INTERFACE
260 /**
261 * RandR crtc
262 *
263 * When RandR 1.2 is available, this
264 * points at the associated crtc object
265 */
266 RRCrtcPtr randr_crtc;
267#else
268 void *randr_crtc;
269#endif
270
271 /**
272 * Current cursor is ARGB
273 */
274 Bool cursor_argb;
275 /**
276 * Track whether cursor is within CRTC range
277 */
278 Bool cursor_in_range;
279 /**
280 * Track state of cursor associated with this CRTC
281 */
282 Bool cursor_shown;
283
284 /**
285 * Current transformation matrix
286 */
287 PictTransform crtc_to_framebuffer;
288 PictTransform framebuffer_to_crtc;
289 Bool transform_in_use;
290 /**
291 * Bounding box in screen space
292 */
293 BoxRec bounds;
294};
295
296typedef struct _xf86OutputFuncs {
297 /**
298 * Called to allow the output a chance to create properties after the
299 * RandR objects have been created.
300 */
301 void
302 (*create_resources)(xf86OutputPtr output);
303
304 /**
305 * Turns the output on/off, or sets intermediate power levels if available.
306 *
307 * Unsupported intermediate modes drop to the lower power setting. If the
308 * mode is DPMSModeOff, the output must be disabled, as the DPLL may be
309 * disabled afterwards.
310 */
311 void
312 (*dpms)(xf86OutputPtr output,
313 int mode);
314
315 /**
316 * Saves the output's state for restoration on VT switch.
317 */
318 void
319 (*save)(xf86OutputPtr output);
320
321 /**
322 * Restore's the output's state at VT switch.
323 */
324 void
325 (*restore)(xf86OutputPtr output);
326
327 /**
328 * Callback for testing a video mode for a given output.
329 *
330 * This function should only check for cases where a mode can't be supported
331 * on the output specifically, and not represent generic CRTC limitations.
332 *
333 * \return MODE_OK if the mode is valid, or another MODE_* otherwise.
334 */
335 int
336 (*mode_valid)(xf86OutputPtr output,
337 DisplayModePtr pMode);
338
339 /**
340 * Callback to adjust the mode to be set in the CRTC.
341 *
342 * This allows an output to adjust the clock or even the entire set of
343 * timings, which is used for panels with fixed timings or for
344 * buses with clock limitations.
345 */
346 Bool
347 (*mode_fixup)(xf86OutputPtr output,
348 DisplayModePtr mode,
349 DisplayModePtr adjusted_mode);
350
351 /**
352 * Callback for preparing mode changes on an output
353 */
354 void
355 (*prepare)(xf86OutputPtr output);
356
357 /**
358 * Callback for committing mode changes on an output
359 */
360 void
361 (*commit)(xf86OutputPtr output);
362
363 /**
364 * Callback for setting up a video mode after fixups have been made.
365 *
366 * This is only called while the output is disabled. The dpms callback
367 * must be all that's necessary for the output, to turn the output on
368 * after this function is called.
369 */
370 void
371 (*mode_set)(xf86OutputPtr output,
372 DisplayModePtr mode,
373 DisplayModePtr adjusted_mode);
374
375 /**
376 * Probe for a connected output, and return detect_status.
377 */
378 xf86OutputStatus
379 (*detect)(xf86OutputPtr output);
380
381 /**
382 * Query the device for the modes it provides.
383 *
384 * This function may also update MonInfo, mm_width, and mm_height.
385 *
386 * \return singly-linked list of modes or NULL if no modes found.
387 */
388 DisplayModePtr
389 (*get_modes)(xf86OutputPtr output);
390
391#ifdef RANDR_12_INTERFACE
392 /**
393 * Callback when an output's property has changed.
394 */
395 Bool
396 (*set_property)(xf86OutputPtr output,
397 Atom property,
398 RRPropertyValuePtr value);
399#endif
400 /**
401 * Clean up driver-specific bits of the output
402 */
403 void
404 (*destroy) (xf86OutputPtr output);
405} xf86OutputFuncsRec, *xf86OutputFuncsPtr;
406
407struct _xf86Output {
408 /**
409 * Associated ScrnInfo
410 */
411 ScrnInfoPtr scrn;
412
413 /**
414 * Currently connected crtc (if any)
415 *
416 * If this output is not in use, this field will be NULL.
417 */
418 xf86CrtcPtr crtc;
419
420 /**
421 * Possible CRTCs for this output as a mask of crtc indices
422 */
423 CARD32 possible_crtcs;
424
425 /**
426 * Possible outputs to share the same CRTC as a mask of output indices
427 */
428 CARD32 possible_clones;
429
430 /**
431 * Whether this output can support interlaced modes
432 */
433 Bool interlaceAllowed;
434
435 /**
436 * Whether this output can support double scan modes
437 */
438 Bool doubleScanAllowed;
439
440 /**
441 * List of available modes on this output.
442 *
443 * This should be the list from get_modes(), plus perhaps additional
444 * compatible modes added later.
445 */
446 DisplayModePtr probed_modes;
447
448 /**
449 * Options parsed from the related monitor section
450 */
451 OptionInfoPtr options;
452
453 /**
454 * Configured monitor section
455 */
456 XF86ConfMonitorPtr conf_monitor;
457
458 /**
459 * Desired initial position
460 */
461 int initial_x, initial_y;
462
463 /**
464 * Desired initial rotation
465 */
466 Rotation initial_rotation;
467
468 /**
469 * Current connection status
470 *
471 * This indicates whether a monitor is known to be connected
472 * to this output or not, or whether there is no way to tell
473 */
474 xf86OutputStatus status;
475
476 /** EDID monitor information */
477 xf86MonPtr MonInfo;
478
479 /** subpixel order */
480 int subpixel_order;
481
482 /** Physical size of the currently attached output device. */
483 int mm_width, mm_height;
484
485 /** Output name */
486 char *name;
487
488 /** output-specific functions */
489 const xf86OutputFuncsRec *funcs;
490
491 /** driver private information */
492 void *driver_private;
493
494 /** Whether to use the old per-screen Monitor config section */
495 Bool use_screen_monitor;
496
497#ifdef RANDR_12_INTERFACE
498 /**
499 * RandR 1.2 output structure.
500 *
501 * When RandR 1.2 is available, this points at the associated
502 * RandR output structure and is created when this output is created
503 */
504 RROutputPtr randr_output;
505#else
506 void *randr_output;
507#endif
508};
509
510typedef struct _xf86CrtcConfigFuncs {
511 /**
512 * Requests that the driver resize the screen.
513 *
514 * The driver is responsible for updating scrn->virtualX and scrn->virtualY.
515 * If the requested size cannot be set, the driver should leave those values
516 * alone and return FALSE.
517 *
518 * A naive driver that cannot reallocate the screen may simply change
519 * virtual[XY]. A more advanced driver will want to also change the
520 * devPrivate.ptr and devKind of the screen pixmap, update any offscreen
521 * pixmaps it may have moved, and change pScrn->displayWidth.
522 */
523 Bool
524 (*resize)(ScrnInfoPtr scrn,
525 int width,
526 int height);
527} xf86CrtcConfigFuncsRec, *xf86CrtcConfigFuncsPtr;
528
529typedef struct _xf86CrtcConfig {
530 int num_output;
531 xf86OutputPtr *output;
532 /**
533 * compat_output is used whenever we deal
534 * with legacy code that only understands a single
535 * output. pScrn->modes will be loaded from this output,
536 * adjust frame will whack this output, etc.
537 */
538 int compat_output;
539
540 int num_crtc;
541 xf86CrtcPtr *crtc;
542
543 int minWidth, minHeight;
544 int maxWidth, maxHeight;
545
546 /* For crtc-based rotation */
547 DamagePtr rotation_damage;
548 Bool rotation_damage_registered;
549
550 /* DGA */
551 unsigned int dga_flags;
552 unsigned long dga_address;
553 DGAModePtr dga_modes;
554 int dga_nmode;
555 int dga_width, dga_height, dga_stride;
556 DisplayModePtr dga_save_mode;
557
558 const xf86CrtcConfigFuncsRec *funcs;
559
560 CreateScreenResourcesProcPtr CreateScreenResources;
561
562 CloseScreenProcPtr CloseScreen;
563
564 /* Cursor information */
565 xf86CursorInfoPtr cursor_info;
566 CursorPtr cursor;
567 CARD8 *cursor_image;
568 Bool cursor_on;
569 CARD32 cursor_fg, cursor_bg;
570
571 /**
572 * Options parsed from the related device section
573 */
574 OptionInfoPtr options;
575
576 Bool debug_modes;
577
578 /* wrap screen BlockHandler for rotation */
579 ScreenBlockHandlerProcPtr BlockHandler;
580
581} xf86CrtcConfigRec, *xf86CrtcConfigPtr;
582
583extern int xf86CrtcConfigPrivateIndex;
584
585#define XF86_CRTC_CONFIG_PTR(p) ((xf86CrtcConfigPtr) ((p)->privates[xf86CrtcConfigPrivateIndex].ptr))
586
587/*
588 * Initialize xf86CrtcConfig structure
589 */
590
591void
592xf86CrtcConfigInit (ScrnInfoPtr scrn,
593 const xf86CrtcConfigFuncsRec *funcs);
594
595void
596xf86CrtcSetSizeRange (ScrnInfoPtr scrn,
597 int minWidth, int minHeight,
598 int maxWidth, int maxHeight);
599
600/*
601 * Crtc functions
602 */
603xf86CrtcPtr
604xf86CrtcCreate (ScrnInfoPtr scrn,
605 const xf86CrtcFuncsRec *funcs);
606
607void
608xf86CrtcDestroy (xf86CrtcPtr crtc);
609
610
611/**
612 * Sets the given video mode on the given crtc
613 */
614Bool
615xf86CrtcSetMode (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation,
616 int x, int y);
617
618/*
619 * Assign crtc rotation during mode set
620 */
621Bool
622xf86CrtcRotate (xf86CrtcPtr crtc, DisplayModePtr mode, Rotation rotation);
623
624/*
625 * Clean up rotation during CloseScreen
626 */
627void
628xf86RotateCloseScreen (ScreenPtr pScreen);
629
630/**
631 * Return whether any output is assigned to the crtc
632 */
633Bool
634xf86CrtcInUse (xf86CrtcPtr crtc);
635
636/*
637 * Output functions
638 */
639xf86OutputPtr
640xf86OutputCreate (ScrnInfoPtr scrn,
641 const xf86OutputFuncsRec *funcs,
642 const char *name);
643
644void
645xf86OutputUseScreenMonitor (xf86OutputPtr output, Bool use_screen_monitor);
646
647Bool
648xf86OutputRename (xf86OutputPtr output, const char *name);
649
650void
651xf86OutputDestroy (xf86OutputPtr output);
652
653void
654xf86ProbeOutputModes (ScrnInfoPtr pScrn, int maxX, int maxY);
655
656void
657xf86SetScrnInfoModes (ScrnInfoPtr pScrn);
658
659Bool
660xf86CrtcScreenInit (ScreenPtr pScreen);
661
662Bool
663xf86InitialConfiguration (ScrnInfoPtr pScrn, Bool canGrow);
664
665void
666xf86DPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags);
667
668Bool
669xf86SaveScreen(ScreenPtr pScreen, int mode);
670
671void
672xf86DisableUnusedFunctions(ScrnInfoPtr pScrn);
673
674DisplayModePtr
675xf86OutputFindClosestMode (xf86OutputPtr output, DisplayModePtr desired);
676
677Bool
678xf86SetSingleMode (ScrnInfoPtr pScrn, DisplayModePtr desired, Rotation rotation);
679
680/**
681 * Set the EDID information for the specified output
682 */
683void
684xf86OutputSetEDID (xf86OutputPtr output, xf86MonPtr edid_mon);
685
686/**
687 * Return the list of modes supported by the EDID information
688 * stored in 'output'
689 */
690DisplayModePtr
691xf86OutputGetEDIDModes (xf86OutputPtr output);
692
693xf86MonPtr
694xf86OutputGetEDID (xf86OutputPtr output, I2CBusPtr pDDCBus);
695
696/**
697 * Initialize dga for this screen
698 */
699
700Bool
701xf86DiDGAInit (ScreenPtr pScreen, unsigned long dga_address);
702
703/**
704 * Re-initialize dga for this screen (as when the set of modes changes)
705 */
706
707Bool
708xf86DiDGAReInit (ScreenPtr pScreen);
709
710/*
711 * Set the subpixel order reported for the screen using
712 * the information from the outputs
713 */
714
715void
716xf86CrtcSetScreenSubpixelOrder (ScreenPtr pScreen);
717
718/*
719 * Get a standard string name for a connector type
720 */
721char *
722xf86ConnectorGetName(xf86ConnectorType connector);
723
724/*
725 * Using the desired mode information in each crtc, set
726 * modes (used in EnterVT functions, or at server startup)
727 */
728
729Bool
730xf86SetDesiredModes (ScrnInfoPtr pScrn);
731
732/**
733 * Initialize the CRTC-based cursor code. CRTC function vectors must
734 * contain relevant cursor setting functions.
735 *
736 * Driver should call this from ScreenInit function
737 */
738Bool
739xf86_cursors_init (ScreenPtr screen, int max_width, int max_height, int flags);
740
741/**
742 * Called when anything on the screen is reconfigured.
743 *
744 * Reloads cursor images as needed, then adjusts cursor positions.
745 *
746 * Driver should call this from crtc commit function.
747 */
748void
749xf86_reload_cursors (ScreenPtr screen);
750
751/**
752 * Called from EnterVT to turn the cursors back on
753 */
754void
755xf86_show_cursors (ScrnInfoPtr scrn);
756
757/**
758 * Called by the driver to turn cursors off
759 */
760void
761xf86_hide_cursors (ScrnInfoPtr scrn);
762
763/**
764 * Clean up CRTC-based cursor code. Driver must call this at CloseScreen time.
765 */
766void
767xf86_cursors_fini (ScreenPtr screen);
768
769/*
770 * For overlay video, compute the relevant CRTC and
771 * clip video to that.
772 * wraps xf86XVClipVideoHelper()
773 */
774
775Bool
776xf86_crtc_clip_video_helper(ScrnInfoPtr pScrn,
777 xf86CrtcPtr *crtc_ret,
778 xf86CrtcPtr desired_crtc,
779 BoxPtr dst,
780 INT32 *xa,
781 INT32 *xb,
782 INT32 *ya,
783 INT32 *yb,
784 RegionPtr reg,
785 INT32 width,
786 INT32 height);
787
788#endif /* _XF86CRTC_H_ */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette