1 | /* |
2 | * Copyright 2012 Advanced Micro Devices, Inc. |
3 | * |
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: |
10 | * |
11 | * The above copyright notice and this permission notice shall be included in |
12 | * all copies or substantial portions of the Software. |
13 | * |
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. |
21 | * |
22 | */ |
23 | |
24 | #ifndef AMD_ACPI_H |
25 | #define AMD_ACPI_H |
26 | |
27 | #define ACPI_AC_CLASS "ac_adapter" |
28 | |
29 | struct atif_verify_interface { |
30 | u16 size; /* structure size in bytes (includes size field) */ |
31 | u16 version; /* version */ |
32 | u32 notification_mask; /* supported notifications mask */ |
33 | u32 function_bits; /* supported functions bit vector */ |
34 | } __packed; |
35 | |
36 | struct atif_system_params { |
37 | u16 size; /* structure size in bytes (includes size field) */ |
38 | u32 valid_mask; /* valid flags mask */ |
39 | u32 flags; /* flags */ |
40 | u8 command_code; /* notify command code */ |
41 | } __packed; |
42 | |
43 | struct atif_sbios_requests { |
44 | u16 size; /* structure size in bytes (includes size field) */ |
45 | u32 pending; /* pending sbios requests */ |
46 | u8 panel_exp_mode; /* panel expansion mode */ |
47 | u8 thermal_gfx; /* thermal state: target gfx controller */ |
48 | u8 thermal_state; /* thermal state: state id (0: exit state, non-0: state) */ |
49 | u8 forced_power_gfx; /* forced power state: target gfx controller */ |
50 | u8 forced_power_state; /* forced power state: state id */ |
51 | u8 system_power_src; /* system power source */ |
52 | u8 backlight_level; /* panel backlight level (0-255) */ |
53 | } __packed; |
54 | |
55 | struct atif_qbtc_arguments { |
56 | u16 size; /* structure size in bytes (includes size field) */ |
57 | u8 requested_display; /* which display is requested */ |
58 | } __packed; |
59 | |
60 | #define ATIF_QBTC_MAX_DATA_POINTS 99 |
61 | |
62 | struct atif_qbtc_data_point { |
63 | u8 luminance; /* luminance in percent */ |
64 | u8 ipnut_signal; /* input signal in range 0-255 */ |
65 | } __packed; |
66 | |
67 | struct atif_qbtc_output { |
68 | u16 size; /* structure size in bytes (includes size field) */ |
69 | u16 flags; /* all zeroes */ |
70 | u8 error_code; /* error code */ |
71 | u8 ac_level; /* default brightness on AC power */ |
72 | u8 dc_level; /* default brightness on DC power */ |
73 | u8 min_input_signal; /* max input signal in range 0-255 */ |
74 | u8 max_input_signal; /* min input signal in range 0-255 */ |
75 | u8 number_of_points; /* number of data points */ |
76 | struct atif_qbtc_data_point data_points[ATIF_QBTC_MAX_DATA_POINTS]; |
77 | } __packed; |
78 | |
79 | #define ATIF_NOTIFY_MASK 0x3 |
80 | #define ATIF_NOTIFY_NONE 0 |
81 | #define ATIF_NOTIFY_81 1 |
82 | #define ATIF_NOTIFY_N 2 |
83 | |
84 | struct atcs_verify_interface { |
85 | u16 size; /* structure size in bytes (includes size field) */ |
86 | u16 version; /* version */ |
87 | u32 function_bits; /* supported functions bit vector */ |
88 | } __packed; |
89 | |
90 | #define ATCS_VALID_FLAGS_MASK 0x3 |
91 | |
92 | struct atcs_pref_req_input { |
93 | u16 size; /* structure size in bytes (includes size field) */ |
94 | u16 client_id; /* client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) */ |
95 | u16 valid_flags_mask; /* valid flags mask */ |
96 | u16 flags; /* flags */ |
97 | u8 req_type; /* request type */ |
98 | u8 perf_req; /* performance request */ |
99 | } __packed; |
100 | |
101 | struct atcs_pref_req_output { |
102 | u16 size; /* structure size in bytes (includes size field) */ |
103 | u8 ret_val; /* return value */ |
104 | } __packed; |
105 | |
106 | struct atcs_pwr_shift_input { |
107 | u16 size; /* structure size in bytes (includes size field) */ |
108 | u16 dgpu_id; /* client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) */ |
109 | u8 dev_acpi_state; /* D0 = 0, D3 hot = 3 */ |
110 | u8 drv_state; /* 0 = operational, 1 = not operational */ |
111 | } __packed; |
112 | |
113 | /* AMD hw uses four ACPI control methods: |
114 | * 1. ATIF |
115 | * ARG0: (ACPI_INTEGER) function code |
116 | * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes |
117 | * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes |
118 | * ATIF provides an entry point for the gfx driver to interact with the sbios. |
119 | * The AMD ACPI notification mechanism uses Notify (VGA, 0x81) or a custom |
120 | * notification. Which notification is used as indicated by the ATIF Control |
121 | * Method GET_SYSTEM_PARAMETERS. When the driver receives Notify (VGA, 0x81) or |
122 | * a custom notification it invokes ATIF Control Method GET_SYSTEM_BIOS_REQUESTS |
123 | * to identify pending System BIOS requests and associated parameters. For |
124 | * example, if one of the pending requests is DISPLAY_SWITCH_REQUEST, the driver |
125 | * will perform display device detection and invoke ATIF Control Method |
126 | * SELECT_ACTIVE_DISPLAYS. |
127 | * |
128 | * 2. ATPX |
129 | * ARG0: (ACPI_INTEGER) function code |
130 | * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes |
131 | * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes |
132 | * ATPX methods are used on PowerXpress systems to handle mux switching and |
133 | * discrete GPU power control. |
134 | * |
135 | * 3. ATRM |
136 | * ARG0: (ACPI_INTEGER) offset of vbios rom data |
137 | * ARG1: (ACPI_BUFFER) size of the buffer to fill (up to 4K). |
138 | * OUTPUT: (ACPI_BUFFER) output buffer |
139 | * ATRM provides an interfacess to access the discrete GPU vbios image on |
140 | * PowerXpress systems with multiple GPUs. |
141 | * |
142 | * 4. ATCS |
143 | * ARG0: (ACPI_INTEGER) function code |
144 | * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes |
145 | * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes |
146 | * ATCS provides an interface to AMD chipset specific functionality. |
147 | * |
148 | */ |
149 | /* ATIF */ |
150 | #define ATIF_FUNCTION_VERIFY_INTERFACE 0x0 |
151 | /* ARG0: ATIF_FUNCTION_VERIFY_INTERFACE |
152 | * ARG1: none |
153 | * OUTPUT: |
154 | * WORD - structure size in bytes (includes size field) |
155 | * WORD - version |
156 | * DWORD - supported notifications mask |
157 | * DWORD - supported functions bit vector |
158 | */ |
159 | /* Notifications mask */ |
160 | # define ATIF_THERMAL_STATE_CHANGE_REQUEST_SUPPORTED (1 << 2) |
161 | # define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST_SUPPORTED (1 << 3) |
162 | # define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST_SUPPORTED (1 << 4) |
163 | # define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST_SUPPORTED (1 << 7) |
164 | # define ATIF_DGPU_DISPLAY_EVENT_SUPPORTED (1 << 8) |
165 | # define ATIF_GPU_PACKAGE_POWER_LIMIT_REQUEST_SUPPORTED (1 << 12) |
166 | /* supported functions vector */ |
167 | # define ATIF_GET_SYSTEM_PARAMETERS_SUPPORTED (1 << 0) |
168 | # define ATIF_GET_SYSTEM_BIOS_REQUESTS_SUPPORTED (1 << 1) |
169 | # define ATIF_TEMPERATURE_CHANGE_NOTIFICATION_SUPPORTED (1 << 12) |
170 | # define ATIF_QUERY_BACKLIGHT_TRANSFER_CHARACTERISTICS_SUPPORTED (1 << 15) |
171 | # define ATIF_READY_TO_UNDOCK_NOTIFICATION_SUPPORTED (1 << 16) |
172 | # define ATIF_GET_EXTERNAL_GPU_INFORMATION_SUPPORTED (1 << 20) |
173 | #define ATIF_FUNCTION_GET_SYSTEM_PARAMETERS 0x1 |
174 | /* ARG0: ATIF_FUNCTION_GET_SYSTEM_PARAMETERS |
175 | * ARG1: none |
176 | * OUTPUT: |
177 | * WORD - structure size in bytes (includes size field) |
178 | * DWORD - valid flags mask |
179 | * DWORD - flags |
180 | * |
181 | * OR |
182 | * |
183 | * WORD - structure size in bytes (includes size field) |
184 | * DWORD - valid flags mask |
185 | * DWORD - flags |
186 | * BYTE - notify command code |
187 | * |
188 | * flags |
189 | * bits 1:0: |
190 | * 0 - Notify(VGA, 0x81) is not used for notification |
191 | * 1 - Notify(VGA, 0x81) is used for notification |
192 | * 2 - Notify(VGA, n) is used for notification where |
193 | * n (0xd0-0xd9) is specified in notify command code. |
194 | * bit 2: |
195 | * 1 - lid changes not reported though int10 |
196 | * bit 3: |
197 | * 1 - system bios controls overclocking |
198 | * bit 4: |
199 | * 1 - enable overclocking |
200 | */ |
201 | #define ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS 0x2 |
202 | /* ARG0: ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS |
203 | * ARG1: none |
204 | * OUTPUT: |
205 | * WORD - structure size in bytes (includes size field) |
206 | * DWORD - pending sbios requests |
207 | * BYTE - reserved (all zeroes) |
208 | * BYTE - thermal state: target gfx controller |
209 | * BYTE - thermal state: state id (0: exit state, non-0: state) |
210 | * BYTE - forced power state: target gfx controller |
211 | * BYTE - forced power state: state id (0: forced state, non-0: state) |
212 | * BYTE - system power source |
213 | * BYTE - panel backlight level (0-255) |
214 | * BYTE - GPU package power limit: target gfx controller |
215 | * DWORD - GPU package power limit: value (24:8 fractional format, Watts) |
216 | */ |
217 | /* pending sbios requests */ |
218 | # define ATIF_THERMAL_STATE_CHANGE_REQUEST (1 << 2) |
219 | # define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST (1 << 3) |
220 | # define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST (1 << 4) |
221 | # define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST (1 << 7) |
222 | # define ATIF_DGPU_DISPLAY_EVENT (1 << 8) |
223 | # define ATIF_GPU_PACKAGE_POWER_LIMIT_REQUEST (1 << 12) |
224 | /* target gfx controller */ |
225 | # define ATIF_TARGET_GFX_SINGLE 0 |
226 | # define ATIF_TARGET_GFX_PX_IGPU 1 |
227 | # define ATIF_TARGET_GFX_PX_DGPU 2 |
228 | /* system power source */ |
229 | # define ATIF_POWER_SOURCE_AC 1 |
230 | # define ATIF_POWER_SOURCE_DC 2 |
231 | # define ATIF_POWER_SOURCE_RESTRICTED_AC_1 3 |
232 | # define ATIF_POWER_SOURCE_RESTRICTED_AC_2 4 |
233 | #define ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION 0xD |
234 | /* ARG0: ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION |
235 | * ARG1: |
236 | * WORD - structure size in bytes (includes size field) |
237 | * WORD - gfx controller id |
238 | * BYTE - current temperature (degress Celsius) |
239 | * OUTPUT: none |
240 | */ |
241 | #define ATIF_FUNCTION_QUERY_BRIGHTNESS_TRANSFER_CHARACTERISTICS 0x10 |
242 | /* ARG0: ATIF_FUNCTION_QUERY_BRIGHTNESS_TRANSFER_CHARACTERISTICS |
243 | * ARG1: |
244 | * WORD - structure size in bytes (includes size field) |
245 | * BYTE - requested display |
246 | * OUTPUT: |
247 | * WORD - structure size in bytes (includes size field) |
248 | * WORD - flags (currently all 16 bits are reserved) |
249 | * BYTE - error code (on failure, disregard all below fields) |
250 | * BYTE - AC level (default brightness in percent when machine has full power) |
251 | * BYTE - DC level (default brightness in percent when machine is on battery) |
252 | * BYTE - min input signal, in range 0-255, corresponding to 0% backlight |
253 | * BYTE - max input signal, in range 0-255, corresponding to 100% backlight |
254 | * BYTE - number of reported data points |
255 | * BYTE - luminance level in percent \ repeated structure |
256 | * BYTE - input signal in range 0-255 / does not have entries for 0% and 100% |
257 | */ |
258 | /* requested display */ |
259 | # define ATIF_QBTC_REQUEST_LCD1 0 |
260 | # define ATIF_QBTC_REQUEST_CRT1 1 |
261 | # define ATIF_QBTC_REQUEST_DFP1 3 |
262 | # define ATIF_QBTC_REQUEST_CRT2 4 |
263 | # define ATIF_QBTC_REQUEST_LCD2 5 |
264 | # define ATIF_QBTC_REQUEST_DFP2 7 |
265 | # define ATIF_QBTC_REQUEST_DFP3 9 |
266 | # define ATIF_QBTC_REQUEST_DFP4 10 |
267 | # define ATIF_QBTC_REQUEST_DFP5 11 |
268 | # define ATIF_QBTC_REQUEST_DFP6 12 |
269 | /* error code */ |
270 | # define ATIF_QBTC_ERROR_CODE_SUCCESS 0 |
271 | # define ATIF_QBTC_ERROR_CODE_FAILURE 1 |
272 | # define ATIF_QBTC_ERROR_CODE_DEVICE_NOT_SUPPORTED 2 |
273 | #define ATIF_FUNCTION_READY_TO_UNDOCK_NOTIFICATION 0x11 |
274 | /* ARG0: ATIF_FUNCTION_READY_TO_UNDOCK_NOTIFICATION |
275 | * ARG1: none |
276 | * OUTPUT: none |
277 | */ |
278 | #define ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION 0x15 |
279 | /* ARG0: ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION |
280 | * ARG1: none |
281 | * OUTPUT: |
282 | * WORD - number of reported external gfx devices |
283 | * WORD - device structure size in bytes (excludes device size field) |
284 | * WORD - flags \ |
285 | * WORD - bus number / repeated structure |
286 | */ |
287 | /* flags */ |
288 | # define ATIF_EXTERNAL_GRAPHICS_PORT (1 << 0) |
289 | |
290 | /* ATPX */ |
291 | #define ATPX_FUNCTION_VERIFY_INTERFACE 0x0 |
292 | /* ARG0: ATPX_FUNCTION_VERIFY_INTERFACE |
293 | * ARG1: none |
294 | * OUTPUT: |
295 | * WORD - structure size in bytes (includes size field) |
296 | * WORD - version |
297 | * DWORD - supported functions bit vector |
298 | */ |
299 | /* supported functions vector */ |
300 | # define ATPX_GET_PX_PARAMETERS_SUPPORTED (1 << 0) |
301 | # define ATPX_POWER_CONTROL_SUPPORTED (1 << 1) |
302 | # define ATPX_DISPLAY_MUX_CONTROL_SUPPORTED (1 << 2) |
303 | # define ATPX_I2C_MUX_CONTROL_SUPPORTED (1 << 3) |
304 | # define ATPX_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION_SUPPORTED (1 << 4) |
305 | # define ATPX_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION_SUPPORTED (1 << 5) |
306 | # define ATPX_GET_DISPLAY_CONNECTORS_MAPPING_SUPPORTED (1 << 7) |
307 | # define ATPX_GET_DISPLAY_DETECTION_PORTS_SUPPORTED (1 << 8) |
308 | #define ATPX_FUNCTION_GET_PX_PARAMETERS 0x1 |
309 | /* ARG0: ATPX_FUNCTION_GET_PX_PARAMETERS |
310 | * ARG1: none |
311 | * OUTPUT: |
312 | * WORD - structure size in bytes (includes size field) |
313 | * DWORD - valid flags mask |
314 | * DWORD - flags |
315 | */ |
316 | /* flags */ |
317 | # define ATPX_LVDS_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 0) |
318 | # define ATPX_CRT1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 1) |
319 | # define ATPX_DVI1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 2) |
320 | # define ATPX_CRT1_RGB_SIGNAL_MUXED (1 << 3) |
321 | # define ATPX_TV_SIGNAL_MUXED (1 << 4) |
322 | # define ATPX_DFP_SIGNAL_MUXED (1 << 5) |
323 | # define ATPX_SEPARATE_MUX_FOR_I2C (1 << 6) |
324 | # define ATPX_DYNAMIC_PX_SUPPORTED (1 << 7) |
325 | # define ATPX_ACF_NOT_SUPPORTED (1 << 8) |
326 | # define ATPX_FIXED_NOT_SUPPORTED (1 << 9) |
327 | # define ATPX_DYNAMIC_DGPU_POWER_OFF_SUPPORTED (1 << 10) |
328 | # define ATPX_DGPU_REQ_POWER_FOR_DISPLAYS (1 << 11) |
329 | # define ATPX_DGPU_CAN_DRIVE_DISPLAYS (1 << 12) |
330 | # define ATPX_MS_HYBRID_GFX_SUPPORTED (1 << 14) |
331 | #define ATPX_FUNCTION_POWER_CONTROL 0x2 |
332 | /* ARG0: ATPX_FUNCTION_POWER_CONTROL |
333 | * ARG1: |
334 | * WORD - structure size in bytes (includes size field) |
335 | * BYTE - dGPU power state (0: power off, 1: power on) |
336 | * OUTPUT: none |
337 | */ |
338 | #define ATPX_FUNCTION_DISPLAY_MUX_CONTROL 0x3 |
339 | /* ARG0: ATPX_FUNCTION_DISPLAY_MUX_CONTROL |
340 | * ARG1: |
341 | * WORD - structure size in bytes (includes size field) |
342 | * WORD - display mux control (0: iGPU, 1: dGPU) |
343 | * OUTPUT: none |
344 | */ |
345 | # define ATPX_INTEGRATED_GPU 0 |
346 | # define ATPX_DISCRETE_GPU 1 |
347 | #define ATPX_FUNCTION_I2C_MUX_CONTROL 0x4 |
348 | /* ARG0: ATPX_FUNCTION_I2C_MUX_CONTROL |
349 | * ARG1: |
350 | * WORD - structure size in bytes (includes size field) |
351 | * WORD - i2c/aux/hpd mux control (0: iGPU, 1: dGPU) |
352 | * OUTPUT: none |
353 | */ |
354 | #define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION 0x5 |
355 | /* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION |
356 | * ARG1: |
357 | * WORD - structure size in bytes (includes size field) |
358 | * WORD - target gpu (0: iGPU, 1: dGPU) |
359 | * OUTPUT: none |
360 | */ |
361 | #define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION 0x6 |
362 | /* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION |
363 | * ARG1: |
364 | * WORD - structure size in bytes (includes size field) |
365 | * WORD - target gpu (0: iGPU, 1: dGPU) |
366 | * OUTPUT: none |
367 | */ |
368 | #define ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING 0x8 |
369 | /* ARG0: ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING |
370 | * ARG1: none |
371 | * OUTPUT: |
372 | * WORD - number of display connectors |
373 | * WORD - connector structure size in bytes (excludes connector size field) |
374 | * BYTE - flags \ |
375 | * BYTE - ATIF display vector bit position } repeated |
376 | * BYTE - adapter id (0: iGPU, 1-n: dGPU ordered by pcie bus number) } structure |
377 | * WORD - connector ACPI id / |
378 | */ |
379 | /* flags */ |
380 | # define ATPX_DISPLAY_OUTPUT_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 0) |
381 | # define ATPX_DISPLAY_HPD_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 1) |
382 | # define ATPX_DISPLAY_I2C_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 2) |
383 | #define ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS 0x9 |
384 | /* ARG0: ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS |
385 | * ARG1: none |
386 | * OUTPUT: |
387 | * WORD - number of HPD/DDC ports |
388 | * WORD - port structure size in bytes (excludes port size field) |
389 | * BYTE - ATIF display vector bit position \ |
390 | * BYTE - hpd id } reapeated structure |
391 | * BYTE - ddc id / |
392 | * |
393 | * available on A+A systems only |
394 | */ |
395 | /* hpd id */ |
396 | # define ATPX_HPD_NONE 0 |
397 | # define ATPX_HPD1 1 |
398 | # define ATPX_HPD2 2 |
399 | # define ATPX_HPD3 3 |
400 | # define ATPX_HPD4 4 |
401 | # define ATPX_HPD5 5 |
402 | # define ATPX_HPD6 6 |
403 | /* ddc id */ |
404 | # define ATPX_DDC_NONE 0 |
405 | # define ATPX_DDC1 1 |
406 | # define ATPX_DDC2 2 |
407 | # define ATPX_DDC3 3 |
408 | # define ATPX_DDC4 4 |
409 | # define ATPX_DDC5 5 |
410 | # define ATPX_DDC6 6 |
411 | # define ATPX_DDC7 7 |
412 | # define ATPX_DDC8 8 |
413 | |
414 | /* ATCS */ |
415 | #define ATCS_FUNCTION_VERIFY_INTERFACE 0x0 |
416 | /* ARG0: ATCS_FUNCTION_VERIFY_INTERFACE |
417 | * ARG1: none |
418 | * OUTPUT: |
419 | * WORD - structure size in bytes (includes size field) |
420 | * WORD - version |
421 | * DWORD - supported functions bit vector |
422 | */ |
423 | /* supported functions vector */ |
424 | # define ATCS_GET_EXTERNAL_STATE_SUPPORTED (1 << 0) |
425 | # define ATCS_PCIE_PERFORMANCE_REQUEST_SUPPORTED (1 << 1) |
426 | # define ATCS_PCIE_DEVICE_READY_NOTIFICATION_SUPPORTED (1 << 2) |
427 | # define ATCS_SET_PCIE_BUS_WIDTH_SUPPORTED (1 << 3) |
428 | # define ATCS_SET_POWER_SHIFT_CONTROL_SUPPORTED (1 << 7) |
429 | #define ATCS_FUNCTION_GET_EXTERNAL_STATE 0x1 |
430 | /* ARG0: ATCS_FUNCTION_GET_EXTERNAL_STATE |
431 | * ARG1: none |
432 | * OUTPUT: |
433 | * WORD - structure size in bytes (includes size field) |
434 | * DWORD - valid flags mask |
435 | * DWORD - flags (0: undocked, 1: docked) |
436 | */ |
437 | /* flags */ |
438 | # define ATCS_DOCKED (1 << 0) |
439 | #define ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST 0x2 |
440 | /* ARG0: ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST |
441 | * ARG1: |
442 | * WORD - structure size in bytes (includes size field) |
443 | * WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) |
444 | * WORD - valid flags mask |
445 | * WORD - flags |
446 | * BYTE - request type |
447 | * BYTE - performance request |
448 | * OUTPUT: |
449 | * WORD - structure size in bytes (includes size field) |
450 | * BYTE - return value |
451 | */ |
452 | /* flags */ |
453 | # define ATCS_ADVERTISE_CAPS (1 << 0) |
454 | # define ATCS_WAIT_FOR_COMPLETION (1 << 1) |
455 | /* request type */ |
456 | # define ATCS_PCIE_LINK_SPEED 1 |
457 | /* performance request */ |
458 | # define ATCS_REMOVE 0 |
459 | # define ATCS_FORCE_LOW_POWER 1 |
460 | # define ATCS_PERF_LEVEL_1 2 /* PCIE Gen 1 */ |
461 | # define ATCS_PERF_LEVEL_2 3 /* PCIE Gen 2 */ |
462 | # define ATCS_PERF_LEVEL_3 4 /* PCIE Gen 3 */ |
463 | /* return value */ |
464 | # define ATCS_REQUEST_REFUSED 1 |
465 | # define ATCS_REQUEST_COMPLETE 2 |
466 | # define ATCS_REQUEST_IN_PROGRESS 3 |
467 | #define ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION 0x3 |
468 | /* ARG0: ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION |
469 | * ARG1: none |
470 | * OUTPUT: none |
471 | */ |
472 | #define ATCS_FUNCTION_SET_PCIE_BUS_WIDTH 0x4 |
473 | /* ARG0: ATCS_FUNCTION_SET_PCIE_BUS_WIDTH |
474 | * ARG1: |
475 | * WORD - structure size in bytes (includes size field) |
476 | * WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) |
477 | * BYTE - number of active lanes |
478 | * OUTPUT: |
479 | * WORD - structure size in bytes (includes size field) |
480 | * BYTE - number of active lanes |
481 | */ |
482 | |
483 | #define ATCS_FUNCTION_POWER_SHIFT_CONTROL 0x8 |
484 | /* ARG0: ATCS_FUNCTION_POWER_SHIFT_CONTROL |
485 | * ARG1: |
486 | * WORD - structure size in bytes (includes size field) |
487 | * WORD - dGPU id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) |
488 | * BYTE - Device ACPI state |
489 | * BYTE - Driver state |
490 | * OUTPUT: none |
491 | */ |
492 | |
493 | #endif |
494 | |