1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright 2012 Advanced Micro Devices, Inc. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Permission is hereby granted, free of charge, to any person obtaining a 5*4882a593Smuzhiyun * copy of this software and associated documentation files (the "Software"), 6*4882a593Smuzhiyun * to deal in the Software without restriction, including without limitation 7*4882a593Smuzhiyun * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8*4882a593Smuzhiyun * and/or sell copies of the Software, and to permit persons to whom the 9*4882a593Smuzhiyun * Software is furnished to do so, subject to the following conditions: 10*4882a593Smuzhiyun * 11*4882a593Smuzhiyun * The above copyright notice and this permission notice shall be included in 12*4882a593Smuzhiyun * all copies or substantial portions of the Software. 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15*4882a593Smuzhiyun * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16*4882a593Smuzhiyun * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17*4882a593Smuzhiyun * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18*4882a593Smuzhiyun * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19*4882a593Smuzhiyun * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20*4882a593Smuzhiyun * OTHER DEALINGS IN THE SOFTWARE. 21*4882a593Smuzhiyun * 22*4882a593Smuzhiyun */ 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun #ifndef RADEON_ACPI_H 25*4882a593Smuzhiyun #define RADEON_ACPI_H 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun struct radeon_device; 28*4882a593Smuzhiyun struct acpi_bus_event; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /* AMD hw uses four ACPI control methods: 31*4882a593Smuzhiyun * 1. ATIF 32*4882a593Smuzhiyun * ARG0: (ACPI_INTEGER) function code 33*4882a593Smuzhiyun * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes 34*4882a593Smuzhiyun * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes 35*4882a593Smuzhiyun * ATIF provides an entry point for the gfx driver to interact with the sbios. 36*4882a593Smuzhiyun * The AMD ACPI notification mechanism uses Notify (VGA, 0x81) or a custom 37*4882a593Smuzhiyun * notification. Which notification is used as indicated by the ATIF Control 38*4882a593Smuzhiyun * Method GET_SYSTEM_PARAMETERS. When the driver receives Notify (VGA, 0x81) or 39*4882a593Smuzhiyun * a custom notification it invokes ATIF Control Method GET_SYSTEM_BIOS_REQUESTS 40*4882a593Smuzhiyun * to identify pending System BIOS requests and associated parameters. For 41*4882a593Smuzhiyun * example, if one of the pending requests is DISPLAY_SWITCH_REQUEST, the driver 42*4882a593Smuzhiyun * will perform display device detection and invoke ATIF Control Method 43*4882a593Smuzhiyun * SELECT_ACTIVE_DISPLAYS. 44*4882a593Smuzhiyun * 45*4882a593Smuzhiyun * 2. ATPX 46*4882a593Smuzhiyun * ARG0: (ACPI_INTEGER) function code 47*4882a593Smuzhiyun * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes 48*4882a593Smuzhiyun * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes 49*4882a593Smuzhiyun * ATPX methods are used on PowerXpress systems to handle mux switching and 50*4882a593Smuzhiyun * discrete GPU power control. 51*4882a593Smuzhiyun * 52*4882a593Smuzhiyun * 3. ATRM 53*4882a593Smuzhiyun * ARG0: (ACPI_INTEGER) offset of vbios rom data 54*4882a593Smuzhiyun * ARG1: (ACPI_BUFFER) size of the buffer to fill (up to 4K). 55*4882a593Smuzhiyun * OUTPUT: (ACPI_BUFFER) output buffer 56*4882a593Smuzhiyun * ATRM provides an interfacess to access the discrete GPU vbios image on 57*4882a593Smuzhiyun * PowerXpress systems with multiple GPUs. 58*4882a593Smuzhiyun * 59*4882a593Smuzhiyun * 4. ATCS 60*4882a593Smuzhiyun * ARG0: (ACPI_INTEGER) function code 61*4882a593Smuzhiyun * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes 62*4882a593Smuzhiyun * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes 63*4882a593Smuzhiyun * ATCS provides an interface to AMD chipset specific functionality. 64*4882a593Smuzhiyun * 65*4882a593Smuzhiyun */ 66*4882a593Smuzhiyun /* ATIF */ 67*4882a593Smuzhiyun #define ATIF_FUNCTION_VERIFY_INTERFACE 0x0 68*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_VERIFY_INTERFACE 69*4882a593Smuzhiyun * ARG1: none 70*4882a593Smuzhiyun * OUTPUT: 71*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 72*4882a593Smuzhiyun * WORD - version 73*4882a593Smuzhiyun * DWORD - supported notifications mask 74*4882a593Smuzhiyun * DWORD - supported functions bit vector 75*4882a593Smuzhiyun */ 76*4882a593Smuzhiyun /* Notifications mask */ 77*4882a593Smuzhiyun # define ATIF_DISPLAY_SWITCH_REQUEST_SUPPORTED (1 << 0) 78*4882a593Smuzhiyun # define ATIF_EXPANSION_MODE_CHANGE_REQUEST_SUPPORTED (1 << 1) 79*4882a593Smuzhiyun # define ATIF_THERMAL_STATE_CHANGE_REQUEST_SUPPORTED (1 << 2) 80*4882a593Smuzhiyun # define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST_SUPPORTED (1 << 3) 81*4882a593Smuzhiyun # define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST_SUPPORTED (1 << 4) 82*4882a593Smuzhiyun # define ATIF_DISPLAY_CONF_CHANGE_REQUEST_SUPPORTED (1 << 5) 83*4882a593Smuzhiyun # define ATIF_PX_GFX_SWITCH_REQUEST_SUPPORTED (1 << 6) 84*4882a593Smuzhiyun # define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST_SUPPORTED (1 << 7) 85*4882a593Smuzhiyun # define ATIF_DGPU_DISPLAY_EVENT_SUPPORTED (1 << 8) 86*4882a593Smuzhiyun /* supported functions vector */ 87*4882a593Smuzhiyun # define ATIF_GET_SYSTEM_PARAMETERS_SUPPORTED (1 << 0) 88*4882a593Smuzhiyun # define ATIF_GET_SYSTEM_BIOS_REQUESTS_SUPPORTED (1 << 1) 89*4882a593Smuzhiyun # define ATIF_SELECT_ACTIVE_DISPLAYS_SUPPORTED (1 << 2) 90*4882a593Smuzhiyun # define ATIF_GET_LID_STATE_SUPPORTED (1 << 3) 91*4882a593Smuzhiyun # define ATIF_GET_TV_STANDARD_FROM_CMOS_SUPPORTED (1 << 4) 92*4882a593Smuzhiyun # define ATIF_SET_TV_STANDARD_IN_CMOS_SUPPORTED (1 << 5) 93*4882a593Smuzhiyun # define ATIF_GET_PANEL_EXPANSION_MODE_FROM_CMOS_SUPPORTED (1 << 6) 94*4882a593Smuzhiyun # define ATIF_SET_PANEL_EXPANSION_MODE_IN_CMOS_SUPPORTED (1 << 7) 95*4882a593Smuzhiyun # define ATIF_TEMPERATURE_CHANGE_NOTIFICATION_SUPPORTED (1 << 12) 96*4882a593Smuzhiyun # define ATIF_GET_GRAPHICS_DEVICE_TYPES_SUPPORTED (1 << 14) 97*4882a593Smuzhiyun # define ATIF_GET_EXTERNAL_GPU_INFORMATION_SUPPORTED (1 << 20) 98*4882a593Smuzhiyun #define ATIF_FUNCTION_GET_SYSTEM_PARAMETERS 0x1 99*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_GET_SYSTEM_PARAMETERS 100*4882a593Smuzhiyun * ARG1: none 101*4882a593Smuzhiyun * OUTPUT: 102*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 103*4882a593Smuzhiyun * DWORD - valid flags mask 104*4882a593Smuzhiyun * DWORD - flags 105*4882a593Smuzhiyun * 106*4882a593Smuzhiyun * OR 107*4882a593Smuzhiyun * 108*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 109*4882a593Smuzhiyun * DWORD - valid flags mask 110*4882a593Smuzhiyun * DWORD - flags 111*4882a593Smuzhiyun * BYTE - notify command code 112*4882a593Smuzhiyun * 113*4882a593Smuzhiyun * flags 114*4882a593Smuzhiyun * bits 1:0: 115*4882a593Smuzhiyun * 0 - Notify(VGA, 0x81) is not used for notification 116*4882a593Smuzhiyun * 1 - Notify(VGA, 0x81) is used for notification 117*4882a593Smuzhiyun * 2 - Notify(VGA, n) is used for notification where 118*4882a593Smuzhiyun * n (0xd0-0xd9) is specified in notify command code. 119*4882a593Smuzhiyun * bit 2: 120*4882a593Smuzhiyun * 1 - lid changes not reported though int10 121*4882a593Smuzhiyun */ 122*4882a593Smuzhiyun #define ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS 0x2 123*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS 124*4882a593Smuzhiyun * ARG1: none 125*4882a593Smuzhiyun * OUTPUT: 126*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 127*4882a593Smuzhiyun * DWORD - pending sbios requests 128*4882a593Smuzhiyun * BYTE - panel expansion mode 129*4882a593Smuzhiyun * BYTE - thermal state: target gfx controller 130*4882a593Smuzhiyun * BYTE - thermal state: state id (0: exit state, non-0: state) 131*4882a593Smuzhiyun * BYTE - forced power state: target gfx controller 132*4882a593Smuzhiyun * BYTE - forced power state: state id 133*4882a593Smuzhiyun * BYTE - system power source 134*4882a593Smuzhiyun * BYTE - panel backlight level (0-255) 135*4882a593Smuzhiyun */ 136*4882a593Smuzhiyun /* pending sbios requests */ 137*4882a593Smuzhiyun # define ATIF_DISPLAY_SWITCH_REQUEST (1 << 0) 138*4882a593Smuzhiyun # define ATIF_EXPANSION_MODE_CHANGE_REQUEST (1 << 1) 139*4882a593Smuzhiyun # define ATIF_THERMAL_STATE_CHANGE_REQUEST (1 << 2) 140*4882a593Smuzhiyun # define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST (1 << 3) 141*4882a593Smuzhiyun # define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST (1 << 4) 142*4882a593Smuzhiyun # define ATIF_DISPLAY_CONF_CHANGE_REQUEST (1 << 5) 143*4882a593Smuzhiyun # define ATIF_PX_GFX_SWITCH_REQUEST (1 << 6) 144*4882a593Smuzhiyun # define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST (1 << 7) 145*4882a593Smuzhiyun # define ATIF_DGPU_DISPLAY_EVENT (1 << 8) 146*4882a593Smuzhiyun /* panel expansion mode */ 147*4882a593Smuzhiyun # define ATIF_PANEL_EXPANSION_DISABLE 0 148*4882a593Smuzhiyun # define ATIF_PANEL_EXPANSION_FULL 1 149*4882a593Smuzhiyun # define ATIF_PANEL_EXPANSION_ASPECT 2 150*4882a593Smuzhiyun /* target gfx controller */ 151*4882a593Smuzhiyun # define ATIF_TARGET_GFX_SINGLE 0 152*4882a593Smuzhiyun # define ATIF_TARGET_GFX_PX_IGPU 1 153*4882a593Smuzhiyun # define ATIF_TARGET_GFX_PX_DGPU 2 154*4882a593Smuzhiyun /* system power source */ 155*4882a593Smuzhiyun # define ATIF_POWER_SOURCE_AC 1 156*4882a593Smuzhiyun # define ATIF_POWER_SOURCE_DC 2 157*4882a593Smuzhiyun # define ATIF_POWER_SOURCE_RESTRICTED_AC_1 3 158*4882a593Smuzhiyun # define ATIF_POWER_SOURCE_RESTRICTED_AC_2 4 159*4882a593Smuzhiyun #define ATIF_FUNCTION_SELECT_ACTIVE_DISPLAYS 0x3 160*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_SELECT_ACTIVE_DISPLAYS 161*4882a593Smuzhiyun * ARG1: 162*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 163*4882a593Smuzhiyun * WORD - selected displays 164*4882a593Smuzhiyun * WORD - connected displays 165*4882a593Smuzhiyun * OUTPUT: 166*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 167*4882a593Smuzhiyun * WORD - selected displays 168*4882a593Smuzhiyun */ 169*4882a593Smuzhiyun # define ATIF_LCD1 (1 << 0) 170*4882a593Smuzhiyun # define ATIF_CRT1 (1 << 1) 171*4882a593Smuzhiyun # define ATIF_TV (1 << 2) 172*4882a593Smuzhiyun # define ATIF_DFP1 (1 << 3) 173*4882a593Smuzhiyun # define ATIF_CRT2 (1 << 4) 174*4882a593Smuzhiyun # define ATIF_LCD2 (1 << 5) 175*4882a593Smuzhiyun # define ATIF_DFP2 (1 << 7) 176*4882a593Smuzhiyun # define ATIF_CV (1 << 8) 177*4882a593Smuzhiyun # define ATIF_DFP3 (1 << 9) 178*4882a593Smuzhiyun # define ATIF_DFP4 (1 << 10) 179*4882a593Smuzhiyun # define ATIF_DFP5 (1 << 11) 180*4882a593Smuzhiyun # define ATIF_DFP6 (1 << 12) 181*4882a593Smuzhiyun #define ATIF_FUNCTION_GET_LID_STATE 0x4 182*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_GET_LID_STATE 183*4882a593Smuzhiyun * ARG1: none 184*4882a593Smuzhiyun * OUTPUT: 185*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 186*4882a593Smuzhiyun * BYTE - lid state (0: open, 1: closed) 187*4882a593Smuzhiyun * 188*4882a593Smuzhiyun * GET_LID_STATE only works at boot and resume, for general lid 189*4882a593Smuzhiyun * status, use the kernel provided status 190*4882a593Smuzhiyun */ 191*4882a593Smuzhiyun #define ATIF_FUNCTION_GET_TV_STANDARD_FROM_CMOS 0x5 192*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_GET_TV_STANDARD_FROM_CMOS 193*4882a593Smuzhiyun * ARG1: none 194*4882a593Smuzhiyun * OUTPUT: 195*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 196*4882a593Smuzhiyun * BYTE - 0 197*4882a593Smuzhiyun * BYTE - TV standard 198*4882a593Smuzhiyun */ 199*4882a593Smuzhiyun # define ATIF_TV_STD_NTSC 0 200*4882a593Smuzhiyun # define ATIF_TV_STD_PAL 1 201*4882a593Smuzhiyun # define ATIF_TV_STD_PALM 2 202*4882a593Smuzhiyun # define ATIF_TV_STD_PAL60 3 203*4882a593Smuzhiyun # define ATIF_TV_STD_NTSCJ 4 204*4882a593Smuzhiyun # define ATIF_TV_STD_PALCN 5 205*4882a593Smuzhiyun # define ATIF_TV_STD_PALN 6 206*4882a593Smuzhiyun # define ATIF_TV_STD_SCART_RGB 9 207*4882a593Smuzhiyun #define ATIF_FUNCTION_SET_TV_STANDARD_IN_CMOS 0x6 208*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_SET_TV_STANDARD_IN_CMOS 209*4882a593Smuzhiyun * ARG1: 210*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 211*4882a593Smuzhiyun * BYTE - 0 212*4882a593Smuzhiyun * BYTE - TV standard 213*4882a593Smuzhiyun * OUTPUT: none 214*4882a593Smuzhiyun */ 215*4882a593Smuzhiyun #define ATIF_FUNCTION_GET_PANEL_EXPANSION_MODE_FROM_CMOS 0x7 216*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_GET_PANEL_EXPANSION_MODE_FROM_CMOS 217*4882a593Smuzhiyun * ARG1: none 218*4882a593Smuzhiyun * OUTPUT: 219*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 220*4882a593Smuzhiyun * BYTE - panel expansion mode 221*4882a593Smuzhiyun */ 222*4882a593Smuzhiyun #define ATIF_FUNCTION_SET_PANEL_EXPANSION_MODE_IN_CMOS 0x8 223*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_SET_PANEL_EXPANSION_MODE_IN_CMOS 224*4882a593Smuzhiyun * ARG1: 225*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 226*4882a593Smuzhiyun * BYTE - panel expansion mode 227*4882a593Smuzhiyun * OUTPUT: none 228*4882a593Smuzhiyun */ 229*4882a593Smuzhiyun #define ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION 0xD 230*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION 231*4882a593Smuzhiyun * ARG1: 232*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 233*4882a593Smuzhiyun * WORD - gfx controller id 234*4882a593Smuzhiyun * BYTE - current temperature (degress Celsius) 235*4882a593Smuzhiyun * OUTPUT: none 236*4882a593Smuzhiyun */ 237*4882a593Smuzhiyun #define ATIF_FUNCTION_GET_GRAPHICS_DEVICE_TYPES 0xF 238*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_GET_GRAPHICS_DEVICE_TYPES 239*4882a593Smuzhiyun * ARG1: none 240*4882a593Smuzhiyun * OUTPUT: 241*4882a593Smuzhiyun * WORD - number of gfx devices 242*4882a593Smuzhiyun * WORD - device structure size in bytes (excludes device size field) 243*4882a593Smuzhiyun * DWORD - flags \ 244*4882a593Smuzhiyun * WORD - bus number } repeated structure 245*4882a593Smuzhiyun * WORD - device number / 246*4882a593Smuzhiyun */ 247*4882a593Smuzhiyun /* flags */ 248*4882a593Smuzhiyun # define ATIF_PX_REMOVABLE_GRAPHICS_DEVICE (1 << 0) 249*4882a593Smuzhiyun # define ATIF_XGP_PORT (1 << 1) 250*4882a593Smuzhiyun # define ATIF_VGA_ENABLED_GRAPHICS_DEVICE (1 << 2) 251*4882a593Smuzhiyun # define ATIF_XGP_PORT_IN_DOCK (1 << 3) 252*4882a593Smuzhiyun #define ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION 0x15 253*4882a593Smuzhiyun /* ARG0: ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION 254*4882a593Smuzhiyun * ARG1: none 255*4882a593Smuzhiyun * OUTPUT: 256*4882a593Smuzhiyun * WORD - number of reported external gfx devices 257*4882a593Smuzhiyun * WORD - device structure size in bytes (excludes device size field) 258*4882a593Smuzhiyun * WORD - flags \ 259*4882a593Smuzhiyun * WORD - bus number / repeated structure 260*4882a593Smuzhiyun */ 261*4882a593Smuzhiyun /* flags */ 262*4882a593Smuzhiyun # define ATIF_EXTERNAL_GRAPHICS_PORT (1 << 0) 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun /* ATPX */ 265*4882a593Smuzhiyun #define ATPX_FUNCTION_VERIFY_INTERFACE 0x0 266*4882a593Smuzhiyun /* ARG0: ATPX_FUNCTION_VERIFY_INTERFACE 267*4882a593Smuzhiyun * ARG1: none 268*4882a593Smuzhiyun * OUTPUT: 269*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 270*4882a593Smuzhiyun * WORD - version 271*4882a593Smuzhiyun * DWORD - supported functions bit vector 272*4882a593Smuzhiyun */ 273*4882a593Smuzhiyun /* supported functions vector */ 274*4882a593Smuzhiyun # define ATPX_GET_PX_PARAMETERS_SUPPORTED (1 << 0) 275*4882a593Smuzhiyun # define ATPX_POWER_CONTROL_SUPPORTED (1 << 1) 276*4882a593Smuzhiyun # define ATPX_DISPLAY_MUX_CONTROL_SUPPORTED (1 << 2) 277*4882a593Smuzhiyun # define ATPX_I2C_MUX_CONTROL_SUPPORTED (1 << 3) 278*4882a593Smuzhiyun # define ATPX_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION_SUPPORTED (1 << 4) 279*4882a593Smuzhiyun # define ATPX_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION_SUPPORTED (1 << 5) 280*4882a593Smuzhiyun # define ATPX_GET_DISPLAY_CONNECTORS_MAPPING_SUPPORTED (1 << 7) 281*4882a593Smuzhiyun # define ATPX_GET_DISPLAY_DETECTION_PORTS_SUPPORTED (1 << 8) 282*4882a593Smuzhiyun #define ATPX_FUNCTION_GET_PX_PARAMETERS 0x1 283*4882a593Smuzhiyun /* ARG0: ATPX_FUNCTION_GET_PX_PARAMETERS 284*4882a593Smuzhiyun * ARG1: none 285*4882a593Smuzhiyun * OUTPUT: 286*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 287*4882a593Smuzhiyun * DWORD - valid flags mask 288*4882a593Smuzhiyun * DWORD - flags 289*4882a593Smuzhiyun */ 290*4882a593Smuzhiyun /* flags */ 291*4882a593Smuzhiyun # define ATPX_LVDS_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 0) 292*4882a593Smuzhiyun # define ATPX_CRT1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 1) 293*4882a593Smuzhiyun # define ATPX_DVI1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 2) 294*4882a593Smuzhiyun # define ATPX_CRT1_RGB_SIGNAL_MUXED (1 << 3) 295*4882a593Smuzhiyun # define ATPX_TV_SIGNAL_MUXED (1 << 4) 296*4882a593Smuzhiyun # define ATPX_DFP_SIGNAL_MUXED (1 << 5) 297*4882a593Smuzhiyun # define ATPX_SEPARATE_MUX_FOR_I2C (1 << 6) 298*4882a593Smuzhiyun # define ATPX_DYNAMIC_PX_SUPPORTED (1 << 7) 299*4882a593Smuzhiyun # define ATPX_ACF_NOT_SUPPORTED (1 << 8) 300*4882a593Smuzhiyun # define ATPX_FIXED_NOT_SUPPORTED (1 << 9) 301*4882a593Smuzhiyun # define ATPX_DYNAMIC_DGPU_POWER_OFF_SUPPORTED (1 << 10) 302*4882a593Smuzhiyun # define ATPX_DGPU_REQ_POWER_FOR_DISPLAYS (1 << 11) 303*4882a593Smuzhiyun # define ATPX_DGPU_CAN_DRIVE_DISPLAYS (1 << 12) 304*4882a593Smuzhiyun # define ATPX_MS_HYBRID_GFX_SUPPORTED (1 << 14) 305*4882a593Smuzhiyun #define ATPX_FUNCTION_POWER_CONTROL 0x2 306*4882a593Smuzhiyun /* ARG0: ATPX_FUNCTION_POWER_CONTROL 307*4882a593Smuzhiyun * ARG1: 308*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 309*4882a593Smuzhiyun * BYTE - dGPU power state (0: power off, 1: power on) 310*4882a593Smuzhiyun * OUTPUT: none 311*4882a593Smuzhiyun */ 312*4882a593Smuzhiyun #define ATPX_FUNCTION_DISPLAY_MUX_CONTROL 0x3 313*4882a593Smuzhiyun /* ARG0: ATPX_FUNCTION_DISPLAY_MUX_CONTROL 314*4882a593Smuzhiyun * ARG1: 315*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 316*4882a593Smuzhiyun * WORD - display mux control (0: iGPU, 1: dGPU) 317*4882a593Smuzhiyun * OUTPUT: none 318*4882a593Smuzhiyun */ 319*4882a593Smuzhiyun # define ATPX_INTEGRATED_GPU 0 320*4882a593Smuzhiyun # define ATPX_DISCRETE_GPU 1 321*4882a593Smuzhiyun #define ATPX_FUNCTION_I2C_MUX_CONTROL 0x4 322*4882a593Smuzhiyun /* ARG0: ATPX_FUNCTION_I2C_MUX_CONTROL 323*4882a593Smuzhiyun * ARG1: 324*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 325*4882a593Smuzhiyun * WORD - i2c/aux/hpd mux control (0: iGPU, 1: dGPU) 326*4882a593Smuzhiyun * OUTPUT: none 327*4882a593Smuzhiyun */ 328*4882a593Smuzhiyun #define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION 0x5 329*4882a593Smuzhiyun /* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION 330*4882a593Smuzhiyun * ARG1: 331*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 332*4882a593Smuzhiyun * WORD - target gpu (0: iGPU, 1: dGPU) 333*4882a593Smuzhiyun * OUTPUT: none 334*4882a593Smuzhiyun */ 335*4882a593Smuzhiyun #define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION 0x6 336*4882a593Smuzhiyun /* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION 337*4882a593Smuzhiyun * ARG1: 338*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 339*4882a593Smuzhiyun * WORD - target gpu (0: iGPU, 1: dGPU) 340*4882a593Smuzhiyun * OUTPUT: none 341*4882a593Smuzhiyun */ 342*4882a593Smuzhiyun #define ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING 0x8 343*4882a593Smuzhiyun /* ARG0: ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING 344*4882a593Smuzhiyun * ARG1: none 345*4882a593Smuzhiyun * OUTPUT: 346*4882a593Smuzhiyun * WORD - number of display connectors 347*4882a593Smuzhiyun * WORD - connector structure size in bytes (excludes connector size field) 348*4882a593Smuzhiyun * BYTE - flags \ 349*4882a593Smuzhiyun * BYTE - ATIF display vector bit position } repeated 350*4882a593Smuzhiyun * BYTE - adapter id (0: iGPU, 1-n: dGPU ordered by pcie bus number) } structure 351*4882a593Smuzhiyun * WORD - connector ACPI id / 352*4882a593Smuzhiyun */ 353*4882a593Smuzhiyun /* flags */ 354*4882a593Smuzhiyun # define ATPX_DISPLAY_OUTPUT_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 0) 355*4882a593Smuzhiyun # define ATPX_DISPLAY_HPD_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 1) 356*4882a593Smuzhiyun # define ATPX_DISPLAY_I2C_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 2) 357*4882a593Smuzhiyun #define ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS 0x9 358*4882a593Smuzhiyun /* ARG0: ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS 359*4882a593Smuzhiyun * ARG1: none 360*4882a593Smuzhiyun * OUTPUT: 361*4882a593Smuzhiyun * WORD - number of HPD/DDC ports 362*4882a593Smuzhiyun * WORD - port structure size in bytes (excludes port size field) 363*4882a593Smuzhiyun * BYTE - ATIF display vector bit position \ 364*4882a593Smuzhiyun * BYTE - hpd id } reapeated structure 365*4882a593Smuzhiyun * BYTE - ddc id / 366*4882a593Smuzhiyun * 367*4882a593Smuzhiyun * available on A+A systems only 368*4882a593Smuzhiyun */ 369*4882a593Smuzhiyun /* hpd id */ 370*4882a593Smuzhiyun # define ATPX_HPD_NONE 0 371*4882a593Smuzhiyun # define ATPX_HPD1 1 372*4882a593Smuzhiyun # define ATPX_HPD2 2 373*4882a593Smuzhiyun # define ATPX_HPD3 3 374*4882a593Smuzhiyun # define ATPX_HPD4 4 375*4882a593Smuzhiyun # define ATPX_HPD5 5 376*4882a593Smuzhiyun # define ATPX_HPD6 6 377*4882a593Smuzhiyun /* ddc id */ 378*4882a593Smuzhiyun # define ATPX_DDC_NONE 0 379*4882a593Smuzhiyun # define ATPX_DDC1 1 380*4882a593Smuzhiyun # define ATPX_DDC2 2 381*4882a593Smuzhiyun # define ATPX_DDC3 3 382*4882a593Smuzhiyun # define ATPX_DDC4 4 383*4882a593Smuzhiyun # define ATPX_DDC5 5 384*4882a593Smuzhiyun # define ATPX_DDC6 6 385*4882a593Smuzhiyun # define ATPX_DDC7 7 386*4882a593Smuzhiyun # define ATPX_DDC8 8 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun /* ATCS */ 389*4882a593Smuzhiyun #define ATCS_FUNCTION_VERIFY_INTERFACE 0x0 390*4882a593Smuzhiyun /* ARG0: ATCS_FUNCTION_VERIFY_INTERFACE 391*4882a593Smuzhiyun * ARG1: none 392*4882a593Smuzhiyun * OUTPUT: 393*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 394*4882a593Smuzhiyun * WORD - version 395*4882a593Smuzhiyun * DWORD - supported functions bit vector 396*4882a593Smuzhiyun */ 397*4882a593Smuzhiyun /* supported functions vector */ 398*4882a593Smuzhiyun # define ATCS_GET_EXTERNAL_STATE_SUPPORTED (1 << 0) 399*4882a593Smuzhiyun # define ATCS_PCIE_PERFORMANCE_REQUEST_SUPPORTED (1 << 1) 400*4882a593Smuzhiyun # define ATCS_PCIE_DEVICE_READY_NOTIFICATION_SUPPORTED (1 << 2) 401*4882a593Smuzhiyun # define ATCS_SET_PCIE_BUS_WIDTH_SUPPORTED (1 << 3) 402*4882a593Smuzhiyun #define ATCS_FUNCTION_GET_EXTERNAL_STATE 0x1 403*4882a593Smuzhiyun /* ARG0: ATCS_FUNCTION_GET_EXTERNAL_STATE 404*4882a593Smuzhiyun * ARG1: none 405*4882a593Smuzhiyun * OUTPUT: 406*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 407*4882a593Smuzhiyun * DWORD - valid flags mask 408*4882a593Smuzhiyun * DWORD - flags (0: undocked, 1: docked) 409*4882a593Smuzhiyun */ 410*4882a593Smuzhiyun /* flags */ 411*4882a593Smuzhiyun # define ATCS_DOCKED (1 << 0) 412*4882a593Smuzhiyun #define ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST 0x2 413*4882a593Smuzhiyun /* ARG0: ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST 414*4882a593Smuzhiyun * ARG1: 415*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 416*4882a593Smuzhiyun * WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) 417*4882a593Smuzhiyun * WORD - valid flags mask 418*4882a593Smuzhiyun * WORD - flags 419*4882a593Smuzhiyun * BYTE - request type 420*4882a593Smuzhiyun * BYTE - performance request 421*4882a593Smuzhiyun * OUTPUT: 422*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 423*4882a593Smuzhiyun * BYTE - return value 424*4882a593Smuzhiyun */ 425*4882a593Smuzhiyun /* flags */ 426*4882a593Smuzhiyun # define ATCS_ADVERTISE_CAPS (1 << 0) 427*4882a593Smuzhiyun # define ATCS_WAIT_FOR_COMPLETION (1 << 1) 428*4882a593Smuzhiyun /* request type */ 429*4882a593Smuzhiyun # define ATCS_PCIE_LINK_SPEED 1 430*4882a593Smuzhiyun /* performance request */ 431*4882a593Smuzhiyun # define ATCS_REMOVE 0 432*4882a593Smuzhiyun # define ATCS_FORCE_LOW_POWER 1 433*4882a593Smuzhiyun # define ATCS_PERF_LEVEL_1 2 /* PCIE Gen 1 */ 434*4882a593Smuzhiyun # define ATCS_PERF_LEVEL_2 3 /* PCIE Gen 2 */ 435*4882a593Smuzhiyun # define ATCS_PERF_LEVEL_3 4 /* PCIE Gen 3 */ 436*4882a593Smuzhiyun /* return value */ 437*4882a593Smuzhiyun # define ATCS_REQUEST_REFUSED 1 438*4882a593Smuzhiyun # define ATCS_REQUEST_COMPLETE 2 439*4882a593Smuzhiyun # define ATCS_REQUEST_IN_PROGRESS 3 440*4882a593Smuzhiyun #define ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION 0x3 441*4882a593Smuzhiyun /* ARG0: ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION 442*4882a593Smuzhiyun * ARG1: none 443*4882a593Smuzhiyun * OUTPUT: none 444*4882a593Smuzhiyun */ 445*4882a593Smuzhiyun #define ATCS_FUNCTION_SET_PCIE_BUS_WIDTH 0x4 446*4882a593Smuzhiyun /* ARG0: ATCS_FUNCTION_SET_PCIE_BUS_WIDTH 447*4882a593Smuzhiyun * ARG1: 448*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 449*4882a593Smuzhiyun * WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) 450*4882a593Smuzhiyun * BYTE - number of active lanes 451*4882a593Smuzhiyun * OUTPUT: 452*4882a593Smuzhiyun * WORD - structure size in bytes (includes size field) 453*4882a593Smuzhiyun * BYTE - number of active lanes 454*4882a593Smuzhiyun */ 455*4882a593Smuzhiyun 456*4882a593Smuzhiyun #endif 457