494 lines · c
1/*2 * Copyright 2012 Advanced Micro Devices, Inc.3 *4 * Permission is hereby granted, free of charge, to any person obtaining a5 * copy of this software and associated documentation files (the "Software"),6 * to deal in the Software without restriction, including without limitation7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,8 * and/or sell copies of the Software, and to permit persons to whom the9 * Software is furnished to do so, subject to the following conditions:10 *11 * The above copyright notice and this permission notice shall be included in12 * all copies or substantial portions of the Software.13 *14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR18 * 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 OR20 * OTHER DEALINGS IN THE SOFTWARE.21 *22 */23 24#ifndef AMD_ACPI_H25#define AMD_ACPI_H26 27#define ACPI_AC_CLASS "ac_adapter"28 29struct 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 36struct 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 43struct 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 55struct 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 9961 62struct atif_qbtc_data_point {63 u8 luminance; /* luminance in percent */64 u8 ipnut_signal; /* input signal in range 0-255 */65} __packed;66 67struct 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 79#define ATIF_NOTIFY_MASK 0x380#define ATIF_NOTIFY_NONE 081#define ATIF_NOTIFY_81 182#define ATIF_NOTIFY_N 283 84struct atcs_verify_interface {85 u16 size; /* structure size in bytes (includes size field) */86 u16 version; /* version */87 u32 function_bits; /* supported functions bit vector */88} __packed;89 90#define ATCS_VALID_FLAGS_MASK 0x391 92struct atcs_pref_req_input {93 u16 size; /* structure size in bytes (includes size field) */94 u16 client_id; /* client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) */95 u16 valid_flags_mask; /* valid flags mask */96 u16 flags; /* flags */97 u8 req_type; /* request type */98 u8 perf_req; /* performance request */99} __packed;100 101struct atcs_pref_req_output {102 u16 size; /* structure size in bytes (includes size field) */103 u8 ret_val; /* return value */104} __packed;105 106struct atcs_pwr_shift_input {107 u16 size; /* structure size in bytes (includes size field) */108 u16 dgpu_id; /* client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) */109 u8 dev_acpi_state; /* D0 = 0, D3 hot = 3 */110 u8 drv_state; /* 0 = operational, 1 = not operational */111} __packed;112 113/* AMD hw uses four ACPI control methods:114 * 1. ATIF115 * ARG0: (ACPI_INTEGER) function code116 * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes117 * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes118 * ATIF provides an entry point for the gfx driver to interact with the sbios.119 * The AMD ACPI notification mechanism uses Notify (VGA, 0x81) or a custom120 * notification. Which notification is used as indicated by the ATIF Control121 * Method GET_SYSTEM_PARAMETERS. When the driver receives Notify (VGA, 0x81) or122 * a custom notification it invokes ATIF Control Method GET_SYSTEM_BIOS_REQUESTS123 * to identify pending System BIOS requests and associated parameters. For124 * example, if one of the pending requests is DISPLAY_SWITCH_REQUEST, the driver125 * will perform display device detection and invoke ATIF Control Method126 * SELECT_ACTIVE_DISPLAYS.127 *128 * 2. ATPX129 * ARG0: (ACPI_INTEGER) function code130 * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes131 * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes132 * ATPX methods are used on PowerXpress systems to handle mux switching and133 * discrete GPU power control.134 *135 * 3. ATRM136 * ARG0: (ACPI_INTEGER) offset of vbios rom data137 * ARG1: (ACPI_BUFFER) size of the buffer to fill (up to 4K).138 * OUTPUT: (ACPI_BUFFER) output buffer139 * ATRM provides an interfacess to access the discrete GPU vbios image on140 * PowerXpress systems with multiple GPUs.141 *142 * 4. ATCS143 * ARG0: (ACPI_INTEGER) function code144 * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes145 * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes146 * ATCS provides an interface to AMD chipset specific functionality.147 *148 */149/* ATIF */150#define ATIF_FUNCTION_VERIFY_INTERFACE 0x0151/* ARG0: ATIF_FUNCTION_VERIFY_INTERFACE152 * ARG1: none153 * OUTPUT:154 * WORD - structure size in bytes (includes size field)155 * WORD - version156 * DWORD - supported notifications mask157 * DWORD - supported functions bit vector158 */159/* Notifications mask */160# define ATIF_THERMAL_STATE_CHANGE_REQUEST_SUPPORTED (1 << 2)161# define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST_SUPPORTED (1 << 3)162# define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST_SUPPORTED (1 << 4)163# define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST_SUPPORTED (1 << 7)164# define ATIF_DGPU_DISPLAY_EVENT_SUPPORTED (1 << 8)165# define ATIF_GPU_PACKAGE_POWER_LIMIT_REQUEST_SUPPORTED (1 << 12)166/* supported functions vector */167# define ATIF_GET_SYSTEM_PARAMETERS_SUPPORTED (1 << 0)168# define ATIF_GET_SYSTEM_BIOS_REQUESTS_SUPPORTED (1 << 1)169# define ATIF_TEMPERATURE_CHANGE_NOTIFICATION_SUPPORTED (1 << 12)170# define ATIF_QUERY_BACKLIGHT_TRANSFER_CHARACTERISTICS_SUPPORTED (1 << 15)171# define ATIF_READY_TO_UNDOCK_NOTIFICATION_SUPPORTED (1 << 16)172# define ATIF_GET_EXTERNAL_GPU_INFORMATION_SUPPORTED (1 << 20)173#define ATIF_FUNCTION_GET_SYSTEM_PARAMETERS 0x1174/* ARG0: ATIF_FUNCTION_GET_SYSTEM_PARAMETERS175 * ARG1: none176 * OUTPUT:177 * WORD - structure size in bytes (includes size field)178 * DWORD - valid flags mask179 * DWORD - flags180 *181 * OR182 *183 * WORD - structure size in bytes (includes size field)184 * DWORD - valid flags mask185 * DWORD - flags186 * BYTE - notify command code187 *188 * flags189 * bits 1:0:190 * 0 - Notify(VGA, 0x81) is not used for notification191 * 1 - Notify(VGA, 0x81) is used for notification192 * 2 - Notify(VGA, n) is used for notification where193 * n (0xd0-0xd9) is specified in notify command code.194 * bit 2:195 * 1 - lid changes not reported though int10196 * bit 3:197 * 1 - system bios controls overclocking198 * bit 4:199 * 1 - enable overclocking200 */201#define ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS 0x2202/* ARG0: ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS203 * ARG1: none204 * OUTPUT:205 * WORD - structure size in bytes (includes size field)206 * DWORD - pending sbios requests207 * BYTE - reserved (all zeroes)208 * BYTE - thermal state: target gfx controller209 * BYTE - thermal state: state id (0: exit state, non-0: state)210 * BYTE - forced power state: target gfx controller211 * BYTE - forced power state: state id (0: forced state, non-0: state)212 * BYTE - system power source213 * BYTE - panel backlight level (0-255)214 * BYTE - GPU package power limit: target gfx controller215 * DWORD - GPU package power limit: value (24:8 fractional format, Watts)216 */217/* pending sbios requests */218# define ATIF_THERMAL_STATE_CHANGE_REQUEST (1 << 2)219# define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST (1 << 3)220# define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST (1 << 4)221# define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST (1 << 7)222# define ATIF_DGPU_DISPLAY_EVENT (1 << 8)223# define ATIF_GPU_PACKAGE_POWER_LIMIT_REQUEST (1 << 12)224/* target gfx controller */225# define ATIF_TARGET_GFX_SINGLE 0226# define ATIF_TARGET_GFX_PX_IGPU 1227# define ATIF_TARGET_GFX_PX_DGPU 2228/* system power source */229# define ATIF_POWER_SOURCE_AC 1230# define ATIF_POWER_SOURCE_DC 2231# define ATIF_POWER_SOURCE_RESTRICTED_AC_1 3232# define ATIF_POWER_SOURCE_RESTRICTED_AC_2 4233#define ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION 0xD234/* ARG0: ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION235 * ARG1:236 * WORD - structure size in bytes (includes size field)237 * WORD - gfx controller id238 * BYTE - current temperature (degress Celsius)239 * OUTPUT: none240 */241#define ATIF_FUNCTION_QUERY_BRIGHTNESS_TRANSFER_CHARACTERISTICS 0x10242/* ARG0: ATIF_FUNCTION_QUERY_BRIGHTNESS_TRANSFER_CHARACTERISTICS243 * ARG1:244 * WORD - structure size in bytes (includes size field)245 * BYTE - requested display246 * OUTPUT:247 * WORD - structure size in bytes (includes size field)248 * WORD - flags (currently all 16 bits are reserved)249 * BYTE - error code (on failure, disregard all below fields)250 * BYTE - AC level (default brightness in percent when machine has full power)251 * BYTE - DC level (default brightness in percent when machine is on battery)252 * BYTE - min input signal, in range 0-255, corresponding to 0% backlight253 * BYTE - max input signal, in range 0-255, corresponding to 100% backlight254 * BYTE - number of reported data points255 * BYTE - luminance level in percent \ repeated structure256 * BYTE - input signal in range 0-255 / does not have entries for 0% and 100%257 */258/* requested display */259# define ATIF_QBTC_REQUEST_LCD1 0260# define ATIF_QBTC_REQUEST_CRT1 1261# define ATIF_QBTC_REQUEST_DFP1 3262# define ATIF_QBTC_REQUEST_CRT2 4263# define ATIF_QBTC_REQUEST_LCD2 5264# define ATIF_QBTC_REQUEST_DFP2 7265# define ATIF_QBTC_REQUEST_DFP3 9266# define ATIF_QBTC_REQUEST_DFP4 10267# define ATIF_QBTC_REQUEST_DFP5 11268# define ATIF_QBTC_REQUEST_DFP6 12269/* error code */270# define ATIF_QBTC_ERROR_CODE_SUCCESS 0271# define ATIF_QBTC_ERROR_CODE_FAILURE 1272# define ATIF_QBTC_ERROR_CODE_DEVICE_NOT_SUPPORTED 2273#define ATIF_FUNCTION_READY_TO_UNDOCK_NOTIFICATION 0x11274/* ARG0: ATIF_FUNCTION_READY_TO_UNDOCK_NOTIFICATION275 * ARG1: none276 * OUTPUT: none277 */278#define ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION 0x15279/* ARG0: ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION280 * ARG1: none281 * OUTPUT:282 * WORD - number of reported external gfx devices283 * WORD - device structure size in bytes (excludes device size field)284 * WORD - flags \285 * WORD - bus number / repeated structure286 */287/* flags */288# define ATIF_EXTERNAL_GRAPHICS_PORT (1 << 0)289 290/* ATPX */291#define ATPX_FUNCTION_VERIFY_INTERFACE 0x0292/* ARG0: ATPX_FUNCTION_VERIFY_INTERFACE293 * ARG1: none294 * OUTPUT:295 * WORD - structure size in bytes (includes size field)296 * WORD - version297 * DWORD - supported functions bit vector298 */299/* supported functions vector */300# define ATPX_GET_PX_PARAMETERS_SUPPORTED (1 << 0)301# define ATPX_POWER_CONTROL_SUPPORTED (1 << 1)302# define ATPX_DISPLAY_MUX_CONTROL_SUPPORTED (1 << 2)303# define ATPX_I2C_MUX_CONTROL_SUPPORTED (1 << 3)304# define ATPX_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION_SUPPORTED (1 << 4)305# define ATPX_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION_SUPPORTED (1 << 5)306# define ATPX_GET_DISPLAY_CONNECTORS_MAPPING_SUPPORTED (1 << 7)307# define ATPX_GET_DISPLAY_DETECTION_PORTS_SUPPORTED (1 << 8)308#define ATPX_FUNCTION_GET_PX_PARAMETERS 0x1309/* ARG0: ATPX_FUNCTION_GET_PX_PARAMETERS310 * ARG1: none311 * OUTPUT:312 * WORD - structure size in bytes (includes size field)313 * DWORD - valid flags mask314 * DWORD - flags315 */316/* flags */317# define ATPX_LVDS_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 0)318# define ATPX_CRT1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 1)319# define ATPX_DVI1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 2)320# define ATPX_CRT1_RGB_SIGNAL_MUXED (1 << 3)321# define ATPX_TV_SIGNAL_MUXED (1 << 4)322# define ATPX_DFP_SIGNAL_MUXED (1 << 5)323# define ATPX_SEPARATE_MUX_FOR_I2C (1 << 6)324# define ATPX_DYNAMIC_PX_SUPPORTED (1 << 7)325# define ATPX_ACF_NOT_SUPPORTED (1 << 8)326# define ATPX_FIXED_NOT_SUPPORTED (1 << 9)327# define ATPX_DYNAMIC_DGPU_POWER_OFF_SUPPORTED (1 << 10)328# define ATPX_DGPU_REQ_POWER_FOR_DISPLAYS (1 << 11)329# define ATPX_DGPU_CAN_DRIVE_DISPLAYS (1 << 12)330# define ATPX_MS_HYBRID_GFX_SUPPORTED (1 << 14)331#define ATPX_FUNCTION_POWER_CONTROL 0x2332/* ARG0: ATPX_FUNCTION_POWER_CONTROL333 * ARG1:334 * WORD - structure size in bytes (includes size field)335 * BYTE - dGPU power state (0: power off, 1: power on)336 * OUTPUT: none337 */338#define ATPX_FUNCTION_DISPLAY_MUX_CONTROL 0x3339/* ARG0: ATPX_FUNCTION_DISPLAY_MUX_CONTROL340 * ARG1:341 * WORD - structure size in bytes (includes size field)342 * WORD - display mux control (0: iGPU, 1: dGPU)343 * OUTPUT: none344 */345# define ATPX_INTEGRATED_GPU 0346# define ATPX_DISCRETE_GPU 1347#define ATPX_FUNCTION_I2C_MUX_CONTROL 0x4348/* ARG0: ATPX_FUNCTION_I2C_MUX_CONTROL349 * ARG1:350 * WORD - structure size in bytes (includes size field)351 * WORD - i2c/aux/hpd mux control (0: iGPU, 1: dGPU)352 * OUTPUT: none353 */354#define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION 0x5355/* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION356 * ARG1:357 * WORD - structure size in bytes (includes size field)358 * WORD - target gpu (0: iGPU, 1: dGPU)359 * OUTPUT: none360 */361#define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION 0x6362/* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION363 * ARG1:364 * WORD - structure size in bytes (includes size field)365 * WORD - target gpu (0: iGPU, 1: dGPU)366 * OUTPUT: none367 */368#define ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING 0x8369/* ARG0: ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING370 * ARG1: none371 * OUTPUT:372 * WORD - number of display connectors373 * WORD - connector structure size in bytes (excludes connector size field)374 * BYTE - flags \375 * BYTE - ATIF display vector bit position } repeated376 * BYTE - adapter id (0: iGPU, 1-n: dGPU ordered by pcie bus number) } structure377 * WORD - connector ACPI id /378 */379/* flags */380# define ATPX_DISPLAY_OUTPUT_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 0)381# define ATPX_DISPLAY_HPD_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 1)382# define ATPX_DISPLAY_I2C_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 2)383#define ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS 0x9384/* ARG0: ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS385 * ARG1: none386 * OUTPUT:387 * WORD - number of HPD/DDC ports388 * WORD - port structure size in bytes (excludes port size field)389 * BYTE - ATIF display vector bit position \390 * BYTE - hpd id } reapeated structure391 * BYTE - ddc id /392 *393 * available on A+A systems only394 */395/* hpd id */396# define ATPX_HPD_NONE 0397# define ATPX_HPD1 1398# define ATPX_HPD2 2399# define ATPX_HPD3 3400# define ATPX_HPD4 4401# define ATPX_HPD5 5402# define ATPX_HPD6 6403/* ddc id */404# define ATPX_DDC_NONE 0405# define ATPX_DDC1 1406# define ATPX_DDC2 2407# define ATPX_DDC3 3408# define ATPX_DDC4 4409# define ATPX_DDC5 5410# define ATPX_DDC6 6411# define ATPX_DDC7 7412# define ATPX_DDC8 8413 414/* ATCS */415#define ATCS_FUNCTION_VERIFY_INTERFACE 0x0416/* ARG0: ATCS_FUNCTION_VERIFY_INTERFACE417 * ARG1: none418 * OUTPUT:419 * WORD - structure size in bytes (includes size field)420 * WORD - version421 * DWORD - supported functions bit vector422 */423/* supported functions vector */424# define ATCS_GET_EXTERNAL_STATE_SUPPORTED (1 << 0)425# define ATCS_PCIE_PERFORMANCE_REQUEST_SUPPORTED (1 << 1)426# define ATCS_PCIE_DEVICE_READY_NOTIFICATION_SUPPORTED (1 << 2)427# define ATCS_SET_PCIE_BUS_WIDTH_SUPPORTED (1 << 3)428# define ATCS_SET_POWER_SHIFT_CONTROL_SUPPORTED (1 << 7)429#define ATCS_FUNCTION_GET_EXTERNAL_STATE 0x1430/* ARG0: ATCS_FUNCTION_GET_EXTERNAL_STATE431 * ARG1: none432 * OUTPUT:433 * WORD - structure size in bytes (includes size field)434 * DWORD - valid flags mask435 * DWORD - flags (0: undocked, 1: docked)436 */437/* flags */438# define ATCS_DOCKED (1 << 0)439#define ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST 0x2440/* ARG0: ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST441 * ARG1:442 * WORD - structure size in bytes (includes size field)443 * WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num)444 * WORD - valid flags mask445 * WORD - flags446 * BYTE - request type447 * BYTE - performance request448 * OUTPUT:449 * WORD - structure size in bytes (includes size field)450 * BYTE - return value451 */452/* flags */453# define ATCS_ADVERTISE_CAPS (1 << 0)454# define ATCS_WAIT_FOR_COMPLETION (1 << 1)455/* request type */456# define ATCS_PCIE_LINK_SPEED 1457/* performance request */458# define ATCS_REMOVE 0459# define ATCS_FORCE_LOW_POWER 1460# define ATCS_PERF_LEVEL_1 2 /* PCIE Gen 1 */461# define ATCS_PERF_LEVEL_2 3 /* PCIE Gen 2 */462# define ATCS_PERF_LEVEL_3 4 /* PCIE Gen 3 */463/* return value */464# define ATCS_REQUEST_REFUSED 1465# define ATCS_REQUEST_COMPLETE 2466# define ATCS_REQUEST_IN_PROGRESS 3467#define ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION 0x3468/* ARG0: ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION469 * ARG1: none470 * OUTPUT: none471 */472#define ATCS_FUNCTION_SET_PCIE_BUS_WIDTH 0x4473/* ARG0: ATCS_FUNCTION_SET_PCIE_BUS_WIDTH474 * ARG1:475 * WORD - structure size in bytes (includes size field)476 * WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num)477 * BYTE - number of active lanes478 * OUTPUT:479 * WORD - structure size in bytes (includes size field)480 * BYTE - number of active lanes481 */482 483#define ATCS_FUNCTION_POWER_SHIFT_CONTROL 0x8484/* ARG0: ATCS_FUNCTION_POWER_SHIFT_CONTROL485 * ARG1:486 * WORD - structure size in bytes (includes size field)487 * WORD - dGPU id (bit 2-0: func num, 7-3: dev num, 15-8: bus num)488 * BYTE - Device ACPI state489 * BYTE - Driver state490 * OUTPUT: none491 */492 493#endif494