xref: /dflybsd-src/sys/dev/drm/radeon/pptable.h (revision 7dcf36dc33228b5b368783d7b6f7ada00ee671d6)
14cd92098Szrj /*
24cd92098Szrj  * Copyright 2013 Advanced Micro Devices, Inc.
34cd92098Szrj  *
44cd92098Szrj  * Permission is hereby granted, free of charge, to any person obtaining a
54cd92098Szrj  * copy of this software and associated documentation files (the "Software"),
64cd92098Szrj  * to deal in the Software without restriction, including without limitation
74cd92098Szrj  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
84cd92098Szrj  * and/or sell copies of the Software, and to permit persons to whom the
94cd92098Szrj  * Software is furnished to do so, subject to the following conditions:
104cd92098Szrj  *
114cd92098Szrj  * The above copyright notice and this permission notice shall be included in
124cd92098Szrj  * all copies or substantial portions of the Software.
134cd92098Szrj  *
144cd92098Szrj  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
154cd92098Szrj  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
164cd92098Szrj  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
174cd92098Szrj  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
184cd92098Szrj  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
194cd92098Szrj  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
204cd92098Szrj  * OTHER DEALINGS IN THE SOFTWARE.
214cd92098Szrj  */
224cd92098Szrj 
234cd92098Szrj #ifndef _PPTABLE_H
244cd92098Szrj #define _PPTABLE_H
254cd92098Szrj 
26c6f73aabSFrançois Tigeot #pragma pack(1)
274cd92098Szrj 
284cd92098Szrj typedef struct _ATOM_PPLIB_THERMALCONTROLLER
294cd92098Szrj 
304cd92098Szrj {
314cd92098Szrj     UCHAR ucType;           // one of ATOM_PP_THERMALCONTROLLER_*
324cd92098Szrj     UCHAR ucI2cLine;        // as interpreted by DAL I2C
334cd92098Szrj     UCHAR ucI2cAddress;
344cd92098Szrj     UCHAR ucFanParameters;  // Fan Control Parameters.
354cd92098Szrj     UCHAR ucFanMinRPM;      // Fan Minimum RPM (hundreds) -- for display purposes only.
364cd92098Szrj     UCHAR ucFanMaxRPM;      // Fan Maximum RPM (hundreds) -- for display purposes only.
374cd92098Szrj     UCHAR ucReserved;       // ----
384cd92098Szrj     UCHAR ucFlags;          // to be defined
394cd92098Szrj } ATOM_PPLIB_THERMALCONTROLLER;
404cd92098Szrj 
414cd92098Szrj #define ATOM_PP_FANPARAMETERS_TACHOMETER_PULSES_PER_REVOLUTION_MASK 0x0f
424cd92098Szrj #define ATOM_PP_FANPARAMETERS_NOFAN                                 0x80    // No fan is connected to this controller.
434cd92098Szrj 
444cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_NONE      0
454cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_LM63      1  // Not used by PPLib
464cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_ADM1032   2  // Not used by PPLib
474cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_ADM1030   3  // Not used by PPLib
484cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_MUA6649   4  // Not used by PPLib
494cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_LM64      5
504cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_F75375    6  // Not used by PPLib
514cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_RV6xx     7
524cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_RV770     8
534cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_ADT7473   9
544cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_KONG      10
554cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_EXTERNAL_GPIO     11
564cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_EVERGREEN 12
574cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_EMC2103   13  /* 0x0D */ // Only fan control will be implemented, do NOT show this in PPGen.
584cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_SUMO      14  /* 0x0E */ // Sumo type, used internally
594cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_NISLANDS  15
604cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_SISLANDS  16
614cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_LM96163   17
624cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_CISLANDS  18
634cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_KAVERI    19
644cd92098Szrj 
654cd92098Szrj 
664cd92098Szrj // Thermal controller 'combo type' to use an external controller for Fan control and an internal controller for thermal.
674cd92098Szrj // We probably should reserve the bit 0x80 for this use.
684cd92098Szrj // To keep the number of these types low we should also use the same code for all ASICs (i.e. do not distinguish RV6xx and RV7xx Internal here).
694cd92098Szrj // The driver can pick the correct internal controller based on the ASIC.
704cd92098Szrj 
714cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_ADT7473_WITH_INTERNAL   0x89    // ADT7473 Fan Control + Internal Thermal Controller
724cd92098Szrj #define ATOM_PP_THERMALCONTROLLER_EMC2103_WITH_INTERNAL   0x8D    // EMC2103 Fan Control + Internal Thermal Controller
734cd92098Szrj 
744cd92098Szrj typedef struct _ATOM_PPLIB_STATE
754cd92098Szrj {
764cd92098Szrj     UCHAR ucNonClockStateIndex;
774cd92098Szrj     UCHAR ucClockStateIndices[1]; // variable-sized
784cd92098Szrj } ATOM_PPLIB_STATE;
794cd92098Szrj 
804cd92098Szrj 
814cd92098Szrj typedef struct _ATOM_PPLIB_FANTABLE
824cd92098Szrj {
834cd92098Szrj     UCHAR   ucFanTableFormat;                // Change this if the table format changes or version changes so that the other fields are not the same.
844cd92098Szrj     UCHAR   ucTHyst;                         // Temperature hysteresis. Integer.
854cd92098Szrj     USHORT  usTMin;                          // The temperature, in 0.01 centigrades, below which we just run at a minimal PWM.
864cd92098Szrj     USHORT  usTMed;                          // The middle temperature where we change slopes.
874cd92098Szrj     USHORT  usTHigh;                         // The high point above TMed for adjusting the second slope.
884cd92098Szrj     USHORT  usPWMMin;                        // The minimum PWM value in percent (0.01% increments).
894cd92098Szrj     USHORT  usPWMMed;                        // The PWM value (in percent) at TMed.
904cd92098Szrj     USHORT  usPWMHigh;                       // The PWM value at THigh.
914cd92098Szrj } ATOM_PPLIB_FANTABLE;
924cd92098Szrj 
934cd92098Szrj typedef struct _ATOM_PPLIB_FANTABLE2
944cd92098Szrj {
954cd92098Szrj     ATOM_PPLIB_FANTABLE basicTable;
964cd92098Szrj     USHORT  usTMax;                          // The max temperature
974cd92098Szrj } ATOM_PPLIB_FANTABLE2;
984cd92098Szrj 
99*7dcf36dcSFrançois Tigeot typedef struct _ATOM_PPLIB_FANTABLE3
100*7dcf36dcSFrançois Tigeot {
101*7dcf36dcSFrançois Tigeot 	ATOM_PPLIB_FANTABLE2 basicTable2;
102*7dcf36dcSFrançois Tigeot 	UCHAR ucFanControlMode;
103*7dcf36dcSFrançois Tigeot 	USHORT usFanPWMMax;
104*7dcf36dcSFrançois Tigeot 	USHORT usFanOutputSensitivity;
105*7dcf36dcSFrançois Tigeot } ATOM_PPLIB_FANTABLE3;
106*7dcf36dcSFrançois Tigeot 
1074cd92098Szrj typedef struct _ATOM_PPLIB_EXTENDEDHEADER
1084cd92098Szrj {
1094cd92098Szrj     USHORT  usSize;
1104cd92098Szrj     ULONG   ulMaxEngineClock;   // For Overdrive.
1114cd92098Szrj     ULONG   ulMaxMemoryClock;   // For Overdrive.
1124cd92098Szrj     // Add extra system parameters here, always adjust size to include all fields.
1134cd92098Szrj     USHORT  usVCETableOffset; //points to ATOM_PPLIB_VCE_Table
1144cd92098Szrj     USHORT  usUVDTableOffset;   //points to ATOM_PPLIB_UVD_Table
1154cd92098Szrj     USHORT  usSAMUTableOffset;  //points to ATOM_PPLIB_SAMU_Table
1164cd92098Szrj     USHORT  usPPMTableOffset;   //points to ATOM_PPLIB_PPM_Table
1174cd92098Szrj     USHORT  usACPTableOffset;  //points to ATOM_PPLIB_ACP_Table
1184cd92098Szrj     USHORT  usPowerTuneTableOffset; //points to ATOM_PPLIB_POWERTUNE_Table
1194cd92098Szrj } ATOM_PPLIB_EXTENDEDHEADER;
1204cd92098Szrj 
1214cd92098Szrj //// ATOM_PPLIB_POWERPLAYTABLE::ulPlatformCaps
1224cd92098Szrj #define ATOM_PP_PLATFORM_CAP_BACKBIAS 1
1234cd92098Szrj #define ATOM_PP_PLATFORM_CAP_POWERPLAY 2
1244cd92098Szrj #define ATOM_PP_PLATFORM_CAP_SBIOSPOWERSOURCE 4
1254cd92098Szrj #define ATOM_PP_PLATFORM_CAP_ASPM_L0s 8
1264cd92098Szrj #define ATOM_PP_PLATFORM_CAP_ASPM_L1 16
1274cd92098Szrj #define ATOM_PP_PLATFORM_CAP_HARDWAREDC 32
1284cd92098Szrj #define ATOM_PP_PLATFORM_CAP_GEMINIPRIMARY 64
1294cd92098Szrj #define ATOM_PP_PLATFORM_CAP_STEPVDDC 128
1304cd92098Szrj #define ATOM_PP_PLATFORM_CAP_VOLTAGECONTROL 256
1314cd92098Szrj #define ATOM_PP_PLATFORM_CAP_SIDEPORTCONTROL 512
1324cd92098Szrj #define ATOM_PP_PLATFORM_CAP_TURNOFFPLL_ASPML1 1024
1334cd92098Szrj #define ATOM_PP_PLATFORM_CAP_HTLINKCONTROL 2048
1344cd92098Szrj #define ATOM_PP_PLATFORM_CAP_MVDDCONTROL 4096
1354cd92098Szrj #define ATOM_PP_PLATFORM_CAP_GOTO_BOOT_ON_ALERT 0x2000              // Go to boot state on alerts, e.g. on an AC->DC transition.
1364cd92098Szrj #define ATOM_PP_PLATFORM_CAP_DONT_WAIT_FOR_VBLANK_ON_ALERT 0x4000   // Do NOT wait for VBLANK during an alert (e.g. AC->DC transition).
1374cd92098Szrj #define ATOM_PP_PLATFORM_CAP_VDDCI_CONTROL 0x8000                   // Does the driver control VDDCI independently from VDDC.
1384cd92098Szrj #define ATOM_PP_PLATFORM_CAP_REGULATOR_HOT 0x00010000               // Enable the 'regulator hot' feature.
1394cd92098Szrj #define ATOM_PP_PLATFORM_CAP_BACO          0x00020000               // Does the driver supports BACO state.
1404cd92098Szrj #define ATOM_PP_PLATFORM_CAP_NEW_CAC_VOLTAGE   0x00040000           // Does the driver supports new CAC voltage table.
1414cd92098Szrj #define ATOM_PP_PLATFORM_CAP_REVERT_GPIO5_POLARITY   0x00080000     // Does the driver supports revert GPIO5 polarity.
1424cd92098Szrj #define ATOM_PP_PLATFORM_CAP_OUTPUT_THERMAL2GPIO17   0x00100000     // Does the driver supports thermal2GPIO17.
1434cd92098Szrj #define ATOM_PP_PLATFORM_CAP_VRHOT_GPIO_CONFIGURABLE   0x00200000   // Does the driver supports VR HOT GPIO Configurable.
1444cd92098Szrj #define ATOM_PP_PLATFORM_CAP_TEMP_INVERSION   0x00400000            // Does the driver supports Temp Inversion feature.
1454cd92098Szrj #define ATOM_PP_PLATFORM_CAP_EVV    0x00800000
1464cd92098Szrj 
1474cd92098Szrj typedef struct _ATOM_PPLIB_POWERPLAYTABLE
1484cd92098Szrj {
1494cd92098Szrj       ATOM_COMMON_TABLE_HEADER sHeader;
1504cd92098Szrj 
1514cd92098Szrj       UCHAR ucDataRevision;
1524cd92098Szrj 
1534cd92098Szrj       UCHAR ucNumStates;
1544cd92098Szrj       UCHAR ucStateEntrySize;
1554cd92098Szrj       UCHAR ucClockInfoSize;
1564cd92098Szrj       UCHAR ucNonClockSize;
1574cd92098Szrj 
1584cd92098Szrj       // offset from start of this table to array of ucNumStates ATOM_PPLIB_STATE structures
1594cd92098Szrj       USHORT usStateArrayOffset;
1604cd92098Szrj 
1614cd92098Szrj       // offset from start of this table to array of ASIC-specific structures,
1624cd92098Szrj       // currently ATOM_PPLIB_CLOCK_INFO.
1634cd92098Szrj       USHORT usClockInfoArrayOffset;
1644cd92098Szrj 
1654cd92098Szrj       // offset from start of this table to array of ATOM_PPLIB_NONCLOCK_INFO
1664cd92098Szrj       USHORT usNonClockInfoArrayOffset;
1674cd92098Szrj 
1684cd92098Szrj       USHORT usBackbiasTime;    // in microseconds
1694cd92098Szrj       USHORT usVoltageTime;     // in microseconds
1704cd92098Szrj       USHORT usTableSize;       //the size of this structure, or the extended structure
1714cd92098Szrj 
1724cd92098Szrj       ULONG ulPlatformCaps;            // See ATOM_PPLIB_CAPS_*
1734cd92098Szrj 
1744cd92098Szrj       ATOM_PPLIB_THERMALCONTROLLER    sThermalController;
1754cd92098Szrj 
1764cd92098Szrj       USHORT usBootClockInfoOffset;
1774cd92098Szrj       USHORT usBootNonClockInfoOffset;
1784cd92098Szrj 
1794cd92098Szrj } ATOM_PPLIB_POWERPLAYTABLE;
1804cd92098Szrj 
1814cd92098Szrj typedef struct _ATOM_PPLIB_POWERPLAYTABLE2
1824cd92098Szrj {
1834cd92098Szrj     ATOM_PPLIB_POWERPLAYTABLE basicTable;
1844cd92098Szrj     UCHAR   ucNumCustomThermalPolicy;
1854cd92098Szrj     USHORT  usCustomThermalPolicyArrayOffset;
1864cd92098Szrj }ATOM_PPLIB_POWERPLAYTABLE2, *LPATOM_PPLIB_POWERPLAYTABLE2;
1874cd92098Szrj 
1884cd92098Szrj typedef struct _ATOM_PPLIB_POWERPLAYTABLE3
1894cd92098Szrj {
1904cd92098Szrj     ATOM_PPLIB_POWERPLAYTABLE2 basicTable2;
1914cd92098Szrj     USHORT                     usFormatID;                      // To be used ONLY by PPGen.
1924cd92098Szrj     USHORT                     usFanTableOffset;
1934cd92098Szrj     USHORT                     usExtendendedHeaderOffset;
1944cd92098Szrj } ATOM_PPLIB_POWERPLAYTABLE3, *LPATOM_PPLIB_POWERPLAYTABLE3;
1954cd92098Szrj 
1964cd92098Szrj typedef struct _ATOM_PPLIB_POWERPLAYTABLE4
1974cd92098Szrj {
1984cd92098Szrj     ATOM_PPLIB_POWERPLAYTABLE3 basicTable3;
1994cd92098Szrj     ULONG                      ulGoldenPPID;                    // PPGen use only
2004cd92098Szrj     ULONG                      ulGoldenRevision;                // PPGen use only
2014cd92098Szrj     USHORT                     usVddcDependencyOnSCLKOffset;
2024cd92098Szrj     USHORT                     usVddciDependencyOnMCLKOffset;
2034cd92098Szrj     USHORT                     usVddcDependencyOnMCLKOffset;
2044cd92098Szrj     USHORT                     usMaxClockVoltageOnDCOffset;
2054cd92098Szrj     USHORT                     usVddcPhaseShedLimitsTableOffset;    // Points to ATOM_PPLIB_PhaseSheddingLimits_Table
2064cd92098Szrj     USHORT                     usMvddDependencyOnMCLKOffset;
2074cd92098Szrj } ATOM_PPLIB_POWERPLAYTABLE4, *LPATOM_PPLIB_POWERPLAYTABLE4;
2084cd92098Szrj 
2094cd92098Szrj typedef struct _ATOM_PPLIB_POWERPLAYTABLE5
2104cd92098Szrj {
2114cd92098Szrj     ATOM_PPLIB_POWERPLAYTABLE4 basicTable4;
2124cd92098Szrj     ULONG                      ulTDPLimit;
2134cd92098Szrj     ULONG                      ulNearTDPLimit;
2144cd92098Szrj     ULONG                      ulSQRampingThreshold;
2154cd92098Szrj     USHORT                     usCACLeakageTableOffset;         // Points to ATOM_PPLIB_CAC_Leakage_Table
2164cd92098Szrj     ULONG                      ulCACLeakage;                    // The iLeakage for driver calculated CAC leakage table
2174cd92098Szrj     USHORT                     usTDPODLimit;
2184cd92098Szrj     USHORT                     usLoadLineSlope;                 // in milliOhms * 100
2194cd92098Szrj } ATOM_PPLIB_POWERPLAYTABLE5, *LPATOM_PPLIB_POWERPLAYTABLE5;
2204cd92098Szrj 
2214cd92098Szrj //// ATOM_PPLIB_NONCLOCK_INFO::usClassification
2224cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_UI_MASK          0x0007
2234cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_UI_SHIFT         0
2244cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_UI_NONE          0
2254cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_UI_BATTERY       1
2264cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_UI_BALANCED      3
2274cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_UI_PERFORMANCE   5
2284cd92098Szrj // 2, 4, 6, 7 are reserved
2294cd92098Szrj 
2304cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_BOOT                   0x0008
2314cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_THERMAL                0x0010
2324cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_LIMITEDPOWERSOURCE     0x0020
2334cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_REST                   0x0040
2344cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_FORCED                 0x0080
2354cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_3DPERFORMANCE          0x0100
2364cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_OVERDRIVETEMPLATE      0x0200
2374cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_UVDSTATE               0x0400
2384cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_3DLOW                  0x0800
2394cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_ACPI                   0x1000
2404cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_HD2STATE               0x2000
2414cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_HDSTATE                0x4000
2424cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION_SDSTATE                0x8000
2434cd92098Szrj 
2444cd92098Szrj //// ATOM_PPLIB_NONCLOCK_INFO::usClassification2
2454cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION2_LIMITEDPOWERSOURCE_2     0x0001
2464cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION2_ULV                      0x0002
2474cd92098Szrj #define ATOM_PPLIB_CLASSIFICATION2_MVC                      0x0004   //Multi-View Codec (BD-3D)
2484cd92098Szrj 
2494cd92098Szrj //// ATOM_PPLIB_NONCLOCK_INFO::ulCapsAndSettings
2504cd92098Szrj #define ATOM_PPLIB_SINGLE_DISPLAY_ONLY           0x00000001
2514cd92098Szrj #define ATOM_PPLIB_SUPPORTS_VIDEO_PLAYBACK         0x00000002
2524cd92098Szrj 
2534cd92098Szrj // 0 is 2.5Gb/s, 1 is 5Gb/s
2544cd92098Szrj #define ATOM_PPLIB_PCIE_LINK_SPEED_MASK            0x00000004
2554cd92098Szrj #define ATOM_PPLIB_PCIE_LINK_SPEED_SHIFT           2
2564cd92098Szrj 
2574cd92098Szrj // lanes - 1: 1, 2, 4, 8, 12, 16 permitted by PCIE spec
2584cd92098Szrj #define ATOM_PPLIB_PCIE_LINK_WIDTH_MASK            0x000000F8
2594cd92098Szrj #define ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT           3
2604cd92098Szrj 
2614cd92098Szrj // lookup into reduced refresh-rate table
2624cd92098Szrj #define ATOM_PPLIB_LIMITED_REFRESHRATE_VALUE_MASK  0x00000F00
2634cd92098Szrj #define ATOM_PPLIB_LIMITED_REFRESHRATE_VALUE_SHIFT 8
2644cd92098Szrj 
2654cd92098Szrj #define ATOM_PPLIB_LIMITED_REFRESHRATE_UNLIMITED    0
2664cd92098Szrj #define ATOM_PPLIB_LIMITED_REFRESHRATE_50HZ         1
2674cd92098Szrj // 2-15 TBD as needed.
2684cd92098Szrj 
2694cd92098Szrj #define ATOM_PPLIB_SOFTWARE_DISABLE_LOADBALANCING        0x00001000
2704cd92098Szrj #define ATOM_PPLIB_SOFTWARE_ENABLE_SLEEP_FOR_TIMESTAMPS  0x00002000
2714cd92098Szrj 
2724cd92098Szrj #define ATOM_PPLIB_DISALLOW_ON_DC                       0x00004000
2734cd92098Szrj 
2744cd92098Szrj #define ATOM_PPLIB_ENABLE_VARIBRIGHT                     0x00008000
2754cd92098Szrj 
2764cd92098Szrj //memory related flags
2774cd92098Szrj #define ATOM_PPLIB_SWSTATE_MEMORY_DLL_OFF               0x000010000
2784cd92098Szrj 
2794cd92098Szrj //M3 Arb    //2bits, current 3 sets of parameters in total
2804cd92098Szrj #define ATOM_PPLIB_M3ARB_MASK                       0x00060000
2814cd92098Szrj #define ATOM_PPLIB_M3ARB_SHIFT                      17
2824cd92098Szrj 
2834cd92098Szrj #define ATOM_PPLIB_ENABLE_DRR                       0x00080000
2844cd92098Szrj 
2854cd92098Szrj // remaining 16 bits are reserved
2864cd92098Szrj typedef struct _ATOM_PPLIB_THERMAL_STATE
2874cd92098Szrj {
2884cd92098Szrj     UCHAR   ucMinTemperature;
2894cd92098Szrj     UCHAR   ucMaxTemperature;
2904cd92098Szrj     UCHAR   ucThermalAction;
2914cd92098Szrj }ATOM_PPLIB_THERMAL_STATE, *LPATOM_PPLIB_THERMAL_STATE;
2924cd92098Szrj 
2934cd92098Szrj // Contained in an array starting at the offset
2944cd92098Szrj // in ATOM_PPLIB_POWERPLAYTABLE::usNonClockInfoArrayOffset.
2954cd92098Szrj // referenced from ATOM_PPLIB_STATE_INFO::ucNonClockStateIndex
2964cd92098Szrj #define ATOM_PPLIB_NONCLOCKINFO_VER1      12
2974cd92098Szrj #define ATOM_PPLIB_NONCLOCKINFO_VER2      24
2984cd92098Szrj typedef struct _ATOM_PPLIB_NONCLOCK_INFO
2994cd92098Szrj {
3004cd92098Szrj       USHORT usClassification;
3014cd92098Szrj       UCHAR  ucMinTemperature;
3024cd92098Szrj       UCHAR  ucMaxTemperature;
3034cd92098Szrj       ULONG  ulCapsAndSettings;
3044cd92098Szrj       UCHAR  ucRequiredPower;
3054cd92098Szrj       USHORT usClassification2;
3064cd92098Szrj       ULONG  ulVCLK;
3074cd92098Szrj       ULONG  ulDCLK;
3084cd92098Szrj       UCHAR  ucUnused[5];
3094cd92098Szrj } ATOM_PPLIB_NONCLOCK_INFO;
3104cd92098Szrj 
3114cd92098Szrj // Contained in an array starting at the offset
3124cd92098Szrj // in ATOM_PPLIB_POWERPLAYTABLE::usClockInfoArrayOffset.
3134cd92098Szrj // referenced from ATOM_PPLIB_STATE::ucClockStateIndices
3144cd92098Szrj typedef struct _ATOM_PPLIB_R600_CLOCK_INFO
3154cd92098Szrj {
3164cd92098Szrj       USHORT usEngineClockLow;
3174cd92098Szrj       UCHAR ucEngineClockHigh;
3184cd92098Szrj 
3194cd92098Szrj       USHORT usMemoryClockLow;
3204cd92098Szrj       UCHAR ucMemoryClockHigh;
3214cd92098Szrj 
3224cd92098Szrj       USHORT usVDDC;
3234cd92098Szrj       USHORT usUnused1;
3244cd92098Szrj       USHORT usUnused2;
3254cd92098Szrj 
3264cd92098Szrj       ULONG ulFlags; // ATOM_PPLIB_R600_FLAGS_*
3274cd92098Szrj 
3284cd92098Szrj } ATOM_PPLIB_R600_CLOCK_INFO;
3294cd92098Szrj 
3304cd92098Szrj // ulFlags in ATOM_PPLIB_R600_CLOCK_INFO
3314cd92098Szrj #define ATOM_PPLIB_R600_FLAGS_PCIEGEN2          1
3324cd92098Szrj #define ATOM_PPLIB_R600_FLAGS_UVDSAFE           2
3334cd92098Szrj #define ATOM_PPLIB_R600_FLAGS_BACKBIASENABLE    4
3344cd92098Szrj #define ATOM_PPLIB_R600_FLAGS_MEMORY_ODT_OFF    8
3354cd92098Szrj #define ATOM_PPLIB_R600_FLAGS_MEMORY_DLL_OFF   16
3364cd92098Szrj #define ATOM_PPLIB_R600_FLAGS_LOWPOWER         32   // On the RV770 use 'low power' setting (sequencer S0).
3374cd92098Szrj 
3384cd92098Szrj typedef struct _ATOM_PPLIB_RS780_CLOCK_INFO
3394cd92098Szrj 
3404cd92098Szrj {
3414cd92098Szrj       USHORT usLowEngineClockLow;         // Low Engine clock in MHz (the same way as on the R600).
3424cd92098Szrj       UCHAR  ucLowEngineClockHigh;
3434cd92098Szrj       USHORT usHighEngineClockLow;        // High Engine clock in MHz.
3444cd92098Szrj       UCHAR  ucHighEngineClockHigh;
3454cd92098Szrj       USHORT usMemoryClockLow;            // For now one of the ATOM_PPLIB_RS780_SPMCLK_XXXX constants.
3464cd92098Szrj       UCHAR  ucMemoryClockHigh;           // Currentyl unused.
3474cd92098Szrj       UCHAR  ucPadding;                   // For proper alignment and size.
3484cd92098Szrj       USHORT usVDDC;                      // For the 780, use: None, Low, High, Variable
3494cd92098Szrj       UCHAR  ucMaxHTLinkWidth;            // From SBIOS - {2, 4, 8, 16}
3504cd92098Szrj       UCHAR  ucMinHTLinkWidth;            // From SBIOS - {2, 4, 8, 16}. Effective only if CDLW enabled. Minimum down stream width could
3514cd92098Szrj       USHORT usHTLinkFreq;                // See definition ATOM_PPLIB_RS780_HTLINKFREQ_xxx or in MHz(>=200).
3524cd92098Szrj       ULONG  ulFlags;
3534cd92098Szrj } ATOM_PPLIB_RS780_CLOCK_INFO;
3544cd92098Szrj 
3554cd92098Szrj #define ATOM_PPLIB_RS780_VOLTAGE_NONE       0
3564cd92098Szrj #define ATOM_PPLIB_RS780_VOLTAGE_LOW        1
3574cd92098Szrj #define ATOM_PPLIB_RS780_VOLTAGE_HIGH       2
3584cd92098Szrj #define ATOM_PPLIB_RS780_VOLTAGE_VARIABLE   3
3594cd92098Szrj 
3604cd92098Szrj #define ATOM_PPLIB_RS780_SPMCLK_NONE        0   // We cannot change the side port memory clock, leave it as it is.
3614cd92098Szrj #define ATOM_PPLIB_RS780_SPMCLK_LOW         1
3624cd92098Szrj #define ATOM_PPLIB_RS780_SPMCLK_HIGH        2
3634cd92098Szrj 
3644cd92098Szrj #define ATOM_PPLIB_RS780_HTLINKFREQ_NONE       0
3654cd92098Szrj #define ATOM_PPLIB_RS780_HTLINKFREQ_LOW        1
3664cd92098Szrj #define ATOM_PPLIB_RS780_HTLINKFREQ_HIGH       2
3674cd92098Szrj 
3684cd92098Szrj typedef struct _ATOM_PPLIB_EVERGREEN_CLOCK_INFO
3694cd92098Szrj {
3704cd92098Szrj       USHORT usEngineClockLow;
3714cd92098Szrj       UCHAR  ucEngineClockHigh;
3724cd92098Szrj 
3734cd92098Szrj       USHORT usMemoryClockLow;
3744cd92098Szrj       UCHAR  ucMemoryClockHigh;
3754cd92098Szrj 
3764cd92098Szrj       USHORT usVDDC;
3774cd92098Szrj       USHORT usVDDCI;
3784cd92098Szrj       USHORT usUnused;
3794cd92098Szrj 
3804cd92098Szrj       ULONG ulFlags; // ATOM_PPLIB_R600_FLAGS_*
3814cd92098Szrj 
3824cd92098Szrj } ATOM_PPLIB_EVERGREEN_CLOCK_INFO;
3834cd92098Szrj 
3844cd92098Szrj typedef struct _ATOM_PPLIB_SI_CLOCK_INFO
3854cd92098Szrj {
3864cd92098Szrj       USHORT usEngineClockLow;
3874cd92098Szrj       UCHAR  ucEngineClockHigh;
3884cd92098Szrj 
3894cd92098Szrj       USHORT usMemoryClockLow;
3904cd92098Szrj       UCHAR  ucMemoryClockHigh;
3914cd92098Szrj 
3924cd92098Szrj       USHORT usVDDC;
3934cd92098Szrj       USHORT usVDDCI;
3944cd92098Szrj       UCHAR  ucPCIEGen;
3954cd92098Szrj       UCHAR  ucUnused1;
3964cd92098Szrj 
3974cd92098Szrj       ULONG ulFlags; // ATOM_PPLIB_SI_FLAGS_*, no flag is necessary for now
3984cd92098Szrj 
3994cd92098Szrj } ATOM_PPLIB_SI_CLOCK_INFO;
4004cd92098Szrj 
4014cd92098Szrj typedef struct _ATOM_PPLIB_CI_CLOCK_INFO
4024cd92098Szrj {
4034cd92098Szrj       USHORT usEngineClockLow;
4044cd92098Szrj       UCHAR  ucEngineClockHigh;
4054cd92098Szrj 
4064cd92098Szrj       USHORT usMemoryClockLow;
4074cd92098Szrj       UCHAR  ucMemoryClockHigh;
4084cd92098Szrj 
4094cd92098Szrj       UCHAR  ucPCIEGen;
4104cd92098Szrj       USHORT usPCIELane;
4114cd92098Szrj } ATOM_PPLIB_CI_CLOCK_INFO;
4124cd92098Szrj 
4134cd92098Szrj typedef struct _ATOM_PPLIB_SUMO_CLOCK_INFO{
4144cd92098Szrj       USHORT usEngineClockLow;  //clockfrequency & 0xFFFF. The unit is in 10khz
4154cd92098Szrj       UCHAR  ucEngineClockHigh; //clockfrequency >> 16.
4164cd92098Szrj       UCHAR  vddcIndex;         //2-bit vddc index;
4174cd92098Szrj       USHORT tdpLimit;
4184cd92098Szrj       //please initalize to 0
4194cd92098Szrj       USHORT rsv1;
4204cd92098Szrj       //please initialize to 0s
4214cd92098Szrj       ULONG rsv2[2];
4224cd92098Szrj }ATOM_PPLIB_SUMO_CLOCK_INFO;
4234cd92098Szrj 
4244cd92098Szrj typedef struct _ATOM_PPLIB_STATE_V2
4254cd92098Szrj {
4264cd92098Szrj       //number of valid dpm levels in this state; Driver uses it to calculate the whole
4274cd92098Szrj       //size of the state: sizeof(ATOM_PPLIB_STATE_V2) + (ucNumDPMLevels - 1) * sizeof(UCHAR)
4284cd92098Szrj       UCHAR ucNumDPMLevels;
4294cd92098Szrj 
4304cd92098Szrj       //a index to the array of nonClockInfos
4314cd92098Szrj       UCHAR nonClockInfoIndex;
4324cd92098Szrj       /**
4334cd92098Szrj       * Driver will read the first ucNumDPMLevels in this array
4344cd92098Szrj       */
4354cd92098Szrj       UCHAR clockInfoIndex[1];
4364cd92098Szrj } ATOM_PPLIB_STATE_V2;
4374cd92098Szrj 
4384cd92098Szrj typedef struct _StateArray{
4394cd92098Szrj     //how many states we have
4404cd92098Szrj     UCHAR ucNumEntries;
4414cd92098Szrj 
4424cd92098Szrj     ATOM_PPLIB_STATE_V2 states[1];
4434cd92098Szrj }StateArray;
4444cd92098Szrj 
4454cd92098Szrj 
4464cd92098Szrj typedef struct _ClockInfoArray{
4474cd92098Szrj     //how many clock levels we have
4484cd92098Szrj     UCHAR ucNumEntries;
4494cd92098Szrj 
4504cd92098Szrj     //sizeof(ATOM_PPLIB_CLOCK_INFO)
4514cd92098Szrj     UCHAR ucEntrySize;
4524cd92098Szrj 
4534cd92098Szrj     UCHAR clockInfo[1];
4544cd92098Szrj }ClockInfoArray;
4554cd92098Szrj 
4564cd92098Szrj typedef struct _NonClockInfoArray{
4574cd92098Szrj 
4584cd92098Szrj     //how many non-clock levels we have. normally should be same as number of states
4594cd92098Szrj     UCHAR ucNumEntries;
4604cd92098Szrj     //sizeof(ATOM_PPLIB_NONCLOCK_INFO)
4614cd92098Szrj     UCHAR ucEntrySize;
4624cd92098Szrj 
4634cd92098Szrj     ATOM_PPLIB_NONCLOCK_INFO nonClockInfo[1];
4644cd92098Szrj }NonClockInfoArray;
4654cd92098Szrj 
4664cd92098Szrj typedef struct _ATOM_PPLIB_Clock_Voltage_Dependency_Record
4674cd92098Szrj {
4684cd92098Szrj     USHORT usClockLow;
4694cd92098Szrj     UCHAR  ucClockHigh;
4704cd92098Szrj     USHORT usVoltage;
4714cd92098Szrj }ATOM_PPLIB_Clock_Voltage_Dependency_Record;
4724cd92098Szrj 
4734cd92098Szrj typedef struct _ATOM_PPLIB_Clock_Voltage_Dependency_Table
4744cd92098Szrj {
4754cd92098Szrj     UCHAR ucNumEntries;                                                // Number of entries.
4764cd92098Szrj     ATOM_PPLIB_Clock_Voltage_Dependency_Record entries[1];             // Dynamically allocate entries.
4774cd92098Szrj }ATOM_PPLIB_Clock_Voltage_Dependency_Table;
4784cd92098Szrj 
4794cd92098Szrj typedef struct _ATOM_PPLIB_Clock_Voltage_Limit_Record
4804cd92098Szrj {
4814cd92098Szrj     USHORT usSclkLow;
4824cd92098Szrj     UCHAR  ucSclkHigh;
4834cd92098Szrj     USHORT usMclkLow;
4844cd92098Szrj     UCHAR  ucMclkHigh;
4854cd92098Szrj     USHORT usVddc;
4864cd92098Szrj     USHORT usVddci;
4874cd92098Szrj }ATOM_PPLIB_Clock_Voltage_Limit_Record;
4884cd92098Szrj 
4894cd92098Szrj typedef struct _ATOM_PPLIB_Clock_Voltage_Limit_Table
4904cd92098Szrj {
4914cd92098Szrj     UCHAR ucNumEntries;                                                // Number of entries.
4924cd92098Szrj     ATOM_PPLIB_Clock_Voltage_Limit_Record entries[1];                  // Dynamically allocate entries.
4934cd92098Szrj }ATOM_PPLIB_Clock_Voltage_Limit_Table;
4944cd92098Szrj 
4954cd92098Szrj union _ATOM_PPLIB_CAC_Leakage_Record
4964cd92098Szrj {
4974cd92098Szrj     struct
4984cd92098Szrj     {
4994cd92098Szrj         USHORT usVddc;          // We use this field for the "fake" standardized VDDC for power calculations; For CI and newer, we use this as the real VDDC value. in CI we read it as StdVoltageHiSidd
5004cd92098Szrj         ULONG  ulLeakageValue;  // For CI and newer we use this as the "fake" standar VDDC value. in CI we read it as StdVoltageLoSidd
5014cd92098Szrj 
5024cd92098Szrj     };
5034cd92098Szrj     struct
5044cd92098Szrj      {
5054cd92098Szrj         USHORT usVddc1;
5064cd92098Szrj         USHORT usVddc2;
5074cd92098Szrj         USHORT usVddc3;
5084cd92098Szrj      };
5094cd92098Szrj };
5104cd92098Szrj 
5114cd92098Szrj typedef union _ATOM_PPLIB_CAC_Leakage_Record ATOM_PPLIB_CAC_Leakage_Record;
5124cd92098Szrj 
5134cd92098Szrj typedef struct _ATOM_PPLIB_CAC_Leakage_Table
5144cd92098Szrj {
5154cd92098Szrj     UCHAR ucNumEntries;                                                 // Number of entries.
5164cd92098Szrj     ATOM_PPLIB_CAC_Leakage_Record entries[1];                           // Dynamically allocate entries.
5174cd92098Szrj }ATOM_PPLIB_CAC_Leakage_Table;
5184cd92098Szrj 
5194cd92098Szrj typedef struct _ATOM_PPLIB_PhaseSheddingLimits_Record
5204cd92098Szrj {
5214cd92098Szrj     USHORT usVoltage;
5224cd92098Szrj     USHORT usSclkLow;
5234cd92098Szrj     UCHAR  ucSclkHigh;
5244cd92098Szrj     USHORT usMclkLow;
5254cd92098Szrj     UCHAR  ucMclkHigh;
5264cd92098Szrj }ATOM_PPLIB_PhaseSheddingLimits_Record;
5274cd92098Szrj 
5284cd92098Szrj typedef struct _ATOM_PPLIB_PhaseSheddingLimits_Table
5294cd92098Szrj {
5304cd92098Szrj     UCHAR ucNumEntries;                                                 // Number of entries.
5314cd92098Szrj     ATOM_PPLIB_PhaseSheddingLimits_Record entries[1];                   // Dynamically allocate entries.
5324cd92098Szrj }ATOM_PPLIB_PhaseSheddingLimits_Table;
5334cd92098Szrj 
5344cd92098Szrj typedef struct _VCEClockInfo{
5354cd92098Szrj     USHORT usEVClkLow;
5364cd92098Szrj     UCHAR  ucEVClkHigh;
5374cd92098Szrj     USHORT usECClkLow;
5384cd92098Szrj     UCHAR  ucECClkHigh;
5394cd92098Szrj }VCEClockInfo;
5404cd92098Szrj 
5414cd92098Szrj typedef struct _VCEClockInfoArray{
5424cd92098Szrj     UCHAR ucNumEntries;
5434cd92098Szrj     VCEClockInfo entries[1];
5444cd92098Szrj }VCEClockInfoArray;
5454cd92098Szrj 
5464cd92098Szrj typedef struct _ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record
5474cd92098Szrj {
5484cd92098Szrj     USHORT usVoltage;
5494cd92098Szrj     UCHAR  ucVCEClockInfoIndex;
5504cd92098Szrj }ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record;
5514cd92098Szrj 
5524cd92098Szrj typedef struct _ATOM_PPLIB_VCE_Clock_Voltage_Limit_Table
5534cd92098Szrj {
5544cd92098Szrj     UCHAR numEntries;
5554cd92098Szrj     ATOM_PPLIB_VCE_Clock_Voltage_Limit_Record entries[1];
5564cd92098Szrj }ATOM_PPLIB_VCE_Clock_Voltage_Limit_Table;
5574cd92098Szrj 
5584cd92098Szrj typedef struct _ATOM_PPLIB_VCE_State_Record
5594cd92098Szrj {
5604cd92098Szrj     UCHAR  ucVCEClockInfoIndex;
5614cd92098Szrj     UCHAR  ucClockInfoIndex; //highest 2 bits indicates memory p-states, lower 6bits indicates index to ClockInfoArrary
5624cd92098Szrj }ATOM_PPLIB_VCE_State_Record;
5634cd92098Szrj 
5644cd92098Szrj typedef struct _ATOM_PPLIB_VCE_State_Table
5654cd92098Szrj {
5664cd92098Szrj     UCHAR numEntries;
5674cd92098Szrj     ATOM_PPLIB_VCE_State_Record entries[1];
5684cd92098Szrj }ATOM_PPLIB_VCE_State_Table;
5694cd92098Szrj 
5704cd92098Szrj 
5714cd92098Szrj typedef struct _ATOM_PPLIB_VCE_Table
5724cd92098Szrj {
5734cd92098Szrj       UCHAR revid;
5744cd92098Szrj //    VCEClockInfoArray array;
5754cd92098Szrj //    ATOM_PPLIB_VCE_Clock_Voltage_Limit_Table limits;
5764cd92098Szrj //    ATOM_PPLIB_VCE_State_Table states;
5774cd92098Szrj }ATOM_PPLIB_VCE_Table;
5784cd92098Szrj 
5794cd92098Szrj 
5804cd92098Szrj typedef struct _UVDClockInfo{
5814cd92098Szrj     USHORT usVClkLow;
5824cd92098Szrj     UCHAR  ucVClkHigh;
5834cd92098Szrj     USHORT usDClkLow;
5844cd92098Szrj     UCHAR  ucDClkHigh;
5854cd92098Szrj }UVDClockInfo;
5864cd92098Szrj 
5874cd92098Szrj typedef struct _UVDClockInfoArray{
5884cd92098Szrj     UCHAR ucNumEntries;
5894cd92098Szrj     UVDClockInfo entries[1];
5904cd92098Szrj }UVDClockInfoArray;
5914cd92098Szrj 
5924cd92098Szrj typedef struct _ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record
5934cd92098Szrj {
5944cd92098Szrj     USHORT usVoltage;
5954cd92098Szrj     UCHAR  ucUVDClockInfoIndex;
5964cd92098Szrj }ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record;
5974cd92098Szrj 
5984cd92098Szrj typedef struct _ATOM_PPLIB_UVD_Clock_Voltage_Limit_Table
5994cd92098Szrj {
6004cd92098Szrj     UCHAR numEntries;
6014cd92098Szrj     ATOM_PPLIB_UVD_Clock_Voltage_Limit_Record entries[1];
6024cd92098Szrj }ATOM_PPLIB_UVD_Clock_Voltage_Limit_Table;
6034cd92098Szrj 
6044cd92098Szrj typedef struct _ATOM_PPLIB_UVD_Table
6054cd92098Szrj {
6064cd92098Szrj       UCHAR revid;
6074cd92098Szrj //    UVDClockInfoArray array;
6084cd92098Szrj //    ATOM_PPLIB_UVD_Clock_Voltage_Limit_Table limits;
6094cd92098Szrj }ATOM_PPLIB_UVD_Table;
6104cd92098Szrj 
6114cd92098Szrj typedef struct _ATOM_PPLIB_SAMClk_Voltage_Limit_Record
6124cd92098Szrj {
6134cd92098Szrj       USHORT usVoltage;
6144cd92098Szrj       USHORT usSAMClockLow;
6154cd92098Szrj       UCHAR  ucSAMClockHigh;
6164cd92098Szrj }ATOM_PPLIB_SAMClk_Voltage_Limit_Record;
6174cd92098Szrj 
6184cd92098Szrj typedef struct _ATOM_PPLIB_SAMClk_Voltage_Limit_Table{
6194cd92098Szrj     UCHAR numEntries;
6204cd92098Szrj     ATOM_PPLIB_SAMClk_Voltage_Limit_Record entries[1];
6214cd92098Szrj }ATOM_PPLIB_SAMClk_Voltage_Limit_Table;
6224cd92098Szrj 
6234cd92098Szrj typedef struct _ATOM_PPLIB_SAMU_Table
6244cd92098Szrj {
6254cd92098Szrj       UCHAR revid;
6264cd92098Szrj       ATOM_PPLIB_SAMClk_Voltage_Limit_Table limits;
6274cd92098Szrj }ATOM_PPLIB_SAMU_Table;
6284cd92098Szrj 
6294cd92098Szrj typedef struct _ATOM_PPLIB_ACPClk_Voltage_Limit_Record
6304cd92098Szrj {
6314cd92098Szrj       USHORT usVoltage;
6324cd92098Szrj       USHORT usACPClockLow;
6334cd92098Szrj       UCHAR  ucACPClockHigh;
6344cd92098Szrj }ATOM_PPLIB_ACPClk_Voltage_Limit_Record;
6354cd92098Szrj 
6364cd92098Szrj typedef struct _ATOM_PPLIB_ACPClk_Voltage_Limit_Table{
6374cd92098Szrj     UCHAR numEntries;
6384cd92098Szrj     ATOM_PPLIB_ACPClk_Voltage_Limit_Record entries[1];
6394cd92098Szrj }ATOM_PPLIB_ACPClk_Voltage_Limit_Table;
6404cd92098Szrj 
6414cd92098Szrj typedef struct _ATOM_PPLIB_ACP_Table
6424cd92098Szrj {
6434cd92098Szrj       UCHAR revid;
6444cd92098Szrj       ATOM_PPLIB_ACPClk_Voltage_Limit_Table limits;
6454cd92098Szrj }ATOM_PPLIB_ACP_Table;
6464cd92098Szrj 
6474cd92098Szrj typedef struct _ATOM_PowerTune_Table{
6484cd92098Szrj     USHORT usTDP;
6494cd92098Szrj     USHORT usConfigurableTDP;
6504cd92098Szrj     USHORT usTDC;
6514cd92098Szrj     USHORT usBatteryPowerLimit;
6524cd92098Szrj     USHORT usSmallPowerLimit;
6534cd92098Szrj     USHORT usLowCACLeakage;
6544cd92098Szrj     USHORT usHighCACLeakage;
6554cd92098Szrj }ATOM_PowerTune_Table;
6564cd92098Szrj 
6574cd92098Szrj typedef struct _ATOM_PPLIB_POWERTUNE_Table
6584cd92098Szrj {
6594cd92098Szrj       UCHAR revid;
6604cd92098Szrj       ATOM_PowerTune_Table power_tune_table;
6614cd92098Szrj }ATOM_PPLIB_POWERTUNE_Table;
6624cd92098Szrj 
6634cd92098Szrj typedef struct _ATOM_PPLIB_POWERTUNE_Table_V1
6644cd92098Szrj {
6654cd92098Szrj       UCHAR revid;
6664cd92098Szrj       ATOM_PowerTune_Table power_tune_table;
6674cd92098Szrj       USHORT usMaximumPowerDeliveryLimit;
6684cd92098Szrj       USHORT usReserve[7];
6694cd92098Szrj } ATOM_PPLIB_POWERTUNE_Table_V1;
6704cd92098Szrj 
6714cd92098Szrj #define ATOM_PPM_A_A    1
6724cd92098Szrj #define ATOM_PPM_A_I    2
6734cd92098Szrj typedef struct _ATOM_PPLIB_PPM_Table
6744cd92098Szrj {
6754cd92098Szrj       UCHAR  ucRevId;
6764cd92098Szrj       UCHAR  ucPpmDesign;          //A+I or A+A
6774cd92098Szrj       USHORT usCpuCoreNumber;
6784cd92098Szrj       ULONG  ulPlatformTDP;
6794cd92098Szrj       ULONG  ulSmallACPlatformTDP;
6804cd92098Szrj       ULONG  ulPlatformTDC;
6814cd92098Szrj       ULONG  ulSmallACPlatformTDC;
6824cd92098Szrj       ULONG  ulApuTDP;
6834cd92098Szrj       ULONG  ulDGpuTDP;
6844cd92098Szrj       ULONG  ulDGpuUlvPower;
6854cd92098Szrj       ULONG  ulTjmax;
6864cd92098Szrj } ATOM_PPLIB_PPM_Table;
6874cd92098Szrj 
688c6f73aabSFrançois Tigeot #pragma pack()
6894cd92098Szrj 
6904cd92098Szrj #endif
691