master ohmu/fastfetch-openbsd / src / 3rdparty / display-library / adl_structures.h
ohmu  ·  2026-10-15
   1//
   2// Copyright (c) 2016 - 2022 Advanced Micro Devices, Inc. All rights reserved.
   3//
   4// MIT LICENSE:
   5// Permission is hereby granted, free of charge, to any person obtaining a copy
   6// of this software and associated documentation files (the "Software"), to deal
   7// in the Software without restriction, including without limitation the rights
   8// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
   9// copies of the Software, and to permit persons to whom the Software is
  10// furnished to do so, subject to the following conditions:
  11//
  12// The above copyright notice and this permission notice shall be included in
  13// all copies or substantial portions of the Software.
  14//
  15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  21// SOFTWARE.
  22
  23/// \file adl_structures.h
  24///\brief This file contains the structure declarations that are used by the public ADL interfaces for \WIN platforms.\n <b>Included in ADL SDK</b>
  25///
  26/// All data structures used in AMD Display Library (ADL) public interfaces should be defined in this header file.
  27///
  28
  29#ifndef ADL_STRUCTURES_H_
  30#define ADL_STRUCTURES_H_
  31
  32#include "adl_defines.h"
  33#include <stdbool.h>
  34/////////////////////////////////////////////////////////////////////////////////////////////
  35///\brief Structure containing information about the graphics adapter.
  36///
  37/// This structure is used to store various information about the graphics adapter.  This
  38/// information can be returned to the user. Alternatively, it can be used to access various driver calls to set
  39/// or fetch various settings upon the user's request.
  40/// \nosubgrouping
  41////////////////////////////////////////////////////////////////////////////////////////////
  42typedef struct AdapterInfo
  43{
  44/// \WIN_STRUCT_MEM
  45
  46/// Size of the structure.
  47    int iSize;
  48/// The ADL index handle. One GPU may be associated with one or two index handles
  49    int iAdapterIndex;
  50/// The unique device ID associated with this adapter.
  51    char strUDID[ADL_MAX_PATH];
  52/// The BUS number associated with this adapter.
  53    int iBusNumber;
  54/// The driver number associated with this adapter.
  55    int iDeviceNumber;
  56/// The function number.
  57    int iFunctionNumber;
  58/// The vendor ID associated with this adapter.
  59    int iVendorID;
  60/// Adapter name.
  61    char strAdapterName[ADL_MAX_PATH];
  62/// Display name. For example, "\\\\Display0" for Windows.
  63    char strDisplayName[ADL_MAX_PATH];
  64/// Present or not; 1 if present and 0 if not present.It the logical adapter is present, the display name such as \\\\.\\Display1 can be found from OS
  65    int iPresent;
  66
  67#if defined (_WIN32) || defined (_WIN64)
  68/// \WIN_STRUCT_MEM
  69
  70/// Exist or not; 1 is exist and 0 is not present.
  71    int iExist;
  72/// Driver registry path.
  73    char strDriverPath[ADL_MAX_PATH];
  74/// Driver registry path Ext for.
  75    char strDriverPathExt[ADL_MAX_PATH];
  76/// PNP string from Windows.
  77    char strPNPString[ADL_MAX_PATH];
  78/// It is generated from EnumDisplayDevices.
  79    int iOSDisplayIndex;
  80
  81#endif /* (_WIN32) || (_WIN64) */
  82
  83} AdapterInfo, *LPAdapterInfo;
  84
  85/////////////////////////////////////////////////////////////////////////////////////////////
  86///\brief Structure containing information about an controller mode
  87///
  88/// This structure is used to store information of an controller mode
  89/// \nosubgrouping
  90////////////////////////////////////////////////////////////////////////////////////////////
  91typedef struct ADLAdapterCaps
  92{
  93	/// AdapterID for this adapter
  94	int iAdapterID;
  95	/// Number of controllers for this adapter
  96	int iNumControllers;
  97	/// Number of displays for this adapter
  98	int iNumDisplays;
  99	/// Number of overlays for this adapter
 100	int iNumOverlays;
 101	/// Number of GLSyncConnectors
 102	int iNumOfGLSyncConnectors;
 103	/// The bit mask identifies the adapter caps
 104	int iCapsMask;
 105	/// The bit identifies the adapter caps \ref define_adapter_caps
 106	int iCapsValue;
 107}ADLAdapterCaps;
 108
 109/////////////////////////////////////////////////////////////////////////////////////////////
 110///\brief Structure containing additional information about the ASIC memory
 111///
 112/// This structure is used to store additional information about the ASIC memory.  This
 113/// information can be returned to the user.
 114/// \nosubgrouping
 115////////////////////////////////////////////////////////////////////////////////////////////
 116typedef struct ADLMemoryInfo2
 117{
 118	/// Memory size in bytes.
 119	long long iMemorySize;
 120	/// Memory type in string.
 121	char strMemoryType[ADL_MAX_PATH];
 122	/// Highest default performance level Memory bandwidth in Mbytes/s
 123	long long iMemoryBandwidth;
 124	/// HyperMemory size in bytes.
 125	long long iHyperMemorySize;
 126
 127	/// Invisible Memory size in bytes.
 128	long long iInvisibleMemorySize;
 129	/// Visible Memory size in bytes.
 130	long long iVisibleMemorySize;
 131} ADLMemoryInfo2, *LPADLMemoryInfo2;
 132
 133/////////////////////////////////////////////////////////////////////////////////////////////
 134///\brief Structure containing additional information about the ASIC memory
 135///
 136/// This structure is used to store additional information about the ASIC memory.  This
 137/// information can be returned to the user.
 138/// \nosubgrouping
 139////////////////////////////////////////////////////////////////////////////////////////////
 140typedef struct ADLMemoryInfo3
 141{
 142    /// Memory size in bytes.
 143    long long iMemorySize;
 144    /// Memory type in string.
 145    char strMemoryType[ADL_MAX_PATH];
 146    /// Highest default performance level Memory bandwidth in Mbytes/s
 147    long long iMemoryBandwidth;
 148    /// HyperMemory size in bytes.
 149    long long iHyperMemorySize;
 150
 151    /// Invisible Memory size in bytes.
 152    long long iInvisibleMemorySize;
 153    /// Visible Memory size in bytes.
 154    long long iVisibleMemorySize;
 155    /// Vram vendor ID
 156    long long iVramVendorRevId;
 157} ADLMemoryInfo3, *LPADLMemoryInfo3;
 158
 159/////////////////////////////////////////////////////////////////////////////////////////////
 160///\brief Structure containing additional information about the ASIC memory
 161///
 162/// This structure is used to store additional information about the ASIC memory.  This
 163/// information can be returned to the user.
 164/// \nosubgrouping
 165////////////////////////////////////////////////////////////////////////////////////////////
 166typedef struct ADLMemoryInfoX4
 167{
 168    /// Memory size in bytes.
 169    long long iMemorySize;
 170    /// Memory type in string.
 171    char strMemoryType[ADL_MAX_PATH];
 172    /// Highest default performance level Memory bandwidth in Mbytes/s
 173    long long iMemoryBandwidth;
 174    /// HyperMemory size in bytes.
 175    long long iHyperMemorySize;
 176
 177    /// Invisible Memory size in bytes.
 178    long long iInvisibleMemorySize;
 179    /// Visible Memory size in bytes.
 180    long long iVisibleMemorySize;
 181    /// Vram vendor ID
 182    long long iVramVendorRevId;
 183    /// Memory Bandiwidth that is calculated and finalized on the driver side, grab and go.
 184    long long iMemoryBandwidthX2;
 185    /// Memory Bit Rate that is calculated and finalized on the driver side, grab and go.
 186    long long iMemoryBitRateX2;
 187
 188} ADLMemoryInfoX4, *LPADLMemoryInfoX4;
 189
 190///////////////////////////////////////////////////////////////////////////
 191// ADLvRamVendor Enumeration
 192///////////////////////////////////////////////////////////////////////////
 193enum ADLvRamVendors
 194{
 195    ADLvRamVendor_Unsupported = 0x0,
 196    ADLvRamVendor_SAMSUNG,
 197    ADLvRamVendor_INFINEON,
 198    ADLvRamVendor_ELPIDA,
 199    ADLvRamVendor_ETRON,
 200    ADLvRamVendor_NANYA,
 201    ADLvRamVendor_HYNIX,
 202    ADLvRamVendor_MOSEL,
 203    ADLvRamVendor_WINBOND,
 204    ADLvRamVendor_ESMT,
 205    ADLvRamVendor_MICRON = 0xF,
 206    ADLvRamVendor_Undefined
 207};
 208
 209/////////////////////////////////////////////////////////////////////////////////////////////
 210///\brief Structure containing information about components of ASIC GCN architecture
 211///
 212///  Elements of GCN info are compute units, number of Tex (Texture filtering units)  , number of ROPs (render back-ends).
 213/// \nosubgrouping
 214////////////////////////////////////////////////////////////////////////////////////////////
 215
 216typedef struct ADLGcnInfo
 217{
 218	int CuCount; //Number of compute units on the ASIC.
 219	int TexCount; //Number of texture mapping units.
 220	int RopCount; //Number of Render backend Units.
 221	int ASICFamilyId; //Such SI, VI. See /inc/asic_reg/atiid.h for family ids
 222	int ASICRevisionId; //Such as Ellesmere, Fiji.   For example - VI family revision ids are stored in /inc/asic_reg/vi_id.h
 223}ADLGcnInfo;
 224
 225/////////////////////////////////////////////////////////////////////////////////////////////
 226///\brief Structure containing information related virtual segment config information.
 227///
 228/// This structure is used to store information related virtual segment config
 229/// \nosubgrouping
 230////////////////////////////////////////////////////////////////////////////////////////////
 231typedef struct ADLVirtualSegmentSettingsOutput
 232{
 233	int                      virtualSegmentSupported;   // 1 - subsequent values are valid
 234	int                      virtualSegmentDefault;     //virtual segment default, 1: enable, 0: disable
 235	int                      virtualSegmentCurrent;     //virtual segment current, 1: enable, 0: disable
 236	int                      iMinSizeInMB;              //minimum value
 237	int                      iMaxSizeInMB;              //maximum value
 238	int                      icurrentSizeInMB;          //last configured otherwise same as factory default
 239	int                      idefaultSizeInMB;          //factory default
 240	int                      iMask;                     //fileds for extension in the future
 241	int                      iValue;                    //fileds for extension in the future
 242} ADLVirtualSegmentSettingsOutput;
 243
 244/////////////////////////////////////////////////////////////////////////////////////////////
 245/// \brief Structure containing information about the Chipset.
 246///
 247/// This structure is used to store various information about the Chipset.  This
 248/// information can be returned to the user.
 249/// \nosubgrouping
 250////////////////////////////////////////////////////////////////////////////////////////////
 251typedef struct ADLChipSetInfo
 252{
 253	int iBusType; 		///< Bus type.
 254	int iBusSpeedType;	///Maximum Bus Speed of the current platform
 255	int iMaxPCIELaneWidth; 	///< Number of PCIE lanes.
 256	int iCurrentPCIELaneWidth;  ///< Current PCIE Lane Width
 257	int iSupportedAGPSpeeds;    ///< Bit mask or AGP transfer speed.
 258	int iCurrentAGPSpeed;       ///< Current AGP speed
 259} ADLChipSetInfo, *LPADLChipSetInfo;
 260
 261/////////////////////////////////////////////////////////////////////////////////////////////
 262///\brief Structure containing information about the ASIC memory.
 263///
 264/// This structure is used to store various information about the ASIC memory.  This
 265/// information can be returned to the user.
 266/// \nosubgrouping
 267////////////////////////////////////////////////////////////////////////////////////////////
 268typedef struct ADLMemoryInfo
 269{
 270/// Memory size in bytes.
 271    long long iMemorySize;
 272/// Memory type in string.
 273    char strMemoryType[ADL_MAX_PATH];
 274/// Memory bandwidth in Mbytes/s.
 275    long long iMemoryBandwidth;
 276} ADLMemoryInfo, *LPADLMemoryInfo;
 277
 278/////////////////////////////////////////////////////////////////////////////////////////////
 279///\brief Structure containing information about memory required by type
 280///
 281/// This structure is returned by ADL_Adapter_ConfigMemory_Get, which given a desktop and display configuration
 282/// will return the Memory used.
 283/// \nosubgrouping
 284////////////////////////////////////////////////////////////////////////////////////////////
 285typedef struct ADLMemoryRequired
 286{
 287    long long iMemoryReq;        /// Memory in bytes required
 288    int iType;                    /// Type of Memory \ref define_adl_validmemoryrequiredfields
 289    int iDisplayFeatureValue;   /// Display features \ref define_adl_visiblememoryfeatures that are using this type of memory
 290} ADLMemoryRequired, *LPADLMemoryRequired;
 291
 292/////////////////////////////////////////////////////////////////////////////////////////////
 293///\brief Structure containing information about the features associated with a display
 294///
 295/// This structure is a parameter to ADL_Adapter_ConfigMemory_Get, which given a desktop and display configuration
 296/// will return the Memory used.
 297/// \nosubgrouping
 298////////////////////////////////////////////////////////////////////////////////////////////
 299typedef struct ADLMemoryDisplayFeatures
 300{
 301    int iDisplayIndex;            /// ADL Display index
 302    int iDisplayFeatureValue;    /// features that the display is using \ref define_adl_visiblememoryfeatures
 303} ADLMemoryDisplayFeatures, *LPADLMemoryDisplayFeatures;
 304
 305/////////////////////////////////////////////////////////////////////////////////////////////
 306///\brief Structure containing DDC information.
 307///
 308/// This structure is used to store various DDC information that can be returned to the user.
 309/// Note that all fields of type int are actually defined as unsigned int types within the driver.
 310/// \nosubgrouping
 311////////////////////////////////////////////////////////////////////////////////////////////
 312typedef struct ADLDDCInfo
 313{
 314/// Size of the structure
 315    int  ulSize;
 316/// Indicates whether the attached display supports DDC. If this field is zero on return, no other DDC information fields will be used.
 317    int  ulSupportsDDC;
 318/// Returns the manufacturer ID of the display device. Should be zeroed if this information is not available.
 319    int  ulManufacturerID;
 320/// Returns the product ID of the display device. Should be zeroed if this information is not available.
 321    int  ulProductID;
 322/// Returns the name of the display device. Should be zeroed if this information is not available.
 323    char cDisplayName[ADL_MAX_DISPLAY_NAME];
 324/// Returns the maximum Horizontal supported resolution. Should be zeroed if this information is not available.
 325    int  ulMaxHResolution;
 326/// Returns the maximum Vertical supported resolution. Should be zeroed if this information is not available.
 327    int  ulMaxVResolution;
 328/// Returns the maximum supported refresh rate. Should be zeroed if this information is not available.
 329    int  ulMaxRefresh;
 330/// Returns the display device preferred timing mode's horizontal resolution.
 331    int  ulPTMCx;
 332/// Returns the display device preferred timing mode's vertical resolution.
 333    int  ulPTMCy;
 334/// Returns the display device preferred timing mode's refresh rate.
 335    int  ulPTMRefreshRate;
 336/// Return EDID flags.
 337    int  ulDDCInfoFlag;
 338} ADLDDCInfo, *LPADLDDCInfo;
 339
 340/////////////////////////////////////////////////////////////////////////////////////////////
 341///\brief Structure containing DDC information.
 342///
 343/// This structure is used to store various DDC information that can be returned to the user.
 344/// Note that all fields of type int are actually defined as unsigned int types within the driver.
 345/// \nosubgrouping
 346////////////////////////////////////////////////////////////////////////////////////////////
 347typedef struct ADLDDCInfo2
 348{
 349/// Size of the structure
 350    int  ulSize;
 351/// Indicates whether the attached display supports DDC. If this field is zero on return, no other DDC
 352/// information fields will be used.
 353    int  ulSupportsDDC;
 354/// Returns the manufacturer ID of the display device. Should be zeroed if this information is not available.
 355    int  ulManufacturerID;
 356/// Returns the product ID of the display device. Should be zeroed if this information is not available.
 357    int  ulProductID;
 358/// Returns the name of the display device. Should be zeroed if this information is not available.
 359    char cDisplayName[ADL_MAX_DISPLAY_NAME];
 360/// Returns the maximum Horizontal supported resolution. Should be zeroed if this information is not available.
 361    int  ulMaxHResolution;
 362/// Returns the maximum Vertical supported resolution. Should be zeroed if this information is not available.
 363    int  ulMaxVResolution;
 364/// Returns the maximum supported refresh rate. Should be zeroed if this information is not available.
 365    int  ulMaxRefresh;
 366/// Returns the display device preferred timing mode's horizontal resolution.
 367    int  ulPTMCx;
 368/// Returns the display device preferred timing mode's vertical resolution.
 369    int  ulPTMCy;
 370/// Returns the display device preferred timing mode's refresh rate.
 371    int  ulPTMRefreshRate;
 372/// Return EDID flags.
 373    int  ulDDCInfoFlag;
 374/// Returns 1 if the display supported packed pixel, 0 otherwise
 375    int bPackedPixelSupported;
 376/// Returns the Pixel formats the display supports \ref define_ddcinfo_pixelformats
 377    int iPanelPixelFormat;
 378/// Return EDID serial ID.
 379    int  ulSerialID;
 380/// Return minimum monitor luminance data
 381    int ulMinLuminanceData;
 382/// Return average monitor luminance data
 383    int ulAvgLuminanceData;
 384/// Return maximum monitor luminance data
 385    int ulMaxLuminanceData;
 386
 387/// Bit vector of supported transfer functions \ref define_source_content_TF
 388    int iSupportedTransferFunction;
 389
 390/// Bit vector of supported color spaces \ref define_source_content_CS
 391    int iSupportedColorSpace;
 392
 393/// Display Red Chromaticity X coordinate multiplied by 10000
 394    int iNativeDisplayChromaticityRedX;
 395/// Display Red Chromaticity Y coordinate multiplied by 10000
 396    int iNativeDisplayChromaticityRedY;
 397/// Display Green Chromaticity X coordinate multiplied by 10000
 398    int iNativeDisplayChromaticityGreenX;
 399/// Display Green Chromaticity Y coordinate multiplied by 10000
 400    int iNativeDisplayChromaticityGreenY;
 401/// Display Blue Chromaticity X coordinate multiplied by 10000
 402    int iNativeDisplayChromaticityBlueX;
 403/// Display Blue Chromaticity Y coordinate multiplied by 10000
 404    int iNativeDisplayChromaticityBlueY;
 405/// Display White Point X coordinate multiplied by 10000
 406    int iNativeDisplayChromaticityWhitePointX;
 407/// Display White Point Y coordinate multiplied by 10000
 408    int iNativeDisplayChromaticityWhitePointY;
 409/// Display diffuse screen reflectance 0-1 (100%) in units of 0.01
 410    int iDiffuseScreenReflectance;
 411/// Display specular screen reflectance 0-1 (100%) in units of 0.01
 412    int iSpecularScreenReflectance;
 413/// Bit vector of supported color spaces \ref define_HDR_support
 414    int iSupportedHDR;
 415/// Bit vector for freesync flags
 416    int iFreesyncFlags;
 417
 418/// Return minimum monitor luminance without dimming data
 419    int ulMinLuminanceNoDimmingData;
 420
 421    int ulMaxBacklightMaxLuminanceData;
 422    int ulMinBacklightMaxLuminanceData;
 423    int ulMaxBacklightMinLuminanceData;
 424    int ulMinBacklightMinLuminanceData;
 425
 426    // Display screen width/height
 427    int ulScreenWidth;
 428    int ulScreenHeight;
 429
 430    // Reserved for future use
 431    int iReserved[2];
 432} ADLDDCInfo2, *LPADLDDCInfo2;
 433
 434/////////////////////////////////////////////////////////////////////////////////////////////
 435///\brief Structure containing information controller Gamma settings.
 436///
 437/// This structure is used to store the red, green and blue color channel information for the.
 438/// controller gamma setting. This information is returned by ADL, and it can also be used to
 439/// set the controller gamma setting.
 440/// \nosubgrouping
 441////////////////////////////////////////////////////////////////////////////////////////////
 442typedef struct ADLGamma
 443{
 444/// Red color channel gamma value.
 445    float fRed;
 446/// Green color channel gamma value.
 447    float fGreen;
 448/// Blue color channel gamma value.
 449    float fBlue;
 450} ADLGamma, *LPADLGamma;
 451
 452/////////////////////////////////////////////////////////////////////////////////////////////
 453///\brief Structure containing information about component video custom modes.
 454///
 455/// This structure is used to store the component video custom mode.
 456/// \nosubgrouping
 457////////////////////////////////////////////////////////////////////////////////////////////
 458typedef struct ADLCustomMode
 459{
 460/// Custom mode flags.  They are returned by the ADL driver.
 461    int iFlags;
 462/// Custom mode width.
 463    int iModeWidth;
 464/// Custom mode height.
 465    int iModeHeight;
 466/// Custom mode base width.
 467    int iBaseModeWidth;
 468/// Custom mode base height.
 469    int iBaseModeHeight;
 470/// Custom mode refresh rate.
 471    int iRefreshRate;
 472} ADLCustomMode, *LPADLCustomMode;
 473
 474/////////////////////////////////////////////////////////////////////////////////////////////
 475///\brief Structure containing Clock information for OD5 calls.
 476///
 477/// This structure is used to retrieve clock information for OD5 calls.
 478/// \nosubgrouping
 479////////////////////////////////////////////////////////////////////////////////////////////
 480typedef struct ADLGetClocksOUT
 481{
 482    long ulHighCoreClock;
 483    long ulHighMemoryClock;
 484    long ulHighVddc;
 485    long ulCoreMin;
 486    long ulCoreMax;
 487    long ulMemoryMin;
 488    long ulMemoryMax;
 489    long ulActivityPercent;
 490    long ulCurrentCoreClock;
 491    long ulCurrentMemoryClock;
 492    long ulReserved;
 493} ADLGetClocksOUT;
 494
 495/////////////////////////////////////////////////////////////////////////////////////////////
 496///\brief Structure containing HDTV information for display calls.
 497///
 498/// This structure is used to retrieve HDTV information information for display calls.
 499/// \nosubgrouping
 500////////////////////////////////////////////////////////////////////////////////////////////
 501typedef struct ADLDisplayConfig
 502{
 503/// Size of the structure
 504  long ulSize;
 505/// HDTV connector type.
 506  long ulConnectorType;
 507/// HDTV capabilities.
 508  long ulDeviceData;
 509/// Overridden HDTV capabilities.
 510  long ulOverridedDeviceData;
 511/// Reserved field
 512  long ulReserved;
 513} ADLDisplayConfig;
 514
 515/////////////////////////////////////////////////////////////////////////////////////////////
 516///\brief Structure containing information about the display device.
 517///
 518/// This structure is used to store display device information
 519/// such as display index, type, name, connection status, mapped adapter and controller indexes,
 520/// whether or not multiple VPUs are supported, local display connections or not (through Lasso), etc.
 521/// This information can be returned to the user. Alternatively, it can be used to access various driver calls to set
 522/// or fetch various display device related settings upon the user's request.
 523/// \nosubgrouping
 524////////////////////////////////////////////////////////////////////////////////////////////
 525typedef struct ADLDisplayID
 526{
 527/// The logical display index belonging to this adapter.
 528    int iDisplayLogicalIndex;
 529
 530///\brief The physical display index.
 531/// For example, display index 2 from adapter 2 can be used by current adapter 1.\n
 532/// So current adapter may enumerate this adapter as logical display 7 but the physical display
 533/// index is still 2.
 534    int iDisplayPhysicalIndex;
 535
 536/// The persistent logical adapter index for the display.
 537    int iDisplayLogicalAdapterIndex;
 538
 539///\brief The persistent physical adapter index for the display.
 540/// It can be the current adapter or a non-local adapter. \n
 541/// If this adapter index is different than the current adapter,
 542/// the Display Non Local flag is set inside DisplayInfoValue.
 543    int iDisplayPhysicalAdapterIndex;
 544} ADLDisplayID, *LPADLDisplayID;
 545
 546/////////////////////////////////////////////////////////////////////////////////////////////
 547///\brief Structure containing information about the display device.
 548///
 549/// This structure is used to store various information about the display device.  This
 550/// information can be returned to the user, or used to access various driver calls to set
 551/// or fetch various display-device-related settings upon the user's request
 552/// \nosubgrouping
 553////////////////////////////////////////////////////////////////////////////////////////////
 554typedef struct ADLDisplayInfo
 555{
 556/// The DisplayID structure
 557    ADLDisplayID displayID;
 558
 559///\deprecated The controller index to which the display is mapped.\n Will not be used in the future\n
 560    int  iDisplayControllerIndex;
 561
 562/// The display's EDID name.
 563    char strDisplayName[ADL_MAX_PATH];
 564
 565/// The display's manufacturer name.
 566    char strDisplayManufacturerName[ADL_MAX_PATH];
 567
 568/// The Display type. For example: CRT, TV, CV, DFP.
 569    int  iDisplayType;
 570
 571/// The display output type. For example: HDMI, SVIDEO, COMPONMNET VIDEO.
 572    int  iDisplayOutputType;
 573
 574/// The connector type for the device.
 575    int  iDisplayConnector;
 576
 577///\brief The bit mask identifies the number of bits ADLDisplayInfo is currently using. \n
 578/// It will be the sum all the bit definitions in ADL_DISPLAY_DISPLAYINFO_xxx.
 579    int  iDisplayInfoMask;
 580
 581/// The bit mask identifies the display status. \ref define_displayinfomask
 582    int  iDisplayInfoValue;
 583} ADLDisplayInfo, *LPADLDisplayInfo;
 584
 585/////////////////////////////////////////////////////////////////////////////////////////////
 586///\brief Structure containing information about the display port MST device.
 587///
 588/// This structure is used to store various MST information about the display port device.  This
 589/// information can be returned to the user, or used to access various driver calls to
 590/// fetch various display-device-related settings upon the user's request
 591/// \nosubgrouping
 592////////////////////////////////////////////////////////////////////////////////////////////
 593typedef struct ADLDisplayDPMSTInfo
 594{
 595    /// The ADLDisplayID structure
 596    ADLDisplayID displayID;
 597
 598    /// total bandwidth available on the DP connector
 599    int    iTotalAvailableBandwidthInMpbs;
 600    /// bandwidth allocated to this display
 601    int    iAllocatedBandwidthInMbps;
 602
 603    // info from DAL DpMstSinkInfo
 604    /// string identifier for the display
 605    char    strGlobalUniqueIdentifier[ADL_MAX_PATH];
 606
 607    /// The link count of relative address, rad[0] upto rad[linkCount] are valid
 608    int        radLinkCount;
 609    /// The physical connector ID, used to identify the physical DP port
 610    int        iPhysicalConnectorID;
 611
 612    /// Relative address, address scheme starts from source side
 613    char    rad[ADL_MAX_RAD_LINK_COUNT];
 614} ADLDisplayDPMSTInfo, *LPADLDisplayDPMSTInfo;
 615
 616/////////////////////////////////////////////////////////////////////////////////////////////
 617///\brief Structure containing the display mode definition used per controller.
 618///
 619/// This structure is used to store the display mode definition used per controller.
 620/// \nosubgrouping
 621////////////////////////////////////////////////////////////////////////////////////////////
 622typedef struct ADLDisplayMode
 623{
 624/// Vertical resolution (in pixels).
 625   int  iPelsHeight;
 626/// Horizontal resolution (in pixels).
 627   int  iPelsWidth;
 628/// Color depth.
 629   int  iBitsPerPel;
 630/// Refresh rate.
 631   int  iDisplayFrequency;
 632} ADLDisplayMode;
 633
 634/////////////////////////////////////////////////////////////////////////////////////////////
 635///\brief Structure containing detailed timing parameters.
 636///
 637/// This structure is used to store the detailed timing parameters.
 638/// \nosubgrouping
 639////////////////////////////////////////////////////////////////////////////////////////////
 640typedef struct ADLDetailedTiming
 641{
 642/// Size of the structure.
 643     int   iSize;
 644/// Timing flags. \ref define_detailed_timing_flags
 645     short sTimingFlags;
 646/// Total width (columns).
 647     short sHTotal;
 648/// Displayed width.
 649     short sHDisplay;
 650/// Horizontal sync signal offset.
 651     short sHSyncStart;
 652/// Horizontal sync signal width.
 653     short sHSyncWidth;
 654/// Total height (rows).
 655     short sVTotal;
 656/// Displayed height.
 657     short sVDisplay;
 658/// Vertical sync signal offset.
 659     short sVSyncStart;
 660/// Vertical sync signal width.
 661     short sVSyncWidth;
 662/// Pixel clock value.
 663     short sPixelClock;
 664/// Overscan right.
 665     short sHOverscanRight;
 666/// Overscan left.
 667     short sHOverscanLeft;
 668/// Overscan bottom.
 669     short sVOverscanBottom;
 670/// Overscan top.
 671     short sVOverscanTop;
 672     short sOverscan8B;
 673     short sOverscanGR;
 674} ADLDetailedTiming;
 675
 676/////////////////////////////////////////////////////////////////////////////////////////////
 677///\brief Structure containing display mode information.
 678///
 679/// This structure is used to store the display mode information.
 680/// \nosubgrouping
 681////////////////////////////////////////////////////////////////////////////////////////////
 682typedef struct ADLDisplayModeInfo
 683{
 684/// Timing standard of the current mode. \ref define_modetiming_standard
 685  int  iTimingStandard;
 686/// Applicable timing standards for the current mode.
 687  int  iPossibleStandard;
 688/// Refresh rate factor.
 689  int  iRefreshRate;
 690/// Num of pixels in a row.
 691  int  iPelsWidth;
 692/// Num of pixels in a column.
 693  int  iPelsHeight;
 694/// Detailed timing parameters.
 695  ADLDetailedTiming  sDetailedTiming;
 696} ADLDisplayModeInfo;
 697
 698/////////////////////////////////////////////////////////////////////////////////////////////
 699/// \brief Structure containing information about display property.
 700///
 701/// This structure is used to store the display property for the current adapter.
 702/// \nosubgrouping
 703////////////////////////////////////////////////////////////////////////////////////////////
 704typedef struct ADLDisplayProperty
 705{
 706/// Must be set to sizeof the structure
 707  int iSize;
 708/// Must be set to \ref ADL_DL_DISPLAYPROPERTY_TYPE_EXPANSIONMODE or \ref ADL_DL_DISPLAYPROPERTY_TYPE_USEUNDERSCANSCALING
 709  int iPropertyType;
 710/// Get or Set \ref ADL_DL_DISPLAYPROPERTY_EXPANSIONMODE_CENTER or \ref ADL_DL_DISPLAYPROPERTY_EXPANSIONMODE_FULLSCREEN or \ref ADL_DL_DISPLAYPROPERTY_EXPANSIONMODE_ASPECTRATIO or \ref ADL_DL_DISPLAYPROPERTY_TYPE_ITCFLAGENABLE
 711  int iExpansionMode;
 712/// Display Property supported? 1: Supported, 0: Not supported
 713  int iSupport;
 714/// Display Property current value
 715  int iCurrent;
 716/// Display Property Default value
 717  int iDefault;
 718} ADLDisplayProperty;
 719
 720/////////////////////////////////////////////////////////////////////////////////////////////
 721///\brief Structure containing information about Clock.
 722///
 723/// This structure is used to store the clock information for the current adapter
 724/// such as core clock and memory clock info.
 725///\nosubgrouping
 726////////////////////////////////////////////////////////////////////////////////////////////
 727typedef struct ADLClockInfo
 728{
 729/// Core clock in 10 KHz.
 730    int iCoreClock;
 731/// Memory clock in 10 KHz.
 732    int iMemoryClock;
 733} ADLClockInfo, *LPADLClockInfo;
 734
 735/////////////////////////////////////////////////////////////////////////////////////////////
 736///\brief Structure containing information about I2C.
 737///
 738/// This structure is used to store the I2C information for the current adapter.
 739/// This structure is used by the ADL_Display_WriteAndReadI2C() function.
 740/// \nosubgrouping
 741////////////////////////////////////////////////////////////////////////////////////////////
 742typedef struct ADLI2C
 743{
 744/// Size of the structure
 745    int iSize;
 746/// Numerical value representing hardware I2C.
 747    int iLine;
 748/// The 7-bit I2C slave device address, shifted one bit to the left.
 749    int iAddress;
 750/// The offset of the data from the address.
 751    int iOffset;
 752/// Read from or write to slave device. \ref ADL_DL_I2C_ACTIONREAD or \ref ADL_DL_I2C_ACTIONWRITE or \ref ADL_DL_I2C_ACTIONREAD_REPEATEDSTART
 753    int iAction;
 754/// I2C clock speed in KHz.
 755    int iSpeed;
 756/// A numerical value representing the number of bytes to be sent or received on the I2C bus.
 757    int iDataSize;
 758/// Address of the characters which are to be sent or received on the I2C bus.
 759    char *pcData;
 760} ADLI2C;
 761
 762/////////////////////////////////////////////////////////////////////////////////////////////
 763///\brief Structure containing information about EDID data.
 764///
 765/// This structure is used to store the information about EDID data for the adapter.
 766/// This structure is used by the ADL_Display_EdidData_Get() and ADL_Display_EdidData_Set() functions.
 767/// \nosubgrouping
 768////////////////////////////////////////////////////////////////////////////////////////////
 769typedef struct ADLDisplayEDIDData
 770{
 771/// Size of the structure
 772  int iSize;
 773/// Set to 0
 774  int iFlag;
 775  /// Size of cEDIDData. Set by ADL_Display_EdidData_Get() upon return
 776  int iEDIDSize;
 777/// 0, 1 or 2. If set to 3 or above an error ADL_ERR_INVALID_PARAM is generated
 778  int iBlockIndex;
 779/// EDID data
 780  char cEDIDData[ADL_MAX_EDIDDATA_SIZE];
 781/// Reserved
 782  int iReserved[4];
 783}ADLDisplayEDIDData;
 784
 785/////////////////////////////////////////////////////////////////////////////////////////////
 786///\brief Structure containing information about input of controller overlay adjustment.
 787///
 788/// This structure is used to store the information about input of controller overlay adjustment for the adapter.
 789/// This structure is used by the ADL_Display_ControllerOverlayAdjustmentCaps_Get, ADL_Display_ControllerOverlayAdjustmentData_Get, and
 790/// ADL_Display_ControllerOverlayAdjustmentData_Set() functions.
 791/// \nosubgrouping
 792////////////////////////////////////////////////////////////////////////////////////////////
 793typedef struct ADLControllerOverlayInput
 794{
 795/// Should be set to the sizeof the structure
 796  int  iSize;
 797///\ref ADL_DL_CONTROLLER_OVERLAY_ALPHA or \ref ADL_DL_CONTROLLER_OVERLAY_ALPHAPERPIX
 798  int  iOverlayAdjust;
 799/// Data.
 800  int  iValue;
 801/// Should be 0.
 802  int  iReserved;
 803} ADLControllerOverlayInput;
 804
 805/////////////////////////////////////////////////////////////////////////////////////////////
 806///\brief Structure containing information about overlay adjustment.
 807///
 808/// This structure is used to store the information about overlay adjustment for the adapter.
 809/// This structure is used by the ADLControllerOverlayInfo() function.
 810/// \nosubgrouping
 811////////////////////////////////////////////////////////////////////////////////////////////
 812typedef struct ADLAdjustmentinfo
 813{
 814/// Default value
 815  int iDefault;
 816/// Minimum value
 817  int iMin;
 818/// Maximum Value
 819  int iMax;
 820/// Step value
 821  int iStep;
 822} ADLAdjustmentinfo;
 823
 824/////////////////////////////////////////////////////////////////////////////////////////////
 825///\brief Structure containing information about controller overlay information.
 826///
 827/// This structure is used to store information about controller overlay info for the adapter.
 828/// This structure is used by the ADL_Display_ControllerOverlayAdjustmentCaps_Get() function.
 829/// \nosubgrouping
 830////////////////////////////////////////////////////////////////////////////////////////////
 831typedef struct ADLControllerOverlayInfo
 832{
 833/// Should be set to the sizeof the structure
 834  int                    iSize;
 835/// Data.
 836  ADLAdjustmentinfo        sOverlayInfo;
 837/// Should be 0.
 838  int                    iReserved[3];
 839} ADLControllerOverlayInfo;
 840
 841/////////////////////////////////////////////////////////////////////////////////////////////
 842///\brief Structure containing GL-Sync module information.
 843///
 844/// This structure is used to retrieve GL-Sync module information for
 845/// Workstation Framelock/Genlock.
 846/// \nosubgrouping
 847////////////////////////////////////////////////////////////////////////////////////////////
 848typedef struct ADLGLSyncModuleID
 849{
 850/// Unique GL-Sync module ID.
 851    int        iModuleID;
 852/// GL-Sync GPU port index (to be passed into ADLGLSyncGenlockConfig.lSignalSource and ADLGlSyncPortControl.lSignalSource).
 853    int        iGlSyncGPUPort;
 854/// GL-Sync module firmware version of Boot Sector.
 855    int        iFWBootSectorVersion;
 856/// GL-Sync module firmware version of User Sector.
 857    int        iFWUserSectorVersion;
 858} ADLGLSyncModuleID , *LPADLGLSyncModuleID;
 859
 860/////////////////////////////////////////////////////////////////////////////////////////////
 861///\brief Structure containing GL-Sync ports capabilities.
 862///
 863/// This structure is used to retrieve hardware capabilities for the ports of the GL-Sync module
 864/// for Workstation Framelock/Genlock (such as port type and number of associated LEDs).
 865/// \nosubgrouping
 866////////////////////////////////////////////////////////////////////////////////////////////
 867typedef struct ADLGLSyncPortCaps
 868{
 869/// Port type. Bitfield of ADL_GLSYNC_PORTTYPE_*  \ref define_glsync
 870    int        iPortType;
 871/// Number of LEDs associated for this port.
 872    int        iNumOfLEDs;
 873}ADLGLSyncPortCaps, *LPADLGLSyncPortCaps;
 874
 875/////////////////////////////////////////////////////////////////////////////////////////////
 876///\brief Structure containing GL-Sync Genlock settings.
 877///
 878/// This structure is used to get and set genlock settings for the GPU ports of the GL-Sync module
 879/// for Workstation Framelock/Genlock.\n
 880/// \see define_glsync
 881/// \nosubgrouping
 882////////////////////////////////////////////////////////////////////////////////////////////
 883typedef struct ADLGLSyncGenlockConfig
 884{
 885/// Specifies what fields in this structure are valid \ref define_glsync
 886    int        iValidMask;
 887/// Delay (ms) generating a sync signal.
 888    int        iSyncDelay;
 889/// Vector of framelock control bits. Bitfield of ADL_GLSYNC_FRAMELOCKCNTL_* \ref define_glsync
 890    int        iFramelockCntlVector;
 891/// Source of the sync signal. Either GL_Sync GPU Port index or ADL_GLSYNC_SIGNALSOURCE_* \ref define_glsync
 892    int        iSignalSource;
 893/// Use sampled sync signal. A value of 0 specifies no sampling.
 894    int        iSampleRate;
 895/// For interlaced sync signals, the value can be ADL_GLSYNC_SYNCFIELD_1 or *_BOTH \ref define_glsync
 896    int        iSyncField;
 897/// The signal edge that should trigger synchronization. ADL_GLSYNC_TRIGGEREDGE_* \ref define_glsync
 898    int        iTriggerEdge;
 899/// Scan rate multiplier applied to the sync signal. ADL_GLSYNC_SCANRATECOEFF_* \ref define_glsync
 900    int        iScanRateCoeff;
 901}ADLGLSyncGenlockConfig, *LPADLGLSyncGenlockConfig;
 902
 903/////////////////////////////////////////////////////////////////////////////////////////////
 904///\brief Structure containing GL-Sync port information.
 905///
 906/// This structure is used to get status of the GL-Sync ports (BNC or RJ45s)
 907/// for Workstation Framelock/Genlock.
 908/// \see define_glsync
 909/// \nosubgrouping
 910////////////////////////////////////////////////////////////////////////////////////////////
 911typedef struct ADLGlSyncPortInfo
 912{
 913/// Type of GL-Sync port (ADL_GLSYNC_PORT_*).
 914    int        iPortType;
 915/// The number of LEDs for this port. It's also filled within ADLGLSyncPortCaps.
 916    int        iNumOfLEDs;
 917/// Port state ADL_GLSYNC_PORTSTATE_*  \ref define_glsync
 918    int        iPortState;
 919/// Scanned frequency for this port (vertical refresh rate in milliHz; 60000 means 60 Hz).
 920    int        iFrequency;
 921/// Used for ADL_GLSYNC_PORT_BNC. It is ADL_GLSYNC_SIGNALTYPE_*   \ref define_glsync
 922    int        iSignalType;
 923/// Used for ADL_GLSYNC_PORT_RJ45PORT*. It is GL_Sync GPU Port index or ADL_GLSYNC_SIGNALSOURCE_*.  \ref define_glsync
 924    int        iSignalSource;
 925} ADLGlSyncPortInfo, *LPADLGlSyncPortInfo;
 926
 927/////////////////////////////////////////////////////////////////////////////////////////////
 928///\brief Structure containing GL-Sync port control settings.
 929///
 930/// This structure is used to configure the GL-Sync ports (RJ45s only)
 931/// for Workstation Framelock/Genlock.
 932/// \see define_glsync
 933/// \nosubgrouping
 934////////////////////////////////////////////////////////////////////////////////////////////
 935typedef struct ADLGlSyncPortControl
 936{
 937/// Port to control ADL_GLSYNC_PORT_RJ45PORT1 or ADL_GLSYNC_PORT_RJ45PORT2   \ref define_glsync
 938    int        iPortType;
 939/// Port control data ADL_GLSYNC_PORTCNTL_*   \ref define_glsync
 940    int        iControlVector;
 941/// Source of the sync signal. Either GL_Sync GPU Port index or ADL_GLSYNC_SIGNALSOURCE_*   \ref define_glsync
 942    int        iSignalSource;
 943} ADLGlSyncPortControl;
 944
 945/////////////////////////////////////////////////////////////////////////////////////////////
 946///\brief Structure containing GL-Sync mode of a display.
 947///
 948/// This structure is used to get and set GL-Sync mode settings for a display connected to
 949/// an adapter attached to a GL-Sync module for Workstation Framelock/Genlock.
 950/// \see define_glsync
 951/// \nosubgrouping
 952////////////////////////////////////////////////////////////////////////////////////////////
 953typedef struct ADLGlSyncMode
 954{
 955/// Mode control vector. Bitfield of ADL_GLSYNC_MODECNTL_*   \ref define_glsync
 956    int        iControlVector;
 957/// Mode status vector. Bitfield of ADL_GLSYNC_MODECNTL_STATUS_*   \ref define_glsync
 958    int        iStatusVector;
 959/// Index of GL-Sync connector used to genlock the display/controller.
 960    int        iGLSyncConnectorIndex;
 961} ADLGlSyncMode, *LPADLGlSyncMode;
 962
 963/////////////////////////////////////////////////////////////////////////////////////////////
 964///\brief Structure containing GL-Sync mode of a display.
 965///
 966/// This structure is used to get and set GL-Sync mode settings for a display connected to
 967/// an adapter attached to a GL-Sync module for Workstation Framelock/Genlock.
 968/// \see define_glsync
 969/// \nosubgrouping
 970////////////////////////////////////////////////////////////////////////////////////////////
 971typedef struct ADLGlSyncMode2
 972{
 973/// Mode control vector. Bitfield of ADL_GLSYNC_MODECNTL_*   \ref define_glsync
 974    int        iControlVector;
 975/// Mode status vector. Bitfield of ADL_GLSYNC_MODECNTL_STATUS_*   \ref define_glsync
 976    int        iStatusVector;
 977/// Index of GL-Sync connector used to genlock the display/controller.
 978    int        iGLSyncConnectorIndex;
 979/// Index of the display to which this GLSync applies to.
 980    int        iDisplayIndex;
 981} ADLGlSyncMode2, *LPADLGlSyncMode2;
 982
 983/////////////////////////////////////////////////////////////////////////////////////////////
 984///\brief Structure containing the packet info of a display.
 985///
 986/// This structure is used to get and set the packet information of a display.
 987/// This structure is used by ADLDisplayDataPacket.
 988/// \nosubgrouping
 989////////////////////////////////////////////////////////////////////////////////////////////
 990typedef struct  ADLInfoPacket
 991{
 992    char hb0;
 993    char hb1;
 994    char hb2;
 995/// sb0~sb27
 996    char sb[28];
 997}ADLInfoPacket;
 998
 999/////////////////////////////////////////////////////////////////////////////////////////////
1000///\brief Structure containing the AVI packet info of a display.
1001///
1002/// This structure is used to get and set AVI the packet info of a display.
1003/// This structure is used by ADLDisplayDataPacket.
1004/// \nosubgrouping
1005////////////////////////////////////////////////////////////////////////////////////////////
1006typedef struct ADLAVIInfoPacket  //Valid user defined data/
1007{
1008/// byte 3, bit 7
1009   char bPB3_ITC;
1010/// byte 5, bit [7:4].
1011   char bPB5;
1012}ADLAVIInfoPacket;
1013
1014// Overdrive clock setting structure definition.
1015
1016/////////////////////////////////////////////////////////////////////////////////////////////
1017///\brief Structure containing the Overdrive clock setting.
1018///
1019/// This structure is used to get the Overdrive clock setting.
1020/// This structure is used by ADLAdapterODClockInfo.
1021/// \nosubgrouping
1022////////////////////////////////////////////////////////////////////////////////////////////
1023typedef struct ADLODClockSetting
1024{
1025/// Deafult clock
1026    int iDefaultClock;
1027/// Current clock
1028    int iCurrentClock;
1029/// Maximum clcok
1030    int iMaxClock;
1031/// Minimum clock
1032    int iMinClock;
1033/// Requested clcock
1034    int iRequestedClock;
1035/// Step
1036    int iStepClock;
1037} ADLODClockSetting;
1038
1039/////////////////////////////////////////////////////////////////////////////////////////////
1040///\brief Structure containing the Overdrive clock information.
1041///
1042/// This structure is used to get the Overdrive clock information.
1043/// This structure is used by the ADL_Display_ODClockInfo_Get() function.
1044/// \nosubgrouping
1045////////////////////////////////////////////////////////////////////////////////////////////
1046typedef struct ADLAdapterODClockInfo
1047{
1048/// Size of the structure
1049    int iSize;
1050/// Flag \ref define_clockinfo_flags
1051    int iFlags;
1052/// Memory Clock
1053    ADLODClockSetting sMemoryClock;
1054/// Engine Clock
1055    ADLODClockSetting sEngineClock;
1056} ADLAdapterODClockInfo;
1057
1058/////////////////////////////////////////////////////////////////////////////////////////////
1059///\brief Structure containing the Overdrive clock configuration.
1060///
1061/// This structure is used to set the Overdrive clock configuration.
1062/// This structure is used by the ADL_Display_ODClockConfig_Set() function.
1063/// \nosubgrouping
1064////////////////////////////////////////////////////////////////////////////////////////////
1065typedef struct ADLAdapterODClockConfig
1066{
1067/// Size of the structure
1068  int iSize;
1069/// Flag \ref define_clockinfo_flags
1070  int iFlags;
1071/// Memory Clock
1072  int iMemoryClock;
1073/// Engine Clock
1074  int iEngineClock;
1075} ADLAdapterODClockConfig;
1076
1077/////////////////////////////////////////////////////////////////////////////////////////////
1078///\brief Structure containing information about current power management related activity.
1079///
1080/// This structure is used to store information about current power management related activity.
1081/// This structure (Overdrive 5 interfaces) is used by the ADL_PM_CurrentActivity_Get() function.
1082/// \nosubgrouping
1083////////////////////////////////////////////////////////////////////////////////////////////
1084typedef struct ADLPMActivity
1085{
1086/// Must be set to the size of the structure
1087    int iSize;
1088/// Current engine clock.
1089    int iEngineClock;
1090/// Current memory clock.
1091    int iMemoryClock;
1092/// Current core voltage.
1093    int iVddc;
1094/// GPU utilization.
1095    int iActivityPercent;
1096/// Performance level index.
1097    int iCurrentPerformanceLevel;
1098/// Current PCIE bus speed.
1099    int iCurrentBusSpeed;
1100/// Number of PCIE bus lanes.
1101    int iCurrentBusLanes;
1102/// Maximum number of PCIE bus lanes.
1103    int iMaximumBusLanes;
1104/// Reserved for future purposes.
1105    int iReserved;
1106} ADLPMActivity;
1107
1108/////////////////////////////////////////////////////////////////////////////////////////////
1109///\brief Structure containing information about thermal controller.
1110///
1111/// This structure is used to store information about thermal controller.
1112/// This structure is used by ADL_PM_ThermalDevices_Enum.
1113/// \nosubgrouping
1114////////////////////////////////////////////////////////////////////////////////////////////
1115typedef struct ADLThermalControllerInfo
1116{
1117/// Must be set to the size of the structure
1118  int iSize;
1119/// Possible valies: \ref ADL_DL_THERMAL_DOMAIN_OTHER or \ref ADL_DL_THERMAL_DOMAIN_GPU.
1120  int iThermalDomain;
1121///    GPU 0, 1, etc.
1122  int iDomainIndex;
1123/// Possible valies: \ref ADL_DL_THERMAL_FLAG_INTERRUPT or \ref ADL_DL_THERMAL_FLAG_FANCONTROL
1124  int iFlags;
1125} ADLThermalControllerInfo;
1126
1127/////////////////////////////////////////////////////////////////////////////////////////////
1128///\brief Structure containing information about thermal controller temperature.
1129///
1130/// This structure is used to store information about thermal controller temperature.
1131/// This structure is used by the ADL_PM_Temperature_Get() function.
1132/// \nosubgrouping
1133////////////////////////////////////////////////////////////////////////////////////////////
1134typedef struct ADLTemperature
1135{
1136/// Must be set to the size of the structure
1137  int iSize;
1138/// Temperature in millidegrees Celsius.
1139  int iTemperature;
1140} ADLTemperature;
1141
1142/////////////////////////////////////////////////////////////////////////////////////////////
1143///\brief Structure containing information about thermal controller fan speed.
1144///
1145/// This structure is used to store information about thermal controller fan speed.
1146/// This structure is used by the ADL_PM_FanSpeedInfo_Get() function.
1147/// \nosubgrouping
1148////////////////////////////////////////////////////////////////////////////////////////////
1149typedef struct ADLFanSpeedInfo
1150{
1151/// Must be set to the size of the structure
1152  int iSize;
1153/// \ref define_fanctrl
1154  int iFlags;
1155/// Minimum possible fan speed value in percents.
1156  int iMinPercent;
1157/// Maximum possible fan speed value in percents.
1158  int iMaxPercent;
1159/// Minimum possible fan speed value in RPM.
1160  int iMinRPM;
1161/// Maximum possible fan speed value in RPM.
1162  int iMaxRPM;
1163} ADLFanSpeedInfo;
1164
1165/////////////////////////////////////////////////////////////////////////////////////////////
1166///\brief Structure containing information about fan speed reported by thermal controller.
1167///
1168/// This structure is used to store information about fan speed reported by thermal controller.
1169/// This structure is used by the ADL_Overdrive5_FanSpeed_Get() and ADL_Overdrive5_FanSpeed_Set() functions.
1170/// \nosubgrouping
1171////////////////////////////////////////////////////////////////////////////////////////////
1172typedef struct ADLFanSpeedValue
1173{
1174/// Must be set to the size of the structure
1175  int iSize;
1176/// Possible valies: \ref ADL_DL_FANCTRL_SPEED_TYPE_PERCENT or \ref ADL_DL_FANCTRL_SPEED_TYPE_RPM
1177  int iSpeedType;
1178/// Fan speed value
1179  int iFanSpeed;
1180/// The only flag for now is: \ref ADL_DL_FANCTRL_FLAG_USER_DEFINED_SPEED
1181  int iFlags;
1182} ADLFanSpeedValue;
1183
1184////////////////////////////////////////////////////////////////////////////////////////////
1185///\brief Structure containing the range of Overdrive parameter.
1186///
1187/// This structure is used to store information about the range of Overdrive parameter.
1188/// This structure is used by ADLODParameters.
1189/// \nosubgrouping
1190////////////////////////////////////////////////////////////////////////////////////////////
1191typedef struct ADLODParameterRange
1192{
1193/// Minimum parameter value.
1194  int iMin;
1195/// Maximum parameter value.
1196  int iMax;
1197/// Parameter step value.
1198  int iStep;
1199} ADLODParameterRange;
1200
1201/////////////////////////////////////////////////////////////////////////////////////////////
1202///\brief Structure containing information about Overdrive parameters.
1203///
1204/// This structure is used to store information about Overdrive parameters.
1205/// This structure is used by the ADL_Overdrive5_ODParameters_Get() function.
1206/// \nosubgrouping
1207////////////////////////////////////////////////////////////////////////////////////////////
1208typedef struct ADLODParameters
1209{
1210/// Must be set to the size of the structure
1211  int iSize;
1212/// Number of standard performance states.
1213  int iNumberOfPerformanceLevels;
1214/// Indicates whether the GPU is capable to measure its activity.
1215  int iActivityReportingSupported;
1216/// Indicates whether the GPU supports discrete performance levels or performance range.
1217  int iDiscretePerformanceLevels;
1218/// Reserved for future use.
1219  int iReserved;
1220/// Engine clock range.
1221  ADLODParameterRange sEngineClock;
1222/// Memory clock range.
1223  ADLODParameterRange sMemoryClock;
1224/// Core voltage range.
1225  ADLODParameterRange sVddc;
1226} ADLODParameters;
1227
1228/////////////////////////////////////////////////////////////////////////////////////////////
1229///\brief Structure containing information about Overdrive level.
1230///
1231/// This structure is used to store information about Overdrive level.
1232/// This structure is used by ADLODPerformanceLevels.
1233/// \nosubgrouping
1234////////////////////////////////////////////////////////////////////////////////////////////
1235typedef struct ADLODPerformanceLevel
1236{
1237/// Engine clock.
1238  int iEngineClock;
1239/// Memory clock.
1240  int iMemoryClock;
1241/// Core voltage.
1242  int iVddc;
1243} ADLODPerformanceLevel;
1244
1245/////////////////////////////////////////////////////////////////////////////////////////////
1246///\brief Structure containing information about Overdrive performance levels.
1247///
1248/// This structure is used to store information about Overdrive performance levels.
1249/// This structure is used by the ADL_Overdrive5_ODPerformanceLevels_Get() and ADL_Overdrive5_ODPerformanceLevels_Set() functions.
1250/// \nosubgrouping
1251////////////////////////////////////////////////////////////////////////////////////////////
1252typedef struct ADLODPerformanceLevels
1253{
1254/// Must be set to sizeof( \ref ADLODPerformanceLevels ) + sizeof( \ref ADLODPerformanceLevel ) * (ADLODParameters.iNumberOfPerformanceLevels - 1)
1255  int iSize;
1256  int iReserved;
1257/// Array of performance state descriptors. Must have ADLODParameters.iNumberOfPerformanceLevels elements.
1258  ADLODPerformanceLevel aLevels [1];
1259} ADLODPerformanceLevels;
1260
1261/////////////////////////////////////////////////////////////////////////////////////////////
1262///\brief Structure containing information about the proper CrossfireX chains combinations.
1263///
1264/// This structure is used to store information about the CrossfireX chains combination for a particular adapter.
1265/// This structure is used by the ADL_Adapter_Crossfire_Caps(), ADL_Adapter_Crossfire_Get(), and ADL_Adapter_Crossfire_Set() functions.
1266/// \nosubgrouping
1267////////////////////////////////////////////////////////////////////////////////////////////
1268typedef struct ADLCrossfireComb
1269{
1270/// Number of adapters in this combination.
1271  int iNumLinkAdapter;
1272/// A list of ADL indexes of the linked adapters in this combination.
1273  int iAdaptLink[3];
1274} ADLCrossfireComb;
1275
1276/////////////////////////////////////////////////////////////////////////////////////////////
1277///\brief Structure containing CrossfireX state and error information.
1278///
1279/// This structure is used to store state and error information about a particular adapter CrossfireX combination.
1280/// This structure is used by the ADL_Adapter_Crossfire_Get() function.
1281/// \nosubgrouping
1282////////////////////////////////////////////////////////////////////////////////////////////
1283typedef struct ADLCrossfireInfo
1284{
1285/// Current error code of this CrossfireX combination.
1286  int iErrorCode;
1287/// Current \ref define_crossfirestate
1288  int iState;
1289/// If CrossfireX is supported by this combination. The value is either \ref ADL_TRUE or \ref ADL_FALSE.
1290  int iSupported;
1291} ADLCrossfireInfo;
1292
1293/////////////////////////////////////////////////////////////////////////////////////////////
1294/// \brief Structure containing information about the BIOS.
1295///
1296/// This structure is used to store various information about the Chipset.  This
1297/// information can be returned to the user.
1298/// \nosubgrouping
1299////////////////////////////////////////////////////////////////////////////////////////////
1300typedef struct ADLBiosInfo
1301{
1302    char strPartNumber[ADL_MAX_PATH];    ///< Part number.
1303    char strVersion[ADL_MAX_PATH];        ///< Version number.
1304    char strDate[ADL_MAX_PATH];        ///< BIOS date in yyyy/mm/dd hh:mm format.
1305} ADLBiosInfo, *LPADLBiosInfo;
1306
1307/////////////////////////////////////////////////////////////////////////////////////////////
1308/// \brief Structure containing information about adapter location.
1309///
1310/// This structure is used to store information about adapter location.
1311/// This structure is used by ADLMVPUStatus.
1312/// \nosubgrouping
1313////////////////////////////////////////////////////////////////////////////////////////////
1314typedef struct ADLAdapterLocation
1315{
1316/// PCI Bus number : 8 bits
1317    int iBus;
1318/// Device number : 5 bits
1319    int iDevice;
1320/// Function number : 3 bits
1321    int iFunction;
1322} ADLAdapterLocation,ADLBdf;
1323
1324/////////////////////////////////////////////////////////////////////////////////////////////
1325/// \brief Structure containing version information
1326///
1327/// This structure is used to store software version information, description of the display device and a web link to the latest installed Catalyst drivers.
1328/// \nosubgrouping
1329////////////////////////////////////////////////////////////////////////////////////////////
1330typedef struct ADLVersionsInfo
1331{
1332    /// Driver Release (Packaging) Version (e.g. 8.71-100128n-094835E-ATI)
1333    char strDriverVer[ADL_MAX_PATH];
1334    /// Catalyst Version(e.g. "10.1").
1335    char strCatalystVersion[ADL_MAX_PATH];
1336    /// Web link to an XML file with information about the latest AMD drivers and locations (e.g. "http://www.amd.com/us/driverxml" )
1337    char strCatalystWebLink[ADL_MAX_PATH];
1338} ADLVersionsInfo, *LPADLVersionsInfo;
1339
1340/////////////////////////////////////////////////////////////////////////////////////////////
1341/// \brief Structure containing version information
1342///
1343/// This structure is used to store software version information, description of the display device and a web link to the latest installed Catalyst drivers.
1344/// \nosubgrouping
1345////////////////////////////////////////////////////////////////////////////////////////////
1346typedef struct ADLVersionsInfoX2
1347{
1348    /// Driver Release (Packaging) Version (e.g. "16.20.1035-160621a-303814C")
1349    char strDriverVer[ADL_MAX_PATH];
1350    /// Catalyst Version(e.g. "15.8").
1351    char strCatalystVersion[ADL_MAX_PATH];
1352    /// Crimson Version(e.g. "16.6.2").
1353    char strCrimsonVersion[ADL_MAX_PATH];
1354    /// Web link to an XML file with information about the latest AMD drivers and locations (e.g. "http://support.amd.com/drivers/xml/driver_09_us.xml" )
1355    char strCatalystWebLink[ADL_MAX_PATH];
1356} ADLVersionsInfoX2, *LPADLVersionsInfoX2;
1357
1358/////////////////////////////////////////////////////////////////////////////////////////////
1359/// \brief Structure containing information about MultiVPU capabilities.
1360///
1361/// This structure is used to store information about MultiVPU capabilities.
1362/// This structure is used by the ADL_Display_MVPUCaps_Get() function.
1363/// \nosubgrouping
1364////////////////////////////////////////////////////////////////////////////////////////////
1365typedef struct ADLMVPUCaps
1366{
1367/// Must be set to sizeof( ADLMVPUCaps ).
1368  int iSize;
1369/// Number of adapters.
1370  int iAdapterCount;
1371/// Bits set for all possible MVPU masters. \ref MVPU_ADAPTER_0 .. \ref MVPU_ADAPTER_3
1372  int iPossibleMVPUMasters;
1373/// Bits set for all possible MVPU slaves. \ref MVPU_ADAPTER_0 .. \ref MVPU_ADAPTER_3
1374  int iPossibleMVPUSlaves;
1375/// Registry path for each adapter.
1376  char cAdapterPath[ADL_DL_MAX_MVPU_ADAPTERS][ADL_DL_MAX_REGISTRY_PATH];
1377} ADLMVPUCaps;
1378
1379/////////////////////////////////////////////////////////////////////////////////////////////
1380/// \brief Structure containing information about MultiVPU status.
1381///
1382/// This structure is used to store information about MultiVPU status.
1383/// Ths structure is used by the ADL_Display_MVPUStatus_Get() function.
1384/// \nosubgrouping
1385////////////////////////////////////////////////////////////////////////////////////////////
1386typedef struct ADLMVPUStatus
1387{
1388/// Must be set to sizeof( ADLMVPUStatus ).
1389  int iSize;
1390/// Number of active adapters.
1391  int iActiveAdapterCount;
1392/// MVPU status.
1393  int iStatus;
1394/// PCI Bus/Device/Function for each active adapter participating in MVPU.
1395  ADLAdapterLocation aAdapterLocation[ADL_DL_MAX_MVPU_ADAPTERS];
1396} ADLMVPUStatus;
1397
1398// Displays Manager structures
1399
1400///////////////////////////////////////////////////////////////////////////
1401/// \brief Structure containing information about the activatable source.
1402///
1403/// This structure is used to store activatable source information
1404/// This information can be returned to the user.
1405/// \nosubgrouping
1406////////////////////////////////////////////////////////////////////////////////////////////
1407typedef struct ADLActivatableSource
1408{
1409    /// The Persistent logical Adapter Index.
1410    int iAdapterIndex;
1411    /// The number of Activatable Sources.
1412    int iNumActivatableSources;
1413    /// The bit mask identifies the number of bits ActivatableSourceValue is using. (Not currnetly used)
1414    int iActivatableSourceMask;
1415    /// The bit mask identifies the status.  (Not currnetly used)
1416    int iActivatableSourceValue;
1417} ADLActivatableSource, *LPADLActivatableSource;
1418
1419/////////////////////////////////////////////////////////////////////////////////////////////
1420/// \brief Structure containing information about display mode.
1421///
1422/// This structure is used to store the display mode for the current adapter
1423/// such as X, Y positions, screen resolutions, orientation,
1424/// color depth, refresh rate, progressive or interlace mode, etc.
1425/// \nosubgrouping
1426////////////////////////////////////////////////////////////////////////////////////////////
1427
1428typedef struct ADLMode
1429{
1430/// Adapter index.
1431    int iAdapterIndex;
1432/// Display IDs.
1433    ADLDisplayID displayID;
1434/// Screen position X coordinate.
1435    int iXPos;
1436/// Screen position Y coordinate.
1437    int iYPos;
1438/// Screen resolution Width.
1439    int iXRes;
1440/// Screen resolution Height.
1441    int iYRes;
1442/// Screen Color Depth. E.g., 16, 32.
1443    int iColourDepth;
1444/// Screen refresh rate. Could be fractional E.g. 59.97
1445    float fRefreshRate;
1446/// Screen orientation. E.g., 0, 90, 180, 270.
1447    int iOrientation;
1448/// Vista mode flag indicating Progressive or Interlaced mode.
1449    int iModeFlag;
1450/// The bit mask identifying the number of bits this Mode is currently using. It is the sum of all the bit definitions defined in \ref define_displaymode
1451    int iModeMask;
1452/// The bit mask identifying the display status. The detailed definition is in  \ref define_displaymode
1453    int iModeValue;
1454} ADLMode, *LPADLMode;
1455
1456/////////////////////////////////////////////////////////////////////////////////////////////
1457/// \brief Structure containing information about display target information.
1458///
1459/// This structure is used to store the display target information.
1460/// \nosubgrouping
1461////////////////////////////////////////////////////////////////////////////////////////////
1462typedef struct ADLDisplayTarget
1463{
1464    /// The Display ID.
1465    ADLDisplayID displayID;
1466
1467    /// The display map index identify this manner and the desktop surface.
1468    int iDisplayMapIndex;
1469
1470    /// The bit mask identifies the number of bits DisplayTarget is currently using. It is the sum of all the bit definitions defined in \ref ADL_DISPLAY_DISPLAYTARGET_PREFERRED.
1471    int  iDisplayTargetMask;
1472
1473    /// The bit mask identifies the display status. The detailed definition is in \ref ADL_DISPLAY_DISPLAYTARGET_PREFERRED.
1474    int  iDisplayTargetValue;
1475} ADLDisplayTarget, *LPADLDisplayTarget;
1476
1477/////////////////////////////////////////////////////////////////////////////////////////////
1478///\brief Structure containing information about the display SLS bezel Mode information.
1479///
1480/// This structure is used to store the display SLS bezel Mode information.
1481/// \nosubgrouping
1482////////////////////////////////////////////////////////////////////////////////////////////
1483typedef struct tagADLBezelTransientMode
1484{
1485    /// Adapter Index
1486    int iAdapterIndex;
1487
1488    /// SLS Map Index
1489    int iSLSMapIndex;
1490
1491    /// The mode index
1492    int iSLSModeIndex;
1493
1494    /// The mode
1495    ADLMode displayMode;
1496
1497    /// The number of bezel offsets belongs to this map
1498    int  iNumBezelOffset;
1499
1500    /// The first bezel offset array index in the native mode array
1501    int  iFirstBezelOffsetArrayIndex;
1502
1503    /// The bit mask identifies the bits this structure is currently using. It will be the total OR of all the bit definitions.
1504    int  iSLSBezelTransientModeMask;
1505
1506    /// The bit mask identifies the display status. The detail definition is defined below.
1507    int  iSLSBezelTransientModeValue;
1508} ADLBezelTransientMode, *LPADLBezelTransientMode;
1509
1510/////////////////////////////////////////////////////////////////////////////////////////////
1511/// \brief Structure containing information about the adapter display manner.
1512///
1513/// This structure is used to store adapter display manner information
1514/// This information can be returned to the user. Alternatively, it can be used to access various driver calls to
1515/// fetch various display device related display manner settings upon the user's request.
1516/// \nosubgrouping
1517////////////////////////////////////////////////////////////////////////////////////////////
1518typedef struct ADLAdapterDisplayCap
1519{
1520    /// The Persistent logical Adapter Index.
1521    int iAdapterIndex;
1522    /// The bit mask identifies the number of bits AdapterDisplayCap is currently using. Sum all the bits defined in ADL_ADAPTER_DISPLAYCAP_XXX
1523    int  iAdapterDisplayCapMask;
1524    /// The bit mask identifies the status. Refer to ADL_ADAPTER_DISPLAYCAP_XXX
1525    int  iAdapterDisplayCapValue;
1526} ADLAdapterDisplayCap, *LPADLAdapterDisplayCap;
1527
1528/////////////////////////////////////////////////////////////////////////////////////////////
1529///\brief Structure containing information about display mapping.
1530///
1531/// This structure is used to store the display mapping data such as display manner.
1532/// For displays with horizontal or vertical stretch manner,
1533/// this structure also stores the display order, display row, and column data.
1534/// \nosubgrouping
1535////////////////////////////////////////////////////////////////////////////////////////////
1536typedef struct ADLDisplayMap
1537{
1538/// The current display map index. It is the OS desktop index. For example, if the OS index 1 is showing clone mode, the display map will be 1.
1539    int iDisplayMapIndex;
1540
1541/// The Display Mode for the current map
1542    ADLMode displayMode;
1543
1544/// The number of display targets belongs to this map\n
1545    int iNumDisplayTarget;
1546
1547/// The first target array index in the Target array\n
1548    int iFirstDisplayTargetArrayIndex;
1549
1550/// The bit mask identifies the number of bits DisplayMap is currently using. It is the sum of all the bit definitions defined in ADL_DISPLAY_DISPLAYMAP_MANNER_xxx.
1551     int  iDisplayMapMask;
1552
1553///The bit mask identifies the display status. The detailed definition is in ADL_DISPLAY_DISPLAYMAP_MANNER_xxx.
1554    int  iDisplayMapValue;
1555} ADLDisplayMap, *LPADLDisplayMap;
1556
1557/////////////////////////////////////////////////////////////////////////////////////////////
1558/// \brief Structure containing information about the display device possible map for one GPU
1559///
1560/// This structure is used to store the display device possible map
1561/// This information can be returned to the user.
1562/// \nosubgrouping
1563////////////////////////////////////////////////////////////////////////////////////////////
1564typedef struct ADLPossibleMap
1565{
1566    /// The current PossibleMap index. Each PossibleMap is assigned an index
1567    int iIndex;
1568    /// The adapter index identifying the GPU for which to validate these Maps & Targets
1569    int iAdapterIndex;
1570    /// Number of display Maps for this GPU to be validated
1571    int iNumDisplayMap;
1572    /// The display Maps list to validate
1573    ADLDisplayMap* displayMap;
1574    /// the number of display Targets for these display Maps
1575    int iNumDisplayTarget;
1576    /// The display Targets list for these display Maps to be validated.
1577    ADLDisplayTarget* displayTarget;
1578} ADLPossibleMap, *LPADLPossibleMap;
1579
1580/////////////////////////////////////////////////////////////////////////////////////////////
1581/// \brief Structure containing information about display possible mapping.
1582///
1583/// This structure is used to store the display possible mapping's controller index for the current display.
1584/// \nosubgrouping
1585////////////////////////////////////////////////////////////////////////////////////////////
1586typedef struct ADLPossibleMapping
1587{
1588    int iDisplayIndex;                ///< The display index. Each display is assigned an index.
1589    int iDisplayControllerIndex;    ///< The controller index to which display is mapped.
1590    int iDisplayMannerSupported;    ///< The supported display manner.
1591} ADLPossibleMapping, *LPADLPossibleMapping;
1592
1593/////////////////////////////////////////////////////////////////////////////////////////////
1594/// \brief Structure containing information about the validated display device possible map result.
1595///
1596/// This structure is used to store the validated display device possible map result
1597/// This information can be returned to the user.
1598/// \nosubgrouping
1599////////////////////////////////////////////////////////////////////////////////////////////
1600typedef struct ADLPossibleMapResult
1601{
1602    /// The current display map index. It is the OS Desktop index. For example, OS Index 1 showing clone mode. The Display Map will be 1.
1603    int iIndex;
1604    // The bit mask identifies the number of bits   PossibleMapResult is currently using. It will be the sum all the bit definitions defined in ADL_DISPLAY_POSSIBLEMAPRESULT_VALID.
1605    int iPossibleMapResultMask;
1606    /// The bit mask identifies the possible map result. The detail definition is defined in ADL_DISPLAY_POSSIBLEMAPRESULT_XXX.
1607    int iPossibleMapResultValue;
1608} ADLPossibleMapResult, *LPADLPossibleMapResult;
1609
1610/////////////////////////////////////////////////////////////////////////////////////////////
1611///\brief Structure containing information about the display SLS Grid information.
1612///
1613/// This structure is used to store the display SLS Grid information.
1614/// \nosubgrouping
1615////////////////////////////////////////////////////////////////////////////////////////////
1616typedef struct ADLSLSGrid
1617{
1618/// The Adapter index.
1619    int iAdapterIndex;
1620
1621/// The grid index.
1622    int  iSLSGridIndex;
1623
1624/// The grid row.
1625    int  iSLSGridRow;
1626
1627/// The grid column.
1628    int  iSLSGridColumn;
1629
1630/// The grid bit mask identifies the number of bits DisplayMap is currently using. Sum of all bits defined in ADL_DISPLAY_SLSGRID_ORIENTATION_XXX
1631    int  iSLSGridMask;
1632
1633/// The grid bit value identifies the display status. Refer to ADL_DISPLAY_SLSGRID_ORIENTATION_XXX
1634    int  iSLSGridValue;
1635} ADLSLSGrid, *LPADLSLSGrid;
1636
1637/////////////////////////////////////////////////////////////////////////////////////////////
1638///\brief Structure containing information about the display SLS Map information.
1639///
1640/// This structure is used to store the display SLS Map information.
1641/// \nosubgrouping
1642////////////////////////////////////////////////////////////////////////////////////////////
1643typedef struct    ADLSLSMap
1644{
1645    /// The Adapter Index
1646    int iAdapterIndex;
1647
1648    /// The current display map index. It is the OS Desktop index. For example, OS Index 1 showing clone mode. The Display Map will be 1.
1649    int iSLSMapIndex;
1650
1651    /// Indicate the current grid
1652    ADLSLSGrid grid;
1653
1654    /// OS surface index
1655    int  iSurfaceMapIndex;
1656
1657     ///  Screen orientation. E.g., 0, 90, 180, 270
1658     int iOrientation;
1659
1660    /// The number of display targets belongs to this map
1661    int  iNumSLSTarget;
1662
1663    /// The first target array index in the Target array
1664    int  iFirstSLSTargetArrayIndex;
1665
1666    /// The number of native modes belongs to this map
1667    int  iNumNativeMode;
1668
1669    /// The first native mode array index in the native mode array
1670    int  iFirstNativeModeArrayIndex;
1671
1672    /// The number of bezel modes belongs to this map
1673    int  iNumBezelMode;
1674
1675    /// The first bezel mode array index in the native mode array
1676    int  iFirstBezelModeArrayIndex;
1677
1678    /// The number of bezel offsets belongs to this map
1679    int  iNumBezelOffset;
1680
1681    /// The first bezel offset array index in the
1682    int  iFirstBezelOffsetArrayIndex;
1683
1684    /// The bit mask identifies the number of bits DisplayMap is currently using. Sum all the bit definitions defined in ADL_DISPLAY_SLSMAP_XXX.
1685    int  iSLSMapMask;
1686
1687    /// The bit mask identifies the display map status. Refer to ADL_DISPLAY_SLSMAP_XXX
1688    int  iSLSMapValue;
1689} ADLSLSMap, *LPADLSLSMap;
1690
1691/////////////////////////////////////////////////////////////////////////////////////////////
1692///\brief Structure containing information about the display SLS Offset information.
1693///
1694/// This structure is used to store the display SLS Offset information.
1695/// \nosubgrouping
1696////////////////////////////////////////////////////////////////////////////////////////////
1697typedef struct ADLSLSOffset
1698{
1699    /// The Adapter Index
1700    int iAdapterIndex;
1701
1702    /// The current display map index. It is the OS Desktop index. For example, OS Index 1 showing clone mode. The Display Map will be 1.
1703    int iSLSMapIndex;
1704
1705    /// The Display ID.
1706    ADLDisplayID displayID;
1707
1708    /// SLS Bezel Mode Index
1709    int iBezelModeIndex;
1710
1711    /// SLS Bezel Offset X
1712    int iBezelOffsetX;
1713
1714    /// SLS Bezel Offset Y
1715    int iBezelOffsetY;
1716
1717    /// SLS Display Width
1718    int iDisplayWidth;
1719
1720    /// SLS Display Height
1721    int iDisplayHeight;
1722
1723    /// The bit mask identifies the number of bits Offset is currently using.
1724    int iBezelOffsetMask;
1725
1726    /// The bit mask identifies the display status.
1727    int  iBezelffsetValue;
1728} ADLSLSOffset, *LPADLSLSOffset;
1729
1730/////////////////////////////////////////////////////////////////////////////////////////////
1731///\brief Structure containing information about the display SLS Mode information.
1732///
1733/// This structure is used to store the display SLS Mode information.
1734/// \nosubgrouping
1735////////////////////////////////////////////////////////////////////////////////////////////
1736typedef struct ADLSLSMode
1737{
1738    /// The Adapter Index
1739    int iAdapterIndex;
1740
1741    /// The current display map index. It is the OS Desktop index. For example, OS Index 1 showing clone mode. The Display Map will be 1.
1742    int iSLSMapIndex;
1743
1744    /// The mode index
1745    int iSLSModeIndex;
1746
1747    /// The mode for this map.
1748    ADLMode displayMode;
1749
1750    /// The bit mask identifies the number of bits Mode is currently using.
1751    int iSLSNativeModeMask;
1752
1753    /// The bit mask identifies the display status.
1754    int iSLSNativeModeValue;
1755} ADLSLSMode, *LPADLSLSMode;
1756
1757/////////////////////////////////////////////////////////////////////////////////////////////
1758///\brief Structure containing information about the display Possible SLS Map information.
1759///
1760/// This structure is used to store the display Possible SLS Map information.
1761/// \nosubgrouping
1762////////////////////////////////////////////////////////////////////////////////////////////
1763typedef struct ADLPossibleSLSMap
1764{
1765    /// The current display map index. It is the OS Desktop index.
1766    /// For example, OS Index 1 showing clone mode. The Display Map will be 1.
1767    int iSLSMapIndex;
1768
1769    /// Number of display map to be validated.
1770    int iNumSLSMap;
1771
1772    /// The display map list for validation
1773    ADLSLSMap* lpSLSMap;
1774
1775    /// the number of display map config to be validated.
1776    int iNumSLSTarget;
1777
1778    /// The display target list for validation.
1779    ADLDisplayTarget* lpDisplayTarget;
1780} ADLPossibleSLSMap, *LPADLPossibleSLSMap;
1781
1782/////////////////////////////////////////////////////////////////////////////////////////////
1783///\brief Structure containing information about the SLS targets.
1784///
1785/// This structure is used to store the SLS targets information.
1786/// \nosubgrouping
1787////////////////////////////////////////////////////////////////////////////////////////////
1788typedef struct ADLSLSTarget
1789{
1790    /// the logic adapter index
1791    int iAdapterIndex;
1792
1793    /// The SLS map index
1794    int iSLSMapIndex;
1795
1796    /// The target ID
1797    ADLDisplayTarget displayTarget;
1798
1799    /// Target postion X in SLS grid
1800    int iSLSGridPositionX;
1801
1802    /// Target postion Y in SLS grid
1803    int iSLSGridPositionY;
1804
1805    /// The view size width, height and rotation angle per SLS Target
1806    ADLMode viewSize;
1807
1808    /// The bit mask identifies the bits in iSLSTargetValue are currently used
1809    int iSLSTargetMask;
1810
1811    /// The bit mask identifies status info. It is for function extension purpose
1812    int iSLSTargetValue;
1813} ADLSLSTarget, *LPADLSLSTarget;
1814
1815/////////////////////////////////////////////////////////////////////////////////////////////
1816///\brief Structure containing information about the Adapter offset stepping size.
1817///
1818/// This structure is used to store the Adapter offset stepping size information.
1819/// \nosubgrouping
1820////////////////////////////////////////////////////////////////////////////////////////////
1821typedef struct ADLBezelOffsetSteppingSize
1822{
1823    /// the logic adapter index
1824    int iAdapterIndex;
1825
1826    /// The SLS map index
1827    int iSLSMapIndex;
1828
1829    /// Bezel X stepping size offset
1830    int iBezelOffsetSteppingSizeX;
1831
1832    /// Bezel Y stepping size offset
1833    int iBezelOffsetSteppingSizeY;
1834
1835    /// Identifies the bits this structure is currently using. It will be the total OR of all the bit definitions.
1836    int iBezelOffsetSteppingSizeMask;
1837
1838    /// Bit mask identifies the display status.
1839    int iBezelOffsetSteppingSizeValue;
1840} ADLBezelOffsetSteppingSize, *LPADLBezelOffsetSteppingSize;
1841
1842/////////////////////////////////////////////////////////////////////////////////////////////
1843///\brief Structure containing information about the overlap offset info for all the displays for each SLS mode.
1844///
1845/// This structure is used to store the no. of overlapped modes for each SLS Mode once user finishes the configuration from Overlap Widget
1846/// \nosubgrouping
1847////////////////////////////////////////////////////////////////////////////////////////////
1848typedef struct ADLSLSOverlappedMode
1849{
1850    /// the SLS mode for which the overlap is configured
1851    ADLMode SLSMode;
1852    /// the number of target displays in SLS.
1853    int iNumSLSTarget;
1854    /// the first target array index in the target array
1855    int iFirstTargetArrayIndex;
1856}ADLSLSTargetOverlap, *LPADLSLSTargetOverlap;
1857
1858/////////////////////////////////////////////////////////////////////////////////////////////
1859///\brief Structure containing information about driver supported PowerExpress Config Caps
1860///
1861/// This structure is used to store the driver supported PowerExpress Config Caps
1862/// \nosubgrouping
1863////////////////////////////////////////////////////////////////////////////////////////////
1864typedef struct ADLPXConfigCaps
1865{
1866    /// The Persistent logical Adapter Index.
1867    int iAdapterIndex;
1868
1869    /// The bit mask identifies the number of bits PowerExpress Config Caps is currently using. It is the sum of all the bit definitions defined in ADL_PX_CONFIGCAPS_XXXX /ref define_powerxpress_constants.
1870    int  iPXConfigCapMask;
1871
1872    /// The bit mask identifies the PowerExpress Config Caps value. The detailed definition is in ADL_PX_CONFIGCAPS_XXXX /ref define_powerxpress_constants.
1873    int  iPXConfigCapValue;
1874} ADLPXConfigCaps, *LPADLPXConfigCaps;
1875
1876/////////////////////////////////////////////////////////////////////////////////////////
1877///\brief Enum containing PX or HG type
1878///
1879/// This enum is used to get PX or hG type
1880///
1881/// \nosubgrouping
1882//////////////////////////////////////////////////////////////////////////////////////////
1883typedef enum ADLPxType
1884{
1885	//Not AMD related PX/HG or not PX or HG at all
1886	ADL_PX_NONE = 0,
1887	//A+A PX
1888	ADL_SWITCHABLE_AMDAMD = 1,
1889	// A+A HG
1890	ADL_HG_AMDAMD = 2,
1891	//A+I PX
1892	ADL_SWITCHABLE_AMDOTHER = 3,
1893	//A+I HG
1894	ADL_HG_AMDOTHER = 4,
1895}ADLPxType;
1896
1897/////////////////////////////////////////////////////////////////////////////////////////////
1898///\brief Structure containing information about an application
1899///
1900/// This structure is used to store basic information of an application
1901/// \nosubgrouping
1902////////////////////////////////////////////////////////////////////////////////////////////
1903typedef struct ADLApplicationData
1904{
1905    /// Path Name
1906    char strPathName[ADL_MAX_PATH];
1907    /// File Name
1908    char strFileName[ADL_APP_PROFILE_FILENAME_LENGTH];
1909    /// Creation timestamp
1910    char strTimeStamp[ADL_APP_PROFILE_TIMESTAMP_LENGTH];
1911    /// Version
1912    char strVersion[ADL_APP_PROFILE_VERSION_LENGTH];
1913}ADLApplicationData;
1914
1915/////////////////////////////////////////////////////////////////////////////////////////////
1916///\brief Structure containing information about an application
1917///
1918/// This structure is used to store basic information of an application
1919/// \nosubgrouping
1920////////////////////////////////////////////////////////////////////////////////////////////
1921typedef struct ADLApplicationDataX2
1922{
1923    /// Path Name
1924    wchar_t strPathName[ADL_MAX_PATH];
1925    /// File Name
1926    wchar_t strFileName[ADL_APP_PROFILE_FILENAME_LENGTH];
1927    /// Creation timestamp
1928    wchar_t strTimeStamp[ADL_APP_PROFILE_TIMESTAMP_LENGTH];
1929    /// Version
1930    wchar_t strVersion[ADL_APP_PROFILE_VERSION_LENGTH];
1931}ADLApplicationDataX2;
1932
1933/////////////////////////////////////////////////////////////////////////////////////////////
1934///\brief Structure containing information about an application
1935///
1936/// This structure is used to store basic information of an application including process id
1937/// \nosubgrouping
1938////////////////////////////////////////////////////////////////////////////////////////////
1939typedef struct ADLApplicationDataX3
1940{
1941    /// Path Name
1942    wchar_t strPathName[ADL_MAX_PATH];
1943    /// File Name
1944    wchar_t strFileName[ADL_APP_PROFILE_FILENAME_LENGTH];
1945    /// Creation timestamp
1946    wchar_t strTimeStamp[ADL_APP_PROFILE_TIMESTAMP_LENGTH];
1947    /// Version
1948    wchar_t strVersion[ADL_APP_PROFILE_VERSION_LENGTH];
1949    //Application Process id
1950    unsigned int iProcessId;
1951}ADLApplicationDataX3;
1952
1953/////////////////////////////////////////////////////////////////////////////////////////////
1954///\brief Structure containing information of a property of an application profile
1955///
1956/// This structure is used to store property information of an application profile
1957/// \nosubgrouping
1958////////////////////////////////////////////////////////////////////////////////////////////
1959typedef struct PropertyRecord
1960{
1961    /// Property Name
1962    char strName [ADL_APP_PROFILE_PROPERTY_LENGTH];
1963    /// Property Type
1964    ADLProfilePropertyType eType;
1965    /// Data Size in bytes
1966    int iDataSize;
1967    /// Property Value, can be any data type
1968    unsigned char uData[1];
1969}PropertyRecord;
1970
1971/////////////////////////////////////////////////////////////////////////////////////////////
1972///\brief Structure containing information about an application profile
1973///
1974/// This structure is used to store information of an application profile
1975/// \nosubgrouping
1976////////////////////////////////////////////////////////////////////////////////////////////
1977typedef struct ADLApplicationProfile
1978{
1979    /// Number of properties
1980    int iCount;
1981    /// Buffer to store all property records
1982    PropertyRecord record[1];
1983}ADLApplicationProfile;
1984
1985/////////////////////////////////////////////////////////////////////////////////////////////
1986///\brief Structure containing information about an OD5 Power Control feature
1987///
1988/// This structure is used to store information of an Power Control feature
1989/// \nosubgrouping
1990////////////////////////////////////////////////////////////////////////////////////////////
1991typedef struct ADLPowerControlInfo
1992{
1993/// Minimum value.
1994int iMinValue;
1995/// Maximum value.
1996int iMaxValue;
1997/// The minimum change in between minValue and maxValue.
1998int iStepValue;
1999 } ADLPowerControlInfo;
2000
2001/////////////////////////////////////////////////////////////////////////////////////////////
2002///\brief Structure containing information about an controller mode
2003///
2004/// This structure is used to store information of an controller mode
2005/// \nosubgrouping
2006////////////////////////////////////////////////////////////////////////////////////////////
2007typedef struct ADLControllerMode
2008{
2009    /// This falg indicates actions that will be applied by set viewport
2010    /// The value can be a combination of ADL_CONTROLLERMODE_CM_MODIFIER_VIEW_POSITION,
2011    /// ADL_CONTROLLERMODE_CM_MODIFIER_VIEW_PANLOCK and ADL_CONTROLLERMODE_CM_MODIFIER_VIEW_SIZE
2012    int iModifiers;
2013
2014    /// Horizontal view starting position
2015    int iViewPositionCx;
2016
2017    /// Vertical view starting position
2018    int iViewPositionCy;
2019
2020    /// Horizontal left panlock position
2021    int iViewPanLockLeft;
2022
2023    /// Horizontal right panlock position
2024    int iViewPanLockRight;
2025
2026    /// Vertical top panlock position
2027    int iViewPanLockTop;
2028
2029    /// Vertical bottom panlock position
2030    int iViewPanLockBottom;
2031
2032    /// View resolution in pixels (width)
2033    int iViewResolutionCx;
2034
2035    /// View resolution in pixels (hight)
2036    int iViewResolutionCy;
2037}ADLControllerMode;
2038
2039/////////////////////////////////////////////////////////////////////////////////////////////
2040///\brief Structure containing information about a display
2041///
2042/// This structure is used to store information about a display
2043/// \nosubgrouping
2044////////////////////////////////////////////////////////////////////////////////////////////
2045typedef struct ADLDisplayIdentifier
2046{
2047    /// ADL display index
2048    long ulDisplayIndex;
2049
2050    /// manufacturer ID of the display
2051    long ulManufacturerId;
2052
2053    /// product ID of the display
2054    long ulProductId;
2055
2056    /// serial number of the display
2057    long ulSerialNo;
2058} ADLDisplayIdentifier;
2059
2060/////////////////////////////////////////////////////////////////////////////////////////////
2061///\brief Structure containing information about Overdrive 6 clock range
2062///
2063/// This structure is used to store information about Overdrive 6 clock range
2064/// \nosubgrouping
2065////////////////////////////////////////////////////////////////////////////////////////////
2066typedef struct ADLOD6ParameterRange
2067{
2068    /// The starting value of the clock range
2069    int     iMin;
2070    /// The ending value of the clock range
2071    int     iMax;
2072    /// The minimum increment between clock values
2073    int     iStep;
2074} ADLOD6ParameterRange;
2075
2076/////////////////////////////////////////////////////////////////////////////////////////////
2077///\brief Structure containing information about Overdrive 6 capabilities
2078///
2079/// This structure is used to store information about Overdrive 6 capabilities
2080/// \nosubgrouping
2081////////////////////////////////////////////////////////////////////////////////////////////
2082typedef struct ADLOD6Capabilities
2083{
2084    /// Contains a bitmap of the OD6 capability flags.  Possible values: \ref ADL_OD6_CAPABILITY_SCLK_CUSTOMIZATION,
2085    /// \ref ADL_OD6_CAPABILITY_MCLK_CUSTOMIZATION, \ref ADL_OD6_CAPABILITY_GPU_ACTIVITY_MONITOR
2086    int     iCapabilities;
2087    /// Contains a bitmap indicating the power states
2088    /// supported by OD6.  Currently only the performance state
2089    /// is supported. Possible Values: \ref ADL_OD6_SUPPORTEDSTATE_PERFORMANCE
2090    int     iSupportedStates;
2091    /// Number of levels. OD6 will always use 2 levels, which describe
2092    /// the minimum to maximum clock ranges.
2093    /// The 1st level indicates the minimum clocks, and the 2nd level
2094    /// indicates the maximum clocks.
2095    int     iNumberOfPerformanceLevels;
2096    /// Contains the hard limits of the sclk range.  Overdrive
2097    /// clocks cannot be set outside this range.
2098    ADLOD6ParameterRange     sEngineClockRange;
2099    /// Contains the hard limits of the mclk range.  Overdrive
2100    /// clocks cannot be set outside this range.
2101    ADLOD6ParameterRange     sMemoryClockRange;
2102
2103    /// Value for future extension
2104    int     iExtValue;
2105    /// Mask for future extension
2106    int     iExtMask;
2107} ADLOD6Capabilities;
2108
2109/////////////////////////////////////////////////////////////////////////////////////////////
2110///\brief Structure containing information about Overdrive 6 clock values.
2111///
2112/// This structure is used to store information about Overdrive 6 clock values.
2113/// \nosubgrouping
2114////////////////////////////////////////////////////////////////////////////////////////////
2115typedef struct ADLOD6PerformanceLevel
2116{
2117    /// Engine (core) clock.
2118    int iEngineClock;
2119    /// Memory clock.
2120    int iMemoryClock;
2121} ADLOD6PerformanceLevel;
2122
2123/////////////////////////////////////////////////////////////////////////////////////////////
2124///\brief Structure containing information about Overdrive 6 clocks.
2125///
2126/// This structure is used to store information about Overdrive 6 clocks.  This is a
2127/// variable-sized structure.  iNumberOfPerformanceLevels indicate how many elements
2128/// are contained in the aLevels array.
2129/// \nosubgrouping
2130////////////////////////////////////////////////////////////////////////////////////////////
2131typedef struct ADLOD6StateInfo
2132{
2133    /// Number of levels.  OD6 uses clock ranges instead of discrete performance levels.
2134    /// iNumberOfPerformanceLevels is always 2.  The 1st level indicates the minimum clocks
2135    /// in the range.  The 2nd level indicates the maximum clocks in the range.
2136    int     iNumberOfPerformanceLevels;
2137
2138    /// Value for future extension
2139    int     iExtValue;
2140    /// Mask for future extension
2141    int     iExtMask;
2142
2143    /// Variable-sized array of levels.
2144    /// The number of elements in the array is specified by iNumberofPerformanceLevels.
2145    ADLOD6PerformanceLevel aLevels [1];
2146} ADLOD6StateInfo;
2147
2148/////////////////////////////////////////////////////////////////////////////////////////////
2149///\brief Structure containing information about current Overdrive 6 performance status.
2150///
2151/// This structure is used to store information about current Overdrive 6 performance status.
2152/// \nosubgrouping
2153////////////////////////////////////////////////////////////////////////////////////////////
2154typedef struct ADLOD6CurrentStatus
2155{
2156    /// Current engine clock in 10 KHz.
2157    int     iEngineClock;
2158    /// Current memory clock in 10 KHz.
2159    int     iMemoryClock;
2160    /// Current GPU activity in percent.  This
2161    /// indicates how "busy" the GPU is.
2162    int     iActivityPercent;
2163    /// Not used.  Reserved for future use.
2164    int     iCurrentPerformanceLevel;
2165    /// Current PCI-E bus speed
2166    int     iCurrentBusSpeed;
2167    /// Current PCI-E bus # of lanes
2168    int     iCurrentBusLanes;
2169    /// Maximum possible PCI-E bus # of lanes
2170    int     iMaximumBusLanes;
2171
2172    /// Value for future extension
2173    int     iExtValue;
2174    /// Mask for future extension
2175    int     iExtMask;
2176} ADLOD6CurrentStatus;
2177
2178/////////////////////////////////////////////////////////////////////////////////////////////
2179///\brief Structure containing information about Overdrive 6 thermal contoller capabilities
2180///
2181/// This structure is used to store information about Overdrive 6 thermal controller capabilities
2182/// \nosubgrouping
2183////////////////////////////////////////////////////////////////////////////////////////////
2184typedef struct ADLOD6ThermalControllerCaps
2185{
2186    /// Contains a bitmap of thermal controller capability flags. Possible values: \ref ADL_OD6_TCCAPS_THERMAL_CONTROLLER, \ref ADL_OD6_TCCAPS_FANSPEED_CONTROL,
2187    /// \ref ADL_OD6_TCCAPS_FANSPEED_PERCENT_READ, \ref ADL_OD6_TCCAPS_FANSPEED_PERCENT_WRITE, \ref ADL_OD6_TCCAPS_FANSPEED_RPM_READ, \ref ADL_OD6_TCCAPS_FANSPEED_RPM_WRITE
2188    int     iCapabilities;
2189    /// Minimum fan speed expressed as a percentage
2190    int     iFanMinPercent;
2191    /// Maximum fan speed expressed as a percentage
2192    int     iFanMaxPercent;
2193    /// Minimum fan speed expressed in revolutions-per-minute
2194    int     iFanMinRPM;
2195    /// Maximum fan speed expressed in revolutions-per-minute
2196    int     iFanMaxRPM;
2197
2198    /// Value for future extension
2199    int     iExtValue;
2200    /// Mask for future extension
2201    int     iExtMask;
2202} ADLOD6ThermalControllerCaps;
2203
2204/////////////////////////////////////////////////////////////////////////////////////////////
2205///\brief Structure containing information about Overdrive 6 fan speed information
2206///
2207/// This structure is used to store information about Overdrive 6 fan speed information
2208/// \nosubgrouping
2209////////////////////////////////////////////////////////////////////////////////////////////
2210typedef struct ADLOD6FanSpeedInfo
2211{
2212    /// Contains a bitmap of the valid fan speed type flags.  Possible values: \ref ADL_OD6_FANSPEED_TYPE_PERCENT, \ref ADL_OD6_FANSPEED_TYPE_RPM, \ref ADL_OD6_FANSPEED_USER_DEFINED
2213    int     iSpeedType;
2214    /// Contains current fan speed in percent (if valid flag exists in iSpeedType)
2215    int     iFanSpeedPercent;
2216    /// Contains current fan speed in RPM (if valid flag exists in iSpeedType)
2217    int        iFanSpeedRPM;
2218
2219    /// Value for future extension
2220    int     iExtValue;
2221    /// Mask for future extension
2222    int     iExtMask;
2223} ADLOD6FanSpeedInfo;
2224
2225/////////////////////////////////////////////////////////////////////////////////////////////
2226///\brief Structure containing information about Overdrive 6 fan speed value
2227///
2228/// This structure is used to store information about Overdrive 6 fan speed value
2229/// \nosubgrouping
2230////////////////////////////////////////////////////////////////////////////////////////////
2231typedef struct ADLOD6FanSpeedValue
2232{
2233    /// Indicates the units of the fan speed.  Possible values: \ref ADL_OD6_FANSPEED_TYPE_PERCENT, \ref ADL_OD6_FANSPEED_TYPE_RPM
2234    int     iSpeedType;
2235    /// Fan speed value (units as indicated above)
2236    int     iFanSpeed;
2237
2238    /// Value for future extension
2239    int     iExtValue;
2240    /// Mask for future extension
2241    int     iExtMask;
2242} ADLOD6FanSpeedValue;
2243
2244/////////////////////////////////////////////////////////////////////////////////////////////
2245///\brief Structure containing information about Overdrive 6 PowerControl settings.
2246///
2247/// This structure is used to store information about Overdrive 6 PowerControl settings.
2248/// PowerControl is the feature which allows the performance characteristics of the GPU
2249/// to be adjusted by changing the PowerTune power limits.
2250/// \nosubgrouping
2251////////////////////////////////////////////////////////////////////////////////////////////
2252typedef struct ADLOD6PowerControlInfo
2253{
2254    /// The minimum PowerControl adjustment value
2255    int     iMinValue;
2256    /// The maximum PowerControl adjustment value
2257    int     iMaxValue;
2258    /// The minimum difference between PowerControl adjustment values
2259    int     iStepValue;
2260
2261    /// Value for future extension
2262    int     iExtValue;
2263    /// Mask for future extension
2264    int     iExtMask;
2265} ADLOD6PowerControlInfo;
2266
2267/////////////////////////////////////////////////////////////////////////////////////////////
2268///\brief Structure containing information about Overdrive 6 PowerControl settings.
2269///
2270/// This structure is used to store information about Overdrive 6 PowerControl settings.
2271/// PowerControl is the feature which allows the performance characteristics of the GPU
2272/// to be adjusted by changing the PowerTune power limits.
2273/// \nosubgrouping
2274////////////////////////////////////////////////////////////////////////////////////////////
2275typedef struct ADLOD6VoltageControlInfo
2276{
2277    /// The minimum VoltageControl adjustment value
2278    int     iMinValue;
2279    /// The maximum VoltageControl adjustment value
2280    int     iMaxValue;
2281    /// The minimum difference between VoltageControl adjustment values
2282    int     iStepValue;
2283
2284    /// Value for future extension
2285    int     iExtValue;
2286    /// Mask for future extension
2287    int     iExtMask;
2288} ADLOD6VoltageControlInfo;
2289
2290////////////////////////////////////////////////////////////////////////////////////////////
2291///\brief Structure containing ECC statistics namely SEC counts and DED counts
2292/// Single error count - count of errors that can be corrected
2293/// Doubt Error Detect -  count of errors that cannot be corrected
2294/// \nosubgrouping
2295////////////////////////////////////////////////////////////////////////////////////////////
2296typedef struct ADLECCData
2297{
2298    // Single error count - count of errors that can be corrected
2299    int iSec;
2300    // Double error detect - count of errors that cannot be corrected
2301    int iDed;
2302} ADLECCData;
2303
2304/// \brief Handle to ADL client context.
2305///
2306///  ADL clients obtain context handle from initial call to \ref ADL2_Main_Control_Create.
2307///  Clients have to pass the handle to each subsequent ADL call and finally destroy
2308///  the context with call to \ref ADL2_Main_Control_Destroy
2309/// \nosubgrouping
2310typedef void *ADL_CONTEXT_HANDLE;
2311
2312/// \brief Handle to ADL Frame Monitor Token.
2313///
2314///  Frame Monitor clients obtain handle from initial call to \ref ADL2_Adapter_FrameMetrics_FrameDuration_Enable
2315///  Clients have to pass the handle to each subsequent ADL call to \ref ADL2_Adapter_FrameMetrics_FrameDuration_Get
2316///  and finally destroy the token with call to \ref ADL2_Adapter_FrameMetrics_FrameDuration_Disable
2317/// \nosubgrouping
2318typedef void *ADL_FRAME_DURATION_HANDLE;
2319
2320/////////////////////////////////////////////////////////////////////////////////////////////
2321///\brief Structure containing the display mode definition used per controller.
2322///
2323/// This structure is used to store the display mode definition used per controller.
2324/// \nosubgrouping
2325////////////////////////////////////////////////////////////////////////////////////////////
2326typedef struct ADLDisplayModeX2
2327{
2328/// Horizontal resolution (in pixels).
2329   int  iWidth;
2330/// Vertical resolution (in lines).
2331   int  iHeight;
2332/// Interlaced/Progressive. The value will be set for Interlaced as ADL_DL_TIMINGFLAG_INTERLACED. If not set it is progressive. Refer define_detailed_timing_flags.
2333   int  iScanType;
2334/// Refresh rate.
2335   int  iRefreshRate;
2336/// Timing Standard. Refer define_modetiming_standard.
2337   int  iTimingStandard;
2338} ADLDisplayModeX2;
2339
2340typedef enum ADLAppProcessState
2341{
2342	APP_PROC_INVALID = 0,          // Invalid Application
2343	APP_PROC_PREMPTION = 1,          // The Application is being set up for Process Creation
2344	APP_PROC_CREATION = 2,          // The Application's Main Process is created by the OS
2345	APP_PROC_READ = 3,          // The Application's Data is ready to be read
2346	APP_PROC_WAIT = 4,          // The Application is waiting for Timeout or Notification to Resume
2347	APP_PROC_RUNNING = 5,          // The Application is running
2348	APP_PROC_TERMINATE = 6           // The Application is about to terminate
2349}ADLAppProcessState;
2350
2351typedef enum ADLAppInterceptionListType
2352{
2353	ADL_INVALID_FORMAT = 0,
2354	ADL_IMAGEFILEFORMAT = 1,
2355	ADL_ENVVAR = 2
2356}ADLAppInterceptionListType;
2357
2358typedef struct ADLAppInterceptionInfo
2359{
2360	wchar_t                     AppName[ADL_MAX_PATH]; // the file name of the application or env var
2361	unsigned int                ProcessId;
2362	ADLAppInterceptionListType  AppFormat;
2363	ADLAppProcessState          AppState;
2364} ADLAppInterceptionInfo;
2365
2366typedef enum ADL_AP_DATABASE // same as _SHARED_AP_DATABASE in "inc/shared/shared_escape.h"
2367{
2368	ADL_AP_DATABASE__SYSTEM,
2369	ADL_AP_DATABASE__USER,
2370	ADL_AP_DATABASE__OEM
2371} ADL_AP_DATABASE;
2372
2373typedef struct ADLAppInterceptionInfoX2
2374{
2375	wchar_t                     AppName[ADL_MAX_PATH]; // the file name of the application or env var
2376	unsigned int                ProcessId;
2377	unsigned int                WaitForResumeNeeded;
2378	wchar_t                     CommandLine[ADL_MAX_PATH]; // The command line on app start/stop event
2379	ADLAppInterceptionListType  AppFormat;
2380	ADLAppProcessState          AppState;
2381} ADLAppInterceptionInfoX2;
2382
2383typedef struct ADLAppInterceptionInfoX3
2384{
2385    wchar_t                     AppName[ADL_MAX_PATH]; // the file name of the application or env var
2386    unsigned int                ProcessId;
2387    unsigned int                WaitForResumeNeeded;
2388    unsigned int                RayTracingStatus; // returns the Ray Tracing status if it is enabled atleast once in session.
2389    wchar_t                     CommandLine[ADL_MAX_PATH]; // The command line on app start/stop event
2390    ADLAppInterceptionListType  AppFormat;
2391    ADLAppProcessState          AppState;
2392} ADLAppInterceptionInfoX3;
2393
2394/////////////////////////////////////////////////////////////////////////////////////////////
2395///\brief Structure containing information info for a property record in a profile
2396///
2397/// This structure is used to store info for a property record in a profile
2398/// \nosubgrouping
2399////////////////////////////////////////////////////////////////////////////////////////////
2400typedef struct ADLPropertyRecordCreate
2401{
2402	/// Name of the property
2403	wchar_t * strPropertyName;
2404	/// Data type of the property
2405	ADLProfilePropertyType eType;
2406	// Value of the property
2407	wchar_t * strPropertyValue;
2408} ADLPropertyRecordCreate;
2409
2410/////////////////////////////////////////////////////////////////////////////////////////////
2411///\brief Structure containing information info for an application record
2412///
2413/// This structure is used to store info for an application record
2414/// \nosubgrouping
2415////////////////////////////////////////////////////////////////////////////////////////////
2416typedef struct ADLApplicationRecord
2417{
2418    /// Title of the application
2419    wchar_t * strTitle;
2420    /// File path of the application
2421    wchar_t * strPathName;
2422    /// File name of the application
2423    wchar_t * strFileName;
2424    /// File versin the application
2425    wchar_t * strVersion;
2426    /// Nostes on the application
2427    wchar_t * strNotes;
2428    /// Driver area which the application uses
2429    wchar_t * strArea;
2430    /// Name of profile assigned to the application
2431    wchar_t * strProfileName;
2432    // Source where this application record come from
2433    ADL_AP_DATABASE recordSource;
2434} ADLApplicationRecord;
2435
2436/////////////////////////////////////////////////////////////////////////////////////////////
2437///\brief Structure containing information about Overdrive 6 extension capabilities
2438///
2439/// This structure is used to store information about Overdrive 6 extension capabilities
2440/// \nosubgrouping
2441////////////////////////////////////////////////////////////////////////////////////////////
2442typedef struct ADLOD6CapabilitiesEx
2443{
2444    /// Contains a bitmap of the OD6 extension capability flags.  Possible values: \ref ADL_OD6_CAPABILITY_SCLK_CUSTOMIZATION,
2445    /// \ref ADL_OD6_CAPABILITY_MCLK_CUSTOMIZATION, \ref ADL_OD6_CAPABILITY_GPU_ACTIVITY_MONITOR,
2446    /// \ref ADL_OD6_CAPABILITY_POWER_CONTROL, \ref ADL_OD6_CAPABILITY_VOLTAGE_CONTROL, \ref ADL_OD6_CAPABILITY_PERCENT_ADJUSTMENT,
2447    //// \ref ADL_OD6_CAPABILITY_THERMAL_LIMIT_UNLOCK
2448    int iCapabilities;
2449    /// The Power states that support clock and power customization.  Only performance state is currently supported.
2450    /// Possible Values: \ref ADL_OD6_SUPPORTEDSTATE_PERFORMANCE
2451    int iSupportedStates;
2452    /// Returns the hard limits of the SCLK overdrive adjustment range.  Overdrive clocks should not be adjusted outside of this range.  The values are specified as +/- percentages.
2453    ADLOD6ParameterRange sEngineClockPercent;
2454    /// Returns the hard limits of the MCLK overdrive adjustment range.  Overdrive clocks should not be adjusted outside of this range.  The values are specified as +/- percentages.
2455    ADLOD6ParameterRange sMemoryClockPercent;
2456    /// Returns the hard limits of the Power Limit adjustment range.  Power limit should not be adjusted outside this range.  The values are specified as +/- percentages.
2457    ADLOD6ParameterRange sPowerControlPercent;
2458    /// Reserved for future expansion of the structure.
2459    int iExtValue;
2460    /// Reserved for future expansion of the structure.
2461    int iExtMask;
2462} ADLOD6CapabilitiesEx;
2463
2464/////////////////////////////////////////////////////////////////////////////////////////////
2465///\brief Structure containing information about Overdrive 6 extension state information
2466///
2467/// This structure is used to store information about Overdrive 6 extension state information
2468/// \nosubgrouping
2469////////////////////////////////////////////////////////////////////////////////////////////
2470typedef struct ADLOD6StateEx
2471{
2472    /// The current engine clock adjustment value, specified as a +/- percent.
2473    int iEngineClockPercent;
2474    /// The current memory clock adjustment value, specified as a +/- percent.
2475    int iMemoryClockPercent;
2476    /// The current power control adjustment value, specified as a +/- percent.
2477    int iPowerControlPercent;
2478    /// Reserved for future expansion of the structure.
2479    int iExtValue;
2480    /// Reserved for future expansion of the structure.
2481    int iExtMask;
2482} ADLOD6StateEx;
2483
2484/////////////////////////////////////////////////////////////////////////////////////////////
2485///\brief Structure containing information about Overdrive 6 extension recommended maximum clock adjustment values
2486///
2487/// This structure is used to store information about Overdrive 6 extension recommended maximum clock adjustment values
2488/// \nosubgrouping
2489////////////////////////////////////////////////////////////////////////////////////////////
2490typedef struct ADLOD6MaxClockAdjust
2491{
2492    /// The recommended maximum engine clock adjustment in percent, for the specified power limit value.
2493    int iEngineClockMax;
2494    /// The recommended maximum memory clock adjustment in percent, for the specified power limit value.
2495    /// Currently the memory is independent of the Power Limit setting, so iMemoryClockMax will always return the maximum
2496    /// possible adjustment value.  This field is here for future enhancement in case we add a dependency between Memory Clock
2497    /// adjustment and Power Limit setting.
2498    int iMemoryClockMax;
2499    /// Reserved for future expansion of the structure.
2500    int iExtValue;
2501    /// Reserved for future expansion of the structure.
2502    int iExtMask;
2503} ADLOD6MaxClockAdjust;
2504
2505////////////////////////////////////////////////////////////////////////////////////////////
2506///\brief Structure containing the Connector information
2507///
2508/// this structure is used to get the connector information like length, positions & etc.
2509/// \nosubgrouping
2510////////////////////////////////////////////////////////////////////////////////////////////
2511typedef struct ADLConnectorInfo
2512{
2513    ///index of the connector(0-based)
2514    int iConnectorIndex;
2515    ///used for disply identification/ordering
2516    int iConnectorId;
2517    ///index of the slot, 0-based index.
2518    int iSlotIndex;
2519    ///Type of the connector. \ref define_connector_types
2520    int iType;
2521    ///Position of the connector(in millimeters), from the right side of the slot.
2522    int iOffset;
2523    ///Length of the connector(in millimeters).
2524    int iLength;
2525} ADLConnectorInfo;
2526
2527////////////////////////////////////////////////////////////////////////////////////////////
2528///\brief Structure containing the slot information
2529///
2530/// this structure is used to get the slot information like length of the slot, no of connectors on the slot & etc.
2531/// \nosubgrouping
2532////////////////////////////////////////////////////////////////////////////////////////////
2533typedef struct ADLBracketSlotInfo
2534{
2535    ///index of the slot, 0-based index.
2536    int iSlotIndex;
2537    ///length of the slot(in millimeters).
2538    int iLength;
2539    ///width of the slot(in millimeters).
2540    int iWidth;
2541} ADLBracketSlotInfo;
2542
2543////////////////////////////////////////////////////////////////////////////////////////////
2544///\brief Structure containing MST branch information
2545///
2546/// this structure is used to store the MST branch information
2547/// \nosubgrouping
2548////////////////////////////////////////////////////////////////////////////////////////////
2549typedef struct ADLMSTRad
2550{
2551    ///depth of the link.
2552    int iLinkNumber;
2553    /// Relative address, address scheme starts from source side
2554    char rad[ADL_MAX_RAD_LINK_COUNT];
2555} ADLMSTRad;
2556
2557////////////////////////////////////////////////////////////////////////////////////////////
2558///\brief Structure containing port information
2559///
2560/// this structure is used to get the display or MST branch information
2561/// \nosubgrouping
2562////////////////////////////////////////////////////////////////////////////////////////////
2563typedef struct ADLDevicePort
2564{
2565    ///index of the connector.
2566    int iConnectorIndex;
2567    ///Relative MST address. If MST RAD contains 0 it means DP or Root of the MST topology. For non DP connectors MST RAD is ignored.
2568    ADLMSTRad aMSTRad;
2569} ADLDevicePort;
2570
2571////////////////////////////////////////////////////////////////////////////////////////////
2572///\brief Structure containing supported connection types and properties
2573///
2574/// this structure is used to get the supported connection types and supported properties of given connector
2575/// \nosubgrouping
2576////////////////////////////////////////////////////////////////////////////////////////////
2577typedef struct ADLSupportedConnections
2578{
2579    ///Bit vector of supported connections. Bitmask is defined in constants section. \ref define_connection_types
2580    int iSupportedConnections;
2581    ///Array of bitvectors. Each bit vector represents supported properties for one connection type. Index of this array is connection type (bit number in mask).
2582    int iSupportedProperties[ADL_MAX_CONNECTION_TYPES];
2583} ADLSupportedConnections;
2584
2585////////////////////////////////////////////////////////////////////////////////////////////
2586///\brief Structure containing connection state of the connector
2587///
2588/// this structure is used to get the current Emulation status and mode of the given connector
2589/// \nosubgrouping
2590////////////////////////////////////////////////////////////////////////////////////////////
2591typedef struct ADLConnectionState
2592{
2593    ///The value is bit vector. Each bit represents status. See masks constants for details. \ref define_emulation_status
2594    int iEmulationStatus;
2595    ///It contains information about current emulation mode. See constants for details. \ref define_emulation_mode
2596    int iEmulationMode;
2597    ///If connection is active it will contain display id, otherwise CWDDEDI_INVALID_DISPLAY_INDEX
2598    int iDisplayIndex;
2599} ADLConnectionState;
2600
2601////////////////////////////////////////////////////////////////////////////////////////////
2602///\brief Structure containing connection properties information
2603///
2604/// this structure is used to retrieve the properties of connection type
2605/// \nosubgrouping
2606////////////////////////////////////////////////////////////////////////////////////////////
2607typedef struct ADLConnectionProperties
2608{
2609    //Bit vector. Represents actual properties. Supported properties for specific connection type. \ref define_connection_properties
2610    int iValidProperties;
2611    //Bitrate(in MHz). Could be used for MST branch, DP or DP active dongle. \ref define_linkrate_constants
2612    int iBitrate;
2613    //Number of lanes in DP connection. \ref define_lanecount_constants
2614    int iNumberOfLanes;
2615    //Color depth(in bits). \ref define_colordepth_constants
2616    int iColorDepth;
2617    //3D capabilities. It could be used for some dongles. For instance: alternate framepack. Value of this property is bit vector.
2618    int iStereo3DCaps;
2619    ///Output Bandwidth. Could be used for MST branch, DP or DP Active dongle. \ref define_linkrate_constants
2620    int iOutputBandwidth;
2621} ADLConnectionProperties;
2622
2623////////////////////////////////////////////////////////////////////////////////////////////
2624///\brief Structure containing connection information
2625///
2626/// this structure is used to retrieve the data from driver which includes
2627/// \nosubgrouping
2628////////////////////////////////////////////////////////////////////////////////////////////
2629typedef struct ADLConnectionData
2630{
2631    ///Connection type. based on the connection type either iNumberofPorts or IDataSize,EDIDdata is valid, \ref define_connection_types
2632    int iConnectionType;
2633    ///Specifies the connection properties.
2634    ADLConnectionProperties aConnectionProperties;
2635    ///Number of ports
2636    int iNumberofPorts;
2637    ///Number of Active Connections
2638    int iActiveConnections;
2639    ///actual size of EDID data block size.
2640    int iDataSize;
2641    ///EDID Data
2642    char EdidData[ADL_MAX_DISPLAY_EDID_DATA_SIZE];
2643} ADLConnectionData;
2644
2645/////////////////////////////////////////////////////////////////////////////////////////////
2646///\brief Structure containing information about an controller mode including Number of Connectors
2647///
2648/// This structure is used to store information of an controller mode
2649/// \nosubgrouping
2650////////////////////////////////////////////////////////////////////////////////////////////
2651typedef struct ADLAdapterCapsX2
2652{
2653    /// AdapterID for this adapter
2654    int iAdapterID;
2655    /// Number of controllers for this adapter
2656    int iNumControllers;
2657    /// Number of displays for this adapter
2658    int iNumDisplays;
2659    /// Number of overlays for this adapter
2660    int iNumOverlays;
2661    /// Number of GLSyncConnectors
2662    int iNumOfGLSyncConnectors;
2663    /// The bit mask identifies the adapter caps
2664    int iCapsMask;
2665    /// The bit identifies the adapter caps \ref define_adapter_caps
2666    int iCapsValue;
2667    /// Number of Connectors for this adapter
2668    int iNumConnectors;
2669}ADLAdapterCapsX2;
2670
2671typedef enum ADL_ERROR_RECORD_SEVERITY
2672{
2673    ADL_GLOBALLY_UNCORRECTED  = 1,
2674    ADL_LOCALLY_UNCORRECTED   = 2,
2675    ADL_DEFFERRED             = 3,
2676    ADL_CORRECTED             = 4
2677}ADL_ERROR_RECORD_SEVERITY;
2678
2679typedef union _ADL_ECC_EDC_FLAG
2680{
2681    struct
2682    {
2683        unsigned int isEccAccessing        : 1;
2684        unsigned int reserved              : 31;
2685    }bits;
2686    unsigned int u32All;
2687}ADL_ECC_EDC_FLAG;
2688
2689/////////////////////////////////////////////////////////////////////////////////////////////
2690///\brief Structure containing information about EDC Error Record
2691///
2692/// This structure is used to store EDC Error Record
2693/// \nosubgrouping
2694////////////////////////////////////////////////////////////////////////////////////////////
2695typedef struct ADLErrorRecord
2696{
2697    // Severity of error
2698    ADL_ERROR_RECORD_SEVERITY Severity;
2699
2700    // Is the counter valid?
2701    int  countValid;
2702
2703    // Counter value, if valid
2704    unsigned int count;
2705
2706    // Is the location information valid?
2707    int locationValid;
2708
2709    // Physical location of error
2710    unsigned int CU; // CU number on which error occurred, if known
2711    char StructureName[32]; // e.g. LDS, TCC, etc.
2712
2713    // Time of error record creation (e.g. time of query, or time of poison interrupt)
2714    char tiestamp[32];
2715
2716    unsigned int padding[3];
2717}ADLErrorRecord;
2718
2719typedef enum ADL_EDC_BLOCK_ID
2720{
2721    ADL_EDC_BLOCK_ID_SQCIS = 1,
2722    ADL_EDC_BLOCK_ID_SQCDS = 2,
2723    ADL_EDC_BLOCK_ID_SGPR  = 3,
2724    ADL_EDC_BLOCK_ID_VGPR  = 4,
2725    ADL_EDC_BLOCK_ID_LDS   = 5,
2726    ADL_EDC_BLOCK_ID_GDS   = 6,
2727    ADL_EDC_BLOCK_ID_TCL1  = 7,
2728    ADL_EDC_BLOCK_ID_TCL2  = 8
2729}ADL_EDC_BLOCK_ID;
2730
2731typedef enum ADL_ERROR_INJECTION_MODE
2732{
2733    ADL_ERROR_INJECTION_MODE_SINGLE      = 1,
2734    ADL_ERROR_INJECTION_MODE_MULTIPLE    = 2,
2735    ADL_ERROR_INJECTION_MODE_ADDRESS     = 3
2736}ADL_ERROR_INJECTION_MODE;
2737
2738typedef union _ADL_ERROR_PATTERN
2739{
2740    struct
2741    {
2742        unsigned long  EccInjVector         :  16;
2743        unsigned long  EccInjEn             :  9;
2744        unsigned long  EccBeatEn            :  4;
2745        unsigned long  EccChEn              :  4;
2746        unsigned long  reserved             :  31;
2747    } bits;
2748    unsigned long long u64Value;
2749} ADL_ERROR_PATTERN;
2750
2751typedef struct ADL_ERROR_INJECTION_DATA
2752{
2753    unsigned long long errorAddress;
2754    ADL_ERROR_PATTERN errorPattern;
2755}ADL_ERROR_INJECTION_DATA;
2756
2757/////////////////////////////////////////////////////////////////////////////////////////////
2758///\brief Structure containing information about EDC Error Injection
2759///
2760/// This structure is used to store EDC Error Injection
2761/// \nosubgrouping
2762////////////////////////////////////////////////////////////////////////////////////////////
2763typedef struct ADLErrorInjection
2764{
2765    ADL_EDC_BLOCK_ID blockId;
2766    ADL_ERROR_INJECTION_MODE errorInjectionMode;
2767}ADLErrorInjection;
2768
2769typedef struct ADLErrorInjectionX2
2770{
2771    ADL_EDC_BLOCK_ID blockId;
2772    ADL_ERROR_INJECTION_MODE errorInjectionMode;
2773    ADL_ERROR_INJECTION_DATA errorInjectionData;
2774}ADLErrorInjectionX2;
2775
2776/////////////////////////////////////////////////////////////////////////////////////////////
2777///\brief Structure containing per display FreeSync capability information.
2778///
2779/// This structure is used to store the FreeSync capability of both the display and
2780/// the GPU the display is connected to.
2781/// \nosubgrouping
2782////////////////////////////////////////////////////////////////////////////////////////////
2783typedef struct ADLFreeSyncCap
2784{
2785    /// FreeSync capability flags. \ref define_freesync_caps
2786    int iCaps;
2787    /// Reports minimum FreeSync refresh rate supported by the display in micro hertz
2788    int iMinRefreshRateInMicroHz;
2789    /// Reports maximum FreeSync refresh rate supported by the display in micro hertz
2790    int iMaxRefreshRateInMicroHz;
2791    /// Index of FreeSync Label to use:  ADL_FREESYNC_LABEL_*
2792    unsigned char ucLabelIndex;
2793    /// Reserved
2794    char cReserved[3];
2795    int iReserved[4];
2796} ADLFreeSyncCap;
2797
2798/////////////////////////////////////////////////////////////////////////////////////////////
2799///\brief Structure containing per display Display Connectivty Experience Settings
2800///
2801/// This structure is used to store the Display Connectivity Experience settings of a
2802/// display
2803/// \nosubgrouping
2804////////////////////////////////////////////////////////////////////////////////////////////
2805typedef struct ADLDceSettings
2806{
2807    DceSettingsType type;                       // Defines which structure is in the union below
2808    union
2809    {
2810        struct
2811        {
2812            bool qualityDetectionEnabled;
2813        } HdmiLq;
2814        struct
2815        {
2816            DpLinkRate linkRate;                // Read-only
2817            unsigned int numberOfActiveLanes;   // Read-only
2818            unsigned int numberofTotalLanes;    // Read-only
2819            int relativePreEmphasis;            // Allowable values are -2 to +2
2820            int relativeVoltageSwing;           // Allowable values are -2 to +2
2821            int persistFlag;
2822        } DpLink;
2823        struct
2824        {
2825            bool linkProtectionEnabled;         // Read-only
2826        } Protection;
2827    } Settings;
2828    int iReserved[15];
2829} ADLDceSettings;
2830
2831/////////////////////////////////////////////////////////////////////////////////////////////
2832///\brief Structure containing information about Graphic Core
2833///
2834/// This structure is used to get Graphic Core Info
2835/// \nosubgrouping
2836////////////////////////////////////////////////////////////////////////////////////////////
2837typedef struct ADLGraphicCoreInfo
2838{
2839    /// indicate the graphic core generation
2840    int iGCGen;
2841
2842    union
2843    {
2844        /// Total number of CUs. Valid for GCN (iGCGen == GCN)
2845        int iNumCUs;
2846        /// Total number of WGPs. Valid for RDNA (iGCGen == RDNA)
2847        int iNumWGPs;
2848    };
2849
2850    union
2851    {
2852        /// Number of processing elements per CU. Valid for GCN (iGCGen == GCN)
2853        int iNumPEsPerCU;
2854        /// Number of processing elements per WGP. Valid for RDNA (iGCGen == RDNA)
2855        int iNumPEsPerWGP;
2856    };
2857
2858    /// Total number of SIMDs. Valid for Pre GCN (iGCGen == Pre-GCN)
2859    int iNumSIMDs;
2860
2861    /// Total number of ROPs. Valid for both GCN and Pre GCN
2862    int iNumROPs;
2863
2864    /// reserved for future use
2865    int iReserved[11];
2866}ADLGraphicCoreInfo;
2867
2868/////////////////////////////////////////////////////////////////////////////////////////////
2869///\brief Structure containing information about Overdrive N clock range
2870///
2871/// This structure is used to store information about Overdrive N clock range
2872/// \nosubgrouping
2873////////////////////////////////////////////////////////////////////////////////////////////
2874typedef struct ADLODNParameterRange
2875{
2876    /// The starting value of the clock range
2877    int     iMode;
2878    /// The starting value of the clock range
2879    int     iMin;
2880    /// The ending value of the clock range
2881    int     iMax;
2882    /// The minimum increment between clock values
2883    int     iStep;
2884    /// The default clock values
2885    int     iDefault;
2886} ADLODNParameterRange;
2887
2888/////////////////////////////////////////////////////////////////////////////////////////////
2889///\brief Structure containing information about Overdrive N capabilities
2890///
2891/// This structure is used to store information about Overdrive N capabilities
2892/// \nosubgrouping
2893////////////////////////////////////////////////////////////////////////////////////////////
2894typedef struct ADLODNCapabilities
2895{
2896    /// Number of levels which describe the minimum to maximum clock ranges.
2897    /// The 1st level indicates the minimum clocks, and the 2nd level
2898    /// indicates the maximum clocks.
2899    int     iMaximumNumberOfPerformanceLevels;
2900    /// Contains the hard limits of the sclk range.  Overdrive
2901    /// clocks cannot be set outside this range.
2902    ADLODNParameterRange     sEngineClockRange;
2903    /// Contains the hard limits of the mclk range.  Overdrive
2904    /// clocks cannot be set outside this range.
2905    ADLODNParameterRange     sMemoryClockRange;
2906    /// Contains the hard limits of the vddc range.  Overdrive
2907    /// clocks cannot be set outside this range.
2908    ADLODNParameterRange     svddcRange;
2909    /// Contains the hard limits of the power range.  Overdrive
2910    /// clocks cannot be set outside this range.
2911    ADLODNParameterRange     power;
2912    /// Contains the hard limits of the power range.  Overdrive
2913    /// clocks cannot be set outside this range.
2914    ADLODNParameterRange     powerTuneTemperature;
2915    /// Contains the hard limits of the Temperature range.  Overdrive
2916    /// clocks cannot be set outside this range.
2917    ADLODNParameterRange     fanTemperature;
2918    /// Contains the hard limits of the Fan range.  Overdrive
2919    /// clocks cannot be set outside this range.
2920    ADLODNParameterRange     fanSpeed;
2921    /// Contains the hard limits of the Fan range.  Overdrive
2922    /// clocks cannot be set outside this range.
2923    ADLODNParameterRange     minimumPerformanceClock;
2924} ADLODNCapabilities;
2925
2926/////////////////////////////////////////////////////////////////////////////////////////////
2927///\brief Structure containing information about Overdrive N capabilities
2928///
2929/// This structure is used to store information about Overdrive N capabilities
2930/// \nosubgrouping
2931////////////////////////////////////////////////////////////////////////////////////////////
2932typedef struct ADLODNCapabilitiesX2
2933{
2934    /// Number of levels which describe the minimum to maximum clock ranges.
2935    /// The 1st level indicates the minimum clocks, and the 2nd level
2936    /// indicates the maximum clocks.
2937    int     iMaximumNumberOfPerformanceLevels;
2938    /// bit vector, which tells what are the features are supported.
2939    /// \ref: ADLODNFEATURECONTROL
2940    int iFlags;
2941    /// Contains the hard limits of the sclk range.  Overdrive
2942    /// clocks cannot be set outside this range.
2943    ADLODNParameterRange     sEngineClockRange;
2944    /// Contains the hard limits of the mclk range.  Overdrive
2945    /// clocks cannot be set outside this range.
2946    ADLODNParameterRange     sMemoryClockRange;
2947    /// Contains the hard limits of the vddc range.  Overdrive
2948    /// clocks cannot be set outside this range.
2949    ADLODNParameterRange     svddcRange;
2950    /// Contains the hard limits of the power range.  Overdrive
2951    /// clocks cannot be set outside this range.
2952    ADLODNParameterRange     power;
2953    /// Contains the hard limits of the power range.  Overdrive
2954    /// clocks cannot be set outside this range.
2955    ADLODNParameterRange     powerTuneTemperature;
2956    /// Contains the hard limits of the Temperature range.  Overdrive
2957    /// clocks cannot be set outside this range.
2958    ADLODNParameterRange     fanTemperature;
2959    /// Contains the hard limits of the Fan range.  Overdrive
2960    /// clocks cannot be set outside this range.
2961    ADLODNParameterRange     fanSpeed;
2962    /// Contains the hard limits of the Fan range.  Overdrive
2963    /// clocks cannot be set outside this range.
2964    ADLODNParameterRange     minimumPerformanceClock;
2965    /// Contains the hard limits of the throttleNotification
2966    ADLODNParameterRange throttleNotificaion;
2967    /// Contains the hard limits of the Auto Systemclock
2968    ADLODNParameterRange autoSystemClock;
2969} ADLODNCapabilitiesX2;
2970
2971/////////////////////////////////////////////////////////////////////////////////////////////
2972///\brief Structure containing information about Overdrive level.
2973///
2974/// This structure is used to store information about Overdrive level.
2975/// This structure is used by ADLODPerformanceLevels.
2976/// \nosubgrouping
2977////////////////////////////////////////////////////////////////////////////////////////////
2978typedef struct ADLODNPerformanceLevel
2979{
2980    /// clock.
2981    int iClock;
2982    /// VDCC.
2983    int iVddc;
2984    /// enabled
2985    int iEnabled;
2986} ADLODNPerformanceLevel;
2987
2988/////////////////////////////////////////////////////////////////////////////////////////////
2989///\brief Structure containing information about Overdrive N performance levels.
2990///
2991/// This structure is used to store information about Overdrive performance levels.
2992/// This structure is used by the ADL_OverdriveN_ODPerformanceLevels_Get() and ADL_OverdriveN_ODPerformanceLevels_Set() functions.
2993/// \nosubgrouping
2994////////////////////////////////////////////////////////////////////////////////////////////
2995typedef struct ADLODNPerformanceLevels
2996{
2997    int iSize;
2998    //Automatic/manual
2999    int iMode;
3000    /// Must be set to sizeof( \ref ADLODPerformanceLevels ) + sizeof( \ref ADLODPerformanceLevel ) * (ADLODParameters.iNumberOfPerformanceLevels - 1)
3001    int iNumberOfPerformanceLevels;
3002    /// Array of performance state descriptors. Must have ADLODParameters.iNumberOfPerformanceLevels elements.
3003    ADLODNPerformanceLevel aLevels[1];
3004} ADLODNPerformanceLevels;
3005
3006/////////////////////////////////////////////////////////////////////////////////////////////
3007///\brief Structure containing information about Overdrive N Fan Speed.
3008///
3009/// This structure is used to store information about Overdrive Fan control .
3010/// This structure is used by the ADL_OverdriveN_ODPerformanceLevels_Get() and ADL_OverdriveN_ODPerformanceLevels_Set() functions.
3011/// \nosubgrouping
3012////////////////////////////////////////////////////////////////////////////////////////////
3013typedef struct ADLODNFanControl
3014{
3015    int iMode;
3016    int iFanControlMode;
3017    int iCurrentFanSpeedMode;
3018    int iCurrentFanSpeed;
3019    int iTargetFanSpeed;
3020    int iTargetTemperature;
3021    int iMinPerformanceClock;
3022    int iMinFanLimit;
3023} ADLODNFanControl;
3024
3025/////////////////////////////////////////////////////////////////////////////////////////////
3026///\brief Structure containing information about Overdrive N power limit.
3027///
3028/// This structure is used to store information about Overdrive power limit.
3029/// This structure is used by the ADL_OverdriveN_ODPerformanceLevels_Get() and ADL_OverdriveN_ODPerformanceLevels_Set() functions.
3030/// \nosubgrouping
3031////////////////////////////////////////////////////////////////////////////////////////////
3032typedef struct ADLODNPowerLimitSetting
3033{
3034    int iMode;
3035    int iTDPLimit;
3036    int iMaxOperatingTemperature;
3037} ADLODNPowerLimitSetting;
3038
3039typedef struct ADLODNPerformanceStatus
3040{
3041    int iCoreClock;
3042    int iMemoryClock;
3043    int iDCEFClock;
3044    int iGFXClock;
3045    int iUVDClock;
3046    int iVCEClock;
3047    int iGPUActivityPercent;
3048    int iCurrentCorePerformanceLevel;
3049    int iCurrentMemoryPerformanceLevel;
3050    int iCurrentDCEFPerformanceLevel;
3051    int iCurrentGFXPerformanceLevel;
3052    int iUVDPerformanceLevel;
3053    int iVCEPerformanceLevel;
3054    int iCurrentBusSpeed;
3055    int iCurrentBusLanes;
3056    int iMaximumBusLanes;
3057    int iVDDC;
3058    int iVDDCI;
3059} ADLODNPerformanceStatus;
3060
3061///\brief Structure containing information about Overdrive level.
3062///
3063/// This structure is used to store information about Overdrive level.
3064/// This structure is used by ADLODPerformanceLevels.
3065/// \nosubgrouping
3066////////////////////////////////////////////////////////////////////////////////////////////
3067typedef struct ADLODNPerformanceLevelX2
3068{
3069    /// clock.
3070    int iClock;
3071    /// VDCC.
3072    int iVddc;
3073    /// enabled
3074    int iEnabled;
3075    /// MASK
3076    int iControl;
3077} ADLODNPerformanceLevelX2;
3078
3079/////////////////////////////////////////////////////////////////////////////////////////////
3080///\brief Structure containing information about Overdrive N performance levels.
3081///
3082/// This structure is used to store information about Overdrive performance levels.
3083/// This structure is used by the ADL_OverdriveN_ODPerformanceLevels_Get() and ADL_OverdriveN_ODPerformanceLevels_Set() functions.
3084/// \nosubgrouping
3085////////////////////////////////////////////////////////////////////////////////////////////
3086typedef struct ADLODNPerformanceLevelsX2
3087{
3088    int iSize;
3089    //Automatic/manual
3090    int iMode;
3091    /// Must be set to sizeof( \ref ADLODPerformanceLevels ) + sizeof( \ref ADLODPerformanceLevel ) * (ADLODParameters.iNumberOfPerformanceLevels - 1)
3092    int iNumberOfPerformanceLevels;
3093    /// Array of performance state descriptors. Must have ADLODParameters.iNumberOfPerformanceLevels elements.
3094    ADLODNPerformanceLevelX2 aLevels[1];
3095} ADLODNPerformanceLevelsX2;
3096
3097typedef enum ADLODNCurrentPowerType
3098{
3099    ODN_GPU_TOTAL_POWER = 0,
3100    ODN_GPU_PPT_POWER,
3101    ODN_GPU_SOCKET_POWER,
3102    ODN_GPU_CHIP_POWER
3103} ADLODNCurrentPowerType;
3104
3105// in/out: CWDDEPM_CURRENTPOWERPARAMETERS
3106typedef struct ADLODNCurrentPowerParameters
3107{
3108    int   size;
3109    ADLODNCurrentPowerType   powerType;
3110    int  currentPower;
3111} ADLODNCurrentPowerParameters;
3112
3113//ODN Ext range data structure
3114typedef struct ADLODNExtSingleInitSetting
3115{
3116	int mode;
3117	int minValue;
3118	int maxValue;
3119	int step;
3120	int defaultValue;
3121} ADLODNExtSingleInitSetting;
3122
3123//OD8 Ext range data structure
3124typedef struct ADLOD8SingleInitSetting
3125{
3126    int featureID;
3127    int minValue;
3128    int maxValue;
3129    int defaultValue;
3130} ADLOD8SingleInitSetting;
3131
3132/////////////////////////////////////////////////////////////////////////////////////////////
3133///\brief Structure containing information about Overdrive8 initial setting
3134///
3135/// This structure is used to store information about Overdrive8 initial setting
3136/// \nosubgrouping
3137////////////////////////////////////////////////////////////////////////////////////////////
3138typedef struct ADLOD8InitSetting
3139{
3140    int count;
3141    int overdrive8Capabilities;
3142    ADLOD8SingleInitSetting  od8SettingTable[OD8_COUNT];
3143} ADLOD8InitSetting;
3144
3145/////////////////////////////////////////////////////////////////////////////////////////////
3146///\brief Structure containing information about Overdrive8 current setting
3147///
3148/// This structure is used to store information about Overdrive8 current setting
3149/// \nosubgrouping
3150////////////////////////////////////////////////////////////////////////////////////////////
3151typedef struct ADLOD8CurrentSetting
3152{
3153    int count;
3154    int Od8SettingTable[OD8_COUNT];
3155} ADLOD8CurrentSetting;
3156
3157/////////////////////////////////////////////////////////////////////////////////////////////
3158///\brief Structure containing information about Overdrive8 set setting
3159///
3160/// This structure is used to store information about Overdrive8 set setting
3161/// \nosubgrouping
3162////////////////////////////////////////////////////////////////////////////////////////////
3163
3164typedef struct ADLOD8SingleSetSetting
3165{
3166    int value;
3167    int requested;      // 0 - default , 1 - requested
3168    int reset;          // 0 - do not reset , 1 - reset setting back to default
3169} ADLOD8SingleSetSetting;
3170
3171typedef struct ADLOD8SetSetting
3172{
3173    int count;
3174    ADLOD8SingleSetSetting  od8SettingTable[OD8_COUNT];
3175} ADLOD8SetSetting;
3176
3177/////////////////////////////////////////////////////////////////////////////////////////////
3178///\brief Structure containing information about Performance Metrics data
3179///
3180/// This structure is used to store information about Performance Metrics data output
3181/// \nosubgrouping
3182////////////////////////////////////////////////////////////////////////////////////////////
3183typedef struct ADLSingleSensorData
3184{
3185    int supported;
3186    int  value;
3187} ADLSingleSensorData;
3188
3189typedef struct ADLPMLogDataOutput
3190{
3191    int size;
3192    ADLSingleSensorData sensors[ADL_PMLOG_MAX_SENSORS];
3193}ADLPMLogDataOutput;
3194
3195/////////////////////////////////////////////////////////////////////////////////////////////
3196///\brief Structure containing information about PPLog settings.
3197///
3198/// This structure is used to store information about PPLog settings.
3199/// This structure is used by the ADL2_PPLogSettings_Set() and ADL2_PPLogSettings_Get() functions.
3200/// \nosubgrouping
3201////////////////////////////////////////////////////////////////////////////////////////////
3202typedef struct ADLPPLogSettings
3203{
3204    int BreakOnAssert;
3205    int BreakOnWarn;
3206    int LogEnabled;
3207    int LogFieldMask;
3208    int LogDestinations;
3209    int LogSeverityEnabled;
3210    int LogSourceMask;
3211    int PowerProfilingEnabled;
3212    int PowerProfilingTimeInterval;
3213}ADLPPLogSettings;
3214
3215/////////////////////////////////////////////////////////////////////////////////////////////
3216///\brief Structure containing information related Frames Per Second for AC and DC.
3217///
3218/// This structure is used to store information related AC and DC Frames Per Second settings
3219/// \nosubgrouping
3220////////////////////////////////////////////////////////////////////////////////////////////
3221typedef struct ADLFPSSettingsOutput
3222{
3223    /// size
3224    int ulSize;
3225    /// FPS Monitor is enabled in the AC state if 1
3226    int bACFPSEnabled;
3227    /// FPS Monitor is enabled in the DC state if 1
3228    int bDCFPSEnabled;
3229    /// Current Value of FPS Monitor in AC state
3230    int ulACFPSCurrent;
3231    /// Current Value of FPS Monitor in DC state
3232    int ulDCFPSCurrent;
3233    /// Maximum FPS Threshold allowed in PPLib for AC
3234    int ulACFPSMaximum;
3235    /// Minimum FPS Threshold allowed in PPLib for AC
3236    int ulACFPSMinimum;
3237    /// Maximum FPS Threshold allowed in PPLib for DC
3238    int ulDCFPSMaximum;
3239    /// Minimum FPS Threshold allowed in PPLib for DC
3240    int ulDCFPSMinimum;
3241} ADLFPSSettingsOutput;
3242
3243/////////////////////////////////////////////////////////////////////////////////////////////
3244///\brief Structure containing information related Frames Per Second for AC and DC.
3245///
3246/// This structure is used to store information related AC and DC Frames Per Second settings
3247/// \nosubgrouping
3248////////////////////////////////////////////////////////////////////////////////////////////
3249typedef struct ADLFPSSettingsInput
3250{
3251    /// size
3252    int ulSize;
3253    /// Settings are for Global FPS (used by CCC)
3254    int bGlobalSettings;
3255    /// Current Value of FPS Monitor in AC state
3256    int ulACFPSCurrent;
3257    /// Current Value of FPS Monitor in DC state
3258    int ulDCFPSCurrent;
3259    /// Reserved
3260    int ulReserved[6];
3261} ADLFPSSettingsInput;
3262
3263/////////////////////////////////////////////////////////////////////////////////////////////
3264///\brief Structure containing information related power management logging.
3265///
3266/// This structure is used to store support information for power management logging.
3267/// \nosubgrouping
3268////////////////////////////////////////////////////////////////////////////////////////////
3269enum { ADL_PMLOG_MAX_SUPPORTED_SENSORS = 256 };
3270
3271typedef struct ADLPMLogSupportInfo
3272{
3273    /// list of sensors defined by ADL_PMLOG_SENSORS
3274    unsigned short usSensors[ADL_PMLOG_MAX_SUPPORTED_SENSORS];
3275    /// Reserved
3276    int ulReserved[16];
3277} ADLPMLogSupportInfo;
3278
3279/////////////////////////////////////////////////////////////////////////////////////////////
3280///\brief Structure containing information to start power management logging.
3281///
3282/// This structure is used as input to ADL2_Adapter_PMLog_Start
3283/// \nosubgrouping
3284////////////////////////////////////////////////////////////////////////////////////////////
3285typedef struct ADLPMLogStartInput
3286{
3287    /// list of sensors defined by ADL_PMLOG_SENSORS
3288    unsigned short usSensors[ADL_PMLOG_MAX_SUPPORTED_SENSORS];
3289    /// Sample rate in milliseconds
3290    unsigned long ulSampleRate;
3291    /// Reserved
3292    int ulReserved[15];
3293} ADLPMLogStartInput;
3294
3295typedef struct ADLPMLogData
3296{
3297    /// Structure version
3298    unsigned int ulVersion;
3299    /// Current driver sample rate
3300    unsigned int ulActiveSampleRate;
3301    /// Timestamp of last update
3302    unsigned long long ulLastUpdated;
3303    /// 2D array of senesor and values
3304    unsigned int ulValues[ADL_PMLOG_MAX_SUPPORTED_SENSORS][2];
3305    /// Reserved
3306    unsigned int ulReserved[256];
3307} ADLPMLogData;
3308
3309/////////////////////////////////////////////////////////////////////////////////////////////
3310///\brief Structure containing information to start power management logging.
3311///
3312/// This structure is returned as output from ADL2_Adapter_PMLog_Start
3313/// \nosubgrouping
3314////////////////////////////////////////////////////////////////////////////////////////////
3315typedef struct ADLPMLogStartOutput
3316{
3317    /// Pointer to memory address containing logging data
3318    union
3319    {
3320        void* pLoggingAddress;
3321        unsigned long long ptr_LoggingAddress;
3322    };
3323    /// Reserved
3324    int ulReserved[14];
3325} ADLPMLogStartOutput;
3326
3327/////////////////////////////////////////////////////////////////////////////////////////////
3328///\brief Structure containing information to query limts of power management logging.
3329///
3330/// This structure is returned as output from ADL2_Adapter_PMLog_SensorLimits_Get
3331/// \nosubgrouping
3332////////////////////////////////////////////////////////////////////////////////////////////
3333typedef struct ADLPMLogSensorLimits
3334{
3335    int SensorLimits[ADL_PMLOG_MAX_SENSORS][2]; //index 0: min, 1: max
3336} ADLPMLogSensorLimits;
3337
3338/////////////////////////////////////////////////////////////////////////////////////////////
3339///\brief Structure containing information related RAS Get Error Counts Information
3340///
3341/// This structure is used to store RAS Error Counts Get Input Information
3342/// \nosubgrouping
3343////////////////////////////////////////////////////////////////////////////////////////////
3344
3345typedef struct ADLRASGetErrorCountsInput
3346{
3347    unsigned int                Reserved[16];
3348} ADLRASGetErrorCountsInput;
3349
3350/////////////////////////////////////////////////////////////////////////////////////////////
3351///\brief Structure containing information related RAS Get Error Counts Information
3352///
3353/// This structure is used to store RAS Error Counts Get Output Information
3354/// \nosubgrouping
3355////////////////////////////////////////////////////////////////////////////////////////////
3356
3357typedef struct ADLRASGetErrorCountsOutput
3358{
3359    unsigned int                CorrectedErrors;    // includes both DRAM and SRAM ECC
3360    unsigned int                UnCorrectedErrors;  // includes both DRAM and SRAM ECC
3361    unsigned int                Reserved[14];
3362} ADLRASGetErrorCountsOutput;
3363
3364/////////////////////////////////////////////////////////////////////////////////////////////
3365///\brief Structure containing information related RAS Get Error Counts Information
3366///
3367/// This structure is used to store RAS Error Counts Get Information
3368/// \nosubgrouping
3369////////////////////////////////////////////////////////////////////////////////////////////
3370
3371typedef struct ADLRASGetErrorCounts
3372{
3373    unsigned int                InputSize;
3374    ADLRASGetErrorCountsInput   Input;
3375    unsigned int                OutputSize;
3376    ADLRASGetErrorCountsOutput  Output;
3377} ADLRASGetErrorCounts;
3378
3379/////////////////////////////////////////////////////////////////////////////////////////////
3380///\brief Structure containing information related RAS Error Counts Reset Information
3381///
3382/// This structure is used to store RAS Error Counts Reset Input Information
3383/// \nosubgrouping
3384////////////////////////////////////////////////////////////////////////////////////////////
3385
3386typedef struct ADLRASResetErrorCountsInput
3387{
3388    unsigned int                Reserved[8];
3389} ADLRASResetErrorCountsInput;
3390
3391/////////////////////////////////////////////////////////////////////////////////////////////
3392///\brief Structure containing information related RAS Error Counts Reset Information
3393///
3394/// This structure is used to store RAS Error Counts Reset Output Information
3395/// \nosubgrouping
3396////////////////////////////////////////////////////////////////////////////////////////////
3397
3398typedef struct ADLRASResetErrorCountsOutput
3399{
3400    unsigned int                Reserved[8];
3401} ADLRASResetErrorCountsOutput;
3402
3403/////////////////////////////////////////////////////////////////////////////////////////////
3404///\brief Structure containing information related RAS Error Counts Reset Information
3405///
3406/// This structure is used to store RAS Error Counts Reset Information
3407/// \nosubgrouping
3408////////////////////////////////////////////////////////////////////////////////////////////
3409
3410typedef struct ADLRASResetErrorCounts
3411{
3412    unsigned int                    InputSize;
3413    ADLRASResetErrorCountsInput     Input;
3414    unsigned int                    OutputSize;
3415    ADLRASResetErrorCountsOutput    Output;
3416} ADLRASResetErrorCounts;
3417
3418/////////////////////////////////////////////////////////////////////////////////////////////
3419///\brief Structure containing information related RAS Error Injection information
3420///
3421/// This structure is used to store RAS Error Injection input information
3422/// \nosubgrouping
3423////////////////////////////////////////////////////////////////////////////////////////////
3424
3425typedef struct ADLRASErrorInjectonInput
3426{
3427    unsigned long long Address;
3428    ADL_RAS_INJECTION_METHOD Value;
3429    ADL_RAS_BLOCK_ID BlockId;
3430    ADL_RAS_ERROR_TYPE InjectErrorType;
3431    ADL_MEM_SUB_BLOCK_ID SubBlockIndex;
3432    unsigned int padding[9];
3433} ADLRASErrorInjectonInput;
3434
3435/////////////////////////////////////////////////////////////////////////////////////////////
3436///\brief Structure containing information related RAS Error Injection information
3437///
3438/// This structure is used to store RAS Error Injection output information
3439/// \nosubgrouping
3440////////////////////////////////////////////////////////////////////////////////////////////
3441
3442typedef struct ADLRASErrorInjectionOutput
3443{
3444    unsigned int ErrorInjectionStatus;
3445    unsigned int padding[15];
3446} ADLRASErrorInjectionOutput;
3447
3448/////////////////////////////////////////////////////////////////////////////////////////////
3449///\brief Structure containing information related RAS Error Injection information
3450///
3451/// This structure is used to store RAS Error Injection information
3452/// \nosubgrouping
3453////////////////////////////////////////////////////////////////////////////////////////////
3454
3455typedef struct ADLRASErrorInjection
3456{
3457    unsigned int                           InputSize;
3458    ADLRASErrorInjectonInput               Input;
3459    unsigned int                           OutputSize;
3460    ADLRASErrorInjectionOutput             Output;
3461} ADLRASErrorInjection;
3462
3463/////////////////////////////////////////////////////////////////////////////////////////////
3464///\brief Structure containing information about an application
3465///
3466/// This structure is used to store basic information of a recently ran or currently running application
3467/// \nosubgrouping
3468////////////////////////////////////////////////////////////////////////////////////////////
3469typedef struct ADLSGApplicationInfo
3470{
3471    /// Application file name
3472    wchar_t strFileName[ADL_MAX_PATH];
3473    /// Application file path
3474    wchar_t strFilePath[ADL_MAX_PATH];
3475    /// Application version
3476    wchar_t strVersion[ADL_MAX_PATH];
3477    /// Timestamp at which application has run
3478    long long int timeStamp;
3479    /// Holds whether the applicaition profile exists or not
3480    unsigned int iProfileExists;
3481    /// The GPU on which application runs
3482    unsigned int iGPUAffinity;
3483    /// The BDF of the GPU on which application runs
3484    ADLBdf GPUBdf;
3485} ADLSGApplicationInfo;
3486
3487/////////////////////////////////////////////////////////////////////////////////////////////
3488///\brief Structure containing information related Frames Per Second for AC and DC.
3489///
3490/// This structure is used to store information related AC and DC Frames Per Second settings
3491/// \nosubgrouping
3492////////////////////////////////////////////////////////////////////////////////////////////
3493enum { ADLPreFlipPostProcessingInfoInvalidLUTIndex = 0xFFFFFFFF };
3494
3495enum ADLPreFlipPostProcessingLUTAlgorithm
3496{
3497    ADLPreFlipPostProcessingLUTAlgorithm_Default = 0,
3498    ADLPreFlipPostProcessingLUTAlgorithm_Full,
3499    ADLPreFlipPostProcessingLUTAlgorithm_Approximation
3500};
3501
3502typedef struct ADLPreFlipPostProcessingInfo
3503{
3504    /// size
3505    int ulSize;
3506    /// Current active state
3507    int bEnabled;
3508    /// Current selected LUT index.  0xFFFFFFF returned if nothing selected.
3509    int ulSelectedLUTIndex;
3510    /// Current selected LUT Algorithm
3511    int ulSelectedLUTAlgorithm;
3512    /// Reserved
3513    int ulReserved[12];
3514} ADLPreFlipPostProcessingInfo;
3515
3516typedef struct ADL_ERROR_REASON
3517{
3518    int boost; //ON, when boost is Enabled
3519    int delag; //ON, when delag is Enabled
3520    int chill; //ON, when chill is Enabled
3521    int proVsr; //ON, when proVsr is Enabled
3522}ADL_ERROR_REASON;
3523
3524typedef struct ADL_ERROR_REASON2
3525{
3526    int boost; //ON, when boost is Enabled
3527    int delag; //ON, when delag is Enabled
3528    int chill; //ON, when chill is Enabled
3529    int proVsr; //ON, when proVsr is Enabled
3530    int upscale; //ON, when RSR is Enabled
3531}ADL_ERROR_REASON2;
3532
3533/////////////////////////////////////////////////////////////////////////////////////////////
3534///\brief Structure containing information about DELAG Settings change reason
3535///
3536///  Elements of DELAG settings changed reason.
3537/// \nosubgrouping
3538////////////////////////////////////////////////////////////////////////////////////////////
3539typedef struct ADL_DELAG_NOTFICATION_REASON
3540{
3541	int HotkeyChanged; //Set when Hotkey value is changed
3542	int GlobalEnableChanged; //Set when Global enable value is changed
3543	int GlobalLimitFPSChanged; //Set when Global enable value is changed
3544}ADL_DELAG_NOTFICATION_REASON;
3545
3546/////////////////////////////////////////////////////////////////////////////////////////////
3547///\brief Structure containing information about DELAG Settings
3548///
3549///  Elements of DELAG settings.
3550/// \nosubgrouping
3551////////////////////////////////////////////////////////////////////////////////////////////
3552typedef struct ADL_DELAG_SETTINGS
3553{
3554	int Hotkey; // Hotkey value
3555	int GlobalEnable; //Global enable value
3556	int GlobalLimitFPS; //Global Limit FPS
3557	int GlobalLimitFPS_MinLimit; //Gloabl Limit FPS slider min limit value
3558	int GlobalLimitFPS_MaxLimit; //Gloabl Limit FPS slider max limit value
3559	int GlobalLimitFPS_Step; //Gloabl Limit FPS step  value
3560}ADL_DELAG_SETTINGS;
3561
3562/////////////////////////////////////////////////////////////////////////////////////////////
3563///\brief Structure containing information about BOOST Settings change reason
3564///
3565///  Elements of BOOST settings changed reason.
3566/// \nosubgrouping
3567////////////////////////////////////////////////////////////////////////////////////////////
3568typedef struct ADL_BOOST_NOTFICATION_REASON
3569{
3570	int HotkeyChanged; //Set when Hotkey value is changed
3571	int GlobalEnableChanged; //Set when Global enable value is changed
3572	int GlobalMinResChanged; //Set when Global min resolution value is changed
3573}ADL_BOOST_NOTFICATION_REASON;
3574
3575/////////////////////////////////////////////////////////////////////////////////////////////
3576///\brief Structure containing information about BOOST Settings
3577///
3578///  Elements of BOOST settings.
3579/// \nosubgrouping
3580////////////////////////////////////////////////////////////////////////////////////////////
3581typedef struct ADL_BOOST_SETTINGS
3582{
3583	int Hotkey; // Hotkey value
3584	int GlobalEnable; //Global enable value
3585	int GlobalMinRes; //Gloabl Min Resolution value
3586	int GlobalMinRes_MinLimit; //Gloabl Min Resolution slider min limit value
3587	int GlobalMinRes_MaxLimit; //Gloabl Min Resolution slider max limit value
3588	int GlobalMinRes_Step; //Gloabl Min Resolution step  value
3589}ADL_BOOST_SETTINGS;
3590
3591/////////////////////////////////////////////////////////////////////////////////////////////
3592///\brief Structure containing information about BOOST Settings
3593///
3594///  Elements of BOOST settings.
3595/// \nosubgrouping
3596////////////////////////////////////////////////////////////////////////////////////////////
3597typedef struct ADL_BOOST_SETTINGSX2
3598{
3599    int Hotkey; // Hotkey value
3600    int GlobalEnable; //Global enable value
3601    int GlobalMinRes; //Gloabl Min Resolution value
3602    int GlobalMinRes_MinLimit; //Gloabl Min Resolution slider min limit value
3603    int GlobalMinRes_MaxLimit; //Gloabl Min Resolution slider max limit value
3604    int GlobalMinRes_Step; //Gloabl Min Resolution step  value
3605    int VsrSupported; //Allows for interop with Upscaling/RSR
3606}ADL_BOOST_SETTINGSX2;
3607
3608
3609/////////////////////////////////////////////////////////////////////////////////////////////
3610///\brief Structure containing information about ProVSR Settings change reason
3611///
3612///  Elements of ProVSR settings changed reason.
3613/// \nosubgrouping
3614////////////////////////////////////////////////////////////////////////////////////////////
3615typedef struct ADL_PROVSR_NOTFICATION_REASON
3616{
3617	int HotkeyChanged; //Set when Hotkey value is changed
3618	int GlobalEnableChanged; //Set when Global enable value is changed
3619}ADL_PROVSR_NOTFICATION_REASON;
3620
3621/////////////////////////////////////////////////////////////////////////////////////////////
3622///\brief Structure containing information about Pro VSR Settings
3623///
3624///  Elements of ProVSR settings.
3625/// \nosubgrouping
3626////////////////////////////////////////////////////////////////////////////////////////////
3627typedef struct ADL_PROVSR_SETTINGS
3628{
3629	int Hotkey; // Hotkey value
3630	int GlobalEnable; //Global enable value
3631}ADL_PROVSR_SETTINGS;
3632
3633/////////////////////////////////////////////////////////////////////////////////////////////
3634///\brief Structure containing information about Image Boost(OGL) Settings change reason
3635///
3636///  Elements of Image Boost settings changed reason.
3637/// \nosubgrouping
3638////////////////////////////////////////////////////////////////////////////////////////////
3639typedef struct ADL_IMAGE_BOOST_NOTFICATION_REASON
3640{
3641    int HotkeyChanged; //Set when Hotkey value is changed
3642    int GlobalEnableChanged; //Set when Global enable value is changed
3643}ADL_IMAGE_BOOST_NOTFICATION_REASON;
3644
3645/////////////////////////////////////////////////////////////////////////////////////////////
3646///\brief Structure containing information about OGL IMAGE BOOST Settings
3647///
3648///  Elements of OGL IMAGE BOOST settings.
3649/// \nosubgrouping
3650////////////////////////////////////////////////////////////////////////////////////////////
3651typedef struct ADL_IMAGE_BOOST_SETTINGS
3652{
3653    int Hotkey; // Hotkey value
3654    int GlobalEnable; //Global enable value
3655}ADL_IMAGE_BOOST_SETTINGS;
3656
3657/////////////////////////////////////////////////////////////////////////////////////////////
3658
3659/////////////////////////////////////////////////////////////////////////////////////////////
3660///\brief Structure containing information about RIS Settings change reason
3661///
3662///  Elements of RIS settings changed reason.
3663/// \nosubgrouping
3664////////////////////////////////////////////////////////////////////////////////////////////
3665typedef struct ADL_RIS_NOTFICATION_REASON
3666{
3667	unsigned int GlobalEnableChanged; //Set when Global enable value is changed
3668	unsigned int GlobalSharpeningDegreeChanged; //Set when Global sharpening Degree value is changed
3669}ADL_RIS_NOTFICATION_REASON;
3670
3671/////////////////////////////////////////////////////////////////////////////////////////////
3672///\brief Structure containing information about RIS Settings
3673///
3674///  Elements of RIS settings.
3675/// \nosubgrouping
3676////////////////////////////////////////////////////////////////////////////////////////////
3677typedef struct ADL_RIS_SETTINGS
3678{
3679	int GlobalEnable; //Global enable value
3680	int GlobalSharpeningDegree; //Global sharpening value
3681	int GlobalSharpeningDegree_MinLimit; //Gloabl sharpening slider min limit value
3682	int GlobalSharpeningDegree_MaxLimit; //Gloabl sharpening slider max limit value
3683	int GlobalSharpeningDegree_Step; //Gloabl sharpening step  value
3684}ADL_RIS_SETTINGS;
3685
3686/////////////////////////////////////////////////////////////////////////////////////////////
3687///\brief Structure containing information about CHILL Settings change reason
3688///
3689///  Elements of Chiil settings changed reason.
3690/// \nosubgrouping
3691////////////////////////////////////////////////////////////////////////////////////////////
3692typedef struct ADL_CHILL_NOTFICATION_REASON
3693{
3694	int HotkeyChanged; //Set when Hotkey value is changed
3695	int GlobalEnableChanged; //Set when Global enable value is changed
3696	int GlobalMinFPSChanged; //Set when Global min FPS value is changed
3697	int GlobalMaxFPSChanged; //Set when Global max FPS value is changed
3698}ADL_CHILL_NOTFICATION_REASON;
3699
3700/////////////////////////////////////////////////////////////////////////////////////////////
3701///\brief Structure containing information about CHILL Settings
3702///
3703///  Elements of Chill settings.
3704/// \nosubgrouping
3705////////////////////////////////////////////////////////////////////////////////////////////
3706typedef struct ADL_CHILL_SETTINGS
3707{
3708	int Hotkey; // Hotkey value
3709	int GlobalEnable; //Global enable value
3710	int GlobalMinFPS; //Global Min FPS value
3711	int GlobalMaxFPS; //Global Max FPS value
3712	int GlobalFPS_MinLimit; //Gloabl FPS slider min limit value
3713	int GlobalFPS_MaxLimit; //Gloabl FPS slider max limit value
3714	int GlobalFPS_Step; //Gloabl FPS Slider step  value
3715}ADL_CHILL_SETTINGS;
3716
3717/////////////////////////////////////////////////////////////////////////////////////////////
3718///\brief Structure containing information about DRIVERUPSCALE Settings change reason
3719///
3720///  Elements of DRIVERUPSCALE settings changed reason.
3721/// \nosubgrouping
3722////////////////////////////////////////////////////////////////////////////////////////////
3723typedef struct ADL_DRIVERUPSCALE_NOTFICATION_REASON
3724{
3725    int ModeOverrideEnabledChanged;     //Set when Global min resolution value is changed
3726    int GlobalEnabledChanged;           //Set when Global enable value is changed
3727}ADL_DRIVERUPSCALE_NOTFICATION_REASON;
3728
3729/////////////////////////////////////////////////////////////////////////////////////////////
3730///\brief Structure containing information about DRIVERUPSCALE Settings
3731///
3732///  Elements of DRIVERUPSCALE settings.
3733/// \nosubgrouping
3734////////////////////////////////////////////////////////////////////////////////////////////
3735typedef struct ADL_DRIVERUPSCALE_SETTINGS
3736{
3737    int ModeOverrideEnabled;
3738    int GlobalEnabled;
3739}ADL_DRIVERUPSCALE_SETTINGS;
3740
3741/////////////////////////////////////////////////////////////////////////////////////////////
3742///\brief  Structure Containing R G B values for Radeon USB LED Bar
3743///
3744/// Elements of RGB Values.
3745/// \nosubgrouping
3746////////////////////////////////////////////////////////////////////////////////////////////
3747typedef struct ADL_RADEON_LED_COLOR_CONFIG
3748{
3749	unsigned short R : 8; // Red Value
3750	unsigned short G : 8; // Green Value
3751	unsigned short B : 8; // Blue Value
3752}ADL_RADEON_LED_COLOR_CONFIG;
3753
3754/////////////////////////////////////////////////////////////////////////////////////////////
3755///\brief Structure Containing All Generic LED configuration for user requested LED pattern. The driver will apply the confgiuration as requested
3756///
3757///  Elements of Radeon USB LED configuration.
3758/// \nosubgrouping
3759////////////////////////////////////////////////////////////////////////////////////////////
3760typedef struct ADL_RADEON_LED_PATTERN_CONFIG_GENERIC
3761{
3762	short brightness : 8; // Brightness of LED
3763	short speed : 8; // Speed of LED pattern
3764	bool directionCounterClockWise; //Direction of LED Pattern
3765	ADL_RADEON_LED_COLOR_CONFIG colorConfig; // RGB value of LED pattern
3766	char morseCodeText[ADL_RADEON_LED_MAX_MORSE_CODE]; // Morse Code user input for Morse Code LED pattern
3767	char morseCodeTextOutPut[ADL_RADEON_LED_MAX_MORSE_CODE]; // Driver set output representation of Morse Code
3768	int  morseCodeTextOutPutLen; // Length of Morse Code output
3769}ADL_RADEON_LED_PATTERN_CONFIG_GENERIC;
3770
3771/////////////////////////////////////////////////////////////////////////////////////////////
3772///\brief Structure Containing All custom grid pattern LED configuration for user requested LED grid pattern. The driver will apply the confgiuration as requested
3773///
3774///  Elements of Radeon USB LED custom grid configuration.
3775/// \nosubgrouping
3776////////////////////////////////////////////////////////////////////////////////////////////
3777typedef struct ADL_RADEON_LED_CUSTOM_LED_CONFIG
3778{
3779	short brightness : 8; // Brightness of LED
3780	ADL_RADEON_LED_COLOR_CONFIG colorConfig[ADL_RADEON_LED_MAX_LED_ROW_ON_GRID][ADL_RADEON_LED_MAX_LED_COLUMN_ON_GRID]; // Full grid array representation of Radeon LED to be populated by user
3781}ADL_RADEON_LED_CUSTOM_GRID_LED_CONFIG;
3782
3783/////////////////////////////////////////////////////////////////////////////////////////////
3784///\brief Structure Containing All Radeon USB LED requests and controls.
3785///
3786/// Elements of Radeon USB LED Controls.
3787/// \nosubgrouping
3788////////////////////////////////////////////////////////////////////////////////////////////
3789typedef struct ADL_RADEON_LED_PATTERN_CONFIG
3790{
3791	ADL_RADEON_USB_LED_BAR_CONTROLS control; //Requested LED pattern
3792
3793    union
3794    {
3795		ADL_RADEON_LED_PATTERN_CONFIG_GENERIC genericPararmeters; //Requested pattern configuration settings
3796		ADL_RADEON_LED_CUSTOM_GRID_LED_CONFIG customGridConfig; //Requested custom grid configuration settings
3797    };
3798}ADL_RADEON_LED_PATTERN_CONFIG;
3799
3800/////////////////////////////////////////////////////////////////////////////////////////////
3801///\brief Structure containing information about the graphics adapter with extended caps
3802///
3803/// This structure is used to store various information about the graphics adapter.  This
3804/// information can be returned to the user. Alternatively, it can be used to access various driver calls to set
3805/// or fetch various settings upon the user's request.
3806/// This AdapterInfoX2 struct extends the AdapterInfo struct in adl_structures.h
3807/// \nosubgrouping
3808////////////////////////////////////////////////////////////////////////////////////////////
3809typedef struct AdapterInfoX2
3810{
3811    /// \WIN_STRUCT_MEM
3812
3813    /// Size of the structure.
3814    int iSize;
3815    /// The ADL index handle. One GPU may be associated with one or two index handles
3816    int iAdapterIndex;
3817    /// The unique device ID associated with this adapter.
3818    char strUDID[ADL_MAX_PATH];
3819    /// The BUS number associated with this adapter.
3820    int iBusNumber;
3821    /// The driver number associated with this adapter.
3822    int iDeviceNumber;
3823    /// The function number.
3824    int iFunctionNumber;
3825    /// The vendor ID associated with this adapter.
3826    int iVendorID;
3827    /// Adapter name.
3828    char strAdapterName[ADL_MAX_PATH];
3829    /// Display name. For example, "\\\\Display0"
3830    char strDisplayName[ADL_MAX_PATH];
3831    /// Present or not; 1 if present and 0 if not present.It the logical adapter is present, the display name such as \\\\.\\Display1 can be found from OS
3832    int iPresent;
3833    /// Exist or not; 1 is exist and 0 is not present.
3834    int iExist;
3835    /// Driver registry path.
3836    char strDriverPath[ADL_MAX_PATH];
3837    /// Driver registry path Ext for.
3838    char strDriverPathExt[ADL_MAX_PATH];
3839    /// PNP string from Windows.
3840    char strPNPString[ADL_MAX_PATH];
3841    /// It is generated from EnumDisplayDevices.
3842    int iOSDisplayIndex;
3843    /// The bit mask identifies the adapter info
3844    int iInfoMask;
3845    /// The bit identifies the adapter info \ref define_adapter_info
3846    int iInfoValue;
3847} AdapterInfoX2, *LPAdapterInfoX2;
3848
3849/////////////////////////////////////////////////////////////////////////////////////////////
3850///\brief Structure containing information about driver  gamut space , whether it is related to source or to destination, overlay or graphics
3851/// \nosubgrouping
3852////////////////////////////////////////////////////////////////////////////////////////////
3853
3854typedef  struct ADLGamutReference
3855{
3856    /// mask whether it is related to source or to destination, overlay or graphics
3857    int      iGamutRef;
3858}ADLGamutReference;
3859
3860/////////////////////////////////////////////////////////////////////////////////////////////
3861///\brief Structure containing information about driver supported gamut spaces , capability method
3862///
3863/// This structure is used to get driver all supported gamut spaces
3864/// \nosubgrouping
3865////////////////////////////////////////////////////////////////////////////////////////////
3866
3867typedef struct ADLGamutInfo
3868{
3869    ///Any combination of following ADL_GAMUT_SPACE_CCIR_709 - ADL_GAMUT_SPACE_CUSTOM
3870    int    SupportedGamutSpace;
3871
3872    ///Any combination of following ADL_WHITE_POINT_5000K - ADL_WHITE_POINT_CUSTOM
3873    int    SupportedWhitePoint;
3874} ADLGamutInfo;
3875
3876/////////////////////////////////////////////////////////////////////////////////////////////
3877///\brief Structure containing information about driver point coordinates
3878///
3879/// This structure is used to store the driver point coodinates for gamut and white point
3880/// \nosubgrouping
3881////////////////////////////////////////////////////////////////////////////////////////////
3882
3883typedef struct ADLPoint
3884{
3885    /// x coordinate
3886    int          iX;
3887    /// y coordinate
3888    int          iY;
3889} ADLPoint;
3890/////////////////////////////////////////////////////////////////////////////////////////////
3891///\brief Structure containing information about driver supported gamut coordinates
3892///
3893/// This structure is used to store the driver supported supported gamut coordinates
3894/// \nosubgrouping
3895////////////////////////////////////////////////////////////////////////////////////////////
3896
3897typedef struct ADLGamutCoordinates
3898{
3899    /// red channel chromasity coordinate
3900    ADLPoint      Red;
3901    /// green channel chromasity coordinate
3902    ADLPoint      Green;
3903    /// blue channel chromasity coordinate
3904    ADLPoint      Blue;
3905} ADLGamutCoordinates;
3906
3907/////////////////////////////////////////////////////////////////////////////////////////////
3908///\brief Structure containing information about driver current gamut space , parent struct for ADLGamutCoordinates and ADLWhitePoint
3909/// This structure is used to get/set driver supported gamut space
3910/// \nosubgrouping
3911////////////////////////////////////////////////////////////////////////////////////////////
3912
3913typedef  struct ADLGamutData
3914{
3915    ///used as mask and could be 4 options
3916    ///BIT_0 If flag ADL_GAMUT_REFERENCE_SOURCE is asserted set operation is related to gamut source ,
3917    ///if not gamut destination
3918    ///BIT_1 If flag ADL_GAMUT_GAMUT_VIDEO_CONTENT is asserted
3919    ///BIT_2,BIT_3 used as mask and could be 4 options custom (2) + predefined (2)
3920    ///0.  Gamut predefined,        white point predefined -> 0                | 0
3921    ///1.  Gamut predefined,        white point custom     -> 0                | ADL_CUSTOM_WHITE_POINT
3922    ///2.  White point predefined,  gamut custom           -> 0                | ADL_CUSTOM_GAMUT
3923    ///3.  White point custom,      gamut custom           -> ADL_CUSTOM_GAMUT | ADL_CUSTOM_WHITE_POINT
3924    int        iFeature;
3925
3926    ///one of ADL_GAMUT_SPACE_CCIR_709 - ADL_GAMUT_SPACE_CIE_RGB
3927    int         iPredefinedGamut;
3928
3929    ///one of ADL_WHITE_POINT_5000K - ADL_WHITE_POINT_9300K
3930    int         iPredefinedWhitePoint;
3931
3932    ///valid when in mask avails ADL_CUSTOM_WHITE_POINT
3933    ADLPoint             CustomWhitePoint;
3934
3935    ///valid when in mask avails ADL_CUSTOM_GAMUT
3936    ADLGamutCoordinates  CustomGamut;
3937} ADLGamutData;
3938
3939/////////////////////////////////////////////////////////////////////////////////////////////
3940///\brief Structure containing detailed timing parameters.
3941///
3942/// This structure is used to store the detailed timing parameters.
3943/// \nosubgrouping
3944////////////////////////////////////////////////////////////////////////////////////////////
3945typedef struct ADLDetailedTimingX2
3946{
3947    /// Size of the structure.
3948    int   iSize;
3949    /// Timing flags. \ref define_detailed_timing_flags
3950    int sTimingFlags;
3951    /// Total width (columns).
3952    int sHTotal;
3953    /// Displayed width.
3954    int sHDisplay;
3955    /// Horizontal sync signal offset.
3956    int sHSyncStart;
3957    /// Horizontal sync signal width.
3958    int sHSyncWidth;
3959    /// Total height (rows).
3960    int sVTotal;
3961    /// Displayed height.
3962    int sVDisplay;
3963    /// Vertical sync signal offset.
3964    int sVSyncStart;
3965    /// Vertical sync signal width.
3966    int sVSyncWidth;
3967    /// Pixel clock value.
3968    int sPixelClock;
3969    /// Overscan right.
3970    short sHOverscanRight;
3971    /// Overscan left.
3972    short sHOverscanLeft;
3973    /// Overscan bottom.
3974    short sVOverscanBottom;
3975    /// Overscan top.
3976    short sVOverscanTop;
3977    short sOverscan8B;
3978    short sOverscanGR;
3979} ADLDetailedTimingX2;
3980
3981/////////////////////////////////////////////////////////////////////////////////////////////
3982///\brief Structure containing display mode information.
3983///
3984/// This structure is used to store the display mode information.
3985/// \nosubgrouping
3986////////////////////////////////////////////////////////////////////////////////////////////
3987typedef struct ADLDisplayModeInfoX2
3988{
3989    /// Timing standard of the current mode. \ref define_modetiming_standard
3990    int  iTimingStandard;
3991    /// Applicable timing standards for the current mode.
3992    int  iPossibleStandard;
3993    /// Refresh rate factor.
3994    int  iRefreshRate;
3995    /// Num of pixels in a row.
3996    int  iPelsWidth;
3997    /// Num of pixels in a column.
3998    int  iPelsHeight;
3999    /// Detailed timing parameters.
4000    ADLDetailedTimingX2  sDetailedTiming;
4001} ADLDisplayModeInfoX2;
4002
4003/////////////////////////////////////////////////////////////////////////////////////////////
4004///\brief Structure containing information about I2C.
4005///
4006/// This structure is used to store the I2C information for the current adapter.
4007/// This structure is used by \ref ADL_Display_WriteAndReadI2CLargePayload
4008/// \nosubgrouping
4009////////////////////////////////////////////////////////////////////////////////////////////
4010typedef struct ADLI2CLargePayload
4011{
4012    /// Size of the structure
4013    int iSize;
4014    /// Numerical value representing hardware I2C.
4015    int iLine;
4016    /// The 7-bit I2C slave device address.
4017    int iAddress;
4018    /// The offset of the data from the address.
4019    int iOffset;
4020    /// Read from or write to slave device. \ref ADL_DL_I2C_ACTIONREAD or \ref ADL_DL_I2C_ACTIONWRITE
4021    int iAction;
4022    /// I2C clock speed in KHz.
4023    int iSpeed;
4024    /// I2C option flags.  \ref define_ADLI2CLargePayload
4025    int iFlags;
4026    /// A numerical value representing the number of bytes to be sent or received on the I2C bus.
4027    int iDataSize;
4028    /// Address of the characters which are to be sent or received on the I2C bus.
4029    char *pcData;
4030} ADLI2CLargePayload;
4031
4032/// Size in bytes of the Feature Name
4033#define ADL_FEATURE_NAME_LENGTH 	16
4034
4035/////////////////////////////////////////////////////////////////////////////////////////////
4036///\brief Structure containing the Multimedia Feature Name
4037///
4038////////////////////////////////////////////////////////////////////////////////////////////
4039typedef struct ADLFeatureName
4040{
4041    /// The Feature Name
4042    char FeatureName[ADL_FEATURE_NAME_LENGTH];
4043}	ADLFeatureName, *LPADLFeatureName;
4044
4045/////////////////////////////////////////////////////////////////////////////////////////////
4046///\brief Structure containing information about MM Feature Capabilities.
4047///
4048////////////////////////////////////////////////////////////////////////////////////////////
4049typedef struct ADLFeatureCaps
4050{
4051    /// The Feature Name
4052    ADLFeatureName	Name;
4053    //	char strFeatureName[ADL_FEATURE_NAME_LENGTH];
4054
4055    /// Group ID. All Features in the same group are shown sequentially in the same UI Page.
4056    int  iGroupID;
4057
4058    /// Visual ID. Places one or more features in a Group Box. If zero, no Group Box is added.
4059    int  iVisualID;
4060
4061    /// Page ID. All Features with the same Page ID value are shown together on the same UI page.
4062    int iPageID;
4063
4064    /// Feature Property Mask. Indicates which are the valid bits for iFeatureProperties.
4065    int iFeatureMask;
4066
4067    /// Feature Property Values. See definitions for ADL_FEATURE_PROPERTIES_XXX
4068    int  iFeatureProperties;
4069
4070    /// Apperance of the User-Controlled Boolean.
4071    int  iControlType;
4072
4073    /// Style of the User-Controlled Boolean.
4074    int  iControlStyle;
4075
4076    /// Apperance of the Adjustment Controls.
4077    int  iAdjustmentType;
4078
4079    /// Style of the Adjustment Controls.
4080    int  iAdjustmentStyle;
4081
4082    /// Default user-controlled boolean value. Valid only if ADLFeatureCaps supports user-controlled boolean.
4083    int bDefault;
4084
4085    /// Minimum integer value. Valid only if ADLFeatureCaps indicates support for integers.
4086    int iMin;
4087
4088    /// Maximum integer value. Valid only if ADLFeatureCaps indicates support for integers.
4089    int iMax;
4090
4091    /// Step integer value. Valid only if ADLFeatureCaps indicates support for integers.
4092    int iStep;
4093
4094    /// Default integer value. Valid only if ADLFeatureCaps indicates support for integers.
4095    int iDefault;
4096
4097    /// Minimum float value. Valid only if ADLFeatureCaps indicates support for floats.
4098    float fMin;
4099
4100    /// Maximum float value. Valid only if ADLFeatureCaps indicates support for floats.
4101    float fMax;
4102
4103    /// Step float value. Valid only if ADLFeatureCaps indicates support for floats.
4104    float fStep;
4105
4106    /// Default float value. Valid only if ADLFeatureCaps indicates support for floats.
4107    float fDefault;
4108
4109    /// The Mask for available bits for enumerated values.(If ADLFeatureCaps supports ENUM values)
4110    int EnumMask;
4111} ADLFeatureCaps, *LPADLFeatureCaps;
4112
4113/////////////////////////////////////////////////////////////////////////////////////////////
4114///\brief Structure containing information about MM Feature Values.
4115///
4116////////////////////////////////////////////////////////////////////////////////////////////
4117typedef struct ADLFeatureValues
4118{
4119    /// The Feature Name
4120    ADLFeatureName	Name;
4121    //	char strFeatureName[ADL_FEATURE_NAME_LENGTH];
4122
4123    /// User controlled Boolean current value. Valid only if ADLFeatureCaps supports Boolean.
4124    int bCurrent;
4125
4126    /// Current integer value. Valid only if ADLFeatureCaps indicates support for integers.
4127    int iCurrent;
4128
4129    /// Current float value. Valid only if ADLFeatureCaps indicates support for floats.
4130    float fCurrent;
4131
4132    /// The States for the available bits for enumerated values.
4133    int EnumStates;
4134} ADLFeatureValues, *LPADLFeatureValues;
4135
4136/////////////////////////////////////////////////////////////////////////////////////////////
4137///\brief Structure containing HDCP Settings info
4138///
4139/// This structure is used to store the HDCP settings of a
4140/// display
4141/// \nosubgrouping
4142////////////////////////////////////////////////////////////////////////////////////////////
4143
4144typedef struct ADLHDCPSettings
4145{
4146	int iHDCPProtectionVersion; // Version, starting from 1
4147	int iHDCPCaps; //Caps used to ensure at least one protection scheme is supported, 1 is HDCP1X and 2 is HDCP22
4148	int iAllowAll; //Allow all is true, disable all is false
4149	int iHDCPVale;
4150	int iHDCPMask;
4151} ADLHDCPSettings;
4152
4153/////////////////////////////////////////////////////////////////////////////////////////////
4154///\brief Structure containing Mantle App  info
4155///
4156/// This structure is used to store the Mantle Driver information
4157/// \nosubgrouping
4158/// \deprecated This structure has been deprecated.
4159////////////////////////////////////////////////////////////////////////////////////////////
4160
4161typedef struct ADLMantleAppInfo
4162{
4163	/// mantle api version
4164	int   apiVersion;
4165	/// mantle driver version
4166	long   driverVersion;
4167	/// mantle vendroe id
4168	long   vendorId;
4169	/// mantle device id
4170	long   deviceId;
4171	/// mantle gpu type;
4172	int     gpuType;
4173	/// gpu name
4174	char     gpuName[256];
4175	/// mem size
4176	int     maxMemRefsPerSubmission;
4177	/// virtual mem size
4178	long long virtualMemPageSize;
4179	/// mem update
4180	long long maxInlineMemoryUpdateSize;
4181	/// bound descriptot
4182	long     maxBoundDescriptorSets;
4183	/// thread group size
4184	long     maxThreadGroupSize;
4185	/// time stamp frequency
4186	long  long timestampFrequency;
4187	/// color target
4188	long     multiColorTargetClears;
4189}ADLMantleAppInfo, *LPADLMantleAppInfo;
4190
4191////////////////////////////////////////////////////////////////////////////////////////////
4192///\brief Structure containing information about SDIData
4193///This structure is used to store information about the state of the SDI whether it is on
4194///or off and the current size of the segment or aperture size.
4195////////////////////////////////////////////////////////////////////////////////////////////
4196typedef struct ADLSDIData
4197{
4198	/// The SDI state, ADL_SDI_ON or ADL_SDI_OFF, for the current SDI mode
4199	int iSDIState;
4200	/// Size of the memory segment for SDI (in MB).
4201	int iSizeofSDISegment;
4202} ADLSDIData, *LPADLSDIData;
4203
4204
4205/////////////////////////////////////////////////////////////////////////////////////////////
4206///\brief Structure containing information about FRTCPRO Settings
4207///
4208///  Elements of FRTCPRO settings.
4209/// \nosubgrouping
4210////////////////////////////////////////////////////////////////////////////////////////////
4211typedef struct ADL_FRTCPRO_Settings
4212{
4213    int DefaultState;              //The default status for FRTC pro
4214    int CurrentState;              //The current enable/disable status for FRTC pro
4215    unsigned int DefaultValue;     //The default FPS value for FRTC pro.
4216    unsigned int CurrentValue;      //The current FPS value for FRTC pro.
4217    unsigned int maxSupportedFps;      //The max value for FRTC pro.
4218    unsigned int minSupportedFps;      //The min value for FRTC pro.
4219}ADL_FRTCPRO_Settings, *LPADLFRTCProSettings;
4220
4221/////////////////////////////////////////////////////////////////////////////////////////////
4222///\brief Structure containing information about FRTCPRO Settings changed reason
4223///
4224///  Reason of FRTCPRO changed.
4225/// \nosubgrouping
4226////////////////////////////////////////////////////////////////////////////////////////////
4227typedef struct ADL_FRTCPRO_CHANGED_REASON
4228{
4229    int StateChanged;               // FRTCPro state changed
4230    int ValueChanged;               // FRTCPro value changed
4231}ADL_FRTCPRO_CHANGED_REASON;
4232
4233/////////////////////////////////////////////////////////////////////////////////////////////
4234/// \brief Structure containing the display mode definition used per controller.
4235///
4236/// This structure is used to store the display mode definition used per controller.
4237/// \nosubgrouping
4238////////////////////////////////////////////////////////////////////////////////////////////
4239typedef struct ADL_DL_DISPLAY_MODE
4240{
4241    int  iPelsHeight;                      // Vertical resolution (in pixels).
4242    int  iPelsWidth;                       // Horizontal resolution (in pixels).
4243    int  iBitsPerPel;                      // Color depth.
4244    int  iDisplayFrequency;                // Refresh rate.
4245} ADL_DL_DISPLAY_MODE;
4246
4247/////////////////////////////////////////////////////////////////////////////////////////////
4248///\brief Structure containing information related DCE support
4249///
4250/// This structure is used to store a bit vector of possible DCE support
4251///
4252/// \nosubgrouping
4253////////////////////////////////////////////////////////////////////////////////////////////
4254typedef union _ADLDCESupport
4255{
4256    struct
4257    {
4258        unsigned int PrePhasis : 1;
4259        unsigned int voltageSwing : 1;
4260        unsigned int reserved : 30;
4261    }bits;
4262    unsigned int u32All;
4263}ADLDCESupport;
4264
4265/////////////////////////////////////////////////////////////////////////////////////////////
4266/// \brief Structure for Smart shift 2.0 settings
4267///
4268/// This structure is used to return the smart shift settings
4269/// \nosubgrouping
4270////////////////////////////////////////////////////////////////////////////////////////////
4271typedef struct ADLSmartShiftSettings
4272{
4273	int iMinRange;
4274	int iMaxRange;
4275	int iDefaultMode; //Refer to CWDDEPM_ODN_CONTROL_TYPE
4276	int iDefaultValue;
4277	int iCurrentMode;
4278	int iCurrentValue;
4279    int iFlags; //refer to define_smartshift_bits
4280}ADLSmartShiftSettings, *LPADLSmartShiftSettings;
4281
4282#endif /* ADL_STRUCTURES_H_ */