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