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