| .. | .. |
|---|
| 52 | 52 | u8 backlight_level; /* panel backlight level (0-255) */ |
|---|
| 53 | 53 | } __packed; |
|---|
| 54 | 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 ipnut_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 | + |
|---|
| 55 | 79 | #define ATIF_NOTIFY_MASK 0x3 |
|---|
| 56 | 80 | #define ATIF_NOTIFY_NONE 0 |
|---|
| 57 | 81 | #define ATIF_NOTIFY_81 1 |
|---|
| .. | .. |
|---|
| 126 | 150 | * DWORD - supported functions bit vector |
|---|
| 127 | 151 | */ |
|---|
| 128 | 152 | /* Notifications mask */ |
|---|
| 129 | | -# define ATIF_DISPLAY_SWITCH_REQUEST_SUPPORTED (1 << 0) |
|---|
| 130 | | -# define ATIF_EXPANSION_MODE_CHANGE_REQUEST_SUPPORTED (1 << 1) |
|---|
| 131 | 153 | # define ATIF_THERMAL_STATE_CHANGE_REQUEST_SUPPORTED (1 << 2) |
|---|
| 132 | 154 | # define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST_SUPPORTED (1 << 3) |
|---|
| 133 | 155 | # define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST_SUPPORTED (1 << 4) |
|---|
| 134 | | -# define ATIF_DISPLAY_CONF_CHANGE_REQUEST_SUPPORTED (1 << 5) |
|---|
| 135 | | -# define ATIF_PX_GFX_SWITCH_REQUEST_SUPPORTED (1 << 6) |
|---|
| 136 | 156 | # define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST_SUPPORTED (1 << 7) |
|---|
| 137 | 157 | # define ATIF_DGPU_DISPLAY_EVENT_SUPPORTED (1 << 8) |
|---|
| 158 | +# define ATIF_GPU_PACKAGE_POWER_LIMIT_REQUEST_SUPPORTED (1 << 12) |
|---|
| 138 | 159 | /* supported functions vector */ |
|---|
| 139 | 160 | # define ATIF_GET_SYSTEM_PARAMETERS_SUPPORTED (1 << 0) |
|---|
| 140 | 161 | # define ATIF_GET_SYSTEM_BIOS_REQUESTS_SUPPORTED (1 << 1) |
|---|
| 141 | | -# define ATIF_SELECT_ACTIVE_DISPLAYS_SUPPORTED (1 << 2) |
|---|
| 142 | | -# define ATIF_GET_LID_STATE_SUPPORTED (1 << 3) |
|---|
| 143 | | -# define ATIF_GET_TV_STANDARD_FROM_CMOS_SUPPORTED (1 << 4) |
|---|
| 144 | | -# define ATIF_SET_TV_STANDARD_IN_CMOS_SUPPORTED (1 << 5) |
|---|
| 145 | | -# define ATIF_GET_PANEL_EXPANSION_MODE_FROM_CMOS_SUPPORTED (1 << 6) |
|---|
| 146 | | -# define ATIF_SET_PANEL_EXPANSION_MODE_IN_CMOS_SUPPORTED (1 << 7) |
|---|
| 147 | 162 | # define ATIF_TEMPERATURE_CHANGE_NOTIFICATION_SUPPORTED (1 << 12) |
|---|
| 148 | | -# define ATIF_GET_GRAPHICS_DEVICE_TYPES_SUPPORTED (1 << 14) |
|---|
| 163 | +# define ATIF_QUERY_BACKLIGHT_TRANSFER_CHARACTERISTICS_SUPPORTED (1 << 15) |
|---|
| 164 | +# define ATIF_READY_TO_UNDOCK_NOTIFICATION_SUPPORTED (1 << 16) |
|---|
| 149 | 165 | # define ATIF_GET_EXTERNAL_GPU_INFORMATION_SUPPORTED (1 << 20) |
|---|
| 150 | 166 | #define ATIF_FUNCTION_GET_SYSTEM_PARAMETERS 0x1 |
|---|
| 151 | 167 | /* ARG0: ATIF_FUNCTION_GET_SYSTEM_PARAMETERS |
|---|
| .. | .. |
|---|
| 170 | 186 | * n (0xd0-0xd9) is specified in notify command code. |
|---|
| 171 | 187 | * bit 2: |
|---|
| 172 | 188 | * 1 - lid changes not reported though int10 |
|---|
| 189 | + * bit 3: |
|---|
| 190 | + * 1 - system bios controls overclocking |
|---|
| 191 | + * bit 4: |
|---|
| 192 | + * 1 - enable overclocking |
|---|
| 173 | 193 | */ |
|---|
| 174 | 194 | #define ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS 0x2 |
|---|
| 175 | 195 | /* ARG0: ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS |
|---|
| .. | .. |
|---|
| 177 | 197 | * OUTPUT: |
|---|
| 178 | 198 | * WORD - structure size in bytes (includes size field) |
|---|
| 179 | 199 | * DWORD - pending sbios requests |
|---|
| 180 | | - * BYTE - panel expansion mode |
|---|
| 200 | + * BYTE - reserved (all zeroes) |
|---|
| 181 | 201 | * BYTE - thermal state: target gfx controller |
|---|
| 182 | 202 | * BYTE - thermal state: state id (0: exit state, non-0: state) |
|---|
| 183 | 203 | * BYTE - forced power state: target gfx controller |
|---|
| 184 | | - * BYTE - forced power state: state id |
|---|
| 204 | + * BYTE - forced power state: state id (0: forced state, non-0: state) |
|---|
| 185 | 205 | * BYTE - system power source |
|---|
| 186 | 206 | * BYTE - panel backlight level (0-255) |
|---|
| 207 | + * BYTE - GPU package power limit: target gfx controller |
|---|
| 208 | + * DWORD - GPU package power limit: value (24:8 fractional format, Watts) |
|---|
| 187 | 209 | */ |
|---|
| 188 | 210 | /* pending sbios requests */ |
|---|
| 189 | | -# define ATIF_DISPLAY_SWITCH_REQUEST (1 << 0) |
|---|
| 190 | | -# define ATIF_EXPANSION_MODE_CHANGE_REQUEST (1 << 1) |
|---|
| 191 | 211 | # define ATIF_THERMAL_STATE_CHANGE_REQUEST (1 << 2) |
|---|
| 192 | 212 | # define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST (1 << 3) |
|---|
| 193 | 213 | # define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST (1 << 4) |
|---|
| 194 | | -# define ATIF_DISPLAY_CONF_CHANGE_REQUEST (1 << 5) |
|---|
| 195 | | -# define ATIF_PX_GFX_SWITCH_REQUEST (1 << 6) |
|---|
| 196 | 214 | # define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST (1 << 7) |
|---|
| 197 | 215 | # define ATIF_DGPU_DISPLAY_EVENT (1 << 8) |
|---|
| 198 | | -/* panel expansion mode */ |
|---|
| 199 | | -# define ATIF_PANEL_EXPANSION_DISABLE 0 |
|---|
| 200 | | -# define ATIF_PANEL_EXPANSION_FULL 1 |
|---|
| 201 | | -# define ATIF_PANEL_EXPANSION_ASPECT 2 |
|---|
| 216 | +# define ATIF_GPU_PACKAGE_POWER_LIMIT_REQUEST (1 << 12) |
|---|
| 202 | 217 | /* target gfx controller */ |
|---|
| 203 | 218 | # define ATIF_TARGET_GFX_SINGLE 0 |
|---|
| 204 | 219 | # define ATIF_TARGET_GFX_PX_IGPU 1 |
|---|
| .. | .. |
|---|
| 208 | 223 | # define ATIF_POWER_SOURCE_DC 2 |
|---|
| 209 | 224 | # define ATIF_POWER_SOURCE_RESTRICTED_AC_1 3 |
|---|
| 210 | 225 | # define ATIF_POWER_SOURCE_RESTRICTED_AC_2 4 |
|---|
| 211 | | -#define ATIF_FUNCTION_SELECT_ACTIVE_DISPLAYS 0x3 |
|---|
| 212 | | -/* ARG0: ATIF_FUNCTION_SELECT_ACTIVE_DISPLAYS |
|---|
| 213 | | - * ARG1: |
|---|
| 214 | | - * WORD - structure size in bytes (includes size field) |
|---|
| 215 | | - * WORD - selected displays |
|---|
| 216 | | - * WORD - connected displays |
|---|
| 217 | | - * OUTPUT: |
|---|
| 218 | | - * WORD - structure size in bytes (includes size field) |
|---|
| 219 | | - * WORD - selected displays |
|---|
| 220 | | - */ |
|---|
| 221 | | -# define ATIF_LCD1 (1 << 0) |
|---|
| 222 | | -# define ATIF_CRT1 (1 << 1) |
|---|
| 223 | | -# define ATIF_TV (1 << 2) |
|---|
| 224 | | -# define ATIF_DFP1 (1 << 3) |
|---|
| 225 | | -# define ATIF_CRT2 (1 << 4) |
|---|
| 226 | | -# define ATIF_LCD2 (1 << 5) |
|---|
| 227 | | -# define ATIF_DFP2 (1 << 7) |
|---|
| 228 | | -# define ATIF_CV (1 << 8) |
|---|
| 229 | | -# define ATIF_DFP3 (1 << 9) |
|---|
| 230 | | -# define ATIF_DFP4 (1 << 10) |
|---|
| 231 | | -# define ATIF_DFP5 (1 << 11) |
|---|
| 232 | | -# define ATIF_DFP6 (1 << 12) |
|---|
| 233 | | -#define ATIF_FUNCTION_GET_LID_STATE 0x4 |
|---|
| 234 | | -/* ARG0: ATIF_FUNCTION_GET_LID_STATE |
|---|
| 235 | | - * ARG1: none |
|---|
| 236 | | - * OUTPUT: |
|---|
| 237 | | - * WORD - structure size in bytes (includes size field) |
|---|
| 238 | | - * BYTE - lid state (0: open, 1: closed) |
|---|
| 239 | | - * |
|---|
| 240 | | - * GET_LID_STATE only works at boot and resume, for general lid |
|---|
| 241 | | - * status, use the kernel provided status |
|---|
| 242 | | - */ |
|---|
| 243 | | -#define ATIF_FUNCTION_GET_TV_STANDARD_FROM_CMOS 0x5 |
|---|
| 244 | | -/* ARG0: ATIF_FUNCTION_GET_TV_STANDARD_FROM_CMOS |
|---|
| 245 | | - * ARG1: none |
|---|
| 246 | | - * OUTPUT: |
|---|
| 247 | | - * WORD - structure size in bytes (includes size field) |
|---|
| 248 | | - * BYTE - 0 |
|---|
| 249 | | - * BYTE - TV standard |
|---|
| 250 | | - */ |
|---|
| 251 | | -# define ATIF_TV_STD_NTSC 0 |
|---|
| 252 | | -# define ATIF_TV_STD_PAL 1 |
|---|
| 253 | | -# define ATIF_TV_STD_PALM 2 |
|---|
| 254 | | -# define ATIF_TV_STD_PAL60 3 |
|---|
| 255 | | -# define ATIF_TV_STD_NTSCJ 4 |
|---|
| 256 | | -# define ATIF_TV_STD_PALCN 5 |
|---|
| 257 | | -# define ATIF_TV_STD_PALN 6 |
|---|
| 258 | | -# define ATIF_TV_STD_SCART_RGB 9 |
|---|
| 259 | | -#define ATIF_FUNCTION_SET_TV_STANDARD_IN_CMOS 0x6 |
|---|
| 260 | | -/* ARG0: ATIF_FUNCTION_SET_TV_STANDARD_IN_CMOS |
|---|
| 261 | | - * ARG1: |
|---|
| 262 | | - * WORD - structure size in bytes (includes size field) |
|---|
| 263 | | - * BYTE - 0 |
|---|
| 264 | | - * BYTE - TV standard |
|---|
| 265 | | - * OUTPUT: none |
|---|
| 266 | | - */ |
|---|
| 267 | | -#define ATIF_FUNCTION_GET_PANEL_EXPANSION_MODE_FROM_CMOS 0x7 |
|---|
| 268 | | -/* ARG0: ATIF_FUNCTION_GET_PANEL_EXPANSION_MODE_FROM_CMOS |
|---|
| 269 | | - * ARG1: none |
|---|
| 270 | | - * OUTPUT: |
|---|
| 271 | | - * WORD - structure size in bytes (includes size field) |
|---|
| 272 | | - * BYTE - panel expansion mode |
|---|
| 273 | | - */ |
|---|
| 274 | | -#define ATIF_FUNCTION_SET_PANEL_EXPANSION_MODE_IN_CMOS 0x8 |
|---|
| 275 | | -/* ARG0: ATIF_FUNCTION_SET_PANEL_EXPANSION_MODE_IN_CMOS |
|---|
| 276 | | - * ARG1: |
|---|
| 277 | | - * WORD - structure size in bytes (includes size field) |
|---|
| 278 | | - * BYTE - panel expansion mode |
|---|
| 279 | | - * OUTPUT: none |
|---|
| 280 | | - */ |
|---|
| 281 | 226 | #define ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION 0xD |
|---|
| 282 | 227 | /* ARG0: ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION |
|---|
| 283 | 228 | * ARG1: |
|---|
| .. | .. |
|---|
| 286 | 231 | * BYTE - current temperature (degress Celsius) |
|---|
| 287 | 232 | * OUTPUT: none |
|---|
| 288 | 233 | */ |
|---|
| 289 | | -#define ATIF_FUNCTION_GET_GRAPHICS_DEVICE_TYPES 0xF |
|---|
| 290 | | -/* ARG0: ATIF_FUNCTION_GET_GRAPHICS_DEVICE_TYPES |
|---|
| 291 | | - * ARG1: none |
|---|
| 234 | +#define ATIF_FUNCTION_QUERY_BRIGHTNESS_TRANSFER_CHARACTERISTICS 0x10 |
|---|
| 235 | +/* ARG0: ATIF_FUNCTION_QUERY_BRIGHTNESS_TRANSFER_CHARACTERISTICS |
|---|
| 236 | + * ARG1: |
|---|
| 237 | + * WORD - structure size in bytes (includes size field) |
|---|
| 238 | + * BYTE - requested display |
|---|
| 292 | 239 | * OUTPUT: |
|---|
| 293 | | - * WORD - number of gfx devices |
|---|
| 294 | | - * WORD - device structure size in bytes (excludes device size field) |
|---|
| 295 | | - * DWORD - flags \ |
|---|
| 296 | | - * WORD - bus number } repeated structure |
|---|
| 297 | | - * WORD - device number / |
|---|
| 240 | + * WORD - structure size in bytes (includes size field) |
|---|
| 241 | + * WORD - flags (currently all 16 bits are reserved) |
|---|
| 242 | + * BYTE - error code (on failure, disregard all below fields) |
|---|
| 243 | + * BYTE - AC level (default brightness in percent when machine has full power) |
|---|
| 244 | + * BYTE - DC level (default brightness in percent when machine is on battery) |
|---|
| 245 | + * BYTE - min input signal, in range 0-255, corresponding to 0% backlight |
|---|
| 246 | + * BYTE - max input signal, in range 0-255, corresponding to 100% backlight |
|---|
| 247 | + * BYTE - number of reported data points |
|---|
| 248 | + * BYTE - luminance level in percent \ repeated structure |
|---|
| 249 | + * BYTE - input signal in range 0-255 / does not have entries for 0% and 100% |
|---|
| 298 | 250 | */ |
|---|
| 299 | | -/* flags */ |
|---|
| 300 | | -# define ATIF_PX_REMOVABLE_GRAPHICS_DEVICE (1 << 0) |
|---|
| 301 | | -# define ATIF_XGP_PORT (1 << 1) |
|---|
| 302 | | -# define ATIF_VGA_ENABLED_GRAPHICS_DEVICE (1 << 2) |
|---|
| 303 | | -# define ATIF_XGP_PORT_IN_DOCK (1 << 3) |
|---|
| 251 | +/* requested display */ |
|---|
| 252 | +# define ATIF_QBTC_REQUEST_LCD1 0 |
|---|
| 253 | +# define ATIF_QBTC_REQUEST_CRT1 1 |
|---|
| 254 | +# define ATIF_QBTC_REQUEST_DFP1 3 |
|---|
| 255 | +# define ATIF_QBTC_REQUEST_CRT2 4 |
|---|
| 256 | +# define ATIF_QBTC_REQUEST_LCD2 5 |
|---|
| 257 | +# define ATIF_QBTC_REQUEST_DFP2 7 |
|---|
| 258 | +# define ATIF_QBTC_REQUEST_DFP3 9 |
|---|
| 259 | +# define ATIF_QBTC_REQUEST_DFP4 10 |
|---|
| 260 | +# define ATIF_QBTC_REQUEST_DFP5 11 |
|---|
| 261 | +# define ATIF_QBTC_REQUEST_DFP6 12 |
|---|
| 262 | +/* error code */ |
|---|
| 263 | +# define ATIF_QBTC_ERROR_CODE_SUCCESS 0 |
|---|
| 264 | +# define ATIF_QBTC_ERROR_CODE_FAILURE 1 |
|---|
| 265 | +# define ATIF_QBTC_ERROR_CODE_DEVICE_NOT_SUPPORTED 2 |
|---|
| 266 | +#define ATIF_FUNCTION_READY_TO_UNDOCK_NOTIFICATION 0x11 |
|---|
| 267 | +/* ARG0: ATIF_FUNCTION_READY_TO_UNDOCK_NOTIFICATION |
|---|
| 268 | + * ARG1: none |
|---|
| 269 | + * OUTPUT: none |
|---|
| 270 | + */ |
|---|
| 304 | 271 | #define ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION 0x15 |
|---|
| 305 | 272 | /* ARG0: ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION |
|---|
| 306 | 273 | * ARG1: none |
|---|