2 * Copyright 2015 Advanced Micro Devices, Inc.
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice shall be included in
12 * all copies or substantial portions of the Software.
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20 * OTHER DEALINGS IN THE SOFTWARE.
23 #ifndef PP_POWERSTATE_H
24 #define PP_POWERSTATE_H
26 struct pp_hw_power_state
{
30 struct pp_power_state
;
33 #define PP_INVALID_POWER_STATE_ID (0)
37 * An item of a list containing Power States.
40 struct PP_StateLinkedList
{
41 struct pp_power_state
*next
;
42 struct pp_power_state
*prev
;
46 enum PP_StateUILabel
{
48 PP_StateUILabel_Battery
,
49 PP_StateUILabel_MiddleLow
,
50 PP_StateUILabel_Balanced
,
51 PP_StateUILabel_MiddleHigh
,
52 PP_StateUILabel_Performance
,
56 enum PP_StateClassificationFlag
{
57 PP_StateClassificationFlag_Boot
= 0x0001,
58 PP_StateClassificationFlag_Thermal
= 0x0002,
59 PP_StateClassificationFlag_LimitedPowerSource
= 0x0004,
60 PP_StateClassificationFlag_Rest
= 0x0008,
61 PP_StateClassificationFlag_Forced
= 0x0010,
62 PP_StateClassificationFlag_User3DPerformance
= 0x0020,
63 PP_StateClassificationFlag_User2DPerformance
= 0x0040,
64 PP_StateClassificationFlag_3DPerformance
= 0x0080,
65 PP_StateClassificationFlag_ACOverdriveTemplate
= 0x0100,
66 PP_StateClassificationFlag_Uvd
= 0x0200,
67 PP_StateClassificationFlag_3DPerformanceLow
= 0x0400,
68 PP_StateClassificationFlag_ACPI
= 0x0800,
69 PP_StateClassificationFlag_HD2
= 0x1000,
70 PP_StateClassificationFlag_UvdHD
= 0x2000,
71 PP_StateClassificationFlag_UvdSD
= 0x4000,
72 PP_StateClassificationFlag_UserDCPerformance
= 0x8000,
73 PP_StateClassificationFlag_DCOverdriveTemplate
= 0x10000,
74 PP_StateClassificationFlag_BACO
= 0x20000,
75 PP_StateClassificationFlag_LimitedPowerSource_2
= 0x40000,
76 PP_StateClassificationFlag_ULV
= 0x80000,
77 PP_StateClassificationFlag_UvdMVC
= 0x100000,
80 typedef unsigned int PP_StateClassificationFlags
;
82 struct PP_StateClassificationBlock
{
83 enum PP_StateUILabel ui_label
;
84 enum PP_StateClassificationFlag flags
;
90 struct PP_StatePcieBlock
{
94 enum PP_RefreshrateSource
{
95 PP_RefreshrateSource_EDID
,
96 PP_RefreshrateSource_Explicit
99 struct PP_StateDisplayBlock
{
100 bool disableFrameModulation
;
101 bool limitRefreshrate
;
102 enum PP_RefreshrateSource refreshrateSource
;
103 int explicitRefreshrate
;
104 int edidRefreshrateIndex
;
105 bool enableVariBright
;
108 struct PP_StateMemroyBlock
{
114 struct PP_StateSoftwareAlgorithmBlock
{
115 bool disableLoadBalancing
;
116 bool enableSleepForTimestamps
;
119 #define PP_TEMPERATURE_UNITS_PER_CENTIGRADES 1000
122 * Type to hold a temperature range.
124 struct PP_TemperatureRange
{
129 struct PP_StateValidationBlock
{
130 bool singleDisplayOnly
;
132 uint8_t supportedPowerLevels
;
135 struct PP_UVD_CLOCKS
{
141 * Structure to hold a PowerPlay Power State.
143 struct pp_power_state
{
145 struct PP_StateLinkedList orderedList
;
146 struct PP_StateLinkedList allStatesList
;
148 struct PP_StateClassificationBlock classification
;
149 struct PP_StateValidationBlock validation
;
150 struct PP_StatePcieBlock pcie
;
151 struct PP_StateDisplayBlock display
;
152 struct PP_StateMemroyBlock memory
;
153 struct PP_TemperatureRange temperatures
;
154 struct PP_StateSoftwareAlgorithmBlock software
;
155 struct PP_UVD_CLOCKS uvd_clocks
;
156 struct pp_hw_power_state hardware
;
159 enum PP_MMProfilingState
{
160 PP_MMProfilingState_NA
= 0,
161 PP_MMProfilingState_Started
,
162 PP_MMProfilingState_Stopped
165 struct pp_clock_engine_request
{
166 unsigned long client_type
;
167 unsigned long ctx_id
;
168 uint64_t context_handle
;
170 unsigned long sclk_hard_min
;
175 unsigned long ecclk_hard_min
;
178 unsigned long sclk_over_drive
;
179 unsigned long mclk_over_drive
;
180 unsigned long sclk_threshold
;
182 unsigned long vclk_ceiling
;
183 unsigned long dclk_ceiling
;
184 unsigned long num_cus
;
185 unsigned long pm_flag
;
186 enum PP_MMProfilingState mm_profiling_state
;