projects/linux·blob master · refs

525 lines · 22.3 KiB

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