// SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 /****************************************************************************** * * Module Name: utosi - Support for the _OSI predefined control method * * Copyright (C) 2000 - 2023, Intel Corp. * *****************************************************************************/ #include <acpi/acpi.h> #include "accommon.h" #define _COMPONENT … ACPI_MODULE_NAME("utosi") /****************************************************************************** * * ACPICA policy for new _OSI strings: * * It is the stated policy of ACPICA that new _OSI strings will be integrated * into this module as soon as possible after they are defined. It is strongly * recommended that all ACPICA hosts mirror this policy and integrate any * changes to this module as soon as possible. There are several historical * reasons behind this policy: * * 1) New BIOSs tend to test only the case where the host responds TRUE to * the latest version of Windows, which would respond to the latest/newest * _OSI string. Not responding TRUE to the latest version of Windows will * risk executing untested code paths throughout the DSDT and SSDTs. * * 2) If a new _OSI string is recognized only after a significant delay, this * has the potential to cause problems on existing working machines because * of the possibility that a new and different path through the ASL code * will be executed. * * 3) New _OSI strings are tending to come out about once per year. A delay * in recognizing a new string for a significant amount of time risks the * release of another string which only compounds the initial problem. * *****************************************************************************/ /* * Strings supported by the _OSI predefined control method (which is * implemented internally within this module.) * * March 2009: Removed "Linux" as this host no longer wants to respond true * for this string. Basically, the only safe OS strings are windows-related * and in many or most cases represent the only test path within the * BIOS-provided ASL code. * * The last element of each entry is used to track the newest version of * Windows that the BIOS has requested. */ static struct acpi_interface_info acpi_default_supported_interfaces[] = …; /******************************************************************************* * * FUNCTION: acpi_ut_initialize_interfaces * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Initialize the global _OSI supported interfaces list * ******************************************************************************/ acpi_status acpi_ut_initialize_interfaces(void) { … } /******************************************************************************* * * FUNCTION: acpi_ut_interface_terminate * * PARAMETERS: None * * RETURN: Status * * DESCRIPTION: Delete all interfaces in the global list. Sets * acpi_gbl_supported_interfaces to NULL. * ******************************************************************************/ acpi_status acpi_ut_interface_terminate(void) { … } /******************************************************************************* * * FUNCTION: acpi_ut_install_interface * * PARAMETERS: interface_name - The interface to install * * RETURN: Status * * DESCRIPTION: Install the interface into the global interface list. * Caller MUST hold acpi_gbl_osi_mutex * ******************************************************************************/ acpi_status acpi_ut_install_interface(acpi_string interface_name) { … } /******************************************************************************* * * FUNCTION: acpi_ut_remove_interface * * PARAMETERS: interface_name - The interface to remove * * RETURN: Status * * DESCRIPTION: Remove the interface from the global interface list. * Caller MUST hold acpi_gbl_osi_mutex * ******************************************************************************/ acpi_status acpi_ut_remove_interface(acpi_string interface_name) { … } /******************************************************************************* * * FUNCTION: acpi_ut_update_interfaces * * PARAMETERS: action - Actions to be performed during the * update * * RETURN: Status * * DESCRIPTION: Update _OSI interface strings, disabling or enabling OS vendor * strings or/and feature group strings. * Caller MUST hold acpi_gbl_osi_mutex * ******************************************************************************/ acpi_status acpi_ut_update_interfaces(u8 action) { … } /******************************************************************************* * * FUNCTION: acpi_ut_get_interface * * PARAMETERS: interface_name - The interface to find * * RETURN: struct acpi_interface_info if found. NULL if not found. * * DESCRIPTION: Search for the specified interface name in the global list. * Caller MUST hold acpi_gbl_osi_mutex * ******************************************************************************/ struct acpi_interface_info *acpi_ut_get_interface(acpi_string interface_name) { … } /******************************************************************************* * * FUNCTION: acpi_ut_osi_implementation * * PARAMETERS: walk_state - Current walk state * * RETURN: Status * Integer: TRUE (0) if input string is matched * FALSE (-1) if string is not matched * * DESCRIPTION: Implementation of the _OSI predefined control method. When * an invocation of _OSI is encountered in the system AML, * control is transferred to this function. * * (August 2016) * Note: _OSI is now defined to return "Ones" to indicate a match, for * compatibility with other ACPI implementations. On a 32-bit DSDT, Ones * is 0xFFFFFFFF. On a 64-bit DSDT, Ones is 0xFFFFFFFFFFFFFFFF * (ACPI_UINT64_MAX). * * This function always returns ACPI_UINT64_MAX for TRUE, and later code * will truncate this to 32 bits if necessary. * ******************************************************************************/ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state) { … }