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