• L
    ACPI: Add facility to disable all _OSI OS vendor strings · 5dc17986
    Lv Zheng 提交于
    This patch introduces "acpi_osi=!" command line to force Linux replying
    "UNSUPPORTED" to all of the _OSI strings.  This patch is based on an
    ACPICA enhancement - the new API acpi_update_interfaces().
    
    The _OSI object provides the platform with the ability to query OSPM
    to determine the set of ACPI related interfaces, behaviors, or
    features that the operating system supports.  The argument passed to
    the _OSI is a string like the followings:
    1. Feature Group String, examples include
       Module Device
       Processor Device
       3.0 _SCP Extensions
       Processor Aggregator Device
       ...
    2. OS Vendor String, examples include
       Linux
       FreeBSD
       Windows
       ...
    
    There are AML codes provided in the ACPI namespace written in the
    following style to determine OSPM interfaces / features:
        Method(OSCK)
        {
            if (CondRefOf(_OSI, Local0))
            {
                if (\_OSI("Windows"))
                {
                    Return (One)
                }
                if (\_OSI("Windows 2006"))
                {
                    Return (Ones)
                }
                Return (Zero)
            }
            Return (Zero)
        }
    
    There is a debugging facility implemented in Linux.  Users can pass
    "acpi_osi=" boot parameters to the kernel to tune the _OSI evaluation
    result so that certain AML codes can be executed.  Current
    implementation includes:
    1. 'acpi_osi=' - this makes CondRefOf(_OSI, Local0) TRUE
    2. 'acpi_osi="Windows"' - this makes \_OSI("Windows") TRUE
    3. 'acpi_osi="!Windows"' - this makes \_OSI("Windows") FALSE
    The function to implement this feature is also used as a quirk mechanism
    in the Linux ACPI subystem.
    
    When _OSI is evaluatated by the AML codes, ACPICA replies "SUPPORTED"
    to all Windows operating system vendor strings.  This is because
    Windows operating systems return "SUPPORTED" if the argument to the
    _OSI method specifies an earlier version of Windows.  Please refer to
    the following MSDN document:
    
    How to Identify the Windows Version in ACPI by Using _OSI
    http://msdn.microsoft.com/en-us/library/hardware/gg463275.aspx
    
    This adds difficulties when developers want to feed specific Windows
    operating system vendor string to the BIOS codes for debugging
    purpose, multiple acpi_osi="!xxx" have to be specified in the command
    line to force Linux replying "UNSUPPORTED" to the Windows OS vendor
    strings listed in the AML codes.
    Signed-off-by: NLv Zheng <lv.zheng@intel.com>
    Reviewed-by: NZhang Rui <rui.zhang@intel.com>
    Acked-by: NLen Brown <len.brown@intel.com>
    Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
    5dc17986
osl.c 42.3 KB