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 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 input_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 static_assert(ATIF_QBTC_MAX_DATA_POINTS == MAX_LUMINANCE_DATA_POINTS); 79 static_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 86 struct 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 94 struct 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 103 struct atcs_pref_req_output { 104 u16 size; /* structure size in bytes (includes size field) */ 105 u8 ret_val; /* return value */ 106 } __packed; 107 108 struct 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 115 struct 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 120 struct 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 526